Skip to main content
Paycrest supports fiat currencies across multiple countries and regions, with delivery channels including bank transfers and mobile payments. New corridors launch only when committed liquidity providers are onboarded and tested.

Active Corridors

CountryFlagCurrencyCodeChannels
NigeriaπŸ‡³πŸ‡¬Nigerian NairaNGNBank, Mobile
KenyaπŸ‡°πŸ‡ͺKenyan ShillingKESBank, Mobile
UgandaπŸ‡ΊπŸ‡¬Ugandan ShillingUGXBank, Mobile
TanzaniaπŸ‡ΉπŸ‡ΏTanzanian ShillingTZSBank, Mobile
MalawiπŸ‡²πŸ‡ΌMalawi KwachaMWKBank, Mobile
BrazilπŸ‡§πŸ‡·Brazilian RealBRLMobile (PIX)

Delivery Channel Matrix

CurrencyBank TransferMobile / Wallet
NGNβœ…βœ…
KESβœ…βœ…
UGXβœ…βœ…
TZSβœ…βœ…
MWKβœ…βœ…
BRLβŒβœ… (PIX)

Integration Examples

Bank Transfer (Nigeria)

const order = {
  amount: "100",
  source: {
    type: "crypto",
    currency: "USDT",
    network: "base",
    refundAddress: "0xYourAddress"
  },
  destination: {
    type: "fiat",
    currency: "NGN",
    recipient: {
      institution: "GTBINGLA",
      accountIdentifier: "1234567890",
      accountName: "John Doe",
      memo: "Salary payment"
    }
  }
};

Mobile Money (Kenya)

Phone M-Pesa, Till (buy goods), and Paybill all use a KES mobile institution (typically SAFAKEPC). Set destination.recipient.metadata.channel to Mobile, Till, or Paybill. Full rules and KYC notes are in Sender API Integration β€” KES mobile money. Phone M-Pesa
const order = {
  amount: "50",
  source: {
    type: "crypto",
    currency: "USDC",
    network: "base",
    refundAddress: "0xYourAddress"
  },
  destination: {
    type: "fiat",
    currency: "KES",
    recipient: {
      institution: "SAFAKEPC",
      // Local (07…) or international (254…) MSISDN; API normalizes on create and verify-account
      accountIdentifier: "0712345678",
      accountName: "Jane Smith",
      memo: "Mobile payment",
      metadata: { channel: "Mobile" }
    }
  }
};
Till
recipient: {
  institution: "SAFAKEPC",
  accountIdentifier: "123456",
  accountName: "Shop Name",
  memo: "Payment",
  metadata: { channel: "Till" }
}
Paybill
recipient: {
  institution: "SAFAKEPC",
  accountIdentifier: "INV-001",
  accountName: "Customer",
  memo: "Bill pay",
  metadata: { channel: "Paybill", businessNumber: "400200" }
}

PIX (Brazil)

const order = {
  amount: "200",
  source: {
    type: "crypto",
    currency: "USDT",
    network: "arbitrum-one",
    refundAddress: "0xYourAddress"
  },
  destination: {
    type: "fiat",
    currency: "BRL",
    recipient: {
      institution: "PIXKBRPC",
      accountIdentifier: "[email protected]",
      accountName: "JoΓ£o Silva",
      memo: "PIX payment"
    }
  }
};

Rate Information

Exchange rates are dynamic and depend on:
  • Market conditions: Real-time forex rates
  • Provider competition: Multiple providers competing per corridor
  • Transaction volume: Higher volumes may get better rates
Use the GET /rates endpoint to fetch the current achievable rate before creating an order.
All supported currencies are actively monitored for compliance and regulatory requirements. Delivery times and fees may vary by provider and region.

API Endpoints

  • GET /currencies β€” Get all supported fiat currencies with current market rates
  • GET /institutions/ β€” Get supported banks and mobile payment providers for a specific currency
Currency codes follow the ISO 4217 standard. Institution codes use SWIFT codes (first 7 characters) for international banks, or custom codes ending with PC for local institutions. See Code Standards for details.