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.

MethodPathOperationScopeIdem.
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:accountsrecommended
POST/v1/gateway/wallet/accounts/transfer/Transfer between the holder's own accountswallet:accountsrecommended
GET/v1/gateway/wallet/balance/Holder's wallet balancewallet:read—
GET/v1/gateway/wallet/billers/Biller catalogwallet:read—
POST/v1/gateway/wallet/bills/inquiry/Look up a billwallet:payments—
POST/v1/gateway/wallet/bills/pay/Pay a billwallet:paymentsrequired
GET/v1/gateway/wallet/bills/payments/Bill payment and top-up historywallet:read—
GET/v1/gateway/wallet/bills/payments/{payment_id}/Payment detailwallet:read—
GET/v1/gateway/wallet/breb/limits/Holder's Bre-B limitswallet:read—
POST/v1/gateway/wallet/breb/resolve/Resolve a Bre-B keywallet:transfer—
POST/v1/gateway/wallet/breb/transfers/Send via Bre-Bwallet:transferrequired
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:cardsrecommended
POST/v1/gateway/wallet/cards/{card_id}/status/Change card status (freeze / unfreeze / block)wallet:cardsrecommended
GET/v1/gateway/wallet/cards/{card_id}/transactions/Movements on a cardwallet:read—
POST/v1/gateway/wallet/fx/convert/Execute a currency conversionwallet:fxrecommended
POST/v1/gateway/wallet/fx/quote/Quote a currency conversionwallet:fx—
POST/v1/gateway/wallet/p2p/resolve/Resolve a P2P recipientwallet:transfer—
POST/v1/gateway/wallet/p2p/transfers/Transfer to another affiliatewallet:transferrequired
POST/v1/gateway/wallet/topups/Top up a mobile phonewallet:topuprequired
GET/v1/gateway/wallet/topups/operators/Top-up carrierswallet:read—
GET/v1/gateway/wallet/transactions/Holder's transactions (paginated, with filters)wallet:read—
GET/v1/gateway/wallet/transactions/{tx_id}/Transaction detailwallet:read—

List the holder's accounts (wallet, pockets, savings) #

GET/v1/gateway/wallet/accounts/

  • operationId listWalletAccounts
  • Authentication X-API-Key · scope wallet:read
  • Idempotency-Key not applicable

Parameters

NameInTypeDescription
document requiredquerystringDocument id of the wallet holder. E.g.: 1090123456

Responses

CodeDescriptionBody
200The holder’s accounts.WalletAccountList application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.accounts.list()

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/

  • operationId createWalletAccount
  • Authentication X-API-Key · scope wallet:accounts
  • Idempotency-Key recommended (the SDK generates it)

Parameters

NameInTypeDescription
Idempotency-KeyheaderstringClient-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.

FieldTypeDescription
document requiredstringNational document of the wallet holder. E.g.: "1032456789"
kind requiredstringValues: pocket, savings, goal. E.g.: "pocket"
namestringE.g.: "Ahorro vacaciones"

Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.

Responses

CodeDescriptionBody
200Accepted; transaction enqueued / processed.TransactionEnvelope application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.accounts.create_pocket()

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/

  • operationId transferBetweenWalletAccounts
  • Authentication X-API-Key · scope wallet:accounts
  • Idempotency-Key recommended (the SDK generates it)
Moves money between two accounts owned by the same holder. Send an Idempotency-Key: without one the gateway cannot collapse a retry and the transfer may execute twice.

Parameters

NameInTypeDescription
Idempotency-KeyheaderstringClient-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.

FieldTypeDescription
amount requiredMoneyCOP
document requiredstringE.g.: "1032456789"
from_account requiredstringE.g.: "acc_main"
to_account requiredstringE.g.: "acc_pocket_1"

Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.

Responses

CodeDescriptionBody
200Accepted; transaction enqueued / processed.TransactionEnvelope application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.accounts.transfer()

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/

  • operationId getWalletBalance
  • Authentication X-API-Key · scope wallet:read
  • Idempotency-Key not applicable

Parameters

NameInTypeDescription
document requiredquerystringDocument id of the wallet holder. E.g.: 1090123456

Responses

CodeDescriptionBody
200Balance.WalletBalance application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.wallet.balance()

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/

  • operationId listBillers
  • Authentication X-API-Key · scope wallet:read
  • Idempotency-Key not applicable

Parameters

NameInTypeDescription
categoryquerystringBiller category.
qquerystringSearch by name or code.

Responses

CodeDescriptionBody
200Billers.WalletBillerList application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.wallet.bills.billers()

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/

  • operationId inquireBill
  • Authentication X-API-Key · scope wallet:payments
  • Idempotency-Key not applicable

Request body

Content type: application/json · required

Schema WalletBillInquiryIn

FieldTypeDescription
barcodestringAlternative to biller_code+reference (GS1).
biller_codestringE.g.: "EPM"
document requiredstringE.g.: "1032456789"
referencestringE.g.: "123456789"

Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.

