FruxonDocs
ApiWorkflow runs

Lists runs for a Workflow, newest first by default.

Returns a paginated list of executions that belong to the Workflow. Results can be filtered by time range and sorted; requesting the total count is opt-in because it requires an additional database count query.

GET
/v1/tenants/{tenant}/workflows/{workflow}/runs
AuthorizationBearer <token>

JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] and then your token.

In: header

Path Parameters

workflow*string

The unique identifier of the Workflow.

tenant*string

The tenant identifier

Query Parameters

PageSize?integer

The maximum number of items to return per page

Formatint32
PageToken.Skip?integer
Formatint32
PageToken.Cursor?string

Opaque cursor token from an external system (e.g. RAG API). When set, M:Fruxon.Common.Collections.PageToken.AsString returns this value directly instead of encoding Fruxon.Common.Collections.PageToken.Skip.

orderBy?

Sort order (AIP-132 orderBy); defaults to most recent first.

StartTime?integer

Filter start time (Unix timestamp in milliseconds, inclusive). Omit to return records from any start time.

Formatint64
EndTime?integer

Filter end time (Unix timestamp in milliseconds, inclusive). Omit to return records up to the current time.

Formatint64
Environment?string

Filter by environment slug. Omit to return records from all environments.

Status?array<AgentExecutionRecordStatus>

Filter by execution status. Repeat the query parameter (e.g. ?status=Completed&status=Failed) to match any of the provided statuses. Omit to return records in any status.

AgentRevision?array<integer>

Filter by agent revision number. Repeat the query parameter (e.g. ?agentRevision=1&agentRevision=2) to match any of the provided revisions. Omit to return records across all revisions.

Origin?string

Filter by execution origin. Defaults to Fruxon.Model.AgentSessions.ExecutionOrigin.Production so monitoring dashboards see live traffic by default — test-origin executions (draft-test runs) only show up when explicitly requested via ?origin=Test. This matches the convention used by the cost / budget / model-usage endpoints.

Value in"UNSPECIFIED" | "PRODUCTION" | "TEST"
TriggerId?string

Filter by trigger id — Fruxon.Model.ExecutionTraces.AgentExecutionRecord.TriggerId. Powers the Trigger detail "Recent Executions" card. Matches connector and scheduler fires; never matches API or sample-generation runs (which have null TriggerId).

SessionId?string

Filter by session id — Fruxon.Model.ExecutionTraces.AgentExecutionRecord.SessionId. Powers conversation-scoped views ("everything that ran in this conversation").

ParticipantId?array<string>

Filter by resolved participant id — Fruxon.Model.ExecutionTraces.AgentExecutionRecord.ParticipantId. Powers the Participant detail "Recent Executions" card and the Executions-tab participant filter. Repeat the query parameter (e.g. ?participantId={a}&participantId={b}) to match executions resolved to any of the listed participants. Only matches connector-sourced runs where the inbound message resolved to a participant before fan-out.

TriggerFireAttemptId?string

Filter by the Fruxon.Model.Triggers.TriggerFireAttempt.Id that produced the run — Fruxon.Model.ExecutionTraces.AgentExecutionRecord.TriggerFireAttemptId. Powers the Events-tab "View N traces" drill-down: scopes results to the exact executions a single inbound delivery produced, not the full history of the trigger. Matches nothing for API, sample, connector-only runs, or any execution that predates the column.

Formatuuid
Tools?array<string>

Filter to executions that invoked specific tools. Each entry is a tool key in the same integrationId.toolId form the tool-usage rollup emits (e.g. slack.send_message; built-ins have no integration prefix, e.g. web_search). Repeat the query parameter (e.g. ?tools=slack.send_message&tools=web_search) to match executions that used any of the listed tools. Backed by the denormalized Fruxon.Model.ExecutionTraces.AgentExecutionToolUsage projection, so it only sees executions the tool-usage projection job has already processed (a ~1-minute lag on the newest runs — the same lag the Tool usage card shows).

WithToolErrors?boolean

