# POST /v1/durable/schedules - Create a new schedule

Source: <https://everruns.com/docs/api/operations/create_schedule/>

POST

/v1/durable/schedules

Select code samplecURL (shell:curl)

```js
const url = 'https://app.everruns.com/api/v1/durable/schedules';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"catch_up_missed":false,"cron_expression":"0 2 * * *","description":"Fires the support-triage agent every night at 02:00 UTC","enabled":true,"max_catch_up":3,"max_concurrent":1,"name":"nightly-triage","retry_policy":"example","target":{"input":{"session_id":"session_01933b5a00007000800000000000001"},"name":"session.run","type":"workflow"},"timezone":"UTC"}'
};


try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```sh
curl --request POST \
  --url https://app.everruns.com/api/v1/durable/schedules \
  --header 'Content-Type: application/json' \
  --data '{ "catch_up_missed": false, "cron_expression": "0 2 * * *", "description": "Fires the support-triage agent every night at 02:00 UTC", "enabled": true, "max_catch_up": 3, "max_concurrent": 1, "name": "nightly-triage", "retry_policy": "example", "target": { "input": { "session_id": "session_01933b5a00007000800000000000001" }, "name": "session.run", "type": "workflow" }, "timezone": "UTC" }'
```

* Production APIapp.everruns.com/api/v1/durable/schedules

## Request Bodyrequired

Media typeapplication/json

Create schedule request

object

**catch\_up\_missed**

Whether to catch up missed triggers (default: false)

boolean

##### Example

```json
false
```

**cron\_expression**

required

Cron expression (5-field or 7-field). Standard `min hour day-of-month month day-of-week` form.

string

##### Example

```plaintext
0 2 * * *
```

**description**

Optional description

string | null

##### Example

```plaintext
Fires the support-triage agent every night at 02:00 UTC
```

**enabled**

Whether schedule is enabled (default: true)

boolean

##### Example

```json
true
```

**max\_catch\_up**

Max catch-up executions when `catch_up_missed` is true. Older missed fires are dropped.

integer | null format: int32

##### Example

```json
3
```

**max\_concurrent**

Max concurrent executions. Omit for no limit beyond the worker pool’s concurrency.

integer | null format: int32

##### Example

```json
1
```

**name**

required

Unique name for the schedule

string

##### Example

```plaintext
nightly-triage
```

**retry\_policy**

Retry policy for failed executions (provider-specific JSON; see the durable engine’s `RetryPolicy`). Example: `{"max_attempts": 3, "initial_backoff_secs": 30, "backoff_multiplier": 2.0}`.

**target**

required

Target to trigger. Variant shape is defined on `ScheduleTarget`.

object

**input**

Input JSON for the workflow/activity

**name**

required

Workflow type name or activity type name

string

##### Example

```plaintext
session.run
```

**type**

required

Target type: “workflow” or “activity”

string

##### Example

```plaintext
workflow
```

##### Example

```json
{
  "input": {
    "session_id": "session_01933b5a00007000800000000000001"
  },
  "name": "session.run",
  "type": "workflow"
}
```

**timezone**

Timezone (default: UTC). IANA name (e.g. `UTC`, `America/New_York`).

string

##### Example

```plaintext
UTC
```

## Responses

### 201

Schedule created

Media typeapplication/json

Schedule response

object

**catch\_up\_missed**

required

When `true`, missed fires (while the scheduler was down, paused, or unreachable) are queued and run after recovery, subject to `max_catch_up`.

boolean

**created\_at**

required

Timestamp when this resource was created (RFC 3339).

string format: date-time

**cron\_expression**

required

Cron expression in the standard `min hour day-of-month month day-of-week` form (6 fields with seconds optional). Evaluated in `timezone`.

string

**description**

Human-readable description. Safe to render in user-facing messages.

string | null

**enabled**

required

When `false`, the schedule is paused — kept in storage but never fires until re-enabled.

boolean

**id**

required

UUID of the schedule.

string format: uuid

**last\_triggered\_at**

Timestamp of the most recent fire (RFC 3339). `None` if never triggered.

string | null format: date-time

**max\_catch\_up**

Maximum number of missed fires to replay when `catch_up_missed` is `true`. Older missed fires are dropped. `None` means no cap.

integer | null format: int32

**max\_concurrent**

Maximum number of overlapping executions allowed. `None` means no limit beyond the worker pool’s concurrency.

integer | null format: int32

**name**

required

Human-readable name. Safe to render in user-facing messages.

string

**next\_trigger\_at**

Timestamp of the next scheduled fire (RFC 3339). `None` when the schedule is disabled or the cron expression has no upcoming match.

string | null format: date-time

**retry\_policy**

Optional retry policy for failed runs (provider-specific JSON; see the durable engine’s `RetryPolicy`). Example: `{"max_attempts": 3, "initial_backoff_secs": 30, "backoff_multiplier": 2.0}`.

**target**

required

What the schedule invokes when it fires (a session, an agent, an app channel, etc.).

object

**input**

required

Input JSON payload passed to the workflow/activity on each fire. Example: `{"session_id": "session_01933b5a000070008000000000000001"}`.

object

**name**

required

Human-readable name. Safe to render in user-facing messages.

string

**type**

required

Target type discriminator (`workflow` or `activity`).

string

**timezone**

required

IANA timezone name used to interpret `cron_expression` (e.g. `UTC`, `America/New_York`).

string

**updated\_at**

required

Timestamp when this resource was last updated (RFC 3339).

string format: date-time

##### Example

```json
{
  "catch_up_missed": false,
  "created_at": "2026-05-01T12:00:00Z",
  "cron_expression": "0 2 * * *",
  "description": "Fires the support-triage agent every night at 02:00 UTC",
  "enabled": true,
  "id": "01933b5a-0000-7000-8000-000000000001",
  "last_triggered_at": "2026-05-25T02:00:00Z",
  "max_catch_up": 3,
  "max_concurrent": 1,
  "name": "nightly-triage",
  "next_trigger_at": "2026-05-26T02:00:00Z",
  "target": {
    "name": "session.run",
    "type": "workflow"
  },
  "timezone": "UTC",
  "updated_at": "2026-05-20T12:00:00Z"
}
```

### 400

Invalid request

Media typeapplication/json

Standard error response.

Wire shape is [RFC 9457 Problem Details](https://www.rfc-editor.org/rfc/rfc9457): every error response includes `title` and `status`, and may include `detail`, `code`, `allowed_actions`, `retry_after_seconds`, `instance`, and `type`. The content type is rewritten to `application/problem+json` with the `application/problem+json` content type.

object

**allowed\_actions**

Recovery actions the caller can take next.

Array\<object>

Agent-actionable link describing a follow-up the caller can take. Used in two contexts:

* **Error recovery** — `ErrorResponse.allowed_actions` carries `rel`s like `retry`, `retry-later`, `unarchive`, `get-existing` so the agent knows the right next call after a 4xx/429.
* **Entity hypermedia** — `WithUrls<T>.allowed_actions` carries state-aware `rel`s like `cancel`, `events`, `self`, `update` on the entity itself so the agent can follow links instead of reconstructing routes from prose.

The shape is intentionally identical across both contexts; the closed `rel` vocabulary distinguishes them.

object

**hint**

Short, agent-readable hint (e.g. “Shorten ‘name’ to <= 200 chars.”, “Cancel the active turn for this session.”).

string | null

**href**

Absolute (preferred) or relative URL the caller may invoke directly. **Always present on entity hypermedia actions** (`WithUrls<T>.allowed_actions`); **optional on error-recovery actions** (`ErrorResponse.allowed_actions`) where the matching `operation_id` is enough and the URI is implicit from the failed call.

string | null

**method**

HTTP method to use against `href`. Required for entity hypermedia actions; usually omitted on error-recovery actions where the same operation is retried with its original method.

string | null

**operation\_id**

OpenAPI `operationId` the caller should invoke. Lets an MCP client resolve the call without parsing `href`.

string | null

**rel**

required

Link relation describing the action. Examples: `self`, `cancel`, `pause`, `resume`, `events`, `retry`, `retry-later`, `unarchive`, `get-existing`, `delete`, `update`.

string

**schema\_ref**

OpenAPI `$ref` to the request-body schema, when the action takes one (e.g. `#/components/schemas/UpdateSessionRequest`). Lets a tool-calling agent fetch the input shape without scanning the whole spec.

