Skip to main content
Your application talks to Output through a REST API. When you deploy Output, the API server exposes HTTP endpoints for running workflows, checking their status, and retrieving results. Your backend sends a request, Output orchestrates the workflow, and you get structured results back. During development, the API server starts automatically on port 3001 when you run output dev.

Two Ways to Run Workflows

Choose based on how long your workflow takes and how your application handles responses.

Run and Wait (Synchronous)

POST /workflow/run blocks until the workflow completes and returns the result in the response body. Use this when workflows complete quickly (seconds) and your client can wait.

Start and Poll (Asynchronous)

POST /workflow/start returns the workflow ID immediately. Poll for status and retrieve the result when ready. Use this for longer workflows — minutes or more — where blocking a request isn’t practical.

Workflow Result Payload

POST /workflow/run and GET /workflow/:id/result return the same structured workflow result:
When a workflow fails, the result includes status: "failed", output: null, and an error message. Trace metadata may still be present when available.

Interacting with Running Workflows

Output supports sending data to running workflows and reading their state via signals, queries, and updates. The workflow must define handlers for these — see External Integration for how to set them up.

Stopping Workflows

  • PATCH /workflow/:id/stop — Graceful stop. Allows cleanup handlers to run.
  • POST /workflow/:id/terminate — Force terminate. Immediate, no cleanup.

Workflow Discovery

GET /workflow/catalog returns all available workflows with their input and output schemas. Use this to build dynamic UIs or validate inputs before submitting.

Streaming Workflow Progress

GET /workflow/:id/history/stream opens a persistent Server-Sent Events connection that delivers Temporal history events in real time as the workflow executes. Use this to build live progress UIs without polling.
The stream emits four named events: reason is the terminal Temporal event type, one of: WORKFLOW_EXECUTION_COMPLETED, WORKFLOW_EXECUTION_FAILED, WORKFLOW_EXECUTION_TIMED_OUT, WORKFLOW_EXECUTION_CANCELED, WORKFLOW_EXECUTION_TERMINATED, WORKFLOW_EXECUTION_CONTINUED_AS_NEW. newRunId is present only when the terminal event carries a follow-on run (continue-as-new, and the completed/failed/timed-out cases that chain a new run). Errors raised before the stream starts (invalid lastEventId, unknown workflow) are returned as normal JSON HTTP responses (400/404). Once the stream is open, failures arrive as a server_error event instead — the connection has already committed to 200 text/event-stream. EventSource reconnects automatically after network drops. On reconnect it sends Last-Event-ID and the server replays only events the client hasn’t seen. To target a specific run, use GET /workflow/:id/runs/:rid/history/stream. Pass ?includePayloads=true to include decoded activity input/output in the events.

Debugging

GET /workflow/:id/trace-log returns the full execution trace for a completed workflow. See Tracing for the trace format.
For remote traces, the API server needs AWS credentials (OUTPUT_AWS_ACCESS_KEY_ID, OUTPUT_AWS_SECRET_ACCESS_KEY, OUTPUT_AWS_REGION).

What’s Next

Configuration

Configuration. Base URL, ports, and environment variables for the API server.

Authentication

Authentication. How auth works in development vs production.

Error Responses

Error Responses. Error codes, response format, and how to handle failures.