Step 1 of 6 Configuration API step

Authenticate

Exchange API credentials for a short-lived Bearer token (~20 minutes). Reuse the same token string on every later call in this flow.

POST https://api.cobre.co/v1/auth
Headers
Content-Typeapplication/json
Request body
{
"user_id": "cli_demo_co_checkout01",User IDiAPI user id issued by Cobre (cli_…).
"secret": "sk_live_2Hg8nP4qR7"SecretiAPI secret from key creation — treat like a password.
}
Response 201
{
"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.
}
Documentation for this step
AuthenticationAuthentication Guide
Step 2 of 6 Configuration API step

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.

POST https://api.cobre.co/v1/subscriptions
Headers
AuthorizationBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfZGVtb19jb19jaGVja291dDAxIn0.ChkP9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ
Content-Typeapplication/json
Request body
{
"url": "https://yourplatform.co/webhooks/cobre",Notification URLiHTTPS 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 keyiSecret you provide; Cobre HMAC-signs each delivery.
}
Response 201
{
"id": "sub_CheckoutPay1",IdiUnique Cobre identifier for this resource.
"url": "https://yourplatform.co/webhooks/cobre",Notification URLiHTTPS 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 keyiSecret you provide; Cobre HMAC-signs each delivery.
"created_at": "2026-07-03T10:00:00Z"Created AtiTimestamp when the resource was created (ISO 8601, UTC).
}
Step 3 of 6 Checkout Payin API step

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.

POST https://api.cobre.co/v1/counterparties
Headers
AuthorizationBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfZGVtb19jb19jaGVja291dDAxIn0.ChkP9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ
Content-Typeapplication/json
Request body
{
"geo": "col",Geographyicol = Colombia.
"type": "r2p",Typeir2p 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 nameiPayer's full legal name.
"counterparty_email": "payer@example.co",EmailiRequired for PSE bank authentication on Checkout.
"counterparty_id_type": "cc",ID typeiColombian identification type.
"counterparty_id_number": "5334623427",ID numberiPayer identification number.
"counterparty_phone": "+573123927834"PhoneiUsed for Nequi push notifications on Checkout.
}
}
Response 201
{
"id": "cp_PayerCheckout01",IdiUnique Cobre identifier for this resource.
"geo": "col",Geographyicol = Colombia.
"type": "r2p",Typeir2p 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",EmailiRequired for PSE bank authentication on Checkout.
"counterparty_fullname": "Juliana Restrepo",Full nameiPayer's full legal name.
"counterparty_id_number": "5334623427",ID numberiPayer identification number.
"counterparty_id_type": "cc",ID typeiColombian identification type.
"counterparty_phone": "+573123927834"PhoneiUsed 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).
}
Step 4 of 6 Checkout Payin API step

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.

POST https://api.cobre.co/v1/checkouts
Headers
AuthorizationBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfZGVtb19jb19jaGVja291dDAxIn0.ChkP9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ
Content-Typeapplication/json
Request body
{
"alias": "Order payin_ref_002",AliasiDisplay name that helps identify it and clarify its purpose.
"amount": 500000,Amount (cents)i500000 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 counterpartyicp_… from the registered r2p payer.
"destination_id": "acc_FundingCOP01",Destination balanceiYour 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 headeriTitle shown on the hosted Checkout page.
"checkout_item": "Order #002",Item descriptioniProduct 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 untiliISO 8601 expiry. Use -1 for no expiration.
"money_movement_intent_limit": 1,Payment limiti1 = single-use link. Use -1 for unlimited reusable link.
"redirect_url": "https://yourplatform.co/checkout/return"Return URLiWhere Cobre redirects the payer after the confirmation screen.
}
Response 201
{
"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)i500000 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 counterpartyicp_… from the registered r2p payer.
"destination_id": "acc_FundingCOP01",Destination balanceiYour 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 headeriTitle shown on the hosted Checkout page.
"checkout_item": "Order #002",Item descriptioniProduct or service label on Checkout (max 40 chars).
"valid_until": "2050-12-31T23:59:00Z",Valid untiliISO 8601 expiry. Use -1 for no expiration.
"money_movement_intent_limit": 1,Payment limiti1 = 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 URLiWhere 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).
}
Documentation for this step
Create a CheckoutCheckout Guide
Step 5 of 6 Checkout Payin API step

