Step 1 of 10 Configuration API step

Authenticate

Exchange API credentials for a short-lived Bearer token (~20 minutes). Cache and reuse it across calls — refresh proactively before expiry.

POST https://api.cobre.co/v1/auth
Headers
Content-Typeapplication/json
Request body
{
"user_id": "cli_remit_co01",User IDRequirediAPI client user id used to obtain the access token.
"secret": "sk_live_Rm9xQ2pL7v"SecretRequirediAPI client secret paired with user_id for authentication.
}
Response 201
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcmVtaXRfY28wMSJ9.Rm8xQ3pL2nV7kWd9pT4bH6fY0gJ",Access TokeniShort-lived bearer token. Attach as Authorization: Bearer on later calls.
"type": "Bearer",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"expiration_time": 1200Expiration TimeiToken lifetime in seconds.
}
Documentation for this step
AuthenticationAuthentication Guide
Step 2 of 10 Configuration API step

Create USD Global Cobre Balance

Provision the USD Global Cobre Balance that holds treasury funding (SWIFT / local USD transfer) and is the source_id of every Cross-Border Money Movement. Request US funding instructions from your KAM after creation.

POST https://api.cobre.co/v1/accounts
Headers
AuthorizationBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcmVtaXRfY28wMSJ9.Rm8xQ3pL2nV7kWd9pT4bH6fY0gJ
Content-Typeapplication/json
Request body
{
"provider_id": "pr_global_cobre",ProviderRequirediCobre field at "provider_id" in this payload.
"action": "create",ActionRequirediCobre field at "action" in this payload.
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"currency": "usd"CurrencyRequirediISO currency code (e.g. cop, mxn).
},
"alias": "Remittance USD Global"AliasiDisplay name that helps identify it and clarify its purpose.
}
Response 201
{
"id": "acc_RemitUsd01",IdiUnique Cobre identifier for this resource.
"provider_id": "pr_global_cobre",ProviderRequirediCobre field at "provider_id" in this payload.
"provider_name": "Cobre Balance Global",Provider NameiCobre field at "provider_name" in this payload.
"connectivity": {ConnectivityiConnection/registration status for keys or accounts.
"status": "connected",StatusiLifecycle status object for the resource or movement.
"description": ""DescriptioniHuman-readable label or note.
},
"alias": "Remittance USD Global",AliasiDisplay name that helps identify it and clarify its purpose.
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"available_services": [Available ServicesiCobre field at "metadata.available_services" in this payload.
"mm_push_from_account"
],
"cobre_tag": "@remit00001"Cobre TagiCobre Balance tag identifying the destination account.
},
"account_number": "",Account NumberiBank account or CLABE number for the counterparty.
"account_type": "cobre_balance",Account TypeiCobre field at "account_type" in this payload.
"obtained_balance": 0,Obtained BalanceiCobre field at "obtained_balance" in this payload.
"obtained_balance_at": "2026-06-03T09:00:00Z",Obtained Balance AtiCobre field at "obtained_balance_at" in this payload.
"geo": "global",GeoiGeography code (e.g. col = Colombia, mex = Mexico).
"tags": [],TagsiCobre field at "tags" in this payload.
"currency": "usd",CurrencyiISO currency code (e.g. cop, mxn).
"created_at": "2026-06-03T09:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-03T09:00:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).
}
Step 3 of 10 Configuration API step

Create COP Cobre Balance

Provision the COP Cobre Balance that receives converted funds (Cross-Border destination_id) and funds every local payout (source_id).

POST https://api.cobre.co/v1/accounts
Headers
AuthorizationBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcmVtaXRfY28wMSJ9.Rm8xQ3pL2nV7kWd9pT4bH6fY0gJ
Content-Typeapplication/json
Request body
{
"provider_id": "pr_col_cobre",ProviderRequirediCobre field at "provider_id" in this payload.
"action": "create",ActionRequirediCobre field at "action" in this payload.
"alias": "Remittance COP Master"AliasiDisplay name that helps identify it and clarify its purpose.
}
Response 201
{
"id": "acc_RemitCop01",IdiUnique Cobre identifier for this resource.
"provider_id": "pr_col_cobre",ProviderRequirediCobre field at "provider_id" in this payload.
"provider_name": "Cobre Balance Colombia",Provider NameiCobre field at "provider_name" in this payload.
"connectivity": {ConnectivityiConnection/registration status for keys or accounts.
"status": "connected",StatusiLifecycle status object for the resource or movement.
"description": ""DescriptioniHuman-readable label or note.
},
"alias": "Remittance COP Master",AliasiDisplay name that helps identify it and clarify its purpose.
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"available_services": [Available ServicesiCobre field at "metadata.available_services" in this payload.
"mm_push_from_account"
]
},
"account_number": "",Account NumberiBank account or CLABE number for the counterparty.
"account_type": "Cobre Balance",Account TypeiCobre field at "account_type" in this payload.
"obtained_balance": 0,Obtained BalanceiCobre field at "obtained_balance" in this payload.
"obtained_balance_at": "2026-06-03T09:05:00Z",Obtained Balance AtiCobre field at "obtained_balance_at" in this payload.
"geo": "col",GeoiGeography code (e.g. col = Colombia, mex = Mexico).
"tags": [],TagsiCobre field at "tags" in this payload.
"currency": "cop",CurrencyiISO currency code (e.g. cop, mxn).
"created_at": "2026-06-03T09:05:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-03T09:05:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).
}
Step 4 of 10 Configuration API step

Subscribe to Remittance Events

Register webhooks for Cross-Border Money Movement lifecycle, local Money Movement status, and balance credits/debits. Prefer events over polling on the critical path; verify HMAC-SHA256 signatures on every delivery.

