Create account
Complete your business setup and access your developer workspace.
A clean API for collecting payments, creating payment links, issuing refunds, sending payouts and keeping your transaction lifecycle in sync.
$ curl -X POST https://api.sandbox.wowpayzap.com/v1/payments \ -H "Authorization: Bearer sk_test_xxx" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: order_1024" \ -d '{ "amount": 249900, "currency": "INR", "reference": "ORDER-1024", "customer": { "id": "cus_9f82" } }' // 201 Created { "id": "pay_8f21c9", "status": "processing", "amount": 249900, "currency": "INR" }
Four simple steps to connect your application to the WowPayzap payment stack.
Complete your business setup and access your developer workspace.
Create sandbox keys first, then production keys when you're ready to launch.
Send an authenticated request with an amount, currency and reference.
Use webhooks to keep your order and payment state synchronized.
Every API request is authenticated with a secret API key using the Bearer authentication scheme. Keep secret keys on your server and never expose them in browser or mobile application code.
curl https://api.sandbox.wowpayzap.com/v1/payments \ -H "Authorization: Bearer sk_test_xxxxxxxxx" \ -H "Content-Type: application/json"
Use the sandbox environment while developing and switch to the production endpoint when your integration is ready for live traffic.
Create and manage payment intents from your backend. Amounts are represented in the smallest currency unit, such as paise for INR.
{
"amount": 249900,
"currency": "INR",
"reference": "ORDER-1024",
"customer": {
"id": "cus_9f82"
},
"description": "Order #1024"
}| Parameter | Type | Required | Description |
|---|---|---|---|
| amount | integer | Required | Amount in the smallest currency unit. |
| currency | string | Required | Three-letter ISO currency code, e.g. INR. |
| reference | string | Required | Your unique order or transaction reference. |
| customer | object | Optional | Customer identity and contact information. |
| description | string | Optional | Human-readable payment description. |
{
"id": "pay_8f21c9",
"status": "processing",
"amount": 249900,
"currency": "INR",
"reference": "ORDER-1024"
}Model your order state around the payment status returned by the API and confirmed through webhooks.
Payment request accepted and initialized.
Payment is being processed by the selected method.
Payment has been successfully completed.
Payment remains in an active processing state.
Payment could not be completed.
Funds have been returned after a refund.
Fetch the current state of a payment using its payment ID.
curl https://api.sandbox.wowpayzap.com/v1/payments/pay_8f21c9 \ -H "Authorization: Bearer sk_test_xxxxxxxxx"
Query payments with pagination and optional filters.
| Query parameter | Type | Description |
|---|---|---|
| limit | integer | Number of records to return. |
| cursor | string | Pagination cursor from the previous response. |
| status | string | Filter by payment status. |
| created_after | datetime | Return payments created after a timestamp. |
Create reusable customer profiles so payment history, contact information and future payment flows can be associated with one customer record.
Generate hosted payment experiences without building the complete checkout UI yourself.
{
"amount": 149900,
"currency": "INR",
"reference": "INV-2048",
"expires_at": "2026-09-10T18:00:00Z"
}Initiate a full or partial refund against a successful payment.
{
"payment_id": "pay_8f21c9",
"amount": 100000,
"reason": "customer_request"
}Create outbound payouts and track their processing state from the same API model.
Use an idempotency key on create and mutation requests so network retries do not accidentally create duplicate operations.
-H "Idempotency-Key: ORDER-1024-PAYMENT"
Webhooks notify your server when payment, refund, payout or payment-link state changes. Verify the event signature before processing it.
{
"id": "evt_72af",
"type": "payment.succeeded",
"created_at": "2026-09-03T08:30:00Z",
"data": {
"payment_id": "pay_8f21c9",
"status": "success"
}
}| Event | When it fires |
|---|---|
| payment.succeeded | A payment reaches a successful state. |
| payment.failed | A payment fails. |
| refund.succeeded | A refund is completed. |
| payout.succeeded | A payout completes successfully. |
| payment_link.paid | A hosted payment link receives payment. |
Errors use conventional HTTP status codes and a consistent JSON envelope so your application can handle failures predictably.
{
"error": {
"code": "invalid_request",
"message": "amount must be greater than zero",
"request_id": "req_91bd"
}
}| Status | Meaning |
|---|---|
| 400 | Malformed or invalid request. |
| 401 | Authentication failed or missing. |
| 403 | Authenticated request is not permitted. |
| 404 | Requested resource does not exist. |
| 409 | Conflict, often related to idempotency or state. |
| 422 | Validation error. |
| 429 | Rate limit exceeded. |
| 500 | Unexpected server error. |
Use the API directly or install an SDK to reduce boilerplate in your application.
Build and test without touching real money. Use test API keys, simulated payment states and webhook events before switching to production credentials.
Start in the sandbox, validate your integration, then move to production when your payment flow is ready.