Create a public link to the receipt
POST/payments/{id}/receipt-linksProbar
La llamada la hace tu navegador, contra el servidor que elijas arriba. Si la documentación no está servida desde el mismo origen que la API, el navegador puede bloquear la respuesta por CORS: en ese caso abre estas páginas desde la propia API (/docs) o usa el curl de arriba.
const url = 'http://localhost:3000/v1/payments/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/receipt-links';const options = { method: 'POST', headers: {'x-api-key': '<x-api-key>', 'Content-Type': 'application/json'}, body: '{"expires_in_days":7}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url http://localhost:3000/v1/payments/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/receipt-links \ --header 'Content-Type: application/json' \ --header 'x-api-key: <x-api-key>' \ --data '{ "expires_in_days": 7 }'Scope payments:write. A public link your customer can open without an account: https://<host>/receipt#<token>. The token travels only in the URL fragment (#), so browsers never send it to any server log, proxy or Referer; we only store its hash. The url is shown only in this response. If you send an Idempotency-Key, a replay returns the same link with url: null: we never store the token, not even for idempotency.
Only for a payout that is settled right now (409 receipt_not_available otherwise). It expires after expires_in_days (1 to 30, 7 by default), can be revoked, and stops working if your account is suspended. Up to 20 live links per payout (409 receipt_link_limit_reached). Any expired, revoked or unknown link returns the same 404 receipt_not_found.
Authorizations
Sección titulada «Authorizations»Parameters
Sección titulada «Parameters»Path Parameters
Sección titulada «Path Parameters»Request Body
Sección titulada «Request Body»object
Example
{ "expires_in_days": 7}Responses
Sección titulada «Responses»Link created
object
Shown only once. The token is in the fragment (#). null in an Idempotency-Key replay: the token is never stored.
Example
{ "id": "0b6a9f8e-3f2c-4c7a-9a43-1d2e5f6a7b8c", "url": "https://qa.bolivarconnect.com/receipt#3f9c0e5b6a7d4c2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8e", "expires_at": "2026-09-07T19:06:44.120Z"}Headers
Sección titulada «Headers»Example
no-storeError con código estable
object
object
Contexto estructurado del error cuando lo hay: qué límite se superó y de cuánto, qué campo es inválido, cuánto saldo había. No aparece en errores internos.
object
Código ESTABLE. Programa contra esto.
Example
{ "error": { "type": "invalid_request_error", "code": "insufficient_balance", "request_id": "req_8a0312ba896772bc441134cd" }}Error con código estable
object
object
Contexto estructurado del error cuando lo hay: qué límite se superó y de cuánto, qué campo es inválido, cuánto saldo había. No aparece en errores internos.
object
Código ESTABLE. Programa contra esto.
Example
{ "error": { "type": "invalid_request_error", "code": "insufficient_balance", "request_id": "req_8a0312ba896772bc441134cd" }}Error con código estable
object
object
Contexto estructurado del error cuando lo hay: qué límite se superó y de cuánto, qué campo es inválido, cuánto saldo había. No aparece en errores internos.
object
Código ESTABLE. Programa contra esto.
Example
{ "error": { "type": "invalid_request_error", "code": "insufficient_balance", "request_id": "req_8a0312ba896772bc441134cd" }}