Step 1 of 7 Configuration API step

Authenticate

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

POST https://api.cobre.co/v1/auth
Headers
Content-Typeapplication/json
Request body
{
"user_id": "cli_mex_lender_01",User IDRequirediAPI user id issued by Cobre (cli_…).
"secret": "sk_live_Mx9pQ2rL7v"SecretRequirediAPI secret from key creation — never log or expose client-side.
}
Response 201
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfbWV4X2xlbmRlcl8wMSJ9.Mx7Kp3nQ9xY2mLd8vBw1aF6cR0eH4tJ5gZ",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 7 Configuration API step

Subscribe to Disbursement Events

Register your HTTPS listener for Money Movement lifecycle events and balance debits. Prefer webhooks over polling; verify each delivery with HMAC-SHA256 using event-timestamp and event-signature.

POST https://api.cobre.co/v1/subscriptions
Headers
AuthorizationBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfbWV4X2xlbmRlcl8wMSJ9.Mx7Kp3nQ9xY2mLd8vBw1aF6cR0eH4tJ5gZ
Content-Typeapplication/json
Request body
{
"url": "https://lender.example.mx/webhooks/cobre",Notification URLRequirediYour backend endpoint that receives Cobre POST notifications.
"description": "SPEI disbursement 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",
"money_movements.status.returned",
"accounts.balance.debit"
],
"event_signature_key": "WHmxSpei9xZ"Signature keyRequirediSecret you provide; Cobre HMAC-signs payloads for verification.
}
Response 201
{
"id": "sub_MxSpei01",IdiUnique Cobre identifier for this resource.
"url": "https://lender.example.mx/webhooks/cobre",Notification URLRequirediYour backend endpoint that receives Cobre POST notifications.
"description": "SPEI disbursement 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",
"money_movements.status.returned",
"accounts.balance.debit"
],
"event_signature_key": "******9xZ",Signature keyRequirediSecret you provide; Cobre HMAC-signs payloads for verification.
"created_at": "2026-06-28T10:00:00Z"Created AtiTimestamp when the resource was created (ISO 8601, UTC).
}
Step 3 of 7 Account Verification API step

Verify CLABE Ownership

Before disbursing, confirm the borrower's 18-digit CLABE matches the declared RFC or CURP via mex_acc_ownership_1. The create call returns processing — never treat processing as authorization to pay.

POST https://api.cobre.co/v1/account_verifications
Headers
AuthorizationBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfbWV4X2xlbmRlcl8wMSJ9.Mx7Kp3nQ9xY2mLd8vBw1aF6cR0eH4tJ5gZ
Content-Typeapplication/json
Request body
{
"model": "mex_acc_ownership_1",ModelRequiredimex_acc_ownership_1 validates CLABE ownership in Mexico.
"verification_request": {Verification RequestiInput fields sent to the verification model.
"account_number": "706180303700100011",CLABERequiredi18-digit CLABE account number.
"account_type": "clabe",Account typeRequirediclabe for standard SPEI bank accounts.
"account_holder_id_number": "XAXX010101000",Holder IDRequirediBorrower's RFC or CURP as declared on the loan.
"account_holder_id_type": "rfc"ID typeRequiredirfc or curp — must match the id number format.
},
"external_id": "loan_000123_verify"External IDiYour loan/borrower reference for audit (traceability).
}
Response 201
{
"id": "av_MxVer0001",IdiUnique Cobre identifier for this resource.
"creator_id": "cli_mex_lender_01",Creator IdiCobre field at "creator_id" in this payload.
"model": "mex_acc_ownership_1",ModelRequiredimex_acc_ownership_1 validates CLABE ownership in Mexico.
"geo": "mex",GeoiGeography code (e.g. col = Colombia, mex = Mexico).
"verification_request": {Verification RequestiInput fields sent to the verification model.
"account_number": "706180303700100011",CLABERequiredi18-digit CLABE account number.
"account_type": "clabe",Account typeRequirediclabe for standard SPEI bank accounts.
"account_holder_id_number": "XAXX010101000",Holder IDRequirediBorrower's RFC or CURP as declared on the loan.
"account_holder_id_type": "rfc"ID typeRequiredirfc or curp — must match the id number format.
},
"status": {StatusiLifecycle status object for the resource or movement.
"state": "processing",StateiCurrent lifecycle state (e.g. completed, failed, rejected).
"code": "",CodeiProvider or Cobre status code when the state is failed or rejected.
"description": ""DescriptioniHuman-readable detail for the current status.
},
"external_id": "loan_000123_verify",External IDiYour loan/borrower reference for audit (traceability).
"created_at": "2026-06-28T10:05:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-28T10:05:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).
}
Step 4 of 7 Account Verification API step

