Descripción General
Snap2Data API es un servicio de extracción inteligente de datos de documentos que utiliza inteligencia artificial avanzada para procesar facturas, albaranes, recibos y otros documentos comerciales, devolviendo la información estructurada en formato JSON.
Características Principales
- Procesamiento Multi-formato: Soporta imágenes (JPG, PNG) y documentos PDF
- Lotes en una petición: Varios ficheros en un solo
POST /documents/process(mismocustomerIdydocumentType) - Extracción Inteligente: Utiliza IA para identificar y extraer datos con alta precisión
- Plantillas Personalizables: Esquemas de extracción adaptados a necesidades específicas
- API RESTful: Integración sencilla con cualquier lenguaje de programación
- Respuestas Rápidas: Procesamiento optimizado en segundos
- Seguridad Empresarial: Autenticación por API Key y logs de auditoría completos
- Feedback STP: El integrador puede confirmar o corregir extracciones con
POST /documents/feedbackusando elrequestIddevuelto
Casos de Uso
- Automatización Contable: Digitalización automática de facturas
- Gestión de Almacén: Procesamiento de albaranes de entrega
- Conciliación Bancaria: Extracción de datos de recibos
- Auditoría Fiscal: Procesamiento masivo de documentos
- ERP Integration: Alimentación automática de sistemas empresariales
Requisitos mínimos de los documentos
Para obtener buenos resultados al procesar facturas, albaranes, recibos y otros documentos, los ficheros deben cumplir unos requisitos básicos de formato, tamaño y calidad.
Formatos admitidos
- Imágenes: JPG, JPEG y PNG
- Documentos: PDF
No se admiten Word, Excel, WebP, GIF, TIFF, HEIC ni otros formatos.
Tamaño y cantidad
- Tamaño máximo: 10 MB por fichero
- Varios documentos: se pueden enviar hasta 20 ficheros en el mismo envío
Si envías un PDF
- Debe ser un PDF válido y legible.
- No puede llevar contraseña ni estar bloqueado para lectura.
- Funcionan mejor los PDFs generados digitalmente (factura electrónica, exportación desde un programa de gestión) que los escaneos de mala calidad.
- Si el documento tiene varias páginas, conviene que la información principal esté en la primera página.
Si envías una imagen
- Debe ser una foto o escaneo nítido en JPG o PNG.
- El documento debe verse completo, sin recortes importantes.
- Conviene que la imagen sea recta, con buena luz y sin sombras fuertes.
- Para texto pequeño, una resolución orientativa de al menos 1000 píxeles de ancho mejora la lectura.
Validación automática de calidad
Antes de llamar a la IA, POST /documents/process comprueba en el servidor que cada fichero
cumple unos criterios mínimos de legibilidad (resolución, nitidez, contraste en imágenes; integridad y
calidad en PDFs escaneados). Si el documento no pasa, la API responde con HTTP 400,
un código específico y el detalle en quality — sin consumir cuota ni ejecutar la extracción.
Imágenes (JPG / PNG)
- Ancho mínimo orientativo: 1000 px
- Imagen nítida y con contraste suficiente
- Sin contraseña ni fichero corrupto
- PDF digital (con capa de texto): sin exigencias extra de raster
- PDF escaneado: resolución y nitidez suficientes en la 1ª página
- Multipágina: el contenido principal debe estar en la página 1
Respuesta con avisos de calidad (procesamiento OK)
En algunos despliegues el fichero se procesa aunque haya observaciones. Un solo fichero:
{
"success": true,
"requestId": "req_...",
"qualityWarnings": [
{ "code": "LOW_RESOLUTION", "message": "Ancho insuficiente (800px; mínimo 1000px)", "check": "min_width" }
],
"data": { "extractedData": { ... } }
}
En lotes, cada elemento puede incluir metadata.qualityWarnings y metadata.qualityChecks.
Rechazo por calidad insuficiente
{
"success": false,
"requestId": "req_...",
"error": "Calidad de documento insuficiente",
"code": "LOW_RESOLUTION",
"message": "Ancho insuficiente (800px; mínimo 1000px)",
"quality": {
"checks": [ ... ],
"metrics": { "width": 800, "height": 1200 }
}
}
Códigos habituales: LOW_RESOLUTION, BLURRY_IMAGE, LOW_CONTRAST,
PDF_PASSWORD_PROTECTED, PDF_INVALID, PDF_SCANNED_LOW_QUALITY,
MAIN_CONTENT_NOT_ON_FIRST_PAGE.
Autenticación
Obtener API Key
Contacta con nuestro equipo comercial para obtener tu API Key personalizada:
- Email: comercial@wittymindsets.com
- Web: https://www.wittymindsets.com/contacto
Usar API Key
Incluye tu API Key en todas las peticiones HTTP mediante la cabecera X-API-Key:
X-API-Key: sk-your-api-key-here
Información Base
URL Base
https://api.wittymindsets.com/snap2data/
Formato de Respuesta
Todas las respuestas utilizan formato JSON con estructura consistente.
Límites de Uso
- Tamaño máximo por fichero: 10MB
- Ficheros por petición: hasta 20 (configurable, máx. 50)
- Tipos soportados: JPG, PNG, PDF
- Rate limit global: 100 req / 15 min (por IP)
- Rate limit
/process: 60 req / min (por cliente +customerId) - Timeout: 120 s (ajustable; lotes pueden requerir más tiempo)
Endpoints Disponibles
1. Health Check
Verifica el estado del servicio y sus dependencias.
/health
Respuesta exitosa:
{
"status": "OK",
"timestamp": "2025-06-15T10:30:00.000Z",
"instanceId": "api-prod-1",
"uptime": 12345.67,
"version": "{{VERSION}}",
"releaseDate": "Mayo 2026",
"environment": "production",
"database": "OK",
"memory": { "rss": 0, "heapTotal": 0, "heapUsed": 0 },
"system": { "platform": "linux", "arch": "x64", "nodeVersion": "v20.0.0" }
}
instanceId identifica la instancia del API (útil en monitorización). Si la BD falla, status pasa a DEGRADED y la respuesta es HTTP 503.
2. Información de la API
Devuelve la lista de endpoints públicos documentados (mismo contenido que la sección «Endpoints Disponibles» de esta guía), en JSON: un array de objetos { "method", "path" } (rutas relativas al prefijo de la API, p. ej. /snap2data).
/info
3. Tipos de Documento
Obtiene la lista de tipos de documento válidos.
/documents/types
Cabeceras requeridas:
X-API-Key: tu-api-key
4. Procesar documento(s) (Principal)
Procesa uno o varios documentos en la misma petición y extrae los datos estructurados. Repite el campo document por cada fichero (mismo customerId y documentType).
/documents/process
Parámetros (form-data):
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
document |
file | ✅ | Uno o más archivos (repetir document; JPG, PNG o PDF; máx. 10MB cada uno; hasta 20 por petición por defecto) |
documentType |
string | ✅ | Tipo de documento (factura, albaran, etc.) |
customerId |
string | ✅ | Identificador de cliente final |
extractLines |
boolean | ❌ | Si se extraen las líneas de detalle del documento. Por defecto: true. Si es false, solo se extraen datos de cabecera (emisor, receptor, fechas, totales, vencimientos). |
extractLines:
true(por defecto): Extrae toda la información del documento, incluyendo líneas de detalle, items, productos y servicios.false: Solo extrae información de cabecera: datos del emisor y receptor, número y fecha del documento, totales (subtotal, IVA, total), vencimientos y plazos de pago, observaciones generales. NO extrae líneas de detalle.
Respuestas
- Un fichero, éxito: HTTP
200—{ success, requestId, data: { extractedData, ... } }; opcionalmentequalityWarningssi hay observaciones de calidad. - Importante: Guarda
requestId(p. ej.req_1781896390185_abc) para enviar feedback tras revisar en tu ERP. - Calidad insuficiente: HTTP
400—code(p. ej.LOW_RESOLUTION),messagey objetoquality. Ver Validación automática de calidad. - Varios ficheros, todos OK: HTTP
200—summary+results[] - Varios ficheros, éxito parcial: HTTP
207— mismo cuerpo; revisa cada elemento deresults(success: true/false) - Varios ficheros, todos fallan: HTTP
422(o400si todos fallan por calidad del fichero)
En lotes, summary puede incluir quotaCharged, quotaReleased y quotaChargeMode (por defecto solo los ficheros con success: true consumen cuota reservada). Ver documents/politica-cuotas.md en el repositorio.
Ejemplo respuesta lote (207):
{
"success": false,
"summary": {
"total": 3,
"ok": 2,
"failed": 1,
"processingTimeMs": 12500,
"quotaCharged": 2,
"quotaReleased": 1,
"quotaChargeMode": "success_only"
},
"results": [
{ "index": 0, "success": true, "fileName": "a.pdf", "data": { "extractedData": {} } },
{ "index": 1, "success": false, "fileName": "b.pdf", "code": "PROCESSING_ERROR", "message": "..." }
]
}
5. Estadísticas Generales
Obtiene estadísticas generales de uso de tu cuenta.
/documents/stats
6. Feedback de procesamiento (STP)
Tras revisar la extracción en tu ERP, envía el resultado usando el requestId
devuelto por POST /documents/process. Sirve para medir STP y mejorar la memoria contextual
cuando el usuario corrige campos.
/documents/feedback
Cabeceras:
X-API-Key: tu-api-key
Content-Type: application/json
Cuerpo JSON:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
requestId |
string | ✅ | Valor req_* de la respuesta de procesamiento |
outcome |
string | ✅ | approved (sin cambios), corrected (con correcciones), rejected (no contabilizado) |
customerId |
string | ❌ | Recomendado: debe coincidir con la petición original |
correctedData |
object | ⚠️ | Obligatorio si outcome=corrected (alternativa a correctedFields): JSON completo corregido, mismo formato que extractedData |
correctedFields |
array | ⚠️ | Alternativa a correctedData: lista [{ "path": "factura_rebuda.numero_factura", "correctedValue": "F-123" }] |
rejectionReason |
string | ❌ | Si rejected: wrong_document_type, unreadable, duplicate, wrong_totals, other |
erpReference |
string | ❌ | ID interno del documento en tu ERP (trazabilidad) |
comment |
string | ❌ | Nota libre del revisor |
Respuesta exitosa (201 / 200 si actualiza):
{
"success": true,
"feedbackId": 42,
"requestId": "req_1781896390185_abc",
"outcome": "corrected",
"learnedFromFeedback": true,
"updated": false,
"message": "Feedback registrado"
}
Un mismo requestId solo admite un registro por cuenta; un segundo envío actualiza el feedback anterior.
Recomendaciones para el integrador
- Procesar con
POST /documents/processy guardar elrequestId(req_*) junto al documento en tu ERP. - Tras la revisión humana (o la validación automática), enviar
POST /documents/feedbacksiempre que el documento se contabilice, se corrija o se descarte. - Incluir
customerIdpara validación cruzada yerpReferencepara trazabilidad interna.
Cuándo usar cada outcome
| Valor | Enviar cuando… | Datos a incluir |
|---|---|---|
approved |
La extracción se aceptó tal cual (STP — straight-through processing). | Solo requestId + customerId recomendado. |
corrected |
Se contabilizó pero hubo correcciones manuales en el ERP. | correctedFields (cambios puntuales) o correctedData (JSON completo corregido). Preferible si hubo cambios: aporta más valor que approved. |
rejected |
No se contabilizó (duplicado, ilegible, tipo incorrecto, etc.). | rejectionReason y comment si aplica. |
Qué hace Snap2Data con el feedback
- Métricas STP: permite medir % de documentos aprobados sin corrección (
approved/ total). - Memoria contextual (si
outcomeesapprovedocorrectedylearnedFromFeedback: true):- Actualiza proveedores conocidos del
customerId(CIF, nombre, si conviene visión o texto en PDF). - Refuerza el perfil receptor (empresa registrada en el ERP).
- En peticiones futuras del mismo customer: mejora hints en el prompt y el router PDF
auto.
- Actualiza proveedores conocidos del
- Con
corrected, el aprendizaje usa los valores corregidos (correctedFields/correctedData), no solo la extracción original. - Con
rejected, no se actualiza memoria (learnedFromFeedback: false).
La revisión humana en el ERP sigue siendo necesaria; el feedback cierra el ciclo y mejora casos recurrentes, no sustituye el HITL.
Ejemplos de Código
Procesar documento(s)
# Verificar estado de la API
curl -X GET https://api.wittymindsets.com/snap2data/health
# Procesar una factura (con líneas de detalle - por defecto)
curl -X POST \
https://api.wittymindsets.com/snap2data/documents/process \
-H "X-API-Key: tu-api-key" \
-F "document=@factura.pdf" \
-F "documentType=factura" \
-F "customerId=client-001" \
-F "extractLines=true"
# Procesar una factura (solo cabecera, sin líneas)
curl -X POST \
https://api.wittymindsets.com/snap2data/documents/process \
-H "X-API-Key: tu-api-key" \
-F "document=@factura.pdf" \
-F "documentType=factura" \
-F "customerId=client-001" \
-F "extractLines=false"
# Procesar varios documentos en un lote (mismo customer y tipo)
curl -X POST \
https://api.wittymindsets.com/snap2data/documents/process \
-H "X-API-Key: tu-api-key" \
-F "document=@factura1.pdf" \
-F "document=@factura2.pdf" \
-F "documentType=factura" \
-F "customerId=client-001"
Feedback tras revisión en el ERP
# Aprobación sin cambios (STP)
curl -X POST \
https://api.wittymindsets.com/snap2data/documents/feedback \
-H "X-API-Key: tu-api-key" \
-H "Content-Type: application/json" \
-d '{
"requestId": "req_1781896390185_abc",
"customerId": "CUSTOMER_ID",
"outcome": "approved",
"erpReference": "FAC-2026-0042"
}'
# Corrección de campos concretos
curl -X POST \
https://api.wittymindsets.com/snap2data/documents/feedback \
-H "X-API-Key: tu-api-key" \
-H "Content-Type: application/json" \
-d '{
"requestId": "req_1781896390185_abc",
"customerId": "CUSTOMER_ID",
"outcome": "corrected",
"correctedFields": [
{ "path": "factura_rebuda.numero_factura", "correctedValue": "FRA 20260323" }
]
}'
# Rechazo (no se contabiliza en el ERP)
curl -X POST \
https://api.wittymindsets.com/snap2data/documents/feedback \
-H "X-API-Key: tu-api-key" \
-H "Content-Type: application/json" \
-d '{
"requestId": "req_1781896390185_abc",
"outcome": "rejected",
"rejectionReason": "duplicate"
}'
Procesar documento(s)
const FormData = require('form-data');
const fs = require('fs');
const axios = require('axios');
class Snap2DataAPI {
constructor(apiKey, baseUrl = 'https://api.wittymindsets.com/snap2data') {
this.apiKey = apiKey;
this.baseUrl = baseUrl.replace(/\/$/, '');
}
async processDocument(filePath, documentType, customerId, extractLines = true) {
const form = new FormData();
form.append('document', fs.createReadStream(filePath));
form.append('documentType', documentType);
form.append('customerId', customerId);
form.append('extractLines', String(extractLines));
const response = await axios.post(
`${this.baseUrl}/documents/process`,
form,
{
headers: { 'X-API-Key': this.apiKey, ...form.getHeaders() },
timeout: 120000
}
);
return response.data;
}
async sendFeedback(payload) {
const response = await axios.post(
`${this.baseUrl}/documents/feedback`,
payload,
{
headers: {
'X-API-Key': this.apiKey,
'Content-Type': 'application/json'
},
timeout: 30000
}
);
return response.data;
}
}
const api = new Snap2DataAPI('tu-api-key');
const result = await api.processDocument(
'./factura.pdf', 'factura', 'client-001'
);
// Guardar result.requestId para el feedback
Feedback tras revisión en el ERP
// Aprobación sin cambios (STP)
await api.sendFeedback({
requestId: 'req_1781896390185_abc',
customerId: 'CUSTOMER_ID',
outcome: 'approved',
erpReference: 'FAC-2026-0042'
});
// Corrección de campos concretos
await api.sendFeedback({
requestId: 'req_1781896390185_abc',
customerId: 'CUSTOMER_ID',
outcome: 'corrected',
correctedFields: [
{ path: 'factura_rebuda.numero_factura', correctedValue: 'FRA 20260323' }
]
});
// Rechazo
await api.sendFeedback({
requestId: 'req_1781896390185_abc',
outcome: 'rejected',
rejectionReason: 'duplicate'
});
Procesar documento(s)
import requests
class Snap2DataAPI:
def __init__(self, api_key, base_url='https://api.wittymindsets.com/snap2data'):
self.api_key = api_key
self.base_url = base_url.rstrip('/')
def process_document(self, file_path, document_type, customer_id, extract_lines=True):
url = f'{self.base_url}/documents/process'
with open(file_path, 'rb') as f:
response = requests.post(
url,
headers={'X-API-Key': self.api_key},
files={'document': f},
data={
'documentType': document_type,
'customerId': customer_id,
'extractLines': str(extract_lines).lower()
},
timeout=120
)
response.raise_for_status()
return response.json()
def send_feedback(self, payload):
response = requests.post(
f'{self.base_url}/documents/feedback',
headers={
'X-API-Key': self.api_key,
'Content-Type': 'application/json'
},
json=payload,
timeout=30
)
response.raise_for_status()
return response.json()
api = Snap2DataAPI('tu-api-key')
result = api.process_document('./factura.pdf', 'factura', 'client-001')
# Guardar result['requestId'] para el feedback
Feedback tras revisión en el ERP
# Aprobación sin cambios (STP)
api.send_feedback({
'requestId': 'req_1781896390185_abc',
'customerId': 'CUSTOMER_ID',
'outcome': 'approved',
'erpReference': 'FAC-2026-0042'
})
# Corrección de campos concretos
api.send_feedback({
'requestId': 'req_1781896390185_abc',
'customerId': 'CUSTOMER_ID',
'outcome': 'corrected',
'correctedFields': [
{'path': 'factura_rebuda.numero_factura', 'correctedValue': 'FRA 20260323'}
]
})
# Rechazo
api.send_feedback({
'requestId': 'req_1781896390185_abc',
'outcome': 'rejected',
'rejectionReason': 'duplicate'
})
Tabla de Códigos de Error HTTP y Específicos de la API
Errores de Autenticación (401-403)
| Código HTTP | Código Específico | Descripción | Solución |
|---|---|---|---|
| 401 | MISSING_API_KEY |
No se ha proporcionado la clave API | Incluye el header X-API-Key o Authorization: Bearer <token> |
| 401 | INVALID_API_KEY |
La clave API no es válida o está deshabilitada | Verifica que la clave API sea correcta y esté activa |
| 401 | CLIENT_NOT_AUTHENTICATED |
Cliente no autenticado para gestionar plantillas | Asegúrate de que la sesión esté activa |
| 403 | INVALID_CUSTOMER_ID |
El ID de cliente especificado no es válido | Verifica que el customerId exista y pertenezca a tu cuenta |
| 403 | TEMPLATE_FORBIDDEN |
Sin permisos para acceder a esta plantilla | Solo puedes acceder a plantillas propias o públicas |
Errores de Validación (400)
| Código HTTP | Código Específico | Descripción | Solución |
|---|---|---|---|
| 400 | INVALID_LIMIT |
Parámetro de límite no válido | Usa un número entre 1 y 100 |
| 400 | FILE_TOO_LARGE |
Archivo supera el tamaño máximo | Reduce el fichero (máx. 10MB por defecto) |
| 400 | TOO_MANY_FILES / INVALID_FILE_FIELD |
Demasiados ficheros o nombre de campo incorrecto | Usa solo el campo document (repetido); respeta el máximo por petición |
| 400 | INVALID_FILE_TYPE |
Tipo MIME no permitido | Envía JPG, PNG o PDF |
| 400 | INVALID_FILE |
Fichero no decodificable o PDF sin cabecera válida | Verifica que el archivo sea realmente JPG, PNG o PDF |
| 400 | LOW_RESOLUTION / BLURRY_IMAGE / LOW_CONTRAST |
Calidad visual de imagen insuficiente | Sube una imagen más nítida, con más resolución y mejor contraste. Ver requisitos de calidad |
| 400 | PDF_PASSWORD_PROTECTED / PDF_INVALID |
PDF protegido con contraseña o corrupto | Quita la contraseña o reexporta el PDF |
| 400 | PDF_SCANNED_LOW_QUALITY |
PDF escaneado con baja resolución o nitidez en la 1ª página | Preferir PDF digital; si es escaneo, subir a mayor resolución |
| 400 | MAIN_CONTENT_NOT_ON_FIRST_PAGE |
El contenido principal parece estar fuera de la página 1 | Reordena páginas o envía solo la página relevante |
| 400 | MISSING_REQUEST_ID / INVALID_OUTCOME |
Feedback sin requestId o outcome inválido |
Usa el requestId de /process y approved, corrected o rejected |
| 400 | MISSING_CORRECTIONS / CUSTOMER_MISMATCH |
Corrección incompleta o customerId no coincide |
Envía correctedData o correctedFields; verifica el customer de la petición |
Errores de Recursos No Encontrados (404)
| Código HTTP | Código Específico | Descripción | Solución |
|---|---|---|---|
| 404 | NOT_FOUND |
Endpoint no encontrado | Verifica la URL del endpoint |
| 404 | CUSTOMER_NOT_FOUND |
Cliente no encontrado | Verifica que el customerId exista |
| 404 | REQUEST_NOT_FOUND |
No hay procesamiento con ese requestId |
Usa el requestId devuelto por tu cuenta en /process |
| 404 | TEMPLATE_NOT_FOUND |
Plantilla no encontrada | Verifica que el ID de plantilla sea correcto |
Errores de Límites (413-429)
| Código HTTP | Código Específico | Descripción | Solución |
|---|---|---|---|
| 413 | FILE_TOO_LARGE |
Archivo demasiado grande | Reduce el tamaño del archivo (máx. 10MB) |
| 413 | PAYLOAD_TOO_LARGE |
Cuerpo de petición demasiado grande | Reduce el tamaño del cuerpo de la petición |
| 429 | MONTHLY_LIMIT_EXCEEDED |
Límite mensual del cliente (auth) | Espera al siguiente periodo o contacta soporte |
| 429 | CUSTOMER_MONTHLY_LIMIT_EXCEEDED |
Sin cuota mensual para ese customerId |
Reduce ficheros en la petición o amplía cuota |
| 429 | CLIENT_BATCH_QUOTA_EXCEEDED |
Bolsa prepago compartida agotada | Contacta para recargar cuota prepago |
| 429 | Rate limit general | Límite global de peticiones (IP) | Espera ~15 minutos |
| 429 | Rate limit /process |
Límite de procesamiento (60/min por defecto) | Espera ~1 minuto o reparte peticiones |
| 207 | — | Lote multi-fichero con éxitos y fallos mezclados | Procesa results[]; los fallidos no consumen cuota (success_only) |
Errores de Procesamiento (422)
| Código HTTP | Código Específico | Descripción | Solución |
|---|---|---|---|
| 422 | PROCESSING_ERROR |
Error en el procesamiento del documento | Verifica que el documento sea legible |
| 422 | TEMPLATE_REQUIRED |
Plantilla requerida para procesar | Crea o asigna una plantilla válida |
| 422 | TEMPLATE_VALIDATION_ERROR |
Error en validación de plantilla | Revisa la configuración de la plantilla |
Errores de Servicio (503)
| Código HTTP | Código Específico | Descripción | Solución |
|---|---|---|---|
| 503 | SERVICE_UNAVAILABLE |
Servicio de procesamiento no configurado | Contacta con el administrador |
| 503 | AI_SERVICE_NOT_CONFIGURED |
Servicio de IA no configurado | Verifica la configuración de Anthropic |
| 503 | PROCESSING_QUEUE_FULL |
Cola de procesamiento saturada | Reintenta en unos segundos; reduce concurrencia de peticiones |
| 503 | AI_SERVICE_UNAVAILABLE |
Servicio de IA temporalmente no disponible | Vuelve a intentar más tarde |
| 503 | AI_SERVICE_UNAUTHORIZED |
Servicio de IA no autorizado | Problema de configuración, contacta soporte |
| 503 | AI_SERVICE_RATE_LIMITED |
Servicio de IA sobrecargado | Espera y vuelve a intentar (retry después de 60s) |
| 503 | AI_SERVICE_SERVER_ERROR |
Problemas internos del servicio de IA | Vuelve a intentar más tarde (retry después de 5min) |
Errores Internos (500)
| Código HTTP | Código Específico | Descripción | Solución |
|---|---|---|---|
| 500 | INTERNAL_SERVER_ERROR |
Error interno del servidor | Contacta con soporte técnico |
| 500 | AUTH_INTERNAL_ERROR |
Error interno de autenticación | Vuelve a intentar o contacta soporte |
| 500 | CUSTOMERS_ERROR |
Error al obtener clientes | Problema interno, contacta soporte |
| 500 | TEMPLATES_ERROR |
Error al obtener plantillas | Problema interno, contacta soporte |
| 500 | TEMPLATE_FOR_DOCUMENT_ERROR |
Error al obtener plantilla por documento | Problema interno, contacta soporte |
| 500 | CUSTOMER_STATS_ERROR |
Error al obtener estadísticas del cliente | Problema interno, contacta soporte |
| 500 | STATS_ERROR |
Error al obtener estadísticas | Problema interno, contacta soporte |
| 500 | HISTORY_ERROR |
Error al obtener historial | Problema interno, contacta soporte |
| 500 | INTERNAL_ERROR |
Error inesperado en procesamiento | Contacta con soporte técnico |
Errores de Seguridad y CORS
| Código HTTP | Código Específico | Descripción | Solución |
|---|---|---|---|
| 403 | CORS_NOT_ALLOWED |
Origen no permitido por CORS | Configura el dominio en la lista de orígenes permitidos |
Contacto de Soporte
Para errores persistentes o dudas sobre la implementación, contacta con el equipo de soporte técnico incluyendo: código de error específico, RequestId (si está disponible), y detalles de la petición realizada.
Soporte y Contacto
Soporte Técnico
- Email: support@wittymindsets.com
- Horario: Lunes a Viernes, 9:00 - 18:00 (CET)
- Tiempo de respuesta: < 8 horas laborales
Soporte Comercial
- Email: comercial@wittymindsets.com
- Horario: Lunes a Viernes, 9:00 - 18:00 (CET)