POST https://api.cobre.co/v1/subscriptions
Headers
AuthorizationBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcmVtaXRfY28wMSJ9.Rm8xQ3pL2nV7kWd9pT4bH6fY0gJ
Content-Typeapplication/json
Request body
{
"url": "https://remittance.example.co/webhooks/cobre",Notification URLRequirediHTTPS URL used by this resource (e.g. webhook endpoint).
"description": "USD/COP remittance lifecycle",DescriptioniHuman-readable label or note.
"events": [EventsiList of webhook event types this subscription listens to.
"cross_border_money_movements.status.initiated",
"cross_border_money_movements.status.processing",
"cross_border_money_movements.status.completed",
"cross_border_money_movements.status.rejected",
"money_movements.status.initiated",
"money_movements.status.processing",
"money_movements.status.completed",
"money_movements.status.rejected",
"money_movements.status.failed",
"money_movements.status.returned",
"accounts.balance.credit",
"accounts.balance.debit"
],
"event_signature_key": "WHremit9xZ"Signature keyRequirediSecret you set on the subscription; Cobre uses it to HMAC-SHA256-sign deliveries (verify via event-signature + event-timestamp headers).
}
Response 201
{
"id": "sub_RemitCb01",IdiUnique Cobre identifier for this resource.
"url": "https://remittance.example.co/webhooks/cobre",Notification URLRequirediHTTPS URL used by this resource (e.g. webhook endpoint).
"description": "USD/COP remittance lifecycle",DescriptioniHuman-readable label or note.
"events": [EventsiList of webhook event types this subscription listens to.
"cross_border_money_movements.status.initiated",
"cross_border_money_movements.status.processing",
"cross_border_money_movements.status.completed",
"cross_border_money_movements.status.rejected",
"money_movements.status.initiated",
"money_movements.status.processing",
"money_movements.status.completed",
"money_movements.status.rejected",
"money_movements.status.failed",
"money_movements.status.returned",
"accounts.balance.credit",
"accounts.balance.debit"
],
"event_signature_key": "******9xZ",Signature keyRequirediSecret you set on the subscription; Cobre uses it to HMAC-SHA256-sign deliveries (verify via event-signature + event-timestamp headers).
"created_at": "2026-06-03T09:10:00Z"Created AtiTimestamp when the resource was created (ISO 8601, UTC).
}
Step 5 of 10 Quotation API step

Request USD/COP Quote

Cobre quotes USD/COP only — sender-currency-to-USD conversion is handled on your platform. For a static quote, USD must already sit in the Global Balance before execution. Quotes expire in ~1 minute; persist fxq_id against the remittance.

POST https://api.cobre.co/v1/fx_quotes
Headers
AuthorizationBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcmVtaXRfY28wMSJ9.Rm8xQ3pL2nV7kWd9pT4bH6fY0gJ
Content-Typeapplication/json
Request body
{
"currency_pair": "usd/cop",Currency pairRequirediCobre field at "currency_pair" in this payload.
"destination_amount": 200000000,Destination amount (COP, no decimals)Requiredi200000000 = COP $2,000,000.00 (amounts have no decimal point — last two digits are cents).
"type": "static_quote"Quote typeRequiredistatic_quote requires pre-funded USD; rolling_quote locks a rate tier before wiring USD.
}
Response 201
{
"id": "fxq_Remit45601",IdiUnique Cobre identifier for this resource.
"type": "static_quote",Quote typeRequiredistatic_quote requires pre-funded USD; rolling_quote locks a rate tier before wiring USD.
"currency_pair": "usd/cop",Currency pairRequirediCobre field at "currency_pair" in this payload.
"source_amount": 50000,Source AmountiCobre field at "source_amount" in this payload.
"fees_breakdown": {Fees BreakdowniCobre field at "fees_breakdown" in this payload.
"spread": 1.2SpreadiCobre field at "fees_breakdown.spread" in this payload.
},
"fx_rate": 4000,Fx RateiCobre field at "fx_rate" in this payload.
"destination_amount": 200000000,Destination amount (COP, no decimals)Requiredi200000000 = COP $2,000,000.00 (amounts have no decimal point — last two digits are cents).
"quota_limit": 100000000,Quota LimitiCobre field at "quota_limit" in this payload.
"remaining_quota": 95000000,Remaining QuotaiCobre field at "remaining_quota" in this payload.
"created_at": "2026-06-03T10:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"valid_until": "2026-06-03T10:01:00Z",Valid UntiliCobre field at "valid_until" in this payload.
"last_quote": true,Last QuoteiCobre field at "last_quote" in this payload.
"off_market": falseOff MarketiCobre field at "off_market" in this payload.
}
Step 6 of 10 Cross-Border API step

Execute Cross-Border Conversion

After the end user confirms, convert USD to COP by debiting the USD Global Balance and crediting the COP Balance. Reuse the same idempotency header on retries (valid 24h). Only the most recent fxq_id for the pair may be used.

