Recurring Payments#
Charge customers on a schedule using stored card data from an initial transaction.
Setup — Initial Transaction#
Add recurring_init=Y to the initial SALE request. If the transaction succeeds, the response and callback include a recurring_token. Store this token against the customer record.
4111111111111111 with expiry 01/2038 supports recurring token generation in sandbox. Other test cards will not return a recurring token.RECURRING_SALE#
Creates a new transaction using stored cardholder data from a previous operation. Uses Formula 1 for the hash.
https://{PAYMENT_URL}/post
| Parameter | Description | Required |
|---|---|---|
action | RECURRING_SALE | Yes |
client_key | Your account key (UUID) | Yes |
order_id | New unique order ID for this charge | Yes |
order_amount | Amount to charge | Yes |
order_currency | Currency code | Yes |
order_description | Description for this charge | Yes |
recurring_first_trans_id | Transaction ID of the primary transaction | Yes |
recurring_token | Token from original transaction | Yes |
schedule_id | Link to a schedule object | No |
auth | Y for auth-only | No |
hash | Formula 1 | Yes |
Response is identical to SALE (with action=RECURRING_SALE).
card mask from the initial SALE callback) alongside the recurring_token to compute hashes for subsequent charges. You also need the payer's email from the initial transaction.RETRY#
Retry a soft-declined recurring transaction. Only valid for soft declines — hard declines (stolen card, fraud) will not succeed. Check decline_reason before retrying.
| Parameter | Description | Required |
|---|---|---|
action | RETRY | Yes |
client_key | Your account key | Yes |
trans_id | Transaction ID of the declined recurring transaction | Yes |
hash | Formula 1 | Yes |
Synchronous response returns result: ACCEPTED. Final result delivered via callback with action: RETRY.
Schedule Management#
Schedules automate recurring charges at defined intervals. All schedule operations use POST https://{PAYMENT_URL}/post.
| Action | Purpose | Hash |
|---|---|---|
CREATE_SCHEDULE | Create a new schedule with name, interval, payment count | Formula 3 |
PAUSE_SCHEDULE | Suspend scheduled payments | Formula 4 |
RUN_SCHEDULE | Resume a paused schedule | Formula 4 |
DELETE_SCHEDULE | Permanently delete a schedule | Formula 4 |
SCHEDULE_INFO | Get schedule details | Formula 4 |
DESCHEDULE | Stop payments by schedule (requires recurring_token + schedule_id) | Formula 4 |
CREATE_SCHEDULE Parameters
| Parameter | Description | Required |
|---|---|---|
action | CREATE_SCHEDULE | Yes |
client_key | Your account key | Yes |
name | Schedule name (up to 100 chars) | Yes |
interval_length | How often payments occur (cannot be 0) | Yes |
interval_unit | day or month | Yes |
day_of_month | 1–31; only if interval_unit=month. If 29/30/31 and month is shorter, last day is used | No |
payments_count | Total number of payments | Yes |
delays | Number of skipped intervals before cycle starts | No |
hash | Formula 3 | Yes |
Response returns schedule_id which you pass to SALE or RECURRING_SALE via the schedule_id parameter.
Full parameter tables for all schedule operations are in the API Reference.