Skip to main content

Simulate COP Deposit (Sandbox)

In sandbox, COP deposits are simulated end-to-end — you do not need to open the PSE link or complete any real bank transfer to finish the flow. This page explains how the simulation works so you can run through the full COP → crypto journey without touching real rails.

info

This behavior is sandbox only. In production the user must open the depositUrl in a browser and complete the actual PSE payment at their Colombian bank for the ticket to move beyond UNPAID.

What happens when you create a COP ticket in sandbox

  1. Quote + ticket — you call GET /v2/account/quote/fixed-rate and then POST /v2/account/tickets/ exactly like in production. The flow is identical from an API consumer perspective.
  2. Deposit URL — the ticket response includes a depositUrl shaped like https://links.avenia.cobre/<uuid>. It is intentionally non-resolving — it exists only to mirror the production response shape. Do not expect it to open a payment page.
  3. Auto-settlement (async) — a background job dispatches the equivalent of a payin_status_changed = COMPLETED webhook straight into the processing pipeline, without waiting for a real PSE payment.
  4. Ticket lifecycle completes — the ticket transitions UNPAID → PROCESSING → PAID, mock tokens are credited to the specified wallet, and the usual TICKET-CREATED, DEPOSIT-PROCESSING, DEPOSIT-SUCCESS, and TICKET-COMPLETE webhooks fire, matching production.

Typical end-to-end time: about 70 seconds between ticket creation and PAID (the bulk is the async token-mint step, not the deposit itself).

Amount limits

The simulation fires for COP deposits up to 700,000 COP (roughly equivalent to R$1,000 at current FX). Amounts above that cap are still accepted by the ticket API, but the auto-settlement is skipped — tickets stay UNPAID until manually completed. Keep test amounts under the cap.

Example

1. Quote

curl -X GET "https://api.sandbox.avenia.io:10952/v2/account/quote/fixed-rate?inputCurrency=COP&inputPaymentMethod=BANK-TRANSFER&inputAmount=500000&outputCurrency=USDC&outputPaymentMethod=INTERNAL&inputThirdParty=false&outputThirdParty=false&blockchainSendMethod=PERMIT" \
-H "Authorization: Bearer eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

2. Ticket

curl -X POST "https://api.sandbox.avenia.io:10952/v2/account/tickets/" \
-H "Authorization: Bearer eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
-H "Content-Type: application/json" \
-d '{
"quoteToken": "eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"ticketBlockchainOutput": {
"walletAddress": "0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"
}
}'

Sample response:

{
"id": "e0a5b2f2-c0d7-486c-a3dd-cb32a1715c51",
"depositUrl": "https://links.avenia.cobre/63144f74-52ac-48a8-a25c-7c5491dbbcbf",
"expiration": "2026-05-01T13:26:12.307Z"
}

3. Poll the ticket

Nothing else is required. Poll the ticket until it reports PAID:

curl -X GET "https://api.sandbox.avenia.io:10952/v2/account/tickets/e0a5b2f2-c0d7-486c-a3dd-cb32a1715c51" \
-H "Authorization: Bearer eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

You should see the status transition from UNPAIDPROCESSINGPAID within roughly a minute.

Simulating COP payouts

Crypto → COP (USDC → COP) payouts are simulated as well. Create the payout ticket with a registered COP beneficiary (see Beneficiary Bank Accounts > Bank Guide COP) and the ticket moves to PAID within a second — no real Mural payout is executed and no real COP is sent. Minimum amount remains 5 USDC.

What is not simulated

The following still hit Mural's real staging environment and behave exactly as production would:

  • Creating COP beneficiary bank accounts (POST /v2/account/beneficiaries/bank-accounts/cop/)
  • Listing supported COP banks (GET /.../cop/supported-banks)
  • KYC approval for new accounts

If any of those endpoints return an unexpected error in sandbox, it reflects a real issue with the upstream staging rail — not with the simulation.