Sending Cross-Border Payments

How do I send cross-border payments?

This guide walks you through the process of sending funds from a Cybrid trading account to a foreign bank account using the remittance product. This enables cross-border payments with automatic currency conversion and competitive exchange rates.

👍

Please contact Cybrid support if you want the remittance feature enable on your bank

Prerequisites

Before you begin, ensure you have:

  • Customer and Counterparty entities already created and verified
  • A trading Account with sufficient funds
  • The foreign bank account routing details (CLABE, etc.)

Overview

The remittance process involves five main steps:

  1. Create an external bank account with routing details
  2. Create a remittance plan
  3. Wait for remittance planning completion
  4. Execute the plan
  5. Monitor execution completion

❗️

Important: The remittance process involves currency conversions to facilitate the cross-border payment. If the final withdrawal to the destination bank account fails after conversions have occurred, any reversals may incur fees.

❗️

Important: It is HIGHLY recommended that you perform test deposits for new bank accounts and that your customers double-check all external bank account routing details before execution

Common issues that cause withdrawal failures include:

  • Incorrect CLABE numbers or routing codes
  • Mismatched account holder names
  • Invalid or closed bank accounts
  • Incorrect bank identifiers

Step 1: Create External Bank Account

First, create an external bank account record with the raw routing details for your destination bank account, see Foreign Fiat External Bank Accounts

Step 2: Create Remittance Plan

Create a plan that calculates estimated amounts, fees, and exchange rates.

Request

POST /api/plans
Authorization: Bearer <token>
Content-Type: application/json
{
  "type": "remittance",
  "customer_guid": "b3a9d531c26892954661735e1b7482b7",
  "source_account": {
    "guid": "866469e21559eb3d453e4d5f5c4a9be4"
  },
  "destination_account": {
    "guid": "b17ebd247e34a507b6c80ea15d90fc66",
    "amount": 10000
  },
  "travel_rule_info": {
    "ultimate_originating_party_guid": "917b94bf859e625387da03aca58e8a43",
    "ultimate_receiving_party_guid": "bf7562ab734cc61d8ea7e5e0180bd74f"
  }
}

Key Data:

  • Source account (required): The cryptocurrency trading account from where the remittance is being paid from. If the amount is specified, the plan will ensure that will be the deliver amount.
  • Destination account(required): The destination currency external account where the remittance is being paid to. If the amount is specified, the plan will ensure the specified amount will be deposited in the recipient bank account.
  • Travel rule info (optional): This information is required only when the originator is not the holder of the trading account or when the receiver is not the holder of the external bank account.

Response

Initially, the plan will return in "storing" state while rates and fees are calculated.

Step 3: Wait for Planning to Complete

Poll the plan endpoint until the state changes to "completed", indicating it's ready for execution.

Request

GET /api/plans/4384639658a5970ca442030d4d1eae98
Authorization: Bearer <token>

Response (when completed)

