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.
initial_events_versionintegerRead-only input content version, starting at 1. See Input version.
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.
initial_events_versioninteger (optional)Version of the input selected for the current execution attempt; omitted when input has not been selected or cannot be confirmed. See Input version.
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.

Input version

initial_events_version is maintained by the server and must not be supplied in create or update requests. A new Schedule starts at 1. The version increments only when the normalized initial_events content actually changes. Submitting identical content or changing the name, execution policy, or trigger policy does not increment it. Restoring previously used content creates a new version. For existing Schedules, the current input starts at 1; historical versions are not reconstructed. A Run is not bound to input when it is created. Before sending input for the first time in an attempt, the executor binds the matching content and version to the Run. Send retries and recovery within the same attempt reuse that binding; a new attempt may select updated input. Interpret the version together with attempt: its presence means that input has been selected, not that the runtime has received it or executed it successfully. The field is omitted for pending or skipped Runs that have not selected input, and for historical Runs whose execution input cannot be confirmed. An unknown version is not returned as 0 and must not be filled with the current Schedule version. Clients should tolerate the added field and treat a missing version as unknown. After creating or updating a Schedule, integrations can store the mapping between schedule_id, initial_events_version, and input content, then correlate execution input using the version in a Run or Webhook callback. The current Schedule returns the latest configuration, which may differ from that of a Run that has already started.

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.