Skip to main content

Schedule APIs

The schedule APIs allow you to manage and interact with schedules within your Omni organization.

Create a schedule

Creates a scheduled task for the specified dashboard.

Supports applying filters and formatting, creating alert conditions, and triggering test deliveries.

Limitations

Currently, only email, SFTP, and webhook destinations are supported.

POST /api/v1/schedules
curl -L 'https://myorg.omniapp.co/api/v1/schedules' \
-H 'Authentication: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"identifier": "12db1a0a",
"name": "My Webhook schedule",
"schedule": "0 9 ? * * *",
"timezone": "UTC",
"format": "json",
"destinationType": "webhook",
"url": "https://webhooksrus.com/1234566"
}'

Parameters

Loading parameters...

Response

200 OK

Successful requests will return a 200 OK status and a response body similar to the following:

200 OK
{
"id": "2abba91d-9bec-41a0-8a8d-6f133b4ff0b7",
"message": "Successfully created schedule"
}
400 Bad Request

Response bodies will be an object similar to the following:

{
"detail": "<errorReason>",
"status": 400
}
IssueError detail
Document has not been savedAnalyses do not support dashboards.
Document is missing a dashboardDocument does not have a dashboard
Invalid cron expressionschedule: Schedule is an invalid cron expression
Invalid timezonetimezone: Time zone must be IANA valid.
hideTitle used with incompatbile formathideTitle can only be used with PDF or PNG formats
Invalid filter keyInvalid filter keys found in schedule configuration: <filterKey>. Available dashboard filter keys are: <key1>, <key2>, ....
testNow used with incompatible conditionTypeTest delivery not supported for condition type RESULTS_CHANGED
"Couldn't find query presentation for key: invalid-key"
404 Not Found

Response bodies will be an object similar to the following:

{
"detail": "<errorReason>",
"status": 404
}
IssueError detail
Dashboard not foundDocument with identifier \"<dashboardId>\" not found
429 Too Many Requests

Results from too many requests in a given time frame. Refer to the Rate limiting documentation for more information.

List schedules

Retrieves scheduled tasks. This endpoint supports filtering, sorting, and cursor-based pagination.

GET /api/v1/schedules
curl -L 'https://myorg.omniapp.co/api/v1/schedules' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json'

Parameters

Loading parameters...

Response

200 OK

Successful requests will return a 200 OK status and a response body similar to the following:

