Authenticate
Exchange API credentials for a short-lived Bearer token (~20 minutes). Reuse the same token on every later call.
| Content-Type | application/json |
{ "user_id": "cli_trust_co01",User IDRequirediAPI user id issued by Cobre (cli_…). "secret": "sk_live_Trust9pQ2"SecretRequirediAPI secret — treat like a password.}{ "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfdHJ1c3RfY28wMSJ9.Trust9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ",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.}Subscribe to Lifecycle Events
Register webhooks for key registration, balance credits/debits (static-key payins and auto-sweep), and Money Movement status (R2P QR). Verify every delivery with HMAC-SHA256.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfdHJ1c3RfY28wMSJ9.Trust9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "url": "https://fiduciary.example.co/webhooks/cobre",Notification URLRequirediHTTPS URL used by this resource (e.g. webhook endpoint). "description": "Trust encargo lifecycle",DescriptioniHuman-readable label or note. "events": [EventsiList of webhook event types this subscription listens to. "cobre_keys.status.registered", "cobre_keys.status.failed", "accounts.balance.credit", "accounts.balance.debit", "money_movements.status.initiated", "money_movements.status.processing", "money_movements.status.completed", "money_movements.status.failed", "money_movements.status.rejected" ], "event_signature_key": "WHtrust9xZ"Signature keyRequirediSecret you set on the subscription; Cobre uses it to HMAC-SHA256-sign deliveries (verify via event-signature + event-timestamp headers).}{ "id": "sub_TrustEnc01",IdiUnique Cobre identifier for this resource. "url": "https://fiduciary.example.co/webhooks/cobre",Notification URLRequirediHTTPS URL used by this resource (e.g. webhook endpoint). "description": "Trust encargo lifecycle",DescriptioniHuman-readable label or note. "events": [EventsiList of webhook event types this subscription listens to. "cobre_keys.status.registered", "cobre_keys.status.failed", "accounts.balance.credit", "accounts.balance.debit", "money_movements.status.initiated", "money_movements.status.processing", "money_movements.status.completed", "money_movements.status.failed", "money_movements.status.rejected" ], "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-07-16T09:00:00Z"Created AtiTimestamp when the resource was created (ISO 8601, UTC).}Register Encargo Bank Account
Before creating the encargo Cobre Balance, register the encargo bank account as a counterparty (cp_…). Its id becomes metadata.primary_account — the auto-sweep destination for every credit received on the encargo balance.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfdHJ1c3RfY28wMSJ9.Trust9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "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": "Encargo 00123 - Banco destino",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "counterparty_fullname": "Encargo Fiduciario 00123",Account holderRequirediLegal 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": "nit",ID typeRequirediType of identification document for the counterparty (e.g. nit, cc, rfc). "counterparty_id_number": "9001234567"ID numberRequirediIdentification number for the counterparty. }}{ "id": "cp_Encargo00123Bank",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": "Encargo 00123 - Banco destino",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "counterparty_fullname": "Encargo Fiduciario 00123",Account holderRequirediLegal 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": "nit",ID typeRequirediType of identification document for the counterparty (e.g. nit, cc, rfc). "counterparty_id_number": "9001234567"ID numberRequirediIdentification number for the counterparty. }, "created_at": "2026-07-16T09:05:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-16T09:05:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Create Encargo Cobre Balance
When a new encargo fiduciario is created, open a dedicated COP Cobre Balance (pr_col_cobre) and set metadata.primary_account to the encargo bank counterparty — auto-sweep is active from day one. Store the returned acc_… id — it is critical for all later fund operations.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfdHJ1c3RfY28wMSJ9.Trust9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "provider_id": "pr_col_cobre",ProviderRequirediCobre field at "provider_id" in this payload. "action": "create",ActionRequirediCobre field at "action" in this payload. "tags": [TagsiCobre field at "tags" in this payload. "encargo_fiduciario" ], "alias": "Encargo 00123",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "primary_account": "cp_Encargo00123Bank"Primary accountRequirediEncargo bank counterparty — every credit auto-sweeps here. }}{ "id": "acc_Encargo00123",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": "Encargo 00123",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "cobre_tag": "@fidencargo00123",Cobre TagiCobre Balance tag identifying the destination account. "available_services": [Available ServicesiCobre field at "metadata.available_services" in this payload. "account_balance", "mm_push_from_account", "account_transactions" ], "primary_account": "cp_Encargo00123Bank"Primary accountRequirediEncargo bank counterparty — every credit auto-sweeps here. }, "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. "geo": "col",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "tags": [TagsiCobre field at "tags" in this payload. "encargo_fiduciario" ], "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "created_at": "2026-07-16T09:06:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-16T09:06:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Create Static Bre-B Key
Register the encargo static Bre-B key on the Cobre Balance — the primary payin channel. Creation is asynchronous: do not share the key with payers until cobre_keys.status.registered arrives. The holder object is optional for this use case.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfdHJ1c3RfY28wMSJ9.Trust9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "alias": "Llave encargo 00123",Key aliasiDisplay name that helps identify it and clarify its purpose. "key_config": "open_input",Key configRequirediCobre field at "key_config" in this payload. "open_input": "fidencargo00123"Custom key valueRequirediCobre field at "open_input" in this payload.}{ "id": "key_Encargo00123",IdiUnique Cobre identifier for this resource. "key_value": "",Key ValueiBre-B key value (e.g. @merchant123). "source_id": "acc_Encargo00123",Source IdiCobre id of the source account or counterparty. "alias": "Llave encargo 00123",Key aliasiDisplay name that helps identify it and clarify its purpose. "connectivity": {ConnectivityiConnection/registration status for keys or accounts. "status": "processing",StatusiLifecycle status object for the resource or movement. "description": ""DescriptioniHuman-readable label or note. }, "previous_action": {Previous ActioniCobre field at "previous_action" in this payload. "action_requested": "create",Action RequestediCobre field at "previous_action.action_requested" in this payload. "action_code": "",Action CodeiCobre field at "previous_action.action_code" in this payload. "action_description": ""Action DescriptioniCobre field at "previous_action.action_description" in this payload. }, "created_at": "2026-07-16T09:07:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-16T09:07:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Webhook delivered
cobre_keys.status.registeredBre-B registration completed — store key_value and expose it to payers. Map key_id and acc_Encargo00123 to encargo 00123 in your ledger.
| Content-Type | application/json |
{ "id": "ev_KeyEncRegistered",IdiUnique Cobre identifier for this resource. "event_key": "cobre_keys.status.registered",Event KeyiWebhook subscription key (e.g. money_movements.status.completed). "created_at": "2026-07-16T09:09: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": "key_Encargo00123",IdiUnique Cobre identifier for this resource. "key_value": "@fidencargo00123",Key ValueiBre-B key value (e.g. @merchant123). "source_id": "acc_Encargo00123",Source IdiCobre id of the source account or counterparty. "alias": "Llave encargo 00123",AliasiDisplay name that helps identify it and clarify its purpose. "connectivity": {ConnectivityiConnection/registration status for keys or accounts. "status": "registered",StatusiLifecycle status object for the resource or movement. "description": ""DescriptioniHuman-readable label or note. }, "previous_action": {Previous ActioniCobre field at "content.previous_action" in this payload. "action_requested": "create",Action RequestediCobre field at "content.previous_action.action_requested" in this payload. "action_code": "",Action CodeiCobre field at "content.previous_action.action_code" in this payload. "action_description": ""Action DescriptioniCobre field at "content.previous_action.action_description" in this payload. }, "created_at": "2026-07-16T09:07:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-16T09:09:30Z"Updated AtiTimestamp of the last update (ISO 8601, UTC). }}Collect via Static Key (Model A)
The payer sends funds from any bank app to @fidencargo00123. Bre-B settles in real time and Cobre credits acc_Encargo00123 with a breb_credit transaction — no Money Movement is created. Reconcile on accounts.balance.credit (primary) and cross-check with GET /accounts/{acct_id}/transactions (fallback).
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfdHJ1c3RfY28wMSJ9.Trust9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
{ "total_items": 1,Total ItemsiTotal items matching the query across all pages. "total_pages": 1,Total PagesiNumber of pages in this result set. "is_last_page": true,Is Last PageiTrue when this is the final page of results. "page_items": 1,Page ItemsiNumber of items returned on this page. "contents": [ContentsiArray of result objects for this page. { "id": "trx_EncStatic001",Transaction IDiUnique Cobre identifier for this resource. "type": "breb_credit",Transaction 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_Encargo00123",Account IdiCobre Balance account id affected by the event. "amount": 5000000,Amount (cents)iAmount in cents — the last two digits are decimals. "previous_balance": 0,Previous BalanceiCobre field at "contents.0.previous_balance" in this payload. "current_balance": 5000000,Current BalanceiCobre field at "contents.0.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-07-16T10:15:21Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-07-16T10:15:22Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "sender_account_number": "987654321",Sender Account NumberiMetadata field "sender_account_number" attached to the resource. "sender_account_type": "ch",Sender Account TypeiMetadata field "sender_account_type" attached to the resource. "sender_bank_code": "1007",Sender Bank CodeiMetadata field "sender_bank_code" attached to the resource. "sender_id": "1234567890",Sender IdiMetadata field "sender_id" attached to the resource. "sender_id_type": "cc",Sender Id TypeiMetadata field "sender_id_type" attached to the resource. "sender_name": "Juan Perez",Sender NameiMetadata field "sender_name" attached to the resource. "key_value": "@fidencargo00123",Cobre KeyiBre-B key value (e.g. @merchant123). "description": "Bre-B deposit encargo 00123",DescriptioniHuman-readable label or note. "mm_external_id": ""Mm External IdiMetadata field "mm_external_id" attached to the resource. } } ]}Webhook delivered
accounts.balance.creditPrimary reconciliation source for Model A payins. Map account_id to encargo 00123 and trx id to your ledger — no mm_id exists.
| Content-Type | application/json |
{ "id": "ev_EncBalCredit",IdiUnique Cobre identifier for this resource. "event_key": "accounts.balance.credit",Event KeyiWebhook subscription key (e.g. money_movements.status.completed). "created_at": "2026-07-16T10:15:22Z",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_EncStatic001",IdiUnique Cobre identifier for this resource. "type": "breb_credit",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "amount": 5000000,AmountiAmount in cents — the last two digits are decimals. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "date": "2026-07-16T10:15:21Z",DateiTimestamp when the balance transaction was posted (ISO 8601, UTC) — used in accounts.balance.* webhook notifications. "metadata": {MetadataiCustom key-value metadata attached to the resource. "sender_id_type": "cc",Sender Id TypeiMetadata field "sender_id_type" attached to the resource. "sender_account_type": "ch",Sender Account TypeiMetadata field "sender_account_type" attached to the resource. "sender_bank_code": "1007",Sender Bank CodeiMetadata field "sender_bank_code" attached to the resource. "sender_account_number": "987654321",Sender Account NumberiMetadata field "sender_account_number" attached to the resource. "description": "Bre-B deposit encargo 00123",DescriptioniHuman-readable label or note. "sender_name": "Juan Perez",Sender NameiMetadata field "sender_name" attached to the resource. "mm_external_id": "",Mm External IdiMetadata field "mm_external_id" attached to the resource. "key_value": "@fidencargo00123",Key ValueiBre-B key value (e.g. @merchant123). "sender_id": "1234567890"Sender IdiMetadata field "sender_id" attached to the resource. }, "account_id": "acc_Encargo00123",Account IdiCobre Balance account id affected by the event. "previous_balance": 0,Previous BalanceiCobre field at "content.previous_balance" in this payload. "current_balance": 5000000,Current BalanceiCobre field at "content.current_balance" in this payload. "credit_debit_type": "credit"Credit Debit Typeicredit = funds in; debit = funds out. }}Reconcile Static-Key Payin
Model A has no Money Movement — reconcile transaction-level on trx id and account_id. Cross-check webhook against GET /accounts/{acct_id}/transactions.
Mapping the webhook payload from an earlier step onto Encargo ledger. No API call is made — this step closes the loop in your own system.
| Cobre field & value | Encargo ledger field | |
content.account_id acc_Encargo00123 |
→ | cobre_acct_id Maps 1:1 to encargo 00123. |
content.id trx_EncStatic001 |
→ | cobre_trx_id Canonical reference — no mm_id. |
content.amount 5000000 |
→ | received_amount_cents |
content.metadata.key_value @fidencargo00123 |
→ | static_key_value |
Register Platform R2P Counterparty
For on-demand QR collections (Model B), register an r2p_breb counterparty with your platform display name (e.g. "Fiduciaria") — reused across encargos. This cp_… is the source_id of the R2P Money Movement.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfdHJ1c3RfY28wMSJ9.Trust9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "geo": "col",GeographyRequirediGeography code (e.g. col = Colombia, mex = Mexico). "type": "r2p_breb",TypeRequirediResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "alias": "Platform R2P QR",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "counterparty_fullname": "Fiduciaria"Display nameRequirediLegal or display name of the counterparty beneficiary. }}{ "id": "cp_TrustR2p",IdiUnique Cobre identifier for this resource. "geo": "col",GeographyRequirediGeography code (e.g. col = Colombia, mex = Mexico). "type": "r2p_breb",TypeRequirediResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "alias": "Platform R2P QR",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "counterparty_fullname": "Fiduciaria"Display nameRequirediLegal or display name of the counterparty beneficiary. }, "created_at": "2026-07-16T10:20:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-16T10:20:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Create R2P QR Collection (Model B)
When a payer needs a QR for a specific amount, POST /money_movements with source_id = platform r2p_breb counterparty, destination_id = encargo balance, metadata.r2p_rail = breb_key, and valid_until for QR expiry. Amount is integer cents (5000000 = COP $50,000). Reuse idempotency on retries — valid 24h.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfdHJ1c3RfY28wMSJ9.Trust9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
| idempotency | encargo00123-qr-0001 |
{ "amount": 5000000,Amount (cents)RequirediAmount in cents — the last two digits are decimals. "source_id": "cp_TrustR2p",R2P sourceRequirediCobre id of the source account or counterparty. "destination_id": "acc_Encargo00123",Encargo balanceRequirediCobre id of the destination account or counterparty. "metadata": {MetadataiCustom key-value metadata attached to the resource. "r2p_rail": "breb_key",R2P railRequirediRequest-to-Pay rail the payer chose (pse, nequi, bancolombia, breb). "key_config": "name",Key configRequirediCobre field at "metadata.key_config" in this payload. "description_to_payer": "Pago encargo 00123",Description to payeriPayer-facing description. On Checkout this is checkout_item. "description_to_payee": "Recaudo encargo 00123",Description To PayeeiDescription that appears on the credit in your Cobre Balance. "valid_until": "2026-07-17T22:00:00Z"QR expiryRequirediCobre field at "metadata.valid_until" in this payload. }, "external_id": "encargo_00123"External IDiYour own reference echoed by Cobre for reconciliation.}{ "id": "mm_R2pQr0001",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": "QR generated — awaiting payer authorization."DescriptioniHuman-readable detail for the current status. }, "metadata": {MetadataiCustom key-value metadata attached to the resource. "r2p_rail": "breb_key",R2P railRequirediRequest-to-Pay rail the payer chose (pse, nequi, bancolombia, breb). "key_config": "name",Key configRequirediCobre field at "metadata.key_config" in this payload. "qr_value": "00020101021226990014co.com.breb1...",Qr ValueiCobre field at "metadata.qr_value" in this payload. "description_to_payer": "Pago encargo 00123",Description to payeriPayer-facing description. On Checkout this is checkout_item. "description_to_payee": "Recaudo encargo 00123",Description To PayeeiDescription that appears on the credit in your Cobre Balance. "valid_until": "2026-07-17T22:00:00Z"QR expiryRequirediCobre field at "metadata.valid_until" in this payload. }, "creator": "cli_trust_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": "encargo_00123",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": "r2p_breb",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": "cp_TrustR2p",R2P sourceRequirediCobre id of the source account or counterparty. "destination_id": "acc_Encargo00123",Encargo balanceRequirediCobre id of the destination account or counterparty. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 5000000,Amount (cents)RequirediAmount in cents — the last two digits are decimals. "created_at": "2026-07-16T10:25:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-16T10:25:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Webhook outcomes — Money movement
When the payer scans and authorizes the QR, funds settle into acc_Encargo00123. Reconcile on external_id and mm_id. Cobre also posts r2p_breb_credit on the balance — see the Transaction tab.
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.
money_movements.status.completed| Content-Type | application/json |
{ "id": "ev_R2pQrCmp",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-07-16T10:27:48Z",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_R2pQr0001",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. "r2p_rail": "breb_key",R2p RailiRequest-to-Pay rail the payer chose (pse, nequi, bancolombia, breb). "key_config": "name",Key ConfigiMetadata field "key_config" attached to the resource. "qr_value": "00020101021226990014co.com.breb1...",Qr ValueiMetadata field "qr_value" attached to the resource. "description_to_payer": "Pago encargo 00123",Description To PayeriPayer-facing description. On Checkout this is checkout_item. "description_to_payee": "Recaudo encargo 00123",Description To PayeeiDescription that appears on the credit in your Cobre Balance. "valid_until": "2026-07-17T22:00:00Z"Valid UntiliMetadata field "valid_until" attached to the resource. }, "creator": "cli_trust_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": "encargo_00123",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": "r2p_breb",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": "cp_TrustR2p",Source IdiCobre id of the source account or counterparty. "destination_id": "acc_Encargo00123",Destination IdiCobre id of the destination account or counterparty. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 5000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-16T10:25:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-16T10:27:48Z"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):
| Code | Description | Applies to |
|---|---|---|
F001 | Payment processing failed please try again. | Payin and payout |
F002 | NSF - Not Sufficient Funds in the designated account. | Payin and payout |
F003 | R2P Payment link expired. | Payin |
F004 | Daily transaction amount limit has been reached. | Payin and payout |
F005 | Amount exceeds the maximum allowed transaction limit. | Payin and payout |
F098 | Could not process the money movement at this time. | Payin and payout |
F099 | Could not process the money movement at this time. | Payin and payout |
money_movements.status.failed| Content-Type | application/json |
{ "id": "ev_R2pQrCmp",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-07-16T10:27:48Z",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_R2pQr0001",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": "F003",CodeiProvider or Cobre status code when the state is failed or rejected. "description": "R2P Payment link expired."DescriptioniHuman-readable label or note. }, "metadata": {MetadataiCustom key-value metadata attached to the resource. "r2p_rail": "breb_key",R2p RailiRequest-to-Pay rail the payer chose (pse, nequi, bancolombia, breb). "key_config": "name",Key ConfigiMetadata field "key_config" attached to the resource. "qr_value": "00020101021226990014co.com.breb1...",Qr ValueiMetadata field "qr_value" attached to the resource. "description_to_payer": "Pago encargo 00123",Description To PayeriPayer-facing description. On Checkout this is checkout_item. "description_to_payee": "Recaudo encargo 00123",Description To PayeeiDescription that appears on the credit in your Cobre Balance. "valid_until": "2026-07-17T22:00:00Z"Valid UntiliMetadata field "valid_until" attached to the resource. }, "creator": "cli_trust_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": "encargo_00123",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": "r2p_breb",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": "cp_TrustR2p",Source IdiCobre id of the source account or counterparty. "destination_id": "acc_Encargo00123",Destination IdiCobre id of the destination account or counterparty. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 5000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-16T10:25:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-16T10:27:48Z"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):
| Code | Description | Applies to |
|---|---|---|
R000 | Transaction rejected. | Payin and payout |
R001 | Inactive or blocked account. | Payin and payout |
R002 | Account and identification provided do not coincide. | Payin and payout |
R005 | Account does not exist. | Payin and payout |
R006 | Invalid account number. | Payin and payout |
R009 | Exceeds maximum allowed amount. | Payin and payout |
R010 | Account not authorized to debit. | Payin and payout |
R012 | The user has abandoned the transaction. | Payin |
R016 | Payment rejected due to timeout. | Payin |
R017 | Payment rejected due to expired money movement. | Payin |
R019 | Payment rejected due to incorrect amount. | Payin |
R020 | Payment rejected due to user authentication failure. | Payin |
R021 | Insufficient funds in payer account. | Payin |
R023 | Payment cancelled by the user. | Payin and payout |
R026 | Payment rejected due to unavailable bank services. | Payin and payout |
R027 | Account exceeds the maximum allowed transaction limit. | Payin and payout |
R034 | Account closed. | Payin and payout |
R081 | The counterparty registration has expired. | Payin |
R082 | The counterparty registration has been canceled. | Payin |
R084 | The counterparty registration has been rejected. | Payin |
money_movements.status.rejected| Content-Type | application/json |
{ "id": "ev_R2pQrCmp",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-07-16T10:27:48Z",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_R2pQr0001",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": "R016",CodeiProvider or Cobre status code when the state is failed or rejected. "description": "Payment rejected due to timeout."DescriptioniHuman-readable label or note. }, "metadata": {MetadataiCustom key-value metadata attached to the resource. "r2p_rail": "breb_key",R2p RailiRequest-to-Pay rail the payer chose (pse, nequi, bancolombia, breb). "key_config": "name",Key ConfigiMetadata field "key_config" attached to the resource. "qr_value": "00020101021226990014co.com.breb1...",Qr ValueiMetadata field "qr_value" attached to the resource. "description_to_payer": "Pago encargo 00123",Description To PayeriPayer-facing description. On Checkout this is checkout_item. "description_to_payee": "Recaudo encargo 00123",Description To PayeeiDescription that appears on the credit in your Cobre Balance. "valid_until": "2026-07-17T22:00:00Z"Valid UntiliMetadata field "valid_until" attached to the resource. }, "creator": "cli_trust_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": "encargo_00123",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": "r2p_breb",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": "cp_TrustR2p",Source IdiCobre id of the source account or counterparty. "destination_id": "acc_Encargo00123",Destination IdiCobre id of the destination account or counterparty. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 5000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-16T10:25:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-16T10:27:48Z"Updated AtiTimestamp of the last update (ISO 8601, UTC). }}When a payin Money Movement completes, Cobre credits the destination Cobre Balance and delivers accounts.balance.credit. Transaction type matches the movement type — see GET /accounts/{id}/transactions OAS examples.
When the payin settles, Cobre credits the destination Cobre Balance.
accounts.balance.credit| Content-Type | application/json |
{ "id": "ev_R2pQr0001Cr",IdiUnique Cobre identifier for this resource. "event_key": "accounts.balance.credit",Event KeyiWebhook subscription key (e.g. money_movements.status.completed). "created_at": "2026-07-16T10:27:48Z",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_R2pQr0001Cr",IdiUnique Cobre identifier for this resource. "type": "r2p_breb_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_Encargo00123",Account IdiCobre Balance account id affected by the event. "amount": 5000000,AmountiAmount in cents — the last two digits are decimals. "previous_balance": 0,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": "credit",Credit Debit Typeicredit = funds in; debit = funds out. "transaction_date": "2026-07-16T10:27:48Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-07-16T10:27:48Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "sender_account_number": "",Sender Account NumberiMetadata field "sender_account_number" attached to the resource. "sender_account_type": "ch",Sender Account TypeiMetadata field "sender_account_type" attached to the resource. "sender_bank_code": "",Sender Bank CodeiMetadata field "sender_bank_code" attached to the resource. "sender_id": "",Sender IdiMetadata field "sender_id" attached to the resource. "sender_id_type": "cc",Sender Id TypeiMetadata field "sender_id_type" attached to the resource. "key_value": "",Key ValueiBre-B key value (e.g. @merchant123). "sender_name": "",Sender NameiMetadata field "sender_name" attached to the resource. "description": "Recaudo encargo 00123",DescriptioniHuman-readable label or note. "money_movement_id": "mm_R2pQr0001"Money Movement IdiMoney Movement that generated this balance transaction. } }}Reconcile R2P QR Payin
Model B reconciliation is Money-Movement-level: join on external_id and mm_id. Fallback: GET /money_movements?external_id=encargo_00123.
Mapping the webhook payload from an earlier step onto Encargo ledger. No API call is made — this step closes the loop in your own system.
| Cobre field & value | Encargo ledger field | |
content.external_id encargo_00123 |
→ | encargo_reference |
content.id mm_R2pQr0001 |
→ | cobre_mm_id |
content.amount 5000000 |
→ | received_amount_cents |
content.status.state completed |
→ | payin_status Map completed → RECEIVED. |
Auto-Sweep via Primary Account (Option A)
Option (a): because metadata.primary_account was set at account creation, every credit on acc_Encargo00123 auto-sweeps to cp_Encargo00123Bank. Cobre debits the encargo balance — watch accounts.balance.debit. Use Option (b) schedulers or Option (c) manual payouts when you need batched or on-demand control instead.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfdHJ1c3RfY28wMSJ9.Trust9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
{ "total_items": 1,Total ItemsiTotal items matching the query across all pages. "total_pages": 1,Total PagesiNumber of pages in this result set. "is_last_page": true,Is Last PageiTrue when this is the final page of results. "page_items": 1,Page ItemsiNumber of items returned on this page. "contents": [ContentsiArray of result objects for this page. { "id": "trx_EncSweep001",Debit transaction IDiUnique Cobre identifier for this resource. "type": "col_payout_debit",Transaction 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_Encargo00123",Account IdiCobre Balance account id affected by the event. "amount": 5000000,Amount swept (cents)iAmount in cents — the last two digits are decimals. "previous_balance": 5000000,Previous BalanceiCobre field at "contents.0.previous_balance" in this payload. "current_balance": 0,Current BalanceiCobre field at "contents.0.current_balance" in this payload. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "credit_debit_type": "debit",Directionicredit = funds in; debit = funds out. "transaction_date": "2026-07-16T10:16:04Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-07-16T10:16:05Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "description": "Primary account auto-sweep to encargo bank"DescriptioniHuman-readable label or note. } } ]}Webhook delivered
accounts.balance.debitFires when auto-sweep debits acc_Encargo00123 after a payin credit. Funds are en route to the encargo bank account via Primary Account linkage.
| Content-Type | application/json |
{ "id": "ev_EncBalDebit",IdiUnique Cobre identifier for this resource. "event_key": "accounts.balance.debit",Event KeyiWebhook subscription key (e.g. money_movements.status.completed). "created_at": "2026-07-16T10:16:05Z",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_EncSweep001",IdiUnique Cobre identifier for this resource. "type": "col_payout_debit",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "amount": 5000000,AmountiAmount in cents — the last two digits are decimals. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "date": "2026-07-16T10:16:04Z",DateiTimestamp when the balance transaction was posted (ISO 8601, UTC) — used in accounts.balance.* webhook notifications. "metadata": {MetadataiCustom key-value metadata attached to the resource. "description": "Primary account auto-sweep to encargo bank"DescriptioniHuman-readable label or note. }, "account_id": "acc_Encargo00123",Account IdiCobre Balance account id affected by the event. "previous_balance": 5000000,Previous BalanceiCobre field at "content.previous_balance" in this payload. "current_balance": 0,Current BalanceiCobre field at "content.current_balance" in this payload. "credit_debit_type": "debit"Credit Debit Typeicredit = funds in; debit = funds out. }}Create Multi-Balance Sweep Scheduler
Option (b): when encargos do not use instant Primary Account sweep (or you batch at end-of-day), create a Money Movement Scheduler that pulls from multiple encargo Cobre Balances and pays out to the external bank counterparty. Set amount to 0 for full account sweeping. schedule_pattern is a Quartz cron (example: daily at 18:00).
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfdHJ1c3RfY28wMSJ9.Trust9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "alias": "Encargo balances EOD sweep",AliasiDisplay name that helps identify it and clarify its purpose. "schedule_pattern": "0 0 18 * * ?",Schedule (cron)RequirediQuartz cron — 0 0 18 * * ? = daily at 18:00. "account_source_ids": [Account Source IdsiCobre field at "account_source_ids" in this payload. "acc_Encargo00123", "acc_Encargo00124" ], "destination_id": "cp_Encargo00123Bank",Bank counterpartyRequirediCobre id of the destination account or counterparty. "amount": 0,Amount (0 = sweep all)RequirediAmount in cents — the last two digits are decimals. "description": "EOD sweep encargo balances to bank",DescriptioniHuman-readable label or note. "checker_approval": falseChecker approvaliWhen true, Cobre pauses at pending_approval and locks source funds until an approval/denial decision via Money Movement Approvals API.}{ "id": "mms_EncSweep01",IdiUnique Cobre identifier for this resource. "creator": "cli_trust_co01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user. "alias": "Encargo balances EOD sweep",AliasiDisplay name that helps identify it and clarify its purpose. "amount": 0,Amount (0 = sweep all)RequirediAmount in cents — the last two digits are decimals. "description": "EOD sweep encargo balances to bank",DescriptioniHuman-readable label or note. "active_status": true,Active StatusiCobre field at "active_status" in this payload. "schedule_pattern": "0 0 18 * * ?",Schedule (cron)RequirediQuartz cron — 0 0 18 * * ? = daily at 18:00. "account_source_ids": [Account Source IdsiCobre field at "account_source_ids" in this payload. "acc_Encargo00123", "acc_Encargo00124" ], "destination_id": "cp_Encargo00123Bank",Bank counterpartyRequirediCobre id of the destination account or counterparty. "created_at": "2026-07-16T11:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-16T11:00:00Z",Updated AtiTimestamp of the last update (ISO 8601, UTC). "checker_approval": falseChecker approvaliWhen true, Cobre pauses at pending_approval and locks source funds until an approval/denial decision via Money Movement Approvals API.}List Sweep Schedulers
Audit active and historical schedulers. Each triggered run creates a Money Movement — reconcile those on money_movements.status.* webhooks and GET /money_movements.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfdHJ1c3RfY28wMSJ9.Trust9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
{ "total_items": 1,Total ItemsiTotal items matching the query across all pages. "total_pages": 1,Total PagesiNumber of pages in this result set. "is_last_page": true,Is Last PageiTrue when this is the final page of results. "page_items": 1,Page ItemsiNumber of items returned on this page. "contents": [ContentsiArray of result objects for this page. { "id": "mms_EncSweep01",Scheduler IDiUnique Cobre identifier for this resource. "creator": "cli_trust_co01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user. "alias": "Encargo balances EOD sweep",AliasiDisplay name that helps identify it and clarify its purpose. "amount": 0,AmountiAmount in cents — the last two digits are decimals. "description": "EOD sweep encargo balances to bank",DescriptioniHuman-readable label or note. "active_status": true,ActiveiCobre field at "contents.0.active_status" in this payload. "schedule_pattern": "0 0 18 * * ?",Schedule PatterniCobre field at "contents.0.schedule_pattern" in this payload. "account_source_ids": [Account Source IdsiCobre field at "contents.0.account_source_ids" in this payload. "acc_Encargo00123", "acc_Encargo00124" ], "destination_id": "cp_Encargo00123Bank",DestinationiCobre id of the destination account or counterparty. "created_at": "2026-07-16T11:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-16T11:00:00Z",Updated AtiTimestamp of the last update (ISO 8601, UTC). "checker_approval": falseChecker ApprovaliWhen true, Cobre pauses at pending_approval and locks source funds until an approval/denial decision via Money Movement Approvals API. } ]}Reconcile Scheduler-Triggered Payouts
When the scheduler fires, Cobre creates a Money Movement per source balance with available funds. Match money_movements.status.completed webhooks to your encargo ledger by external_id and mm_id; cross-check accounts.balance.debit on each source balance.
Mapping the API response from an earlier step onto Encargo ledger. No API call is made — this step closes the loop in your own system.
| Cobre field & value | Encargo ledger field | |
id mms_EncSweep01 |
→ | scheduler_id |
account_source_ids.0 acc_Encargo00123 |
→ | swept_balance_1 |
account_source_ids.1 acc_Encargo00124 |
→ | swept_balance_2 One MM per balance when scheduler runs. |
destination_id cp_Encargo00123Bank |
→ | bank_counterparty_id |
Payout to Encargo Bank Account
Option (c): on-demand transfer from the encargo Cobre Balance to the encargo bank counterparty (cp_…) via Fast Pay / ACH. Use when Primary Account auto-sweep is disabled or you need a specific amount moved outside the scheduler. Reuse idempotency on retries — valid 24h.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfdHJ1c3RfY28wMSJ9.Trust9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
| idempotency | encargo00123-payout-0001 |
{ "source_id": "acc_Encargo00123",Encargo balanceRequirediCobre id of the source account or counterparty. "destination_id": "cp_Encargo00123Bank",Bank counterpartyRequirediCobre id of the destination account or counterparty. "amount": 5000000,Amount (cents)Requiredi5000000 = COP $50,000. "metadata": {MetadataiCustom key-value metadata attached to the resource. "description": "Encargo 00123 bank transfer"DescriptionRequirediHuman-readable label or note. }, "external_id": "encargo_00123_payout_001"External IDiYour own reference echoed by Cobre for reconciliation.}{ "id": "mm_EncPayout001",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": "Encargo 00123 bank transfer"DescriptionRequirediHuman-readable label or note. }, "creator": "cli_trust_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": "encargo_00123_payout_001",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_Encargo00123",Encargo balanceRequirediCobre id of the source account or counterparty. "destination_id": "cp_Encargo00123Bank",Bank counterpartyRequirediCobre id of the destination account or counterparty. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 5000000,Amount (cents)Requiredi5000000 = COP $50,000. "created_at": "2026-07-16T11:30:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-16T11:30:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Webhook outcomes — Money movement
Manual encargo payout completed — mark the transfer on your ledger using external_id and mm_id. Cobre debits acc_Encargo00123 — see the Transaction tab.
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.
money_movements.status.completed| Content-Type | application/json |
{ "id": "ev_EncPayoutCmp",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-07-16T11:30: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_EncPayout001",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": "Encargo 00123 bank transfer",DescriptioniHuman-readable label or note. "tracking_key": "20260716Enc00123"Tracking KeyiNetwork tracking key for the payment (PSE ticket or Bre-B key). }, "creator": "cli_trust_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": "encargo_00123_payout_001",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_Encargo00123",Source IdiCobre id of the source account or counterparty. "destination_id": "cp_Encargo00123Bank",Destination IdiCobre id of the destination account or counterparty. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 5000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-16T11:30:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-16T11:30: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):
| Code | Description | Applies to |
|---|---|---|
F001 | Payment processing failed please try again. | Payin and payout |
F002 | NSF - Not Sufficient Funds in the designated account. | Payin and payout |
F004 | Daily transaction amount limit has been reached. | Payin and payout |
F005 | Amount exceeds the maximum allowed transaction limit. | Payin and payout |
F098 | Could not process the money movement at this time. | Payin and payout |
F099 | Could not process the money movement at this time. | Payin and payout |
money_movements.status.failed| Content-Type | application/json |
{ "id": "ev_EncPayoutCmp",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-07-16T11:30: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_EncPayout001",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": "Encargo 00123 bank transfer",DescriptioniHuman-readable label or note. "tracking_key": "20260716Enc00123"Tracking KeyiNetwork tracking key for the payment (PSE ticket or Bre-B key). }, "creator": "cli_trust_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": "encargo_00123_payout_001",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_Encargo00123",Source IdiCobre id of the source account or counterparty. "destination_id": "cp_Encargo00123Bank",Destination IdiCobre id of the destination account or counterparty. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 5000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-16T11:30:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-16T11:30: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):
| Code | Description | Applies to |
|---|---|---|
R000 | Transaction rejected. | Payin and payout |
R001 | Inactive or blocked account. | Payin and payout |
R002 | Account and identification provided do not coincide. | Payin and payout |
R004 | ID not valid. | Payout |
R005 | Account does not exist. | Payin and payout |
R006 | Invalid account number. | Payin and payout |
R009 | Exceeds maximum allowed amount. | Payin and payout |
R010 | Account not authorized to debit. | Payin and payout |
R011 | Invalid Account type. | Payout |
R015 | Account not authorized to be credited. | Payout |
R018 | Payment rejected due invalid key. | Payout |
R023 | Payment cancelled by the user. | Payin and payout |
R024 | Exceeds maximum allowed number of transactions. | Payout |
R025 | Required information missing. | Payout |
R026 | Payment rejected due to unavailable bank services. | Payin and payout |
R027 | Account exceeds the maximum allowed transaction limit. | Payin and payout |
R034 | Account closed. | Payin and payout |
R085 | Bank processing error. | Payout |
money_movements.status.rejected| Content-Type | application/json |
{ "id": "ev_EncPayoutCmp",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-07-16T11:30: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_EncPayout001",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": "Encargo 00123 bank transfer",DescriptioniHuman-readable label or note. "tracking_key": "20260716Enc00123"Tracking KeyiNetwork tracking key for the payment (PSE ticket or Bre-B key). }, "creator": "cli_trust_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": "encargo_00123_payout_001",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_Encargo00123",Source IdiCobre id of the source account or counterparty. "destination_id": "cp_Encargo00123Bank",Destination IdiCobre id of the destination account or counterparty. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 5000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-16T11:30:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-16T11:30:45Z"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.
accounts.balance.debit| Content-Type | application/json |
{ "id": "ev_EncPayout0Lk",IdiUnique Cobre identifier for this resource. "event_key": "accounts.balance.debit",Event KeyiWebhook subscription key (e.g. money_movements.status.completed). "created_at": "2026-07-16T11:30: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_EncPayout001Lk",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_Encargo00123",Account IdiCobre Balance account id affected by the event. "amount": -5000000,AmountiAmount in cents — the last two digits are decimals. "previous_balance": 10000000,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-07-16T11:30:00Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-07-16T11:30:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "money_movement_id": "mm_EncPayout001",Money Movement IdiMoney Movement that generated this balance transaction. "description": "Encargo 00123 bank transfer",DescriptioniHuman-readable label or note. "beneficiary_account_number": "",Beneficiary Account NumberiMetadata field "beneficiary_account_number" attached to the resource. "tracking_key": "20260716Enc00123"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.
accounts.balance.debit| Content-Type | application/json |
{ "id": "ev_EncPayout0Lk",IdiUnique Cobre identifier for this resource. "event_key": "accounts.balance.debit",Event KeyiWebhook subscription key (e.g. money_movements.status.completed). "created_at": "2026-07-16T11:30: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_EncPayout001Lk",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_Encargo00123",Account IdiCobre Balance account id affected by the event. "amount": -5000000,AmountiAmount in cents — the last two digits are decimals. "previous_balance": 10000000,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-07-16T11:30:00Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-07-16T11:30:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "money_movement_id": "mm_EncPayout001",Money Movement IdiMoney Movement that generated this balance transaction. "description": "Encargo 00123 bank transfer",DescriptioniHuman-readable label or note. "beneficiary_account_number": "",Beneficiary Account NumberiMetadata field "beneficiary_account_number" attached to the resource. "tracking_key": "20260716Enc00123"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).
accounts.balance.credit| Content-Type | application/json |
{ "id": "ev_EncPayout0Cp",IdiUnique Cobre identifier for this resource. "event_key": "accounts.balance.credit",Event KeyiWebhook subscription key (e.g. money_movements.status.completed). "created_at": "2026-07-16T11:30: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": "trx_EncPayout001Cp",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_Encargo00123",Account IdiCobre Balance account id affected by the event. "amount": 5000000,AmountiAmount in cents — the last two digits are decimals. "previous_balance": 0,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": "credit",Credit Debit Typeicredit = funds in; debit = funds out. "transaction_date": "2026-07-16T11:30:45Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-07-16T11:30:45Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "money_movement_id": "mm_EncPayout001",Money Movement IdiMoney Movement that generated this balance transaction. "description": "Encargo 00123 bank transfer",DescriptioniHuman-readable label or note. "tracking_key": "20260716Enc00123",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. } }}Reconcile Manual Encargo Payout
Match the completion webhook to the encargo ledger on external_id and mm_id. Cross-check the balance debit via accounts.balance.debit or GET /accounts/{acct_id}/transactions.
Mapping the webhook payload from an earlier step onto Encargo ledger. No API call is made — this step closes the loop in your own system.
| Cobre field & value | Encargo ledger field | |
content.external_id encargo_00123_payout_001 |
→ | payout_reference |
content.id mm_EncPayout001 |
→ | cobre_mm_id |
content.source_id acc_Encargo00123 |
→ | cobre_acct_id |
content.destination_id cp_Encargo00123Bank |
→ | bank_counterparty_id |
content.amount 5000000 |
→ | transferred_amount_cents |
content.status.state completed |
→ | payout_status Map completed → TRANSFERRED. |
Daily Balance History (D+1)
On D+1 (~5 hours after midnight), pull summarized opening balance, total credits/debits, and closing balance per encargo for daily close. Filter by balance_date (YYYY-MM-DD).
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfdHJ1c3RfY28wMSJ9.Trust9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
{ "total_items": 1,Total ItemsiTotal items matching the query across all pages. "total_pages": 1,Total PagesiNumber of pages in this result set. "is_last_page": true,Is Last PageiTrue when this is the final page of results. "page_items": 1,Page ItemsiNumber of items returned on this page. "Daily Balance history List": [Daily Balance history ListiCobre field at "Daily Balance history List" in this payload. { "id": "dbh_Enc00123Eod",IdiUnique Cobre identifier for this resource. "offset": "-05:00",OffsetiCobre field at "Daily Balance history List.0.offset" in this payload. "balance_date": "2026-07-16",Balance DateiCobre field at "Daily Balance history List.0.balance_date" in this payload. "initial_balance": "0",Initial BalanceiCobre field at "Daily Balance history List.0.initial_balance" in this payload. "total_credits": "10000000",Total CreditsiCobre field at "Daily Balance history List.0.total_credits" in this payload. "total_debits": "10000000",Total DebitsiCobre field at "Daily Balance history List.0.total_debits" in this payload. "end_balance": "0",End BalanceiCobre field at "Daily Balance history List.0.end_balance" in this payload. "created_at": "2026-07-17T10:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-17T10:00:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC). } ]}Fallback: Query Money Movements
Mandatory fallback when webhooks may have been missed. Query R2P collections by external_id. Static-key payins have no mm_id — use GET /accounts/{acct_id}/transactions instead.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfdHJ1c3RfY28wMSJ9.Trust9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
{ "total_items": 1,Total ItemsiTotal items matching the query across all pages. "total_pages": 1,Total PagesiNumber of pages in this result set. "is_last_page": true,Is Last PageiTrue when this is the final page of results. "page_items": 1,Page ItemsiNumber of items returned on this page. "contents": [ContentsiArray of result objects for this page. { "id": "mm_R2pQr0001",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. "r2p_rail": "breb_key",R2p RailiRequest-to-Pay rail the payer chose (pse, nequi, bancolombia, breb). "key_config": "name",Key ConfigiMetadata field "key_config" attached to the resource. "valid_until": "2026-07-17T22:00:00Z"Valid UntiliMetadata field "valid_until" attached to the resource. }, "creator": "cli_trust_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": "encargo_00123",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": "r2p_breb",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": "cp_TrustR2p",Source IdiCobre id of the source account or counterparty. "destination_id": "acc_Encargo00123",Destination IdiCobre id of the destination account or counterparty. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 5000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-16T10:25:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-16T10:27:48Z"Updated AtiTimestamp of the last update (ISO 8601, UTC). } ]}Close the Mixed Reconciliation Model
Webhooks are the primary source (accounts.balance.credit/debit, money_movements.status.*, cobre_keys.status.registered). Mandatory fallback: GET /accounts/{acct_id}/transactions for Model A, GET /money_movements for Model B, GET daily_balance_history for D+1 per-encargo close. Export via POST /reports when needed.
Mapping the API response from an earlier step onto Encargo ledger. No API call is made — this step closes the loop in your own system.
| Cobre field & value | Encargo ledger field | |
Daily Balance history List.0.balance_date 2026-07-16 |
→ | reconciliation_date |
Daily Balance history List.0.total_credits 10000000 |
→ | total_payins_cents Sum of Model A + Model B credits for the day. |
Daily Balance history List.0.total_debits 10000000 |
→ | total_sweeps_cents Auto-sweep debits to encargo bank. |
Daily Balance history List.0.end_balance 0 |
→ | closing_balance_cents Should be zero when all funds swept same day. |