Flows
Flows are structured descriptions of user journeys or business processes that span multiple services. Each Flow lists the ordered steps, their dependencies, the services touched, and the telemetry signals that identify each step. Agents use Flows to ground investigations in the caller’s real call graph instead of reasoning about opaque service boundaries.
Service: firetiger.objectives.v1.FlowsService
Resource name pattern: flows/{flow_id}
Access: Read-write
CRUD methods
The standard AIP-compliant CRUD surface is available: CreateFlow, GetFlow, UpdateFlow, DeleteFlow, ListFlows. See proto/firetiger/objectives/v1/flows.proto for request/response shapes — they follow the same patterns as other resources documented here (e.g. Tags).
Revision history (AIP-162)
Every mutation to a Flow (Create, Update, Delete, Undelete) atomically writes a revision row recording who changed the resource, what kind of change, and when. Two RPCs expose the history:
ListFlowRevisions
List the revision history of one Flow. Default order is reverse-chronological (newest first).
GET /v1/{parent=flows/*}/revisions
or as a Connect RPC:
POST /firetiger.objectives.v1.FlowsService/ListFlowRevisions
Request body
| Field | Type | Required | Description |
|---|---|---|---|
parent |
string | Yes | Resource name of the Flow whose revisions to list. Format: flows/{flow} |
page_size |
integer | No | Maximum revisions per page |
page_token |
string | No | Token from a previous ListFlowRevisionsResponse |
filter |
string | No | AIP-160 filter over name, revision_number, operation, actor_subject, actor_kind, create_time |
order_by |
string | No | AIP-132 ordering. Defaults to create_time desc |
Example — full history
curl -X POST "https://api.cloud.firetiger.com/firetiger.objectives.v1.FlowsService/ListFlowRevisions" \
-u "$USERNAME:$PASSWORD" \
-H "Content-Type: application/json" \
-d '{"parent": "flows/checkout", "page_size": 50}'
Example — temporal read (“what did this Flow look like at time T?”)
curl -X POST "https://api.cloud.firetiger.com/firetiger.objectives.v1.FlowsService/ListFlowRevisions" \
-u "$USERNAME:$PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"parent": "flows/checkout",
"filter": "create_time <= \"2026-05-14T18:06:00Z\"",
"order_by": "create_time desc",
"page_size": 1
}'
The first item in the response carries the snapshot of the Flow as of T.
Response
{
"flowRevisions": [
{
"name": "flows/checkout/revisions/3",
"snapshot": { "name": "flows/checkout", "displayName": "Checkout v3", "...": "..." },
"createTime": "2026-05-14T18:10:11Z",
"operation": "REVISION_OPERATION_UPDATE",
"actor": { "subject": "user_2abc", "kind": "ACTOR_KIND_USER" }
}
],
"nextPageToken": ""
}
GetFlowRevision
Return a single revision by its AIP-162 nested-collection name.
GET /v1/{name=flows/*/revisions/*}
or:
POST /firetiger.objectives.v1.FlowsService/GetFlowRevision
Request body
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Format: flows/{flow}/revisions/{n} where n is a positive integer |
Example
curl -X POST "https://api.cloud.firetiger.com/firetiger.objectives.v1.FlowsService/GetFlowRevision" \
-u "$USERNAME:$PASSWORD" \
-H "Content-Type: application/json" \
-d '{"name": "flows/checkout/revisions/2"}'
Response
{
"flowRevision": {
"name": "flows/checkout/revisions/2",
"snapshot": { "name": "flows/checkout", "displayName": "Checkout v2", "...": "..." },
"createTime": "2026-05-14T18:05:32Z",
"operation": "REVISION_OPERATION_UPDATE",
"actor": { "subject": "user_2abc", "kind": "ACTOR_KIND_USER" }
}
}
Notes
- History starts at opt-in time. Flows that existed before this revision API shipped have no historical revisions until their next mutation. Calls against the pre-opt-in window return an empty page (not NotFound).
Purge(force delete) cascades to revisions atomically — deleting a Flow erases its history.- The
snapshotfield is the full Flow body at that revision. For the canonical AIP-162 spec, see google.aip.dev/162.