{
  "created_at": "2025-10-04T12:59:15.732645Z",
  "updated_at": "2025-10-04T12:59:17.249897Z",
  "guid": "4384639658a5970ca442030d4d1eae98",
  "state": "completed",
  "type": "remittance",
  "customer_guid": "b3a9d531c26892954661735e1b7482b7",
  "failure_code": null,
  "stages": [
    {
      "created_at": "2025-10-04T12:59:17.132720Z",
      "updated_at": "2025-10-04T12:59:17.132720Z",
      "guid": "05a518360c38ea017eb8fb539665fdc6",
      "type": "payout",
      "failure_code": null,
      "state": "planned",
      "source_account": {
        "guid": "866469e21559eb3d453e4d5f5c4a9be4",
        "asset": "USDC",
        "type": "trading",
        "bank_guid": "917b94bf859e625387da03aca58e8a43",
        "customer_guid": "b3a9d531c26892954661735e1b7482b7",
        "counterparty_guid": null,
        "requested_amount": null,
        "quoted_amount": 5531070,
        "executed_amount": null
      },
      "destination_account": {
        "guid": "b17ebd247e34a507b6c80ea15d90fc66",
        "asset": "MXN",
        "type": "external_bank_account",
        "bank_guid": "917b94bf859e625387da03aca58e8a43",
        "customer_guid": "b3a9d531c26892954661735e1b7482b7",
        "counterparty_guid": "bf7562ab734cc61d8ea7e5e0180bd74f",
        "requested_amount": 10000,
        "quoted_amount": 10000,
        "executed_amount": null
      },
      "fees": [
        {
          "type": "bank",
          "asset": "USDC",
          "quoted_amount": 27518,
          "executed_amount": null
        },
        {
          "type": "platform",
          "asset": "USDC",
          "quoted_amount": 27518,
          "executed_amount": null
        },
        {
          "type": "network",
          "asset": "ETH",
          "quoted_amount": 100000000000,
          "executed_amount": null
        }
      ]
    }
  ],
  "source_account": {
    "guid": "866469e21559eb3d453e4d5f5c4a9be4",
    "asset": "USDC",
    "type": "trading",
    "bank_guid": "917b94bf859e625387da03aca58e8a43",
    "customer_guid": "b3a9d531c26892954661735e1b7482b7",
    "counterparty_guid": null,
    "requested_amount": null,
    "quoted_amount": 5531070,
    "executed_amount": null
  },
  "destination_account": {
    "guid": "b17ebd247e34a507b6c80ea15d90fc66",
    "asset": "MXN",
    "type": "external_bank_account",
    "bank_guid": "917b94bf859e625387da03aca58e8a43",
    "customer_guid": "b3a9d531c26892954661735e1b7482b7",
    "counterparty_guid": "bf7562ab734cc61d8ea7e5e0180bd74f",
    "requested_amount": 10000,
    "quoted_amount": 10000,
    "executed_amount": null
  },
  "fees": [
    {
      "type": "bank",
      "asset": "USDC",
      "quoted_amount": 27518,
      "executed_amount": null
    },
    {
      "type": "platform",
      "asset": "USDC",
      "quoted_amount": 27518,
      "executed_amount": null
    },
    {
      "type": "network",
      "asset": "ETH",
      "quoted_amount": 100000000000,
      "executed_amount": null
    }
  ],
  "travel_rule_info": {
    "originating_party": {
      "participant_guid": "b3a9d531c26892954661735e1b7482b7",
      "type": "customer"
    },
    "receiving_party": {
      "participant_guid": "bf7562ab734cc61d8ea7e5e0180bd74f",
      "type": "counterparty"
    },
    "ultimate_originating_party": {
      "participant_guid": "917b94bf859e625387da03aca58e8a43",
      "type": "bank"
    },
    "ultimate_receiving_party": {
      "participant_guid": "bf7562ab734cc61d8ea7e5e0180bd74f",
      "type": "counterparty"
    }
  }
}

Key Data:

  • Source account: The quoted amount will represent the cryptocurrency amount that will be used from the trading account to perform the remittance. If the source account requested amount was specified, the quoted amount will match the requested amount.
  • Destination account: The quoted amount will represent the destination currency amount that will be deposited in the external bank account. If the destination account requested amount was specified, the quoted amount will match the requested amount.
  • Fees: A collection of fees will be associated with the remittance. Some of the fees' quoted amounts represent an estimate and the value may change when the remittance will be executed.
  • Stages: Stages will provide a view into the lifecycle of a plan. For the remittance product, at this time, there will be only one stage payout where the funds are being transferred from the trading account to the external bank account.

Step 4: Execute the Remittance Plan

Once the remittance is planned, execute it by creating an execution.

Request

POST /api/executions
Authorization: Bearer <token>
Content-Type: application/json
{
  "plan_guid": "4384639658a5970ca442030d4d1eae98"
}

Response

Returns a "storing" state while the Platform executes the remittance.

Step 5: Monitor Execution Completion

Poll the execution endpoint until the state changes to "completed".

Request

GET /api/executions/078ee1657c260ccec6a28979af794731
Authorization: Bearer <token>

Response (When Completed)