POST https://api.cobre.co/v1/cross_border_money_movements
Headers
AuthorizationBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcmVtaXRfY28wMSJ9.Rm8xQ3pL2nV7kWd9pT4bH6fY0gJ
Content-Typeapplication/json
idempotencyremit_cbmm_000456
Request body
{
"source_id": "acc_RemitUsd01",USD Global BalanceRequirediCobre id of the source account or counterparty.
"destination_id": "acc_RemitCop01",COP BalanceRequirediCobre id of the destination account or counterparty.
"forex_quote_id": "fxq_Remit45601",FX Quote IDRequirediCobre field at "forex_quote_id" in this payload.
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"destination_description": "Remittance remit_000456"DescriptioniCobre field at "metadata.destination_description" in this payload.
},
"external_id": "remit_fx_000456"External ID (FX leg)iRecommended remit_fx_<remittance_id> — pairs with remit_payout_<remittance_id> on the local leg.
}
Response 201
{
"id": "mm_CbmmRem456",IdiUnique Cobre identifier for this resource.
"creator": "cli_remit_co01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user.
"type": "cross_border",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"external_id": "remit_fx_000456",External ID (FX leg)iRecommended remit_fx_<remittance_id> — pairs with remit_payout_<remittance_id> on the local leg.
"status": {StatusiLifecycle status object for the resource or movement.
"state": "initiated",StateiCurrent lifecycle state (e.g. completed, failed, rejected).
"code": "",CodeiProvider or Cobre status code when the state is failed or rejected.
"description": ""DescriptioniHuman-readable detail for the current status.
},
"source_id": "acc_RemitUsd01",USD Global BalanceRequirediCobre id of the source account or counterparty.
"destination_id": "acc_RemitCop01",COP BalanceRequirediCobre id of the destination account or counterparty.
"forex_quote_id": "fxq_Remit45601",FX Quote IDRequirediCobre field at "forex_quote_id" in this payload.
"forex_quote": {Forex QuoteiCobre field at "forex_quote" in this payload.
"type": "static_quote",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"currency_pair": "usd/cop",Currency PairiCobre field at "forex_quote.currency_pair" in this payload.
"source_amount": 50000,Source AmountiCobre field at "forex_quote.source_amount" in this payload.
"fees_breakdown": {Fees BreakdowniCobre field at "forex_quote.fees_breakdown" in this payload.
"spread": 1.2SpreadiCobre field at "forex_quote.fees_breakdown.spread" in this payload.
},
"fx_rate": 4000,Fx RateiCobre field at "forex_quote.fx_rate" in this payload.
"destination_amount": 200000000,Destination AmountiCobre field at "forex_quote.destination_amount" in this payload.
"quota_limit": 100000000,Quota LimitiCobre field at "forex_quote.quota_limit" in this payload.
"remaining_quota": 95000000,Remaining QuotaiCobre field at "forex_quote.remaining_quota" in this payload.
"created_at": "2026-06-03T10:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"valid_until": "2026-06-03T10:01:00Z",Valid UntiliCobre field at "forex_quote.valid_until" in this payload.
"last_quote": true,Last QuoteiCobre field at "forex_quote.last_quote" in this payload.
"off_market": falseOff MarketiCobre field at "forex_quote.off_market" in this payload.
},
"geo": "usa/col",GeoiGeography code (e.g. col = Colombia, mex = Mexico).
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"destination_description": "Remittance remit_000456"DescriptioniCobre field at "metadata.destination_description" in this payload.
},
"created_at": "2026-06-03T10:00:10Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-03T10:00:10Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).
}

Webhook outcomesCross-border money movement

USD→COP conversion completed — COP is now available on the COP Balance. Proceed to local delivery; treasury can reconcile USD debit and COP credit via accounts.balance.debit / credit events.

Handle each terminal state in your webhook listener. Status codes reference the <a href="https://docs.cobre.com/money-movement-statuses-2032280m0" target="_blank" rel="noopener">Money Movement Statuses</a> guide.

Funds settled successfully. No error code is set (NA in the status guide). Use this webhook to mark the payment as paid in your system.

Event cross_border_money_movements.status.completed
Headers
Content-Typeapplication/json
Example payload
{
"id": "ev_CbmmRem456Cmp",IdiUnique Cobre identifier for this resource.
"event_key": "cross_border_money_movements.status.completed",Event KeyiWebhook subscription key (e.g. money_movements.status.completed).
"created_at": "2026-06-03T10:00:45Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"content": {ContentiEvent-specific payload — same layout as the GET response for that resource.
"id": "mm_CbmmRem456",IdiUnique Cobre identifier for this resource.
"creator": "cli_remit_co01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user.
"type": "cross_border",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"external_id": "remit_fx_000456",External IdiYour own reference echoed by Cobre for reconciliation.
"status": {StatusiLifecycle status object for the resource or movement.
"state": "completed",StateiCurrent lifecycle state (e.g. completed, failed, rejected).
"code": "",CodeiProvider or Cobre status code when the state is failed or rejected.
"description": ""DescriptioniHuman-readable label or note.
},
"source_id": "acc_RemitUsd01",Source IdiCobre id of the source account or counterparty.
"destination_id": "acc_RemitCop01",Destination IdiCobre id of the destination account or counterparty.
"forex_quote_id": "fxq_Remit45601",Forex Quote IdiCobre field at "content.forex_quote_id" in this payload.
"forex_quote": {Forex QuoteiCobre field at "content.forex_quote" in this payload.
"type": "static_quote",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"currency_pair": "usd/cop",Currency PairiCobre field at "content.forex_quote.currency_pair" in this payload.
"source_amount": 50000,Source AmountiCobre field at "content.forex_quote.source_amount" in this payload.
"fees_breakdown": {Fees BreakdowniCobre field at "content.forex_quote.fees_breakdown" in this payload.
"spread": 1.2SpreadiCobre field at "content.forex_quote.fees_breakdown.spread" in this payload.
},
"fx_rate": 4000,Fx RateiCobre field at "content.forex_quote.fx_rate" in this payload.
"destination_amount": 200000000,Destination AmountiCobre field at "content.forex_quote.destination_amount" in this payload.
"quota_limit": 100000000,Quota LimitiCobre field at "content.forex_quote.quota_limit" in this payload.
"remaining_quota": 95000000,Remaining QuotaiCobre field at "content.forex_quote.remaining_quota" in this payload.
"created_at": "2026-06-03T10:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"valid_until": "2026-06-03T10:01:00Z",Valid UntiliCobre field at "content.forex_quote.valid_until" in this payload.
"last_quote": true,Last QuoteiCobre field at "content.forex_quote.last_quote" in this payload.
"off_market": falseOff MarketiCobre field at "content.forex_quote.off_market" in this payload.
},
"geo": "usa/col",GeoiGeography code (e.g. col = Colombia, mex = Mexico).
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"destination_description": "Remittance remit_000456"Destination DescriptioniMetadata field "destination_description" attached to the resource.
},
"created_at": "2026-06-03T10:00:10Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-03T10:00:45Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).
}
}

