Create a schedule resource by POSTing to /api/v2/business_hours/schedules with a name and an array of intervals defining working hours for each day of the week.
Add holiday dates to the schedule by POSTing to /api/v2/business_hours/schedules/{schedule_id}/holidays with a list of date objects so the engine correctly skips non-working days.
Create an SLA policy by POSTing to /api/v2/slas/policies; include a filter object defining which tickets the policy applies to (e.g., by priority, tag, or ticket field value).
In the policy_metrics array, define each metric target (e.g., first_reply_time, next_reply_time) with a target value in minutes, the business_hours boolean set to true, and the priority level.
Set business_hours to true in each policy metric to instruct Zendesk to count elapsed time only during the schedule's defined working hours when measuring SLA compliance.
Verify the schedule is attached to the account correctly by retrieving the schedule via GET /api/v2/business_hours/schedules/{schedule_id} and confirming the intervals match the intended configuration before creating dependent SLA policies.
Known gotchas
Schedules and SLA policies are separate resources with no direct foreign-key link in the API response; the schedule is referenced globally by the account and applied when business_hours is true on a policy metric — there is no schedule_id field on the SLA policy itself.
SLA policies are evaluated in order by their position field; if multiple policies match a ticket, only the first matching policy (lowest position number) is applied — verify ordering after programmatic creation.
Business hours SLA timers pause and resume at schedule boundaries; if a ticket is created outside business hours, the SLA clock does not start until the next schedule interval begins — this is intended behavior but frequently surprises integrators who observe a SLA target appearing to start late.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp