Authenticate
Exchange API credentials for a short-lived Bearer token (~20 minutes). Reuse the same token string on every later call in this flow.
| Content-Type | application/json |
{ "user_id": "cli_demo_co_checkout01",User IDRequirediAPI user id issued by Cobre (cli_…). "secret": "sk_live_2Hg8nP4qR7"SecretRequirediAPI secret from key creation — treat like a password.}{ "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfZGVtb19jb19jaGVja291dDAxIn0.ChkP9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ",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 Payin Events
Checkout creates a Money Movement when the payer completes payment on the hosted page. Subscribe to Money Movement status events and accounts.balance.credit (r2p_credit or r2p_breb_credit on completion). Verify deliveries with HMAC-SHA256.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfZGVtb19jb19jaGVja291dDAxIn0.ChkP9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "url": "https://yourplatform.co/webhooks/cobre",Notification URLRequirediHTTPS endpoint that receives Cobre POST notifications. "description": "Checkout payin lifecycle",DescriptioniLabel for this subscription in the Cobre portal. "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.credit" ], "event_signature_key": "WHchkCo9xZ"Signature keyRequirediSecret you provide; Cobre HMAC-signs each delivery.}{ "id": "sub_CheckoutPay1",IdiUnique Cobre identifier for this resource. "url": "https://yourplatform.co/webhooks/cobre",Notification URLRequirediHTTPS endpoint that receives Cobre POST notifications. "description": "Checkout payin lifecycle",DescriptioniLabel for this subscription in the Cobre portal. "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.credit" ], "event_signature_key": "******9xZ",Signature keyRequirediSecret you provide; Cobre HMAC-signs each delivery. "created_at": "2026-07-03T10:00:00Z"Created AtiTimestamp when the resource was created (ISO 8601, UTC).}Register the Payer (r2p Counterparty)
Pre-register the payer as an r2p counterparty and pass source_id when creating the Checkout. Email is used for PSE authentication; phone for Nequi push. Cobre can collect payer data on the hosted page if you skip this step — this flow shows explicit counterparty creation for faster checkout and pre-filled payer details.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfZGVtb19jb19jaGVja291dDAxIn0.ChkP9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "geo": "col",GeographyRequiredicol = Colombia. "type": "r2p",TypeRequiredir2p supports all Checkout rails (PSE, Bancolombia, Nequi, Bre-B). "alias": "Checkout payer - payin_ref_002",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "counterparty_fullname": "Juliana Restrepo",Full nameRequirediPayer's full legal name. "counterparty_email": "payer@example.co",EmailRequirediRequired for PSE bank authentication on Checkout. "counterparty_id_type": "cc",ID typeRequirediColombian identification type. "counterparty_id_number": "5334623427",ID numberRequirediPayer identification number. "counterparty_phone": "+573123927834"PhoneRequirediUsed for Nequi push notifications on Checkout. }}{ "id": "cp_PayerCheckout01",IdiUnique Cobre identifier for this resource. "geo": "col",GeographyRequiredicol = Colombia. "type": "r2p",TypeRequiredir2p supports all Checkout rails (PSE, Bancolombia, Nequi, Bre-B). "alias": "Checkout payer - payin_ref_002",AliasiDisplay name that helps identify it and clarify its purpose. "metadata": {MetadataiCustom key-value metadata attached to the resource. "counterparty_email": "payer@example.co",EmailRequirediRequired for PSE bank authentication on Checkout. "counterparty_fullname": "Juliana Restrepo",Full nameRequirediPayer's full legal name. "counterparty_id_number": "5334623427",ID numberRequirediPayer identification number. "counterparty_id_type": "cc",ID typeRequirediColombian identification type. "counterparty_phone": "+573123927834"PhoneRequirediUsed for Nequi push notifications on Checkout. }, "created_at": "2026-07-03T10:05:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-03T10:05:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Create Checkout (All Rails)
Create a hosted Checkout link credited to your COP Cobre Balance. Set checkout_rails to all four Colombia options: pse, bancolombia, nequi, breb — the payer chooses the method on Cobre's hosted page. Pass source_id from the registered counterparty. Amount is integer cents (500000 = COP 5,000.00). Share checkout_url with the customer or redirect them there.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfZGVtb19jb19jaGVja291dDAxIn0.ChkP9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
| Content-Type | application/json |
{ "alias": "Order payin_ref_002",AliasiDisplay name that helps identify it and clarify its purpose. "amount": 500000,Amount (cents)Requiredi500000 cents = COP 5,000.00. Use -1 for open amount. "external_id": "payin_ref_002",External IDiYour order reference — copied to the Money Movement for reconciliation. "source_id": "cp_PayerCheckout01",Payer counterpartyRequiredicp_… from the registered r2p payer. "destination_id": "acc_FundingCOP01",Destination balanceRequirediYour COP Cobre Balance that receives the payin. "checkout_rails": [Checkout RailsiCobre field at "checkout_rails" in this payload. "pse", "bancolombia", "nequi", "breb" ], "checkout_header": "My Platform",Checkout headerRequirediTitle shown on the hosted Checkout page. "checkout_item": "Order #002",Item descriptionRequirediProduct or service label on Checkout (max 40 chars). "description_to_payee": "Checkout payment",Balance descriptioniDescription on the credit transaction in your Cobre Balance. "valid_until": "2050-12-31T23:59:00Z",Valid untilRequirediISO 8601 expiry. Use -1 for no expiration. "money_movement_intent_limit": 1,Payment limitRequiredi1 = single-use link. Use -1 for unlimited reusable link. "redirect_url": "https://yourplatform.co/checkout/return"Return URLRequirediWhere Cobre redirects the payer after the confirmation screen.}{ "id": "chk_CheckoutDemo1",IdiUnique Cobre identifier for this resource. "alias": "Order payin_ref_002",AliasiDisplay name that helps identify it and clarify its purpose. "geo": "col",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "amount": 500000,Amount (cents)Requiredi500000 cents = COP 5,000.00. Use -1 for open amount. "external_id": "payin_ref_002",External IDiYour order reference — copied to the Money Movement for reconciliation. "source_id": "cp_PayerCheckout01",Payer counterpartyRequiredicp_… from the registered r2p payer. "destination_id": "acc_FundingCOP01",Destination balanceRequirediYour COP Cobre Balance that receives the payin. "checkout_rails": [Checkout RailsiCobre field at "checkout_rails" in this payload. "pse", "bancolombia", "nequi", "breb" ], "checkout_header": "My Platform",Checkout headerRequirediTitle shown on the hosted Checkout page. "checkout_item": "Order #002",Item descriptionRequirediProduct or service label on Checkout (max 40 chars). "valid_until": "2050-12-31T23:59:00Z",Valid untilRequirediISO 8601 expiry. Use -1 for no expiration. "money_movement_intent_limit": 1,Payment limitRequiredi1 = single-use link. Use -1 for unlimited reusable link. "money_movement_created": 0,Money Movement CreatediCobre field at "money_movement_created" in this payload. "redirect_url": "https://yourplatform.co/checkout/return",Return URLRequirediWhere Cobre redirects the payer after the confirmation screen. "checkout_url": "https://links.cobre.co/ChkDemo01",Checkout UrliCobre field at "checkout_url" in this payload. "description_to_payee": "Checkout payment",Balance descriptioniDescription on the credit transaction in your Cobre Balance. "active": true,ActiveiCobre field at "active" in this payload. "created_at": "2026-07-03T10:10:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-03T10:10:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Payment Completed (Webhook)
POST /checkouts does not return a Money Movement. When the payer finishes on the hosted page, Cobre creates an R2P MM and sends money_movements.status.*. Poll GET /money_movements/{mm_id} if needed (nested defaults to false — source and destination are null). batch_id equals the Checkout chk_…; creator is the r2p source counterparty. This demo is a completed PSE payment; other rails produce r2p_nequi, r2p_bancolombia, or r2p_breb.
| Authorization | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfZGVtb19jb19jaGVja291dDAxIn0.ChkP9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ |
{ "id": "mm_ChkPayin001",Money Movement IDRequiredimm_… created by Checkout when payment completes. "batch_id": "chk_CheckoutDemo1",Checkout IDRequirediEquals the Checkout chk_… that initiated this payment. "external_id": "payin_ref_002",External IDRequirediYour order reference from the Checkout request. "creator": "cp_PayerCheckout01",CreatorRequirediActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user. "type": "r2p_pse",Rail typeRequirediMM type reflects the rail the payer chose (e.g. r2p_pse). "geo": "col",GeoiGeography code (e.g. col = Colombia, mex = Mexico). "status": {StatusiLifecycle status object for the resource or movement. "state": "completed",StatusRequiredicompleted when funds have settled to your Cobre Balance. "code": "",CodeiProvider or Cobre status code when the state is failed or rejected. "description": ""DescriptioniHuman-readable detail for the current status. }, "source_id": "cp_PayerCheckout01",Source counterpartyRequirediCobre id of the source account or counterparty. "source": null,SourceiCobre field at "source" in this payload. "destination_id": "acc_FundingCOP01",Destination IdiCobre id of the destination account or counterparty. "destination": null,DestinationiInline Create Counterparty body when destination_id is not used (supported in bulk uploads). "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 500000,AmountiAmount in cents — the last two digits are decimals. "metadata": {MetadataiCustom key-value metadata attached to the resource. "r2p_rail": "pse",R2P railRequirediRequest-to-Pay rail the payer chose (pse, nequi, bancolombia, breb). "tracking_key": "558741001",Tracking keyRequirediNetwork tracking key for the payment (PSE ticket or Bre-B key). "payment_link": "https://registro.pse.com.co/PSENF/index.html?enc=_chkdemo001",Payment linkRequirediRail-hosted URL the payer used to complete the payment (e.g. PSE). "description_to_payer": "Order #002",Description To PayeriPayer-facing description. On Checkout this is checkout_item. "description_to_payee": "Checkout payment",Description To PayeeiDescription that appears on the credit in your Cobre Balance. "redirect_url": "https://links.cobre.co/ChkDemo01",Checkout URLRequirediOn a Checkout-created Money Movement this is the hosted checkout_url (links.cobre.co), not the merchant return URL from POST /checkouts. "financial_institution_code": "1002",Bank codeRequirediBank code the payer selected (PSE). See Colombian bank codes. "ticket_id": "178648058366091001"Ticket IDRequirediTicket id the payment network assigned to this transaction. }, "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. "created_at": "2026-07-03T10:15:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-03T10:20:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).}Webhook outcomes — Money movement
Cobre delivers this when the Checkout payment reaches completed. Use external_id to mark your order paid and batch_id to tie back to the Checkout link. creator and source_id are the r2p counterparty. Cobre credits your Cobre Balance (r2p_credit) — 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_ChkPayin001Cmp",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-03T10: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": "mm_ChkPayin001",IdiUnique Cobre identifier for this resource. "batch_id": "chk_CheckoutDemo1",Batch IdiCheckout id (chk_…) when the Money Movement was created from a Checkout; otherwise the bulk batch id (bat_…). "external_id": "payin_ref_002",External IdiYour own reference echoed by Cobre for reconciliation. "creator": "cp_PayerCheckout01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user. "type": "r2p_pse",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). "status": {StatusiLifecycle status object for the resource or movement. "state": "completed",StateiCurrent lifecycle state (e.g. completed, failed, rejected). "code": "",CodeiProvider or Cobre status code when the state is failed or rejected. "description": ""DescriptioniHuman-readable label or note. }, "source_id": "cp_PayerCheckout01",Source IdiCobre id of the source account or counterparty. "source": null,SourceiCobre field at "content.source" in this payload. "destination_id": "acc_FundingCOP01",Destination IdiCobre id of the destination account or counterparty. "destination": null,DestinationiInline Create Counterparty body when destination_id is not used (supported in bulk uploads). "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 500000,AmountiAmount in cents — the last two digits are decimals. "metadata": {MetadataiCustom key-value metadata attached to the resource. "r2p_rail": "pse",R2p RailiRequest-to-Pay rail the payer chose (pse, nequi, bancolombia, breb). "tracking_key": "558741001",Tracking KeyiNetwork tracking key for the payment (PSE ticket or Bre-B key). "payment_link": "https://registro.pse.com.co/PSENF/index.html?enc=_chkdemo001",Payment LinkiRail-hosted URL the payer used to complete the payment (e.g. PSE). "description_to_payer": "Order #002",Description To PayeriPayer-facing description. On Checkout this is checkout_item. "description_to_payee": "Checkout payment",Description To PayeeiDescription that appears on the credit in your Cobre Balance. "redirect_url": "https://links.cobre.co/ChkDemo01",Redirect UrliOn a Checkout-created Money Movement this is the hosted checkout_url (links.cobre.co), not the merchant return URL from POST /checkouts. "financial_institution_code": "1002",Financial Institution CodeiBank code the payer selected (PSE). See Colombian bank codes. "ticket_id": "178648058366091001"Ticket IdiTicket id the payment network assigned to this transaction. }, "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. "created_at": "2026-07-03T10:15:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-03T10:20: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. The list below is filtered to this Money Movement’s direction (payin, payout, or both):
| Code | Description | Applies to |
|---|---|---|
F001 | Payment processing failed please try again. | Payin and payout |
F002 | NSF - Not Sufficient Funds in the designated account. | Payin and payout |
F003 | R2P Payment link expired. | Payin |
F004 | Daily transaction amount limit has been reached. | Payin and payout |
F005 | Amount exceeds the maximum allowed transaction limit. | Payin and payout |
F098 | Could not process the money movement at this time. | Payin and payout |
F099 | Could not process the money movement at this time. | Payin and payout |
money_movements.status.failed| Content-Type | application/json |
{ "id": "ev_ChkPayin001Cmp",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-03T10: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": "mm_ChkPayin001",IdiUnique Cobre identifier for this resource. "batch_id": "chk_CheckoutDemo1",Batch IdiCheckout id (chk_…) when the Money Movement was created from a Checkout; otherwise the bulk batch id (bat_…). "external_id": "payin_ref_002",External IdiYour own reference echoed by Cobre for reconciliation. "creator": "cp_PayerCheckout01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user. "type": "r2p_pse",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). "status": {StatusiLifecycle status object for the resource or movement. "state": "failed",StateiCurrent lifecycle state (e.g. completed, failed, rejected). "code": "F003",CodeiProvider or Cobre status code when the state is failed or rejected. "description": "R2P Payment link expired."DescriptioniHuman-readable label or note. }, "source_id": "cp_PayerCheckout01",Source IdiCobre id of the source account or counterparty. "source": null,SourceiCobre field at "content.source" in this payload. "destination_id": "acc_FundingCOP01",Destination IdiCobre id of the destination account or counterparty. "destination": null,DestinationiInline Create Counterparty body when destination_id is not used (supported in bulk uploads). "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 500000,AmountiAmount in cents — the last two digits are decimals. "metadata": {MetadataiCustom key-value metadata attached to the resource. "r2p_rail": "pse",R2p RailiRequest-to-Pay rail the payer chose (pse, nequi, bancolombia, breb). "tracking_key": "558741001",Tracking KeyiNetwork tracking key for the payment (PSE ticket or Bre-B key). "payment_link": "https://registro.pse.com.co/PSENF/index.html?enc=_chkdemo001",Payment LinkiRail-hosted URL the payer used to complete the payment (e.g. PSE). "description_to_payer": "Order #002",Description To PayeriPayer-facing description. On Checkout this is checkout_item. "description_to_payee": "Checkout payment",Description To PayeeiDescription that appears on the credit in your Cobre Balance. "redirect_url": "https://links.cobre.co/ChkDemo01",Redirect UrliOn a Checkout-created Money Movement this is the hosted checkout_url (links.cobre.co), not the merchant return URL from POST /checkouts. "financial_institution_code": "1002",Financial Institution CodeiBank code the payer selected (PSE). See Colombian bank codes. "ticket_id": "178648058366091001"Ticket IdiTicket id the payment network assigned to this transaction. }, "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. "created_at": "2026-07-03T10:15:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-03T10:20:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC). }}The bank or payment network rejected the transaction. Inspect status.code. The list below is filtered to this Money Movement’s direction (payin, payout, or both):
| Code | Description | Applies to |
|---|---|---|
R000 | Transaction rejected. | Payin and payout |
R001 | Inactive or blocked account. | Payin and payout |
R002 | Account and identification provided do not coincide. | Payin and payout |
R005 | Account does not exist. | Payin and payout |
R006 | Invalid account number. | Payin and payout |
R009 | Exceeds maximum allowed amount. | Payin and payout |
R010 | Account not authorized to debit. | Payin and payout |
R012 | The user has abandoned the transaction. | Payin |
R016 | Payment rejected due to timeout. | Payin |
R017 | Payment rejected due to expired money movement. | Payin |
R019 | Payment rejected due to incorrect amount. | Payin |
R020 | Payment rejected due to user authentication failure. | Payin |
R021 | Insufficient funds in payer account. | Payin |
R023 | Payment cancelled by the user. | Payin and payout |
R026 | Payment rejected due to unavailable bank services. | Payin and payout |
R027 | Account exceeds the maximum allowed transaction limit. | Payin and payout |
R034 | Account closed. | Payin and payout |
R081 | The counterparty registration has expired. | Payin |
R082 | The counterparty registration has been canceled. | Payin |
R084 | The counterparty registration has been rejected. | Payin |
money_movements.status.rejected| Content-Type | application/json |
{ "id": "ev_ChkPayin001Cmp",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-03T10: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": "mm_ChkPayin001",IdiUnique Cobre identifier for this resource. "batch_id": "chk_CheckoutDemo1",Batch IdiCheckout id (chk_…) when the Money Movement was created from a Checkout; otherwise the bulk batch id (bat_…). "external_id": "payin_ref_002",External IdiYour own reference echoed by Cobre for reconciliation. "creator": "cp_PayerCheckout01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user. "type": "r2p_pse",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). "status": {StatusiLifecycle status object for the resource or movement. "state": "rejected",StateiCurrent lifecycle state (e.g. completed, failed, rejected). "code": "R016",CodeiProvider or Cobre status code when the state is failed or rejected. "description": "Payment rejected due to timeout."DescriptioniHuman-readable label or note. }, "source_id": "cp_PayerCheckout01",Source IdiCobre id of the source account or counterparty. "source": null,SourceiCobre field at "content.source" in this payload. "destination_id": "acc_FundingCOP01",Destination IdiCobre id of the destination account or counterparty. "destination": null,DestinationiInline Create Counterparty body when destination_id is not used (supported in bulk uploads). "currency": "cop",CurrencyiISO currency code (e.g. cop, mxn). "amount": 500000,AmountiAmount in cents — the last two digits are decimals. "metadata": {MetadataiCustom key-value metadata attached to the resource. "r2p_rail": "pse",R2p RailiRequest-to-Pay rail the payer chose (pse, nequi, bancolombia, breb). "tracking_key": "558741001",Tracking KeyiNetwork tracking key for the payment (PSE ticket or Bre-B key). "payment_link": "https://registro.pse.com.co/PSENF/index.html?enc=_chkdemo001",Payment LinkiRail-hosted URL the payer used to complete the payment (e.g. PSE). "description_to_payer": "Order #002",Description To PayeriPayer-facing description. On Checkout this is checkout_item. "description_to_payee": "Checkout payment",Description To PayeeiDescription that appears on the credit in your Cobre Balance. "redirect_url": "https://links.cobre.co/ChkDemo01",Redirect UrliOn a Checkout-created Money Movement this is the hosted checkout_url (links.cobre.co), not the merchant return URL from POST /checkouts. "financial_institution_code": "1002",Financial Institution CodeiBank code the payer selected (PSE). See Colombian bank codes. "ticket_id": "178648058366091001"Ticket IdiTicket id the payment network assigned to this transaction. }, "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. "created_at": "2026-07-03T10:15:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "updated_at": "2026-07-03T10:20:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC). }}When a payin Money Movement completes, Cobre credits the destination Cobre Balance and delivers accounts.balance.credit. Transaction type matches the movement type — see GET /accounts/{id}/transactions OAS examples.
When the payin settles, Cobre credits the destination Cobre Balance.
accounts.balance.credit| Content-Type | application/json |
{ "id": "ev_ChkPayin00Cr",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-03T10: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_ChkPayin001Cr",IdiUnique Cobre identifier for this resource. "type": "r2p_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": 500000,AmountiAmount in cents — the last two digits are decimals. "previous_balance": 0,Previous BalanceiCobre field at "content.previous_balance" in this payload. "current_balance": 500000,Current BalanceiCobre field at "content.current_balance" in this payload. "currency": "COP",CurrencyiISO currency code (e.g. cop, mxn). "credit_debit_type": "credit",Credit Debit Typeicredit = funds in; debit = funds out. "transaction_date": "2026-07-03T10:20:00Z",Transaction DateiTimestamp when the transaction was posted (ISO 8601, UTC). "created_at": "2026-07-03T10:20:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC). "metadata": {MetadataiCustom key-value metadata attached to the resource. "sender_bank_code": "1002",Sender Bank CodeiMetadata field "sender_bank_code" attached to the resource. "money_movement_id": "mm_ChkPayin001",Money Movement IdiMoney Movement that generated this balance transaction. "description": "Checkout payment",DescriptioniHuman-readable label or note. "sender_name": "",Sender NameiMetadata field "sender_name" attached to the resource. "r2p_method": "pse",R2p MethodiR2P channel for r2p_credit transactions (e.g. pse). "tracking_key": "558741001",Tracking KeyiNetwork tracking key for the payment (PSE ticket or Bre-B key). "sender_id": ""Sender IdiMetadata field "sender_id" attached to the resource. } }}Reconcile the Checkout Payin
Match the MM completion webhook to your platform ledger on external_id. Use content.batch_id to tie the payment back to the Checkout (chk_…). Cross-check the COP balance credit via GET /accounts/{acct_id}/transactions. For D+1 close, export payins with POST /reports.
Mapping the webhook payload from an earlier step onto Platform ledger. No API call is made — this step closes the loop in your own system.
| Cobre field & value | Platform ledger field | |
content.external_id payin_ref_002 |
→ | order_reference Primary join key — your order or payin id. |
content.id mm_ChkPayin001 |
→ | cobre_mm_id |
content.batch_id chk_CheckoutDemo1 |
→ | checkout_id Checkout id — correlates the MM to the hosted link that initiated payment. |
content.amount 500000 |
→ | received_amount_cents |
content.status.state completed |
→ | payin_status Map completed → PAID; failed/rejected → review or re-issue Checkout. |
content.type r2p_pse |
→ | payin_rail Rail the payer chose on Checkout (r2p_pse, r2p_nequi, r2p_bancolombia, r2p_breb, …). |