Skip to Content
Welcome to Zendera Knowledge Hub
For DevelopersRecurring Orders

Recurring Orders API

v1

Create and manage recurring order templates that auto-generate real orders on a schedule, expressed as iCalendar RRule sets.

Overview

Recurring orders are templates that auto-generate real orders on a schedule. Schedules are expressed as RRule sets (the iCalendar recurrence-rule format).

GET /v1/recurring_orders POST /v1/recurring_orders GET /v1/recurring_orders/{recurringOrderId} PUT /v1/recurring_orders/{recurringOrderId} DELETE /v1/recurring_orders/{recurringOrderId}

Recurring templates generate orders asynchronously. Don’t expect generated orders to exist immediately after creating a template.

Authentication

Authorization: apikey YOUR_API_KEY_HERE

Base URLs

  • Production: https://app.zenderatms.com/api/
  • Staging: https://staging.zenderatms.com/api/

List recurring orders

GET /v1/recurring_orders?limit=50&offset=0

Results are paginated with limit and offset.

Optional filters:

Query paramTypeNotes
limitint32Page size.
offsetint32Number of records to skip.
isActiveboolOnly show active or inactive templates.
customerIdint32Only templates for this customer.
startDateFrom / startDateTodatetimeTemplates whose start date falls in the range.

Response:

{ "recurringOrders": [ { "...": "RecurringOrder..." } ], "total": 42, "limit": 50, "offset": 0 }

Create a recurring order template

POST /v1/recurring_orders
{ "name": "Daily Acme Oslo run", "customerId": 1234, "orderTypeId": 5, "vehicleTypeId": 2, "pickupLocationId": 999, "deliveryLocationId": 1000, "orderTemplate": { "...": "an ImportOrderRequest — same shape as in /v3/orders/import" }, "rruleset": "DTSTART:20260419T060000Z\nRRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR", "startDate": "2026-04-19T00:00:00Z", "endDate": null, "daysToGenerateAhead": 14, "isActive": true }
FieldNotes
nameDisplay name.
orderTemplateRequired. The “shape” of the orders to generate — the same fields as a single import order (ImportOrderRequest). See Orders Import API.
rrulesetRequired. iCalendar RRULE / RRULESET string. Defines when the template fires.
startDateRequired. Earliest generation date.
endDateOptional. Latest generation date (null = forever).
daysToGenerateAheadHow far in advance Zendera generates orders. E.g. 14 = always keep at least two weeks of orders generated.
isActiveIf false, the template exists but doesn’t generate.

Response: a RecurringOrder object with recurringOrderId, the validated rruleset, and (if the template is active) generationStats.

Get a recurring order template

GET /v1/recurring_orders/{recurringOrderId}

Returns the full RecurringOrder object for the given ID.

Update a recurring order template

PUT /v1/recurring_orders/{recurringOrderId}

Send only the fields you want to change.

{ "name": "Daily Acme Oslo run (renamed)", "isActive": false, "updateExistingOrders": false }

The updateExistingOrders flag controls whether already-generated orders are regenerated to reflect the changes:

  • true: Regenerate already-generated orders to match the updated template.
  • false: Leave already-generated orders alone; only future generation uses the new template.

Delete a recurring order template

DELETE /v1/recurring_orders/{recurringOrderId}

DELETE deactivates the template rather than hard-deleting it. Already-generated orders are not removed.

What’s next

Last updated on