{
"pageInfo": {
"hasNextPage": false,
"nextCursor": null,
"pageSize": 20,
"totalRecords": 6
},
"records": [
{
"id": "60d386ca-6f48-4143-9bfc-fd7a6f942c2c",
"schedule": "00 09 ? * 2,3,4,5,6 *",
"disabledAt": "2024-03-01T15:32:20.996Z",
"name": "Web Traffic Analysis",
"timezone": "America/Los_Angeles",
"identifier": "1169b547",
"dashboardName": "Web Traffic Analysis",
"ownerName": "Blob Ross",
"lastCompletedAt": "2024-02-29T17:00:56.107Z",
"lastStatus": "COMPLETE",
"destinationType": "email",
"recipientCount": 5,
"content": "dashboard",
"slackRecipientType": null,
"systemDisabledAt": null,
"systemDisabledReason": null,
"alert": null
},
{
"id": "f68aba72-b558-4012-a381-bb74954dd025",
"schedule": "00 09 ? * 2,3,4,5,6 *",
"disabledAt": null,
"name": "⚡️🍣 Query",
"timezone": "America/New_York",
"identifier": "eadde573",
"dashboardName": "Blob R Us Sales",
"ownerName": "Blobby Hill",
"lastCompletedAt": "2025-05-19T13:00:35.457Z",
"lastStatus": "ERROR_DELIVERED",
"destinationType": "email",
"recipientCount": 1,
"content": "single tile",
"slackRecipientType": null,
"systemDisabledAt": null,
"systemDisabledReason": null,
"alert": null
},
{
"id": "2af41989-1bed-4c65-a602-927f71205a32",
"schedule": "00 09 ? * 2,3,4,5,6 *",
"disabledAt": null,
"name": "Orders (2)",
"timezone": "America/New_York",
"identifier": "12db1a0a",
"dashboardName": "Orders",
"ownerName": "Blobby Hill",
"lastCompletedAt": "2025-05-19T13:00:27.517Z",
"lastStatus": "COMPLETE",
"destinationType": "webhook",
"recipientCount": -1,
"content": "dashboard",
"slackRecipientType": null,
"systemDisabledAt": null,
"systemDisabledReason": null,
"alert": null
},
{
"id": "61a8e93b-71f4-4cda-b1f9-a91aa0ad05bc",
"schedule": "00 09 ? * 2,3,4,5,6 *",
"disabledAt": null,
"name": "Orders",
"timezone": "America/New_York",
"identifier": "12db1a0a",
"dashboardName": "Orders",
"ownerName": "Blob Ross",
"lastCompletedAt": "2025-05-19T13:00:25.376Z",
"lastStatus": "COMPLETE",
"destinationType": "email",
"recipientCount": 1,
"content": "dashboard",
"slackRecipientType": null,
"systemDisabledAt": null,
"systemDisabledReason": null,
"alert": null
},
{
"id": "3db84f26-db0f-451d-846e-0f7148ae5a7d",
"schedule": "00 09 ? * 2,3,4,5,6 *",
"disabledAt": "2024-12-31T17:23:45.063Z",
"name": "External users",
"timezone": "America/New_York",
"identifier": "0958c2d8",
"dashboardName": "Sales Data by Quarter",
"ownerName": "Blobby Hill",
"lastCompletedAt": "2024-12-31T14:00:51.558Z",
"lastStatus": "COMPLETE",
"destinationType": "email",
"recipientCount": 1,
"content": "dashboard",
"slackRecipientType": null,
"systemDisabledAt": null,
"systemDisabledReason": null,
"alert": null
},
{
"id": "8cc895ec-a2af-493f-a4e4-08c3017fa42d",
"schedule": "00 09 ? * 2,3,4,5,6 *",
"disabledAt": "2024-11-21T21:52:16.059Z",
"name": "Daily Slack update",
"timezone": "America/New_York",
"identifier": "0958c2d8",
"dashboardName": "Sales Data by Quarter",
"ownerName": "Blobby Hill",
"lastCompletedAt": null,
"lastStatus": null,
"destinationType": "slack",
"recipientCount": 1,
"content": "dashboard",
"slackRecipientType": "users",
"systemDisabledAt": null,
"systemDisabledReason": null,
"alert": null
}
]
}
400 Bad Request
{
"detail": "<errorReason>",
"status": 400
}
ErrorError detail
Invalid parameter valueInvalid enum value
Invalid ownerId UUIDownerId: Invalid uuid
Invalid page sizePage size cannot exceed 100
Invalid page number for cursorInvalid page number. The last valid page is <number>.
404 Not Found
{
"detail": "<errorReason>",
"status": 404
}
ErrorError detail
User not foundUser with id <id> does not exist
429 Too Many Requests

Results from too many requests in a given time frame. Refer to the Rate limiting documentation for more information.

Trigger schedule

Triggers the execution of a schedule on demand, outside of its regular schedule.

POST /api/v1/schedules/:scheduleId/trigger
curl -L -X POST 'https://myorg.omniapp.co/api/v1/schedules/123e4567-e89b-12d3-a456-426614174000/trigger' \
-H 'Authorization: Bearer <TOKEN>'

Parameters

Note: The scheduleId must be provided as a path parameter.

Loading parameters...

Response

200 OK

Successful requests will return a 200 OK status and a response body similar to the following:

{
"success": true
}
400 Bad Request
{
"detail": "<errorReason>",
"status": 400
}
ErrorError detail
Invalid UUID formatBad Request: scheduleId: Invalid uuid
Invalid methodInvalid method
404 Not Found
{
"detail": "<errorReason>",
"status": 404
}
ErrorError detail
Schedule not foundScheduled task with id {scheduleId} does not exist
429 Too Many Requests

Results from too many requests in a given time frame. Refer to the Rate limiting documentation for more information.

500 Internal Server Error
{
"detail": "<errorReason>",
"status": 500
}
ErrorError detail
Dispatcher errorVarious error messages related to dispatch failures

Add recipients to schedule

Adds one or more recipients to an existing scheduled email task. Recipients can be specified by email address or user ID.

Limitations

This API only works with schedules with email destinations.

PUT /api/v1/schedules/:scheduleId/add-recipients
curl -L -X PUT 'https://myorg.omniapp.co/api/v1/schedules/123e4567-e89b-12d3-a456-426614174000/add-recipients' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"emails": ["user@example.com"]
}'

Parameters

Loading parameters...

Response

200 OK

Successful requests will return a 200 OK status and a response body similar to the following:

{
"addedRecipientsCount": 2,
"success": true
}
400 Bad Request
{
"detail": "<errorReason>",
"status": 400
}
ErrorError detail
Invalid UUID formatuserIds: Invalid uuid
Invalid email formatemails: Invalid email address
Empty request bodyPlease provide either valid email addresses, valid user IDs, or both
No recipients provided- At least one recipient must be provided
- {parameter}: Array must contain at least 1 element(s)
Invalid membersInvalid recipient(s): The following members do not exist or do not have access to this organization: {userId}
Unsupported destination typeCannot add recipients to destination type {destinationType}
404 Not Found
{
"detail": "<errorReason>",
"status": 404
}
ErrorError detail
Schedule not foundScheduled task with id {scheduleId} does not exist
429 Too Many Requests

Results from too many requests in a given time frame. Refer to the Rate limiting documentation for more information.

Remove recipients from schedule

Removes one or more recipients from an existing scheduled email task. Recipients can be specified by email address or user ID.

Limitations

This API only works with schedules with email destinations.

PUT /api/v1/schedules/:scheduleId/remove-recipients
curl -L -X PUT 'https://myorg.omniapp.co/api/v1/schedules/123e4567-e89b-12d3-a456-426614174000/remove-recipients' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"emails": ["user@example.com"]
}'

Parameters

Loading parameters...

Response

200 OK

Successful requests will return a 200 OK status and a response body similar to the following:

{
"removedRecipientsCount": 2,
"success": true
}
400 Bad Request
{
"detail": "<errorReason>",
"status": 400
}
ErrorError detail
Invalid UUID formatBad Request: userIds: Invalid uuid
Invalid email formatBad Request: emails: Invalid email address
Empty request bodyPlease provide either valid email addresses, valid user IDs, or both
No recipients provided- At least one recipient must be provided
- {parameter}: Array must contain at least 1 element(s)
Invalid membersInvalid recipient(s): The following members do not exist or do not have access to this organization: {userId}
Unsupported destination typeCannot change recipients on a scheduled task destination of type {destinationType}
404 Not Found
{
"detail": "<errorReason>",
"status": 404
}
ErrorError detail
Schedule not foundScheduled task with id {scheduleId} does not exist
429 Too Many Requests

Results from too many requests in a given time frame. Refer to the Rate limiting documentation for more information.

Create or update an email-only user

Creates or updates an email-only user. An email-only user is a recipient of a delivery that isn't associated with an Omni account.

If Omni matches the provided email to an existing email-only user, the user will be updated according to the userAttributes in the request body.

tip

Need to include multiple email-only users? Use the Create or update multiple email-only users endpoint.

POST /api/v1/users/email-only
curl -X POST'https://myorg.omniapp.co/api/v1/users/email-only' \
--H 'Content-Type: application/json' \
--H 'Authorization: Bearer <TOKEN>' \
--data '{
"email": "iamagoodblob@myorg.co"
}'

Parameters

Loading parameters...

Response

200 OK

Successful requests will return a 200 OK status and a response body similar to the following:

200 OK
 {
"email": "iamagoodblob@myorg.co",
"userId": "9e8719d9-276a-4964-9395-a493189a247c"
}
400 Bad Request
{
"detail": "<errorReason>",
"status": 400
}
ErrorError detail
Invalid JSON in request bodyInvalid JSON
Missing email parameteremail: email is required
email value isn't a valid email addressemail: Invalid email address
User attribute does not existThe provided user attributes: \"<attribute>\" do not match the names of existing user attributes.
User attribute type mismatchUser Attribute <attribute> is type number, but passed-in value <value> is not a number.
Invalid omni_user_timezone valueThe timezone <invalidTimezone> is not supported. Please see the connection page or user profile page for the list of valid timezones. Use e.g. \"America/New_York\" instead of \"EST\"
Multiple values not provided as arrayUser Attribute <attribute> has multiple values enabled, but the passed-in value is not an array. If passing a single value for a user attribute with multiple values enabled, please wrap the value in an array [x].
429 Too Many Requests

Results from too many requests in a given time frame. Refer to the Rate limiting documentation for more information.

Create or update multiple email-only users

Creates or updates up to 20 email-only users. An email-only user is a recipient of a delivery that isn't associated with an Omni account.

If Omni matches a provided email to an existing email-only user, the user will be updated according to the userAttributes in the request body.

POST /api/v1/users/email-only/bulk
curl -X POST'https://myorg.omniapp.co/api/v1/users/email-only/bulk' \
--H 'Content-Type: application/json' \
--H 'Authorization: Bearer <TOKEN>' \
--data '{
"users":[
{
"email":"iamagoodblob@myorg.co"
},
{
"email":"blobmanager@myorg.co"
}
]
}'

