Skip to main content
Schedules

Schedule schemas

Shared Schedule and Schedule Run response schemas for the Forward Schedule API.

Schedule object

Create, get, list, update, archive, pause, and unpause endpoints return this structure.
FieldTypeDescription
idstringSchedule ID, prefixed with sched_.
sourcestringAuthoritative creation method, currently api or tool. See Creation source.
source_session_idstring | nullOriginating Session. null for api; a nonempty sess_* for tool.
identity_idstringForward Identity ID that owns the Schedule.
template_idstringForward Template ID used for execution.
namestringSchedule name.
descriptionstringSchedule description; an empty string when unset.
statusstringactive or paused; archive state is expressed by archived_at.
paused_reasonobject | nullReason for pausing; null when not paused.
initial_eventsarrayInitial events injected into each execution.
executionobjectExecution policy. See Execution policy.
trigger_policyobjectTrigger policy. See Trigger policy.
environment_idstringExecution environment ID.
sinksarrayResult delivery targets; [] when none are configured.
metadataobjectCaller-provided business metadata.
archived_atstring | nullArchive timestamp in RFC 3339 format; null when not archived.
created_atstringCreation timestamp in RFC 3339 format.
updated_atstringLast update timestamp in RFC 3339 format.

Execution policy

FieldTypeDescription
session_modestringnew_session or reuse_session.
max_concurrent_runsintegerMaximum concurrent Runs for one Schedule.
max_attemptsintegerMaximum attempts for one Run, currently 1 or 2.
timeout_msintegerTimeout per attempt in milliseconds.

Trigger policy

FieldTypeDescription
typestringcron, once, interval, or manual.
expressionstringTrigger expression; empty or omitted for manual.
timezonestringIANA timezone; empty or omitted when not applicable.
start_atstringOptional execution window start in RFC 3339 format.
stop_atstringOptional execution window end in RFC 3339 format.
upcoming_runs_atarrayUpcoming trigger times in UTC ISO 8601 format; currently [] or at most one timestamp.
last_run_atstring | nullMost recent trigger time.
See Create a schedule for the public format and constraints of sinks.

Schedule Run object

Run, get Run, and list Runs endpoints return this structure.
FieldTypeDescription
idstringSchedule Run ID, prefixed with srun_.
sourcestringAuthoritative creation method of the parent Schedule, currently api or tool. See Creation source.
source_session_idstring | nullOriginating Session of the parent Schedule.
schedule_idstringParent Schedule ID.
identity_idstringForward Identity ID.
template_idstringForward Template ID.
session_idstring | nullSession created or used for this execution.
statusstringpending, running, completed, failed, or skipped.
trigger_contextobjectHow this Run was triggered. See Trigger Context.
errorobject | nullStructured error for a failed or skipped Run.
result_payloadstring | nullMain execution text result.
error_messagestring | nullDisplay-friendly error message; structured details remain in error.
push_sinkstring | nullSink type used for this IM delivery; null when not configured.
push_statusstringIM delivery status: pending, succeeded, failed, or skipped.
push_finished_atstring | nullIM delivery end time.
attemptintegerCurrent or final attempt number, starting at 1.
triggered_atstringTrigger timestamp in RFC 3339 format.
started_atstring | nullExecution start timestamp in RFC 3339 format.
completed_atstring | nullExecution end timestamp in RFC 3339 format.
duration_msinteger | nullExecution duration in milliseconds.
created_atstringRecord creation timestamp in RFC 3339 format.
Main execution status and IM delivery push_status are independent. When the Schedule has execution.max_attempts=2, the same Run may ultimately return attempt=2.

Creation source

source and source_session_id are read-only fields that are always present in complete v1/v2 Schedule and Schedule Run responses.
sourcesource_session_idMeaning
apinullCreated through the public Schedule API.
toolNonempty sess_*Created through a Forward managed tool; identifies the interactive Session that initiated the creation tool call.
The server records the source. It cannot be set in create or update requests, and filtering by source is not supported. metadata.source is mutable business metadata and does not represent the authoritative source. A Schedule Run inherits its parent Schedule's source, regardless of whether this Run was triggered manually or automatically, or whether sinks are configured. This also applies to historical Runs and Runs of archived Schedules. The Run's session_id identifies its execution Session; trigger_context.type identifies how this Run was triggered. The originating Session does not indicate an execution binding for reuse_session, and internal origin-result delivery targets are not exposed as the public source. The source fields are backward-compatible JSON additions; clients should tolerate unknown fields. After service deployment, query responses for historical Schedules and Runs also return these fields without a data backfill.

Trigger Context

typeDescription
scheduleAutomatically triggered by the Schedule trigger policy; includes scheduled_at.
manualManually triggered through the Run Schedule endpoint.

Run Error

error may be returned when status=failed or status=skipped; it is null when status=completed.
error.typeDescription
concurrency_limit_reachedThe Schedule has reached its concurrent Run limit. This trigger is recorded but is not executed.
session_creation_failedCreating or binding a Forward Session failed.
execution_failedTemplate execution failed.