Create a fixed-amount recurring debit schedule for an approved UPI Mandate. Notifications and debit executions are handled automatically according to the configured frequency and schedule dates.
API Details
| Field | Value |
|---|---|
| Method | POST |
| Endpoint | /mandate-schedule |
| Base URL | {{BASE_URL}} |
| Content-Type | application/json |
Authentication
Include the following credentials in the JSON request body:
| Parameter / Header | Location | Type | Mandatory | Description |
|---|---|---|---|---|
clientId | JSON body | String | Yes | Merchant client ID from the WowPe Dashboard. |
secretKey | JSON body | String | Yes | Merchant secret key from the WowPe Dashboard. Keep it on your server. |
Content-Type | Header | String | Yes | application/json |
Both credential fields must be included in every request.
Request Parameters
The authentication fields above are required in addition to the following parameters:
| Parameter | Type | Mandatory | Description / Default |
|---|---|---|---|
orderId | String | Yes | Merchant mandate reference. |
amount | Number | Yes | Amount of each recurring debit. |
frequency | String | Yes | Recurring frequency. Supported values: DAILY, WEEKLY, FORTNIGHTLY, MONTHLY, BIMONTHLY, QUARTERLY, HALFYEARLY, YEARLY. |
startDateTime | String (Datetime) | Yes | First scheduled debit date and time in IST. The supplied guide states that it must be at least 24 hours from the current time. |
endDate | String (Date) | Yes | Last possible debit date. Must fall within the mandate validity period. |
notifyBeforeHours | Number | No | Notification lead time in hours. Supported range: 25–71. Default: 26. |
remarks | String | No | Remarks associated with the schedule. |
Sample Request
Request Body
{
"clientId": "YOUR_CLIENT_ID",
"secretKey": "YOUR_SECRET_KEY",
"orderId": "ORDSCHEDULE01",
"amount": 99,
"frequency": "MONTHLY",
"startDateTime": "2026-12-03T10:00:00",
"endDate": "2027-10-31T00:00:00",
"notifyBeforeHours": 26,
"remarks": "Monthly plan"
}
cURL Request
curl --request POST '{{BASE_URL}}/mandate-schedule' \
--header 'Content-Type: application/json' \
--data-binary '@mandate-schedule.json'
Sample Response
Illustrative response from the supplied integration guide; not a verified UAT capture.
{
"statusCode": 1,
"message": "Schedule saved. Notify will be sent at 2026-12-02 08:00 for the debit at 2026-12-03 10:00 (IST).",
"orderId": "ORDSCHEDULE01",
"scheduleStatus": "Active",
"amount": "99.00",
"frequency": "MONTHLY",
"startDateTime": "2026-12-03T10:00:00",
"endDate": "2027-10-31",
"notifyBeforeHours": 26,
"cyclesDone": 0,
"nextExecutionDateTime": "2026-12-03T10:00:00",
"nextNotifyDateTime": "2026-12-02T08:00:00",
"lastDebitId": null,
"lastMessage": null
}
Response Parameters
| Parameter | Type | Description |
|---|---|---|
statusCode | Number | Operation status: 0 = Failed, 1 = Succeeded, 2 = Pending. Interpret business-status fields separately. |
message | String | Operation or schedule message. |
orderId | String | Merchant mandate reference. |
scheduleStatus | String | Current schedule state: Active, Stopped, or Completed. |
amount | String | Scheduled debit amount, returned as a decimal string. |
frequency | String | Saved schedule frequency. |
startDateTime | String | First scheduled debit date and time. |
endDate | String | Last possible scheduled debit date. |
notifyBeforeHours | Number | Saved notification lead time in hours. |
cyclesDone | Number | Returned cycle count. Whether this counts attempts or successful debits is not specified. |
nextExecutionDateTime | String | Next scheduled debit date and time. |
nextNotifyDateTime | String | Next notification date and time. |
lastDebitId | String / Null | Most recent cycle debit ID, used for execute-status lookup when available. |
lastMessage | String / Null | Latest schedule message, when available. |
Error Handling
| Condition | Handling |
|---|---|
statusCode: 0 | Operation failed. Inspect the message and any operation-specific status fields. |
statusCode: 2 | Operation is pending. Use the applicable status endpoint to check the outcome. |
| Timeout or unknown outcome | Check the existing operation before submitting another mutation. |
The supplied integration guide does not define endpoint-specific HTTP status mappings or a complete error response structure. Confirm these in UAT before documenting them.
Important Notes
- Allow sufficient lead time for the selected
notifyBeforeHoursand processing time. - The stated 24-hour minimum for
startDateTimeis shorter than the default notification lead time of 26 hours. Ensure the selected schedule timing accommodates the notification requirement. - The backend's handling of an already-past notification time needs confirmation.
- A successful schedule creation confirms that the schedule was saved. It does not confirm that any debit has been successfully processed.
- The supplied example uses
ORDSCHEDULE01as a separate approved mandate without an automatic plan, permitting ₹99 debits and valid through 31 October 2027. - Do not add a separate schedule to another mandate as an additional collector for the same subscription without confirming the intended setup.
- The integration guide states that creating a new schedule replaces the old schedule. The effect on already-notified or executing debits, and its interaction with an automatic plan, must be confirmed before replacing an existing schedule.
What's Next
Use the Schedule Status API to retrieve the current schedule configuration and progress.
Use the Execute Status API to check the outcome of each debit using its corresponding debit ID.
