Skip to main content
POST
Crear link de pago

Autorizaciones

x-api-key
string
header
requerido

API key del API Gateway de Tapi. Requerida en todas las operaciones. Distinta por ambiente (desarrollo, homologación, producción).

x-authorization-token
string
header
requerido

Token TAPI JWT. Requerido en todas las operaciones. Se envía sin prefijo "Bearer". Ej: x-authorization-token: eyJhbGci...

Encabezados

Idempotency-Key
string

Clave de idempotencia (opcional). Se usa como llave única (externalRequestId) del PaymentLink. El externalRequestId es una llave permanente sin TTL (constraint UNIQUE en el OFU). Una request repetida con la misma key devuelve error 409 RESOURCE_CONFLICT (no es replay/idempotencia clásica; es rechazo de duplicado por constraint UNIQUE). Si no se envía, el backend genera un externalRequestId único. Ver ADR-004 v1.1 para detalles de semántica.

Cuerpo

application/json
amount
number
requerido

Monto en pesos (hasta 2 decimales, mínimo 0.01)

Rango requerido: x >= 0.01Debe ser un múltiplo de 0.01
description
string
requerido

Descripción visible en la página de pago

expiresAt
string<date-time>
requerido

Fecha/hora de expiración (ISO 8601, formato RFC3339). Debe ser en el futuro. Campo obligatorio.

currency
enum<string>
predeterminado:MXN

Código de moneda ISO 4217 (MXN, ARS, PEN, COP, CLP, USD). Default MXN.

Opciones disponibles:
MXN,
ARS,
PEN,
COP,
CLP,
USD

Llave natural del link. Única por organización. Usada para idempotencia y matching externo.

successUrl
string<uri>

URL de redirección al completar el pago (opcional)

singleUse
boolean
predeterminado:true

Si true, el link se desactiva tras el primer pago. Si false, acepta múltiples pagos (reutilizable). Default true.

metadata
object

Metadatos arbitrarios del cliente (opcional)

externalClientId
string

Identificador del deudor (cliente conocido). Mutuamente excluyente con contactData. Si se proporciona, la Facade resuelve el contacto existente por externalClientId en la organización. El paymentUrl será opaco (no expone identidad si privateLinks=true).

contactData
object

Datos del deudor inline. Mutuamente excluyente con externalClientId. Si se proporciona, se crea un nuevo contacto (o se reutiliza si externalClientId ya existe). El paymentUrl será opaco (no expone identidad si privateLinks=true).

productName
string

Nombre del producto a asociar (opcional). Se resuelve por name en el OFU o se crea inline si no existe. Identificado por name único por companyCode.

identifierValue
string

Identificador explícito del link de pago (opcional). Si se proporciona, se sanitiza a URL-safe (alfanumérico + guiones, lowercase, máx 64 chars). Si tras sanear queda vacío, retorna 400 INVALID_REQUEST. Precedencia de resolución: identifierValue explícito > externalClientId (deudor) > sintético. Si se envía identifierValue: se usa ese valor (saneado). Si NO se envía y hay deudor conocido (externalClientId/contactData): se usa el identificador del deudor. Si NO se envía y NO hay deudor: se genera sintético {3letras}-{random}. Exposición en respuesta (PII-safe): SIN deudor conocido (anónimo/reutilizable) se expone identifierValue en respuesta. CON deudor conocido: NO se expone (omitido), incluso si el cliente mandó identifierValue explícito. El paymentUrl usa shortCode opaco si privateLinks=true, o externalClientId si privateLinks=false.

Maximum string length: 64
additionalData
object

Escape hatch para datos adicionales

Respuesta

Link de pago creado

data
object
requestId
string