The Platform API

Schedules & Compliance

Manage your videos, ask questions, and build applications with the Platform API. Explore the operations below for request details, responses, and examples.

Schedules & Compliance

Daily schedules in the site's local time — such as a digest of what happened at the site — and compliance checks: time-of-day obligations from your playbook ("shop open by 09:00") that are judged against the footage and recorded as pass, fail or inconclusive.

GET/api/v1/projects/:projectId/schedulesList schedules

List schedules

Query param: kind.

POST/api/v1/projects/:projectId/schedulesCreate a schedule

Create a schedule

spec is { "type": "daily", "at": "HH:MM", "days"?: [0-6] } (0 = Sunday). timezone defaults to the project's site timezone. A digest schedule takes payload.template: site or compliance, and is delivered to the project's notification channels. catch_up: run_once_late or skip after a missed time. Returns 201.

{
    "kind": "digest",
    "spec": { "type": "daily", "at": "18:30", "days": [0, 1, 2, 3, 4] },
    "timezone": "Asia/Jerusalem",
    "payload": { "template": "site" }
  }
PATCH/api/v1/projects/:projectId/schedules/:scheduleIdUpdate a schedule

Update a schedule

Change spec, timezone, payload, enabled or catch_up.

DELETE/api/v1/projects/:projectId/schedules/:scheduleIdDelete a schedule

Delete a schedule

Send the request to https://platform.endlessai.com/api/v1/projects/:projectId/schedules/:scheduleId using your project key or user token.

POST/api/v1/projects/:projectId/schedules/:scheduleId/runRun a schedule now

Run a schedule now

An extra run; the schedule's next regular time is unchanged.

POST/api/v1/projects/:projectId/compliance/compileBuild compliance checks from the playbook

Build compliance checks from the playbook

Reads the project's compiled playbook and creates one scheduled check per time-of-day obligation, replacing the previous set. Rules it cannot pin to a time become open questions on the playbook. Optional timezone; otherwise the site timezone is used. Takes seconds and returns the plan.

GET/api/v1/projects/:projectId/compliance/planGet the compliance plan

Get the compliance plan

{
    "data": {
      "status": "compiled",
      "compiled_at": "2026-10-01T07:00:00.000Z",
      "timezone": "Asia/Jerusalem",
      "check_count": 3,
      "check_ids": ["CHECK_ID_1", "CHECK_ID_2", "CHECK_ID_3"],
      "open_question_ids": [],
      "compliance_applied": "full"
    },
    "meta": {}
  }
GET/api/v1/projects/:projectId/compliance/checksList compliance checks

List compliance checks

Query param: status (active, paused, archived).

PATCH/api/v1/projects/:projectId/compliance/checks/:checkIdPause or resume a compliance check

Pause or resume a compliance check

{ "status": "paused" }
GET/api/v1/projects/:projectId/compliance/verdictsList compliance verdicts

List compliance verdicts

Query params: check_id, limit.

{
    "data": [
      {
        "id": "VERDICT_ID",
        "check_id": "CHECK_ID",
        "window_start": "2026-10-01T05:30:00.000Z",
        "window_end": "2026-10-01T06:30:00.000Z",
        "verdict": "fail",
        "reason": "The shutters were still down at 09:20.",
        "alert_id": "ALERT_ID",
        "created_at": "2026-10-01T06:31:04.000Z"
      }
    ],
    "meta": { "total": 1, "returned": 1, "hasMore": false }
  }