Saltar al contenido principal

Errores

Toda respuesta de error de la API sigue la misma estructura. Esta página la documenta y enumera los códigos posibles.

Estructura del body

{
"timestamp": "2026-05-06T10:15:00",
"status": 400,
"error": "Bad Request",
"message": "externalId: External ID is required, price: Price must be positive",
"path": "/api/plugin/shops/shop_abc/products/sync"
}
CampoTipoDescripción
timestampstring (ISO-8601)Momento del error en el servidor
statusintegerCódigo HTTP (mismo que la respuesta)
errorstringFrase corta (Bad Request, Unauthorized, etc.)
messagestringDetalle legible. Para 400 Bean Validation: lista campo: motivo separados por coma
pathstringRuta de la petición

Códigos HTTP

CódigoSignificadoAcción cliente
400 Bad RequestValidación de payload (Bean Validation)Revisar message y corregir el campo señalado
401 UnauthorizedFalta o es inválida la cabecera de auth (X-Widget-Token o X-Shop-API-Key)Volver a generar/rotar credenciales o revisar entorno
403 ForbiddenOrigin mismatch, cross-tenant, role insuficienteRevisar dominio configurado en la tienda y shopId
404 Not FoundRecurso inexistente (shop, producto, etc.)Verificar el ID
409 ConflictEstado del recurso incompatible (por ejemplo doble verify)Ver mensaje
422 Unprocessable EntityError lógico (ej. parentExternalId no existe en el batch ni en BD)Ajustar payload
429 Too Many RequestsRate limitEsperar Retry-After, ver Rate Limits
500 Internal Server ErrorError inesperado en backendReintentar con backoff; si persiste, Soporte con request id

Errores a nivel de campo (400)

Los errores de Bean Validation se concatenan en el campo message, separados por comas, con el formato campo: motivo. Ejemplos reales:

externalId: External ID is required
name: Product name is required
price: Price must be positive
description: size must be between 0 and 5000
currency: size must be between 0 and 3
rating: must be less than or equal to 5.0
products: Must provide between 1 and 500 products per batch

Validaciones declaradas en ShopRequestDTO.java (PluginProductDTO) y ShopRequestDTO.java (lote 1–500).

Tabla de validaciones del PluginProductDTO

CampoValidaciónMensaje
externalId@NotBlankExternal ID is required
name@NotBlank @Size(max=512)Product name is required / size must be between 0 and 512
description@Size(max=5000)size must be between 0 and 5000
price@NotNull @DecimalMin(0.0)Price is required / Price must be positive
currency@Size(max=3)size must be between 0 and 3
url@NotBlankProduct URL is required
rating@DecimalMin(0) @DecimalMax(5)must be greater than or equal to 0.0 / must be less than or equal to 5.0
reviewCount@Min(0)must be greater than or equal to 0
stockQuantity@Min(0)must be greater than or equal to 0
salePrice@DecimalMin(0)must be greater than or equal to 0.0

Errores parciales en sync (200 con errors[])

El endpoint POST /api/plugin/shops/{shopId}/products/sync puede devolver 200 OK con éxito parcial cuando algunos productos fallan validación lógica:

{
"totalReceived": 50,
"newProducts": 35,
"updatedProducts": 12,
"skipped": 0,
"failed": 3,
"errors": [
{
"externalId": "wc_prod_999",
"reason": "parentExternalId 'wc_parent_x' not found"
},
{
"externalId": "wc_prod_1000",
"reason": "Currency code must be ISO 4217 (3 characters)"
},
{
"externalId": "wc_prod_1001",
"reason": "Image URL is not a valid HTTP/HTTPS URL"
}
],
"productsCount": 7847,
"remainingProducts": 2153
}

Tu integración debe inspeccionar errors[] y reintentar sólo los productos fallidos tras corregir el payload.

Correlación con logs

Si reportas un incidente al equipo:

  1. Captura el timestamp, path y message de la respuesta.
  2. Si tu cliente HTTP genera un request id (header X-Request-ID), inclúyelo.
  3. Anonimiza el payload (quita externalId reales si llevan información sensible) antes de enviarlo a Soporte.

Próximas lecturas