Cobre or the rail could not process the movement. Inspect status.code and status.description. The list below is filtered to this Money Movement’s direction (payin, payout, or both):

Possible status codes
CodeDescriptionApplies to
F001Payment processing failed please try again.Payin and payout
F002NSF - Not Sufficient Funds in the designated account.Payin and payout
F003R2P Payment link expired.Payin
F004Daily transaction amount limit has been reached.Payin and payout
F005Amount exceeds the maximum allowed transaction limit.Payin and payout
F098Could not process the money movement at this time.Payin and payout
F099Could not process the money movement at this time.Payin and payout
Event cross_border_money_movements.status.failed
Headers
Content-Typeapplication/json
Example payload
{
"id": "ev_CbmmRem456Cmp",IdiUnique Cobre identifier for this resource.
"event_key": "cross_border_money_movements.status.failed",Event KeyiWebhook subscription key (e.g. money_movements.status.completed).
"created_at": "2026-06-03T10:00:45Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"content": {ContentiEvent-specific payload — same layout as the GET response for that resource.
"id": "mm_CbmmRem456",IdiUnique Cobre identifier for this resource.
"creator": "cli_remit_co01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user.
"type": "cross_border",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"external_id": "remit_fx_000456",External IdiYour own reference echoed by Cobre for reconciliation.
"status": {StatusiLifecycle status object for the resource or movement.
"state": "failed",StateiCurrent lifecycle state (e.g. completed, failed, rejected).
"code": "F002",CodeiProvider or Cobre status code when the state is failed or rejected.
"description": "NSF - Not Sufficient Funds in the designated account."DescriptioniHuman-readable label or note.
},
"source_id": "acc_RemitUsd01",Source IdiCobre id of the source account or counterparty.
"destination_id": "acc_RemitCop01",Destination IdiCobre id of the destination account or counterparty.
"forex_quote_id": "fxq_Remit45601",Forex Quote IdiCobre field at "content.forex_quote_id" in this payload.
"forex_quote": {Forex QuoteiCobre field at "content.forex_quote" in this payload.
"type": "static_quote",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"currency_pair": "usd/cop",Currency PairiCobre field at "content.forex_quote.currency_pair" in this payload.
"source_amount": 50000,Source AmountiCobre field at "content.forex_quote.source_amount" in this payload.
"fees_breakdown": {Fees BreakdowniCobre field at "content.forex_quote.fees_breakdown" in this payload.
"spread": 1.2SpreadiCobre field at "content.forex_quote.fees_breakdown.spread" in this payload.
},
"fx_rate": 4000,Fx RateiCobre field at "content.forex_quote.fx_rate" in this payload.
"destination_amount": 200000000,Destination AmountiCobre field at "content.forex_quote.destination_amount" in this payload.
"quota_limit": 100000000,Quota LimitiCobre field at "content.forex_quote.quota_limit" in this payload.
"remaining_quota": 95000000,Remaining QuotaiCobre field at "content.forex_quote.remaining_quota" in this payload.
"created_at": "2026-06-03T10:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"valid_until": "2026-06-03T10:01:00Z",Valid UntiliCobre field at "content.forex_quote.valid_until" in this payload.
"last_quote": true,Last QuoteiCobre field at "content.forex_quote.last_quote" in this payload.
"off_market": falseOff MarketiCobre field at "content.forex_quote.off_market" in this payload.
},
"geo": "usa/col",GeoiGeography code (e.g. col = Colombia, mex = Mexico).
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"destination_description": "Remittance remit_000456"Destination DescriptioniMetadata field "destination_description" attached to the resource.
},
"created_at": "2026-06-03T10:00:10Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-03T10:00:45Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).
}
}

The bank or payment network rejected the transaction. Inspect status.code. The list below is filtered to this Money Movement’s direction (payin, payout, or both):

