Skip to main content

Transfers

Overview

This page covers the key requirements and transfer-specific details you need before sending transfer requests with Celar.

Supported Operation Types

Operation TypeDescriptionSignature Required (Non USA customers)
fiat_payoutConvert cryptocurrency to fiat currency and send to external bank/mobile money accountsRequired
payinAccept cryptocurrency deposits into a PSP or customer walletNot Required
payoutSend cryptocurrency from a Celar wallet to any external wallet addressNot Required
refundReturn funds to the original payment source, triggered by PSP refund requestsNot Required
fiat_payinAccept fiat payments and convert to stablecoins in a Celar walletRequired

Prerequisites

API Authentication

  • Valid API key with appropriate permissions
  • Bearer token authentication for all requests
  • Idempotency key for preventing duplicate operations

Understanding Signatures

Signatures are cryptographic tokens required for fiat-related operations (fiat_payout and fiat_payin). They authorize currency conversion requests and ensure rate integrity.

Important: Signatures are optional for US customers. Always generate signatures using the Rates API immediately before making transfer requests to ensure accurate exchange rates.

Understanding Transfer Types

Transfer types are used for fiat_payout and fiat_payin operations to specify the method of fund delivery. They apply only to US-based customers - non-US customers use standard bank or mobile money routing and do not set a transfer_type.

United States Only

transfer_type is required on fiat payin and fiat payout requests for US customers. Omitting it for a US customer will fail validation.

Fiat payin - set on source.transfer_type:

ValueDescription
wireBank wire transfer - fast, for large amounts
ach_debitACH pull from the customer's linked bank account (1-3 business days)

Fiat payout - set on destination.transfer_type:

ValueDescription
ach_creditStandard ACH push to the customer's bank (1-3 business days)
same_day_ach_creditSame-day ACH - expedited delivery within the business day
rtp_creditReal-time payment - instant delivery

ach_debit requires the customer's bank to be linked via Plaid. See Plaid Bank Linkage below.

Transfer Components

Every transfer consists of two main parts:

ComponentDescription
SourceDefines where funds originate (crypto wallet or fiat account)
DestinationDefines where funds are delivered

Purpose of Transaction

purpose_of_transaction specifies the business or personal reason for a fiat payout. It helps classify the transfer for compliance, reporting, and payout processing.

Supported values
ValueDescription
GOODS_PURCHASEPayment for physical goods or merchandise.
SERVICES_PAYMENTPayment for services rendered.
INVOICE_PAYMENTSettlement of an issued invoice.
LOAN_REPAYMENTRepayment of a loan or credit obligation.
BILLS_PAYMENTPayment of utilities, subscriptions, or recurring bills.
SALARY_AND_WAGESSalary, payroll, or wage disbursement.
P2P_TRANSFERPerson-to-person transfer between individuals.
REMITTANCEDomestic or cross-border transfer to a beneficiary.
DONATIONCharitable or personal donation.
GRANTS_AND_SCHOLARSHIPSFunding for grants, bursaries, or scholarships.
TRAVEL_AND_ACCOMMODATIONPayment for travel, lodging, or related expenses.
TAX_PAYMENTTax remittance to a government or regulatory authority.
INSURANCE_PREMIUMPayment of an insurance premium.
FAMILY_SUPPORTFinancial support sent to family members.
EDUCATIONTuition fees, school expenses, or educational costs.
GIFT_AND_DONATIONPersonal gift or charitable contribution.
MEDICAL_TREATMENTPayment for medical or healthcare services.
MAINTENANCE_EXPENSESOngoing maintenance or upkeep costs.
TRAVELTravel-related expenses.
SMALL_VALUE_REMITTANCELow-value cross-border remittance.
LIBERALIZED_REMITTANCERemittance under a liberalized scheme.
CONSTRUCTION_EXPENSESCosts related to construction or building projects.
HOTEL_ACCOMMODATIONPayment for hotel or lodging services.
ADVERTISING_EXPENSESMarketing or advertising costs.
ADVISORY_FEESFees for consulting or advisory services.
BUSINESS_INSURANCEBusiness-related insurance payment.
INSURANCE_CLAIMSPayment of an insurance claim.
DELIVERY_FEESShipping or delivery charges.
EXPORTED_GOODSPayment for goods exported internationally.
SERVICE_CHARGESGeneral service or processing charges.
LOAN_PAYMENTLoan instalment or repayment.
OFFICE_EXPENSESOffice supplies or operational costs.
PROPERTY_PURCHASEPayment for real estate or property acquisition.
PROPERTY_RENTALRent payment for residential or commercial property.
ROYALTY_FEESRoyalties for intellectual property or licensing.
SHARES_INVESTMENTInvestment in shares or equities.
FUND_INVESTMENTInvestment into a fund or financial instrument.
TRANSPORTATION_FEESTransport or logistics costs.
UTILITY_BILLSPayment for electricity, water, gas, or internet.
PERSONAL_TRANSFERGeneral personal transfer with no specific category.
SALARY_PAYMENTSalary disbursement to an employee.
OTHER_FEESMiscellaneous fees not covered by other categories.
COMPUTER_SERVICESPayment for IT or software services.
REWARD_PAYMENTReward, bonus, or incentive payment.
INFLUENCER_PAYMENTPayment to a content creator or influencer.

Plaid Bank Linkage (US Only)

Plaid linkage is optional for US customers. It is required only when using ach_debit (pulling funds from the customer's bank account for a fiat payin). For wire transfers, ach_credit, same_day_ach_credit, and rtp_credit payouts, Plaid linkage is not needed - the bank details added via PATCH /customers/payment-details are used directly.

Request a short-lived token to initialise the Plaid Link UI in your frontend.

curl --request GET \
--url 'https://api.sandbox.celar.io/api/v1/customers/plaid-token?customer_id=cr_53c79dae85d2cee2' \
--header 'Authorization: Bearer <your_api_key>'

Pass the returned link_token to the Plaid Link SDK. The customer authenticates and selects their bank account inside Plaid Link. On success, Plaid returns a public_token to your callback.

Step 2: Register the institution

Exchange the public_token for a permanent bank linkage. Declare which transfer types the customer is permitted to use via transfer_types.

curl --request POST \
--url https://api.sandbox.celar.io/api/v1/customers/institution \
--header 'Authorization: Bearer <your_api_key>' \
--header 'Content-Type: application/json' \
--data '{
"customer_id": "cr_53c79dae85d2cee2",
"public_token": "<plaid_public_token>",
"customer_webhook_url": "https://your-app.com/webhooks/plaid",
"transfer_types": ["ach_debit", "ach_credit", "rtp_credit"]
}'
FieldRequiredDescription
customer_idYesThe customer whose bank account is being linked
public_tokenYesShort-lived token returned by Plaid Link on success
customer_webhook_urlYesHTTPS URL Plaid will call with transfer status updates
transfer_typesYesArray of permitted transfer types - at least one of ach_debit, ach_credit, rtp_credit

Response

{
"message": "Financial institution registered successfully",
"address_id": "addr_a1b2c3d4e5f6"
}

The address_id identifies the Plaid-linked bank address and is stored on the customer record by Celar for routing ACH and RTP transfers.