string | null

**code**

Stable, machine-readable error code (snake\_case).

string | null

**detail**

Human-readable explanation specific to this occurrence.

string | null

**instance**

Request URI for this occurrence.

string | null

**retry\_after\_seconds**

Seconds the caller should wait before retrying (429 / transient 503).

integer | null format: int32

**status**

required

HTTP status code; mirrors the response status line.

integer format: int32

**title**

required

Short, human-readable summary of the problem (e.g. “Not Found”).

string

**type**

RFC 9457 problem type URI. Optional; identifies the problem class.

string | null

##### Example

```json
{
  "allowed_actions": [
    {
      "method": "POST"
    }
  ],
  "code": "session_not_found",
  "detail": "Session session_01933b5a000070008000000000000001 not found in org org_01933b5a000070008000000000000001.",
  "instance": "/v1/sessions/session_01933b5a000070008000000000000001",
  "retry_after_seconds": 30,
  "status": 404,
  "title": "Session not found",
  "type": "https://everruns.com/docs/errors/session_not_found"
}
```

### 401

Authentication required

### 409

Schedule name already exists

Media typeapplication/json

Standard error response.

Wire shape is [RFC 9457 Problem Details](https://www.rfc-editor.org/rfc/rfc9457): every error response includes `title` and `status`, and may include `detail`, `code`, `allowed_actions`, `retry_after_seconds`, `instance`, and `type`. The content type is rewritten to `application/problem+json` with the `application/problem+json` content type.

object

**allowed\_actions**

Recovery actions the caller can take next.

Array\<object>

Agent-actionable link describing a follow-up the caller can take. Used in two contexts:

* **Error recovery** — `ErrorResponse.allowed_actions` carries `rel`s like `retry`, `retry-later`, `unarchive`, `get-existing` so the agent knows the right next call after a 4xx/429.
* **Entity hypermedia** — `WithUrls<T>.allowed_actions` carries state-aware `rel`s like `cancel`, `events`, `self`, `update` on the entity itself so the agent can follow links instead of reconstructing routes from prose.

The shape is intentionally identical across both contexts; the closed `rel` vocabulary distinguishes them.

object

**hint**

Short, agent-readable hint (e.g. “Shorten ‘name’ to <= 200 chars.”, “Cancel the active turn for this session.”).

string | null

**href**

Absolute (preferred) or relative URL the caller may invoke directly. **Always present on entity hypermedia actions** (`WithUrls<T>.allowed_actions`); **optional on error-recovery actions** (`ErrorResponse.allowed_actions`) where the matching `operation_id` is enough and the URI is implicit from the failed call.

string | null

**method**

HTTP method to use against `href`. Required for entity hypermedia actions; usually omitted on error-recovery actions where the same operation is retried with its original method.

string | null

**operation\_id**

OpenAPI `operationId` the caller should invoke. Lets an MCP client resolve the call without parsing `href`.

string | null

**rel**

required

Link relation describing the action. Examples: `self`, `cancel`, `pause`, `resume`, `events`, `retry`, `retry-later`, `unarchive`, `get-existing`, `delete`, `update`.

string

**schema\_ref**

OpenAPI `$ref` to the request-body schema, when the action takes one (e.g. `#/components/schemas/UpdateSessionRequest`). Lets a tool-calling agent fetch the input shape without scanning the whole spec.

string | null

**code**

Stable, machine-readable error code (snake\_case).

string | null

**detail**

Human-readable explanation specific to this occurrence.

string | null

**instance**

Request URI for this occurrence.

string | null

**retry\_after\_seconds**

Seconds the caller should wait before retrying (429 / transient 503).

integer | null format: int32

**status**

required

HTTP status code; mirrors the response status line.

integer format: int32

**title**

required

Short, human-readable summary of the problem (e.g. “Not Found”).

string

**type**

RFC 9457 problem type URI. Optional; identifies the problem class.

string | null

##### Example

```json
{
  "allowed_actions": [
    {
      "method": "POST"
    }
  ],
  "code": "session_not_found",
  "detail": "Session session_01933b5a000070008000000000000001 not found in org org_01933b5a000070008000000000000001.",
  "instance": "/v1/sessions/session_01933b5a000070008000000000000001",
  "retry_after_seconds": 30,
  "status": 404,
  "title": "Session not found",
  "type": "https://everruns.com/docs/errors/session_not_found"
}
```

### 500

Internal server error

Media typeapplication/json

Standard error response.

Wire shape is [RFC 9457 Problem Details](https://www.rfc-editor.org/rfc/rfc9457): every error response includes `title` and `status`, and may include `detail`, `code`, `allowed_actions`, `retry_after_seconds`, `instance`, and `type`. The content type is rewritten to `application/problem+json` with the `application/problem+json` content type.

object

**allowed\_actions**

Recovery actions the caller can take next.

Array\<object>

Agent-actionable link describing a follow-up the caller can take. Used in two contexts:

* **Error recovery** — `ErrorResponse.allowed_actions` carries `rel`s like `retry`, `retry-later`, `unarchive`, `get-existing` so the agent knows the right next call after a 4xx/429.
* **Entity hypermedia** — `WithUrls<T>.allowed_actions` carries state-aware `rel`s like `cancel`, `events`, `self`, `update` on the entity itself so the agent can follow links instead of reconstructing routes from prose.

The shape is intentionally identical across both contexts; the closed `rel` vocabulary distinguishes them.

object

**hint**

Short, agent-readable hint (e.g. “Shorten ‘name’ to <= 200 chars.”, “Cancel the active turn for this session.”).

string | null

**href**

Absolute (preferred) or relative URL the caller may invoke directly. **Always present on entity hypermedia actions** (`WithUrls<T>.allowed_actions`); **optional on error-recovery actions** (`ErrorResponse.allowed_actions`) where the matching `operation_id` is enough and the URI is implicit from the failed call.

string | null

**method**

HTTP method to use against `href`. Required for entity hypermedia actions; usually omitted on error-recovery actions where the same operation is retried with its original method.

string | null

**operation\_id**

OpenAPI `operationId` the caller should invoke. Lets an MCP client resolve the call without parsing `href`.

string | null

**rel**

required

Link relation describing the action. Examples: `self`, `cancel`, `pause`, `resume`, `events`, `retry`, `retry-later`, `unarchive`, `get-existing`, `delete`, `update`.

string

**schema\_ref**

OpenAPI `$ref` to the request-body schema, when the action takes one (e.g. `#/components/schemas/UpdateSessionRequest`). Lets a tool-calling agent fetch the input shape without scanning the whole spec.

string | null

**code**

Stable, machine-readable error code (snake\_case).

string | null

**detail**

Human-readable explanation specific to this occurrence.

string | null

**instance**

Request URI for this occurrence.

string | null

**retry\_after\_seconds**

Seconds the caller should wait before retrying (429 / transient 503).

integer | null format: int32

**status**

required

HTTP status code; mirrors the response status line.

integer format: int32

**title**

required

Short, human-readable summary of the problem (e.g. “Not Found”).

string

**type**

RFC 9457 problem type URI. Optional; identifies the problem class.

string | null

##### Example

```json
{
  "allowed_actions": [
    {
      "method": "POST"
    }
  ],
  "code": "session_not_found",
  "detail": "Session session_01933b5a000070008000000000000001 not found in org org_01933b5a000070008000000000000001.",
  "instance": "/v1/sessions/session_01933b5a000070008000000000000001",
  "retry_after_seconds": 30,
  "status": 404,
  "title": "Session not found",
  "type": "https://everruns.com/docs/errors/session_not_found"
}
```