Errores
Dos formatos
Errores del plugin. Los devuelve el propio recurso: producto inexistente, datos no válidos, conflicto…
{
"success": false,
"error": {
"code": "notiwoo_extra_not_found",
"message": "Extra no encontrado.",
"details": {}
}
}
details puede contener datos adicionales, por ejemplo el campo o el índice que falló. También puede venir vacío ({} o []).
Errores de WordPress. Se producen antes de llegar al recurso: falta de autenticación o permisos, parámetros obligatorios ausentes o no válidos, rutas inexistentes.
{
"code": "rest_missing_callback_param",
"message": "Faltan parámetros: entity, operation, target, request_id",
"data": { "status": 400, "params": ["entity", "operation", "target", "request_id"] }
}
Tu cliente debe manejar los dos. Una forma sencilla:
const body = await response.json();
const code = body.error?.code ?? body.code; // plugin o WordPress
const message = body.error?.message ?? body.message;
Decide siempre según code y el código HTTP, nunca según message: el texto cambia con el idioma del sitio.
Códigos comunes
| Código | HTTP | Significado | Qué hacer |
|---|---|---|---|
notiwoo_unauthorized | 401 | Falta autenticación o el token no es válido. | Solicita un token nuevo. |
notiwoo_forbidden | 403 | El usuario no tiene permiso. | Usa una cuenta de administrador o gestor de tienda. |
rest_forbidden | 401/403 | Igual que el anterior, en la ruta de cierre por modalidad. | Igual que el anterior. |
notiwoo_invalid_credentials | 401 | Usuario o contraseña incorrectos al pedir el token. | Revisa las credenciales. |
rest_missing_callback_param | 400 | Falta un parámetro obligatorio. | Revisa data.params. |
rest_invalid_param | 400 | Un parámetro tiene tipo o valor no válido. | Revisa data.params. |
rest_no_route | 404 | La ruta o el método no existen. | Revisa la ruta y el método HTTP. |
notiwoo_not_found | 404 | Producto o categoría inexistente o no publicado. | — |
notiwoo_woocommerce_missing | 500 | WooCommerce no está activo. | Activa WooCommerce. |
notiwoo_cutover_pending | 409 | Modo coexistencia: la tienda no acepta pedidos por la API. | Termina la migración. |
notiwoo_deprecated_route | 308 | Ruta antigua woofood/*. | Usa la ruta de details.redirect_to. |
Conflictos (409)
Un 409 indica que la operación choca con el estado actual. Por ejemplo:
notiwoo_bulk_busy: ya hay un cambio masivo en curso.table_busyotable_occupied: la mesa está ocupada o bloqueada.loyalty_unavailable: el programa está desactivado, la cuenta está bloqueada por otra operación o falta configurar WhatsApp.notiwoo_product_changed: el producto cambió mientras se creaba el pedido.
Vuelve a leer el recurso, corrige y reintenta. Si la operación usa clave de idempotencia, reintenta con la misma clave.
Errores dentro de una respuesta correcta
Algunas validaciones responden 200 y devuelven los problemas como datos, para mostrarlos al cliente:
POST /cart/validate:data.validydata.errors[].POST /delivery/check-address:data.deliverableydata.reason.POST /users/me/addresses:data.deliverable: falsesi no hay cobertura.
Cada página de recurso enumera sus códigos específicos.