Create a wallet credential
Create a fiat or crypto funding credential on a wallet identified
by the wal_… id in the path.
Same-currency credentials (default)
By default the credential’s currency matches the wallet’s currency — deposits
land directly on the wallet balance. network must be a network supported by
the wallet’s currency (e.g. base, ethereum, solana for crypto). For fiat
credentials only bank is supported today — even if the wallet’s currency
advertises other fiat networks (e.g. mobile_money), a non-bank network is
rejected with invalid_input. type is optional — when omitted it is derived
from the wallet’s currency; when supplied it must match the wallet’s currency
type. merchantReference is optional and is generated when not provided.
Cross-currency credentials (auto-onramp / auto-offramp)
Passing an explicit currency different from the wallet’s currency creates a
cross-currency credential. Every deposit is automatically converted into the
wallet’s currency at the FX rate live at deposit time:
- Auto-onramp — a fiat currency on a crypto wallet (e.g.
NGNon aUSDCwallet). The payer sends fiat; the wallet is credited in crypto. - Auto-offramp — a crypto currency on a fiat wallet (e.g.
USDCon anNGNwallet). The payer sends crypto; the wallet is credited in fiat.
Only crypto↔fiat pairs are supported — a crypto credential on a crypto wallet
(or fiat on fiat) is rejected. Both currencies in the pair must have matching capabilities: canOnramp for auto-onramp, canOfframp for
auto-offramp. network is validated against the credential’s own currency,
not the wallet’s — so an NGN credential on a USDC wallet uses bank, and a
USDC credential on an NGN wallet uses base / ethereum / solana.
Disambiguating multi-country currencies (country_code)
Some fiat currency codes exist for more than one country (e.g. XOF for CFA-franc
countries). Pass an ISO 3166-1 alpha-2 country_code to pin which country’s
currency the credential should hold:
- Cross-currency — when
currencyresolves to multiple country rows and nocountry_codeis supplied, the request is rejected withinvalid_inputand the response message lists the available countries. Whencountry_codeis supplied, the credential currency is pinned to that country (falling back to the null-country row for crypto codes). - Same-currency — the credential inherits the wallet’s currency and its
country, so no lookup happens. If
country_codeis supplied it must equal the parent wallet’s country or the request is rejected withinvalid_input.
Authorizations
API key issued during merchant onboarding.
Headers
Optional client-supplied key. Identical key + identical body within 24h replays the original response. Identical key + different body returns 409 idempotency_conflict. The hash is over raw bytes — clients retrying must send the byte-identical body; a re-serialised JSON payload will produce a different hash and a 409. Strongly recommended for retry-safe clients.
^[A-Za-z0-9_\-]{8,255}$Body
CreateCredentialDto
mobile_money, bank, solana, base, ethereum "bank"
crypto, fiat ^[A-Z]{2,10}$"NGN"
^[A-Z]{2}$"NG"
128128