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 (mismo customerId y documentType)
  • 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/feedback usando el requestId devuelto

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.
Evitar: PDFs dañados, protegidos con contraseña o con el contenido importante solo en páginas posteriores.

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.
Evitar: fotos borrosas, inclinadas, con reflejos o con parte del documento fuera de encuadre.
Resumen: JPG, PNG o PDF · hasta 10 MB por fichero · documento legible, sin contraseña y con buena calidad visual.

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

PDF

  • 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:

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
Importante: Mantén tu API Key segura y no la compartas públicamente. Cada API Key está vinculada a tu cuenta.

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.

GET /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).

GET /info
3. Tipos de Documento

Obtiene la lista de tipos de documento válidos.

GET /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).

POST /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).
Nota sobre 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, ... } }; opcionalmente qualityWarnings si hay observaciones de calidad.
  • Importante: Guarda requestId (p. ej. req_1781896390185_abc) para enviar feedback tras revisar en tu ERP.
  • Calidad insuficiente: HTTP 400code (p. ej. LOW_RESOLUTION), message y objeto quality. Ver Validación automática de calidad.
  • Varios ficheros, todos OK: HTTP 200summary + results[]
  • Varios ficheros, éxito parcial: HTTP 207 — mismo cuerpo; revisa cada elemento de results (success: true/false)
  • Varios ficheros, todos fallan: HTTP 422 (o 400 si 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.

GET /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.

POST /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

Flujo recomendado
  1. Procesar con POST /documents/process y guardar el requestId (req_*) junto al documento en tu ERP.
  2. Tras la revisión humana (o la validación automática), enviar POST /documents/feedback siempre que el documento se contabilice, se corrija o se descarte.
  3. Incluir customerId para validación cruzada y erpReference para 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 outcome es approved o corrected y learnedFromFeedback: 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.
  • 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)