Retrieve Verification Result

Poll until status.state is completed. Only disburse when verification_result is matched; route failed or unmatched results to manual review.

GET https://api.cobre.co/v1/account_verifications/av_MxVer0001
Headers
AuthorizationBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfbWV4X2xlbmRlcl8wMSJ9.Mx7Kp3nQ9xY2mLd8vBw1aF6cR0eH4tJ5gZ
Request body
{}
Response 200
{
"id": "av_MxVer0001",Verification IDRequirediav_… from the create response.
"creator_id": "cli_mex_lender_01",Creator IdiCobre field at "creator_id" in this payload.
"model": "mex_acc_ownership_1",ModeliVerification model identifier (region- and rail-specific).
"geo": "mex",GeoiGeography code (e.g. col = Colombia, mex = Mexico).
"verification_request": {Verification RequestiInput fields sent to the verification model.
"account_number": "706180303700100011",Account NumberiBank account or CLABE number for the counterparty.
"account_type": "clabe",Account TypeiCobre field at "verification_request.account_type" in this payload.
"account_holder_id_number": "XAXX010101000",Account Holder Id NumberiCobre field at "verification_request.account_holder_id_number" in this payload.
"account_holder_id_type": "rfc"Account Holder Id TypeiCobre field at "verification_request.account_holder_id_type" in this payload.
},
"verification_response": {Verification ResponseiResult returned by the verification model.
"verification_result": "matched"Ownership resultRequiredimatched = safe to proceed; unmatched or unresolved = block payout.
},
"status": {StatusiLifecycle status object for the resource or movement.
"state": "completed",StatusRequirediMust be completed before disbursement.
"code": "",CodeiProvider or Cobre status code when the state is failed or rejected.
"description": ""DescriptioniHuman-readable detail for the current status.
},
"external_id": "loan_000123_verify",External IdiYour own reference echoed by Cobre for reconciliation.
"created_at": "2026-06-28T10:05:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-28T10:12:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).
}
Step 5 of 7 Loan Disbursement API step

Create CLABE Counterparty

Register the verified borrower bank account as a Mexico CLABE counterparty. Normalize accents in counterparty_fullname — special characters are not allowed.

POST https://api.cobre.co/v1/counterparties
Headers
AuthorizationBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfbWV4X2xlbmRlcl8wMSJ9.Mx7Kp3nQ9xY2mLd8vBw1aF6cR0eH4tJ5gZ
Content-Typeapplication/json
Request body
{
"geo": "mex",GeographyRequirediGeography code (e.g. col = Colombia, mex = Mexico).
"type": "clabe",TypeRequirediclabe for standard SPEI loan disbursement to a bank account.
"alias": "Borrower loan_000123",AliasiDisplay name that helps identify it and clarify its purpose.
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"account_number": "706180303700100011",CLABERequirediBank account or CLABE number for the counterparty.
"counterparty_fullname": "Maria Garcia Lopez",Full nameRequirediLegal or display name of the counterparty beneficiary.
"counterparty_id_type": "rfc",ID typeRequirediType of identification document for the counterparty (e.g. nit, cc, rfc).
"counterparty_id_number": "XAXX010101000"ID numberRequirediIdentification number for the counterparty.
}
}
Response 201
{
"id": "cp_MxBorrow01",IdiUnique Cobre identifier for this resource.
"geo": "mex",GeographyRequirediGeography code (e.g. col = Colombia, mex = Mexico).
"type": "clabe",TypeRequirediclabe for standard SPEI loan disbursement to a bank account.
"alias": "Borrower loan_000123",AliasiDisplay name that helps identify it and clarify its purpose.
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"account_number": "706180303700100011",CLABERequirediBank account or CLABE number for the counterparty.
"counterparty_fullname": "Maria Garcia Lopez",Full nameRequirediLegal or display name of the counterparty beneficiary.
"counterparty_id_type": "rfc",ID typeRequirediType of identification document for the counterparty (e.g. nit, cc, rfc).
"counterparty_id_number": "XAXX010101000"ID numberRequirediIdentification number for the counterparty.
},
"created_at": "2026-06-28T10:15:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-28T10:15:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).
}
Documentation for this step
Create a CounterpartyManaging Counterparties
Step 6 of 7 Loan Disbursement API step

Disburse Loan via SPEI

Send approved loan principal from your MXN Cobre Balance to the borrower's CLABE counterparty. Amount is in cents (100000 = MXN 1,000.00). SPEI metadata requires a numeric reference (≤7 digits). Reuse the same idempotency header when retrying a timed-out POST — valid 24h.

