Transfers with Local Currency (Beta)

🚧

This feature is currently in beta

If you’re an existing user and would like to become a pilot partner, please contact our support team. Contact us


OwlPay Harbor now supports cross-border transfers to multiple regions worldwide, allowing developers and businesses to easily convert USDC into local currencies and send funds directly to recipients’ bank accounts.

Supported Countries & Currencies

OwlPay Harbor currently supports transfers to the following regions and local currencies:

  • 🇲🇽 Mexico – MXN
  • 🇧🇷 Brazil – BRL
  • 🇪🇺 European Union – EUR
  • 🇳🇬 Nigeria – NGN
  • 🇭🇰 Hong Kong – HKD

API Flow Overview

The OwlPay Harbor Transfer API uses a two-step process to ensure real-time FX rates and secure fund settlement.


Step 1: Get a Quote

First, call the Quote API to obtain an exchange rate and conversion preview:

📘

Source Amount & Destination Amount

We support quotes by source amount and by destination amount. You can quote how much the recipient receives or how much the sender needs to pay.


Request Example (Source amount):

curl --location --request POST 'https://harbor-sandbox.owlpay.com/api/v1/transfers/quotes' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'X-API-KEY: {{API_KEY}}' \
--header 'Idempotency-Key: {{Idempotency-Key}}' \
--data-raw '{
  "source": {
      "country": "US",
      "currency": "USDC",
      "amount": "100.00"
  },
  "destination": {
      "country": "BR",
      "currency": "BRL",
  }
}'

Request Example (Destination amount):

curl --location --request POST 'https://harbor-sandbox.owlpay.com/api/v1/transfers/quotes' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'X-API-KEY: {{API_KEY}}' \
--header 'Idempotency-Key: {{Idempotency-Key}}' \
--data-raw '{
  "source": {
      "country": "US",
      "currency": "USDC"
  },
  "destination": {
      "country": "BR",
      "currency": "BRL",
      "amount": "100.00"
  }
  "commission": {
      "percentage": "0",
      "amount": "1.00"
  },
}'

Response with Source amount:

{
  "data": [
    {
      "id": "ab8fc5e8-d0af-448b-b9d0-eca30533d436",
      "object": "quote",
      "payment_method": "PIX",
      "chain": "ethereum",
      "sender_country": "US",
      "destination_country": "BR",
      "source_amount": "100.000000",
      "source_currency": "USDC",
      "destination_amount": "538.340000",
      "destination_currency": "BRL",
      "exchange_rate": "5.383400",
      "exchange_pair": "USDC/BRL",
      "fiat_settlement_time_min": 0,
      "fiat_settlement_time_max": 5,
      "fiat_settlement_time_unit": "MINUTES",
      "fees_total_amount": "4.700000",
      "fees_total_currency": "USDC",
      "sender_type": "individual",
      "recipient_type": "business",
      "quote_expire_date": "2025-10-20T19:45:02.000000Z",
      "crypto_funds_settlement_expire_date": "2025-10-20T20:44:32.000000Z",
      "is_first_party": false,
      "fees": [
        {
          "type": "BFI_TRANSACTION_FEE",
          "amount": "1.000000",
          "currency": "USDC"
        },
        {
          "type": "TAX_FEE",
          "amount": "1.700000",
          "currency": "USDC"
        },
        {
          "type": "OWLTING_SERVICE_FEE",
          "amount": "1.000000",
          "currency": "USDC"
        },
        {
          "type": "COMMISSION_FEE",
          "amount": "1.000000",
          "currency": "USDC"
        }
      ],
      "created_at": "2025-10-20T19:44:33+00:00",
      "updated_at": "2025-10-20T19:44:33+00:00"
    }
  ]
}

Step 2: Create Transfer with Quote (quote_id)

Request Example (with quote_id)

curl --location --request POST 'https://harbor-sandbox.owlpay.com/api/v1/transfers' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'X-API-KEY: {{API_KEY}}' \
--header 'Idempotency-Key: {{Idempotency-Key}}' \
--data-raw '{
    "on_behalf_of": "{{YOUR_CUSTOMER_UUID}}",
    "source": {
        "chain": "ethereum"
    },
    "destination": {
        "customer_bank_account_id": "{{CUSTOMER_BANK_ACCOUNT_ID}}",
        "transfer_purpose": "Salary",
        "is_self_transfer": false,
        "supporting_document": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAOaCLP8AAAAASUVORK5CYII="
    },
    "application_transfer_uuid": "{{YOUR_APPLICATION_TRANSFER_UUID}}",
    "quote_id": "{{QUOTE_ID}}"
}'

Response:

{
    "data": {
        "uuid": "transfer_9r1k54ymg8xn9bleR88gWF4ItF4DGK4MR7ejuS6C",
        "status": "pending_customer_transfer_start",
        "on_behalf_of": "{{YOUR_CUSTOMER_UUID}}",
        "source": {
            "chain": "ethereum",
            "asset": "USDC",
            "amount": "100.00"
        },
        "destination": {
            "asset": "MXN",
            "is_self_transfer": false,
            "amount": "538.340000",
            "transfer_purpose": "Salary"
        },
        "application_transfer_uuid": "{{YOUR_APPLICATION_TRANSFER_UUID}}",
        "transfer_instructions": {
            "instruction_chain": "ethereum",
            "instruction_address": "0xbf2f9dd51e8f09408dea7334953398f06fff8959",
            "instruction_memo": null
        },
        "commission": {
            "percentage": "0",
            "amount": "1.00"
        },
        "receipt": {
            "initial_asset": "USDC",
            "initial_amount": "1000.00",
            "commission_fee": "1.00",
            "harbor_fee": "1.00",
            "others_fee": "2.70",
            "final_asset": "MXN",
            "final_amount": "533.64",
            "exchange_rate": "5.383400",
            "tracking_number": null
        },
        "expired_at": "2025-09-22T09:00:00+00:00",
        "created_at": "2025-09-22T08:00:00+00:00",
        "updated_at": "2025-09-22T08:00:00+00:00"
    }
}