Skip to main content
PATCH
/
payment-requests
/
{payment_request_id}
Emitir DTE manualmente
curl --request PATCH \
  --url https://api.tupana.ai/v1/payment-requests/{payment_request_id}/ \
  --header 'Authorization: <api-key>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "status": "issued"
}
'
{ "payment_request_id": 1042, "status": "issued", "payment_url": "https://www.tupana.ai/pagos/tok_xyz", "expires_at": "2026-04-06T12:30:00Z", "created_at": "2026-04-06T12:00:00Z", "amount": 50000, "target_dte_type": "39", "auto_issue": false, "external_id": "booking_abc123", "metadata": {}, "issued_document_id": 9871, "document_ids": [] }

¿Para qué se usa?

Emite el DTE para una sesión de cobro ya pagada. Solo necesario cuando creaste la sesión con auto_issue=false.

Qué hace

  • Clona el documento interno de cobro al tipo de DTE indicado en target_dte_type (boleta o factura).
  • Transiciona la sesión al estado issued.
  • Retorna el payload completo de la sesión incluyendo issued_document_id.
  • Dispara el webhook payment_request.document_issued.

Body

Por ahora el único campo aceptado es status con valor "issued". Cualquier otro valor o un body sin ese campo retorna 400 INVALID_STATUS.
{ "status": "issued" }

Ejemplos de uso

  • Validación previa a emisión: tu sistema valida datos del cliente antes de emitir la factura.
  • Emisión diferida: el cobro se confirma inmediatamente pero la factura se emite al final del día.

Consideraciones importantes

Requiere auto_issue=false

Este endpoint solo tiene sentido cuando creaste la sesión con auto_issue=false. Si usaste auto_issue=true (el default), el DTE ya fue emitido automáticamente y la sesión está en estado issued; recibirás ALREADY_ISSUED.

Solo sobre cobros pagados

La sesión debe estar en estado paid. Si el usuario aún no pagó, recibirás NOT_PAID.

Idempotencia

Si llamas este endpoint dos veces sobre la misma sesión, la segunda llamada retorna ALREADY_ISSUED. El DTE no se emite dos veces.

Authorizations

Authorization
string
header
required

API Key para autenticación. Formato: Api-Key YOUR-API-KEY

Path Parameters

payment_request_id
integer
required

ID numérico de la sesión de cobro.

Body

application/json
status
enum<string>
required

Estado al que se quiere transicionar la sesión. Por ahora solo se acepta issued.

Available options:
issued

Response

Sesión transicionada a issued

payment_request_id
integer

ID único de la sesión de cobro.

Example:

1042

status
enum<string>
Available options:
pending,
paid,
issued,
failed,
expired,
refunded
Example:

"pending"

payment_url
string<uri>

URL a la que debes redirigir al usuario para que complete el pago.

Example:

"https://www.tupana.ai/pagos/tok_xyz"

expires_at
string<date-time>

Fecha y hora en que vence la sesión (UTC).

Example:

"2026-04-06T12:30:00Z"

created_at
string<date-time>

Fecha y hora de creación de la sesión (UTC).

Example:

"2026-04-06T12:00:00Z"

amount
number

Monto del cobro en CLP.

Example:

50000

target_dte_type
string | null

Tipo de DTE que se emitirá al pagarse. null en modo cobro directo (no hay DTE a emitir).

Example:

"39"

auto_issue
boolean | null

Si el DTE se emite automáticamente al confirmarse el pago. null en modo cobro directo.

Example:

true

external_id
string | null

Tu ID propio para esta sesión.

Example:

"booking_abc123"

metadata
object

Datos adicionales que enviaste al crear la sesión.

issued_document_id
integer | null

ID del DTE emitido. null mientras la sesión no haya emitido el DTE. Siempre null en modo cobro directo.

Example:

9871

document_ids
integer[]

IDs de los documentos que esta sesión cobra. Lista vacía en modo emisión (donde el DTE se emite al pagarse).

Example:
[9871, 9872]