Skip to content

Dynamic PayID ​

Create and manage temporary, auto-expiring checkout PayIDs. Dynamic PayIDs are ideal for one-time payments, invoices, or payment links.

Required permission: virtual_payid

Create Dynamic PayID ​

POST /v1/checkout/dynamic-payid

Authentication ​

Requires a secret key (sk_*).

Request body ​

ParameterTypeRequiredDescription
amountnumberNoExpected payment amount in naira (e.g., 5000). If omitted, any amount is accepted
amount_validationstringNoHow to validate incoming amounts. Default: "A4". See amount validation rules
allow_multiple_paymentsbooleanNoAccept more than one payment. Default: false
expires_in_minutesintegerNoExpiry time in minutes. Default: 1440 (24h). Max: 4320 (72h)
namestringNoDisplay name (max 255 chars). Auto-generated from your account name if omitted
metadataobjectNoCustom key-value data stored with the PayID

Settlement

Payments received on this PayID are settled to your API key's configured settlement ledger. To change where payments are settled, update your API key's settlement configuration in the dashboard.

Example request ​

bash
curl -X POST https://api.zevpaycheckout.com/v1/checkout/dynamic-payid \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_test_your_secret_key" \
  -d '{
    "amount": 5000,
    "amount_validation": "A0",
    "name": "Invoice #1234",
    "expires_in_minutes": 1440,
    "metadata": {
      "invoice_id": "INV-1234"
    }
  }'
javascript
const response = await fetch(
  "https://api.zevpaycheckout.com/v1/checkout/dynamic-payid",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "x-api-key": "sk_test_your_secret_key",
    },
    body: JSON.stringify({
      amount: 5000,
      amount_validation: "A0",
      name: "Invoice #1234",
      expires_in_minutes: 1440,
      metadata: { invoice_id: "INV-1234" },
    }),
  }
);
const data = await response.json();

Response ​

json
{
  "success": true,
  "data": {
    "id": "a1b2c3d4-...",
    "slug": "a4b7",
    "suffix": ".dypid",
    "full_pay_id": "a4b7.dypid",
    "settlement_pay_id_id": "s1t2u3v4-...",
    "creator_pay_id_id": "c1d2e3f4-...",
    "creator_type": "business",
    "business_id": "b1c2d3e4-...",
    "name": "Invoice #1234",
    "amount": "5000.00",
    "amount_validation": "A0",
    "allow_multiple_payments": false,
    "status": "active",
    "source": "api",
    "expires_at": "2026-03-09T12:00:00.000Z",
    "deactivated_at": null,
    "completed_at": null,
    "created_at": "2026-03-08T12:00:00.000Z"
  }
}

List Dynamic PayIDs ​

GET /v1/checkout/dynamic-payid

Query parameters ​

ParameterTypeDefaultDescription
pageinteger1Page number
page_sizeinteger20Items per page (max 100)
statusstringnoneFilter: "active", "completed", "expired", "deactivated"
searchstringnoneSearch by slug, name, or PayID

Example request ​

bash
curl "https://api.zevpaycheckout.com/v1/checkout/dynamic-payid?status=active&page_size=10" \
  -H "x-api-key: sk_test_your_secret_key"

Response ​

json
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "a1b2c3d4-...",
        "full_pay_id": "a4b7.dypid",
        "name": "Invoice #1234",
        "amount": "5000.00",
        "status": "active",
        "expires_at": "2026-03-09T12:00:00.000Z",
        "created_at": "2026-03-08T12:00:00.000Z"
      }
    ],
    "total": 1,
    "page": 1,
    "page_size": 10,
    "total_pages": 1
  }
}

Get Dynamic PayID ​

GET /v1/checkout/dynamic-payid/:id

Path parameters ​

ParameterTypeDescription
idstringDynamic PayID UUID

Example request ​

bash
curl https://api.zevpaycheckout.com/v1/checkout/dynamic-payid/a1b2c3d4-... \
  -H "x-api-key: sk_test_your_secret_key"

Deactivate Dynamic PayID ​

Deactivate a dynamic PayID before its natural expiry.

DELETE /v1/checkout/dynamic-payid/:id

Example request ​

bash
curl -X DELETE https://api.zevpaycheckout.com/v1/checkout/dynamic-payid/a1b2c3d4-... \
  -H "x-api-key: sk_test_your_secret_key"

Response ​

json
{
  "success": true,
  "data": {
    "success": true,
    "message": "Dynamic PayID deactivated."
  }
}

Amount Validation Rules ​

Control how incoming payment amounts are validated against the configured amount:

RuleDescription
A0Exact match: payment must equal the amount exactly
A1Less than: payment must be less than the amount
A2Greater than: payment must be greater than the amount
A3At most: payment must be equal to or less than the amount
A4At least: payment must be equal to or greater than the amount (default)
A5Any amount: no validation applied

If amount is not set, all incoming payments are accepted regardless of the validation rule.


Response fields ​

FieldTypeDescription
idstringUnique identifier (UUID)
slugstringShort auto-generated slug
suffixstringAlways ".dypid"
full_pay_idstringComplete PayID (e.g., "a4b7.dypid")
settlement_pay_id_idstringPayID where payments are settled
creator_pay_id_idstringCreator's PayID UUID
creator_typestring"personal" or "business"
business_idstring|nullBusiness UUID (if created by a business)
namestringDisplay name
amountstring|nullConfigured amount (naira, e.g., "5000.00")
amount_validationstringValidation rule (A0–A5)
allow_multiple_paymentsbooleanWhether multiple payments are accepted
statusstring"active", "completed", "expired", or "deactivated"
sourcestringCreation source ("api", "dashboard", etc.)
expires_atstringISO 8601 expiry timestamp
deactivated_atstring|nullWhen deactivated (if applicable)
completed_atstring|nullWhen a payment was received (if applicable)
created_atstringISO 8601 creation timestamp

Try it: Create Dynamic PayID ​

API Playground
POSThttps://api.zevpaycheckout.com/v1/checkout/dynamic-payid

Try it: List Dynamic PayIDs ​

API Playground
GEThttps://api.zevpaycheckout.com/v1/checkout/dynamic-payid

ZevPay Checkout Developer Documentation