Possible status codes
CodeDescriptionApplies to
R000Transaction rejected.Payin and payout
R001Inactive or blocked account.Payin and payout
R002Account and identification provided do not coincide.Payin and payout
R004ID not valid.Payout
R005Account does not exist.Payin and payout
R006Invalid account number.Payin and payout
R009Exceeds maximum allowed amount.Payin and payout
R010Account not authorized to debit.Payin and payout
R011Invalid Account type.Payout
R012The user has abandoned the transaction.Payin
R015Account not authorized to be credited.Payout
R016Payment rejected due to timeout.Payin
R017Payment rejected due to expired money movement.Payin
R018Payment rejected due invalid key.Payout
R019Payment rejected due to incorrect amount.Payin
R020Payment rejected due to user authentication failure.Payin
R021Insufficient funds in payer account.Payin
R023Payment cancelled by the user.Payin and payout
R024Exceeds maximum allowed number of transactions.Payout
R025Required information missing.Payout
R026Payment rejected due to unavailable bank services.Payin and payout
R027Account exceeds the maximum allowed transaction limit.Payin and payout
R034Account closed.Payin and payout
R081The counterparty registration has expired.Payin
R082The counterparty registration has been canceled.Payin
R084The counterparty registration has been rejected.Payin
R085Bank processing error.Payout
Event cross_border_money_movements.status.rejected
Headers
Content-Typeapplication/json
Example payload
{
"id": "ev_CbmmRem456Cmp",IdiUnique Cobre identifier for this resource.
"event_key": "cross_border_money_movements.status.rejected",Event KeyiWebhook subscription key (e.g. money_movements.status.completed).
"created_at": "2026-06-03T10:00:45Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"content": {ContentiEvent-specific payload — same layout as the GET response for that resource.
"id": "mm_CbmmRem456",IdiUnique Cobre identifier for this resource.
"creator": "cli_remit_co01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user.
"type": "cross_border",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"external_id": "remit_fx_000456",External IdiYour own reference echoed by Cobre for reconciliation.
"status": {StatusiLifecycle status object for the resource or movement.
"state": "rejected",StateiCurrent lifecycle state (e.g. completed, failed, rejected).
"code": "R001",CodeiProvider or Cobre status code when the state is failed or rejected.
"description": "Inactive or blocked account."DescriptioniHuman-readable label or note.
},
"source_id": "acc_RemitUsd01",Source IdiCobre id of the source account or counterparty.
"destination_id": "acc_RemitCop01",Destination IdiCobre id of the destination account or counterparty.
"forex_quote_id": "fxq_Remit45601",Forex Quote IdiCobre field at "content.forex_quote_id" in this payload.
"forex_quote": {Forex QuoteiCobre field at "content.forex_quote" in this payload.
"type": "static_quote",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"currency_pair": "usd/cop",Currency PairiCobre field at "content.forex_quote.currency_pair" in this payload.
"source_amount": 50000,Source AmountiCobre field at "content.forex_quote.source_amount" in this payload.
"fees_breakdown": {Fees BreakdowniCobre field at "content.forex_quote.fees_breakdown" in this payload.
"spread": 1.2SpreadiCobre field at "content.forex_quote.fees_breakdown.spread" in this payload.
},
"fx_rate": 4000,Fx RateiCobre field at "content.forex_quote.fx_rate" in this payload.
"destination_amount": 200000000,Destination AmountiCobre field at "content.forex_quote.destination_amount" in this payload.
"quota_limit": 100000000,Quota LimitiCobre field at "content.forex_quote.quota_limit" in this payload.
"remaining_quota": 95000000,Remaining QuotaiCobre field at "content.forex_quote.remaining_quota" in this payload.
"created_at": "2026-06-03T10:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"valid_until": "2026-06-03T10:01:00Z",Valid UntiliCobre field at "content.forex_quote.valid_until" in this payload.
"last_quote": true,Last QuoteiCobre field at "content.forex_quote.last_quote" in this payload.
"off_market": falseOff MarketiCobre field at "content.forex_quote.off_market" in this payload.
},
"geo": "usa/col",GeoiGeography code (e.g. col = Colombia, mex = Mexico).
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"destination_description": "Remittance remit_000456"Destination DescriptioniMetadata field "destination_description" attached to the resource.
},
"created_at": "2026-06-03T10:00:10Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-03T10:00:45Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).
}
}
Step 7 of 10 Cross-Border Reconciliation

Reconcile the Cross-Border Conversion

Match the Cross-Border completion webhook to your remittance ledger on external_id and cbmm_id. Cross-check USD debit and COP credit on the respective Cobre Balances via accounts.balance.debit / credit events or GET /accounts/{acct_id}/transactions.

Mapping the webhook payload from an earlier step onto Remittance ledger. No API call is made — this step closes the loop in your own system.

Cobre field & valueRemittance ledger field
content.external_id
remit_fx_000456
fx_external_id
FX leg reference — shared remittance_id suffix pairs with remit_payout_* on local delivery.
content.id
mm_CbmmRem456
cobre_cbmm_id
Cross-Border Money Movement id (cbmm_id) from Cobre.
content.forex_quote_id
fxq_Remit45601
fxq_id
content.forex_quote.source_amount
50000
usd_debited_cents
USD source amount debited from the Global Balance (50000 = $500.00 USD).
content.forex_quote.destination_amount
200000000
cop_credited_cents
COP credited to the COP Balance (200000000 = $2,000,000.00 COP).
content.status.state
completed
fx_status
Map completed → proceed to local delivery; failed/rejected → re-quote or re-fund.
Step 8 of 10 Local Delivery API step

Create Beneficiary Counterparty

Register the Colombian beneficiary for Fast Pay / ACH (cc, ch, dp) or Bre-B (breb_key). Account-based types deduplicate idempotently — Cobre returns an existing counterparty_id when data matches.

POST https://api.cobre.co/v1/counterparties
Headers
AuthorizationBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcmVtaXRfY28wMSJ9.Rm8xQ3pL2nV7kWd9pT4bH6fY0gJ
Content-Typeapplication/json
Request body
{
"geo": "col",GeographyRequirediGeography code (e.g. col = Colombia, mex = Mexico).
"type": "ch",Account typeRequirediResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"alias": "Beneficiary remit_000456",AliasiDisplay name that helps identify it and clarify its purpose.
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"counterparty_fullname": "Maria Lopez Garcia",Full nameRequirediLegal or display name of the counterparty beneficiary.
"beneficiary_institution": "1007",Bank codeRequirediBank or institution code for the destination account.
"account_number": "91234567890",Account numberRequirediBank account or CLABE number for the counterparty.
"counterparty_id_type": "cc",ID typeRequirediType of identification document for the counterparty (e.g. nit, cc, rfc).
"counterparty_id_number": "1023456789"ID numberRequirediIdentification number for the counterparty.
}
}
Response 201
{
"id": "cp_BenefRem456",IdiUnique Cobre identifier for this resource.
"geo": "col",GeographyRequirediGeography code (e.g. col = Colombia, mex = Mexico).
"type": "ch",Account typeRequirediResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"alias": "Beneficiary remit_000456",AliasiDisplay name that helps identify it and clarify its purpose.
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"counterparty_fullname": "Maria Lopez Garcia",Full nameRequirediLegal or display name of the counterparty beneficiary.
"beneficiary_institution": "1007",Bank codeRequirediBank or institution code for the destination account.
"account_number": "91234567890",Account numberRequirediBank account or CLABE number for the counterparty.
"counterparty_id_type": "cc",ID typeRequirediType of identification document for the counterparty (e.g. nit, cc, rfc).
"counterparty_id_number": "1023456789",ID numberRequirediIdentification number for the counterparty.
"registered_account": falseRegistered AccountiCobre field at "metadata.registered_account" in this payload.
},
"created_at": "2026-06-03T10:05:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-03T10:05:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).
}
Step 9 of 10 Local Delivery API step