Payment Completed (Webhook)

When the payer finishes on the hosted Checkout page, Cobre creates a Money Movement and sends money_movements.status.* webhooks. Poll GET /money_movements/{id} if needed. The MM batch_id equals the Checkout id (chk_…) for correlation. This demo shows a PSE completion; other rails produce r2p_nequi, r2p_bancolombia, or r2p_breb types.

GET https://api.cobre.co/v1/money_movements/mm_ChkPayin001
Headers
AuthorizationBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfZGVtb19jb19jaGVja291dDAxIn0.ChkP9xK2vN7cL4wT8aH1gF6yJ0bZ5eQ
Response 200
{
"id": "mm_ChkPayin001",Money Movement IDimm_… created by Checkout when payment completes.
"batch_id": "chk_CheckoutDemo1",Checkout IDiEquals the Checkout chk_… that initiated this payment.
"status": {StatusiLifecycle status object for the resource or movement.
"state": "completed",Statusicompleted 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.
},
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"financial_institution_code": "1070",Financial Institution CodeiCobre field at "metadata.financial_institution_code" in this payload.
"description_to_payee": "Checkout payment",Description To PayeeiCobre field at "metadata.description_to_payee" in this payload.
"description_to_payer": "Order #002",Description To PayeriCobre field at "metadata.description_to_payer" in this payload.
"r2p_rail": "pse",R2p RailiCobre field at "metadata.r2p_rail" in this payload.
"redirect_url": "https://yourplatform.co/checkout/return"Redirect UrliCobre field at "metadata.redirect_url" in this payload.
},
"creator": "cli_demo_co_checkout01",CreatoriAPI client id that created this resource.
"external_id": "payin_ref_002",External IDiYour order reference from the Checkout request.
"checker_approval": false,Checker ApprovaliWhen true, Cobre pauses at pending_approval and locks source funds until an approval/denial decision via Money Movement Approvals API.
"mm_approval_id": "",Mm Approval IdiMoney Movement Approval id (mma_…) when checker_approval is true — used for the decision endpoint.
"type": "r2p_pse",Rail typeiMM type reflects the rail the payer chose (e.g. r2p_pse).
"geo": "col",GeoiGeography code (e.g. col = Colombia, mex = Mexico).
"source_id": "cp_PayerCheckout01",Source IdiCobre id of the source account or counterparty.
"destination_id": "acc_FundingCOP01",Destination IdiCobre id of the destination account or counterparty.
"currency": "cop",CurrencyiISO currency code (e.g. cop, mxn).
"amount": 500000,AmountiAmount in cents — the last two digits are decimals.
"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 outcomesMoney 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. 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.

Event money_movements.status.completed
Headers
Content-Typeapplication/json
Example payload
{
"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 IdiBulk batch identifier when the movement belongs to a batch.
"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.
"financial_institution_code": "1070",Financial Institution CodeiMetadata field "financial_institution_code" attached to the resource.
"description_to_payee": "Checkout payment",Description To PayeeiMetadata field "description_to_payee" attached to the resource.
"description_to_payer": "Order #002",Description To PayeriMetadata field "description_to_payer" attached to the resource.
"r2p_rail": "pse",R2p RailiMetadata field "r2p_rail" attached to the resource.
"redirect_url": "https://yourplatform.co/checkout/return"Redirect UrliMetadata field "redirect_url" attached to the resource.
},
"creator": "cli_demo_co_checkout01",CreatoriAPI client id that created this resource.
"external_id": "payin_ref_002",External IdiYour own reference echoed by Cobre for reconciliation.
"checker_approval": false,Checker ApprovaliWhen true, Cobre pauses at pending_approval and locks source funds until an approval/denial decision via Money Movement Approvals API.
"mm_approval_id": "",Mm Approval IdiMoney Movement Approval id (mma_…) when checker_approval is true — used for the decision endpoint.
"type": "r2p_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).
"source_id": "cp_PayerCheckout01",Source IdiCobre id of the source account or counterparty.
"destination_id": "acc_FundingCOP01",Destination IdiCobre id of the destination account or counterparty.
"currency": "cop",CurrencyiISO currency code (e.g. cop, mxn).
"amount": 500000,AmountiAmount in cents — the last two digits are decimals.
"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 — common failed codes include:

