API reference · tag wallet
Wallet
Wallet: balance, movements, P2P, Bre-B, bills, top-ups, accounts and pockets, cards and FX. The account holder is identified by document.
This page is generated from the contract (data/gateway-v1.json): each operation shows its verb,
path, parameters, body, responses, whether it carries an Idempotency-Key, and the equivalent method in all five SDKs.
For the end-to-end flow with complete examples, see the implementation guide.
Operations in tag wallet #
Contract description: 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.
| Method | Path | Operation | 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 | recommended |
| POST | /v1/gateway/wallet/accounts/transfer/ | Transfer between the holder's own accounts | wallet:accounts | recommended |
| GET | /v1/gateway/wallet/balance/ | Holder's wallet balance | wallet:read | — |
| GET | /v1/gateway/wallet/billers/ | Biller catalog | wallet:read | — |
| POST | /v1/gateway/wallet/bills/inquiry/ | Look up a bill | wallet:payments | — |
| POST | /v1/gateway/wallet/bills/pay/ | Pay a bill | wallet:payments | required |
| GET | /v1/gateway/wallet/bills/payments/ | Bill payment and top-up history | wallet:read | — |
| GET | /v1/gateway/wallet/bills/payments/{payment_id}/ | Payment detail | wallet:read | — |
| GET | /v1/gateway/wallet/breb/limits/ | Holder's Bre-B limits | wallet:read | — |
| POST | /v1/gateway/wallet/breb/resolve/ | Resolve a Bre-B key | wallet:transfer | — |
| POST | /v1/gateway/wallet/breb/transfers/ | Send via Bre-B | wallet:transfer | required |
| 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 | recommended |
| POST | /v1/gateway/wallet/cards/{card_id}/status/ | Change card status (freeze / unfreeze / block) | wallet:cards | recommended |
| 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 | recommended |
| POST | /v1/gateway/wallet/fx/quote/ | Quote a currency conversion | wallet:fx | — |
| POST | /v1/gateway/wallet/p2p/resolve/ | Resolve a P2P recipient | wallet:transfer | — |
| POST | /v1/gateway/wallet/p2p/transfers/ | Transfer to another affiliate | wallet:transfer | required |
| POST | /v1/gateway/wallet/topups/ | Top up a mobile phone | wallet:topup | required |
| GET | /v1/gateway/wallet/topups/operators/ | Top-up carriers | wallet:read | — |
| GET | /v1/gateway/wallet/transactions/ | Holder's transactions (paginated, with filters) | wallet:read | — |
| GET | /v1/gateway/wallet/transactions/{tx_id}/ | Transaction detail | wallet:read | — |
List the holder's accounts (wallet, pockets, savings) #
GET/v1/gateway/wallet/accounts/
Parameters
| Name | In | Type | Description |
|---|---|---|---|
document required | query | string | Document id of the wallet holder. E.g.: 1090123456 |
Responses
| Code | Description | Body |
|---|---|---|
| 200 | The holder’s accounts. | WalletAccountList
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Create a sub-account (pocket / savings / goal) #
POST/v1/gateway/wallet/accounts/
Parameters
| Name | In | Type | Description |
|---|---|---|---|
Idempotency-Key | header | 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. E.g.: horizonte-2026-06-26-credit-000123 |
Request body
Content type: application/json · required
Schema WalletAccountCreateIn — Create a sub-account (pocket / savings / goal) for the wallet holder.
| Field | Type | Description |
|---|---|---|
document required | string | National document of the wallet holder. E.g.: "1032456789" |
kind required | string | Values: pocket, savings, goal. E.g.: "pocket" |
name | string | E.g.: "Ahorro vacaciones" |
Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Accepted; transaction enqueued / processed. | TransactionEnvelope
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"
}'Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
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.Parameters
| Name | In | Type | Description |
|---|---|---|---|
Idempotency-Key | header | 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. E.g.: horizonte-2026-06-26-credit-000123 |
Request body
Content type: application/json · required
Schema WalletTransferIn — Transfer funds between two of the holder’s own accounts.
| Field | Type | Description |
|---|---|---|
amount required | MoneyCOP | |
document required | string | E.g.: "1032456789" |
from_account required | string | E.g.: "acc_main" |
to_account required | string | E.g.: "acc_pocket_1" |
Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Accepted; transaction enqueued / processed. | TransactionEnvelope
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"
}'Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Holder's wallet balance #
GET/v1/gateway/wallet/balance/
Parameters
| Name | In | Type | Description |
|---|---|---|---|
document required | query | string | Document id of the wallet holder. E.g.: 1090123456 |
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Balance. | WalletBalance
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Biller catalog #
GET/v1/gateway/wallet/billers/
Parameters
| Name | In | Type | Description |
|---|---|---|---|
category | query | string | Biller category. |
q | query | string | Search by name or code. |
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Billers. | WalletBillerList
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Look up a bill #
POST/v1/gateway/wallet/bills/inquiry/
Request body
Content type: application/json · required
Schema WalletBillInquiryIn
| Field | Type | Description |
|---|---|---|
barcode | string | Alternative to biller_code+reference (GS1). |
biller_code | string | E.g.: "EPM" |
document required | string | E.g.: "1032456789" |
reference | string | E.g.: "123456789" |
Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Bill. | WalletInvoice
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"
}'Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Pay a bill #
POST/v1/gateway/wallet/bills/pay/
Parameters
| Name | In | Type | Description |
|---|---|---|---|
Idempotency-Key required | header | string | Required on operations that move money (without it: 400). E.g.: horizonte-2026-06-26-credit-000123 |
Request body
Content type: application/json · required
Schema WalletBillPayIn
| Field | Type | Description |
|---|---|---|
amount required | MoneyCOP | |
biller_code required | string | E.g.: "EPM" |
document required | string | E.g.: "1032456789" |
reference required | string | E.g.: "123456789" |
Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Processed; standard envelope {status, transaction_id, module, data}. | TransactionEnvelope
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"
}'Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Bill payment and top-up history #
GET/v1/gateway/wallet/bills/payments/
Parameters
| Name | In | Type | Description |
|---|---|---|---|
document required | query | string | Document id of the wallet holder. E.g.: 1090123456 |
kind | query | string | BILL or TOPUP. |
limit | query | integer | Page size (1–100, default 50). |
offset | query | integer | Offset (default 0). |
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Page of payments. | WalletBillPaymentPage
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Payment detail #
GET/v1/gateway/wallet/bills/payments/{payment_id}/
Parameters
| Name | In | Type | Description |
|---|---|---|---|
payment_id required | path | string | Payment id. E.g.: 8c2d0000-0000-4a1b-9c2d-000000000001 |
document required | query | string | Document id of the wallet holder. E.g.: 1090123456 |
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Payment. | WalletBillPayment
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Holder's Bre-B limits #
GET/v1/gateway/wallet/breb/limits/
Parameters
| Name | In | Type | Description |
|---|---|---|---|
document required | query | string | Document id of the wallet holder. E.g.: 1090123456 |
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Limits. | WalletBreBLimits
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Resolve a Bre-B key #
POST/v1/gateway/wallet/breb/resolve/
Request body
Content type: application/json · required
Schema WalletBreBResolveIn
| Field | Type | Description |
|---|---|---|
document required | string | E.g.: "1032456789" |
key_type required | string | Values: PHONE, DOCUMENT, EMAIL, ALIAS. |
value required | string | E.g.: "3109876543" |
Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Resolution. | WalletResolution
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"
}'Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Send via Bre-B #
POST/v1/gateway/wallet/breb/transfers/
resolution_token from breb/resolve. Events: wallets.transfer.created / wallets.transfer.failed.Parameters
| Name | In | Type | Description |
|---|---|---|---|
Idempotency-Key required | header | string | Required on operations that move money (without it: 400). E.g.: horizonte-2026-06-26-credit-000123 |
Request body
Content type: application/json · required
Schema WalletTransferIn2 — P2P or Bre-B send: only with the resolution_token from resolve (never a bare id).
| Field | Type | Description |
|---|---|---|
amount required | MoneyCOP | |
description | string | Max. 140 characters. |
document required | string | E.g.: "1032456789" |
resolution_token required | string |
Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Processed; standard envelope {status, transaction_id, module, data}. | TransactionEnvelope
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"
}'Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
List issued cards (non-sensitive metadata) #
GET/v1/gateway/wallet/cards/
Parameters
| Name | In | Type | Description |
|---|---|---|---|
document required | query | string | Document id of the wallet holder. E.g.: 1090123456 |
Responses
| Code | Description | Body |
|---|---|---|
| 200 | The holder’s cards. | WalletCardList
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Issue a card (debit; virtual or physical) #
POST/v1/gateway/wallet/cards/
Parameters
| Name | In | Type | Description |
|---|---|---|---|
Idempotency-Key | header | 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. E.g.: horizonte-2026-06-26-credit-000123 |
Request body
Content type: application/json · required
Schema WalletCardIssueIn — Issue a card (debit; virtual or physical) for the wallet holder.
| Field | Type | Description |
|---|---|---|
document required | string | E.g.: "1032456789" |
form_factor | string | Values: virtual, physical. E.g.: "virtual" |
Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Accepted; transaction enqueued / processed. | TransactionEnvelope
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"
}'Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Change card status (freeze / unfreeze / block) #
POST/v1/gateway/wallet/cards/{card_id}/status/
Parameters
| Name | In | Type | Description |
|---|---|---|---|
card_id required | path | string | Card id returned by issue/list. E.g.: card-9 |
Idempotency-Key | header | 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. E.g.: horizonte-2026-06-26-credit-000123 |
Request body
Content type: application/json · required
Schema WalletCardStatusIn — Change a card’s state (freeze / unfreeze / block).
| Field | Type | Description |
|---|---|---|
document required | string | E.g.: "1032456789" |
status required | string | Values: freeze, unfreeze, block. E.g.: "freeze" |
Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Accepted; transaction enqueued / processed. | TransactionEnvelope
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"
}'Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Movements on a card #
GET/v1/gateway/wallet/cards/{card_id}/transactions/
Parameters
| Name | In | Type | Description |
|---|---|---|---|
card_id required | path | string | Card id returned by issue/list. E.g.: card-9 |
document required | query | string | Document id of the wallet holder. E.g.: 1090123456 |
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Card movements. | WalletCardTransactionList
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Execute a currency conversion #
POST/v1/gateway/wallet/fx/convert/
Idempotency-Key: without one a retry converts twice.Parameters
| Name | In | Type | Description |
|---|---|---|---|
Idempotency-Key | header | 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. E.g.: horizonte-2026-06-26-credit-000123 |
Request body
Content type: application/json · required
Schema FxConvertIn — Execute a currency conversion (moves money — idempotency-key recommended).
| Field | Type | Description |
|---|---|---|
amount required | MoneyCOP | |
buy_currency required | string | E.g.: "USD" |
document | string | E.g.: "1032456789" |
quote_id | string (nullable) | A quote id returned by /fx/quote/. E.g.: "fxq_abc123" |
sell_currency required | string | E.g.: "COP" |
Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Accepted; transaction enqueued / processed. | TransactionEnvelope
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"
}'Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Quote a currency conversion #
POST/v1/gateway/wallet/fx/quote/
Idempotency-Key. A quote is indicative — the rate is re-resolved at convert time.Request body
Content type: application/json · required
Schema FxQuoteIn — Request an indicative FX quote (moves no money, not billable).
| Field | Type | Description |
|---|---|---|
amount required | MoneyCOP | |
buy_currency required | string | E.g.: "USD" |
document | string | E.g.: "1032456789" |
sell_currency required | string | E.g.: "COP" |
Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Indicative quote. | FxQuote
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"
}'Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Resolve a P2P recipient #
POST/v1/gateway/wallet/p2p/resolve/
resolution_token (300 s) bound to the paying holder and the recipient. It doesn’t move money or consume quota.Request body
Content type: application/json · required
Schema WalletResolveP2PIn
| Field | Type | Description |
|---|---|---|
alias required | string | Recipient’s mobile number, email, document or @alias. E.g.: "3001234567" |
document required | string | Document of the sending holder. E.g.: "1032456789" |
key_type | string | Optional: disambiguates a string of digits. Values: PHONE, EMAIL, DOCUMENT, ALIAS. |
Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Resolution. | WalletResolution
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"
}'Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Transfer to another affiliate #
POST/v1/gateway/wallet/p2p/transfers/
resolution_token from p2p/resolve. Event: wallets.transfer.created.Parameters
| Name | In | Type | Description |
|---|---|---|---|
Idempotency-Key required | header | string | Required on operations that move money (without it: 400). E.g.: horizonte-2026-06-26-credit-000123 |
Request body
Content type: application/json · required
Schema WalletTransferIn2 — P2P or Bre-B send: only with the resolution_token from resolve (never a bare id).
| Field | Type | Description |
|---|---|---|
amount required | MoneyCOP | |
description | string | Max. 140 characters. |
document required | string | E.g.: "1032456789" |
resolution_token required | string |
Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Processed; standard envelope {status, transaction_id, module, data}. | TransactionEnvelope
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"
}'Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Top up a mobile phone #
POST/v1/gateway/wallet/topups/
Parameters
| Name | In | Type | Description |
|---|---|---|---|
Idempotency-Key required | header | string | Required on operations that move money (without it: 400). E.g.: horizonte-2026-06-26-credit-000123 |
Request body
Content type: application/json · required
Schema WalletTopupIn
| Field | Type | Description |
|---|---|---|
amount required | MoneyCOP | |
carrier required | string | E.g.: "CLARO" |
document required | string | E.g.: "1032456789" |
phone_number required | string | E.g.: "3001234567" |
Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Processed; standard envelope {status, transaction_id, module, data}. | TransactionEnvelope
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"
}'Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Top-up carriers #
GET/v1/gateway/wallet/topups/operators/
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Carriers. | WalletTopupOperators
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Holder's transactions (paginated, with filters) #
GET/v1/gateway/wallet/transactions/
Parameters
| Name | In | Type | Description |
|---|---|---|---|
document required | query | string | Document id of the wallet holder. E.g.: 1090123456 |
start_date | query | string | From (YYYY-MM-DD or ISO 8601). |
end_date | query | string | To, inclusive (YYYY-MM-DD or ISO 8601). |
category | query | string | Category (TRANSFER, PAYMENT, …). |
type | query | string | Engine transaction type. |
limit | query | integer | Page size (1–100, default 50). |
offset | query | integer | Offset (default 0). |
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Page of transactions. | WalletTransactionPage
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.
Transaction detail #
GET/v1/gateway/wallet/transactions/{tx_id}/
Parameters
| Name | In | Type | Description |
|---|---|---|---|
tx_id required | path | string | Transaction id. E.g.: 6b1f8c1e-0000-4a1b-9c2d-000000000001 |
document required | query | string | Document id of the wallet holder. E.g.: 1090123456 |
Responses
| Code | Description | Body |
|---|---|---|
| 200 | Transaction. | WalletTransaction
application/json |
Possible errors (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 |
See problem+json errors for the equivalent exception in each SDK.
Example
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"Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.