{
  "created_at": "2025-10-04T14:25:22.816775Z",
  "updated_at": "2025-10-04T14:28:48.663787Z",
  "guid": "36f9be52550467d7e30836d7134c63f7",
  "state": "completed",
  "type": "remittance",
  "plan_guid": "4384639658a5970ca442030d4d1eae98",
  "customer_guid": "b3a9d531c26892954661735e1b7482b7",
  "failure_code": null,
  "stages": [
    {
      "created_at": "2025-10-04T14:24:55.865059Z",
      "updated_at": "2025-10-04T14:28:48.562584Z",
      "guid": "70417e8d025492383679cb6247d5d683",
      "type": "payout",
      "failure_code": null,
      "state": "completed",
      "source_account": {
        "guid": "866469e21559eb3d453e4d5f5c4a9be4",
        "asset": "USDC",
        "type": "trading",
        "bank_guid": "917b94bf859e625387da03aca58e8a43",
        "customer_guid": "b3a9d531c26892954661735e1b7482b7",
        "counterparty_guid": null,
        "requested_amount": null,
        "quoted_amount": 5532205,
        "executed_amount": 5532205
      },
      "destination_account": {
        "guid": "b17ebd247e34a507b6c80ea15d90fc66",
        "asset": "MXN",
        "type": "external_bank_account",
        "bank_guid": "917b94bf859e625387da03aca58e8a43",
        "customer_guid": "b3a9d531c26892954661735e1b7482b7",
        "counterparty_guid": "bf7562ab734cc61d8ea7e5e0180bd74f",
        "requested_amount": 10000,
        "quoted_amount": 10000,
        "executed_amount": 10000
      },
      "fees": [
        {
          "type": "bank",
          "asset": "USDC",
          "quoted_amount": 27524,
          "executed_amount": 27524
        },
        {
          "type": "platform",
          "asset": "USDC",
          "quoted_amount": 27524,
          "executed_amount": 27524
        },
        {
          "type": "network",
          "asset": "ETH",
          "quoted_amount": 100000000000,
          "executed_amount": 100000000000
        }
      ]
    }
  ],
  "source_account": {
    "guid": "866469e21559eb3d453e4d5f5c4a9be4",
    "asset": "USDC",
    "type": "trading",
    "bank_guid": "917b94bf859e625387da03aca58e8a43",
    "customer_guid": "b3a9d531c26892954661735e1b7482b7",
    "counterparty_guid": null,
    "requested_amount": null,
    "quoted_amount": 5532205,
    "executed_amount": null
  },
  "destination_account": {
    "guid": "b17ebd247e34a507b6c80ea15d90fc66",
    "asset": "MXN",
    "type": "external_bank_account",
    "bank_guid": "917b94bf859e625387da03aca58e8a43",
    "customer_guid": "b3a9d531c26892954661735e1b7482b7",
    "counterparty_guid": "bf7562ab734cc61d8ea7e5e0180bd74f",
    "requested_amount": 10000,
    "quoted_amount": 10000,
    "executed_amount": 10000
  },
  "fees": [
    {
      "type": "bank",
      "asset": "USDC",
      "quoted_amount": 27524,
      "executed_amount": 27524
    },
    {
      "type": "platform",
      "asset": "USDC",
      "quoted_amount": 27524,
      "executed_amount": 27524
    },
    {
      "type": "network",
      "asset": "ETH",
      "quoted_amount": 100000000000,
      "executed_amount": 100000000000
    }
  ],
  "travel_rule_info": {
    "originating_party": {
      "participant_guid": "b3a9d531c26892954661735e1b7482b7",
      "type": "customer"
    },
    "receiving_party": {
      "participant_guid": "bf7562ab734cc61d8ea7e5e0180bd74f",
      "type": "counterparty"
    },
    "ultimate_originating_party": {
      "participant_guid": "917b94bf859e625387da03aca58e8a43",
      "type": "bank"
    },
    "ultimate_receiving_party": {
      "participant_guid": "bf7562ab734cc61d8ea7e5e0180bd74f",
      "type": "counterparty"
    }
  }
}

Key Data:

  • Source account: The executed amount will represent the cryptocurrency withdrawn from the trading account to perform the remittance. For the remittance product, the executed amount will match the quoted amount.
  • Destination account: The executed amount will represent the destination currency amount deposited in the external bank account. For the remittance product, the executed amount will match the quoted amount.
  • Fees: The executed amount will represent the fees collected to perform the remittance.