Skip to main content
POST
/
v1
/
payment_intents
Create payment intent
curl --request POST \
  --url https://api.example.com/v1/payment_intents \
  --header 'Content-Type: application/json' \
  --header 'X-Zennopay-Key-Id: <x-zennopay-key-id>' \
  --header 'X-Zennopay-Nonce: <x-zennopay-nonce>' \
  --header 'X-Zennopay-Signature: <x-zennopay-signature>' \
  --header 'X-Zennopay-Timestamp: <x-zennopay-timestamp>' \
  --data '
{
  "amount_usd_cents": 123,
  "corridor": "<string>",
  "wizz_user_id": "<string>"
}
'
{
  "intent_id": "<string>",
  "status": "<string>",
  "amount_usd_cents": 123,
  "corridor": "<string>",
  "created_at": "<string>"
}
The full request and response schema is still being finalized. Fields below reflect the auth spec. Additional fields (merchant details, metadata, etc.) will land in a future revision. 🚧

Headers

All requests must be HMAC-signed. See Authentication.
X-Zennopay-Key-Id
string
required
Identifies which signing key was used (e.g. wizz_prod_2026q1).
X-Zennopay-Timestamp
string
required
RFC 3339 UTC timestamp. Requests more than 5 minutes off server time are rejected.
X-Zennopay-Nonce
string
required
Random 32-byte hex string. Replays within 10 minutes are rejected.
X-Zennopay-Signature
string
required
Base64 HMAC-SHA256 of the canonical request string.

Body

amount_usd_cents
integer
required
The amount the user has authorized, in USD cents. Minimum is corridor-dependent.
corridor
string
required
One of th_promptpay (Thailand PromptPay) or vn_vietqr (Vietnam VietQR).
wizz_user_id
string
required
Your opaque user identifier. Zennopay never sees the underlying user PII; this is for your internal correlation.

Response

intent_id
string
Zennopay intent ID, format zp_.... Use this for subsequent SDK and webhook correlation.
status
string
Initial state. Always created on a successful POST.
amount_usd_cents
integer
Echoes the request.
corridor
string
Echoes the request.
created_at
string
RFC 3339 UTC timestamp.

Example

Examples use the sandbox host. Swap to https://api.zennopay.com in production. See Environments.
curl -X POST https://api.sandbox.zennopay.com/v1/payment_intents \
  -H "X-Zennopay-Key-Id: wizz_sandbox_2026q2" \
  -H "X-Zennopay-Timestamp: 2026-05-21T14:30:00Z" \
  -H "X-Zennopay-Nonce: a1b2c3d4e5f6789012345678abcdef00" \
  -H "X-Zennopay-Signature: <base64_hmac_sha256>" \
  -H "Content-Type: application/json" \
  -d '{
    "amount_usd_cents": 345,
    "corridor": "th_promptpay",
    "wizz_user_id": "user_abc123"
  }'
Response
{
  "intent_id": "zp_AbCd1234EfGh5678",
  "status": "created",
  "amount_usd_cents": 345,
  "corridor": "th_promptpay",
  "created_at": "2026-05-21T14:30:00Z"
}