> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pay-me.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Respuestas, consulta y códigos

> Estructura de respuesta, estados transaccionales, códigos HTTP y consulta por operationNumber.

Pay-me PinPAD diferencia los **resultados de negocio** de los **errores operativos** mediante el código HTTP y el cuerpo JSON.

<Warning>
  Un pago rechazado por el procesador devuelve HTTP `200` con `status: "DENIED"`. No interpretes todos los HTTP `200` como aprobación.
</Warning>

## Estructura de respuesta de pago

```json theme={"system"}
{
  "operationNumber": "44992528",
  "status": "APPROVED",
  "resultCode": "00",
  "resultMessage": "Aprobado",
  "authorizationCode": "123456",
  "completedAt": "2026-08-27T20:12:48Z"
}
```

| Campo               | Tipo          | Descripción                                                                                                             |
| ------------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `operationNumber`   | String        | Referencia recibida desde el sistema central. Puede faltar en errores de validación donde no fue posible identificarla. |
| `status`            | String        | Estado transaccional u operativo.                                                                                       |
| `resultCode`        | String o null | Código financiero u operativo. `"00"` es el único código documentado como aprobación.                                   |
| `resultMessage`     | String        | Mensaje legible asociado al resultado. Úsalo para diagnóstico, no para lógica de decisión.                              |
| `authorizationCode` | String o null | Código del procesador cuando el pago fue aprobado.                                                                      |
| `completedAt`       | String o null | Fecha y hora final en ISO 8601 UTC (`yyyy-MM-ddTHH:mm:ssZ`). Es `null` mientras no existe un resultado final.           |

## Respuestas de `POST /authorize`

### Pago aprobado — `200 OK`

```json theme={"system"}
{
  "operationNumber": "44992528",
  "status": "APPROVED",
  "resultCode": "00",
  "resultMessage": "Aprobado",
  "authorizationCode": "123456",
  "completedAt": "2026-08-27T20:12:48Z"
}
```

Confirma la venta —y ejecuta la acción de negocio asociada— únicamente cuando se cumplan ambas condiciones:

```text theme={"system"}
status = APPROVED
resultCode = 00
```

### Pago rechazado — `200 OK`

```json theme={"system"}
{
  "operationNumber": "44992528",
  "status": "DENIED",
  "resultCode": "01",
  "resultMessage": "Peticion rechazada por el Procesador",
  "authorizationCode": null,
  "completedAt": "2026-08-27T20:12:48Z"
}
```

El rechazo es final para esa operación. Si el usuario desea volver a pagar, crea una operación nueva con otro `operationNumber`.

### Resultado pendiente — `202 Accepted`

```http theme={"system"}
Retry-After: 2
```

```json theme={"system"}
{
  "operationNumber": "44992528",
  "status": "PENDING",
  "resultCode": "WAITING_RESULT",
  "resultMessage": "Consulte el estado antes de reintentar",
  "authorizationCode": null,
  "completedAt": null
}
```

No vuelvas a cobrar. Consulta la operación y respeta `Retry-After` cuando esté presente.

### Terminal ocupado — `409 Conflict`

```json theme={"system"}
{
  "operationNumber": "44992530",
  "status": "ERROR",
  "resultCode": "POS_BUSY",
  "resultMessage": "El Pinpad está procesando otra operación",
  "authorizationCode": null,
  "completedAt": null
}
```

Pay-me PinPAD procesa una operación a la vez. Espera a que finalice la operación activa antes de reintentar la solicitud rechazada por concurrencia.

### Terminal no disponible — `503 Service Unavailable`

```json theme={"system"}
{
  "operationNumber": "44992528",
  "status": "ERROR",
  "resultCode": "POS_NOT_AVAILABLE",
  "resultMessage": "El SDK de pagos no está disponible",
  "authorizationCode": null,
  "completedAt": null
}
```

El operador debe dejar Pay-me PinPAD abierta y en estado listo. Reintenta cuando el terminal vuelva a estar disponible.

### Solicitud inválida — `400 Bad Request`

```json theme={"system"}
{
  "status": "ERROR",
  "resultCode": "BAD_REQUEST",
  "resultMessage": "amount inválido: debe ser un entero positivo en unidades menores"
}
```

Corrige la solicitud. No clasifiques este caso como un rechazo del procesador.

## Consulta de estado

Usa la misma referencia que enviaste en la autorización:

```http theme={"system"}
GET /payments/{operationNumber}
```

Ejemplo:

