Actions define what modification to apply when a schedule adjustment matches an order.
Skip order
Prevents an order from being created. The order will be excluded from the schedule entirely.
Use cases:
Customer going on vacation
Holiday closures
Temporary subscription pause
Input:
Field Type Required Description reasonstring Yes Reason for skipping the order
{
"type" : "SKIP_ORDER" ,
"input" : {
"reason" : "Customer on vacation"
}
}
Change date
Reschedules an order to a different date within the billing period.
Use cases:
Customer requests different delivery day
Adjusting timing around events
Input:
Field Type Required Description newDatestring Yes New date for the order (ISO 8601)
{
"type" : "CHANGE_DATE" ,
"input" : {
"newDate" : "2025-02-15T00:00:00Z"
}
}
Only supports the CYCLE matcher. The new date must be within one billing cycle of the original date and cannot be in the past.
Update shipping
Updates the shipping address for a specific order.
Use cases:
Customer temporarily at different address
One-time delivery to alternate location
Input:
Field Type Required Description address.firstNamestring No First name address.lastNamestring No Last name address.address1string Yes Street address line 1 address.address2string No Street address line 2 address.citystring No City address.zipstring No Postal/ZIP code address.countryCodestring Yes ISO country code address.provinceCodestring No Province/state code address.phonestring No Phone number address.companystring No Company name
{
"type" : "UPDATE_SHIPPING" ,
"input" : {
"address" : {
"firstName" : "John" ,
"lastName" : "Doe" ,
"address1" : "123 Main St" ,
"city" : "New York" ,
"countryCode" : "US" ,
"zip" : "10001"
}
}
}
Address must include at least address1 and countryCode.
Update payment method
Updates the payment method for a specific order.
Use cases:
Use different card for specific order
One-time payment method override
Input:
Field Type Required Description paymentMethodIdstring Yes Payment method identifier
{
"type" : "UPDATE_PAYMENT_METHOD" ,
"input" : {
"paymentMethodId" : "pm_abc123"
}
}
Update products
Modifies product lines for a specific order.
Use cases:
One-time quantity change
Swap variant for single order
Adjust billing interval for specific cycle
Input:
Field Type Required Description linesarray Yes Array of line modifications (min 1) lines[].lineIdstring Yes ID of the line to modify lines[].variantIdstring No New variant ID to swap to lines[].quantityinteger No New quantity (min 1) lines[].intervalobject No Override billing interval lines[].interval.intervalCountinteger No Number of intervals lines[].interval.intervalstring No Interval unit: DAY, WEEK, MONTH, YEAR lines[].nextBillingDatestring No Override next billing date (ISO 8601)
{
"type" : "UPDATE_PRODUCTS" ,
"input" : {
"lines" : [
{
"lineId" : "line_abc123" ,
"quantity" : 2
},
{
"lineId" : "line_def456" ,
"variantId" : "variant_xyz789"
}
]
}
}
Line IDs must exist in the customer’s subscriptions.
Apply discount
Applies a discount (Shopify code or manual) to a specific order in the schedule.
Use cases:
One-time promotional discount for specific cycle
Loyalty reward for long-term subscribers
Compensation discount for service issues
The action supports two discount sources: Shopify discount codes and manual discounts.
Shopify code discount
Apply an existing Shopify discount code to the order.
Input:
Field Type Required Description discountSourcestring Yes Must be "code" discountCodestring Yes The Shopify discount code to apply
{
"type" : "APPLY_DISCOUNT" ,
"input" : {
"discountSource" : "code" ,
"discountCode" : "SAVE20"
}
}
Discount code must exist in Shopify, be active, and apply to subscriptions. Only basic discounts and free shipping discounts are supported.
Manual discount - line items
Create a custom discount targeting line items.
Input:
Field Type Required Description discountSourcestring Yes Must be "manual" discountCodestring Yes Custom discount title/name discountTypestring Yes "percentage" or "fixed_amount"valuenumber Yes Discount value (percentage 0-100 or fixed amount in shop currency) targetTypestring Yes Must be "line_item" targetingobject Yes Specifies what to target
Targeting options:
{ "type": "all" } - Apply to all line items
{ "type": "products", "productIds": ["gid://shopify/Product/123", ...] } - Apply to specific products
Example: Percentage discount on all items
{
"type" : "APPLY_DISCOUNT" ,
"input" : {
"discountSource" : "manual" ,
"discountCode" : "Loyalty Reward" ,
"discountType" : "percentage" ,
"value" : 15 ,
"targetType" : "line_item" ,
"targeting" : {
"type" : "all"
}
}
}
Example: Fixed amount discount on specific products
{
"type" : "APPLY_DISCOUNT" ,
"input" : {
"discountSource" : "manual" ,
"discountCode" : "Product Promo" ,
"discountType" : "fixed_amount" ,
"value" : 10 ,
"targetType" : "line_item" ,
"targeting" : {
"type" : "products" ,
"productIds" : [ "gid://shopify/Product/123456789" ]
}
}
}
Manual discount - shipping
Create a custom discount targeting shipping.
Input:
Field Type Required Description discountSourcestring Yes Must be "manual" discountCodestring Yes Custom discount title/name discountTypestring Yes Must be "percentage" valuenumber Yes Must be 100 (free shipping) targetTypestring Yes Must be "shipping" targetingobject Yes Must be { "type": "all" }
Example: Free shipping discount
{
"type" : "APPLY_DISCOUNT" ,
"input" : {
"discountSource" : "manual" ,
"discountCode" : "Free Shipping" ,
"discountType" : "percentage" ,
"value" : 100 ,
"targetType" : "shipping" ,
"targeting" : {
"type" : "all"
}
}
}
Only supports the CYCLE matcher. Only supports free shipping discounts (100% off) - partial shipping discounts and fixed amount shipping discounts are not supported.