Models and states
Canonical JSON models shared by the API and SDKs. JavaScript uses camelCase, Go uses typed structs, and Elixir returns string-keyed maps.
Action and recurrence
| Model | Fields |
|---|---|
| Action | id, identifier, display_name, description, payload_schema, configuration, inserted_at, updated_at |
| once | frequency, date, local_time, timezone |
| daily | frequency, interval, local_time, timezone, starts_at?, ends? |
| weekly | frequency, interval, weekdays, local_time, timezone, starts_at?, ends? |
| monthly | frequency, interval, monthly_mode, day_of_month?, local_time, timezone, starts_at?, ends? |
| End condition | never; on_date with date; or after_occurrences with count |
Weekdays are lowercase English names. Monthly modes are day_of_month, first_monday, last_friday, and last_day. Invalid local dates are rejected; timezone calculation follows IANA daylight-saving rules.
Schedule and run
| Model | Fields or states |
|---|---|
| Schedule input | action, recurrence, timezone, external_user_id, external_organization_id, payload?, overlap_policy?, misfire_policy? |
| Schedule output | id, status, owner IDs, action summary, payload, recurrence, timezone, start_at, end_condition, policies, next_run_at, last_run_at, revision, timestamps |
| Schedule status | active | paused | deleted |
| Overlap policy | skip | allow |
| Misfire policy | skip | run_once | catch_up |
| Run status | scheduled | delivering | delivered | retrying | succeeded | failed | cancelled | skipped |
| Run output | id, schedule_id, owner, action, status, nominal_at, scheduled_at, started_at, completed_at, attempt_count, payload_snapshot, error, response_code, schedule_revision, timestamps |
Approval and policy
| Model | Fields or states |
|---|---|
| Approval input | resource_type, resource_id, action, requester_id, policy_id?, title?, description?, metadata?, expires_at? |
| Approval output | id, resource identity, action, requester_id, approver_id, status, content, revision, policy_id, immutable policy_snapshot, decisions, events, lifecycle timestamps |
| Approval status | pending | approved | rejected | cancelled | expired | revoked |
| Decision input | decision: approved | rejected, approver_id, reason? |
| Approval check | approved, status, approval_id? |
| Policy input | resource_pattern, allowed_approvers, mode, required_approvals, allow_self_approval |
| Policy mode | any | all | quorum |
Policy snapshots are immutable
Audit, Bulk, and session
| Model | Fields or states |
|---|---|
| Audit event | id, component, type, actor_id?, subject_type?, subject_id?, source, visibility, data, occurred_at, inserted_at |
| Audit source | system | manual |
| Audit visibility | project | participants | restricted |
| Bulk input | action, items, chunk_size?, metadata? |
| Bulk operation | id, action, status, metadata, chunk_size, progress, lifecycle timestamps |
| Bulk status | queued | running | succeeded | completed_with_errors | cancelled |
| Bulk chunk | id, operation_id, index, items, status, attempt_count, response_status, response_body, error, timestamps |
| Session input/output | claims object → token |
Bulk progress exposes totals for items and chunks plus succeeded, failed, and pending counts. Treat progress as a snapshot; poll or use your own application transport to refresh it.