Skip to content
Authorization<token>

Use a public key (pk./pk_test.) for payment initialization. Use a secret key (sk./sk_test.) for sensitive operations (transfers, refunds, balance), or a restricted key (rk./rk_test.) scoped to specific permissions. The _test. variant of any key selects the sandbox environment — there is no separate sandbox URL. Never expose your secret key in client-side code.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

amount*number

Must be at least 0.01.

currency*string

Must match an existing stored value. Must be 3 characters.

email?string | null

This field is required when none of <code>customer_id</code>, <code>phone</code>, and <code>customer</code> are present. Must be a valid email address. Must not be greater than 255 characters.

customer_id?string | null

This field is required when none of <code>email</code>, <code>phone</code>, and <code>customer</code> are present. Must not be greater than 64 characters.

phone?string | null

This field is required when none of <code>customer_id</code>, <code>email</code>, and <code>customer</code> are present. Must not be greater than 32 characters.

name?string | null

Must not be greater than 255 characters.

description?string | null

Must not be greater than 500 characters.

reference?string | null

Must not be greater than 128 characters.

callback?string | null

Must be a valid URL. Must not be greater than 2048 characters.

expires?object
in?integer | null

Must be at least 5. Must not be greater than 43200.

customer?string | null
theming?object | null
address?object | null
shipping?object | null
items?array<object | null>
telemetry?object | null
metadata?object | null
bearer?"merchant" | "customer"
"merchant""customer"

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/payments" \  -H "Content-Type: application/json" \  -d '{    "amount": 27,    "currency": "ngz"  }'
POST
/payments
{
  "code": 201,
  "status": "Created",
  "message": "Payment initiated",
  "authorization_url": "https://pay.wajub.com/tok_xxxxx",
  "authorization_token": "1|tok_xxxxx",
  "transaction": {
    "id": "trx_01JXXXXXXXXXXXXX",
    "reference": "order-4172",
    "amount": 25000,
    "currency": "XAF",
    "status": "pending",
    "description": "Order #4172",
    "sandbox": true,
    "created_at": "2026-01-15T10:30:00Z"
  }
}
{
  "code": 401,
  "status": "Unauthorized",
  "message": "Invalid API credentials"
}
{
  "code": 422,
  "status": "Unprocessable Content",
  "message": "The given data was invalid.",
  "errors": {
    "amount": [
      "The amount field is required."
    ],
    "currency": [
      "The selected currency is invalid."
    ]
  }
}
{
  "code": 429,
  "status": "Too Many Requests",
  "message": "Too Many requests. Merchant limit : 120"
}