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>",
  "partner_user_id": "<string>"
}
'
{
  "intent_id": "<string>",
  "status": "<string>",
  "amount_usd_cents": 123,
  "corridor": "<string>",
  "created_at": "<string>"
}

Documentation Index

Fetch the complete documentation index at: https://docs.zennopay.in/llms.txt

Use this file to discover all available pages before exploring further.

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).
partner_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

curl -X POST https://api.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",
    "partner_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"
}