Referencia del API · tag wallet
Billetera
Billetera: saldo, movimientos, P2P, Bre-B, facturas, recargas, cuentas y bolsillos, tarjetas y FX. El titular se identifica con document.
Esta página se genera desde el contrato (data/gateway-v1.json): cada operación muestra su verbo,
ruta, parámetros, cuerpo, respuestas, si lleva Idempotency-Key y el método equivalente en los cinco SDK.
Para el flujo de punta a punta con ejemplos completos, ve a la guía de implementación.
Operaciones del tag wallet #
Descripción en el contrato: Wallet / fintech surface: accounts (pockets, savings), card issuing and lifecycle, and FX quoting/conversion. The wallet holder is identified by document — as a query parameter on reads, and in the body on writes.
| Método | Ruta | Operación | Scope | Idem. |
|---|---|---|---|---|
| GET | /v1/gateway/wallet/accounts/ | List the holder's accounts (wallet, pockets, savings) | wallet:read | — |
| POST | /v1/gateway/wallet/accounts/ | Create a sub-account (pocket / savings / goal) | wallet:accounts | recomendada |
| POST | /v1/gateway/wallet/accounts/transfer/ | Transfer between the holder's own accounts | wallet:accounts | recomendada |
| GET | /v1/gateway/wallet/balance/ | Saldo de la billetera del titular | wallet:read | — |
| GET | /v1/gateway/wallet/billers/ | Catálogo de convenios | wallet:read | — |
| POST | /v1/gateway/wallet/bills/inquiry/ | Consultar una factura | wallet:payments | — |
| POST | /v1/gateway/wallet/bills/pay/ | Pagar una factura | wallet:payments | obligatoria |
| GET | /v1/gateway/wallet/bills/payments/ | Historial de pagos de facturas y recargas | wallet:read | — |
| GET | /v1/gateway/wallet/bills/payments/{payment_id}/ | Detalle de un pago | wallet:read | — |
| GET | /v1/gateway/wallet/breb/limits/ | Límites Bre-B del titular | wallet:read | — |
| POST | /v1/gateway/wallet/breb/resolve/ | Resolver una llave Bre-B | wallet:transfer | — |
| POST | /v1/gateway/wallet/breb/transfers/ | Enviar por Bre-B | wallet:transfer | obligatoria |
| GET | /v1/gateway/wallet/cards/ | List issued cards (non-sensitive metadata) | wallet:read | — |
| POST | /v1/gateway/wallet/cards/ | Issue a card (debit; virtual or physical) | wallet:cards | recomendada |
| POST | /v1/gateway/wallet/cards/{card_id}/status/ | Change card status (freeze / unfreeze / block) | wallet:cards | recomendada |
| GET | /v1/gateway/wallet/cards/{card_id}/transactions/ | Movements on a card | wallet:read | — |
| POST | /v1/gateway/wallet/fx/convert/ | Execute a currency conversion | wallet:fx | recomendada |
| POST | /v1/gateway/wallet/fx/quote/ | Quote a currency conversion | wallet:fx | — |
| POST | /v1/gateway/wallet/p2p/resolve/ | Resolver destinatario P2P | wallet:transfer | — |
| POST | /v1/gateway/wallet/p2p/transfers/ | Transferir a otro afiliado | wallet:transfer | obligatoria |
| POST | /v1/gateway/wallet/topups/ | Recargar un celular | wallet:topup | obligatoria |
| GET | /v1/gateway/wallet/topups/operators/ | Operadores de recarga | wallet:read | — |
| GET | /v1/gateway/wallet/transactions/ | Movimientos del titular (paginado, con filtros) | wallet:read | — |
| GET | /v1/gateway/wallet/transactions/{tx_id}/ | Detalle de un movimiento | wallet:read | — |
List the holder's accounts (wallet, pockets, savings) #
GET/v1/gateway/wallet/accounts/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
document obligatorio | query | string | Document id of the wallet holder. Ej.: 1090123456 |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | The holder’s accounts. | WalletAccountList
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.accounts.list()client.accounts.list()$client->accounts->list()await client.Accounts.ListAsync()client.Wallet.Accounts.List(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/accounts/?document=1090123456" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Create a sub-account (pocket / savings / goal) #
POST/v1/gateway/wallet/accounts/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
Idempotency-Key | cabecera | string | Client-generated key that makes a write safely retryable. Replaying the same key returns the original result with idempotent_replay: true; a replay while the original is still in flight returns 409. Ej.: horizonte-2026-06-26-credit-000123 |
Cuerpo de la petición
Tipo de contenido: application/json · obligatorio
Esquema WalletAccountCreateIn — Create a sub-account (pocket / savings / goal) for the wallet holder.
| Campo | Tipo | Descripción |
|---|---|---|
document obligatorio | string | National document of the wallet holder. Ej.: "1032456789" |
kind obligatorio | string | Valores: pocket, savings, goal. Ej.: "pocket" |
name | string | Ej.: "Ahorro vacaciones" |
Acepta campos adicionales (additionalProperties): se reenvían al motor sin cambios.
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Accepted; transaction enqueued / processed. | TransactionEnvelope
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.accounts.create_pocket()client.accounts.createPocket()$client->accounts->createPocket()await client.Wallet.Accounts.CreatePocketAsync()client.Accounts.CreatePocket(ctx, …)curl -X POST "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/accounts/" \
-H "X-API-Key: $COMPENSE_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"document": "1032456789",
"kind": "pocket",
"name": "Ahorro vacaciones"
}'Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Transfer between the holder's own accounts #
POST/v1/gateway/wallet/accounts/transfer/
Idempotency-Key: without one the gateway cannot collapse a retry and the transfer may execute twice.Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
Idempotency-Key | cabecera | string | Client-generated key that makes a write safely retryable. Replaying the same key returns the original result with idempotent_replay: true; a replay while the original is still in flight returns 409. Ej.: horizonte-2026-06-26-credit-000123 |
Cuerpo de la petición
Tipo de contenido: application/json · obligatorio
Esquema WalletTransferIn — Transfer funds between two of the holder’s own accounts.
| Campo | Tipo | Descripción |
|---|---|---|
amount obligatorio | MoneyCOP | |
document obligatorio | string | Ej.: "1032456789" |
from_account obligatorio | string | Ej.: "acc_main" |
to_account obligatorio | string | Ej.: "acc_pocket_1" |
Acepta campos adicionales (additionalProperties): se reenvían al motor sin cambios.
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Accepted; transaction enqueued / processed. | TransactionEnvelope
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.accounts.transfer()client.accounts.transfer()$client->accounts->transfer()await client.Accounts.TransferAsync()client.Accounts.Transfer(ctx, …)curl -X POST "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/accounts/transfer/" \
-H "X-API-Key: $COMPENSE_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"document": "1032456789",
"from_account": "acc_main",
"to_account": "acc_pocket_1",
"amount": "150000"
}'Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Saldo de la billetera del titular #
GET/v1/gateway/wallet/balance/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
document obligatorio | query | string | Document id of the wallet holder. Ej.: 1090123456 |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Saldo. | WalletBalance
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.wallet.balance()client.wallet.balance()$client->wallet->balance()await client.Wallet.BalanceAsync()client.Wallet.Balance(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/balance/?document=1090123456" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Catálogo de convenios #
GET/v1/gateway/wallet/billers/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
category | query | string | Categoría del convenio. |
q | query | string | Búsqueda por nombre o código. |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Convenios. | WalletBillerList
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.wallet.bills.billers()client.wallet.bills.billers()$client->wallet->bills->billers()await client.Wallet.Bills.BillersAsync()client.Wallet.Bills.Billers(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/billers/" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Consultar una factura #
POST/v1/gateway/wallet/bills/inquiry/
Cuerpo de la petición
Tipo de contenido: application/json · obligatorio
Esquema WalletBillInquiryIn
| Campo | Tipo | Descripción |
|---|---|---|
barcode | string | Alternativa a biller_code+reference (GS1). |
biller_code | string | Ej.: "EPM" |
document obligatorio | string | Ej.: "1032456789" |
reference | string | Ej.: "123456789" |
Acepta campos adicionales (additionalProperties): se reenvían al motor sin cambios.
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Factura. | WalletInvoice
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.wallet.bills.inquire()client.wallet.bills.inquire()$client->wallet->bills->inquire()await client.Wallet.Bills.InquireAsync()client.Wallet.Bills.Inquire(ctx, …)curl -X POST "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/bills/inquiry/" \
-H "X-API-Key: $COMPENSE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"document": "1032456789",
"biller_code": "EPM",
"reference": "123456789"
}'Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Pagar una factura #
POST/v1/gateway/wallet/bills/pay/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
Idempotency-Key obligatorio | cabecera | string | Obligatoria en operaciones que mueven dinero (sin ella: 400). Ej.: horizonte-2026-06-26-credit-000123 |
Cuerpo de la petición
Tipo de contenido: application/json · obligatorio
Esquema WalletBillPayIn
| Campo | Tipo | Descripción |
|---|---|---|
amount obligatorio | MoneyCOP | |
biller_code obligatorio | string | Ej.: "EPM" |
document obligatorio | string | Ej.: "1032456789" |
reference obligatorio | string | Ej.: "123456789" |
Acepta campos adicionales (additionalProperties): se reenvían al motor sin cambios.
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Procesado; sobre estándar {status, transaction_id, module, data}. | TransactionEnvelope
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.wallet.bills.pay()client.wallet.bills.pay()$client->wallet->bills->pay()await client.Wallet.Bills.PayAsync()client.Wallet.Bills.Pay(ctx, …)curl -X POST "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/bills/pay/" \
-H "X-API-Key: $COMPENSE_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"document": "1032456789",
"biller_code": "EPM",
"reference": "123456789",
"amount": "3500000"
}'Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Historial de pagos de facturas y recargas #
GET/v1/gateway/wallet/bills/payments/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
document obligatorio | query | string | Document id of the wallet holder. Ej.: 1090123456 |
kind | query | string | BILL o TOPUP. |
limit | query | integer | Tamaño de página (1–100, por defecto 50). |
offset | query | integer | Desplazamiento (por defecto 0). |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Página de pagos. | WalletBillPaymentPage
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.wallet.bills.list_payments()client.wallet.bills.listPayments()$client->wallet->bills->listPayments()await client.Wallet.Bills.ListPaymentsAsync()client.Wallet.Bills.ListPayments(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/bills/payments/?document=1090123456" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Detalle de un pago #
GET/v1/gateway/wallet/bills/payments/{payment_id}/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
payment_id obligatorio | ruta | string | Id del pago. Ej.: 8c2d0000-0000-4a1b-9c2d-000000000001 |
document obligatorio | query | string | Document id of the wallet holder. Ej.: 1090123456 |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Pago. | WalletBillPayment
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.wallet.bills.get_payment()client.wallet.bills.getPayment()$client->wallet->bills->getPayment()await client.Wallet.Bills.GetPaymentAsync()client.Wallet.Bills.GetPayment(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/bills/payments/8c2d0000-0000-4a1b-9c2d-000000000001/?document=1090123456" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Límites Bre-B del titular #
GET/v1/gateway/wallet/breb/limits/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
document obligatorio | query | string | Document id of the wallet holder. Ej.: 1090123456 |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Límites. | WalletBreBLimits
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.wallet.breb.limits()client.wallet.breb.limits()$client->wallet->breb->limits()await client.Wallet.BreB.LimitsAsync()client.Wallet.BreB.Limits(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/breb/limits/?document=1090123456" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Resolver una llave Bre-B #
POST/v1/gateway/wallet/breb/resolve/
Cuerpo de la petición
Tipo de contenido: application/json · obligatorio
Esquema WalletBreBResolveIn
| Campo | Tipo | Descripción |
|---|---|---|
document obligatorio | string | Ej.: "1032456789" |
key_type obligatorio | string | Valores: PHONE, DOCUMENT, EMAIL, ALIAS. |
value obligatorio | string | Ej.: "3109876543" |
Acepta campos adicionales (additionalProperties): se reenvían al motor sin cambios.
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Resolución. | WalletResolution
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.wallet.breb.resolve()client.wallet.breb.resolve()$client->wallet->breb->resolve()await client.Wallet.BreB.ResolveAsync()client.Wallet.BreB.Resolve(ctx, …)curl -X POST "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/breb/resolve/" \
-H "X-API-Key: $COMPENSE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"document": "1032456789",
"key_type": "PHONE",
"value": "3109876543"
}'Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Enviar por Bre-B #
POST/v1/gateway/wallet/breb/transfers/
resolution_token de breb/resolve. Eventos: wallets.transfer.created / wallets.transfer.failed.Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
Idempotency-Key obligatorio | cabecera | string | Obligatoria en operaciones que mueven dinero (sin ella: 400). Ej.: horizonte-2026-06-26-credit-000123 |
Cuerpo de la petición
Tipo de contenido: application/json · obligatorio
Esquema WalletTransferIn2 — Envío P2P o Bre-B: solo con el resolution_token del resolve (nunca un id suelto).
| Campo | Tipo | Descripción |
|---|---|---|
amount obligatorio | MoneyCOP | |
description | string | Máx. 140 caracteres. |
document obligatorio | string | Ej.: "1032456789" |
resolution_token obligatorio | string |
Acepta campos adicionales (additionalProperties): se reenvían al motor sin cambios.
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Procesado; sobre estándar {status, transaction_id, module, data}. | TransactionEnvelope
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.wallet.breb.transfer()client.wallet.breb.transfer()$client->wallet->breb->transfer()await client.Wallet.BreB.TransferAsync()client.Wallet.BreB.Transfer(ctx, …)curl -X POST "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/breb/transfers/" \
-H "X-API-Key: $COMPENSE_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"document": "1032456789",
"resolution_token": "<resolution_token>",
"amount": "3500000"
}'Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
List issued cards (non-sensitive metadata) #
GET/v1/gateway/wallet/cards/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
document obligatorio | query | string | Document id of the wallet holder. Ej.: 1090123456 |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | The holder’s cards. | WalletCardList
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.cards.list()client.cards.list()$client->cards->list()await client.Cards.ListAsync()client.Cards.List(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/cards/?document=1090123456" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Issue a card (debit; virtual or physical) #
POST/v1/gateway/wallet/cards/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
Idempotency-Key | cabecera | string | Client-generated key that makes a write safely retryable. Replaying the same key returns the original result with idempotent_replay: true; a replay while the original is still in flight returns 409. Ej.: horizonte-2026-06-26-credit-000123 |
Cuerpo de la petición
Tipo de contenido: application/json · obligatorio
Esquema WalletCardIssueIn — Issue a card (debit; virtual or physical) for the wallet holder.
| Campo | Tipo | Descripción |
|---|---|---|
document obligatorio | string | Ej.: "1032456789" |
form_factor | string | Valores: virtual, physical. Ej.: "virtual" |
Acepta campos adicionales (additionalProperties): se reenvían al motor sin cambios.
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Accepted; transaction enqueued / processed. | TransactionEnvelope
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.cards.issue()client.cards.issue()$client->cards->issue()await client.Wallet.Cards.IssueAsync()client.Cards.Issue(ctx, …)curl -X POST "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/cards/" \
-H "X-API-Key: $COMPENSE_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"document": "1032456789",
"form_factor": "virtual"
}'Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Change card status (freeze / unfreeze / block) #
POST/v1/gateway/wallet/cards/{card_id}/status/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
card_id obligatorio | ruta | string | Card id returned by issue/list. Ej.: card-9 |
Idempotency-Key | cabecera | string | Client-generated key that makes a write safely retryable. Replaying the same key returns the original result with idempotent_replay: true; a replay while the original is still in flight returns 409. Ej.: horizonte-2026-06-26-credit-000123 |
Cuerpo de la petición
Tipo de contenido: application/json · obligatorio
Esquema WalletCardStatusIn — Change a card’s state (freeze / unfreeze / block).
| Campo | Tipo | Descripción |
|---|---|---|
document obligatorio | string | Ej.: "1032456789" |
status obligatorio | string | Valores: freeze, unfreeze, block. Ej.: "freeze" |
Acepta campos adicionales (additionalProperties): se reenvían al motor sin cambios.
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Accepted; transaction enqueued / processed. | TransactionEnvelope
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.cards.set_status()client.cards.setStatus()$client->cards->setStatus()await client.Cards.SetStatusAsync()client.Cards.SetStatus(ctx, …)curl -X POST "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/cards/card-9/status/" \
-H "X-API-Key: $COMPENSE_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"document": "1032456789",
"status": "freeze"
}'Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Movements on a card #
GET/v1/gateway/wallet/cards/{card_id}/transactions/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
card_id obligatorio | ruta | string | Card id returned by issue/list. Ej.: card-9 |
document obligatorio | query | string | Document id of the wallet holder. Ej.: 1090123456 |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Card movements. | WalletCardTransactionList
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.cards.transactions()client.cards.transactions()$client->cards->transactions()await client.Cards.TransactionsAsync()client.Cards.Transactions(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/cards/card-9/transactions/?document=1090123456" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Execute a currency conversion #
POST/v1/gateway/wallet/fx/convert/
Idempotency-Key: without one a retry converts twice.Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
Idempotency-Key | cabecera | string | Client-generated key that makes a write safely retryable. Replaying the same key returns the original result with idempotent_replay: true; a replay while the original is still in flight returns 409. Ej.: horizonte-2026-06-26-credit-000123 |
Cuerpo de la petición
Tipo de contenido: application/json · obligatorio
Esquema FxConvertIn — Execute a currency conversion (moves money — idempotency-key recommended).
| Campo | Tipo | Descripción |
|---|---|---|
amount obligatorio | MoneyCOP | |
buy_currency obligatorio | string | Ej.: "USD" |
document | string | Ej.: "1032456789" |
quote_id | string (nullable) | A quote id returned by /fx/quote/. Ej.: "fxq_abc123" |
sell_currency obligatorio | string | Ej.: "COP" |
Acepta campos adicionales (additionalProperties): se reenvían al motor sin cambios.
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Accepted; transaction enqueued / processed. | TransactionEnvelope
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.fx.convert()client.fx.convert()$client->fx->convert()await client.Fx.ConvertAsync()client.Wallet.FX.Convert(ctx, …)curl -X POST "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/fx/convert/" \
-H "X-API-Key: $COMPENSE_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"document": "1032456789",
"quote_id": "fxq_abc123",
"sell_currency": "COP",
"buy_currency": "USD",
"amount": "1000000"
}'Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Quote a currency conversion #
POST/v1/gateway/wallet/fx/quote/
Idempotency-Key. A quote is indicative — the rate is re-resolved at convert time.Cuerpo de la petición
Tipo de contenido: application/json · obligatorio
Esquema FxQuoteIn — Request an indicative FX quote (moves no money, not billable).
| Campo | Tipo | Descripción |
|---|---|---|
amount obligatorio | MoneyCOP | |
buy_currency obligatorio | string | Ej.: "USD" |
document | string | Ej.: "1032456789" |
sell_currency obligatorio | string | Ej.: "COP" |
Acepta campos adicionales (additionalProperties): se reenvían al motor sin cambios.
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Indicative quote. | FxQuote
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.fx.quote()client.fx.quote()$client->fx->quote()await client.Wallet.Fx.QuoteAsync()client.FX.Quote(ctx, …)curl -X POST "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/fx/quote/" \
-H "X-API-Key: $COMPENSE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"document": "1032456789",
"sell_currency": "COP",
"buy_currency": "USD",
"amount": "1000000"
}'Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Resolver destinatario P2P #
POST/v1/gateway/wallet/p2p/resolve/
resolution_token (300 s) atado al titular que paga y al destinatario. No mueve dinero ni consume cuota.Cuerpo de la petición
Tipo de contenido: application/json · obligatorio
Esquema WalletResolveP2PIn
| Campo | Tipo | Descripción |
|---|---|---|
alias obligatorio | string | Celular, correo, documento o @alias del destinatario. Ej.: "3001234567" |
document obligatorio | string | Documento del titular que envía. Ej.: "1032456789" |
key_type | string | Opcional: desambigua una cadena de dígitos. Valores: PHONE, EMAIL, DOCUMENT, ALIAS. |
Acepta campos adicionales (additionalProperties): se reenvían al motor sin cambios.
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Resolución. | WalletResolution
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.wallet.p2p.resolve()client.wallet.p2p.resolve()$client->wallet->p2p->resolve()await client.Wallet.P2P.ResolveAsync()client.Wallet.P2P.Resolve(ctx, …)curl -X POST "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/p2p/resolve/" \
-H "X-API-Key: $COMPENSE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"document": "1032456789",
"alias": "3001234567"
}'Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Transferir a otro afiliado #
POST/v1/gateway/wallet/p2p/transfers/
resolution_token de p2p/resolve. Evento: wallets.transfer.created.Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
Idempotency-Key obligatorio | cabecera | string | Obligatoria en operaciones que mueven dinero (sin ella: 400). Ej.: horizonte-2026-06-26-credit-000123 |
Cuerpo de la petición
Tipo de contenido: application/json · obligatorio
Esquema WalletTransferIn2 — Envío P2P o Bre-B: solo con el resolution_token del resolve (nunca un id suelto).
| Campo | Tipo | Descripción |
|---|---|---|
amount obligatorio | MoneyCOP | |
description | string | Máx. 140 caracteres. |
document obligatorio | string | Ej.: "1032456789" |
resolution_token obligatorio | string |
Acepta campos adicionales (additionalProperties): se reenvían al motor sin cambios.
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Procesado; sobre estándar {status, transaction_id, module, data}. | TransactionEnvelope
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.wallet.p2p.transfer()client.wallet.p2p.transfer()$client->wallet->p2p->transfer()await client.Wallet.P2P.TransferAsync()client.Wallet.P2P.Transfer(ctx, …)curl -X POST "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/p2p/transfers/" \
-H "X-API-Key: $COMPENSE_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"document": "1032456789",
"resolution_token": "<resolution_token>",
"amount": "3500000"
}'Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Recargar un celular #
POST/v1/gateway/wallet/topups/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
Idempotency-Key obligatorio | cabecera | string | Obligatoria en operaciones que mueven dinero (sin ella: 400). Ej.: horizonte-2026-06-26-credit-000123 |
Cuerpo de la petición
Tipo de contenido: application/json · obligatorio
Esquema WalletTopupIn
| Campo | Tipo | Descripción |
|---|---|---|
amount obligatorio | MoneyCOP | |
carrier obligatorio | string | Ej.: "CLARO" |
document obligatorio | string | Ej.: "1032456789" |
phone_number obligatorio | string | Ej.: "3001234567" |
Acepta campos adicionales (additionalProperties): se reenvían al motor sin cambios.
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Procesado; sobre estándar {status, transaction_id, module, data}. | TransactionEnvelope
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.wallet.topups.create()client.wallet.topups.create()$client->wallet->topups->create()await client.Wallet.Topups.CreateAsync()client.Wallet.Topups.Create(ctx, …)curl -X POST "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/topups/" \
-H "X-API-Key: $COMPENSE_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"document": "1032456789",
"phone_number": "3001234567",
"carrier": "CLARO",
"amount": "3500000"
}'Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Operadores de recarga #
GET/v1/gateway/wallet/topups/operators/
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Operadores. | WalletTopupOperators
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.wallet.topups.operators()client.wallet.topups.operators()$client->wallet->topups->operators()await client.Wallet.Topups.OperatorsAsync()client.Wallet.Topups.Operators(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/topups/operators/" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Movimientos del titular (paginado, con filtros) #
GET/v1/gateway/wallet/transactions/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
document obligatorio | query | string | Document id of the wallet holder. Ej.: 1090123456 |
start_date | query | string | Desde (YYYY-MM-DD o ISO 8601). |
end_date | query | string | Hasta, inclusive (YYYY-MM-DD o ISO 8601). |
category | query | string | Categoría (TRANSFER, PAYMENT, …). |
type | query | string | Tipo de transacción del motor. |
limit | query | integer | Tamaño de página (1–100, por defecto 50). |
offset | query | integer | Desplazamiento (por defecto 0). |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Página de movimientos. | WalletTransactionPage
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.wallet.transactions.list()client.wallet.transactions.list()$client->wallet->transactions->list()await client.Wallet.Transactions.ListAsync()client.Wallet.Transactions.List(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/transactions/?document=1090123456" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Detalle de un movimiento #
GET/v1/gateway/wallet/transactions/{tx_id}/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
tx_id obligatorio | ruta | string | Id del movimiento. Ej.: 6b1f8c1e-0000-4a1b-9c2d-000000000001 |
document obligatorio | query | string | Document id of the wallet holder. Ej.: 1090123456 |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Movimiento. | WalletTransaction
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.wallet.transactions.get()client.wallet.transactions.get()$client->wallet->transactions->get()await client.Wallet.Transactions.GetAsync()client.Wallet.Transactions.Get(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/wallet/transactions/6b1f8c1e-0000-4a1b-9c2d-000000000001/?document=1090123456" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.