When true, narrows the match to executions where the tool(s) errored. Combine with Fruxon.Model.ExecutionTraces.ExecutionRecordsFilter.Tools for "executions where tool X failed" (the Tool usage card's error drill-down), or use it alone for "executions where any tool failed". Like Fruxon.Model.ExecutionTraces.ExecutionRecordsFilter.Tools, resolved against the Fruxon.Model.ExecutionTraces.AgentExecutionToolUsage projection.

HasToolCalls?boolean

When true, matches executions that invoked at least one tool (any tool) — i.e. excludes pure-LLM runs. Redundant when Fruxon.Model.ExecutionTraces.ExecutionRecordsFilter.Tools or Fruxon.Model.ExecutionTraces.ExecutionRecordsFilter.WithToolErrors is set (those already imply a tool invocation).

TriggerType?array<ExecutionTriggerType>

Filter by source / trigger type. Repeat the query parameter (e.g. ?triggerType=Connector&triggerType=Scheduler) to match any of the listed types. The user-facing source types are Fruxon.Model.ExecutionTraces.ExecutionTriggerType.Api (API call), Fruxon.Model.ExecutionTraces.ExecutionTriggerType.Scheduler (scheduled), Fruxon.Model.ExecutionTraces.ExecutionTriggerType.Connector (a messaging connector) and Fruxon.Model.ExecutionTraces.ExecutionTriggerType.CollectionItem (a pipeline per-item run). Pipeline runs are hidden from the default list but opted in by listing Fruxon.Model.ExecutionTraces.ExecutionTriggerType.CollectionItem here; the cost-only bookkeeping types (sample-generation, relevance-check, document-enrichment) stay excluded regardless of this filter.

TriggerProvider?array<string>

Filter by connector provider — Fruxon.Model.ExecutionTraces.AgentExecutionRecord.TriggerProvider (e.g. telegram, slack). Repeat the query parameter to match any of the listed providers. Only connector-sourced runs carry a provider, so API / scheduler runs never match.

MinDurationMs?integer

Filter to executions whose wall-clock duration (end − start, in milliseconds) is at least this value. In-flight runs (no end time) count as zero duration and are excluded by any positive minimum.

Formatint64
MaxDurationMs?integer

Filter to executions whose wall-clock duration (end − start, in milliseconds) is at most this value.

Formatint64
count?boolean

When true, includes the total number of matching runs in totalCount.

Defaultfalse

Response Body

curl -X GET "https://api.fruxon.com/v1/tenants/string/workflows/string/runs"
{
  "items": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "agentId": "string",
      "agentRevision": 0,
      "remoteAgentRevision": "string",
      "startTime": 0,
      "endTime": 0,
      "status": "IN_PROGRESS",
      "deliveryStatus": "NOT_APPLICABLE",
      "inputTokens": 0,
      "outputTokens": 0,
      "cachedTokens": 0,
      "cacheWriteTokens": 0,
      "webSearchCalls": 0,
      "hasResult": false,
      "hasTrace": false,
      "isSample": false,
      "trigger": {
        "type": "UNSPECIFIED",
        "id": "string",
        "provider": "string",
        "triggerFireAttemptId": null,
        "participantId": null,
        "displayName": "string",
        "participantDisplayName": "string",
        "participantKind": null,
        "participantAvatarFileId": "string",
        "pipelineId": null
      },
      "destinations": [],
      "environmentSlug": "string",
      "networkId": "00000000-0000-0000-0000-000000000000",
      "createdAt": 0,
      "tenantId": "00000000-0000-0000-0000-000000000000",
      "parentExecutionRecordId": "00000000-0000-0000-0000-000000000000",
      "rootExecutionId": "00000000-0000-0000-0000-000000000000",
      "inputCost": 0,
      "outputCost": 0,
      "cachedCost": 0,
      "cacheWriteCost": 0,
      "thinkingCost": 0,
      "webSearchCost": 0,
      "totalCost": 0,
      "waitingFor": {
        "kind": "string",
        "participantId": null,
        "displayName": "string",
        "participantKind": null,
        "avatarFileId": "string",
        "topicId": null,
        "approvalRequestId": null,
        "approvers": null
      },
      "relevanceOutcome": "RESPOND",
      "relevanceReason": "string",
      "groupParticipantId": "00000000-0000-0000-0000-000000000000",
      "wasAddressed": false
    }
  ],
  "nextPageToken": "string",
  "totalCount": 0
}
Empty
Empty
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "property1": null,
  "property2": null
}