Responses

CodeDescriptionBody
200Bill.WalletInvoice application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.wallet.bills.inquire()

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/

  • operationId payBill
  • Authentication X-API-Key · scope wallet:payments
  • Idempotency-Key required
data.status APPROVED (200/201) or PENDING (202: check bills/payments/{id}/). Event: wallets.bill_payment.completed.

Parameters

NameInTypeDescription
Idempotency-Key requiredheaderstringRequired 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

FieldTypeDescription
amount requiredMoneyCOP
biller_code requiredstringE.g.: "EPM"
document requiredstringE.g.: "1032456789"
reference requiredstringE.g.: "123456789"

Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.

Responses

CodeDescriptionBody
200Processed; 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
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.wallet.bills.pay()

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/

  • operationId listBillPayments
  • Authentication X-API-Key · scope wallet:read
  • Idempotency-Key not applicable

Parameters

NameInTypeDescription
document requiredquerystringDocument id of the wallet holder. E.g.: 1090123456
kindquerystringBILL or TOPUP.
limitqueryintegerPage size (1–100, default 50).
offsetqueryintegerOffset (default 0).

Responses

CodeDescriptionBody
200Page of payments.WalletBillPaymentPage application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.wallet.bills.list_payments()

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}/

  • operationId getBillPayment
  • Authentication X-API-Key · scope wallet:read
  • Idempotency-Key not applicable

Parameters

NameInTypeDescription
payment_id requiredpathstringPayment id. E.g.: 8c2d0000-0000-4a1b-9c2d-000000000001
document requiredquerystringDocument id of the wallet holder. E.g.: 1090123456

Responses

CodeDescriptionBody
200Payment.WalletBillPayment application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.wallet.bills.get_payment()

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/

  • operationId getBreBLimits
  • Authentication X-API-Key · scope wallet:read
  • Idempotency-Key not applicable

Parameters

NameInTypeDescription
document requiredquerystringDocument id of the wallet holder. E.g.: 1090123456

Responses

CodeDescriptionBody
200Limits.WalletBreBLimits application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.wallet.breb.limits()

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/

  • operationId resolveBreBKey
  • Authentication X-API-Key · scope wallet:transfer
  • Idempotency-Key not applicable

Request body

Content type: application/json · required

Schema WalletBreBResolveIn

FieldTypeDescription
document requiredstringE.g.: "1032456789"
key_type requiredstringValues: PHONE, DOCUMENT, EMAIL, ALIAS.
value requiredstringE.g.: "3109876543"

Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.

Responses

CodeDescriptionBody
200Resolution.WalletResolution application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.wallet.breb.resolve()

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/

  • operationId createBreBTransfer
  • Authentication X-API-Key · scope wallet:transfer
  • Idempotency-Key required
Only with the resolution_token from breb/resolve. Events: wallets.transfer.created / wallets.transfer.failed.

Parameters

NameInTypeDescription
Idempotency-Key requiredheaderstringRequired 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).

FieldTypeDescription
amount requiredMoneyCOP
descriptionstringMax. 140 characters.
document requiredstringE.g.: "1032456789"
resolution_token requiredstring

Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.

Responses

CodeDescriptionBody
200Processed; 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
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.wallet.breb.transfer()

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/

  • operationId listWalletCards
  • Authentication X-API-Key · scope wallet:read
  • Idempotency-Key not applicable

Parameters

NameInTypeDescription
document requiredquerystringDocument id of the wallet holder. E.g.: 1090123456

Responses

CodeDescriptionBody
200The holder’s cards.WalletCardList application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.cards.list()

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/

  • operationId issueWalletCard
  • Authentication X-API-Key · scope wallet:cards
  • Idempotency-Key recommended (the SDK generates it)

Parameters

NameInTypeDescription
Idempotency-KeyheaderstringClient-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.

FieldTypeDescription
document requiredstringE.g.: "1032456789"
form_factorstringValues: virtual, physical. E.g.: "virtual"

Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.

Responses

CodeDescriptionBody
200Accepted; transaction enqueued / processed.TransactionEnvelope application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.cards.issue()

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/

  • operationId setWalletCardStatus
  • Authentication X-API-Key · scope wallet:cards
  • Idempotency-Key recommended (the SDK generates it)

Parameters

NameInTypeDescription
card_id requiredpathstringCard id returned by issue/list. E.g.: card-9
Idempotency-KeyheaderstringClient-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).

FieldTypeDescription
document requiredstringE.g.: "1032456789"
status requiredstringValues: freeze, unfreeze, block. E.g.: "freeze"

Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.

Responses

CodeDescriptionBody
200Accepted; transaction enqueued / processed.TransactionEnvelope application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.cards.set_status()

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/

  • operationId listWalletCardTransactions
  • Authentication X-API-Key · scope wallet:read
  • Idempotency-Key not applicable

