EvoHub Docs Sign in

On-Call API › Schedules

Update a schedule

Use with AI
View as MarkdownThis page as plain text, for pasting into an AI tool Open in ClaudeAsk Claude questions about this page Open in ChatGPTAsk ChatGPT questions about this page
Connect to Cursor / VS Code / ClaudeSearch and read these docs from your AI tool (MCP server)

MCP server URL

https://docs-dev.evohub.io/mcp

Claude Code

claude mcp add --transport http evohub-docs-docs https://docs-dev.evohub.io/mcp

Claude (claude.ai and Claude Desktop): Settings → Connectors → Add custom connector, and paste the URL above.

Claude Desktop — claude_desktop_config.json

{
  "mcpServers": {
    "evohub-docs-docs": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://docs-dev.evohub.io/mcp"
      ]
    }
  }
}

Cursor — ~/.cursor/mcp.json

{
  "mcpServers": {
    "evohub-docs-docs": {
      "url": "https://docs-dev.evohub.io/mcp"
    }
  }
}

VS Code — .vscode/mcp.json

{
  "servers": {
    "evohub-docs-docs": {
      "type": "http",
      "url": "https://docs-dev.evohub.io/mcp"
    }
  }
}
PUT/api/v1/schedules/{id}

Changes the schedule. A field left out or empty keeps its value; active changes only when sent.

A schedule that belongs to a team is visible only to callers in that team (and to administrators acting in person); others get 404, as if it did not exist.

Permission (API-key scope): oncall:schedule:write.

Authorization

Any one of:

Parameters

Path parameters

  • id string required
    The schedule's id.
    Example: 5b1c7d2e-8f3a-4b9c-a0d1-e2f3a4b5c6d7

Request body required

Content type: application/json

Type: ScheduleWrite

On create name is required; on update an empty field keeps its value.

  • name string
    Max length: 100
  • description string
  • timezone string
    IANA name, e.g. Europe/Istanbul.
    Default: UTC
  • active boolean
    Default: true
  • team_id string
    A team the caller is in; defaults to the caller's first team on create.

Responses

200

The schedule after the change.

Content type: application/json

Type: object

  • data Schedule required
    Show Schedule properties
    • id string
    • org_id string
    • team_id string
      Empty for an organization-wide schedule.
    • name string
    • description string
    • timezone string
      IANA timezone every shift is evaluated in.
    • active boolean
    • layers array of ScheduleLayer
      Show ScheduleLayer properties
      • id string
      • schedule_id string
      • name string
      • priority integer
        Layers with a higher priority win over lower ones.
      • rotation_type RotationType
        One of: daily weekly custom
      • rotation_start string (date-time)
        When the rota's first turn started.
      • handoff_day integer
        Weekday of the handover for weekly rotas, 0 (Sunday) to 6.
      • handoff_time string
        HH:MM of the handover.
      • restrict_to_weekdays array of integer
      • restrict_start_time string
        HH:MM
      • restrict_end_time string
        HH:MM
      • rotations array of ScheduleRotation
        Show ScheduleRotation properties
        • id string
        • layer_id string
        • user_id string
        • position integer
          0-based place in the rota.
        • created_at string (date-time)
      • created_at string (date-time)
      • updated_at string (date-time)
    • overrides array of ScheduleOverride
      Show ScheduleOverride properties
      • id string
      • schedule_id string
      • user_id string
        Whom the override covers, when recorded.
      • override_user_id string
        Who is on call instead.
      • start_time string (date-time)
      • end_time string (date-time)
      • reason string
      • created_at string (date-time)
    • external_source string
      Where it was imported from (opsgenie, pagerduty); absent for schedules made in EvoHub.
    • external_id string
    • created_at string (date-time)
    • updated_at string (date-time)
  • success boolean required
    Value: true

400

The body is not JSON (INVALID_BODY); name is blank or longer than 100 characters (VALIDATION_FAILED); or timezone is not an IANA name (VALIDATION_ERROR).

Content type: application/json

Type: Error

  • error object required
    • code string required
      Machine-readable code. Branch on this.
    • message string required
      Human-readable explanation.

401

No API key was sent, or it is unknown, revoked or expired (UNAUTHORIZED).

Content type: application/json

Type: Error

  • error object required
    • code string required
      Machine-readable code. Branch on this.
    • message string required
      Human-readable explanation.

403

The key lacks the scope (FORBIDDEN), or team_id names a team the caller is not in (NOT_IN_TEAM).

Content type: application/json

Type: Error

  • error object required
    • code string required
      Machine-readable code. Branch on this.
    • message string required
      Human-readable explanation.

404

No schedule with this id in your organization (NOT_FOUND).

Content type: application/json

Type: Error

  • error object required
    • code string required
      Machine-readable code. Branch on this.
    • message string required
      Human-readable explanation.

429

Too many requests (RATE_LIMITED). Wait Retry-After seconds.

Headers

  • Retry-After integer
    Seconds to wait.

Content type: application/json

Type: Error

  • error object required
    • code string required
      Machine-readable code. Branch on this.
    • message string required
      Human-readable explanation.

500

Something went wrong on EvoHub's side (INTERNAL_ERROR). Retry later.

Content type: application/json

Type: Error

  • error object required
    • code string required
      Machine-readable code. Branch on this.
    • message string required
      Human-readable explanation.

Example request

curl -X PUT 'https://evohub.io/api/v1/schedules/5b1c7d2e-8f3a-4b9c-a0d1-e2f3a4b5c6d7' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <TOKEN>' \
  -d '{
  "active": false
}'

Last updated