Create a schedule
POST/v1/schedules
(tenant_id, name) is unique — the name is the tenant's idempotency handle for
create. Re-posting an identical name returns 409 name_taken.
Required per kind: cron → cron_expr; interval → interval_seconds;
one_shot → starts_at (the single fire instant).
The webhook secret is write-only: accepted here (and on PATCH), encrypted at
rest, and never returned by any read endpoint.
Request
Responses
- 201
- 403
- 409
- 422
- 429
Schedule created (status active, next_fire_at computed)
Caller is not a tenant_admin (forbidden), plan limit reached (schedule_limit_exceeded), or interval below plan floor (interval_too_short)
A schedule with this name already exists for the tenant (name_taken)
Validation failed (validation_failed, invalid_cron, invalid_timezone, invalid_target_url, payload_too_large)
Rate limited (rate_limited)