POST https://api.cobre.co/v1/money_movements
Headers
AuthorizationBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjbGlfbWV4X2xlbmRlcl8wMSJ9.Mx7Kp3nQ9xY2mLd8vBw1aF6cR0eH4tJ5gZ
Content-Typeapplication/json
idempotency123456789
Request body
{
"amount": 100000,Amount (cents)Requiredi100000 cents = MXN 1,000.00.
"source_id": "acc_MxnLender01",Source balanceRequirediCobre id of the source account or counterparty.
"destination_id": "cp_MxBorrow01",Destination counterpartyRequirediCobre id of the destination account or counterparty.
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"description": "Loan disbursement",DescriptioniOptional SPEI description, max 40 characters.
"reference": "1234567"SPEI referenceRequirediNumeric reference, 1–7 digits — required for SPEI payouts.
},
"external_id": "loan_000123"External ID (loan)iYour loan id — primary reconciliation join key.
}
Response 201
{
"id": "mm_SpeiLoan123",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": "Loan disbursement",DescriptioniOptional SPEI description, max 40 characters.
"reference": "1234567"SPEI referenceRequirediNumeric reference, 1–7 digits — required for SPEI payouts.
},
"creator": "cli_mex_lender_01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user.
"external_id": "loan_000123",External ID (loan)iYour loan id — primary reconciliation join key.
"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_MxnLender01",Source balanceRequirediCobre id of the source account or counterparty.
"destination_id": "cp_MxBorrow01",Destination counterpartyRequirediCobre id of the destination account or counterparty.
"currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn).
"amount": 100000,Amount (cents)Requiredi100000 cents = MXN 1,000.00.
"created_at": "2026-06-28T10:20:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-28T10:20:00Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).
}

Webhook outcomesMoney movement

SPEI completed — mark the loan disbursed on your ledger using external_id. Persist tracking_key and cep_url from metadata for audit and SPEI receipt download.

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.

Event money_movements.status.completed
Headers
Content-Typeapplication/json
Example payload
{
"id": "ev_SpeiLoan123Cmp",IdiUnique Cobre identifier for this resource.
"event_key": "money_movements.status.completed",Event KeyiWebhook subscription key (e.g. money_movements.status.completed).
"created_at": "2026-06-28T10:22:30Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"content": {ContentiEvent-specific payload — same layout as the GET response for that resource.
"id": "mm_SpeiLoan123",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": "Loan disbursement",DescriptioniHuman-readable label or note.
"reference": "1234567",ReferenceiPayment reference echoed in metadata for reconciliation.
"tracking_key": "20240624mmbgu7gkQwofrb9o",Tracking KeyiNetwork tracking key for the payment (PSE ticket or Bre-B key).
"cep_url": "https://cep.banco.com/download"Cep UrliMetadata field "cep_url" attached to the resource.
},
"creator": "cli_mex_lender_01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user.
"external_id": "loan_000123",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_MxnLender01",Source IdiCobre id of the source account or counterparty.
"destination_id": "cp_MxBorrow01",Destination IdiCobre id of the destination account or counterparty.
"currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn).
"amount": 100000,AmountiAmount in cents — the last two digits are decimals.
"created_at": "2026-06-28T10:20:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-28T10:22:30Z"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):

Possible status codes
CodeDescriptionApplies to
F001Payment processing failed please try again.Payin and payout
F002NSF - Not Sufficient Funds in the designated account.Payin and payout
F004Daily transaction amount limit has been reached.Payin and payout
F005Amount exceeds the maximum allowed transaction limit.Payin and payout
F098Could not process the money movement at this time.Payin and payout
F099Could not process the money movement at this time.Payin and payout
Event money_movements.status.failed
Headers
Content-Typeapplication/json
Example payload
{
"id": "ev_SpeiLoan123Cmp",IdiUnique Cobre identifier for this resource.
"event_key": "money_movements.status.failed",Event KeyiWebhook subscription key (e.g. money_movements.status.completed).
"created_at": "2026-06-28T10:22:30Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"content": {ContentiEvent-specific payload — same layout as the GET response for that resource.
"id": "mm_SpeiLoan123",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": "Loan disbursement",DescriptioniHuman-readable label or note.
"reference": "1234567",ReferenceiPayment reference echoed in metadata for reconciliation.
"tracking_key": "20240624mmbgu7gkQwofrb9o",Tracking KeyiNetwork tracking key for the payment (PSE ticket or Bre-B key).
"cep_url": "https://cep.banco.com/download"Cep UrliMetadata field "cep_url" attached to the resource.
},
"creator": "cli_mex_lender_01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user.
"external_id": "loan_000123",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_MxnLender01",Source IdiCobre id of the source account or counterparty.
"destination_id": "cp_MxBorrow01",Destination IdiCobre id of the destination account or counterparty.
"currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn).
"amount": 100000,AmountiAmount in cents — the last two digits are decimals.
"created_at": "2026-06-28T10:20:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-28T10:22:30Z"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):