Parameters

NameInTypeDescription
card_id requiredpathstringCard id returned by issue/list. E.g.: card-9
document requiredquerystringDocument id of the wallet holder. E.g.: 1090123456

Responses

CodeDescriptionBody
200Card movements.WalletCardTransactionList application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.cards.transactions()

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/

  • operationId executeFxConversion
  • Authentication X-API-Key · scope wallet:fx
  • Idempotency-Key recommended (the SDK generates it)
Executes the conversion and moves money. Send an Idempotency-Key: without one a retry converts twice.

Parameters

NameInTypeDescription
Idempotency-KeyheaderstringClient-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).

FieldTypeDescription
amount requiredMoneyCOP
buy_currency requiredstringE.g.: "USD"
documentstringE.g.: "1032456789"
quote_idstring (nullable)A quote id returned by /fx/quote/. E.g.: "fxq_abc123"
sell_currency requiredstringE.g.: "COP"

Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.

Responses

CodeDescriptionBody
200Accepted; transaction enqueued / processed.TransactionEnvelope application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.fx.convert()

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/

  • operationId quoteFxConversion
  • Authentication X-API-Key · scope wallet:fx
  • Idempotency-Key not applicable
Prices a conversion. Moves no money, consumes no monthly quota and takes no 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).

FieldTypeDescription
amount requiredMoneyCOP
buy_currency requiredstringE.g.: "USD"
documentstringE.g.: "1032456789"
sell_currency requiredstringE.g.: "COP"

Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.

Responses

CodeDescriptionBody
200Indicative quote.FxQuote application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.fx.quote()

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/

  • operationId resolveP2PRecipient
  • Authentication X-API-Key · scope wallet:transfer
  • Idempotency-Key not applicable
Returns the masked name and a 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

FieldTypeDescription
alias requiredstringRecipient’s mobile number, email, document or @alias. E.g.: "3001234567"
document requiredstringDocument of the sending holder. E.g.: "1032456789"
key_typestringOptional: disambiguates a string of digits. Values: PHONE, EMAIL, DOCUMENT, ALIAS.

Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.

Responses

CodeDescriptionBody
200Resolution.WalletResolution application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.wallet.p2p.resolve()

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/

  • operationId createP2PTransfer
  • Authentication X-API-Key · scope wallet:transfer
  • Idempotency-Key required
Only accepts the resolution_token from p2p/resolve. Event: wallets.transfer.created.

Parameters

NameInTypeDescription
Idempotency-Key requiredheaderstringRequired 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).

FieldTypeDescription
amount requiredMoneyCOP
descriptionstringMax. 140 characters.
document requiredstringE.g.: "1032456789"
resolution_token requiredstring

Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.

Responses

CodeDescriptionBody
200Processed; 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
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.wallet.p2p.transfer()

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/

  • operationId createTopup
  • Authentication X-API-Key · scope wallet:topup
  • Idempotency-Key required
Event: wallets.topup.completed.

Parameters

NameInTypeDescription
Idempotency-Key requiredheaderstringRequired 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

FieldTypeDescription
amount requiredMoneyCOP
carrier requiredstringE.g.: "CLARO"
document requiredstringE.g.: "1032456789"
phone_number requiredstringE.g.: "3001234567"

Accepts additional fields (additionalProperties): they're forwarded to the engine unchanged.

Responses

CodeDescriptionBody
200Processed; 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
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.wallet.topups.create()

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/

  • operationId listTopupOperators
  • Authentication X-API-Key · scope wallet:read
  • Idempotency-Key not applicable

Responses

CodeDescriptionBody
200Carriers.WalletTopupOperators application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.wallet.topups.operators()

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/

  • operationId listWalletTransactions
  • Authentication X-API-Key · scope wallet:read
  • Idempotency-Key not applicable

Parameters

NameInTypeDescription
document requiredquerystringDocument id of the wallet holder. E.g.: 1090123456
start_datequerystringFrom (YYYY-MM-DD or ISO 8601).
end_datequerystringTo, inclusive (YYYY-MM-DD or ISO 8601).
categoryquerystringCategory (TRANSFER, PAYMENT, …).
typequerystringEngine transaction type.
limitqueryintegerPage size (1–100, default 50).
offsetqueryintegerOffset (default 0).

Responses

CodeDescriptionBody
200Page of transactions.WalletTransactionPage application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.wallet.transactions.list()

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}/

  • operationId getWalletTransaction
  • Authentication X-API-Key · scope wallet:read
  • Idempotency-Key not applicable

Parameters

NameInTypeDescription
tx_id requiredpathstringTransaction id. E.g.: 6b1f8c1e-0000-4a1b-9c2d-000000000001
document requiredquerystringDocument id of the wallet holder. E.g.: 1090123456

Responses

CodeDescriptionBody
200Transaction.WalletTransaction application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The 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

SDK method and HTTP request
client.wallet.transactions.get()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.