Authenticate
Every Cobre API call carries a short-lived Bearer token (~20 minutes). Exchange API user credentials once and attach the token to every subsequent request.
| Content-Type | application/json |
{ "user_id": "cli_psp_cn_mx01",User IDiAPI client user id used to obtain the access token. "secret": "sk_live_PspMx9xK2v"SecretiAPI client secret paired with user_id for authentication.}{ "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcHNwX25fbXgwMSJ9.MxPsp9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ",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 balance credits/debits, Money Movement status (including SPEI returned), and Cross-Border lifecycle events. Verify HMAC-SHA256 signatures on every delivery.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcHNwX25fbXgwMSJ9.MxPsp9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "url": "https://psp.example.mx/webhooks/cobre",Notification URLiHTTPS URL used by this resource (e.g. webhook endpoint). "description": "China merchant treasury lifecycle (Mexico)",DescriptioniHuman-readable label or note. "events": [EventsiList of webhook event types this subscription listens to. "accounts.balance.credit", "accounts.balance.debit", "money_movements.status.completed", "money_movements.status.failed", "money_movements.status.rejected", "money_movements.status.returned", "cross_border_money_movements.status.completed", "cross_border_money_movements.status.failed", "cross_border_money_movements.status.rejected" ], "event_signature_key": "WHsig_PspMx01"Signature KeyiSecret you set on the subscription; Cobre uses it to HMAC-SHA256-sign deliveries (verify via event-signature + event-timestamp headers).}{ "id": "sub_PspMxTre01",IdiUnique Cobre identifier for this resource. "url": "https://psp.example.mx/webhooks/cobre",Notification URLiHTTPS URL used by this resource (e.g. webhook endpoint). "description": "China merchant treasury lifecycle (Mexico)",DescriptioniHuman-readable label or note. "events": [EventsiList of webhook event types this subscription listens to. "accounts.balance.credit", "accounts.balance.debit", "money_movements.status.completed", "money_movements.status.failed", "money_movements.status.rejected", "money_movements.status.returned", "cross_border_money_movements.status.completed", "cross_border_money_movements.status.failed", "cross_border_money_movements.status.rejected" ], "event_signature_key": "******Cn01",Signature KeyiSecret you set on the subscription; Cobre uses it to HMAC-SHA256-sign deliveries (verify via event-signature + event-timestamp headers). "created_at": "2026-07-06T10:00:00Z"Created AtiTimestamp when the resource was created (ISO 8601, UTC).}Create MXN Payout Cobre Balance
Create the Mexican MXN Payout balance first (primary account). It must exist before the Payin balance — Payin accounts reference it via metadata.primary_account for automatic sweeps. Also the source for local payouts and Cross-Border FX.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcHNwX25fbXgwMSJ9.MxPsp9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "provider_id": "pr_mex_cobre3",ProvideriCobre field at "provider_id" in this payload. "action": "create",ActioniCobre field at "action" in this payload. "alias": "PSP MXN Payout"AliasiDisplay name that helps identify it and clarify its purpose.}{ "id": "acc_PspMxnPayout",IdiUnique Cobre identifier for this resource. "provider_id": "pr_mex_cobre3",ProvideriCobre field at "provider_id" in this payload. "provider_name": "Cobre Balance Mexico",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": "PSP MXN Payout",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "available_services": [Available ServicesiCobre field at "metadata.available_services" in this payload. "mm_push_from_account", "account_transactions" ] }, "account_number": "",Account NumberiBank account or CLABE number for the counterparty. "account_type": "clabe",Account TypeiCobre field at "account_type" in this payload. "obtained_balance": 0,Obtained BalanceiCobre field at "obtained_balance" in this payload. "geo": "mex",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "tags": [],TagsiCobre field at "tags" in this payload. "currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn). "created_at": "2026-07-06T10:05:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-06T10:05:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Create MXN Payin Cobre Balance
Create the Mexican MXN Payin balance (secondary account) after the Payout balance. Set metadata.primary_account to acc_PspMxnPayout so inbound credits auto-sweep. If the automatic sweep does not occur, move funds manually as described in the Internal Transfer stage.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcHNwX25fbXgwMSJ9.MxPsp9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "provider_id": "pr_mex_cobre3",ProvideriCobre field at "provider_id" in this payload. "action": "create",ActioniCobre field at "action" in this payload. "alias": "PSP MXN Payin",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "primary_account": "acc_PspMxnPayout"Primary accountiPayout Cobre Balance (acc_PspMxnPayout) — every Payin credit auto-sweeps here. }}{ "id": "acc_PspMxnPayin",IdiUnique Cobre identifier for this resource. "provider_id": "pr_mex_cobre3",ProvideriCobre field at "provider_id" in this payload. "provider_name": "Cobre Balance Mexico",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": "PSP MXN Payin",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "available_services": [Available ServicesiCobre field at "metadata.available_services" in this payload. "mm_push_from_account", "account_transactions" ], "primary_account": "acc_PspMxnPayout"Primary accountiPayout Cobre Balance (acc_PspMxnPayout) — every Payin credit auto-sweeps here. }, "account_number": "",Account NumberiBank account or CLABE number for the counterparty. "account_type": "clabe",Account TypeiCobre field at "account_type" in this payload. "obtained_balance": 0,Obtained BalanceiCobre field at "obtained_balance" in this payload. "geo": "mex",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "tags": [],TagsiCobre field at "tags" in this payload. "currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn). "created_at": "2026-07-06T10:05:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-06T10:05:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Create USD Global Cobre Balance
Provision the USD Global Cobre Balance — destination of MXN→USD Cross-Border conversions.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcHNwX25fbXgwMSJ9.MxPsp9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "provider_id": "pr_global_cobre",ProvideriCobre field at "provider_id" in this payload. "action": "create",ActioniCobre field at "action" in this payload. "metadata": {MetadataiCustom key-value metadata attached to the resource. "currency": "usd"CurrencyiISO currency code (e.g. cop, mxn). }, "alias": "PSP USD Global Treasury"AliasiDisplay name that helps identify it and clarify its purpose.}{ "id": "acc_PspUsdGlobalMx",IdiUnique Cobre identifier for this resource. "provider_id": "pr_global_cobre",ProvideriCobre field at "provider_id" in this payload. "provider_name": "Cobre Balance Global",Provider NameiCobre field at "provider_name" in this payload. "connectivity": {ConnectivityiConnection/registration status for keys or accounts. "status": "connected",StatusiLifecycle status object for the resource or movement. "description": ""DescriptioniHuman-readable label or note. }, "alias": "PSP USD Global Treasury",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "available_services": [Available ServicesiCobre field at "metadata.available_services" in this payload. "mm_push_from_account" ], "currency": "usd"CurrencyiISO currency code (e.g. cop, mxn). }, "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": "global",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "tags": [],TagsiCobre field at "tags" in this payload. "currency": "usd",CurrencyiISO currency code (e.g. cop, mxn). "created_at": "2026-07-06T10:06:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-06T10:06:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Create Merchant Virtual CLABE Reference
Create a Virtual CLABE account reference on the MXN Payin balance for China merchant CN01. Inbound SPEI transfers credit acc_PspMxnPayin — reconcile using metadata.account_reference for merchant attribution.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcHNwX25fbXgwMSJ9.MxPsp9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "source_id": "acc_PspMxnPayin",MXN Payin BalanceiCobre id of the source account or counterparty. "type": "virtual_clabe_accounts",Reference typeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "alias": "Merchant CN01 Virtual CLABE"AliasiDisplay name that helps identify it and clarify its purpose.}{ "id": "ref_MerchCnMx01",IdiUnique Cobre identifier for this resource. "alias": "Merchant CN01 Virtual CLABE",AliasiDisplay name that helps identify it and clarify its purpose. "type": "virtual_clabe_accounts",Reference typeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "value": "70301105231100001",ValueiCobre field at "value" in this payload. "source_id": "acc_PspMxnPayin",MXN Payin BalanceiCobre id of the source account or counterparty. "geo": "mex",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "connectivity": {ConnectivityiConnection/registration status for keys or accounts. "status": "enabled",StatusiLifecycle status object for the resource or movement. "description": ""DescriptioniHuman-readable label or note. }, "metadata": {},MetadataiCustom key-value metadata attached to the resource. "created_at": "2026-07-06T11:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-06T11:00:05Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Merchant Virtual CLABE Credit
The merchant sends MXN via SPEI to their Virtual CLABE. Cobre credits acc_PspMxnPayin with spei_credit — reconcile using metadata.account_reference 70301105231100001 (ref_MerchCnMx01).
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcHNwX25fbXgwMSJ9.MxPsp9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
{ "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_MerchMx001",Transaction IDiUnique Cobre identifier for this resource. "type": "spei_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_PspMxnPayin",Account IdiCobre Balance account id affected by the event. "amount": 50000000,Amount creditediAmount in cents — the last two digits are decimals. "previous_balance": 100000000,Previous BalanceiCobre field at "contents.0.previous_balance" in this payload. "current_balance": 150000000,Current BalanceiCobre field at "contents.0.current_balance" in this payload. "currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn). "credit_debit_type": "credit",Credit Debit Typeicredit = funds in; debit = funds out. "transaction_date": "2026-07-06T13:10:00Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-07-06T13:10:01Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "reference": "1234567",ReferenceiPayment reference echoed in metadata for reconciliation. "sender_name": "Merchant CN01 SA de CV",Sender NameiMetadata field "sender_name" attached to the resource. "sender_clabe": "012180001234567890",Sender ClabeiMetadata field "sender_clabe" attached to the resource. "tracking_key": "20260706131000001",Tracking KeyiBre-B tracking key for the payment. "description": "SPEI merchant funding",DescriptioniHuman-readable label or note. "account_reference": "70301105231100001"Account referenceiTransfer-In reference number used to reconcile incoming deposits. } } ]}Webhook delivered
accounts.balance.creditFires when the Virtual CLABE credit posts on acc_PspMxnPayin. Map metadata.account_reference to merchant CN01.
| Content-Type | application/json |
{ "id": "ev_MerchMxTi001",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-06T13:10:01Z",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_MerchMx001",IdiUnique Cobre identifier for this resource. "type": "spei_credit",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "amount": 50000000,AmountiAmount in cents — the last two digits are decimals. "currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn). "date": "2026-07-06T13:10:00Z",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. "reference": "1234567",ReferenceiPayment reference echoed in metadata for reconciliation. "sender_name": "Merchant CN01 SA de CV",Sender NameiMetadata field "sender_name" attached to the resource. "sender_clabe": "012180001234567890",Sender ClabeiMetadata field "sender_clabe" attached to the resource. "tracking_key": "20260706131000001",Tracking KeyiBre-B tracking key for the payment. "description": "SPEI merchant funding",DescriptioniHuman-readable label or note. "account_reference": "70301105231100001"Account ReferenceiTransfer-In reference number used to reconcile incoming deposits. }, "account_id": "acc_PspMxnPayin",Account IdiCobre Balance account id affected by the event. "previous_balance": 100000000,Previous BalanceiCobre field at "content.previous_balance" in this payload. "current_balance": 150000000,Current BalanceiCobre field at "content.current_balance" in this payload. "credit_debit_type": "credit"Credit Debit Typeicredit = funds in; debit = funds out. }}Reconcile Virtual CLABE Credit
Match the accounts.balance.credit webhook to your treasury ledger using metadata.account_reference for merchant attribution. No Money Movement exists — reconciliation is transaction-level on acc_PspMxnPayin.
Mapping the webhook payload from an earlier step onto Treasury ledger. No API call is made — this step closes the loop in your own system.
| Cobre field & value | Treasury ledger field | |
content.metadata.account_reference 70301105231100001 |
→ | merchant_virtual_clabe_ref Primary join key — maps ref_MerchCnMx01 (70301105231100001) to merchant CN01 available MXN. |
content.id trx_MerchMx001 |
→ | cobre_transaction_id |
content.amount 50000000 |
→ | credited_amount_cents MXN credited to acc_PspMxnPayin (50000000 = $500,000.00 MXN). |
content.account_id acc_PspMxnPayin |
→ | mxn_payin_balance_id |
content.metadata.tracking_key 20260706131000001 |
→ | bank_tracking_key Bank network tracking key — store for audit alongside metadata.reference. |
Manual transfer: Payin → Payout
Account linkage reliably auto-sweeps Payin credits to Payout, but it can occasionally fail. When account linkage does not auto-sweep, manually move MXN from acc_PspMxnPayin to acc_PspMxnPayout with POST /money_movements (Cobre Balance → Cobre Balance). The same endpoint moves funds in reverse (Payout → Payin) by swapping source_id and destination_id. If the automatic sweep does not occur, move funds manually as described in the Internal Transfer stage.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcHNwX25fbXgwMSJ9.MxPsp9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
| idempotency | psp-internal-sweep-cn001 |
{ "amount": 150000000,Amount (MXN cents)iAmount in cents — the last two digits are decimals. "source_id": "acc_PspMxnPayin",MXN Payin balanceiCobre id of the source account or counterparty. "destination_id": "acc_PspMxnPayout",MXN Payout balanceiCobre id of the destination account or counterparty. "metadata": {MetadataiCustom key-value metadata attached to the resource. "description": "Manual Payin to Payout transfer"DescriptioniHuman-readable label or note. }, "external_id": "psp_internal_sweep_001",External IDiYour own reference echoed by Cobre for reconciliation. "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": "mm_MxnSweep01",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": "Manual Payin to Payout transfer"DescriptioniHuman-readable label or note. }, "creator": "cli_psp_cn_mx01",CreatoriAPI client id that created this resource. "external_id": "psp_internal_sweep_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": "spei",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "geo": "mex",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "source_id": "acc_PspMxnPayin",MXN Payin balanceiCobre id of the source account or counterparty. "destination_id": "acc_PspMxnPayout",MXN Payout balanceiCobre id of the destination account or counterparty. "currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn). "amount": 150000000,Amount (MXN cents)iAmount in cents — the last two digits are decimals. "created_at": "2026-07-07T12:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-07T12:00:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Webhook outcomes — Money movement
Manual transfer completed — MXN debited from acc_PspMxnPayin and credited to acc_PspMxnPayout. Use when automatic linkage sweep did not run.
Handle each terminal state in your webhook listener. Status codes reference the <a href="https://docs.cobre.com/money-movement-statuses-2032280m0" target="_blank" rel="noopener">Money Movement Statuses</a> guide.
Funds settled successfully. No error code is set (NA in the status guide). Use this webhook to mark the payment as paid in your system.
money_movements.status.completed| Content-Type | application/json |
{ "id": "ev_MxnSweepCmp",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-07T12:02: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": "mm_MxnSweep01",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": "Manual Payin to Payout transfer"DescriptioniHuman-readable label or note. }, "creator": "cli_psp_cn_mx01",CreatoriAPI client id that created this resource. "external_id": "psp_internal_sweep_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": "spei",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "geo": "mex",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "source_id": "acc_PspMxnPayin",Source IdiCobre id of the source account or counterparty. "destination_id": "acc_PspMxnPayout",Destination IdiCobre id of the destination account or counterparty. "currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn). "amount": 150000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-07T12:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-07T12:02:00Z"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_MxnSweepCmp",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-07T12:02: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": "mm_MxnSweep01",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": "Manual Payin to Payout transfer"DescriptioniHuman-readable label or note. }, "creator": "cli_psp_cn_mx01",CreatoriAPI client id that created this resource. "external_id": "psp_internal_sweep_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": "spei",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "geo": "mex",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "source_id": "acc_PspMxnPayin",Source IdiCobre id of the source account or counterparty. "destination_id": "acc_PspMxnPayout",Destination IdiCobre id of the destination account or counterparty. "currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn). "amount": 150000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-07T12:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-07T12:02:00Z"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_MxnSweepCmp",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-07T12:02: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": "mm_MxnSweep01",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": "Manual Payin to Payout transfer"DescriptioniHuman-readable label or note. }, "creator": "cli_psp_cn_mx01",CreatoriAPI client id that created this resource. "external_id": "psp_internal_sweep_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": "spei",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "geo": "mex",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "source_id": "acc_PspMxnPayin",Source IdiCobre id of the source account or counterparty. "destination_id": "acc_PspMxnPayout",Destination IdiCobre id of the destination account or counterparty. "currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn). "amount": 150000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-07T12:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-07T12:02:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC). }}Reconcile manual Payin → Payout transfer
Match the completion webhook on external_id psp_internal_sweep_001. Cross-check MXN debit on acc_PspMxnPayin and credit on acc_PspMxnPayout. Only needed when automatic linkage sweep did not occur.
Mapping the webhook payload from an earlier step onto Treasury ledger. No API call is made — this step closes the loop in your own system.
| Cobre field & value | Treasury ledger field | |
content.external_id psp_internal_sweep_001 |
→ | sweep_reference |
content.id mm_MxnSweep01 |
→ | cobre_mm_id |
content.amount 150000000 |
→ | swept_amount_cents |
content.status.state completed |
→ | sweep_status |
Create Local CLABE Beneficiary
Register the local vendor as a Mexico CLABE counterparty for SPEI payouts from the MXN Payout balance.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcHNwX25fbXgwMSJ9.MxPsp9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "geo": "mex",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "type": "clabe",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "alias": "Local vendor - Merchant CN01",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "counterparty_fullname": "Proveedor Local SA de CV",Beneficiary nameiLegal or display name of the counterparty beneficiary. "account_number": "012180009876543210",CLABEiBank account or CLABE number for the counterparty. "counterparty_id_type": "rfc",ID typeiType of identification document for the counterparty (e.g. nit, cc, rfc). "counterparty_id_number": "PRO990101ABC"RFCiIdentification number for the counterparty. }}{ "id": "cp_MxVendor01",IdiUnique Cobre identifier for this resource. "geo": "mex",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "type": "clabe",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "alias": "Local vendor - Merchant CN01",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "counterparty_fullname": "Proveedor Local SA de CV",Beneficiary nameiLegal or display name of the counterparty beneficiary. "account_number": "012180009876543210",CLABEiBank account or CLABE number for the counterparty. "counterparty_id_type": "rfc",ID typeiType of identification document for the counterparty (e.g. nit, cc, rfc). "counterparty_id_number": "PRO990101ABC",RFCiIdentification number for the counterparty. "registered_account": falseRegistered AccountiCobre field at "metadata.registered_account" in this payload. }, "created_at": "2026-07-07T12:10:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-07T12:10:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Pay via SPEI
Create a Money Movement from acc_PspMxnPayout to the CLABE counterparty over SPEI. metadata.reference must be numeric (1–7 digits).
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcHNwX25fbXgwMSJ9.MxPsp9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
| idempotency | psp-local-payout-cn001 |
{ "amount": 30000000,Amount (MXN cents)iAmount in cents — the last two digits are decimals. "source_id": "acc_PspMxnPayout",MXN Payout balanceiCobre id of the source account or counterparty. "destination_id": "cp_MxVendor01",BeneficiaryiCobre id of the destination account or counterparty. "metadata": {MetadataiCustom key-value metadata attached to the resource. "description": "Local vendor payout",DescriptioniHuman-readable label or note. "reference": "7654321"SPEI referenceiPayment reference echoed in metadata for reconciliation. }, "external_id": "psp_local_payout_001",External IDiYour own reference echoed by Cobre for reconciliation. "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": "mm_MxnLocalPayout01",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": "Local vendor payout",DescriptioniHuman-readable label or note. "reference": "7654321"SPEI referenceiPayment reference echoed in metadata for reconciliation. }, "creator": "cli_psp_cn_mx01",CreatoriAPI client id that created this resource. "external_id": "psp_local_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": "spei",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "geo": "mex",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "source_id": "acc_PspMxnPayout",MXN Payout balanceiCobre id of the source account or counterparty. "destination_id": "cp_MxVendor01",BeneficiaryiCobre id of the destination account or counterparty. "currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn). "amount": 30000000,Amount (MXN cents)iAmount in cents — the last two digits are decimals. "created_at": "2026-07-07T12:15:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-07T12:15:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Webhook outcomes — Money movement
Local payout completed — MXN debited from acc_PspMxnPayout. Reconcile on external_id psp_local_payout_001.
Handle each terminal state in your webhook listener. Status codes reference the <a href="https://docs.cobre.com/money-movement-statuses-2032280m0" target="_blank" rel="noopener">Money Movement Statuses</a> guide.
Funds settled successfully. No error code is set (NA in the status guide). Use this webhook to mark the payment as paid in your system.
money_movements.status.completed| Content-Type | application/json |
{ "id": "ev_MxnLocalPayoutCmp",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-07T12:17: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": "mm_MxnLocalPayout01",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": "Local vendor payout",DescriptioniHuman-readable label or note. "reference": "7654321"ReferenceiPayment reference echoed in metadata for reconciliation. }, "creator": "cli_psp_cn_mx01",CreatoriAPI client id that created this resource. "external_id": "psp_local_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": "spei",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "geo": "mex",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "source_id": "acc_PspMxnPayout",Source IdiCobre id of the source account or counterparty. "destination_id": "cp_MxVendor01",Destination IdiCobre id of the destination account or counterparty. "currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn). "amount": 30000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-07T12:15:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-07T12:17:00Z"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_MxnLocalPayoutCmp",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-07T12:17: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": "mm_MxnLocalPayout01",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": "Local vendor payout",DescriptioniHuman-readable label or note. "reference": "7654321"ReferenceiPayment reference echoed in metadata for reconciliation. }, "creator": "cli_psp_cn_mx01",CreatoriAPI client id that created this resource. "external_id": "psp_local_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": "spei",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "geo": "mex",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "source_id": "acc_PspMxnPayout",Source IdiCobre id of the source account or counterparty. "destination_id": "cp_MxVendor01",Destination IdiCobre id of the destination account or counterparty. "currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn). "amount": 30000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-07T12:15:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-07T12:17:00Z"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_MxnLocalPayoutCmp",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-07T12:17: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": "mm_MxnLocalPayout01",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": "Local vendor payout",DescriptioniHuman-readable label or note. "reference": "7654321"ReferenceiPayment reference echoed in metadata for reconciliation. }, "creator": "cli_psp_cn_mx01",CreatoriAPI client id that created this resource. "external_id": "psp_local_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": "spei",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "geo": "mex",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "source_id": "acc_PspMxnPayout",Source IdiCobre id of the source account or counterparty. "destination_id": "cp_MxVendor01",Destination IdiCobre id of the destination account or counterparty. "currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn). "amount": 30000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-07T12:15:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-07T12:17:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC). }}Reconcile SPEI Payout
Match the completion webhook on external_id psp_local_payout_001. Note content.type (spei vs ach) for the rail Cobre selected.
Mapping the webhook payload from an earlier step onto Treasury ledger. No API call is made — this step closes the loop in your own system.
| Cobre field & value | Treasury ledger field | |
content.external_id psp_local_payout_001 |
→ | payout_reference |
content.id mm_MxnLocalPayout01 |
→ | cobre_mm_id |
content.amount 30000000 |
→ | paid_amount_cents |
content.type spei |
→ | payout_rail |
content.status.state completed |
→ | payout_status |
Request MXN/USD Quote
Lock a short-lived MXN/USD static quote before converting merchant treasury MXN to USD. Confirm corridor availability and quote direction with your KAM — quotes expire in ~1 minute.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcHNwX25fbXgwMSJ9.MxPsp9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "currency_pair": "mxn/usd",Currency pairiCobre field at "currency_pair" in this payload. "source_amount": 120000000,Source amount (MXN cents)iCobre field at "source_amount" in this payload. "type": "static_quote"Quote typeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins).}{ "id": "fxq_PspMx001",IdiUnique Cobre identifier for this resource. "type": "static_quote",Quote typeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "currency_pair": "mxn/usd",Currency pairiCobre field at "currency_pair" in this payload. "source_amount": 120000000,Source amount (MXN cents)iCobre field at "source_amount" in this payload. "fees_breakdown": {Fees BreakdowniCobre field at "fees_breakdown" in this payload. "spread": 1.2SpreadiCobre field at "fees_breakdown.spread" in this payload. }, "fx_rate": 40,Fx RateiCobre field at "fx_rate" in this payload. "destination_amount": 30000,Destination AmountiCobre field at "destination_amount" in this payload. "quota_limit": 1000000000,Quota LimitiCobre field at "quota_limit" in this payload. "remaining_quota": 999625000,Remaining QuotaiCobre field at "remaining_quota" in this payload. "created_at": "2026-07-06T14:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "valid_until": "2026-07-06T14:01:00Z",Valid UntiliCobre field at "valid_until" in this payload. "last_quote": true,Last QuoteiCobre field at "last_quote" in this payload. "off_market": falseOff MarketiCobre field at "off_market" in this payload.}Execute MXN→USD Cross-Border
Convert merchant treasury MXN from acc_PspMxnPayout to USD on acc_PspUsdGlobalMx using the locked quote. Reuse the idempotency header on retries (valid 24h).
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcHNwX25fbXgwMSJ9.MxPsp9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
| idempotency | psp_cbmm_cn001 |
{ "source_id": "acc_PspMxnPayout",MXN Payout balanceiCobre id of the source account or counterparty. "destination_id": "acc_PspUsdGlobalMx",USD GlobaliCobre id of the destination account or counterparty. "forex_quote_id": "fxq_PspMx001",FX Quote IDiCobre field at "forex_quote_id" in this payload. "metadata": {MetadataiCustom key-value metadata attached to the resource. "destination_description": "Merchant CN01 treasury FX"DescriptioniCobre field at "metadata.destination_description" in this payload. }, "external_id": "psp_fx_merchant001",External IDiYour own reference echoed by Cobre for reconciliation. "currency": "mxn/usd"CurrencyiISO currency code (e.g. cop, mxn).}{ "id": "mm_CbmmPspMx001",IdiUnique Cobre identifier for this resource. "creator": "cli_psp_cn_mx01",CreatoriAPI client id that created 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. "destination_description": "Merchant CN01 treasury FX",DescriptioniCobre field at "metadata.destination_description" in this payload. "forex_quote_id": "fxq_PspMx001",Forex Quote IdiCobre field at "metadata.forex_quote_id" in this payload. "forex_quote": {Forex QuoteiCobre field at "metadata.forex_quote" in this payload. "type": "static_quote",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "currency_pair": "mxn/usd",Currency PairiCobre field at "metadata.forex_quote.currency_pair" in this payload. "source_amount": 120000000,Source AmountiCobre field at "metadata.forex_quote.source_amount" in this payload. "fees_breakdown": {Fees BreakdowniCobre field at "metadata.forex_quote.fees_breakdown" in this payload. "spread": 1.2SpreadiCobre field at "metadata.forex_quote.fees_breakdown.spread" in this payload. }, "fx_rate": 40,Fx RateiCobre field at "metadata.forex_quote.fx_rate" in this payload. "destination_amount": 30000,Destination AmountiCobre field at "metadata.forex_quote.destination_amount" in this payload. "quota_limit": 1000000000,Quota LimitiCobre field at "metadata.forex_quote.quota_limit" in this payload. "remaining_quota": 999625000,Remaining QuotaiCobre field at "metadata.forex_quote.remaining_quota" in this payload. "created_at": "2026-07-06T14:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "valid_until": "2026-07-06T14:01:00Z",Valid UntiliCobre field at "metadata.forex_quote.valid_until" in this payload. "last_quote": true,Last QuoteiCobre field at "metadata.forex_quote.last_quote" in this payload. "off_market": falseOff MarketiCobre field at "metadata.forex_quote.off_market" in this payload. } }, "external_id": "psp_fx_merchant001",External IDiYour own reference echoed by Cobre for reconciliation. "type": "cross_border",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "source_id": "acc_PspMxnPayout",MXN Payout balanceiCobre id of the source account or counterparty. "destination_id": "acc_PspUsdGlobalMx",USD GlobaliCobre id of the destination account or counterparty. "currency": "mxn/usd",CurrencyiISO currency code (e.g. cop, mxn). "amount": 120000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-06T14:01:10Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-06T14:01:10Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Webhook outcomes — Cross-border money movement
MXN→USD conversion completed — USD is now on acc_PspUsdGlobalMx. Reconcile this FX leg on your treasury ledger.
Handle each terminal state in your webhook listener. Status codes reference the <a href="https://docs.cobre.com/money-movement-statuses-2032280m0" target="_blank" rel="noopener">Money Movement Statuses</a> guide.
Funds settled successfully. No error code is set (NA in the status guide). Use this webhook to mark the payment as paid in your system.
cross_border_money_movements.status.completed| Content-Type | application/json |
{ "id": "ev_CbmmPspMx001Cmp",IdiUnique Cobre identifier for this resource. "event_key": "cross_border_money_movements.status.completed",Event KeyiWebhook subscription key (e.g. money_movements.status.completed). "created_at": "2026-07-06T14:01: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_CbmmPspMx001",IdiUnique Cobre identifier for this resource. "creator": "cli_psp_cn_mx01",CreatoriAPI client id that created 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. "destination_description": "Merchant CN01 treasury FX",Destination DescriptioniMetadata field "destination_description" attached to the resource. "forex_quote_id": "fxq_PspMx001",Forex Quote IdiMetadata field "forex_quote_id" attached to the resource. "forex_quote": {Forex QuoteiMetadata field "forex_quote" attached to the resource. "type": "static_quote",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "currency_pair": "mxn/usd",Currency PairiMetadata field "forex_quote.currency_pair" attached to the resource. "source_amount": 120000000,Source AmountiMetadata field "forex_quote.source_amount" attached to the resource. "fees_breakdown": {Fees BreakdowniMetadata field "forex_quote.fees_breakdown" attached to the resource. "spread": 1.2SpreadiMetadata field "forex_quote.fees_breakdown.spread" attached to the resource. }, "fx_rate": 40,Fx RateiMetadata field "forex_quote.fx_rate" attached to the resource. "destination_amount": 30000,Destination AmountiMetadata field "forex_quote.destination_amount" attached to the resource. "quota_limit": 1000000000,Quota LimitiMetadata field "forex_quote.quota_limit" attached to the resource. "remaining_quota": 999625000,Remaining QuotaiMetadata field "forex_quote.remaining_quota" attached to the resource. "created_at": "2026-07-06T14:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "valid_until": "2026-07-06T14:01:00Z",Valid UntiliMetadata field "forex_quote.valid_until" attached to the resource. "last_quote": true,Last QuoteiMetadata field "forex_quote.last_quote" attached to the resource. "off_market": falseOff MarketiMetadata field "forex_quote.off_market" attached to the resource. } }, "external_id": "psp_fx_merchant001",External IdiYour own reference echoed by Cobre for reconciliation. "type": "cross_border",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "source_id": "acc_PspMxnPayout",Source IdiCobre id of the source account or counterparty. "destination_id": "acc_PspUsdGlobalMx",Destination IdiCobre id of the destination account or counterparty. "currency": "mxn/usd",CurrencyiISO currency code (e.g. cop, mxn). "amount": 120000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-06T14:01:10Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-06T14:01: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 — 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. |
cross_border_money_movements.status.failed| Content-Type | application/json |
{ "id": "ev_CbmmPspMx001Cmp",IdiUnique Cobre identifier for this resource. "event_key": "cross_border_money_movements.status.failed",Event KeyiWebhook subscription key (e.g. money_movements.status.completed). "created_at": "2026-07-06T14:01: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_CbmmPspMx001",IdiUnique Cobre identifier for this resource. "creator": "cli_psp_cn_mx01",CreatoriAPI client id that created 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. "destination_description": "Merchant CN01 treasury FX",Destination DescriptioniMetadata field "destination_description" attached to the resource. "forex_quote_id": "fxq_PspMx001",Forex Quote IdiMetadata field "forex_quote_id" attached to the resource. "forex_quote": {Forex QuoteiMetadata field "forex_quote" attached to the resource. "type": "static_quote",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "currency_pair": "mxn/usd",Currency PairiMetadata field "forex_quote.currency_pair" attached to the resource. "source_amount": 120000000,Source AmountiMetadata field "forex_quote.source_amount" attached to the resource. "fees_breakdown": {Fees BreakdowniMetadata field "forex_quote.fees_breakdown" attached to the resource. "spread": 1.2SpreadiMetadata field "forex_quote.fees_breakdown.spread" attached to the resource. }, "fx_rate": 40,Fx RateiMetadata field "forex_quote.fx_rate" attached to the resource. "destination_amount": 30000,Destination AmountiMetadata field "forex_quote.destination_amount" attached to the resource. "quota_limit": 1000000000,Quota LimitiMetadata field "forex_quote.quota_limit" attached to the resource. "remaining_quota": 999625000,Remaining QuotaiMetadata field "forex_quote.remaining_quota" attached to the resource. "created_at": "2026-07-06T14:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "valid_until": "2026-07-06T14:01:00Z",Valid UntiliMetadata field "forex_quote.valid_until" attached to the resource. "last_quote": true,Last QuoteiMetadata field "forex_quote.last_quote" attached to the resource. "off_market": falseOff MarketiMetadata field "forex_quote.off_market" attached to the resource. } }, "external_id": "psp_fx_merchant001",External IdiYour own reference echoed by Cobre for reconciliation. "type": "cross_border",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "source_id": "acc_PspMxnPayout",Source IdiCobre id of the source account or counterparty. "destination_id": "acc_PspUsdGlobalMx",Destination IdiCobre id of the destination account or counterparty. "currency": "mxn/usd",CurrencyiISO currency code (e.g. cop, mxn). "amount": 120000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-06T14:01:10Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-06T14:01:45Z"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). |
cross_border_money_movements.status.rejected| Content-Type | application/json |
{ "id": "ev_CbmmPspMx001Cmp",IdiUnique Cobre identifier for this resource. "event_key": "cross_border_money_movements.status.rejected",Event KeyiWebhook subscription key (e.g. money_movements.status.completed). "created_at": "2026-07-06T14:01: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_CbmmPspMx001",IdiUnique Cobre identifier for this resource. "creator": "cli_psp_cn_mx01",CreatoriAPI client id that created 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. "destination_description": "Merchant CN01 treasury FX",Destination DescriptioniMetadata field "destination_description" attached to the resource. "forex_quote_id": "fxq_PspMx001",Forex Quote IdiMetadata field "forex_quote_id" attached to the resource. "forex_quote": {Forex QuoteiMetadata field "forex_quote" attached to the resource. "type": "static_quote",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "currency_pair": "mxn/usd",Currency PairiMetadata field "forex_quote.currency_pair" attached to the resource. "source_amount": 120000000,Source AmountiMetadata field "forex_quote.source_amount" attached to the resource. "fees_breakdown": {Fees BreakdowniMetadata field "forex_quote.fees_breakdown" attached to the resource. "spread": 1.2SpreadiMetadata field "forex_quote.fees_breakdown.spread" attached to the resource. }, "fx_rate": 40,Fx RateiMetadata field "forex_quote.fx_rate" attached to the resource. "destination_amount": 30000,Destination AmountiMetadata field "forex_quote.destination_amount" attached to the resource. "quota_limit": 1000000000,Quota LimitiMetadata field "forex_quote.quota_limit" attached to the resource. "remaining_quota": 999625000,Remaining QuotaiMetadata field "forex_quote.remaining_quota" attached to the resource. "created_at": "2026-07-06T14:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "valid_until": "2026-07-06T14:01:00Z",Valid UntiliMetadata field "forex_quote.valid_until" attached to the resource. "last_quote": true,Last QuoteiMetadata field "forex_quote.last_quote" attached to the resource. "off_market": falseOff MarketiMetadata field "forex_quote.off_market" attached to the resource. } }, "external_id": "psp_fx_merchant001",External IdiYour own reference echoed by Cobre for reconciliation. "type": "cross_border",TypeiResource or movement type as defined by the Cobre API for this rail/product (e.g. breb_credit for Cobre Key payins). "source_id": "acc_PspMxnPayout",Source IdiCobre id of the source account or counterparty. "destination_id": "acc_PspUsdGlobalMx",Destination IdiCobre id of the destination account or counterparty. "currency": "mxn/usd",CurrencyiISO currency code (e.g. cop, mxn). "amount": 120000000,AmountiAmount in cents — the last two digits are decimals. "created_at": "2026-07-06T14:01:10Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-06T14:01:45Z"Updated AtiTimestamp of the last update (ISO 8601, UTC). }}Reconcile Cross-Border FX
Match the Cross-Border completion webhook to your treasury ledger on external_id psp_fx_merchant001. Cross-check MXN debit on acc_PspMxnPayout and USD credit on acc_PspUsdGlobalMx.
Mapping the webhook payload from an earlier step onto Treasury ledger. No API call is made — this step closes the loop in your own system.
| Cobre field & value | Treasury ledger field | |
content.external_id psp_fx_merchant001 |
→ | fx_external_id |
content.id mm_CbmmPspMx001 |
→ | cobre_cbmm_id |
content.metadata.forex_quote_id fxq_PspMx001 |
→ | fxq_id |
content.amount 120000000 |
→ | mxn_debited_cents MXN source amount debited from acc_PspMxnPayout (120000000 = $1,200,000.00 MXN). |
content.metadata.forex_quote.destination_amount 30000 |
→ | usd_credited_cents USD credited to acc_PspUsdGlobalMx (30000 = $300.00 USD). |
content.status.state completed |
→ | fx_status |
Daily Balance History (Summarized)
On D+1 (available ~5 hours after midnight), retrieve summarized opening balance, total credits/debits, and end-of-day balance for acc_PspMxnPayout. Use balance_date to scope a single business day.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcHNwX25fbXgwMSJ9.MxPsp9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
{ "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_PspMxEod01",IdiUnique Cobre identifier for this resource. "offset": "-06:00",OffsetiCobre field at "Daily Balance history List.0.offset" in this payload. "balance_date": "2026-07-09",Balance DateiCobre field at "Daily Balance history List.0.balance_date" in this payload. "initial_balance": "850000000",Initial BalanceiCobre field at "Daily Balance history List.0.initial_balance" in this payload. "total_credits": "50000000",Total CreditsiCobre field at "Daily Balance history List.0.total_credits" in this payload. "total_debits": "320000000",Total DebitsiCobre field at "Daily Balance history List.0.total_debits" in this payload. "end_balance": "580000000",End BalanceiCobre field at "Daily Balance history List.0.end_balance" in this payload. "created_at": "2026-07-10T10:00:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-10T10:00:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC). } ]}Obtain All Transactions
Pull every transaction across all Cobre Balances for the business day — useful when reconciling platform-wide activity or catching events missed by webhooks.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcHNwX25fbXgwMSJ9.MxPsp9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
{ "total_items": 2,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": 2,Page ItemsiNumber of items returned on this page. "contents": [ContentsiArray of result objects for this page. { "id": "trx_EodMxCr01",IdiUnique Cobre identifier for this resource. "type": "spei_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_PspMxnPayin",Account IdiCobre Balance account id affected by the event. "amount": 50000000,AmountiAmount in cents — the last two digits are decimals. "previous_balance": 100000000,Previous BalanceiCobre field at "contents.0.previous_balance" in this payload. "current_balance": 150000000,Current BalanceiCobre field at "contents.0.current_balance" in this payload. "currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn). "credit_debit_type": "credit",Credit Debit Typeicredit = funds in; debit = funds out. "transaction_date": "2026-07-09T13:10:00Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-07-09T13:10:01Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "description": "Inbound merchant collection"DescriptioniHuman-readable label or note. } }, { "id": "trx_EodMxDb01",IdiUnique Cobre identifier for this resource. "type": "spei_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_PspMxnPayout",Account IdiCobre Balance account id affected by the event. "amount": -120000000,AmountiAmount in cents — the last two digits are decimals. "previous_balance": 700000000,Previous BalanceiCobre field at "contents.1.previous_balance" in this payload. "current_balance": 580000000,Current BalanceiCobre field at "contents.1.current_balance" in this payload. "currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn). "credit_debit_type": "debit",Credit Debit Typeicredit = funds in; debit = funds out. "transaction_date": "2026-07-09T16:45:00Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-07-09T16:45:01Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "money_movement_id": "mm_CbmmPspMx001"Money Movement IdiMoney Movement that generated this balance transaction. } } ]}Obtain One Account Transactions
Drill into line-level credits and debits on acc_PspMxnPayout for the same business day — cross-check against daily balance totals and webhook-driven reconciliation.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfcHNwX25fbXgwMSJ9.MxPsp9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
{ "total_items": 2,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": 2,Page ItemsiNumber of items returned on this page. "contents": [ContentsiArray of result objects for this page. { "id": "trx_EodMxInt01",IdiUnique Cobre identifier for this resource. "type": "internal_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_PspMxnPayout",Account IdiCobre Balance account id affected by the event. "amount": 50000000,AmountiAmount in cents — the last two digits are decimals. "previous_balance": 530000000,Previous BalanceiCobre field at "contents.0.previous_balance" in this payload. "current_balance": 580000000,Current BalanceiCobre field at "contents.0.current_balance" in this payload. "currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn). "credit_debit_type": "credit",Credit Debit Typeicredit = funds in; debit = funds out. "transaction_date": "2026-07-09T14:00:00Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-07-09T14:00:01Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "description": "Linkage auto-sweep from Payin"DescriptioniHuman-readable label or note. } }, { "id": "trx_EodMxDb01",IdiUnique Cobre identifier for this resource. "type": "spei_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_PspMxnPayout",Account IdiCobre Balance account id affected by the event. "amount": -120000000,AmountiAmount in cents — the last two digits are decimals. "previous_balance": 700000000,Previous BalanceiCobre field at "contents.1.previous_balance" in this payload. "current_balance": 580000000,Current BalanceiCobre field at "contents.1.current_balance" in this payload. "currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn). "credit_debit_type": "debit",Credit Debit Typeicredit = funds in; debit = funds out. "transaction_date": "2026-07-09T16:45:00Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-07-09T16:45:01Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "money_movement_id": "mm_CbmmPspMx001"Money Movement IdiMoney Movement that generated this balance transaction. } } ]}