Subscriptions Integration Guide

Last updated:July 25, 2026

This Subscription Integration guide describes how you can schedule subscription payments. Like recurring payments, the money gets auto-debited from consumer's bank account to the merchant account in fixed time periods (e.g. weekly, monthly, quarterly, yearly). Similarly, money can be auto-credited using payouts. Subscription businesses benefit from the flexibility of creating different plans and pricing structures to meet market demands.

A subscription payment can be scheduled as a pre-authorization (PA), debit (DB) or credit (CD) transaction.

To collect card data, you must be PCI-DSS compliant. To minimize your compliance requirements, please use COPYandPAY Registration Tokens.

Use cases

Start subscription

The merchant collects card data from the shopper and schedules a subscription payment. You can set the value of the transaction, the schedule for when the charges should occur, and the number of times the payment transaction should happen based on your subscription plan.


How it works

Store the payment data

Tokenize the customer payment information.

Schedule a payment

Send a schedule request using the token.

We execute the transaction for you

Execute the subscription payment at the scheduled time.

4
OPTIONAL

Review the subscription plan

Query the schedule to see the active plan.

Transactions:
RG
RG
SD
SD
DB
DB

1. Store the payment data

Collect the customer payment information via COPYandPAY or Server-to-Server. With any of the options, please consider having a card-on-file agreement with the shopper. It is best to tokenize the card during the cardholder (CIT) initiated payment so that a merchant (MIT) agreement is in place for the future subscription payments.

Sample request:

2. Schedule a payment

Perform a server-to-server POST request with the registration id, payment type and the job schedule parameters which describes when and how often the transaction should be executed. For a complete reference of the scheduling job parameters, please check API Reference.

You can use the numerical allowed values to declare specific dates, months and days of the week for the subscription payment to be executed. The special characters allow for more advanced functionality. Please click the button below to see the table where we've outlined their general function and what their value means in each field.
[job.second] [job.minute] [job.hour] [job.dayOfMonth] [job.month] [job.dayOfWeek]
ValueDescriptionAllowed in
, List. Specify several values.

For example:
  • 1,3,5 OR MON,WED,FRI in the job.dayOfWeek field means the days Monday, Wednesday and Friday
  • 1,2,5 OR JAN,FEB,MAY in the job.month field means the months January, February and May
All fields
- Range. Specify a range of values.

For example:
  • 1-5 in the job.hour means the hours 1,2,3,4 and 5
  • 2-4 or MON-WED in the job.dayOfWeek means the days Monday, Tuesday and Wednesday
All fields
* Wildcard. Specify all valid values.

For example:
  • * in the job.minute means every minute
  • * in the job.hour means every hour
  • * in the job.month means every month
  • * in the job.dayOfWeek means every day of the week
All fields
? Question mark. Specify no value.

Can only be used in the dayOfMonth and dayOfWeek fields. Used when you wish to specify a particular value in one of those fields, but not the other. For example:
  • 15 in the job.dayOfMonth and ? in the job.dayOfWeek means the 15th day of the month, regardless of the day of the week
job.dayOfMonth
job.dayOfWeek
/ Step. Specify increments (value/value_to_increment).

For example:
  • 0/15 in the job.minute means the minutes 0, 15, 30 and 45
  • 3/6 in the job.hour means every 6 hours beginning of the third hour (i.e., 3, 9, 15, 21)
  • 4/3 in the job.month means every 3 months starting from April (i.e., April, July, October, January)
  • 1/5 in the job.dayOfMonth means every 5 days beginning on the first day of the month (i.e., 1, 6, 11, 16, 21, 26)
Note: Using */ means the value starts from the beginning of the respective time unit:
  • job.month=*/3: Every 3 months starting from January
  • job.minute=*/15: Every 15 minutes starting from minute 00
  • job.hour=*/6: Every 6 hours starting from hour 00
  • job.second=*/10: Every 10 seconds starting from second 00
  • job.dayOfMonth=*/5: Every 5 days starting from the 1st day of the month
