Skip to main content
POST
/
v1
/
wallets
/
{id}
/
credentials
Create a wallet credential
curl --request POST \
  --url https://api.paystack.com/v1/wallets/{id}/credentials \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "network": "bank",
  "label": "<string>",
  "metadata": {},
  "merchantReference": "<string>"
}
'
{
  "status": true,
  "message": "Wallet credential created successfully",
  "code": "ok",
  "data": {
    "id": "wcr_01HXYZABC1234567890ABCDEFG",
    "type": "crypto",
    "currency": "USDC",
    "network": "base",
    "wallet": {
      "id": "wal_01HXYZABC1234567890ABCDEFG",
      "currency": "USDC",
      "label": "USDC Wallet"
    },
    "metadata": {
      "team": "ops"
    },
    "details": {
      "accountName": "Medard Ilunga",
      "accountNumber": "1234567890",
      "bankName": "Wema Bank",
      "bankCode": "035",
      "currency": "NGN"
    },
    "status": "pending",
    "created_at": "2026-05-20T12:00:00.000Z",
    "updated_at": "2026-05-20T12:00:00.000Z",
    "label": "Treasury deposit"
  },
  "meta": {
    "request_id": "req_01HXYZ4K5ABCDEFGHJKLMNPQRS",
    "timestamp": "2026-05-14T15:43:55.732Z",
    "version": "1"
  }
}

Authorizations

Authorization
string
header
required

API key issued during merchant onboarding.

Headers

Idempotency-Key
string

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.

Pattern: ^[A-Za-z0-9_\-]{8,255}$

Body

application/json

CreateCredentialDto

network
enum<string>
required
Available options:
mobile_money,
bank,
solana,
base,
ethereum
Example:

"bank"

type
enum<string>
Available options:
crypto,
fiat
label
string
Maximum string length: 128
metadata
object
merchantReference
string
Maximum string length: 128

Response

Wallet credential created successfully

status
enum<boolean>
required
Available options:
true
Example:

true

message
string
required

Human-readable summary

Example:

"Wallet credential created successfully"

code
enum<string>
required
Available options:
ok
Example:

"ok"

data
object
required
meta
object
required