Deliver COP to Beneficiary

Pay the converted COP from the COP Balance to the beneficiary. Cobre selects Fast Pay when supported, otherwise ACH — the response type shows which rail was used. Amount must match the COP credited by the cross-border leg (minus any platform fees).

POST https://api.cobre.co/v1/money_movements
Headers
AuthorizationBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcmVtaXRfY28wMSJ9.Rm8xQ3pL2nV7kWd9pT4bH6fY0gJ
Content-Typeapplication/json
idempotencyremit_payout_000456
Request body
{
"source_id": "acc_RemitCop01",COP BalanceRequirediCobre id of the source account or counterparty.
"destination_id": "cp_BenefRem456",Beneficiary counterpartyRequirediCobre id of the destination account or counterparty.
"amount": 200000000,Amount (cents)Requiredi200000000 cents = COP $2,000,000.00.
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"description": "Remittance payout remit_000456"DescriptionRequirediHuman-readable label or note.
},
"external_id": "remit_payout_000456"External ID (payout leg)iYour own reference echoed by Cobre for reconciliation.
}
Response 201
{
"id": "mm_PayoutRem456",IdiUnique Cobre identifier for this resource.
"status": {StatusiLifecycle status object for the resource or movement.
"state": "initiated",StateiCurrent lifecycle state (e.g. completed, failed, rejected).
"code": "",CodeiProvider or Cobre status code when the state is failed or rejected.
"description": ""DescriptioniHuman-readable detail for the current status.
},
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"description": "Remittance payout remit_000456"DescriptionRequirediHuman-readable label or note.
},
"creator": "cli_remit_co01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user.
"external_id": "remit_payout_000456",External ID (payout leg)iYour own reference echoed by Cobre for reconciliation.
"checker_approval": false,Checker ApprovaliWhen true, Cobre pauses at pending_approval and locks source funds until an approval/denial decision via Money Movement Approvals API.
"mm_approval_id": "",Mm Approval IdiMoney Movement Approval id (mma_…) when checker_approval is true — used for the decision endpoint.
"type": "fast_pay",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"geo": "col",GeoiGeography code (e.g. col = Colombia, mex = Mexico).
"source_id": "acc_RemitCop01",COP BalanceRequirediCobre id of the source account or counterparty.
"destination_id": "cp_BenefRem456",Beneficiary counterpartyRequirediCobre id of the destination account or counterparty.
"currency": "cop",CurrencyiISO currency code (e.g. cop, mxn).
"amount": 200000000,Amount (cents)Requiredi200000000 cents = COP $2,000,000.00.
"created_at": "2026-06-03T10:06:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-03T10:06:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).
}

Webhook outcomesMoney movement

Local payout completed — mark the remittance delivered on your ledger using external_id remit_payout_<remittance_id>. On rejected / failed / returned, funds remain in (or return to) the COP Balance for re-attempt or refund.

Handle each terminal state in your webhook listener. Status codes reference the <a href="https://docs.cobre.com/money-movement-statuses-2032280m0" target="_blank" rel="noopener">Money Movement Statuses</a> guide. Cobre Balance transactions are covered in the <b>Transaction</b> tab.

Funds settled successfully. No error code is set (NA in the status guide). Use this webhook to mark the payment as paid in your system.

Event money_movements.status.completed
Headers
Content-Typeapplication/json
Example payload
{
"id": "ev_PayoutRem456Cmp",IdiUnique Cobre identifier for this resource.
"event_key": "money_movements.status.completed",Event KeyiWebhook subscription key (e.g. money_movements.status.completed).
"created_at": "2026-06-03T10:08:30Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"content": {ContentiEvent-specific payload — same layout as the GET response for that resource.
"id": "mm_PayoutRem456",IdiUnique Cobre identifier for this resource.
"status": {StatusiLifecycle status object for the resource or movement.
"state": "completed",StateiCurrent lifecycle state (e.g. completed, failed, rejected).
"code": "",CodeiProvider or Cobre status code when the state is failed or rejected.
"description": ""DescriptioniHuman-readable label or note.
},
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"description": "Remittance payout remit_000456",DescriptioniHuman-readable label or note.
"tracking_key": "20260603mmPayoutRem456"Tracking KeyiNetwork tracking key for the payment (PSE ticket or Bre-B key).
},
"creator": "cli_remit_co01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user.
"external_id": "remit_payout_000456",External IdiYour own reference echoed by Cobre for reconciliation.
"checker_approval": false,Checker ApprovaliWhen true, Cobre pauses at pending_approval and locks source funds until an approval/denial decision via Money Movement Approvals API.
"mm_approval_id": "",Mm Approval IdiMoney Movement Approval id (mma_…) when checker_approval is true — used for the decision endpoint.
"type": "fast_pay",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"geo": "col",GeoiGeography code (e.g. col = Colombia, mex = Mexico).
"source_id": "acc_RemitCop01",Source IdiCobre id of the source account or counterparty.
"destination_id": "cp_BenefRem456",Destination IdiCobre id of the destination account or counterparty.
"currency": "cop",CurrencyiISO currency code (e.g. cop, mxn).
"amount": 200000000,AmountiAmount in cents — the last two digits are decimals.
"created_at": "2026-06-03T10:06:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-03T10:08:30Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).
}
}

Cobre or the rail could not process the movement. Inspect status.code and status.description. The list below is filtered to this Money Movement’s direction (payin, payout, or both):

