Crear link de pago
Genera una liga de pago para cobrar sin conocer al deudor de antemano.
Autorizaciones
API key del API Gateway de Tapi. Requerida en todas las operaciones. Distinta por ambiente (desarrollo, homologación, producción).
Token TAPI JWT. Requerido en todas las operaciones. Se envía sin prefijo "Bearer". Ej: x-authorization-token: eyJhbGci...
Encabezados
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
Monto en pesos (hasta 2 decimales, mínimo 0.01)
x >= 0.01Debe ser un múltiplo de 0.01Descripción visible en la página de pago
Fecha/hora de expiración (ISO 8601, formato RFC3339). Debe ser en el futuro. Campo obligatorio.
Código de moneda ISO 4217 (MXN, ARS, PEN, COP, CLP, USD). Default MXN.
MXN, ARS, PEN, COP, CLP, USD Llave natural del link. Única por organización. Usada para idempotencia y matching externo.
URL de redirección al completar el pago (opcional)
Si true, el link se desactiva tras el primer pago. Si false, acepta múltiples pagos (reutilizable). Default true.
Metadatos arbitrarios del cliente (opcional)
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).
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).
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.
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.
64Escape hatch para datos adicionales

