Authenticate
Every Cobre API call carries a short-lived Bearer token (valid ~20 minutes). Exchange your API user credentials for a token and attach it to every later request.
| Content-Type | application/json |
{ "user_id": "cli_demo_co_01",User IDiYour API user identifier issued by Cobre. Format: cli_xxxx. "secret": "sk_live_2Hg8nP4qR7"SecretiThe secret from your API key. Treat it like a password.}{ "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfZGVtb19jb18wMSJ9.Dm3kP9xR2vN7cL4wT8aH1gF6yJ0bZ5eQ",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 Webhook Events
Subscribe to money-movement status events so your system learns when each payout settles or fails — no polling. The same subscription covers both Bre-B and Fast Pay.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfZGVtb19jb18wMSJ9.Dm3kP9xR2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "url": "https://yourplatform.co/webhooks/cobre",Notification URLiYour HTTPS endpoint that receives Cobre webhook POSTs. "description": "Payout lifecycle",DescriptioniA label to identify this subscription. "events": [EventsiList of webhook event types this subscription listens to. "money_movements.status.initiated", "money_movements.status.processing", "money_movements.status.completed", "money_movements.status.failed", "money_movements.status.rejected", "accounts.balance.debit" ], "event_signature_key": "WHsig_demo_44"Signature KeyiA secret you provide; Cobre HMAC-signs each notification with it so you can verify authenticity.}{ "id": "sub_PayoutDemo1",IdiUnique Cobre identifier for this resource. "url": "https://yourplatform.co/webhooks/cobre",Notification URLiYour HTTPS endpoint that receives Cobre webhook POSTs. "description": "Payout lifecycle",DescriptioniA label to identify this subscription. "events": [EventsiList of webhook event types this subscription listens to. "money_movements.status.initiated", "money_movements.status.processing", "money_movements.status.completed", "money_movements.status.failed", "money_movements.status.rejected", "accounts.balance.debit" ], "event_signature_key": "******_44",Signature KeyiA secret you provide; Cobre HMAC-signs each notification with it so you can verify authenticity. "created_at": "2026-06-26T12:00:00Z"Created AtiTimestamp when the resource was created (ISO 8601, UTC).}Verify the Beneficiary's Bre-B Key
Best practice before any first payout: confirm the destination Bre-B key belongs to the declared identity. The col_key_ownership_1 model checks the key against the holder's ID in Colombia's directory.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfZGVtb19jb18wMSJ9.Dm3kP9xR2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "model": "col_key_ownership_1",Modelicol_key_ownership_1 = confirm the key belongs to the declared ID. "verification_request": {Verification RequestiInput fields sent to the verification model. "key_value": "@AcmeVendor10",Bre-B keyiThe beneficiary's Bre-B key. "account_holder_id_number": "9001234567"Holder IDiThe beneficiary's identification number; must match the key owner. }, "external_id": "verify-vendor-10"External IDiYour reference for this verification.}{ "id": "av_PayoutDemo1",IdiUnique Cobre identifier for this resource. "creator_id": "cli_demo_co_01",Creator IdiCobre field at "creator_id" in this payload. "model": "col_key_ownership_1",Modelicol_key_ownership_1 = confirm the key belongs to the declared ID. "geo": "col",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "verification_request": {Verification RequestiInput fields sent to the verification model. "key_value": "@AcmeVendor10",Bre-B keyiThe beneficiary's Bre-B key. "account_holder_id_number": "9001234567"Holder IDiThe beneficiary's identification number; must match the key owner. }, "verification_response": {Verification ResponseiResult returned by the verification model. "verification_result": "matched"Verification ResultiCobre field at "verification_response.verification_result" in this payload. }, "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 detail for the current status. }, "external_id": "verify-vendor-10",External IDiYour reference for this verification. "created_at": "2026-06-26T12:10:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-06-26T12:10:02Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Create the Bre-B Counterparty
Register the verified Bre-B key as a breb_key counterparty. The counterparty type is what selects the Bre-B rail at payout time.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfZGVtb19jb18wMSJ9.Dm3kP9xR2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "geo": "col",Geographyicol = Colombia. "type": "breb_key",Typeibreb_key routes a payout to a Bre-B key. "alias": "Acme Vendor - Bre-B",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "key_value": "@AcmeVendor10",Bre-B keyiThe verified beneficiary key. "counterparty_email": "pagos@acmevendor.co"EmailiBeneficiary email. }}{ "id": "cp_BrebVendor10",IdiUnique Cobre identifier for this resource. "geo": "col",Geographyicol = Colombia. "type": "breb_key",Typeibreb_key routes a payout to a Bre-B key. "alias": "Acme Vendor - Bre-B",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "key_value": "@AcmeVendor10",Bre-B keyiThe verified beneficiary key. "key_type": "alphanumeric",Key TypeiCobre field at "metadata.key_type" in this payload. "counterparty_email": "pagos@acmevendor.co"EmailiBeneficiary email. }, "created_at": "2026-06-26T12:15:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-06-26T12:15:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Send the Bre-B Payout
Create a Money Movement from your funding Cobre Balance to the Bre-B counterparty. This demo pays out immediately (checker_approval is false). For maker–checker, set checker_approval to true — see Money Movements Approval and the lender use-case flow. Bre-B settles instantly, 24/7 (max ~$12,110,000 COP per transaction). The response type is 'breb'.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfZGVtb19jb18wMSJ9.Dm3kP9xR2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
| idempotency | payout-breb-5567-001 |
{ "amount": 3000000,Amount (cents)iAmount in cents. 3000000 = $30,000.00 COP. "source_id": "acc_FundingCOP01",Source (funding balance)iYour funding Cobre Balance — money leaves from here. "destination_id": "cp_BrebVendor10",Destination (counterparty)iThe Bre-B counterparty from the previous step. "metadata": {MetadataiCustom key-value metadata attached to the resource. "description": "Supplier payout Bre-B"DescriptioniInformative description (max 40 chars). On Bre-B it is informative only. }, "external_id": "payout-breb-5567"External IDiYour payout reference, echoed in the response and webhook.}{ "id": "mm_BrebPay5567",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": "Supplier payout Bre-B"DescriptioniInformative description (max 40 chars). On Bre-B it is informative only. }, "creator": "cli_demo_co_01",CreatoriAPI client id that created this resource. "external_id": "payout-breb-5567",External IDiYour payout reference, echoed in the response and webhook. "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": "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": "acc_FundingCOP01",Source (funding balance)iYour funding Cobre Balance — money leaves from here. "destination_id": "cp_BrebVendor10",Destination (counterparty)iThe Bre-B counterparty from the previous step. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 3000000,Amount (cents)iAmount in cents. 3000000 = $30,000.00 COP. "created_at": "2026-06-26T12:20:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-06-26T12:20:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Webhook outcomes — Money movement
Fires when the Bre-B payout settles (typically seconds). Mark the payout paid by external_id. While processing, Cobre locked funds with a breb_debit — see the Transaction tab. No compensation credit is posted on completion.
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_BrebPay5567Cmp",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-26T12:20:09Z",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_BrebPay5567",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": "Supplier payout Bre-B",DescriptioniHuman-readable label or note. "tracking_key": "55671200901",Tracking KeyiBre-B tracking key for the payment. "key_value": "@AcmeVendor10",Key ValueiBre-B key value (e.g. @merchant123). "beneficiary_account_number": "@AcmeVendor10"Beneficiary Account NumberiMetadata field "beneficiary_account_number" attached to the resource. }, "creator": "cli_demo_co_01",CreatoriAPI client id that created this resource. "external_id": "payout-breb-5567",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": "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": "acc_FundingCOP01",Source IdiCobre id of the source account or counterparty. "destination_id": "cp_BrebVendor10",Destination IdiCobre id of the destination account or counterparty. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 3000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-06-26T12:20:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-06-26T12:20:09Z"Updated AtiTimestamp of the last update (ISO 8601, UTC). }}Cobre or the rail could not process the movement. Inspect status.code and status.description — common failed codes include:
F001 | Payment processing failed — please try again. |
F002 | NSF — not sufficient funds in the designated account. |
F003 | R2P payment link expired (payins). |
F004 | Daily transaction amount limit has been reached. |
F005 | Amount exceeds the maximum allowed transaction limit. |
F098 | Could not process the money movement at this time. |
F099 | Could not process the money movement at this time. |
money_movements.status.failed| Content-Type | application/json |
{ "id": "ev_BrebPay5567Cmp",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-26T12:20:09Z",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_BrebPay5567",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": "Supplier payout Bre-B",DescriptioniHuman-readable label or note. "tracking_key": "55671200901",Tracking KeyiBre-B tracking key for the payment. "key_value": "@AcmeVendor10",Key ValueiBre-B key value (e.g. @merchant123). "beneficiary_account_number": "@AcmeVendor10"Beneficiary Account NumberiMetadata field "beneficiary_account_number" attached to the resource. }, "creator": "cli_demo_co_01",CreatoriAPI client id that created this resource. "external_id": "payout-breb-5567",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": "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": "acc_FundingCOP01",Source IdiCobre id of the source account or counterparty. "destination_id": "cp_BrebVendor10",Destination IdiCobre id of the destination account or counterparty. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 3000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-06-26T12:20:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-06-26T12:20:09Z"Updated AtiTimestamp of the last update (ISO 8601, UTC). }}The bank or payment network rejected the transaction. Inspect status.code — common rejected codes include:
R000 | Transaction rejected. |
R001 | Inactive or blocked account. |
R002 | Account and identification provided do not coincide. |
R005 | Account does not exist. |
R006 | Invalid account number. |
R009 | Exceeds maximum allowed amount. |
R018 | Payment rejected due to invalid key (payouts). |
R023 | Payment cancelled by the user. |
R026 | Payment rejected due to unavailable bank services. |
R034 | Account closed. |
R085 | Bank processing error (payouts). |
money_movements.status.rejected| Content-Type | application/json |
{ "id": "ev_BrebPay5567Cmp",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-26T12:20:09Z",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_BrebPay5567",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": "R001",CodeiProvider or Cobre status code when the state is failed or rejected. "description": "Inactive or blocked account."DescriptioniHuman-readable label or note. }, "metadata": {MetadataiCustom key-value metadata attached to the resource. "description": "Supplier payout Bre-B",DescriptioniHuman-readable label or note. "tracking_key": "55671200901",Tracking KeyiBre-B tracking key for the payment. "key_value": "@AcmeVendor10",Key ValueiBre-B key value (e.g. @merchant123). "beneficiary_account_number": "@AcmeVendor10"Beneficiary Account NumberiMetadata field "beneficiary_account_number" attached to the resource. }, "creator": "cli_demo_co_01",CreatoriAPI client id that created this resource. "external_id": "payout-breb-5567",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": "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": "acc_FundingCOP01",Source IdiCobre id of the source account or counterparty. "destination_id": "cp_BrebVendor10",Destination IdiCobre id of the destination account or counterparty. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 3000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-06-26T12:20:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-06-26T12:20:09Z"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_BrebPay556Lk",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-26T12:20: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_BrebPay5567Lk",IdiUnique Cobre identifier for this resource. "type": "breb_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_FundingCOP01",Account IdiCobre Balance account id affected by the event. "amount": -3000000,AmountiAmount in cents — the last two digits are decimals. "previous_balance": 8000000,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-26T12:20:00Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-06-26T12:20:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "beneficiary_account_number": "@AcmeVendor10",Beneficiary Account NumberiMetadata field "beneficiary_account_number" attached to the resource. "beneficiary_account_type": "ch",Beneficiary Account TypeiMetadata field "beneficiary_account_type" attached to the resource. "beneficiary_name": "",Beneficiary NameiMetadata field "beneficiary_name" attached to the resource. "beneficiary_id": "",Beneficiary IdiMetadata field "beneficiary_id" attached to the resource. "description": "Supplier payout Bre-B",DescriptioniHuman-readable label or note. "money_movement_id": "mm_BrebPay5567",Money Movement IdiMoney Movement that generated this balance transaction. "tracking_key": "55671200901"Tracking KeyiBre-B tracking key for the payment. } }}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_BrebPay556Lk",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-26T12:20: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_BrebPay5567Lk",IdiUnique Cobre identifier for this resource. "type": "breb_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_FundingCOP01",Account IdiCobre Balance account id affected by the event. "amount": -3000000,AmountiAmount in cents — the last two digits are decimals. "previous_balance": 8000000,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-26T12:20:00Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-06-26T12:20:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "beneficiary_account_number": "@AcmeVendor10",Beneficiary Account NumberiMetadata field "beneficiary_account_number" attached to the resource. "beneficiary_account_type": "ch",Beneficiary Account TypeiMetadata field "beneficiary_account_type" attached to the resource. "beneficiary_name": "",Beneficiary NameiMetadata field "beneficiary_name" attached to the resource. "beneficiary_id": "",Beneficiary IdiMetadata field "beneficiary_id" attached to the resource. "description": "Supplier payout Bre-B",DescriptioniHuman-readable label or note. "money_movement_id": "mm_BrebPay5567",Money Movement IdiMoney Movement that generated this balance transaction. "tracking_key": "55671200901"Tracking KeyiBre-B tracking key for the payment. } }}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_BrebPay556Cp",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-26T12:20:09Z",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_BrebPay5567Cp",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). "account_id": "acc_FundingCOP01",Account IdiCobre Balance account id affected by the event. "amount": 3000000,AmountiAmount in cents — the last two digits are decimals. "previous_balance": 0,Previous BalanceiCobre field at "content.previous_balance" in this payload. "current_balance": 3000000,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-26T12:20:09Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-06-26T12:20:09Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "description": "Supplier payout Bre-B",DescriptioniHuman-readable label or note. "money_movement_id": "mm_BrebPay5567",Money Movement IdiMoney Movement that generated this balance transaction. "tracking_key": "55671200901"Tracking KeyiBre-B tracking key for the payment. } }}Reconcile the Bre-B Payout
Bre-B payouts are Money Movements, so reconciliation keys on mm_id + external_id. No API call — read the completion webhook and close the payout in your ledger. Fast Pay (next) reconciles the exact same way.
Mapping the webhook payload from an earlier step onto Your Ledger. No API call is made — this step closes the loop in your own system.
| Cobre field & value | Your Ledger field | |
content.external_id payout-breb-5567 |
→ | payout_reference Your own reference — locates the payout record. |
content.id mm_BrebPay5567 |
→ | cobre_mm_id Canonical Money Movement id. |
content.status.state completed |
→ | payout_status Map completed -> PAID; rejected/failed -> FAILED. |
content.amount 3000000 |
→ | paid_amount_cents |
content.updated_at 2026-06-26T12:20:09Z |
→ | paid_at |
Create the Bank-Account Counterparty
For a payout to a Colombian bank account, register a cc (checking), ch (savings) or dp (deposit) counterparty with the account number and beneficiary institution. The same counterparty serves Fast Pay and ACH.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfZGVtb19jb18wMSJ9.Dm3kP9xR2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "geo": "col",Geographyicol = Colombia. "type": "cc",Account Typeicc = Cuenta Corriente (checking), ch = Ahorros (savings), dp = Depósito. "alias": "Acme Vendor - Bank",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "counterparty_fullname": "Acme Vendor SAS",Beneficiary NameiLegal name of the account holder. "beneficiary_institution": "1007",Bank CodeiBeneficiary institution code from Cobre's platform catalog (e.g. 1007 = Bancolombia). "account_number": "1013555555",Account NumberiThe destination bank account number. "counterparty_id_type": "nit",ID TypeiIdentification type of the beneficiary. "counterparty_id_number": "9001234567"ID NumberiThe beneficiary's identification number. }}{ "id": "cp_BankVendor10",IdiUnique Cobre identifier for this resource. "geo": "col",Geographyicol = Colombia. "type": "cc",Account Typeicc = Cuenta Corriente (checking), ch = Ahorros (savings), dp = Depósito. "alias": "Acme Vendor - Bank",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "counterparty_fullname": "Acme Vendor SAS",Beneficiary NameiLegal name of the account holder. "beneficiary_institution": "1007",Bank CodeiBeneficiary institution code from Cobre's platform catalog (e.g. 1007 = Bancolombia). "account_number": "1013555555",Account NumberiThe destination bank account number. "counterparty_id_type": "nit",ID TypeiIdentification type of the beneficiary. "counterparty_id_number": "9001234567",ID NumberiThe beneficiary's identification number. "registered_account": falseRegistered AccountiCobre field at "metadata.registered_account" in this payload. }, "created_at": "2026-06-26T12:30:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-06-26T12:30:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Send the Fast Pay Payout
Create a Money Movement to the bank counterparty. Cobre routes it over Fast Pay (near real-time) when the destination bank supports it, automatically falling back to ACH (batch) otherwise — the response type tells you which rail was used ('fast_pay' here). checker_approval is false for immediate payout; set true for maker–checker (Money Movements Approval guide).
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfZGVtb19jb18wMSJ9.Dm3kP9xR2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
| idempotency | payout-fp-5568-001 |
{ "amount": 3000000,Amount (cents)iAmount in cents. 3000000 = $30,000.00 COP. "source_id": "acc_FundingCOP01",Source (funding balance)iYour funding Cobre Balance. "destination_id": "cp_BankVendor10",Destination (counterparty)iThe bank-account counterparty from the previous step. "metadata": {MetadataiCustom key-value metadata attached to the resource. "description": "Supplier payout FastPay"DescriptioniInformative description (max 40 chars). }, "external_id": "payout-fp-5568"External IDiYour payout reference, echoed in the response and webhook.}{ "id": "mm_FastPay5568",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": "Supplier payout FastPay"DescriptioniInformative description (max 40 chars). }, "creator": "cli_demo_co_01",CreatoriAPI client id that created this resource. "external_id": "payout-fp-5568",External IDiYour payout reference, echoed in the response and webhook. "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_FundingCOP01",Source (funding balance)iYour funding Cobre Balance. "destination_id": "cp_BankVendor10",Destination (counterparty)iThe bank-account counterparty from the previous step. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 3000000,Amount (cents)iAmount in cents. 3000000 = $30,000.00 COP. "created_at": "2026-06-26T12:35:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-06-26T12:35:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Webhook outcomes — Money movement
Fires when the Fast Pay payout settles. If the bank had not supported Fast Pay, type would be 'ach' and settlement D+0/D+1 — but your reconciliation logic is identical. Funds were locked with a col_cb_debit during processing — 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_FastPay5568Cmp",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-26T12:35:21Z",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_FastPay5568",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": "Supplier payout FastPay"DescriptioniHuman-readable label or note. }, "creator": "cli_demo_co_01",CreatoriAPI client id that created this resource. "external_id": "payout-fp-5568",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_FundingCOP01",Source IdiCobre id of the source account or counterparty. "destination_id": "cp_BankVendor10",Destination IdiCobre id of the destination account or counterparty. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 3000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-06-26T12:35:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-06-26T12:35:21Z"Updated AtiTimestamp of the last update (ISO 8601, UTC). }}Cobre or the rail could not process the movement. Inspect status.code and status.description — common failed codes include:
F001 | Payment processing failed — please try again. |
F002 | NSF — not sufficient funds in the designated account. |
F003 | R2P payment link expired (payins). |
F004 | Daily transaction amount limit has been reached. |
F005 | Amount exceeds the maximum allowed transaction limit. |
F098 | Could not process the money movement at this time. |
F099 | Could not process the money movement at this time. |
money_movements.status.failed| Content-Type | application/json |
{ "id": "ev_FastPay5568Cmp",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-26T12:35:21Z",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_FastPay5568",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": "Supplier payout FastPay"DescriptioniHuman-readable label or note. }, "creator": "cli_demo_co_01",CreatoriAPI client id that created this resource. "external_id": "payout-fp-5568",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_FundingCOP01",Source IdiCobre id of the source account or counterparty. "destination_id": "cp_BankVendor10",Destination IdiCobre id of the destination account or counterparty. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 3000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-06-26T12:35:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-06-26T12:35:21Z"Updated AtiTimestamp of the last update (ISO 8601, UTC). }}The bank or payment network rejected the transaction. Inspect status.code — common rejected codes include:
R000 | Transaction rejected. |
R001 | Inactive or blocked account. |
R002 | Account and identification provided do not coincide. |
R005 | Account does not exist. |
R006 | Invalid account number. |
R009 | Exceeds maximum allowed amount. |
R018 | Payment rejected due to invalid key (payouts). |
R023 | Payment cancelled by the user. |
R026 | Payment rejected due to unavailable bank services. |
R034 | Account closed. |
R085 | Bank processing error (payouts). |
money_movements.status.rejected| Content-Type | application/json |
{ "id": "ev_FastPay5568Cmp",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-26T12:35:21Z",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_FastPay5568",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": "R001",CodeiProvider or Cobre status code when the state is failed or rejected. "description": "Inactive or blocked account."DescriptioniHuman-readable label or note. }, "metadata": {MetadataiCustom key-value metadata attached to the resource. "description": "Supplier payout FastPay"DescriptioniHuman-readable label or note. }, "creator": "cli_demo_co_01",CreatoriAPI client id that created this resource. "external_id": "payout-fp-5568",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_FundingCOP01",Source IdiCobre id of the source account or counterparty. "destination_id": "cp_BankVendor10",Destination IdiCobre id of the destination account or counterparty. "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 3000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-06-26T12:35:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-06-26T12:35:21Z"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_FastPay556Lk",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-26T12:35: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_FastPay5568Lk",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_FundingCOP01",Account IdiCobre Balance account id affected by the event. "amount": -3000000,AmountiAmount in cents — the last two digits are decimals. "previous_balance": 8000000,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-26T12:35:00Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-06-26T12:35:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "money_movement_id": "mm_FastPay5568",Money Movement IdiMoney Movement that generated this balance transaction. "description": "Supplier payout FastPay",DescriptioniHuman-readable label or note. "beneficiary_account_number": "",Beneficiary Account NumberiMetadata field "beneficiary_account_number" attached to the resource. "tracking_key": ""Tracking KeyiBre-B tracking key for the payment. } }}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_FastPay556Lk",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-26T12:35: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_FastPay5568Lk",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_FundingCOP01",Account IdiCobre Balance account id affected by the event. "amount": -3000000,AmountiAmount in cents — the last two digits are decimals. "previous_balance": 8000000,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-26T12:35:00Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-06-26T12:35:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "money_movement_id": "mm_FastPay5568",Money Movement IdiMoney Movement that generated this balance transaction. "description": "Supplier payout FastPay",DescriptioniHuman-readable label or note. "beneficiary_account_number": "",Beneficiary Account NumberiMetadata field "beneficiary_account_number" attached to the resource. "tracking_key": ""Tracking KeyiBre-B tracking key for the payment. } }}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_FastPay556Cp",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-26T12:35:21Z",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_FastPay5568Cp",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_FundingCOP01",Account IdiCobre Balance account id affected by the event. "amount": 3000000,AmountiAmount in cents — the last two digits are decimals. "previous_balance": 0,Previous BalanceiCobre field at "content.previous_balance" in this payload. "current_balance": 3000000,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-26T12:35:21Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-06-26T12:35:21Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "money_movement_id": "mm_FastPay5568",Money Movement IdiMoney Movement that generated this balance transaction. "description": "Supplier payout FastPay",DescriptioniHuman-readable label or note. "tracking_key": "",Tracking KeyiBre-B tracking key for the payment. "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 the Fast Pay Payout
Identical reconciliation to Bre-B: key on mm_id + external_id from the completion webhook. The response/webhook 'type' field (fast_pay vs ach) is the only thing that differs between the two bank rails.
Mapping the webhook payload from an earlier step onto Your Ledger. No API call is made — this step closes the loop in your own system.
| Cobre field & value | Your Ledger field | |
content.external_id payout-fp-5568 |
→ | payout_reference |
content.id mm_FastPay5568 |
→ | cobre_mm_id |
content.type fast_pay |
→ | rail_used fast_pay or ach — the rail Cobre selected. |
content.status.state completed |
→ | payout_status |
content.amount 3000000 |
→ | paid_amount_cents |