Skip to main content

Overview

An offramp gives your customer a crypto address for sending USDC or USDT into Daya. Daya records the incoming crypto as a deposit, then sends the value as Naira to a Nigerian bank account. New integrations create offramps with Funding Accounts. In the API, an offramp is a funding account with:
FieldValue
railCRYPTO_ADDRESS
assetUSDC or USDT
chainSupported network
typeTEMPORARY or PERMANENT
The older /v1/offramps routes still exist for existing integrations. New integrations should create offramps with /v1/funding-accounts.

Customer

Every offramp belongs to a customer. Create the customer first with POST /v1/customers, then pass customer.customer_id when creating the funding account. A customer can have multiple temporary offramps. Permanent offramps are reused when there is already a live one for the same customer, asset, and chain.

Temporary Offramps

Use a temporary offramp for one crypto deposit that should pay out to a Nigerian bank account.
BehaviorDetails
PurposeOne-off crypto deposit
Asset and chainRequired
ReuseNever reused
Address expiryYes. Funds must arrive before the address expires
SettlementNGN_PAYOUT only
RateValid SELL rate_id required
Bank accountResolve before creating the offramp
Create a temporary offramp in this order:
  1. Get a SELL rate with GET /v1/rates?side=SELL.
  2. List banks with GET /v1/banks.
  3. Resolve the destination account with POST /v1/banks/resolve.
  4. Create the offramp with /v1/funding-accounts.
  5. Display the crypto address, asset, chain, and expiry time to the customer.
Tell the customer to send only the selected asset on the selected chain. Deposits sent after expiry are flagged for review instead of settling automatically.
Temporary offramp to NGN payout
{
  "type": "TEMPORARY",
  "rail": "CRYPTO_ADDRESS",
  "customer": {
    "customer_id": "650e8400-e29b-41d4-a716-446655440000"
  },
  "asset": "USDC",
  "chain": "BASE",
  "settlement_destination": {
    "type": "NGN_PAYOUT",
    "rate_id": "550e8400-e29b-41d4-a716-446655440000",
    "destination_bank": {
      "account_number": "0123456789",
      "bank_code": "058"
    }
  }
}

Permanent Offramps

Use a permanent offramp when the same customer should keep the same crypto address for repeat deposits.
BehaviorDetails
PurposeLong-lived crypto deposit address
Asset and chainRequired
ReuseOne live permanent address per merchant, customer, asset, and chain
Address expiryNo expiry while active
SettlementINTERNAL_BALANCE or NGN_PAYOUT
RateApplied when each deposit settles
If a live permanent offramp already exists for that customer, asset, and chain, Daya returns the same address. Updating settlement does not change the crypto address shown to the customer.
Permanent offramp to Daya balance
{
  "type": "PERMANENT",
  "rail": "CRYPTO_ADDRESS",
  "customer": {
    "customer_id": "650e8400-e29b-41d4-a716-446655440000"
  },
  "asset": "USDC",
  "chain": "BASE",
  "settlement_destination": {
    "type": "INTERNAL_BALANCE"
  }
}

Bank Payouts

For NGN_PAYOUT, resolve the bank account before creating the offramp:
  1. List supported banks with GET /v1/banks.
  2. Resolve the account with POST /v1/banks/resolve.
  3. Send the verified account_number and bank_code in destination_bank.
Daya resolves and stores the account name. You do not send account_name in the funding account request.
Invalid bank accounts are rejected. Always resolve the bank account before creating an offramp with NGN_PAYOUT.

Settlement

Choose where the crypto value goes after Daya receives the deposit.
Settlement destinationWhat happensAllowed types
INTERNAL_BALANCEFunds are credited to your Daya balancePERMANENT
NGN_PAYOUTFunds are converted to NGN and paid to a Nigerian bank accountTEMPORARY, PERMANENT
Temporary offramps support NGN_PAYOUT only. Permanent offramps support INTERNAL_BALANCE and NGN_PAYOUT.

Supported Chains

Offramps support APTOS, BASE, CELO, ETHEREUM, POLYGON, SOLANA, and TRON. See Supported Chains for the full deposit and withdrawal matrix per environment.

Track Deposits

Use /v1/deposits to reconcile money received through offramps. Deposit responses include funding_account_id, asset, chain, and tx_hash. Listen for:
EventMeaning
funding_account.activeCrypto address is ready
deposit.receivedDaya recorded the incoming crypto deposit
deposit.processingSettlement has started
deposit.completedSettlement reached its destination
deposit.requires_reviewThe deposit needs review before continuing

Next Steps

Create Funding Account

Create an offramp with a crypto address.

Banks

Resolve a bank account before NGN payout.

Deposits

Reconcile crypto deposits.