La forma de toda respuesta de error y cada código que la API puede responder: su estado HTTP, cuándo aparece y qué hacer.
Toda respuesta de error tiene la misma forma:
{ "statusCode": 404, "code": "ORGANIZATION_NOT_FOUND", "message": "Organización no encontrada"}
Decide por code. Un código conserva su nombre una vez publicado.
message está en español y es para la persona. Muéstralo tal como
llega; no lo interpretes en tu programa.
Algunos códigos agregan campos que nombran lo que falló: scope, feature,
roles, field, maxDays, supported, reason, retryAfterSeconds,
details. Las tablas dicen cuál.
{ "statusCode": 400, "code": "INVALID_REQUEST", "details": [{ "field": "days", "message": "days must not be less than 1" }], "message": "La solicitud no es válida: revisa «days»."}
field es el parámetro o el campo del cuerpo, como ruta (page,
items.0.name). Es null cuando la falla no nombra ninguno. El message de
cada fila llega como lo redactó la validación.
Sí: un 429, después de Retry-After. Un 409 IDEMPOTENCY_IN_PROGRESS,
con la misma clave.
Sí, con cuidado: una escritura que terminó en un tiempo de espera
agotado o en un 5xx pudo haberse aplicado o no. Si la enviaste con una
Idempotency-Key, reintenta esa misma solicitud con la misma clave: la API
devuelve la primera respuesta, con Idempotency-Replayed: true, y no
escribe dos veces. Por eso conviene enviar una clave nueva en cada
escritura.
No: cualquier otro 4xx. Repetir la misma solicitud responde lo mismo.
Una escritura también puede responder un rechazo de las reglas del panel, con
un code propio que no está en estas tablas. Trátalo por su estado HTTP y
muestra su message.