This ensures job scheduling is based on the calendar time unit rather than the subscription initiation time.
All fields
L Last. Specify the last day of the month or week.

For example:
  • L in the job.dayOfMonth means the last day of the month, such as January 31 or February 28 (or 29 during a leap year)
  • 6L or FRIL in the job.dayOfWeek means the last Friday of the month
job.dayOfMonth
job.dayOfWeek
W Nearest weekday. Specify the weekday (Monday-Friday) nearest the given day.

For example:
  • 15W in the job.dayOfMonth means the nearest weekday to the 15th of the month. If the 15th is a Saturday, the payment will execute on Friday the 14th. If the 15th is a Sunday, it will execute on Monday the 16th. If the 15th is a Tuesday, then it will execute on that day.
  • 1W in the job.dayOfMonth means the nearest weekday to the 1st of the month
  • LW in the job.dayOfMonth means the last weekday of the month
job.dayOfMonth
# Weekday of the month. Specify "the nth Sun-Sat day of the month".

For example, the value of:
  • 6#3 or FRI#3 in the job.dayOfWeek means the third Friday of the month
  • 2#1 or MON#1 in the job.dayOfWeek means the first Monday of the month
  • 4#5 or WED#5 in the job.dayOfWeek means the fifth Wednesday of the month. If the month doesn't have the five Wednesdays, then no payment is executed.
job.dayOfWeek
Select trial period:
Select schedule:

Sample request:

3. We execute the transaction for you

The scheduled payment is executed automatically at the defined time using the stored payment information and subscription plan.

4. Review the subscription plan

Query the schedule using the schedule ID — the active subscription plan is highlighted in the query response.

Sample request:

Update subscription plan

Modify an existing active subscription plan in place using the RS (Reschedule) payment type — changing the pricing, timing, or structure without cancelling the current schedule and starting over. Submit your updated plan to the /scheduling/v1/schedules/{id}/reschedule endpoint, referencing either the original schedule (SD) or your most recent reschedule (RS). Each update is recorded as a step in the same session, giving you a continuous history of how the plan has changed over time.


How it works

1

Reschedule an existing plan

Update the plan on an active schedule without cancelling it.

2

We execute the transaction for you

Execute the updated subscription payment at the scheduled time.

3
OPTIONAL

Review the subscription plan

Query the schedule to see the updated plan.

Transactions:
RS
RS

1. Reschedule an existing plan

Submit your updated plan to the /scheduling/v1/schedules/{id}/reschedule endpoint using the RS payment type, referencing either the original schedule (SD) or your most recent reschedule (RS). The new plan takes effect immediately within the same active session, preserving the full change history without disrupting your customers' experience.

For example, if you initially set up a monthly billing cycle and need to switch a customer to quarterly, simply submit an RS request referencing the original schedule — no need to cancel and rebuild. You can chain multiple rescheduling requests in sequence, with each new RS referencing the previous one.

Select plan:
Select schedule:

Sample request:

2. We execute the transaction for you

The scheduled payment is executed automatically at the defined time using the stored payment information and subscription plan.

3. Review the subscription plan

Query the reschedule ID to confirm the updated subscription plan is in effect — the active plan is highlighted in the query response.

Sample request:

Cancel subscription

The merchant scheduled one or multiple subscription payments. You can cancel any of the subscriptions.

How it works

1
OPTIONAL

List subscriptions

Send a query request to get all subscriptions active or cancelled.

2

Cancel the schedule

Cancel the subscription.

Transactions:
DS
DS

1. List subscriptions

Perform a server-to-server GET request with the registration id to retrieve all scheduling records — including the original schedule (SD), any plan updates (RS), and cancellations (DS). Use this to identify the schedule ID you want to reference when cancelling.

Sample request:

2. Cancel the subscription

Send a de-scheduling (DS) request specifying any schedule ID belonging to the subscription — the original SD or any subsequent RS. Cancelling any one of them cancels the entire subscription and stops all future scheduled payments.

Sample request: