Ir al contenido

Endpoint de estado (GET)

Exponés un endpoint HTTP que devuelve el snapshot del lifecycle de una interaction. Crowder lo llama:

  • Antes de generar la compra, para revalidar la cotización.
  • Antes de disparar un webhook que muta lifecycle, para confirmar que la transición es válida.
  • Cuando necesita un estado actualizado (incluyendo detección de expiración).
GET {endpoint}/{interaction}

Headers:

Authorization: Bearer <api_key>
Accept: application/json
  • Sin body.
  • Validá la api_key en tiempo constante.
  • Timeout del lado de Crowder: 5 s. 1 retry con backoff de 500 ms.
statusSignificadoHTTP
validCotización vigente. Sin compromiso de stock, sin TTL.200
reservedReserva activa. TTL corriendo (expiresAt presente).200
expiredEl hold venció sin pago. Solo se llega desde reserved.410
confirmedPago capturado. Tu fulfillment en curso. La devolubilidad la declarás por item con refundable.200
refundedDevuelta total. Solo desde confirmed, cuando se devolvieron todos los items.200
status actualpurchaseReservedpurchasePaidpurchaseRefunded
valid
reserved❌ (idempotente)
expiredN/A
confirmed✅ (solo items refundable: true, salvo chargeback/fraud que bypasean)
refundedN/A

Cotización vigente, sin compromiso de stock, sin TTL.

{
"status": "valid",
"interaction": "pkg_abc123",
"currency": "ARS",
"partnerItems": [
{
"uuid": "HOTEL-3N-PREMIUM",
"type": "HOTEL",
"description": "Hotel 3 noches · Hilton Buenos Aires",
"price": 120000.00,
"quantity": 1,
"refundable": true
}
]
}

El campo url es opcional y lo emitís vos solo en respuestas post-compra (confirmed, refunded). Apunta a tu recurso asociado a la operación: voucher, comprobante o página de detalle.

Toda respuesta de error usa el envelope estándar:

{
"status": "error",
"error": {
"code": "...",
"message": "...",
"details": { }
}
}

error.code es snake_case, ≤ 64 chars, lista no cerrada. error.message es legible para el usuario, ≤ 200 chars, localizado al locale cuando viene del partner. Crowder identifica el caso por código HTTP + error.code.

HTTPerror.code típicoCaso
400invalid_payloadRequest mal formado.
401 / 403auth_invalidBearer ausente o inválido.
404not_foundinteraction desconocida.
5xxinternal_errorError interno. Crowder reintenta una vez.
{
"status": "error",
"error": {
"code": "not_found",
"message": "interaction no encontrada"
}
}

El GET puede llegarte más de una vez para la misma interaction (revalidaciones repetidas, polling, retries). Tu endpoint debe ser idempotente: responder siempre el estado actual sin efectos colaterales.