Possible status codes
CodeDescriptionApplies to
F001Payment processing failed please try again.Payin and payout
F002NSF - Not Sufficient Funds in the designated account.Payin and payout
F004Daily transaction amount limit has been reached.Payin and payout
F005Amount exceeds the maximum allowed transaction limit.Payin and payout
F098Could not process the money movement at this time.Payin and payout
F099Could not process the money movement at this time.Payin and payout
Event money_movements.status.failed
Headers
Content-Typeapplication/json
Example payload
{
"id": "ev_PayoutRem456Cmp",IdiUnique Cobre identifier for this resource.
"event_key": "money_movements.status.failed",Event KeyiWebhook subscription key (e.g. money_movements.status.completed).
"created_at": "2026-06-03T10:08:30Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"content": {ContentiEvent-specific payload — same layout as the GET response for that resource.
"id": "mm_PayoutRem456",IdiUnique Cobre identifier for this resource.
"status": {StatusiLifecycle status object for the resource or movement.
"state": "failed",StateiCurrent lifecycle state (e.g. completed, failed, rejected).
"code": "F002",CodeiProvider or Cobre status code when the state is failed or rejected.
"description": "NSF - Not Sufficient Funds in the designated account."DescriptioniHuman-readable label or note.
},
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"description": "Remittance payout remit_000456",DescriptioniHuman-readable label or note.
"tracking_key": "20260603mmPayoutRem456"Tracking KeyiNetwork tracking key for the payment (PSE ticket or Bre-B key).
},
"creator": "cli_remit_co01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user.
"external_id": "remit_payout_000456",External IdiYour own reference echoed by Cobre for reconciliation.
"checker_approval": false,Checker ApprovaliWhen true, Cobre pauses at pending_approval and locks source funds until an approval/denial decision via Money Movement Approvals API.
"mm_approval_id": "",Mm Approval IdiMoney Movement Approval id (mma_…) when checker_approval is true — used for the decision endpoint.
"type": "fast_pay",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"geo": "col",GeoiGeography code (e.g. col = Colombia, mex = Mexico).
"source_id": "acc_RemitCop01",Source IdiCobre id of the source account or counterparty.
"destination_id": "cp_BenefRem456",Destination IdiCobre id of the destination account or counterparty.
"currency": "cop",CurrencyiISO currency code (e.g. cop, mxn).
"amount": 200000000,AmountiAmount in cents — the last two digits are decimals.
"created_at": "2026-06-03T10:06:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-03T10:08:30Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).
}
}

The bank or payment network rejected the transaction. Inspect status.code. The list below is filtered to this Money Movement’s direction (payin, payout, or both):

Possible status codes
CodeDescriptionApplies to
R000Transaction rejected.Payin and payout
R001Inactive or blocked account.Payin and payout
R002Account and identification provided do not coincide.Payin and payout
R004ID not valid.Payout
R005Account does not exist.Payin and payout
R006Invalid account number.Payin and payout
R009Exceeds maximum allowed amount.Payin and payout
R010Account not authorized to debit.Payin and payout
R011Invalid Account type.Payout
R015Account not authorized to be credited.Payout
R018Payment rejected due invalid key.Payout
R023Payment cancelled by the user.Payin and payout
R024Exceeds maximum allowed number of transactions.Payout
R025Required information missing.Payout
R026Payment rejected due to unavailable bank services.Payin and payout
R027Account exceeds the maximum allowed transaction limit.Payin and payout
R034Account closed.Payin and payout
R085Bank processing error.Payout
Event money_movements.status.rejected
Headers
Content-Typeapplication/json
Example payload
{
"id": "ev_PayoutRem456Cmp",IdiUnique Cobre identifier for this resource.
"event_key": "money_movements.status.rejected",Event KeyiWebhook subscription key (e.g. money_movements.status.completed).
"created_at": "2026-06-03T10:08:30Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"content": {ContentiEvent-specific payload — same layout as the GET response for that resource.
"id": "mm_PayoutRem456",IdiUnique Cobre identifier for this resource.
"status": {StatusiLifecycle status object for the resource or movement.
"state": "rejected",StateiCurrent lifecycle state (e.g. completed, failed, rejected).
"code": "R018",CodeiProvider or Cobre status code when the state is failed or rejected.
"description": "Payment rejected due invalid key."DescriptioniHuman-readable label or note.
},
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"description": "Remittance payout remit_000456",DescriptioniHuman-readable label or note.
"tracking_key": "20260603mmPayoutRem456"Tracking KeyiNetwork tracking key for the payment (PSE ticket or Bre-B key).
},
"creator": "cli_remit_co01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user.
"external_id": "remit_payout_000456",External IdiYour own reference echoed by Cobre for reconciliation.
"checker_approval": false,Checker ApprovaliWhen true, Cobre pauses at pending_approval and locks source funds until an approval/denial decision via Money Movement Approvals API.
"mm_approval_id": "",Mm Approval IdiMoney Movement Approval id (mma_…) when checker_approval is true — used for the decision endpoint.
"type": "fast_pay",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"geo": "col",GeoiGeography code (e.g. col = Colombia, mex = Mexico).
"source_id": "acc_RemitCop01",Source IdiCobre id of the source account or counterparty.
"destination_id": "cp_BenefRem456",Destination IdiCobre id of the destination account or counterparty.
"currency": "cop",CurrencyiISO currency code (e.g. cop, mxn).
"amount": 200000000,AmountiAmount in cents — the last two digits are decimals.
"created_at": "2026-06-03T10:06:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-03T10:08:30Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).
}
}

Payouts debit the source Cobre Balance while the movement is processing to lock funds. If the movement ends in failed, rejected, or canceled, Cobre posts a compensation credit (breb_credit or col_cb_credit). Payins credit the destination on completion only.

While the movement is in processing, Cobre debits the source Cobre Balance to lock the payout amount. Subscribe to accounts.balance.debit and money_movements.status.processing.

