Conceptos

Errores

Todas las respuestas tienen la misma forma; los errores traen un código estable y qué hacer.

Ver en Markdown

Cada respuesta es un objeto con version: 1, ok, progreso y requiereRevision. Si ok es true trae datos; si es false trae error. Decidí siempre por error.codigo y error.recuperacion, nunca por el texto de mensaje (que está pensado para mostrarle a la clienta y puede cambiar).

{
  "version": 1,
  "ok": false,
  "progreso": {
    "principal": "NO_GUARDADO"
  },
  "requiereRevision": false,
  "error": {
    "dominio": "compras",
    "codigo": "HORARIO_NO_DISPONIBLE",
    "mensaje": "Ese horario ya no está disponible.",
    "categoria": "ESTADO",
    "reintentable": false,
    "recuperacion": "RELEER_Y_CONFIRMAR"
  }
}

Campos del error

CampoQué es
dominioapi (la puerta: clave, origen, límites, formato) o compras (el motor de reservas).
codigoCódigo estable. Es el que tenés que usar en tu código.
mensajeTexto en español para mostrar.
categoriaENTRADA, ACCESO, ESTADO, IDENTIDAD, PROVEEDOR o TECNICO.
reintentabletrue solo si repetir el mismo pedido, con la misma Idempotency-Key, puede andar.
recuperacionQué hacer: ver la tabla de abajo.
camposCon ENTRADA_INVALIDA: la lista de campos con problema (campo, codigo, mensaje).
referenciaDiagnosticoCon errores técnicos: un identificador para pedir soporte. No trae detalles internos.

Qué hacer según la recuperación

RecuperaciónQué hacer
CORREGIR_ENTRADACorregí los datos (mirá campos) y mandá un pedido nuevo.
RELEER_Y_CONFIRMAREl estado cambió (por ejemplo, alguien tomó el horario). Volvé a consultar la disponibilidad y pedile a la clienta que elija otra vez.
REINTENTAR_MISMA_INTENCIONReintentá el mismo pedido con la misma Idempotency-Key, respetando Retry-After si viene.
CONSULTAR_ESTADONo se sabe si se guardó. Reintentá con la misma clave de idempotencia o consultá la reserva.
REVISION_HUMANANecesita que alguien del negocio lo mire. No reintentes en bucle.
NO_REINTENTARRepetir da lo mismo.

Progreso

progreso.principal dice qué se sabe de la operación: CONSULTADO (lecturas), NO_GUARDADO, GUARDADO (la reserva existe pero falta algo, por ejemplo el pago), CONFIRMADO o DESCONOCIDO. En reservas puede venir progreso.pago: PENDIENTE, CONFIRMADO, EN_REVISION o INCIERTO. Un error nunca se presenta como algo mayor a lo que el servidor confirmó.

Códigos de la API (dominio api)

HTTPCódigoReintentableMensaje
404API_NO_HABILITADANoLa API externa no está habilitada.
403PLAN_SIN_APINoLa API está incluida en el plan Enterprise. El negocio puede cambiar de plan desde su panel.
401CREDENCIAL_FALTANTENoMandá la clave en Authorization: Bearer <clave>.
401CREDENCIAL_INVALIDANoLa clave no es válida.
401CREDENCIAL_REVOCADANoLa clave fue revocada por el negocio.
403CLAVE_SECRETA_EN_NAVEGADORNoLa clave secreta es solo para servidores: desde el navegador usá la clave pública.
403ORIGEN_NO_PERMITIDONoEste sitio no está autorizado para usar la clave.
403SCOPE_FALTANTENoLa clave no tiene permiso para esta operación.
429LIMITE_USOSíDemasiados pedidos. Esperá unos segundos y reintentá con los mismos datos.
400IDEMPOTENCY_KEY_FALTANTENoMandá la cabecera Idempotency-Key: una clave estable por operación.
400IDEMPOTENCY_KEY_INVALIDANoIdempotency-Key: entre 8 y 100 caracteres A-Z, a-z, 0-9, punto, guion, guion bajo o dos puntos.
400ENTRADA_INVALIDANoRevisá los datos enviados.
404NO_ENCONTRADONoNo existe o no pertenece a este negocio.
409SERVICIO_DERIVADO_WHATSAPPNoEste servicio se agenda por WhatsApp con la profesional, no por la API.
500ERROR_TECNICOSíNo pudimos completar el pedido. Reintentá con los mismos datos.
400 o 404CONSULTA_RECHAZADANoLecturas: el catálogo o la disponibilidad rechazaron el pedido (por ejemplo, un servicio que no existe). El mensaje explica por qué.

Códigos de la reserva (dominio compras)

HTTPCódigoRecuperaciónReintentable
400ENTRADA_INVALIDACORREGIR_ENTRADANo
400SOLICITUD_NO_PERMITIDACORREGIR_ENTRADANo
404 o 400CATALOGO_NO_DISPONIBLECORREGIR_ENTRADANo
400DESCUENTO_NO_APLICABLECORREGIR_ENTRADANo
409HORARIO_NO_DISPONIBLERELEER_Y_CONFIRMARNo
409ESTADO_CAMBIORELEER_Y_CONFIRMARNo
409IMPORTE_NO_CORRESPONDERELEER_Y_CONFIRMARNo
409OPERACION_NO_PERMITIDANO_REINTENTARNo
400 o 409CONFIGURACION_INCOMPLETAREVISION_HUMANANo
409DATOS_INCONSISTENTESREVISION_HUMANANo
409COMPRA_GUARDADA_REVISARCONSULTAR_ESTADONo
409AGENDA_OCUPADAREINTENTAR_MISMA_INTENCIONSí
409CONFLICTO_INTENCIONREVISION_HUMANANo
409PAGO_NO_VERIFICADOREVISION_HUMANANo
404NO_ENCONTRADONO_REINTENTARNo
403SIN_ACCESONO_REINTENTARNo