Possible status codes
F001Payment processing failed — please try again.
F002NSF — not sufficient funds in the designated account.
F003R2P payment link expired (payins).
F004Daily transaction amount limit has been reached.
F005Amount exceeds the maximum allowed transaction limit.
F098Could not process the money movement at this time.
F099Could not process the money movement at this time.
Event money_movements.status.failed
Headers
Content-Typeapplication/json
Example payload
{
"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 IdiBulk batch identifier when the movement belongs to a batch.
"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.
"financial_institution_code": "1070",Financial Institution CodeiMetadata field "financial_institution_code" attached to the resource.
"description_to_payee": "Checkout payment",Description To PayeeiMetadata field "description_to_payee" attached to the resource.
"description_to_payer": "Order #002",Description To PayeriMetadata field "description_to_payer" attached to the resource.
"r2p_rail": "pse",R2p RailiMetadata field "r2p_rail" attached to the resource.
"redirect_url": "https://yourplatform.co/checkout/return"Redirect UrliMetadata field "redirect_url" attached to the resource.
},
"creator": "cli_demo_co_checkout01",CreatoriAPI client id that created this resource.
"external_id": "payin_ref_002",External IdiYour own reference echoed by Cobre for reconciliation.
"checker_approval": false,Checker ApprovaliWhen true, Cobre pauses at pending_approval and locks source funds until an approval/denial decision via Money Movement Approvals API.
"mm_approval_id": "",Mm Approval IdiMoney Movement Approval id (mma_…) when checker_approval is true — used for the decision endpoint.
"type": "r2p_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).
"source_id": "cp_PayerCheckout01",Source IdiCobre id of the source account or counterparty.
"destination_id": "acc_FundingCOP01",Destination IdiCobre id of the destination account or counterparty.
"currency": "cop",CurrencyiISO currency code (e.g. cop, mxn).
"amount": 500000,AmountiAmount in cents — the last two digits are decimals.
"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 — common rejected codes include:

Possible status codes
R000Transaction rejected.
R001Inactive or blocked account.
R002Account and identification provided do not coincide.
R005Account does not exist.
R006Invalid account number.
R009Exceeds maximum allowed amount.
R018Payment rejected due to invalid key (payouts).
R023Payment cancelled by the user.
R026Payment rejected due to unavailable bank services.
R034Account closed.
R085Bank processing error (payouts).
Event money_movements.status.rejected
Headers
Content-Typeapplication/json
Example payload
{
"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 IdiBulk batch identifier when the movement belongs to a batch.
"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.
"financial_institution_code": "1070",Financial Institution CodeiMetadata field "financial_institution_code" attached to the resource.
"description_to_payee": "Checkout payment",Description To PayeeiMetadata field "description_to_payee" attached to the resource.
"description_to_payer": "Order #002",Description To PayeriMetadata field "description_to_payer" attached to the resource.
"r2p_rail": "pse",R2p RailiMetadata field "r2p_rail" attached to the resource.
"redirect_url": "https://yourplatform.co/checkout/return"Redirect UrliMetadata field "redirect_url" attached to the resource.
},
"creator": "cli_demo_co_checkout01",CreatoriAPI client id that created this resource.
"external_id": "payin_ref_002",External IdiYour own reference echoed by Cobre for reconciliation.
"checker_approval": false,Checker ApprovaliWhen true, Cobre pauses at pending_approval and locks source funds until an approval/denial decision via Money Movement Approvals API.
"mm_approval_id": "",Mm Approval IdiMoney Movement Approval id (mma_…) when checker_approval is true — used for the decision endpoint.
"type": "r2p_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).
"source_id": "cp_PayerCheckout01",Source IdiCobre id of the source account or counterparty.
"destination_id": "acc_FundingCOP01",Destination IdiCobre id of the destination account or counterparty.
"currency": "cop",CurrencyiISO currency code (e.g. cop, mxn).
"amount": 500000,AmountiAmount in cents — the last two digits are decimals.
"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.

Event accounts.balance.credit
Headers
Content-Typeapplication/json
Example payload
{
"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": "1070",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": "",Tracking KeyiBre-B tracking key for the payment.
"sender_id": ""Sender IdiMetadata field "sender_id" attached to the resource.
}
}
}
Step 6 of 6 Reconciliation Reconciliation

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 & valuePlatform 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, …).