Skip to main content

User API Reference (Projects)

This is the reference for the SaaS user-facing APIs that handle projects. With an application token, you can create and configure projects, place Agents, start workflow runs, check the results of executions, and decide review requests. For the conversation, library (Agents, playbooks, and skills), and organization APIs, see User API Reference (Conversations, Library, Organizations). For how to combine the APIs to investigate and fix executions that did not go well, see the Project API Guide.

A system integration token can call only four project APIs: list projects, start a workflow run, fire a trigger, and get a workflow run (System Integration API Reference). Calling any other API on this page with a system integration token returns 403 Forbidden (forbidden).

Base URL​

All API requests are sent to the following base URL.

SaaS
https://api.fd.agenticstar.tm.softbank.jp/api

Endpoint paths in this document are relative to the base URL.

Authentication​

Every API request must include a Bearer token in the Authorization header.

Authorization: Bearer <access_token>

If the token is invalid or missing, 401 Unauthorized is returned. The APIs on this page use the following scopes. If a required scope is missing, 403 Forbidden (insufficient_scope) is returned.

ScopeWhat it allows
project:readRead projects and what they contain (steps, placements, executions, records (audit trail), KPIs, and so on), review requests, and connectors
project:writeCreate and edit projects, and change steps and placements
project:deleteDelete projects
project:runStart workflow runs and fire triggers
project:decideDecide review requests

The project:* scopes work only when the name matches exactly. For how to obtain tokens and details on scopes, see the Authentication Guide and the Authentication API Reference.

Common Rules​

These rules apply to the APIs on this page.

Who Can Call and 404 / 403​

  • APIs that read a project and what it contains (steps, placements, executions, and so on) can be called by members of the project. Except for creating a project, APIs that write (including starting a workflow run and firing a trigger) can be called only by owners of the project. Who can call the review request and connector APIs is described in their sections. A member who is not an owner gets 403 Forbidden (owner_only).
  • A project you are not a member of and a project that does not exist both return 404 Not Found, and the response does not tell them apart. However, you can read the structure of a shared project with Get Project (GET /v1/projects/{projectId}) even if you are not a member.
  • Each endpoint has one code for 404 Not Found, named after the last resource in the path (for example, placement_not_found for the placement APIs and execution_not_found for the execution APIs). Endpoints without a resource ID in the path use project_not_found. When the project is not visible, the endpoint's code is still returned.
  • When an ID specified in the body (an Agent, a step, a user, and so on) does not exist or is not visible, the response differs by endpoint (for example, agentId of a placement returns 400 Bad Request (agent_not_found), and stepIds of a placement returns 400 Bad Request (invalid_parameter)). See the description and error responses of each endpoint.
  • When a query that filters a list (placementId, stepId, or runId) specifies an ID that does not exist, an empty list is returned.
  • For a token of a user who does not sign in with SSO, the project and review request APIs (except list projects, start a workflow run, fire a trigger, and get a workflow run) return 403 Forbidden (sso_required).

Request Handling​

  • Query parameters and body fields not in the specification are ignored. An invalid value for a query parameter in the specification, or a cursor that cannot be read, returns 400 Bad Request.
  • Send the body as a JSON object. A Content-Type other than application/json returns 415 Unsupported Media Type (unsupported_media_type), and malformed JSON or a body that is not a JSON object returns 400 Bad Request (invalid_body).
  • The body can be up to 16 KiB (3 MiB for the API that creates a project and the API that decides a review request). A larger body returns 413 Payload Too Large (body_too_large).
  • Fields that this API deliberately does not accept return 400 Bad Request (invalid_parameter) when sent, because silently ignoring them would make a change look applied when it is not. Each endpoint lists these fields.
  • Responses include an x-request-id header. The service assigns this value, and a value sent in the request is not used. When you contact support, please tell us this value.

Editing and Resending​

  • APIs that edit take the digest returned by the get API as baseDigest. If another change was made after you got it, 409 Conflict (stale_base) is returned. Get it again and resend. Two edits that arrive at almost the same time may both succeed.
  • The digest in the response is the value after the edit. You can use it for the next edit.
  • The APIs that create projects and steps create another one when resent. If you did not receive a response, check with the project list or Get Project whether it was created before resending. The API that places an Agent returns the existing placement when resent with the same Agent and the same steps.
  • Resends are identified by the Idempotency-Key header (required) for starting a workflow run, by eventId in the body for firing a trigger, and by commandId in the body for deciding a review request. Resending with the same key returns the result of the first request.

Fields About People​

  • User names and email addresses are returned only in the member list (members) of Get Project (GET /v1/projects/{projectId}). Other fields return only user IDs.
  • The owner of a resource is ownerUserId (the owner of a placed Agent is agentOwnerUserId), people in settings are approverUserIds and escalateToUserId, and the requester of a review request is requesterUserId.
  • Who did something is returned as a pair of …Kind (kind) and …Ref (reference). When …Kind is "human", …Ref is a user ID. Otherwise, …Ref is client:<integration ID> for a system integration, or another reference such as system:…. Even when there is no value, the field is not omitted and is returned as null. As an exception, what started a workflow run is returned only as startedByRef (there is no kind field; see Get a Workflow Run (GET /v1/projects/{projectId}/runs/{runId}) for the values).

Pagination​

List APIs read the next page with limit (1 to 100; 50 if omitted) and cursor (send the value from the previous response as is). cursor is returned only when hasMore is true. The number of items (total) is not returned. Lists with a different range or default for limit, lists without limit, lists that return all items, and lists whose hasMore means something different are described in each endpoint.

Projects​

A project is a unit for running work by placing Agents in steps. There are two types: workflow (steps run in order) and cycle (each placement keeps running in sweeps). The type is decided when the project is created and cannot be changed later.

Endpoint List​

メソッドエンドポイント説明Scope (SaaS)
GET/v1/projectsList the projects you participate inproject:read
GET/v1/projects/sharedList shared projectsproject:read
GET/v1/projects/organizationsGet the organizations you can set on a projectproject:read
GET/v1/projects/{projectId}Get a projectproject:read
POST/v1/projectsCreate a projectproject:write
PATCH/v1/projects/{projectId}Edit a projectproject:write
DELETE/v1/projects/{projectId}Delete a projectproject:delete
GET/v1/projects/{projectId}/controlGet the control settingsproject:read

GET/v1/projects

Retrieves the list of projects you can access. Supports cursor-based pagination. cycle projects also appear in the list, but they are not valid targets for starting a run (POST /v1/projects/{projectId}/runs).

Query Parameters​

ParameterTypeDefaultDescription
limitinteger50Number of items to retrieve (1-100)
cursorstring—Cursor for the next page (the cursor value from the previous response)
myRolestring—Either "owner" or "member". Returns only the projects where the caller has that role

Any other query parameter is ignored. A value other than "owner" / "member", or specifying myRole more than once, returns 400 Bad Request.

`cursor` represents a position, so do not change `myRole` while reusing the same cursor. Changing the criteria changes the result set and can duplicate or skip items.

Response Fields (200 OK)​

FieldTypeDescription
projectsarrayArray of project objects
projects[].projectIdstringProject ID (UUID)
projects[].namestringProject name
projects[].typestring"workflow" or "cycle"
projects[].statusstringProject state. One of "active", "paused" or "archived"
projects[].tagsarrayArray of tags. An empty array when none are set
projects[].myRolestringThe caller's own role in that project. Either "owner" or "member"
projects[].ownersarrayUser IDs of the project's current owners. Participants who are not owners are not included
hasMorebooleanWhether a next page exists
cursorstringCursor for the next page. Included only when hasMore is true

Response Example​

JSON
{
"projects": [
{
"projectId": "550e8400-e29b-41d4-a716-446655440000",
"name": "Order processing flow",
"type": "workflow",
"status": "active",
"tags": [],
"myRole": "owner",
"owners": ["bbbe4306-6975-420b-af47-fb4c8f48b4aa"]
},
{
"projectId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"name": "Always-on inquiry handling",
"type": "cycle",
"status": "active",
"tags": [],
"myRole": "member",
"owners": ["90b40fd8-a6b8-42b8-ab61-f3b674169b43", "463e2c25-5a80-4362-b77e-941df96fb1f2"]
}
],
"hasMore": false
}

Error Responses​

StatusDescription
400limit is outside 1-100, or cursor or myRole is invalid (code is invalid_parameter)
403The project:read scope is missing (code is insufficient_scope)

GET/v1/projects/shared

Lists shared projects (your own projects are included if they are shared). Cursor-based pagination is supported.

Query Parameters​