Event accounts.balance.debit
Headers
Content-Typeapplication/json
Example payload
{
"id": "ev_PayoutRem4Lk",IdiUnique Cobre identifier for this resource.
"event_key": "accounts.balance.debit",Event KeyiWebhook subscription key (e.g. money_movements.status.completed).
"created_at": "2026-06-03T10:06:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"content": {ContentiEvent-specific payload — same layout as the GET response for that resource.
"id": "trx_PayoutRem456Lk",IdiUnique Cobre identifier for this resource.
"type": "col_cb_debit",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"account_id": "acc_RemitCop01",Account IdiCobre Balance account id affected by the event.
"amount": -200000000,AmountiAmount in cents — the last two digits are decimals.
"previous_balance": 205000000,Previous BalanceiCobre field at "content.previous_balance" in this payload.
"current_balance": 5000000,Current BalanceiCobre field at "content.current_balance" in this payload.
"currency": "COP",CurrencyiISO currency code (e.g. cop, mxn).
"credit_debit_type": "debit",Credit Debit Typeicredit = funds in; debit = funds out.
"transaction_date": "2026-06-03T10:06:00Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC).
"created_at": "2026-06-03T10:06:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"money_movement_id": "mm_PayoutRem456",Money Movement IdiMoney Movement that generated this balance transaction.
"description": "Remittance payout remit_000456",DescriptioniHuman-readable label or note.
"beneficiary_account_number": "",Beneficiary Account NumberiMetadata field "beneficiary_account_number" attached to the resource.
"tracking_key": "20260603mmPayoutRem456"Tracking KeyiNetwork tracking key for the payment (PSE ticket or Bre-B key).
}
}
}

On completion the locked funds are sent to the beneficiary. The processing debit remains on the ledger — no compensation credit is posted.

Event accounts.balance.debit
Headers
Content-Typeapplication/json
Example payload
{
"id": "ev_PayoutRem4Lk",IdiUnique Cobre identifier for this resource.
"event_key": "accounts.balance.debit",Event KeyiWebhook subscription key (e.g. money_movements.status.completed).
"created_at": "2026-06-03T10:06:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"content": {ContentiEvent-specific payload — same layout as the GET response for that resource.
"id": "trx_PayoutRem456Lk",IdiUnique Cobre identifier for this resource.
"type": "col_cb_debit",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"account_id": "acc_RemitCop01",Account IdiCobre Balance account id affected by the event.
"amount": -200000000,AmountiAmount in cents — the last two digits are decimals.
"previous_balance": 205000000,Previous BalanceiCobre field at "content.previous_balance" in this payload.
"current_balance": 5000000,Current BalanceiCobre field at "content.current_balance" in this payload.
"currency": "COP",CurrencyiISO currency code (e.g. cop, mxn).
"credit_debit_type": "debit",Credit Debit Typeicredit = funds in; debit = funds out.
"transaction_date": "2026-06-03T10:06:00Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC).
"created_at": "2026-06-03T10:06:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"money_movement_id": "mm_PayoutRem456",Money Movement IdiMoney Movement that generated this balance transaction.
"description": "Remittance payout remit_000456",DescriptioniHuman-readable label or note.
"beneficiary_account_number": "",Beneficiary Account NumberiMetadata field "beneficiary_account_number" attached to the resource.
"tracking_key": "20260603mmPayoutRem456"Tracking KeyiNetwork tracking key for the payment (PSE ticket or Bre-B key).
}
}
}

If the movement reaches a terminal failed, rejected, or canceled state, Cobre credits the source Cobre Balance to release the lock (breb_credit for Bre-B, col_cb_credit for bank rails).

Event accounts.balance.credit
Headers
Content-Typeapplication/json
Example payload
{
"id": "ev_PayoutRem4Cp",IdiUnique Cobre identifier for this resource.
"event_key": "accounts.balance.credit",Event KeyiWebhook subscription key (e.g. money_movements.status.completed).
"created_at": "2026-06-03T10:08:30Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"content": {ContentiEvent-specific payload — same layout as the GET response for that resource.
"id": "trx_PayoutRem456Cp",IdiUnique Cobre identifier for this resource.
"type": "col_cb_credit",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).
"account_id": "acc_RemitCop01",Account IdiCobre Balance account id affected by the event.
"amount": 200000000,AmountiAmount in cents — the last two digits are decimals.
"previous_balance": 0,Previous BalanceiCobre field at "content.previous_balance" in this payload.
"current_balance": 200000000,Current BalanceiCobre field at "content.current_balance" in this payload.
"currency": "COP",CurrencyiISO currency code (e.g. cop, mxn).
"credit_debit_type": "credit",Credit Debit Typeicredit = funds in; debit = funds out.
"transaction_date": "2026-06-03T10:08:30Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC).
"created_at": "2026-06-03T10:08:30Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"money_movement_id": "mm_PayoutRem456",Money Movement IdiMoney Movement that generated this balance transaction.
"description": "Remittance payout remit_000456",DescriptioniHuman-readable label or note.
"tracking_key": "20260603mmPayoutRem456",Tracking KeyiNetwork tracking key for the payment (PSE ticket or Bre-B key).
"sender_name": "",Sender NameiMetadata field "sender_name" attached to the resource.
"sender_id": "",Sender IdiMetadata field "sender_id" attached to the resource.
"sender_account_number": ""Sender Account NumberiMetadata field "sender_account_number" attached to the resource.
}
}
}
Step 10 of 10 Reconciliation Reconciliation

Reconcile the Remittance

Close the local payout leg on your remittance ledger. Pair with the Cross-Border reconciliation (remit_fx_000456) for end-to-end correlation on remittance_id 000456.

Mapping the webhook payload from an earlier step onto Remittance ledger. No API call is made — this step closes the loop in your own system.

Cobre field & valueRemittance ledger field
content.external_id
remit_payout_000456
payout_external_id
Local leg — pair with remit_fx_000456 on the Cross-Border movement for end-to-end correlation.
content.id
mm_PayoutRem456
cobre_mm_id
content.amount
200000000
delivered_amount_cents
content.type
fast_pay
payout_rail
fast_pay or ach — the rail Cobre selected for bank-account delivery.
content.status.state
completed
remittance_status
Map completed → DELIVERED; rejected/failed/returned → exception workflow.