Possible status codes
CodeDescriptionApplies to
R000Transaction rejected.Payin and payout
R001Inactive or blocked account.Payin and payout
R002Account and identification provided do not coincide.Payin and payout
R004ID not valid.Payout
R005Account does not exist.Payin and payout
R006Invalid account number.Payin and payout
R009Exceeds maximum allowed amount.Payin and payout
R010Account not authorized to debit.Payin and payout
R011Invalid Account type.Payout
R015Account not authorized to be credited.Payout
R018Payment rejected due invalid key.Payout
R023Payment cancelled by the user.Payin and payout
R024Exceeds maximum allowed number of transactions.Payout
R025Required information missing.Payout
R026Payment rejected due to unavailable bank services.Payin and payout
R027Account exceeds the maximum allowed transaction limit.Payin and payout
R034Account closed.Payin and payout
R085Bank processing error.Payout
Event money_movements.status.rejected
Headers
Content-Typeapplication/json
Example payload
{
"id": "ev_SpeiLoan123Cmp",IdiUnique Cobre identifier for this resource.
"event_key": "money_movements.status.rejected",Event KeyiWebhook subscription key (e.g. money_movements.status.completed).
"created_at": "2026-06-28T10:22:30Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"content": {ContentiEvent-specific payload — same layout as the GET response for that resource.
"id": "mm_SpeiLoan123",IdiUnique Cobre identifier for this resource.
"status": {StatusiLifecycle status object for the resource or movement.
"state": "rejected",StateiCurrent lifecycle state (e.g. completed, failed, rejected).
"code": "R018",CodeiProvider or Cobre status code when the state is failed or rejected.
"description": "Payment rejected due invalid key."DescriptioniHuman-readable label or note.
},
"metadata": {MetadataiCustom key-value metadata attached to the resource.
"description": "Loan disbursement",DescriptioniHuman-readable label or note.
"reference": "1234567",ReferenceiPayment reference echoed in metadata for reconciliation.
"tracking_key": "20240624mmbgu7gkQwofrb9o",Tracking KeyiNetwork tracking key for the payment (PSE ticket or Bre-B key).
"cep_url": "https://cep.banco.com/download"Cep UrliMetadata field "cep_url" attached to the resource.
},
"creator": "cli_mex_lender_01",CreatoriActor that created the resource. On a Checkout-created Money Movement this is the r2p source counterparty (cp_…), not the API user.
"external_id": "loan_000123",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_MxnLender01",Source IdiCobre id of the source account or counterparty.
"destination_id": "cp_MxBorrow01",Destination IdiCobre id of the destination account or counterparty.
"currency": "mxn",CurrencyiISO currency code (e.g. cop, mxn).
"amount": 100000,AmountiAmount in cents — the last two digits are decimals.
"created_at": "2026-06-28T10:20:00Z",Created AtiTimestamp when the resource was created (ISO 8601, UTC).
"updated_at": "2026-06-28T10:22:30Z"Updated AtiTimestamp of the last update (ISO 8601, UTC).
}
}
Step 7 of 7 Reconciliation Reconciliation

Reconcile the SPEI Disbursement

Match the completion webhook to your loan ledger on external_id and mm_id. Cross-check the MXN balance debit via GET /accounts/{acct_id}/transactions. For D+1 close, export SPEI movements with POST /reports.

Mapping the webhook payload from an earlier step onto Loan ledger. No API call is made — this step closes the loop in your own system.

Cobre field & valueLoan ledger field
content.external_id
loan_000123
loan_id
Primary join key — your loan record id.
content.id
mm_SpeiLoan123
cobre_mm_id
Canonical Money Movement id from Cobre.
content.metadata.tracking_key
20240624mmbgu7gkQwofrb9o
spei_tracking_key
SPEI network tracking key — store for audit.
content.metadata.cep_url
https://cep.banco.com/download
spei_receipt_url
CEP (Comprobante Electrónico de Pago) download URL.
content.status.state
completed
disbursement_status
Map completed → FUNDED; failed/rejected/returned → review.
content.amount
100000
disbursed_amount_cents