```http theme={"system"}
GET http://192.168.68.121:8080/payments/44992528
```

| Código HTTP     | Significado                                     | Acción del sistema central                                                                  |
| --------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------- |
| `200 OK`        | La operación tiene un resultado final.          | Evalúa `status` y `resultCode`.                                                             |
| `202 Accepted`  | La operación todavía está en curso o pendiente. | Consulta nuevamente y respeta `Retry-After` si está presente.                               |
| `404 Not Found` | No existe una operación con esa referencia.     | Verifica que la referencia sea exactamente la enviada. No asumas que el pago fue rechazado. |

Respuesta de una operación inexistente:

```json theme={"system"}
{
  "operationNumber": "27423555",
  "status": "ERROR",
  "resultCode": "NOT_FOUND",
  "resultMessage": "Operación no encontrada",
  "authorizationCode": null,
  "completedAt": null
}
```

## Estados

| `status`     | Final                                  | Significado                                                                      | Acción                                                                                                                                                                                             |
| ------------ | -------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `APPROVED`   | Sí                                     | Pago aprobado.                                                                   | Confirma solo si `resultCode` también es `"00"`.                                                                                                                                                   |
| `DENIED`     | Sí                                     | Pago rechazado por el procesador.                                                | No confirmes. Un nuevo intento requiere otro `operationNumber`.                                                                                                                                    |
| `CANCELLED`  | Sí                                     | La autorización terminó cancelada; no equivale a un extorno.                     | No confirmes. Un nuevo intento requiere otra referencia. Revisa la [diferencia entre cancelación y extorno](/procesamiento-fisico/alignet-transit/extorno#cancelacion-y-extorno-no-son-sinonimos). |
| `PENDING`    | No                                     | Venció la espera, pero el cobro puede continuar.                                 | Consulta; no inicies otro cobro.                                                                                                                                                                   |
| `PROCESSING` | No                                     | El cobro se está procesando.                                                     | Consulta; no inicies otro cobro.                                                                                                                                                                   |
| `UNKNOWN`    | No                                     | El resultado es incierto, por ejemplo después de un reinicio durante el proceso. | Mantén la operación abierta y consulta.                                                                                                                                                            |
| `ERROR`      | Depende del código HTTP y `resultCode` | Error operativo, de validación o de consulta.                                    | Aplica el tratamiento del código recibido.                                                                                                                                                         |

## Códigos confirmados

| `resultCode`        | Contexto                       | Significado                                        |
| ------------------- | ------------------------------ | -------------------------------------------------- |
| `00`                | Financiero                     | Pago aprobado.                                     |
| `01`                | Financiero, ejemplo verificado | Petición rechazada por el procesador.              |
| `WAITING_RESULT`    | Operativo                      | La operación sigue pendiente; consulta su estado.  |
| `POS_BUSY`          | Operativo                      | Ya existe otra operación activa.                   |
| `POS_NOT_AVAILABLE` | Operativo                      | El SDK de pagos no está disponible.                |
| `BAD_REQUEST`       | Validación                     | El JSON o uno de sus campos no cumple el contrato. |
| `NOT_FOUND`         | Consulta                       | No existe una operación con esa referencia.        |

<Note>
  No se ha confirmado el catálogo completo de códigos del procesador. Trata únicamente `APPROVED` junto con `"00"` como aprobación. Conserva cualquier código desconocido y escálalo sin asignarle un significado.
</Note>

<Note>
  Los códigos `14` y `15` no están confirmados para el contrato HTTP vigente de Transit. No los uses para decidir una cancelación hasta validarlos contra la implementación ECR.
</Note>

## Matriz de decisión

| Respuesta                       | Decisión                                                                             |
| ------------------------------- | ------------------------------------------------------------------------------------ |
| `200` + `APPROVED` + `00`       | Confirmar el pago, guardar el código de autorización y aplicar la regla de apertura. |
| `200` + `DENIED` o `CANCELLED`  | No confirmar. Informar el resultado.                                                 |
| `202` + `PENDING`               | Mantener la operación abierta y consultar.                                           |
| `409` + `POS_BUSY`              | Esperar a que el terminal se libere.                                                 |
| `503` + `POS_NOT_AVAILABLE`     | Restablecer la disponibilidad del terminal y reintentar.                             |
| `400` + `BAD_REQUEST`           | Corregir la solicitud.                                                               |
| Timeout o conexión interrumpida | Consultar la referencia original antes de cualquier nuevo cobro.                     |
