schedules
GET /schedules
List every tick schedule of the project (one plane, read-only)
Every WP-V9 tick schedule of the resolved project and environment, across consumer kinds (CR-4; WP-U22 req 8): source syncs (WP-C8), export schedules (WP-V10), observation-time rescore sweeps (WP-V14), alert-rule evaluation (WP-V13) and the customer map's schedule (customer_map, CM-06). Read-only: each item's manage_href names its consumer's own resource, where it is created, paused, resumed, edited or deleted. next_tick_at is computed by the server on THE WP-V9 grid (latest-missed-only; never recompute it client-side). Ordered by created_at descending, then schedule_id descending, with cursor pagination (003 §1). With a target_type filter a page may be empty while next_cursor is set (each page scans a bounded number of schedules); continue while next_cursor is not null. A customer_map row (a kind ScheduleSummary admits through its kind pattern) links /customer-map/settings with a hint and is not paused from here; its next_tick_at is null (the map settings decide the day, the local time and the pin: read next_run_at from GET /customer-map/settings), and its last_outcome and last_tick_at are the newest finished scheduled edition's. Requires the read scope.
Operation ID: listSchedules · Service: gateway-api
Authentication
apiKey(http (bearer)) — Project API key (003 §2):tsk_live_…ortsk_test_…inAuthorization: Bearer. Scoped to exactly one project + environment; scopes are a subset ofingest,read,admin. Keys are stored hashed and shown once at creation.consoleSession(http (bearer)) — Console session (003 §2): Identity Platform JWT. Data-plane calls addX-Tessera-Project+X-Tessera-Environmentheaders, validated against org membership.
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
cursor | query | no | string | Opaque pagination cursor from a previous response's next_cursor. |
enabled | query | no | boolean | true: only active schedules; false: only paused ones. |
kind | query | no | string | Only these consumer kinds, comma-separated (at most 8), e.g. kind=export,source_sync. Known kinds: source_sync, export, rescore_sweep, alert_rule, customer_map; an unknown well-formed kind matches nothing. |
limit | query | no | integer | Page size (cursor pagination, 003 §1). Maximum 200. |
target_id | query | no | string | Only schedules of this target id; requires target_type. |
target_type | query | no | string | Only schedules of this target type (source or slot); requires target_id. |
Pagination
Cursor pagination (003 §1): pass limit (max 200) and cursor; the
response is the pagination envelope — data plus next_cursor
(null on the last page).
Responses
| Status | Schema | Description |
|---|---|---|
200 | ScheduleSummaryPage | Page of schedules, newest first. |
default | ErrorEnvelope | Error response (003 §1). Every non-2xx response uses this envelope; the HTTP status matches error.code. Rate-limited requests get 429 resource_exhausted with retry_after_seconds and a Retry-After header; the X-RateLimit-* headers ride on EVERY response, success or error (003 §1; plan-driven per API key + endpoint class — WP-B2). A 503 unavailable carries retry_after_seconds too for a lock-wait timeout (SQLSTATE 55P03), a rule preview at capacity (preview_capacity_exhausted), or a label preview during which the erasure of every entity holding its censor clock began (label_preview_clock_entity_erased): how long to wait before retrying. |
GET /source-sync-schedules
List the project's source sync schedules
Every source sync schedule of the resolved project and environment (WP-C8), ordered by schedule_id descending (newest first), cursor pagination (003 §1). Each item is the same SourceSyncSchedule that GET /sources/\{source_id\}/schedule returns. Requires the read scope.
Operation ID: listSourceSyncSchedules · Service: gateway-api
Authentication
apiKey(http (bearer)) — Project API key (003 §2):tsk_live_…ortsk_test_…inAuthorization: Bearer. Scoped to exactly one project + environment; scopes are a subset ofingest,read,admin. Keys are stored hashed and shown once at creation.consoleSession(http (bearer)) — Console session (003 §2): Identity Platform JWT. Data-plane calls addX-Tessera-Project+X-Tessera-Environmentheaders, validated against org membership.
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
cursor | query | no | string | Opaque pagination cursor from a previous response's next_cursor. |
limit | query | no | integer | Page size (cursor pagination, 003 §1). Maximum 200. |
Pagination
Cursor pagination (003 §1): pass limit (max 200) and cursor; the
response is the pagination envelope — data plus next_cursor
(null on the last page).
Responses
| Status | Schema | Description |
|---|---|---|
200 | SourceSyncSchedulePage | Page of source sync schedules, newest first. |
default | ErrorEnvelope | Error response (003 §1). Every non-2xx response uses this envelope; the HTTP status matches error.code. Rate-limited requests get 429 resource_exhausted with retry_after_seconds and a Retry-After header; the X-RateLimit-* headers ride on EVERY response, success or error (003 §1; plan-driven per API key + endpoint class — WP-B2). A 503 unavailable carries retry_after_seconds too for a lock-wait timeout (SQLSTATE 55P03), a rule preview at capacity (preview_capacity_exhausted), or a label preview during which the erasure of every entity holding its censor clock began (label_preview_clock_entity_erased): how long to wait before retrying. |
GET /sources/{source_id}/schedule
Get a source's sync schedule
The batch source's sync schedule (WP-C8 req 6) with its outcome state: the newest handled tick, its outcome, the newest scheduled sync and the consecutive-failure count (req 10). A source without a schedule, and another project's source, answer 404 not_found (003 §3). Requires the read scope.
Operation ID: getSourceSyncSchedule · Service: gateway-api
Authentication
apiKey(http (bearer)) — Project API key (003 §2):tsk_live_…ortsk_test_…inAuthorization: Bearer. Scoped to exactly one project + environment; scopes are a subset ofingest,read,admin. Keys are stored hashed and shown once at creation.consoleSession(http (bearer)) — Console session (003 §2): Identity Platform JWT. Data-plane calls addX-Tessera-Project+X-Tessera-Environmentheaders, validated against org membership.
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
source_id | path | yes | string | Source id (src_ ULID). |
Responses
| Status | Schema | Description |
|---|---|---|
200 | SourceSyncSchedule | The source's sync schedule. |
default | ErrorEnvelope | Error response (003 §1). Every non-2xx response uses this envelope; the HTTP status matches error.code. Rate-limited requests get 429 resource_exhausted with retry_after_seconds and a Retry-After header; the X-RateLimit-* headers ride on EVERY response, success or error (003 §1; plan-driven per API key + endpoint class — WP-B2). A 503 unavailable carries retry_after_seconds too for a lock-wait timeout (SQLSTATE 55P03), a rule preview at capacity (preview_capacity_exhausted), or a label preview during which the erasure of every entity holding its censor clock began (label_preview_clock_entity_erased): how long to wait before retrying. |
PUT /sources/{source_id}/schedule
Create or replace a source's sync schedule
Binds the batch source to one WP-V9 cadence (UTC only: \{kind: interval, every_hours: 1..168, anchor?\} or \{kind: daily, at_utc: "HH:MM"\}), validated by THE tessera_core.scheduler validator (WP-C8 req 6). The first PUT mints the sch_ schedule (kind source_sync); a later PUT replaces the cadence and enabled of the same schedule and keeps its id and outcome state. At most one schedule per source. Each due tick runs one sync through the same creation path as POST /sources/\{source_id\}/syncs, in the mode a manual sync would resolve (incremental when the source supports it, else full); only the latest missed tick runs after downtime (no backfill). A tick that finds a queued or running sync launches nothing and records skipped_overlap (req 8). Failures are surfaced on the schedule and it is never disabled automatically (req 10). enabled: false pauses the schedule (no ticks) without deleting it. A stream source answers 400 failed_precondition (stream_source_not_syncable). Requires the admin scope.
Operation ID: putSourceSyncSchedule · Service: gateway-api
Authentication
apiKey(http (bearer)) — Project API key (003 §2):tsk_live_…ortsk_test_…inAuthorization: Bearer. Scoped to exactly one project + environment; scopes are a subset ofingest,read,admin. Keys are stored hashed and shown once at creation.consoleSession(http (bearer)) — Console session (003 §2): Identity Platform JWT. Data-plane calls addX-Tessera-Project+X-Tessera-Environmentheaders, validated against org membership.
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
source_id | path | yes | string | Source id (src_ ULID). |
Request body
Responses
| Status | Schema | Description |
|---|---|---|
200 | SourceSyncSchedule | The stored sync schedule. |
default | ErrorEnvelope | Error response (003 §1). Every non-2xx response uses this envelope; the HTTP status matches error.code. Rate-limited requests get 429 resource_exhausted with retry_after_seconds and a Retry-After header; the X-RateLimit-* headers ride on EVERY response, success or error (003 §1; plan-driven per API key + endpoint class — WP-B2). A 503 unavailable carries retry_after_seconds too for a lock-wait timeout (SQLSTATE 55P03), a rule preview at capacity (preview_capacity_exhausted), or a label preview during which the erasure of every entity holding its censor clock began (label_preview_clock_entity_erased): how long to wait before retrying. |
DELETE /sources/{source_id}/schedule
Delete a source's sync schedule
Deregisters the schedule: no further ticks are issued and later reads answer 404 not_found (WP-C8 req 6). Syncs the schedule already started run to completion and keep their schedule_id provenance (GET /syncs/\{sync_id\}/trigger). A source without a schedule answers 404. Requires the admin scope.
Operation ID: deleteSourceSyncSchedule · Service: gateway-api
Authentication
apiKey(http (bearer)) — Project API key (003 §2):tsk_live_…ortsk_test_…inAuthorization: Bearer. Scoped to exactly one project + environment; scopes are a subset ofingest,read,admin. Keys are stored hashed and shown once at creation.consoleSession(http (bearer)) — Console session (003 §2): Identity Platform JWT. Data-plane calls addX-Tessera-Project+X-Tessera-Environmentheaders, validated against org membership.
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
source_id | path | yes | string | Source id (src_ ULID). |
Responses
| Status | Schema | Description |
|---|---|---|
204 | — | Sync schedule deleted. |
default | ErrorEnvelope | Error response (003 §1). Every non-2xx response uses this envelope; the HTTP status matches error.code. Rate-limited requests get 429 resource_exhausted with retry_after_seconds and a Retry-After header; the X-RateLimit-* headers ride on EVERY response, success or error (003 §1; plan-driven per API key + endpoint class — WP-B2). A 503 unavailable carries retry_after_seconds too for a lock-wait timeout (SQLSTATE 55P03), a rule preview at capacity (preview_capacity_exhausted), or a label preview during which the erasure of every entity holding its censor clock began (label_preview_clock_entity_erased): how long to wait before retrying. |
Errors
Every non-2xx response uses the 003 §1 error envelope; error.request_id
matches the X-Request-Id response header, and the HTTP status always
matches error.code:
{
"error": {
"code": "invalid_argument",
"details": [
{
"type": "field_violation"
}
],
"message": "human-readable",
"request_id": "req_01hxample"
}
}
Closed error-code set (003 §1): invalid_argument, unauthenticated, permission_denied, not_found, already_exists, failed_precondition, resource_exhausted, internal, unavailable.
resource_exhausted responses (HTTP 429) additionally carry
retry_after_seconds. See ErrorEnvelope.