Parameters

Loading parameters...

Response

200 OK

Successful requests will return a 200 OK status and a response body similar to the following:

200 OK
{
"results": [
{
"email": "iamagoodblob@myorg.co",
"userId": "1e23dadc-961b-4a21-b36b-17168130fc3f"
},
{
"email": "blobmanager@myorg.co",
"userId": "e9d19f71-0b59-4f8e-8343-a75d30576d28"
}
]
}
400 Bad Request
{
"detail": "<errorReason>",
"status": 400
}
ErrorError detail
Invalid JSON in request bodyInvalid JSON
Maximum users exceededusers: Maximum of 20 users can be processed in a single request
Missing users parameterusers: users is required
Missing email parameteremail: email is required
email value isn't a valid email addressemail: Invalid email address
User attribute does not existThe provided user attributes: \"<attribute>\" do not match the names of existing user attributes.
User attribute type mismatchUser Attribute <attribute> is type number, but passed-in value <value> is not a number.
Invalid omni_user_timezone valueThe timezone <invalidTimezone> is not supported. Please see the connection page or user profile page for the list of valid timezones. Use e.g. \"America/New_York\" instead of \"EST\"
Multiple values not provided as arrayUser Attribute <attribute> has multiple values enabled, but the passed-in value is not an array. If passing a single value for a user attribute with multiple values enabled, please wrap the value in an array [x].
429 Too Many Requests

Results from too many requests in a given time frame. Refer to the Rate limiting documentation for more information.

Pause a schedule

Pauses a schedule using the schedule's UUID.

PUT /api/v1/schedules/:scheduleId/pause
curl -L -X PUT 'https://myorg.omniapp.co/api/v1/schedules/123e4567-e89b-12d3-a456-426614174000/pause' \
-H 'Authorization: Bearer <TOKEN>'

Parameters

Note: The scheduleId must be provided as a path parameter.

Response

200 OK

Successful requests will return a 200 OK status and a response body similar to the following:

{
"success": true
}
400 Bad Request
{
"detail": "<errorReason>",
"status": 400
}
IssueError detail
Schedule is system disabledSchedule is system disabled
Schedule is already pausedSchedule is already paused
404 Not Found
{
"detail": "<errorReason>",
"status": 404
}
IssueError detail
Schedule not foundScheduled task with id {scheduleId} does not exist
429 Too Many Requests

Results from too many requests in a given time frame. Refer to the Rate limiting documentation for more information.

Resume a schedule

Resumes a schedule using the schedule's UUID.

PUT /api/v1/schedules/:scheduleId/resume
curl -L -X PUT 'https://myorg.omniapp.co/api/v1/schedules/123e4567-e89b-12d3-a456-426614174000/resume' \
-H 'Authorization: Bearer <TOKEN>'

Parameters

Note: The scheduleId must be provided as a path parameter.

Response

200 OK

Successful requests will return a 200 OK status and a response body similar to the following:

{
"success": true
}
FieldTypeDescription
successbooleanIndicates schedule has been resumed successfully
400 Bad Request
{
"detail": "<errorReason>",
"status": 400
}
IssueError detail
Schedule is system disabledSchedule is system disabled
Schedule is already resumedSchedule is already resumed
404 Not Found
{
"detail": "<errorReason>",
"status": 404
}
IssueError detail
Schedule not foundScheduled task with id {scheduleId} does not exist
429 Too Many Requests

Results from too many requests in a given time frame. Refer to the Rate limiting documentation for more information.

Delete a schedule

Deletes a schedule using the schedule's UUID.

DELETE /api/v1/schedules/:scheduleId
curl -L -X DELETE 'https://myorg.omniapp.co/api/v1/schedules/61a8e93b-71f4-4cda-b1f9-a91aa0ad05bc' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json'

Parameters

Loading parameters...

Response

200 OK

Successful requests will return a 200 OK status and a response body similar to the following:

{
"success": true
}
400 Bad Request
{
"detail": "<errorReason>",
"status": 400
}
ErrorError detail
Invalid schedule UUIDscheduleId: Invalid uuid
Invalid methodInvalid request method
404 Not Found
{
"detail": "<errorReason>",
"status": 404
}
ErrorError detail
Schedule not foundScheduled task with id <scheduleId> does not exist
429 Too Many Requests

Results from too many requests in a given time frame. Refer to the Rate limiting documentation for more information.