ParameterTypeDefaultDescription
limitinteger50Number of items per page (1-100)
cursorstring—Cursor for the next page (the cursor value from the previous response)
typestring—Filter by "cycle" or "workflow"
tagstring—Filter to projects with this tag (up to 30 characters, not counting leading and trailing whitespace or a leading #; case-insensitive)
qstring—Filter by part of the name or description (up to 100 characters)
sortstring"popular"Sort order. "popular" is by the number of copies (then by update time, newest first), and "new" is by update time, newest first

Response Fields (200 OK)​

FieldTypeDescription
projectsarrayArray of projects
projects[].projectIdstringProject ID (UUID)
projects[].namestring | nullProject name
projects[].descriptionstring | nullDescription
projects[].typestring | null"workflow" or "cycle"
projects[].statusstring | nullOne of "active", "paused", or "archived"
projects[].tagsarrayArray of tags
projects[].stepCountnumber | nullNumber of enabled steps
projects[].agentCountnumber | nullNumber of placements
projects[].copyCountnumber | nullNumber of times copied
projects[].ownerUserIdstring | nullUser ID of the owner
projects[].updatedAtstring | nullLast updated time (ISO 8601)
hasMorebooleanWhether there is a next page
cursorstringCursor for the next page. Included only when hasMore is true

myRole and owners are not included, even for projects you are a member of.

Error Responses​

StatuscodeDescription
400invalid_parameterAn invalid value for limit, cursor, type, tag, q, or sort
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO

GET/v1/projects/organizations

Gets the organizations you can set when creating a project. Only the organization the calling user currently belongs to can be set (zero or one item). This differs from GET /v1/organizations, which returns all organizations.

Response Fields (200 OK)​

FieldTypeDescription
organizationsarrayArray of organizations
organizations[].valuestringOrganization code (specify this in organizationCode of a project)
organizations[].labelstring | nullOrganization name
hasMorebooleanAlways false

Error Responses​

StatuscodeDescription
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
503organization_unavailableThe organization the user belongs to cannot be confirmed (resend the request later)

GET/v1/projects/{projectId}

Gets a project together with its steps, members, placements, triggers, notifications, and connectors. If a user who is not a member specifies a shared project, only the structure (a preview) is returned.

Path Parameters​

パラメータ型必須説明
projectIdstring必須Project ID (UUID)

Response Fields (200 OK)​

FieldTypeDescription
projectobjectThe project (the table below)
stepsarrayArray of steps (in order). See "Step Fields" for the fields of an item
stepsDigeststringA value for the order of the steps. Send it as baseDigest when reordering steps
membersarrayArray of members
members[].userIdstringUser ID
members[].rolestring | null"owner" or "member"
members[].joinedAtstring | nullWhen the user became a member (ISO 8601)
members[].namestring | nullUser name
members[].emailstring | nullUser email address
placementsarrayArray of placements. See "Placement Fields" for the fields of an item
triggersarrayArray of triggers (time and webhook triggers only)
triggers[].triggerIdstring | nullTrigger ID (UUID). Used to fire the trigger
triggers[].typestring"cron" (time) or "webhook"
triggers[].namestring | nullName
triggers[].enabledboolean | nullWhether it is enabled
triggers[].lastFiredAtstring | nullWhen it last fired (ISO 8601)
triggers[].nextFireAtstring | nullWhen it is scheduled to fire next (ISO 8601)
triggers[].createdAtstring | nullCreation time (ISO 8601)
triggers[].cronstring | nullCron expression ("cron" triggers only)
triggers[].timezonestring | nullTime zone ("cron" triggers only)
triggers[].startStepIdstring | nullID of the step to start from ("cron" triggers only)
triggers[].placementIdstring | nullID of the placement to start ("webhook" triggers only)
triggers[].stepIdstring | nullID of the step to start ("webhook" triggers only)
notificationsobjectNotification settings
notifications.gateReachedboolean | nullWhether to notify when a review request arrives
notifications.gateOverdueboolean | nullWhether to notify when a review request passes its deadline
connectorsarrayArray of connectors registered to this project
connectors[].kindstring | null"mcp" or "a2a"
connectors[].connectionIdstring | nullConnector ID. Read its contents with the connector API (GET /v1/connectors/{kind}/{connectionId}). null for a connector disabled or deleted on the admin screen, and when the connector information could not be checked
connectors[].namestring | nullConnector name
connectors[].ledgerEnabledboolean | nullWhether the connector is used as a ledger
connectors[].loginstring | nullSign-in status: "connected" (signed in), "reauth_required" (must sign in again), or "not_connected" (not signed in). null when the status cannot be confirmed. Sign in on the screen
connectors[].createdAtstring | nullRegistration time (ISO 8601)

Fields of project:

FieldTypeDescription
projectIdstringProject ID (UUID)
namestring | nullProject name
descriptionstring | nullDescription
tagsarrayArray of tags
typestring | null"workflow" or "cycle"
statusstring | nullOne of "active" (active), "paused" (paused), or "archived" (archived)
policyobject | nullExecution rules. Returned as set on the screen. Cannot be changed with this API
limitsobject | nullExecution limits
limits.maxRetriesPerStepnumberMaximum number of retries when a step fails
limits.maxSendBacksPerStepnumberMaximum number of times work can be sent back to the same step
languagestring | nullLanguage of the project
flowStructureobject | nullLane definition (for a workflow that runs steps in parallel). See "Lane Definition" below
reportTargetsobject | nullNot used at present (even if it has a value, the value is not used)
organizationCodestring | nullOrganization code
organizationNamestring | nullOrganization name
isSharedboolean | nullWhether it is shared
copyCountnumber | nullNumber of times copied
ownerUserIdstring | nullUser ID of the owner
myRolestring | nullRole of the calling user: "owner" or "member". null in a preview
createdAtstring | nullCreation time (ISO 8601)
updatedAtstring | nullLast updated time (ISO 8601)
digeststringThe value to send as baseDigest when editing the project

Lane definition (flowStructure):

FieldTypeDescription
lanesarrayArray of lanes
lanes[].idstring | nullLane ID
lanes[].namestring | nullLane name
lanes[].parentLaneIdstring | nullID of the lane before the split
lanes[].stepIdsarrayArray of IDs of the steps in this lane. Steps that belong to no lane are in the "main" lane
forksarrayArray of splits
forks[].idstring | nullSplit ID
forks[].afterStepIdstring | nullThe split happens after this step
forks[].laneIdsarrayArray of IDs of the lanes after the split
forks[].joinIdstring | nullID of the join
joinsarrayArray of joins
joins[].idstring | nullJoin ID
joins[].modestring | null"and" (proceeds when all lanes are complete)
joins[].laneIdsarrayArray of IDs of the lanes that join
joins[].nextStepIdstring | nullID of the step to proceed to after the join

When a user who is not a member reads a shared project (a preview), project (without organizationName and digest; myRole is null), steps (without the digest of each step), and placements (only placementId, agentId, name, description, goal, stepIds, and skillCount) are returned. stepsDigest, members, triggers, notifications, and connectors are not returned.

The goal, guardrail, and inputFiles (file names) of placed Agents are returned even without the assets:read scope.

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId is not a UUID
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
404project_not_foundThe project does not exist, or it is a project that is not shared and you are not a member of

POST/v1/projects

Creates a project. The user who creates it becomes the owner and the principal that runs the project. Create Agents in the library first, and then place them with the API that places a placement (POST /v1/projects/{projectId}/placements).

Request Body​

FieldTypeRequiredDescription
namestringYesProject name (up to 255 characters; cannot be only whitespace)
descriptionstring—Description (up to 5000 characters)
tagsarray—Tags (up to 10 strings of up to 30 characters each; saved in lowercase with leading and trailing whitespace and a leading # removed. Tags that become empty or the same this way cannot be sent)
typestring—"cycle" or "workflow". "cycle" if omitted ("workflow" in environments where cycle is not available)
organizationCodestring | null—Organization code (up to 255 characters). Only an organization returned by GET /v1/projects/organizations can be set. null, an empty string, or only whitespace is the same as not setting one
stepsarray—The steps (up to 12). If omitted or empty, the project is created with the default steps (for a workflow, three steps: a step run by an Agent, a review step, and a step run by an Agent; for a cycle, two steps run by Agents)
steps[].namestring | null—Step name (up to 100 characters; an empty string or null means the default name; cannot be only whitespace)
steps[].descriptionstring | null—Step description (an empty string or null means no description)
steps[].enabledboolean—Whether it is enabled (true or false). Enabled if omitted
steps[].zonestring—"ai" (run by an Agent) or "gate" (review step). "ai" if omitted. Only "ai" for cycle. null cannot be sent
steps[].placementExecutionstring | null—"parallel" runs the Agents placed in the step at the same time ("ai" steps of a workflow only). If omitted, null, or "serial", they run one at a time

trigger, policy, agents, guardrail, and templateRef are not accepted (sending them returns 400, invalid_parameter). Set triggers and execution rules on the screen. For a cycle, set the sweep interval after placing Agents, with the API that changes the sweep (PATCH /v1/projects/{projectId}/placements/{placementId}/schedule).

Response (201 Created)​

FieldTypeDescription
projectobjectThe created project. Same fields as project in Get Project (without organizationName; myRole is "owner")
stepsarrayArray of the created steps. See "Step Fields" for the fields of an item

Error Responses​

StatuscodeDescription
400invalid_parametername is missing or only whitespace, a field has the wrong type, length, number of items, or value (including empty or duplicate tags), more than 12 steps, or trigger, policy, agents, guardrail, or templateRef was sent
400invalid_bodyThe body is malformed JSON or not a JSON object
400cycle_disabledcycle is not available in this environment
400cycle_gate_not_allowedA review step ("gate") was specified for a cycle
400parallel_workflow_only"parallel" for placementExecution was specified for a step of a cycle
400parallel_ai_only"parallel" for placementExecution was specified for a step that is not "ai"
400organization_not_memberAn organization that cannot be set was specified
403insufficient_scopeThe project:write scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
403license_status_unavailableThe license cannot be confirmed
409project_limit_reachedThe number of projects has reached the limit (the numbers are in error.message)
413body_too_largeThe body exceeds 3 MiB
415unsupported_media_typeThe Content-Type of the body is not application/json
503organization_unavailableThe organization the user belongs to cannot be confirmed

PATCH/v1/projects/{projectId}

Edits a project. Only the fields you send are changed. Only owners can call this API.

Path Parameters​

パラメータ型必須説明
projectIdstring必須Project ID (UUID)

Request Body​

FieldTypeRequiredDescription
baseDigeststringYesproject.digest from Get Project
namestring—Project name (up to 255 characters; cannot be empty or only whitespace)
descriptionstring—Description (up to 5000 characters; cannot be an empty string, only whitespace, or null)
tagsarray—Tags (same as when creating). Sending them replaces all tags
statusstring—"active", "paused", or "archived"
isSharedboolean—Whether to share it
limitsobject—Execution limits. Only the fields you send are overlaid on the current values
limits.maxRetriesPerStepinteger—0 to 10
limits.maxSendBacksPerStepinteger—1 to 10
flowStructureobject | null—Lane definition (same form as in Get Project). Sending it replaces the whole definition. null removes the lanes
organizationCodestring | null—Organization code (up to 255 characters). Can be set only once, on a project that has no organization yet. null changes nothing if no organization is set yet, and returns 409 (organization_locked) if one is set

Send at least one field besides baseDigest. type, policy, and connectSecret are not accepted (sending them returns 400, invalid_parameter). The type is decided when the project is created, and execution rules are changed on the screen.

Setting status to "paused" or "archived" stops new executions from starting. Sweeps and time-based starts stop, starting workflow runs and firing triggers are refused with 409 Conflict, and "Start by email" is no longer accepted (a resend of a workflow run start with the same Idempotency-Key as an accepted one returns the result of the first request). Running executions are not stopped. A running workflow run waits without starting its next step (its status stays "running" or "waiting_gate"). Fires and emails accepted before the stop may still run after it. Setting it back to "active" resumes the starts that were held while the project was stopped.

These are the rules for sending flowStructure. If they are not met, 400 (invalid_flow_structure) is returned.

  • Only workflow projects can have lanes. A project where a registered Agent of the Marketplace edition is placed cannot have lanes.
  • IDs of lanes, forks, and joins are up to 64 letters, digits, _, and -. Step IDs are UUIDs. Lane names are up to 50 characters and cannot be only whitespace. The "main" lane cannot have a name (set it to null or omit it).
  • The parentLaneId of the "main" lane is null, and the parentLaneId of the other lanes is "main" (a lane cannot branch further). There can be up to 12 lanes other than "main".
  • To use lanes, include exactly one fork and one join. The laneIds of the fork are all the lanes other than "main" (2 or more), and its joinId is the id of the join. The laneIds of the join are the same lanes as the fork, and its mode is "and".
  • The afterStepId of the fork is a step in "main", and it cannot be a step whose placementExecution is "parallel". The nextStepId of the join is a later step in "main". When it is null, all the steps after the fork go into lanes.
  • All the steps between the fork and the join go into lanes, and the other steps go into "main". A step cannot be in two lanes. lanes[].stepIds can contain only steps of this project. Each lane has at least one step.
  • The destinations and the send-back step of a review step, and the "goto" destinations of onDenied and onDegraded, can only be steps in the same lane. In "main", they cannot cross between before the fork and after the join.
  • If there are no lanes other than "main" and forks and joins are empty, it is the same as null (the lanes are removed).

Response (200 OK)​

FieldTypeDescription
projectobjectThe project after the edit. Same fields as project in Get Project (without organizationName)

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId is not a UUID, baseDigest is missing, empty, or not a string, no fields to change, name was set empty or only whitespace, description was set to an empty string, only whitespace, or null, null was sent for name, status, tags, isShared, or limits, a field has the wrong type or value (including empty or duplicate tags), or type, policy, or connectSecret was sent
400invalid_bodyThe body is malformed JSON or not a JSON object
400invalid_flow_structureThe lane definition does not follow the rules above
400organization_not_memberAn organization that cannot be set was specified
403insufficient_scopeThe project:write scope is missing
403forbiddenCalled with a system integration token
403owner_onlyA member who is not an owner
403sso_requiredThe user does not sign in with SSO
404project_not_foundThe project does not exist, or you are not a member
409stale_baseThe project has changed since you got it
409organization_lockedAn organization is already set
403license_status_unavailableTried to move the project out of "archived", but the license cannot be confirmed
409project_limit_reachedTried to move the project out of "archived", but the number of projects has reached the limit
413body_too_largeThe body exceeds 16 KiB
415unsupported_media_typeThe Content-Type of the body is not application/json
503organization_unavailableThe organization the user belongs to cannot be confirmed

DELETE/v1/projects/{projectId}

Deletes a project. Only owners can call this API. What is running (sweeps, running workflow runs, review requests waiting for a decision, and triggers) stops. Records of executions and reviews are not deleted. The service also tries to remove sign-ins to the project's connectors, but the deletion of the project succeeds even if they cannot be removed.

Path Parameters​

パラメータ型必須説明
projectIdstring必須Project ID (UUID)

Response (200 OK)​

JSON
{
"projectId": "6addd341-cd6d-4061-b8dc-4e9a6669a720",
"deleted": true
}

Calling it again returns 404 Not Found.

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId is not a UUID
403insufficient_scopeThe project:delete scope is missing
403forbiddenCalled with a system integration token
403owner_onlyA member who is not an owner
403sso_requiredThe user does not sign in with SSO
404project_not_foundThe project does not exist, you are not a member, or it has already been deleted

GET/v1/projects/{projectId}/control

Gets the control settings of a project (the strength of the execution rules and the settings of review steps).

Path Parameters​

パラメータ型必須説明
projectIdstring必須Project ID (UUID)

Response Fields (200 OK)​

FieldTypeDescription
tenantProfilestring | nullBase rule for the whole tenant: "open", "guarded", or "strict". null when it cannot be confirmed
tenantSourcestring | nullWhere tenantProfile comes from: "governance_policies" (set on the admin screen), "default" (no setting, so the default), or "unavailable" (cannot be confirmed)
projectProfilestring | nullBase rule of this project
effectiveProfilestring | nullThe base rule actually in effect (the stricter of the tenant and this project). null when tenantProfile is null
denyarrayOperations prohibited by the execution rules
gatesarrayArray of enabled review steps
gates[].stepIdstringStep ID
gates[].positionnumberPosition of the step
gates[].namestringStep name
gates[].gateKindstringKind of review: "review" (review) or "manual" (manual work)
gates[].modestringReview method: "blocking" (wait for the reviewer's decision) or "notify_only" (proceed automatically after the deadline)
gates[].overdueActionstringAfter the deadline: "none" (notify and keep waiting), "proceed" (proceed automatically), "send_back" (send back automatically), or "reject" (reject automatically)
gates[].approverUserIdsarrayArray of user IDs of the reviewers
gates[].deadlineHoursnumber | nullDeadline (hours)
operationClassesnullNot used at present (always null)

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId is not a UUID
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
404project_not_foundThe project does not exist, or you are not a member

Steps​

A step is a unit of the project's flow. There are steps run by Agents (defaultZone is "ai") and review steps decided by people ("gate"). A project can have up to 12 steps. You cannot delete steps to leave fewer than 2.

Endpoint List​

メソッドエンドポイント説明Scope (SaaS)
POST/v1/projects/{projectId}/stepsAdd a stepproject:write
PATCH/v1/projects/{projectId}/steps/{stepId}Edit a stepproject:write
PUT/v1/projects/{projectId}/steps/orderReorder stepsproject:write
DELETE/v1/projects/{projectId}/steps/{stepId}Delete a stepproject:write

Step Fields​

The fields of a step in steps of Get Project and in the responses of the step APIs.

FieldTypeDescription
stepIdstringStep ID (UUID)
positionnumber | nullPosition of the step (from 1)
namestring | nullStep name. When null, the screen shows a default name (such as "Step 1")
descriptionstring | nullDescription
enabledboolean | nullWhether it is enabled
defaultZonestring | null"ai" (run by an Agent) or "gate" (review step)
reworkToStepIdstring | nullID of the step to go back to when work is sent back (used by review steps)
gateConfigobject | nullSettings of a review step (the table below)
gateKindstring | nullKind of review: "review" (a person decides on the Agent's result) or "manual" (a person does the work and then proceeds)
scheduleobject | nullTime of the step (workflow only): expression (cron expression) and timezone
scheduleNextFireAtstring | nullWhen the step is next scheduled to run by its time (ISO 8601)
onDeniedstring | nullWhat happens "when it cannot run under the rules": "gate" (request a review), "closed_failed" (close as failed), or "goto" (proceed to the step in outcomeRoutes)
onDegradedstring | nullWhat happens "when the Agent reports a failure": "gate" (request a review), "proceed" (proceed as is), or "goto" (proceed to the step in outcomeRoutes)
outcomeRoutesobject | nullWhere to proceed when onDenied or onDegraded is "goto"
outcomeRoutes.onDenied.stepIdstringID of the step to proceed to "when it cannot run under the rules"
outcomeRoutes.onDegraded.stepIdstringID of the step to proceed to "when the Agent reports a failure"
laneIdstring | nullID of the lane this step belongs to
placementExecutionstring | null"parallel" (run the Agents placed in this step at the same time). null runs them one at a time in placement order
digeststringThe value to send as baseDigest when editing the step

Settings of a review step (gateConfig):

FieldTypeDescription
approverUserIdsarrayArray of user IDs of the reviewers (up to 20 project members)
deadlineHoursnumber | nullReview deadline (hours; 1 to 720)
modestring | nullReview method: "blocking" (wait for the reviewer's decision) or "notify_only" (proceed automatically after the deadline)
overdueActionstring | nullAfter the deadline: "none" (notify and keep waiting), "proceed" (proceed automatically), "send_back" (send back automatically), or "reject" (reject automatically)
escalateToUserIdstring | nullUser ID of the contact when the deadline passes (a project member)
destinationsarraySteps the reviewer can choose to proceed to (2 to 5 steps after this step). Not included when not set
destinations[].idstringDestination ID (up to 64 letters, digits, _ and -)
destinations[].labelstringName shown on the screen (up to 100 characters)
destinations[].stepIdstringID of the step to proceed to

When a review step has no settings (gateConfig is null, or a field is missing or null), it works with mode "blocking", deadlineHours 24 hours, overdueAction "none", and no contact after the deadline. When gateKind is null, it is "review".

Depending on the type of the project, some settings cannot be set on steps.

Step settingworkflowcycle
Review steps ("gate" for defaultZone) and their settings (gateConfig and gateKind)Can be set400 (cycle_gate_not_allowed)
"gate" for onDenied and onDegradedCan be set400 (cycle_gate_not_allowed)
"goto" for onDenied and onDegraded, and outcomeRoutesCan be set400 (cycle_route_not_allowed)
"parallel" for placementExecutionCan be set on "ai" steps only400 (parallel_workflow_only)
schedule (time of the step)Can be set400 (invalid_parameter)
reworkToStepId (step to send back to)Can be set400 (invalid_parameter)

For a cycle, schedule and reworkToStepId are rejected only when a value other than null is sent (null is accepted so that a step you got can be sent back as is). For a cycle, how often an Agent runs is decided by the sweep of the placement, not by the step.

POST/v1/projects/{projectId}/steps

Adds a step. Only owners can call this API.

Path Parameters​

パラメータ型必須説明
projectIdstring必須Project ID (UUID)

Request Body​

FieldTypeRequiredDescription
namestring | null—Step name (up to 100 characters; an empty string or null means the default name; cannot be only whitespace)
descriptionstring | null—Description (up to 2000 characters; an empty string or null means no description)
defaultZonestring—"ai" or "gate". "ai" if omitted. null or an empty string cannot be sent
afterStepIdstring—Add the step after this step (the ID of a step of this project)
beforeStepIdstring—Add the step before this step (the ID of a step of this project). If both afterStepId and beforeStepId are specified, the step is added before this step. If both are omitted, the step is added at the end
gateConfigobject | null—Settings of a review step (same form as gateConfig in Step Fields; destinations are set when editing a step). null means no settings
placementExecutionstring | null—"parallel" runs Agents at the same time. null or "serial" runs them one at a time

The added step is enabled. In a project with lanes, the step goes into the same lane as the step in beforeStepId when it is specified, or as the step in afterStepId otherwise.

Response (201 Created)​

FieldTypeDescription
stepobjectThe added step
stepsarrayAll steps after the addition (in order)
stepsDigeststringThe value for the order of the steps after the addition

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId is not a UUID, afterStepId or beforeStepId is not a step of this project, or a field has the wrong type, length, or value (including a whitespace-only name, and null or an empty string for defaultZone)
400invalid_bodyThe body is malformed JSON or not a JSON object
400step_reference_on_createdestinations was sent in gateConfig (including null or an empty array; set destinations with the API that edits a step, after adding the step)
400cycle_gate_not_allowedTried to add a review step to a cycle
400parallel_workflow_only"parallel" was specified for a step of a cycle
400parallel_ai_only"parallel" was specified for a review step
400parallel_not_for_marketplace"parallel" was specified in a project where a registered Agent of the Marketplace edition is placed
400approver_not_memberA user who is not a member was specified as a reviewer
400approvers_requiredTried to add a review step without reviewers to an active workflow
400escalate_to_not_memberA user who is not a member was specified as the contact when the deadline passes
403insufficient_scopeThe project:write scope is missing
403forbiddenCalled with a system integration token
403owner_onlyA member who is not an owner
403sso_requiredThe user does not sign in with SSO
404project_not_foundThe project does not exist, or you are not a member
409too_many_stepsThere are already 12 steps
409flow_structure_conflictConflicts with the lane definition
413body_too_largeThe body exceeds 16 KiB
415unsupported_media_typeThe Content-Type of the body is not application/json

PATCH/v1/projects/{projectId}/steps/{stepId}

Edits a step. Only the fields you send are changed. Only owners can call this API.

Path Parameters​

パラメータ型必須説明
projectIdstring必須Project ID (UUID)
stepIdstring必須Step ID (UUID)

Request Body​

FieldTypeRequiredDescription
baseDigeststringYesThe digest of the step
namestring | null—Step name (up to 100 characters). An empty string or null resets it to the default name. Cannot be only whitespace
descriptionstring—Description (up to 2000 characters; cannot be an empty string, only whitespace, or null)
defaultZonestring—"ai" or "gate"
enabledboolean—Whether it is enabled
gateConfigobject | null—Settings of a review step. Only the fields you send are overlaid on the current values. null removes the settings
gateKindstring | null—"review" or "manual"
reworkToStepIdstring | null—Step to send back to (a step before this step). null removes it
onDeniedstring | null—"gate", "closed_failed", or "goto"
onDegradedstring | null—"gate", "proceed", or "goto"
outcomeRoutesobject | null—Where to proceed for "goto" (steps after this step). Sending it replaces the whole value (send onDegraded together even when changing only onDenied). null removes it. If it contains neither onDenied nor onDegraded, it is the same as not sending it
placementExecutionstring | null—"parallel" runs Agents at the same time. null or "serial" runs them one at a time
scheduleobject | null—Time of the step (workflow only): expression (a 5-field cron expression) and timezone (UTC if omitted). null removes it

Send at least one field besides baseDigest.

For the first step, the time of the step starts a workflow run at that time only when the project has no enabled time trigger. For other steps, the workflow run waits until that time.

Changing the reviewers (approverUserIds) or the review method (mode) is recorded in the records (audit trail).

Response (200 OK)​

FieldTypeDescription
stepobjectThe step after the edit (with a new digest)

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId or stepId is not a UUID, baseDigest is missing, empty, or not a string, no fields to change, name was set to only whitespace, description was set to an empty string, only whitespace, or null, null was sent for defaultZone or enabled, a field has the wrong type, length, or value, or schedule or reworkToStepId was sent for a cycle
400invalid_bodyThe body is malformed JSON or not a JSON object
400cycle_gate_not_allowedTried to make a step of a cycle a review step, or specified "gate" for onDenied or onDegraded
400cycle_route_not_allowed"goto" was specified for a step of a cycle
400parallel_workflow_only"parallel" was specified for a step of a cycle
400parallel_ai_only"parallel" was specified for a review step
400parallel_not_for_marketplace"parallel" was specified in a project where a registered Agent of the Marketplace edition is placed
400approver_not_memberA user who is not a member was specified as a reviewer
400approvers_requiredIn an active workflow, an enabled review step would have no reviewers
400escalate_to_not_memberA user who is not a member was specified as the contact when the deadline passes
400invalid_send_back_stepThe step to send back to is not a step before this step
400invalid_destinationsdestinations has the wrong form (not 2 to 5 items, duplicate IDs, names, or steps, and so on)
400destinations_gate_onlyTried to set destinations on a step that is not a review step
400destinations_notify_onlyTried to set destinations on a step whose review method is "notify_only"
400invalid_destination_stepA step in destinations is not a step after this step
400invalid_outcome_routesoutcomeRoutes has the wrong form
400invalid_outcome_routeThere is no destination for "goto", or it is not a step after this step
403insufficient_scopeThe project:write scope is missing
403forbiddenCalled with a system integration token
403owner_onlyA member who is not an owner
403sso_requiredThe user does not sign in with SSO
404step_not_foundThe step does not exist, or you are not a member of the project
409stale_baseThe step has changed since you got it
409flow_structure_conflictConflicts with the lane definition
413body_too_largeThe body exceeds 16 KiB
415unsupported_media_typeThe Content-Type of the body is not application/json

PUT/v1/projects/{projectId}/steps/order

Reorders steps. Only owners can call this API.

Path Parameters​

パラメータ型必須説明
projectIdstring必須Project ID (UUID)

Request Body​

FieldTypeRequiredDescription
baseDigeststringYesstepsDigest from Get Project
stepIdsarrayYesThe IDs of all steps in the new order (no duplicates)

Response (200 OK)​

FieldTypeDescription
stepsarrayAll steps after reordering
stepsDigeststringThe value for the order of the steps after reordering

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId is not a UUID, baseDigest is missing, empty, or not a string, or stepIds is not the order of all steps
400invalid_bodyThe body is malformed JSON or not a JSON object
403insufficient_scopeThe project:write scope is missing
403forbiddenCalled with a system integration token
403owner_onlyA member who is not an owner
403sso_requiredThe user does not sign in with SSO
404project_not_foundThe project does not exist, or you are not a member
409stale_baseThe order of the steps has changed since you got it
409flow_structure_conflictConflicts with the lane definition
413body_too_largeThe body exceeds 16 KiB
415unsupported_media_typeThe Content-Type of the body is not application/json

DELETE/v1/projects/{projectId}/steps/{stepId}

Deletes a step. Only owners can call this API. Send-back targets, destinations, and trigger start steps that point to the step are removed, and the placements and sweeps on the step are also removed. A step used by past workflow runs or review requests is kept for the records (historyKept is true).

Path Parameters​

パラメータ型必須説明
projectIdstring必須Project ID (UUID)
stepIdstring必須Step ID (UUID)

Response (200 OK)​

FieldTypeDescription
stepIdstringID of the deleted step
deletedbooleanAlways true
historyKeptbooleanWhether the step was kept for the records
stepsarrayAll steps after the deletion
stepsDigeststringThe value for the order of the steps after the deletion

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId or stepId is not a UUID
403insufficient_scopeThe project:write scope is missing
403forbiddenCalled with a system integration token
403owner_onlyA member who is not an owner
403sso_requiredThe user does not sign in with SSO
404step_not_foundThe step does not exist, or you are not a member of the project
409min_stepsThere are only 2 steps
409flow_structure_conflictConflicts with the lane definition (to delete the step where lanes split, the step after a join, or the last step of a lane, fix the lane definition first)

Placements​

A placement is a library Agent placed in steps of a project. The same Agent can be placed only once in a project, and one placement can have multiple steps (its steps). For a cycle, how often an Agent runs (its sweep) is decided per pair of placement and step.

Endpoint List​

メソッドエンドポイント説明Scope (SaaS)
GET/v1/projects/{projectId}/placementsList placementsproject:read
GET/v1/projects/{projectId}/placements/{placementId}Get a placementproject:read
POST/v1/projects/{projectId}/placementsPlace an Agentproject:write
DELETE/v1/projects/{projectId}/placements/{placementId}Remove a placementproject:write
PUT/v1/projects/{projectId}/placements/{placementId}/stepsChange the steps of a placementproject:write
GET/v1/projects/{projectId}/memory-candidatesGet the candidates for placement memoryproject:read
PATCH/v1/projects/{projectId}/placements/{placementId}/memoryChange the memory of a placementproject:write
PATCH/v1/projects/{projectId}/placements/{placementId}/scheduleStop, resume, or change the interval of a sweep (cycle only)project:write

Placement Fields​

The fields of a placement in placements of Get Project and in the responses of the placement APIs.

FieldTypeDescription
placementIdstringPlacement ID (UUID)
agentIdstring | nullID of the placed Agent (the ID of the library Agent)
displayOrdernumber | nullDisplay order
namestring | nullAgent name
descriptionstring | nullAgent description
goalstring | nullAgent goal (instructions)
guardrailstring | nullAgent guardrail
skillsarraySkills used by the Agent (skillId and name)
skillCountnumber | nullNumber of skills
playbookIdstring | nullID of the playbook used by the Agent
playbookNamestring | nullPlaybook name
inputFilesarrayInput files of the Agent (filename only)
stepIdsarrayArray of IDs of the steps of the placement
sweepsarraySweep settings (cycle): stepId, cron, timezone, and enabled for each step
runtimeConfigsarrayRuntime settings per step (stepId and runtimeConfig). runtimeConfig is returned in the form saved
memoryOrgIdstring | nullOrganization of the placement memory
memoryJobIdstring | nullJob type of the placement memory
agentOwnerUserIdstring | nullUser ID of the owner of the placed Agent
isSharedboolean | nullWhether the placed Agent is shared
runtimeKindstring | nullKind of runtime of the Agent
marketplaceAgentIdstring | nullID of the registered Agent in the Marketplace edition. null otherwise
exclusiveToThisProjectboolean | nullWhether this project is the only project where this Agent is placed
digeststringThe value to send as baseDigest to the APIs that change a placement (steps, memory, and sweep). It is made from the steps, memory, runtime settings, and sweeps, and does not change when the Agent itself changes

GET/v1/projects/{projectId}/placements

Gets all placements of a project.

Response Fields (200 OK)​

FieldTypeDescription
placementsarrayArray of placements. See "Placement Fields" for the fields of an item
hasMorebooleanAlways false

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId is not a UUID
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
404project_not_foundThe project does not exist, or you are not a member

GET/v1/projects/{projectId}/placements/{placementId}

Gets one placement.

Response Fields (200 OK)​

FieldTypeDescription
placementobjectThe placement. See "Placement Fields" for the fields

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId or placementId is not a UUID
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
404placement_not_foundThe placement does not exist, it belongs to another project, or you are not a member of the project

POST/v1/projects/{projectId}/placements

Places a library Agent in steps of a project. Only owners can call this API. Only your own Agents can be placed (copy a shared Agent in the library first, and then place the copy).

Request Body​

FieldTypeRequiredDescription
agentIdstringYesID of the Agent to place (UUID)
stepIdsarray—Array of IDs of the steps of the placement (up to 12 steps of this project). If omitted, the Agent is placed without steps
  • If the same Agent is already placed, 409 Conflict (placement_already_exists) is returned. If the steps are also the same, the request is treated as a resend and the existing placement is returned. To change the steps, use the API that changes the steps of a placement.
  • Of the Agent's input files, only the files of the user who created the project are passed when it runs.
  • A newly placed placement goes to the end of the placement order (displayOrder). However, placing the same Agent as a placement removed earlier (a placement kept because past workflow runs used it) brings that placement back with its original ID and position. When the placements of a step run one at a time, they run in this order. There is no API to reorder placements.

Response (201 Created)​

FieldTypeDescription
placementobjectThe placed placement. See "Placement Fields" for the fields

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId or agentId is not a UUID, or stepIds is invalid (more than 12, not steps of this project, the same step twice, and so on)
400invalid_bodyThe body is malformed JSON or not a JSON object
400agent_not_foundThe Agent in agentId does not exist or is not visible
400agent_not_ownedIt is not your own Agent
403insufficient_scopeThe project:write scope is missing
403forbiddenCalled with a system integration token
403owner_onlyA member who is not an owner
403sso_requiredThe user does not sign in with SSO
404project_not_foundThe project does not exist, or you are not a member
409placement_already_existsThe same Agent is already placed (with different steps)
409unsupported_runtimeAn Agent that cannot be placed with this API (such as a registered Agent of the Marketplace edition)
413body_too_largeThe body exceeds 16 KiB
415unsupported_media_typeThe Content-Type of the body is not application/json

DELETE/v1/projects/{projectId}/placements/{placementId}

Removes a placement. Only owners can call this API. A placement used by past workflow runs is kept for the records (historyKept is true). Past executions of a removed placement remain in the execution history with the original placement ID (placementId).

Response (200 OK)​

FieldTypeDescription
placementIdstringID of the removed placement
deletedbooleanAlways true
historyKeptbooleanWhether the placement was kept for the records

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId or placementId is not a UUID
403insufficient_scopeThe project:write scope is missing
403forbiddenCalled with a system integration token
403owner_onlyA member who is not an owner
403sso_requiredThe user does not sign in with SSO
404placement_not_foundThe placement does not exist, it belongs to another project, or you are not a member of the project

PUT/v1/projects/{projectId}/placements/{placementId}/steps

Replaces the steps of a placement with the steps you send. Only owners can call this API. The sweeps of the removed steps stop. An empty array can also be sent (the placement stays in the project, but it does not run because it has no steps).

Request Body​

FieldTypeRequiredDescription
baseDigeststringYesThe digest of the placement
stepIdsarrayYesArray of IDs of the steps of the placement (up to 12 steps of this project)

Response (200 OK)​

FieldTypeDescription
placementobjectThe placement after the change (with a new digest)

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId or placementId is not a UUID, baseDigest is missing, empty, or not a string, or stepIds is invalid (more than 12, not steps of this project, the same step twice, and so on)
400invalid_bodyThe body is malformed JSON or not a JSON object
403insufficient_scopeThe project:write scope is missing
403forbiddenCalled with a system integration token
403owner_onlyA member who is not an owner
403sso_requiredThe user does not sign in with SSO
404placement_not_foundThe placement does not exist, it belongs to another project, or you are not a member of the project
409stale_baseThe placement has changed since you got it
413body_too_largeThe body exceeds 16 KiB
415unsupported_media_typeThe Content-Type of the body is not application/json

GET/v1/projects/{projectId}/memory-candidates

Gets the organizations and job types that can be chosen for placement memory. The candidates are the organizations and job types of the project members.

Response Fields (200 OK)​

FieldTypeDescription
organizationsarrayOrganization candidates (orgId and label)
jobsarrayJob type candidates (jobId and label)
unresolvednumber | nullNumber of members whose organization and job type could not be confirmed

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId is not a UUID
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
404project_not_foundThe project does not exist, or you are not a member

PATCH/v1/projects/{projectId}/placements/{placementId}/memory

Changes the memory of a placement (the organization and job type memory the Agent reads for the work). Only the fields you send are changed. Only owners can call this API.

Request Body​

FieldTypeRequiredDescription
baseDigeststringYesThe digest of the placement
orgIdstring | null—Organization. A new value must be one of the memory candidates. null or an empty string removes it
jobIdstring | null—Job type. A new value must be one of the memory candidates. null or an empty string removes it

Send at least one of orgId and jobId.

Response (200 OK)​

FieldTypeDescription
placementobjectThe placement after the change (with a new digest)

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId or placementId is not a UUID, baseDigest is missing, empty, or not a string, no fields to change, or orgId or jobId is neither a string nor null
400invalid_bodyThe body is malformed JSON or not a JSON object
400memory_not_candidateA value that is not a memory candidate was specified
403insufficient_scopeThe project:write scope is missing
403forbiddenCalled with a system integration token
403owner_onlyA member who is not an owner
403sso_requiredThe user does not sign in with SSO
404placement_not_foundThe placement does not exist, it belongs to another project, or you are not a member of the project
409stale_baseThe placement has changed since you got it
413body_too_largeThe body exceeds 16 KiB
415unsupported_media_typeThe Content-Type of the body is not application/json
503memory_candidates_unavailableThe organizations and job types of the members cannot be confirmed (resend the request later)

PATCH/v1/projects/{projectId}/placements/{placementId}/schedule

For a cycle project, stops, resumes, or changes the interval of the sweep of a placement. Only the fields you send are changed. Only owners can call this API.

Request Body​

FieldTypeRequiredDescription
baseDigeststringYesThe digest of the placement
stepIdstring—ID of the step of the sweep (a step of the placement). Can be omitted for a placement with one step
enabledboolean—true resumes and false stops
cronstring—Interval (a 5-field cron expression; up to 100 characters)
timezonestring—Time zone (an IANA time zone name, up to 64 characters; for example, "Asia/Tokyo")
  • Send at least one of enabled, cron, and timezone. Fields you do not send keep their current values.
  • When the step has no sweep yet (setting it for the first time), cron is required. If enabled is omitted, the sweep stays stopped, and if timezone is omitted, UTC is used.

Response (200 OK)​

FieldTypeDescription
placementobjectThe placement after the change (with a new digest)

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId, placementId, or stepId is not a UUID, baseDigest is missing, empty, or not a string, no fields to change, enabled, cron, or timezone has the wrong type, cron is not a valid cron expression or exceeds 100 characters, timezone is only whitespace, is not a valid time zone, or exceeds 64 characters, the project is a workflow, stepId is required but missing, or cron is missing when setting the sweep for the first time
400invalid_bodyThe body is malformed JSON or not a JSON object
400step_not_foundstepId is not a step of this placement
403insufficient_scopeThe project:write scope is missing
403forbiddenCalled with a system integration token
403owner_onlyA member who is not an owner
403sso_requiredThe user does not sign in with SSO
404placement_not_foundThe placement does not exist, it belongs to another project, or you are not a member of the project
409stale_baseThe placement has changed since you got it
409principalThe principal that runs the project (the user who created it) cannot be confirmed
413body_too_largeThe body exceeds 16 KiB
415unsupported_media_typeThe Content-Type of the body is not application/json

Triggers​

For a cycle project, firing a webhook trigger runs the placement tied to the trigger once, as an extra run. Trigger IDs can be read from triggers of Get Project. Add, change, and delete triggers on the screen.

Endpoint List​

メソッドエンドポイント説明Scope (SaaS)
POST/v1/projects/{projectId}/triggers/{triggerId}/fireFire a trigger to run once as an extra runproject:run

POST/v1/projects/{projectId}/triggers/{triggerId}/fire

Fires a webhook trigger configured on a cycle project and runs the target agent once, as an extra ad-hoc run. Calling it for a workflow project returns 404 Not Found.

The scheduled runs stay exactly as configured. A fired run is added separately from the schedule. Where an earlier fire has not started running yet, however, a later fire may be merged into that run. Where it is, jobId returns the same value as the earlier fire, so the number of fires and the number of runs do not necessarily match.

Path Parameters​

パラメータ型必須説明
projectIdstring必須Project ID (UUID)
triggerIdstring必須ID of the trigger to fire (UUID)

Request Body​

パラメータ型必須説明
eventIdstring必須A unique ID issued by the sender. Resending the same ID is treated as a duplicate. 1-160 characters using alphanumerics and _ . : @ + - only
payloadany—Arbitrary JSON passed to the agent. It is serialized to a JSON string and added to the request sent to the agent; anything beyond 8,000 characters after serialization is omitted

Response Fields (202 Accepted)​

FieldTypeDescription
resultstring"accepted" (newly accepted) or "duplicate" (already accepted for the same eventId)
jobIdstringID of the receiving job. It cannot be used to get run status (GET /v1/projects/{projectId}/runs/{runId})

Response Example​

JSON
{
"result": "accepted",
"jobId": "9b2e4c61-0f3a-4a9b-9c1d-2f7e5a8b3c40"
}
What 202 means here

This 202 Accepted means only that the request was recorded as accepted. The run happens afterwards, and its outcome is not part of this response. Do not treat 202 as business success.

Resending​

Idempotency is decided by the combination of project, trigger, and eventId. Resending the same content returns 202 with result: "duplicate". Sending the same eventId with a different payload returns 409 Conflict (event_conflict).

Error Responses​

StatuscodeDescription
400invalid_event_ideventId is missing or has an invalid format
400invalid_parameterprojectId or triggerId is not a UUID
400invalid_bodyThe request body is malformed JSON or is not a JSON object
415unsupported_media_typeA request body is sent with a Content-Type other than application/json
403insufficient_scopeThe project:run scope is missing
403owner_onlyThe caller is a member of the project but not an owner
404trigger_not_foundThe project or trigger does not exist, is not accessible, the trigger is not a webhook trigger, or a workflow project was specified
409trigger_disabledThe trigger is disabled
409project_not_activeThe project is not in a runnable state
409placement_unavailableThe target agent placement does not exist, or no execution principal is configured
409event_conflictThe same eventId was sent with a different payload
413body_too_largeThe request body exceeds 16 KiB

Finding the Execution Started by a Fire​

The execution history (GET /v1/projects/{projectId}/executions) cannot be filtered by the jobId in the response of a fire. Find it as follows.

  1. Filter the execution history by the placement of the trigger (placementId) and the time of the fire (from).
  2. Compare the jobId in the results of the candidate executions (GET /v1/projects/{projectId}/executions/{executionId}) with the jobId in the response of the fire.

Fires merged into an execution that has not started yet become one execution with the same jobId.

Workflow Runs​

A workflow run is one pass through the steps of a workflow project in order. Cycle projects do not create workflow runs (read cycle executions in the execution history).

Endpoint List​

メソッドエンドポイント説明Scope (SaaS)
POST/v1/projects/{projectId}/runsStart a workflow runproject:run
GET/v1/projects/{projectId}/runs/{runId}Get a workflow runproject:read
GET/v1/projects/{projectId}/runsList workflow runsproject:read
GET/v1/projects/{projectId}/runs/{runId}/configGet the settings at the start of a workflow runproject:read

POST/v1/projects/{projectId}/runs

Starts a run of a workflow project. Calling it for a cycle project returns 409 Conflict (unsupported_project_type).

Request Headers​

HeaderRequiredDescription
Idempotency-KeyRequiredA duplicate-run prevention key issued by the caller. 8-128 characters using alphanumerics and _ . : - only

Path Parameters​

パラメータ型必須説明
projectIdstring必須Project ID (UUID)

Request Body​

No body is required. If you send one, make it a JSON object. Any fields it contains are ignored.

Response Fields (201 Created / 200 OK)​

FieldTypeDescription
runIdstringRun ID (UUID). Use it to retrieve run status
existingboolean?true when an existing run was returned for a resend with the same Idempotency-Key. Not included on the first call

The first call returns 201 Created; a resend with the same Idempotency-Key returns 200 OK.

Request Example​

curl
curl -X POST https://api.fd.agenticstar.tm.softbank.jp/api/v1/projects/550e8400-e29b-41d4-a716-446655440000/runs \
-H "Authorization: Bearer <access_token>" \
-H "Idempotency-Key: nightly-batch-20260917" \
-H "Content-Type: application/json" \
-d '{}'

Response Example​

JSON
{
"runId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
How Idempotency-Key is handled
  • Keys are matched per project. They do not expire.
  • Resending with the same key returns the same run even after the project has been paused, after the concurrent-run limit has been reached, or after that run has finished.
  • If a timeout leaves the outcome unknown, simply resend with the same key. Nothing is run twice.
  • To start a different run, always issue a new key.

Error Responses​

StatuscodeDescription
400idempotency_key_requiredThe Idempotency-Key header is missing
400idempotency_key_invalidThe Idempotency-Key length or character set is invalid
400invalid_parameterprojectId is not a UUID
400invalid_bodyThe request body is malformed JSON or is not a JSON object
413body_too_largeThe request body exceeds 16 KiB
415unsupported_media_typeA request body is sent with a Content-Type other than application/json
403insufficient_scopeThe project:run scope is missing
403owner_onlyThe caller is a member of the project but not an owner
404project_not_foundThe project does not exist or is not accessible
400approvers_requiredAn enabled review step has no reviewers configured
409unsupported_project_typeA cycle project was specified
409project_inactiveThe project is not active (paused or archived)
409unsupported_runtimeThe project cannot run in this configuration, for example because agent runtimes are mixed
429too_many_active_runsThe project already has the maximum number of runs (3 in total) that are running or awaiting review

GET/v1/projects/{projectId}/runs/{runId}

Retrieves the status of a run. Besides runs started through the API (POST /v1/projects/{projectId}/runs), runs started from the UI, by email, or on a schedule can also be retrieved. cycle projects do not create runs, so they are out of scope for this endpoint.

Path Parameters​

パラメータ型必須説明
projectIdstring必須Project ID (UUID)
runIdstring必須Run ID (UUID)

Response Fields (200 OK)​

FieldTypeDescription
runIdstringRun ID (UUID)
statusstringRun state. One of "running" (running), "waiting_gate" (awaiting review), "closed_done" (completed), "closed_rejected" (ended by rejection), "closed_failed" (ended by failure) or "cancelled" (cancelled). Any value other than "running" and "waiting_gate" means the run has ended
originTypestring | nullHow the run started. One of "manual" (started from the UI), "api" (started through the API), "mail" (started by email) or "cron" (scheduled)
originRefstring | nullA reference value that depends on how the run started. For a run started through the API, the Idempotency-Key used to start it
currentStepIdstring | nullID (UUID) of the step in progress. While the run proceeds in separate lanes, the ID of the step before the branch. null for a completed run. For a run that ended for another reason, the ID of the step at that time may remain
startedByRefstring | nullWho or what started the run. See the "Who started the run" table below
actorLabelstring | nullDisplay name of a starter that is not a user (the system integration name or the sender address of an email). null otherwise
startedAtstring | nullStart time (ISO 8601). null before it starts
endedAtstring | nullEnd time (ISO 8601). null before it ends
summarystring | nullFor a completed run, the output of the last completed step that recorded an output (first 2,000 characters). null if there is no such step and for a run that has not completed
runtimeKindstring | nullKind of runtime ("autonomous"). May be null for older runs
cancelRequestedAtstring | nullTime (ISO 8601) when cancellation was requested. null if not requested
configRevisionnumber | nullRevision of the case configuration (Marketplace edition runs only). null for SaaS runs
stepsarrayRecords of the step runs, in the order they were recorded
steps[].runStepIdstringID of the step run (starts with "rs:")
steps[].stepIdstring | nullStep ID (UUID)
steps[].placementIdstring | nullID (UUID) of the placement that handled the step. null for rows that do not run an agent (such as review steps)
steps[].executionIdstring | nullID of the agent execution. Set once the agent starts running
steps[].conversationIdstring | nullID of the conversation of the agent execution. Set once the agent starts running
steps[].statusstringOne of "pending" (waiting to run), "running" (running), "waiting_gate" (awaiting review), "done" (done), "failed" (failed) or "skipped" (skipped)
steps[].attemptnumber | nullRetry count within the same visit (starting at 1)
steps[].lanestring | nullID of the lane the step belongs to. "main" for steps that are not in a separate lane
steps[].scheduledAtstring | nullWhen the step has a scheduled time, the time (ISO 8601) this row waits for. null once it starts
steps[].startedAtstring | nullStart time (ISO 8601)
steps[].endedAtstring | nullEnd time (ISO 8601)
steps[].outputSummarystring | nullSummary of the step output
steps[].outcomestring | nullResult of the agent execution. One of "completed", "incomplete", "failed", "timeout", "stopped", "denied" or "skipped". null for rows without a result
steps[].reasonCodestring | nullReason code for the result
steps[].heldbooleanWhether the step is held because the project is paused and is waiting to resume
steps[].visitnumber | nullWhich visit to this step this is (increases with send-backs). null for rows without this record
steps[].reworkReasonstring | nullReason for the send-back
steps[].gateForstring | nullFor a review row, the step run (runStepId) it was raised for
steps[].routedFromstring | nullWhen steps were skipped by choosing a destination, the step run (runStepId) that chose it
steps[].latestring | nullWhy a result that arrived late was not used to advance the run
steps[].gateobject | nullSummary of a review step. null for rows that are not review steps
steps[].gate.decisionstring | nullOne of "proceed", "send_back" or "reject". null if not decided yet
steps[].gate.waitSourcestring | nullWhat the review waits for. "human" (a person's decision) or "external" (an external condition)
plannedPlacementsarrayOrder of steps and placements planned to run, based on the configuration when the run started
plannedPlacements[].stepIdstring | nullStep ID (UUID)
plannedPlacements[].placementIdstring | nullPlacement ID (UUID). null for review steps and steps without an agent
lanesarrayStatus of each lane after the branch. An empty array before the branch and for runs that do not use lanes
lanes[].laneIdstringLane ID
lanes[].namestring | nullLane name
lanes[].positionnumber | nullLane order (starting at 1)
lanes[].statestringOne of "running" (running), "waiting_gate" (awaiting review), "arrived" (waiting to join) or "closed" (ended)
lanes[].currentStepIdstring | nullID (UUID) of the step in progress in that lane. null for a lane waiting to join. For a lane that has ended, the ID of its last step may remain
lanes[].arrivedbooleanWhether the lane has reached the join point

The fields are the same regardless of the token used for the call (an application or a system integration).

Who started the run​
Started bystartedByRefactorLabel
A user (from the UI, through the API, or by email sent from a member address)User IDnull
A system integration"client:" followed by the Client ID of the system integration. "system:federation-api" if the Client ID is unknownName of the system integration (null if unknown)
Email sent from an address that is not a member"mail:" followed by a hash of the senderSender address
A schedulenullnull

For runs started by a system integration before 2026-09-25, startedByRef is null.

Response Example​

JSON
{
"runId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "running",
"originType": "api",
"originRef": "nightly-batch-20260917",
"currentStepId": "5d6e7f80-1a2b-4c3d-8e9f-0a1b2c3d4e5f",
"startedByRef": "bbbe4306-6975-420b-af47-fb4c8f48b4aa",
"actorLabel": null,
"startedAt": "2026-09-17T01:30:00.000Z",
"endedAt": null,
"summary": null,
"runtimeKind": "autonomous",
"cancelRequestedAt": null,
"configRevision": null,
"steps": [
{
"runStepId": "rs:1042",
"stepId": "5d6e7f80-1a2b-4c3d-8e9f-0a1b2c3d4e5f",
"placementId": "e4f5a6b7-c8d9-4e0f-a1b2-c3d4e5f6a7b8",
"executionId": "6a7b8c9d-0e1f-4a2b-8c3d-4e5f6a7b8c9d",
"conversationId": "9c8b7a6d-5e4f-4a3b-9c2d-1e0f9a8b7c6d",
"status": "running",
"attempt": 1,
"lane": "main",
"scheduledAt": null,
"startedAt": "2026-09-17T01:30:01.000Z",
"endedAt": null,
"outputSummary": null,
"outcome": null,
"reasonCode": null,
"held": false,
"visit": 1,
"reworkReason": null,
"gateFor": null,
"routedFrom": null,
"late": null,
"gate": null
}
],
"plannedPlacements": [
{ "stepId": "5d6e7f80-1a2b-4c3d-8e9f-0a1b2c3d4e5f", "placementId": "e4f5a6b7-c8d9-4e0f-a1b2-c3d4e5f6a7b8" },
{ "stepId": "c2f1a8e4-6b3d-4e7a-9c15-8d2e4f6a7b90", "placementId": null }
],
"lanes": []
}

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId or runId is not a UUID
403insufficient_scopeThe project:read scope is missing
404run_not_foundThe run does not exist, belongs to another project, or is not accessible

GET/v1/projects/{projectId}/runs

Lists workflow runs, newest start first. Up to the latest 100 are returned, and the next page (cursor) cannot be read. For a cycle project, the list is empty.

Query Parameters​

ParameterTypeDefaultDescription
limitinteger50Number of items (1-100)
placementIdstring—Filter to workflow runs with steps handled by this placement (UUID)

Response Fields (200 OK)​

FieldTypeDescription
runsarrayArray of workflow runs. The fields of an item are the same as Get a Workflow Run (GET /v1/projects/{projectId}/runs/{runId})
hasMorebooleanWhen limit is 99 or less, whether there are more. When limit is 100, true when 100 items are returned (there may be no more)

Workflow runs older than the latest 100 cannot be read with this list. Find the runId in the execution history (GET /v1/projects/{projectId}/executions, which supports the next page), and read it with Get a Workflow Run (GET /v1/projects/{projectId}/runs/{runId}). Steps that have not started and steps waiting for a review do not appear in the execution history, so an old workflow run in which no step has started cannot be found.

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId or placementId is not a UUID, or limit is not an integer between 1 and 100
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
404project_not_foundThe project does not exist, or you are not a member

GET/v1/projects/{projectId}/runs/{runId}/config

Gets the settings at the start of a workflow run (steps, lanes, placements, and connectors). These do not change even if the project's settings are changed later (only connectionId of the connectors is resolved from the current connector information).

Response Fields (200 OK)​

FieldTypeDescription
runIdstringID of the workflow run
takenAtstring | nullWhen the settings were copied (ISO 8601)
stepsarray | nullThe steps at that time. Same fields as Step Fields (without digest; fields not in the copy are null)
lanesarray | nullThe lanes at that time (id, name, parentLaneId, and stepIds). In a copy without lanes, all steps are in one "main" lane and name is null
forksarray | nullThe splits at that time (id, afterStepId, laneIds, and joinId)
joinsarray | nullThe joins at that time (id, mode, laneIds, and nextStepId)
placementsarray | nullThe placements at that time (placementId, agentId, name, goal, guardrail, skills, playbookId, playbookName, runtimeConfigs, sweeps, and stepIds). goal, guardrail, skills, and playbookId are the values at the start
connectorsarray | nullThe connectors at that time (kind, connectionId, name, and ledgerEnabled). name is the name at the start. connectionId is resolved from the current connector information (null if disabled or deleted on the admin screen, or if it could not be checked)
sendBackLimitnumber | nullMaximum number of send-backs

For a workflow run without a copy of the settings, or whose copy cannot be read, everything other than runId is null.

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId or runId is not a UUID
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
404run_not_foundThe workflow run does not exist, belongs to another project, the project is a cycle, or you are not a member of the project

Executions​

An execution is one run of an Agent. Each appears as one row in the execution history on the screen, and opening it shows the run record. There are executions of workflow steps (kind is "run_step"; executionId has the form rs:<number>) and executions of cycle sweeps ("sweep"; executionId is a UUID).

Endpoint List​

メソッドエンドポイント説明Scope (SaaS)
GET/v1/projects/{projectId}/executionsGet the execution historyproject:read
GET/v1/projects/{projectId}/executions/{executionId}Get the result of an executionproject:read
GET/v1/projects/{projectId}/executions/{executionId}/operationsGet the list of tool callsproject:read
GET/v1/projects/{projectId}/executions/{executionId}/timelineGet the timeline of an executionproject:read

Outcome Values​

The values of outcome. For what the screen shows, see the Results Reference.

ValueShown on the screen
completedCompleted
incompleteFailed (reported by agent)
failedFailed
timeoutTimed out
stoppedFailed (stopped)
deniedNot allowed by rules
skippedNothing to do

For executions that have not finished, and executions that finished without a recorded result (insufficient records), outcome is null.

GET/v1/projects/{projectId}/executions

Gets the execution history, newest start time first. Cursor-based pagination is supported. Steps that have not started and steps waiting for a review are not included.

Query Parameters​

ParameterTypeDefaultDescription
fromstring—Filter to executions that started at or after this time (ISO 8601)
tostring—Filter to executions that started at or before this time (ISO 8601)
placementIdstring—Filter to executions of this placement (UUID)
stepIdstring—Filter to executions of this step (UUID)
runIdstring—Filter to step executions of this workflow run (UUID)
outcomestring"all"Filter by result. Besides the outcome values: "all" (all), "success" (completed), "problems" (incomplete, failed, timeout, stopped, and denied), "running" (running), "missing" (insufficient records), or "unmeasured" (finished in a way where completion is not measured)
qstring—Filter by part of the Agent name, the execution UUID, or the conversation ID (up to 200 characters). Cycle executions can be found by executionId. Workflow step executions cannot be found by rs:<number>; use steps[].executionId (a UUID) of the workflow run
limitinteger50Number of items per page (1-100)
cursorstring—Cursor for the next page (the cursor value from the previous response)

Response Fields (200 OK)​

FieldTypeDescription
executionsarrayArray of executions
executions[].executionIdstringExecution ID. rs:<number> for a workflow, and a UUID for a cycle
executions[].kindstring | null"run_step" (a workflow step) or "sweep" (a cycle sweep)
executions[].runIdstring | nullID of the workflow run. null for a cycle
executions[].stepIdstring | nullStep ID
executions[].stepNamestring | nullStep name
executions[].stepPositionnumber | nullPosition of the step
executions[].placementIdstring | nullPlacement ID
executions[].agentNamestring | nullAgent name
executions[].attemptnumber | nullAttempt number (increases when a platform failure is retried)
executions[].lanestring | nullLane ID (workflow; "main" when there are no lanes)
executions[].outcomestring | nullOutcome (see "Outcome Values" above)
executions[].reasonCodestring | nullReason for the outcome. For a cycle, the reason the execution ended (for example, "guardrail_blocked"); for a workflow, the reason reported by the step
executions[].resultStatestring | null"terminal" (has a result), "running" (running), "missing" (insufficient record), "unmeasured" (completion not measured), or "not_applicable" (a row that is not an Agent execution, such as a review step)
executions[].terminalboolean | nullWhether it has finished
executions[].startedAtstring | nullStart time (ISO 8601)
executions[].endedAtstring | nullEnd time (ISO 8601)
executions[].summarystring | nullFinal response of a workflow step (up to 2000 characters). null for a cycle (read it in the execution result)
executions[].errorMessagestring | nullError message (cycle)
executions[].originTypestring | nullHow it started. For a workflow, how the workflow run started ("manual", "api", "mail", or "cron"); for a cycle, "cron" (sweep, or "Start by email") or "webhook" (trigger fire)
executions[].actorLabelstring | nullDisplay name of a starter that is not a user (the name of a system integration, or the sender address of an email)
executions[].gateDecisionstring | nullDecision of the review step
executions[].conversationIdstring | nullID of the execution conversation (used to read the execution conversation)
hasMorebooleanWhether there is a next page
cursorstringCursor for the next page. Included only when hasMore is true

You cannot filter by the reason for the outcome (reasonCode).

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId, placementId, stepId, or runId is not a UUID, from or to is not an ISO 8601 time, outcome is not one of the values above, q exceeds 200 characters, or limit or cursor is invalid
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
404project_not_foundThe project does not exist, or you are not a member

GET/v1/projects/{projectId}/executions/{executionId}

Gets the result of an execution (the run record). An execution of a workflow step can be read with rs:<number> from the execution history, and also with steps[].executionId (a UUID) of the workflow run. executionId in the response is rs:<number>.

Path Parameters​

パラメータ型必須説明
projectIdstring必須Project ID (UUID)
executionIdstring必須Execution ID (rs:<number> or a UUID)

Response Fields (200 OK)​

In addition to the fields of an item in the execution history, the following fields are returned. summary is up to 2000 characters for a workflow, and for a cycle it is the last message of the conversation as is.

FieldTypeDescription
envelopeobject | nullSummary of the execution
envelope.countsobjectNumbers of tool calls (toolCalls, readCalls, mutatingSuccess, mutatingFailed, unknownCalls, opaqueCalls, workspaceWrites, mcpCalls, and mcpFailed)
envelope.completionReportobject | nullCompletion report of the Agent (completed, reasonCode, fixTarget, comment, and truncated)
envelope.completionReport.fixTargetstring | nullWhat to fix: "goal", "skill", "handoff", "not_assigned", "connection", "rule", "guardrail", "external", or "unknown". null when there is none
envelope.completionReport.commentstring | nullComment of the Agent (up to 2 KB; truncated is true when cut)
envelope.platformFailurestring | nullKind of platform failure (when the outcome is failed or timeout): "cancelled", "signal_cancelled", "kill_timeout", "exception", "invalid_output", "model_refusal", "content_filter", "max_turns", or "loop_limit". null when there is none
envelope.toolsarrayNames of the tools called
usedSettingsobjectSettings used
usedSettings.manifestobject | nullDistributed skills (skill IDs and version IDs), the playbook, guardrails, and so on. Same as the meta of context.manifest in the execution timeline, with field names as recorded
usedSettings.mcpobject | nullMCP connections (numbers and names of configured, connected, and failed servers, and so on). Same as the meta of runtime.mcp.connected in the execution timeline. null for an execution that does not use MCP
questionsarrayQuestions from the Agent (eventId, at, kind, optionsCount, optionsTruncated, and answer)
questions[].answerobject | nullAnswer (at, eventType, actorKind, actorRef, digest, answerKind, and optionIndex). null when there is no record of an answer
gatesarrayReview requests (workItemId, title, status, gateDecision, decidedAt, gateMode, decidedByKind, decidedByRef, waitSource, decisionReason, and destinationLabel)
artifactsarrayArtifacts (artifactId, name, path, format, sha256, and size; the content is not included)
filesarrayFiles (filename, filepath, source, isPrimary, and createdAt; mimeType and size when known). Same form as deliverables in the conversation API
configurationobjectExecution settings (policyVersion, policyDigest, policyProfile, model, and mcpConfigVersion)
requestobjectRequest. For a workflow, originType, originRef, triggerId, scheduledAt, runStartedAt, and reworkReason; for a cycle, cron, timezone, jobName, and originKind
jobIdstring | nullJob ID. Can be compared with the jobId in the response of a trigger fire
gateForstring | nullWhich failed step execution this review was created for (rs:<number>)
routedFromstring | nullThe step execution that decided the destination (rs:<number>)
latestring | nullWhy a result that arrived late was not used for progress
inputsarrayFiles received from the previous step (filename only)
  • When …Kind in questions and gates is "human", …Ref is a user ID. Otherwise, …Ref is null.
  • questions includes only the questions within the newest 200 rows of the records of the execution. Read older questions in the execution timeline (rows whose section is "confirmation").
  • files includes up to 20 files.
  • Read each tool call in the list of tool calls.

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId is not a UUID, or executionId is neither rs:<number> nor a UUID
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
404execution_not_foundThe execution does not exist, belongs to another project, or you are not a member of the project

GET/v1/projects/{projectId}/executions/{executionId}/operations

Gets the list of tool calls in an execution, page by page from the newest records to older ones. Within a page, operations are in oldest-first order. Reading to the end gives all the calls of the execution. Arguments and responses are not included.

Query Parameters​

ParameterTypeDefaultDescription
cursorstring—Cursor for the next page (the cursor value from the previous response)

The number of items per page is not fixed, so there is no limit.

Response Fields (200 OK)​

FieldTypeDescription
operationsarrayArray of calls
operations[].operationIdstring | nullCall ID
operations[].kindstring | nullKind of row. "access" is the check before reading a file
operations[].resourcestring | nullTool (mcp:<server name>:<tool name> for MCP)
operations[].actionstring | nullOperation
operations[].pathstring | nullPath of the file read
operations[].mcpServerstring | nullName of the MCP server
operations[].connectionIdstring | nullConnector ID (connectionId of the connector API)
operations[].connectionKindstring | nullKind of connector ("mcp" or "a2a")
operations[].attemptedbooleanWhether the call was made
operations[].effectstring | nullResult of the call
operations[].deniedstring | nullReason when it was stopped
operations[].durationMsnumber | nullTime taken (milliseconds)
operations[].reasonstring | nullReason of the check (only rows whose kind is "access"; for example, "granted" or "path_not_found"). null for other rows
hasMorebooleanWhether there are more
cursorstringCursor for the next page. Included only when hasMore is true

When the records of one call are split across a page boundary, rows with the same operationId appear on both pages. Treat rows with the same operationId as one call.

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId or executionId has the wrong form, or cursor is invalid
400invalid_cursorcursor cannot be read
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
404execution_not_foundThe execution does not exist, belongs to another project, or you are not a member of the project

GET/v1/projects/{projectId}/executions/{executionId}/timeline

Gets the timeline of an execution (the records of the execution). The records of the request, evidence, actions, confirmations, and result are listed from oldest.

Query Parameters​

ParameterTypeDefaultDescription
limitinteger—Number of rows per page (1-100). 200 rows if omitted
cursorstring—Cursor for the next page (the cursor value from the previous response)

Response Fields (200 OK)​

FieldTypeDescription
rootExecutionIdstringExecution ID
originstring | nullHow the execution started
ownerobject | nullPrincipal of the execution
executionsobjectSummaries of the execution (items): result, settings, numbers of tool calls, and so on
timelineobjectRecord rows (items)
timeline.items[].atstringTime of the record
timeline.items[].keynumberRecord ID. For "tool.access" rows, it matches operationId (row:<key>) in the list of tool calls
timeline.items[].sectionstring"request", "evidence", "action", "confirmation", "result", or "other"
timeline.items[].eventTypestringKind of record (for example, "context.manifest", "runtime.mcp.connected", "tool.invoked", or "guardrail.blocked")
timeline.items[].metaobjectContents of each record. Field names are returned as recorded
deletedobjectDeleted conversations and resources
hasMorebooleanWhether there are more
cursorstringCursor for the next page. Included only when hasMore is true
snapshotAtstring | nullWhen the records were read

timeline.items[] also has writer, actor, resource, action, decision, reason, ref, and available. The contents of meta differ by kind of record, and their field names are returned as recorded (snake_case). One page is up to 64 KiB.

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId or executionId has the wrong form, limit is not an integer between 1 and 100, or cursor is invalid
400invalid_cursorcursor cannot be read
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
404execution_not_foundThe execution does not exist, belongs to another project, or you are not a member of the project
413trace_too_largeThe records are too large to read
502trace_unreachableThe records could not be read (try again later)
503trace_unavailableReading the records is not available

Records (Audit Trail)​

A list of certain operations and events in a project (review decisions, changes to execution rules and members, tool records in executions, and so on). The setting changes that are kept are changes to execution rules, reviewers, the review method, members, and "Start by email" (including changes made on the screen). Changes to the library (Agents, playbooks, and skills) and other changes to steps, placements, sweeps, triggers, connectors, and notifications are not kept.

Endpoint List​

メソッドエンドポイント説明Scope (SaaS)
GET/v1/projects/{projectId}/auditGet the records (audit trail)project:read

GET/v1/projects/{projectId}/audit

Gets the records (audit trail), newest first. Cursor-based pagination is supported.

Query Parameters​

ParameterTypeDefaultDescription
kindstring—Filter by kind of record (for example, "policy.changed", "improvement.applied", or "tool.invoked")
runIdstring—Filter to the records of this workflow run (UUID)
qstring—Filter by text (up to 100 characters)
limitinteger50Number of items per page (1-100)
cursorstring—Cursor for the next page (the cursor value from the previous response)

Response Fields (200 OK)​

FieldTypeDescription
eventsarrayArray of records
events[].eventIdnumberRecord ID
events[].occurredAtstring | nullTime (ISO 8601)
events[].eventTypestring | nullKind of record
events[].actorKindstring | nullKind of recorder: "agent", "human", "system", "human_external", "mail_external", or "unknown"
events[].actorRefstring | nullRecorder. A user ID when actorKind is "human"; otherwise a reference (client:<integration ID> for a system integration, mail:<hash> for an external email sender, and so on)
events[].decisionstring | nullDecision or result
events[].reasonstring | nullReason
events[].executionIdstring | nullExecution ID
events[].runIdstring | nullID of the workflow run
events[].stepNamestring | nullStep name
events[].metadataobjectContents of each record. Field names are returned as recorded. {} for a record without contents
hasMorebooleanWhether there is a next page
cursorstringCursor for the next page. Included only when hasMore is true
  • Identify rows of system integrations by client:<integration ID> in actorRef. Read the display name of an integration from actorLabel in the execution history or the execution result.
  • Some records during an execution (context.manifest, runtime.*, and so on) are not included. Read them in the execution timeline.

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId or runId is not a UUID, kind is not in the form of a kind of record, q exceeds 100 characters, or limit or cursor is invalid
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
404project_not_foundThe project does not exist, or you are not a member

KPI​

Gets the same values as "KPI" in the overview on the screen. For how they are counted, see the Results Reference.

Endpoint List​

メソッドエンドポイント説明Scope (SaaS)
GET/v1/projects/{projectId}/kpiGet the KPIsproject:read

GET/v1/projects/{projectId}/kpi

Gets the KPIs of a project. Only project members can read them (even for a shared project, a non-member gets 404).

Query Parameters​

ParameterTypeDefaultDescription
daysinteger30Period (the most recent days). One of 7, 30, or 90

Response Fields (200 OK)​

FieldTypeDescription
daysnumberPeriod (days)
successRatenumber | nullAgent completion rate (0 to 1; completed ÷ finished). null when finished is 0
successRateStatusstring"ok" (final), "incomplete" (provisional because a record is insufficient), or "none" (no record is insufficient and finished is 0)
succeedednumberNumber of completed executions
denominatornumberNumber of finished executions (Completed plus "Failed / needs action")
executionsnumberSame value as denominator
outcomesobjectNumbers per outcome (completed, incomplete, failed, timeout, stopped, denied, and skipped)
excludedobjectNumbers not counted (skipped, running, missing, and unmeasured)
durationP95Minutesnumber | nullProcessing time guide (p95, minutes)
runsobjectNumbers of workflow runs (total, closedDone, closedFailed, closedRejected, and cancelled) and p95Minutes
gatesarrayResults per review step (stepId, position, name, mode, total, approvalRate, and sendBackRate)
humanobjectReview handling (reviewsPerRun, gateWaitMedianMinutes, and interventions)
workStepsobjectNumbers counted the same way as billing steps (executions, billableExecutions, excludedExecutions, toolCalls, steps, stepsUnknown, and formulaVersion)

The Agent completion rate, runs, gates, and human count executions, workflow runs, and review requests that started in the period. workSteps counts executions that finished in the period. Because they count different executions, executions and workSteps.executions do not always match.

Error Responses​

StatuscodeDescription
400invalid_parameterprojectId is not a UUID, or days is not 7, 30, or 90
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
404project_not_foundThe project does not exist, or you are not a member

Review Requests​

A review request is created when a workflow reaches a review step, or when an Agent step returns "Not allowed by rules" or "Failed (reported by agent)" and that step is set to ask for review. The reviewers decide whether to proceed, send it back, or reject it. It is the same as a review request on the screen.

  • Reviewers (the reviewers when the review request was created who are still members of the project) and the owners of the project can read it. Other users get 404 Not Found (workitem_not_found).
  • Only reviewers can decide. An owner who is not a reviewer cannot decide (403 Forbidden, not_gate_owner).

Endpoint List​

メソッドエンドポイント説明Scope (SaaS)
GET/v1/workitemsGet the list of review requestsproject:read
GET/v1/workitems/{workItemId}Get a review requestproject:read
POST/v1/workitems/{workItemId}/decisionDecide a review requestproject:decide

GET/v1/workitems

Gets the review requests you can read, most recently updated first, across projects. Cursor-based pagination is supported.

Query Parameters​

ParameterTypeDefaultDescription
statusstring—Filter by state: "assigned" (waiting for review), "done" (proceeded or sent back), or "cancelled" (rejected, or cancelled because the workflow run stopped)
projectIdstring—Filter to the review requests of this project (UUID)
limitinteger50Number of items per page (1-100)
cursorstring—Cursor for the next page (the cursor value from the previous response)

Response Fields (200 OK)​

FieldTypeDescription
workitemsarrayArray of review requests
workitems[].workItemIdstringReview request ID (UUID)
workitems[].titlestring | nullTitle
workitems[].statusstring | null"assigned", "done", or "cancelled"
workitems[].projectIdstring | nullProject ID
workitems[].decisionstring | nullDecision: "proceed", "send_back", or "reject". null before a decision
workitems[].requesterUserIdstring | nullUser ID of the requester
workitems[].expiresAtstring | nullReview deadline (ISO 8601)
workitems[].gateModestring | nullReview method: "blocking" (wait for the reviewer's decision) or "notify_only" (proceed automatically after the deadline)
workitems[].overdueboolean | nullWhether the deadline has passed
workitems[].decidedAtstring | nullWhen it was decided (ISO 8601)
workitems[].createdAtstring | nullCreation time (ISO 8601)
workitems[].updatedAtstring | nullUpdate time (ISO 8601)
workitems[].canDecidebooleanWhether you can decide (true for a reviewer)
hasMorebooleanWhether there is a next page
cursorstringCursor for the next page. Included only when hasMore is true

Error Responses​

StatuscodeDescription
400invalid_parameterstatus is not one of the values above, projectId is not a UUID, or limit or cursor is invalid
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO

GET/v1/workitems/{workItemId}

Gets a review request, with the material for the review, its history, and the destinations you can choose.

Path Parameters​

パラメータ型必須説明
workItemIdstring必須Review request ID (UUID)

Response Fields (200 OK)​

FieldTypeDescription
workitemobjectThe review request: the fields of an item in the list (workItemId, title, status, projectId, decision, requesterUserId, expiresAt, gateMode, overdue, decidedAt, createdAt, updatedAt, and canDecide) and the following fields
workitem.descriptionstring | nullDescription
workitem.runIdstring | nullID of the workflow run
workitem.runStepIdstring | nullExecution ID of the step that asked for the review (rs:<number>; the same form as executionId in the execution history)
workitem.stepIdstring | nullID of the step that asked for the review (a review step, or an Agent step that asked for a review because of its outcome)
workitem.approverUserIdsarrayArray of user IDs of the reviewers (the reviewers when the review request was created)
workitem.overdueActionstring | nullAfter the deadline: "none", "proceed", "send_back", or "reject"
workitem.evidenceobject | nullMaterial for the review (see the table below)
workitem.decidedByKindstring | nullKind of what decided (for example, "human"). null before a decision
workitem.decidedByRefstring | nullWhat decided. A user ID when decidedByKind is "human". An automatic decision after the deadline and the like is a system:… reference. null before a decision
workitem.decisionReasonstring | nullReason for the decision
workitem.sendBackToStepIdstring | nullID of the step sent back to
workitem.decisionResultobject | nullResult of the decision (decision, at, completesRun, sendBackToStepId, destinationId, and destinationStepId). completesRun is whether proceeding finished the workflow run
activitiesarrayHistory (newest first, up to 100 items)
activities[].activityIdnumber | nullHistory ID
activities[].eventTypestring | nullKind of record
activities[].decisionstring | nullDecision
activities[].actorKindstring | nullKind of recorder
activities[].actorRefstring | nullRecorder. A user ID when actorKind is "human"; otherwise a reference such as system:…
activities[].reasonCodestring | nullReason
activities[].conversationIdstring | nullConversation ID
activities[].metadataobjectContents of each record. Field names are returned as recorded (they may contain user IDs)
activities[].occurredAtstring | nullTime (ISO 8601)
gateobject | nullInformation for the decision (see the table below)

Material for the review (workitem.evidence):

FieldTypeDescription
summarystring | nullText for the review. Usually the output of the Agents of the reviewed step; when an Agent step asked for a review because of its outcome, a summary of the outcome and its reason
conversationIdstring | nullID of the execution conversation of the reviewed step
filesarrayFiles of the reviewed step (same form as deliverables in the conversation API)
gateKindstring | nullKind of review: "review" (review) or "manual" (manual work)
stepNamestring | nullName of the step that asked for the review
outcomestring | nullOutcome of the execution of the reviewed step (see "Outcome Values" of executions)
executionIdstring | nullExecution ID of the reviewed step (can be read with Get the result of an execution)
reasonCodestring | nullReason for the outcome (when an Agent step asked for a review because of its outcome)
escalateToUserIdstring | nullUser ID of the contact after the deadline (a person who was a member when the review request was created)
destinationsarraySteps you can choose to proceed to (destinationId, label, and stepId). An empty array when not set

Information for the decision (gate):

FieldTypeDescription
projectNamestring | nullProject name
projectTypestring | nullProject type
stepIdstring | nullID of the step that asked for the review
stepNamestring | nullName of the step that asked for the review
stepPositionnumber | nullPosition of the step that asked for the review
nextStepobject | nullThe next step when proceeding (stepId, name, and position). null when there is no next step
sendBackDefaultStepIdstring | nullID of the step sent back to when no send-back step is specified
sendBackCandidatesarraySteps you can specify as the send-back step (stepId, name, position, and sendBacks). sendBacks is the number of times sent back to that step
sendBackLimitnumber | nullMaximum number of send-backs to one step
destinationsarraySteps you can choose to proceed to (destinationId, label, stepId, stepName, and stepPosition)
laneobject | nullLane of the step that asked for the review (laneId, name, and position). null when there are no lanes

Error Responses​

StatuscodeDescription
400invalid_parameterworkItemId is not a UUID
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
404workitem_not_foundThe review request does not exist, or you cannot read it

POST/v1/workitems/{workItemId}/decision

Decides a review request. Only reviewers can call it.

Request Body​

FieldTypeRequiredDescription
decisionstringYes"proceed", "send_back", or "reject"
reasonstring—Reason (up to 10000 characters). Required for "send_back" and "reject"
sendBackToStepIdstring—ID of the step to send back to (for "send_back"; a step in sendBackCandidates of gate). If omitted, it is sent back to the step in sendBackDefaultStepId
destinationIdstring—Destination (for "proceed"; destinationId in destinations of gate; up to 64 characters). Required to proceed a review request that has destinations
commandIdstring—A value to identify resends (up to 128 characters)
  • If you resend the same content with the same commandId, the result of the first request ({ "decision": …, "alreadyDecided": true }) is returned. Sending different content with the same commandId returns 409 Conflict (command_conflict).
  • Sending to a review request that has already been decided with a different commandId (or without commandId) returns 409 Conflict (already_decided). Get the review request again and read the current decision.
  • Send-backs are allowed up to the maximum number of send-backs to one step (gate.sendBackLimit).

Response Fields (200 OK)​

FieldTypeDescription
decisionstringDecision
channelstring | nullHow it was decided ("api" when decided through the API). Not included in the response to a resend
alreadyDecidedbooleanIncluded as true only when a resend with the same commandId returned the result of the first request

Error Responses​

StatuscodeDescription
400invalid_parameterworkItemId or sendBackToStepId is not a UUID, decision is missing or not one of the values above, commandId or destinationId is only whitespace, or a field has the wrong type or length
400invalid_bodyThe body is malformed JSON or not a JSON object
400reason_requiredreason is missing for "send_back" or "reject"
400invalid_send_back_stepsendBackToStepId is not a step that can be specified as the send-back step
400destination_requiredTried to proceed a review request that has destinations without destinationId
400invalid_destinationdestinationId is not one of the destinations, or destinationId was sent with a decision other than "proceed"
403insufficient_scopeThe project:decide scope is missing
403forbiddenCalled with a system integration token
403sso_requiredThe user does not sign in with SSO
403not_gate_ownerA member of the project who is not a reviewer
404workitem_not_foundThe review request does not exist, or you cannot read it
409already_decidedIt has already been decided
409command_conflictDifferent content was sent with the same commandId
409invalid_stateIt is not waiting for review (for example, it was cancelled)
409send_back_limit_exceededThe maximum number of send-backs has been reached
413body_too_largeThe body exceeds 3 MiB
415unsupported_media_typeThe Content-Type of the body is not application/json

Connectors​

Reads the MCP servers and A2A agents used by project executions. Only the information the other side publishes (tool names and descriptions, and the agent card) is returned. Endpoint URLs and credentials are not returned.

  • You can find the connector ID (connectionId) in connectors[].connectionId of Get Project and in operations[].connectionId of the list of tool calls.
  • Any user of the tenant can read any connector (even without being a member of the project). A connector that was disabled or deleted on the administration screen returns 404 Not Found (connector_not_found).
  • Sign-in to a connector is done on the project screen.

Endpoint List​

メソッドエンドポイント説明Scope (SaaS)
GET/v1/connectors/mcp/{connectionId}Get an MCP connectorproject:read
GET/v1/connectors/a2a/{connectionId}Get an A2A connectorproject:read

GET/v1/connectors/mcp/{connectionId}

Gets an MCP connector and its list of tools. The list of tools is the one fetched from the MCP server and saved on the administration screen.

Path Parameters​

パラメータ型必須説明
connectionIdstring必須Connector ID (a positive integer of up to 16 digits)

Response Fields (200 OK)​

FieldTypeDescription
kindstring"mcp"
connectionIdstringConnector ID
namestring | nullConnector name
requiresLoginbooleanWhether you must sign in on the project screen before using the connector
toolsarrayArray of tools
tools[].namestring | nullTool name
tools[].displayNamestring | nullDisplay name
tools[].descriptionstring | nullDescription
tools[].presentInLastFetchboolean | nullWhether it was also there the last time the list was fetched (false means the tool is gone from the MCP server)
toolsFetchedAtstring | nullWhen the list of tools was last fetched (ISO 8601). null when no tools are saved

Error Responses​

StatuscodeDescription
400invalid_parameterconnectionId is not a positive integer of up to 16 digits
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
404connector_not_foundThe connector does not exist or is disabled

GET/v1/connectors/a2a/{connectionId}

Gets an A2A connector and its agent card. The agent card is the one saved on the administration screen.

Path Parameters​

パラメータ型必須説明
connectionIdstring必須Connector ID (a positive integer of up to 16 digits)

Response Fields (200 OK)​

FieldTypeDescription
kindstring"a2a"
connectionIdstringConnector ID
namestring | nullConnector name
requiresLoginbooleanWhether you must sign in on the project screen before using the connector
agentCardobjectAgent card
agentCard.descriptionstring | nullDescription
agentCard.versionstring | nullVersion
agentCard.providerobject | nullProvider
agentCard.skillsarraySkills
agentCard.capabilitiesobject | nullSupported capabilities
agentCard.defaultInputModesarrayAccepted formats
agentCard.defaultOutputModesarrayReturned formats
agentCard.supportedInterfacesarraySupported connection methods
agentCard.documentationUrlstring | nullDocumentation URL
agentCard.iconUrlstring | nullIcon URL

The contents of provider, skills, capabilities, and supportedInterfaces in agentCard are in the form the other agent publishes.

Error Responses​

StatuscodeDescription
400invalid_parameterconnectionId is not a positive integer of up to 16 digits
403insufficient_scopeThe project:read scope is missing
403forbiddenCalled with a system integration token
404connector_not_foundThe connector does not exist or is disabled

Execution Conversations​

Read the conversation with the Agent during an execution (the request to the Agent, explanations along the way, the final response, and so on) with GET /v1/conversations/{conversationId}/messages of the conversation API (the chat:history scope). For details, see Conversation Management in the User API Reference (Conversations, Library, Organizations).

  • You can find conversationId in conversationId of the execution history and the execution result.
  • Only the person who created the project (for a copied project, the person who copied it) can read it, because project executions run in the creator's name (see Who decides what). Other owners and members get 404 Not Found. It cannot be read from a system integration.
  • An execution of a workflow step, and an execution of a cycle started by a webhook or an email, each have one conversation. For periodic sweeps of a cycle, the messages of each round are added to one conversation per placement and step. Because the conversation API does not link messages to executions, identify them by the messages whose sender is "User" (the request to the Agent for that round) around the start time of the execution (startedAt).

Error Responses​

HTTP Status Codes​

HTTP status codes that may be returned by all endpoints.

StatusDescription
400 Bad RequestInvalid request parameters
401 UnauthorizedToken is invalid or missing
403 ForbiddenNo access permission to the resource
404 Not FoundResource does not exist
409 ConflictOperation conflict, such as the resource currently being processed
413 Payload Too LargeRequest body exceeds the size limit
415 Unsupported Media TypeThe request body format (Content-Type) is not supported
429 Too Many RequestsRate limit or concurrent-run limit exceeded. error.type is rate_limit_error, and error.code depends on the endpoint (for example monthly_quota_exceeded for the monthly limit and too_many_active_runs for concurrent project runs). Please wait and retry.
500 Internal Server ErrorInternal server error
502 Bad GatewayCommunication error with upstream services (authentication / chat backends, etc.)
503 Service UnavailableService temporarily unavailable
504 Gateway TimeoutUpstream service response timeout

Error Response Format​

All error responses are returned in the following common structure.

FieldTypeDescription
error.typestringError classification. One of: "invalid_request_error", "authentication_error", "insufficient_scope_error", "forbidden_error", "not_found_error", "conflict_error", "payload_too_large_error", "rate_limit_error", "server_error", "upstream_error"
error.messagestringHuman-readable error message
error.codestringMachine-processable error code (e.g., "missing_parameter", "invalid_parameter", "invalid_token")
error.paramstringThe parameter that caused the error. Included only for validation errors
error.suggested_actionstringRecommended action to take. Included only for some errors
JSON
{
"error": {
"type": "invalid_request_error",
"message": "Invalid parameter: limit",
"code": "invalid_parameter",
"param": "limit",
"suggested_action": "limit must be between 1 and 100"
}
}