1. Fiat
KuvarPay API
  • Overview
  • SDK Integration Guide
  • Webhooks Integration Guide
  • Subscriptions Guide
  • Split Payment Guide
  • Transactions
    • Calculate Payment Amount
      POST
    • Create Transaction
      POST
    • Get Transactions Details
      GET
    • Get Transactions
      GET
    • Get Transaction Status by Reference
      GET
    • Simulate payment for sandbox transactions
      POST
    • Get detailed payment status for a transaction
      GET
    • Manually trigger refund for excess payment
      POST
    • Get list of expired transactions
      GET
  • Checkout Sessions
    • Payment Status Webhook
      POST
    • Create Checkout Session
      POST
    • Get Checkout Session
      GET
  • Transfer Fees
    • Get Optimal Transfer Fee
      GET
    • Get Transfer Fee
      GET
    • Get currencies supported for transfers
      GET
  • Sandbox Simulator
    • Start the sandbox transaction simulator
      POST
    • Stop the sandbox transaction simulator
      POST
    • Force Simulator Scenario
      POST
    • Get Simulator Status
      GET
    • Update simulator configuration
      PUT
    • Force Transaction Status
      POST
    • Get Pending Transactions
      GET
    • Reset Sandbox Transactions
      POST
  • Invoices
    • Create a new invoice
    • Send invoice email to customer
  • Payment Links
    • Create a new payment link
  • Server-Sent Events (SSE)
    • Get Transaction Details
    • Get Session Details
    • Get Health
  • Subscriptions
    • Create Plans
    • Get Plans
    • Get Plans Details
    • Update Plans Details
    • Create Prices
    • Get Prices
    • Update Prices Details
    • Create Checkout Sessions
    • Get Checkout Sessions Details
    • Confirm Subscription Checkout
    • Create Subscriptions
    • Get Subscriptions
    • Get Subscriptions Details
    • Update Subscriptions Details
    • Delete Subscriptions Details
    • Confirm Subscription Cancellation
    • Renew Subscription
    • Upgrade Subscription
    • Downgrade Subscription
    • Renew Subscription Authorization
    • Create Subscription Invoices
    • Get Subscription Invoices
    • Create Metered Invoices
    • Get Subscription Invoices Details
    • Charge Subscription Invoice
    • Get Charge Attempts
    • Create Authorizations
    • Revoke Relay Authorization
    • Get Relay Authorization Status
  • Currencies
    • Get Subscription Currencies
    • Get networks supported for subscription payments
    • Get Currencies
    • Get all supported networks
    • Get Item Details
    • Get currency statistics
    • Get Supported Currencies
  • Subaccounts
    • Create Subaccount
    • List Subaccounts
    • Get Subaccount Details
    • Update Subaccount
    • Delete Subaccount
  • Banks
    • List supported banks
    • Resolve bank account
    • List banks by currency
  • Payment Fiat Rates
    • Get Item Details
    • Create Batch
    • Get Item Details
    • Get Currencies
    • Get Item Details
    • Get Fiat Rate Details
    • Get Fiat Rates
    • Create Update Ngn
    • Create Update All
    • Get Item Details
  • Split Payments
    • Create Split Group
    • List Split Groups
    • Get Split Group Details
    • Update Split Group
    • Delete Split Group
  • Fiat
    • List fiat payment methods
      GET
    • Resolve a payout recipient
      POST
    • Preview a fiat collection price
      GET
    • Create a fiat payout
      POST
    • Get payout status
      GET
  • Schemas
    • ErrorResponse
    • CreateInvoiceRequest
    • CreatePaymentLinkRequest
    • InvoiceResponse
    • PaymentLinkResponse
    • CreateInvoiceResponse
    • CreatePaymentLinkResponse
    • SendInvoiceEmailRequest
    • SendInvoiceEmailResponse
    • SubscriptionInvoice
Home
Home
  1. Fiat

Resolve a payout recipient

POST
/api/v1/fiat/resolve-recipient
Fiat
Name enquiry: confirms the legal name behind a payout destination before you initiate
the send. Requires a SECRET API key — publishable keys are rejected, to prevent
account-name harvesting.
SDK: sdk.resolveRecipient({ methodId, accountNumber | phone }). This is the
resolver for anything you got from sdk.getBanks. The SDK's deprecated
resolveBankAccount takes a legacy bank_code and does not understand a methodId —
do not use it here.
Pass the methodId from GET /api/v1/fiat/banks?direction=outbound (in the SDK,
sdk.getBanks({ country, direction: 'outbound' }) — the SDK defaults to inbound),
plus accountNumber for a bank method or phone for mobile money. At least one of
the two is required. The methodId must belong to the same environment as your key: a
live key with a sandbox methodId (or the reverse) returns
supported: false, reason: METHOD_MODE_MISMATCH.
Under the hood the corridor's primary provider is tried first, then its fallback, so a
method listed by both is resolved by whichever answers.
Name enquiry is available for NGN bank accounts only. Every other currency —
including every mobile-money method — returns 200 with supported: false. That is a
normal response, not an error: it is the signal to collect the recipient name manually
and continue with the payout, not to block it. The same applies to any method flagged
manualInput in the /fiat/banks listing. Do not build a flow that requires a
resolved name before allowing a payout, or you will block every non-NGN corridor.
Read the two flags together:
supported: false → this corridor/method cannot be verified, collect the name manually.
supported: true, resolved: false → verification ran and the account was not found;
ask the user to check the number. resolved: true → use accountName.

Sandbox#

Live and sandbox are separate methodId spaces — the same bank has a different id
in each, and the sandbox list is much smaller. The mode is taken from the business your
API key belongs to, so a sandbox key must use a methodId fetched with
GET /api/v1/fiat/banks?...&sandbox=true (in the SDK,
getBanks({ ..., sandbox: true }), or construct the client with sandbox: true).
Mixing them returns supported: false, reason: METHOD_MODE_MISMATCH — that error means
the id came from the wrong environment, not that the account is bad.
Name enquiry in sandbox is forwarded to the provider's own sandbox environment; it is
not stubbed and no fixed test account number is published for it. Treat
supported: false or reason: NOT_FOUND as an ordinary sandbox outcome and exercise
your manual-name fallback path, rather than asserting on a resolved name in tests.
Use reason to tell the cases apart:
METHOD_MODE_MISMATCH → the methodId is from the other environment.
null with supported: false → name enquiry is unavailable for this corridor.
NOT_FOUND → the lookup ran and the provider did not recognise the account.
(The 1111111111 / 0000000000 values in the provider's sandbox docs apply to the
funding source on a collection, not to name enquiry, and the gateway injects them
automatically — never send them here.)
Rate limited to 100 requests per minute per business.

Request

Authorization
API Key
Add parameter in header
X-API-Key
Example:
X-API-Key: ********************
or
Body Params application/jsonRequired

Examples

Responses

🟢200
application/json
Resolution result. Also returned when the corridor is unsupported or the account was not found — inspect supported and resolved.
Bodyapplication/json

🟠400
🟠429
🔴503
Request Request Example
Shell
JavaScript
Java
Swift
curl --location '/api/v1/fiat/resolve-recipient' \
--header 'X-API-Key: <api-key>' \
--header 'Content-Type: application/json' \
--data '{
    "methodId": "string",
    "accountNumber": "string",
    "phone": "string"
}'
Response Response Example
200 - Example 1
{
    "supported": true,
    "resolved": true,
    "accountName": "string",
    "bankName": "string",
    "reason": "string"
}
Modified at 2026-08-02 19:44:09
Previous
List fiat payment methods
Next
Preview a fiat collection price
Built with