openapi: 3.0.0 info: description: Define, list, authorize, execute, and schedule agent tools. Includes tool requirements inspection and formatted tool descriptors for LLM consumption. title: Arcade Tools API contact: name: Arcade url: https://arcade.dev email: contact@arcade.dev version: 0.1.0 paths: /v1/formatted_tools: get: security: - Bearer: [] - Bearer: [] description: Returns a page of tools from the engine configuration, optionally filtered by toolkit, formatted for a specific provider tags: - Tools summary: List Formatted Static Tools operationId: tools-list-formatted parameters: - description: Toolkit name name: toolkit in: query schema: type: string - description: 'Number of items to return (default: 25, max: 100)' name: limit in: query schema: type: integer - description: 'Offset from the start of the list (default: 0)' name: offset in: query schema: type: integer - description: Provider format name: format in: query schema: type: string - description: User ID name: user_id in: query schema: type: string - description: Include all versions of each tool name: include_all_versions in: query schema: type: boolean - description: 'JSON metadata filter. Array fields (service_domains, operations): shorthand array or object with any_of/all_of/none_of operators (case-insensitive). Boolean fields: read_only, destructive, idempotent, open_world. Extras: case-sensitive key-value subset match.' name: filter in: query schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/schemas.OffsetPage-schemas_ArbitraryObject' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '415': description: Unsupported Media Type content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/schemas.Error' /v1/formatted_tools/{name}: get: security: - Bearer: [] description: Returns the formatted tool specification for a specific tool, given a provider tags: - Tools summary: Get Formatted Tool Specification operationId: tool-spec-formatted parameters: - description: Tool name name: name in: path required: true schema: type: string - description: Provider format name: format in: query schema: type: string - description: User ID name: user_id in: query schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/schemas.ArbitraryObject' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '415': description: Unsupported Media Type content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/schemas.Error' /v1/scheduled_tools: get: security: - Bearer: [] description: Returns a page of scheduled tool executions tags: - Tools summary: List Scheduled Tool Executions operationId: tool-scheduled-list parameters: - description: 'Number of items to return (default: 25, max: 100)' name: limit in: query schema: type: integer - description: 'Offset from the start of the list (default: 0)' name: offset in: query schema: type: integer responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/schemas.OffsetPage-schemas_ToolExecutionListResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '415': description: Unsupported Media Type content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/schemas.Error' /v1/scheduled_tools/{id}: get: security: - Bearer: [] description: Returns the details for a specific scheduled tool execution tags: - Tools summary: Get Scheduled Tool Execution Details operationId: tool-scheduled-get parameters: - description: Scheduled execution ID name: id in: path required: true schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/schemas.ToolExecutionDetailResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '415': description: Unsupported Media Type content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/schemas.Error' /v1/tools: get: security: - Bearer: [] - Bearer: [] description: Returns a page of tools from the engine configuration, optionally filtered by toolkit and/or metadata tags: - Tools summary: List Static Tools operationId: tools-list-static parameters: - description: Toolkit name name: toolkit in: query schema: type: string - description: 'Number of items to return (default: 25, max: 100)' name: limit in: query schema: type: integer - description: 'Offset from the start of the list (default: 0)' name: offset in: query schema: type: integer - description: Comma separated tool formats that will be included in the response. name: include_format in: query style: form explode: false schema: type: array items: enum: - arcade - openai - anthropic type: string - description: User ID name: user_id in: query schema: type: string - description: Include all versions of each tool name: include_all_versions in: query schema: type: boolean - description: 'JSON metadata filter. Array fields (service_domains, operations): shorthand array or object with any_of/all_of/none_of operators (case-insensitive). Boolean fields: read_only, destructive, idempotent, open_world. Extras: case-sensitive key-value subset match.' name: filter in: query schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/schemas.OffsetPage-schemas_ToolResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '415': description: Unsupported Media Type content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/schemas.Error' /v1/tools/authorize: post: security: - Bearer: [] - Bearer: [] description: Authorizes a user for a specific tool by name tags: - Tools summary: Authorize Tool operationId: tool-authorize requestBody: content: application/json: schema: $ref: '#/components/schemas/schemas.AuthorizeToolRequest' description: Tool authorization request required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/auth.AuthorizationResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '415': description: Unsupported Media Type content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/schemas.Error' /v1/tools/execute: post: security: - Bearer: [] - Bearer: [] description: Executes a tool by name and arguments tags: - Tools summary: Execute Tool operationId: tool-execute requestBody: content: application/json: schema: $ref: '#/components/schemas/schemas.ExecuteToolRequest' description: Tool execution request required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/schemas.ExecuteToolResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '415': description: Unsupported Media Type content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/schemas.Error' /v1/tools/requirements: post: security: - Bearer: [] description: Checks authorization and secret requirements for multiple tools. Optionally starts OAuth flows for unmet auth requirements. tags: - Tools summary: Check Tool Requirements operationId: tool-requirements requestBody: content: application/json: schema: $ref: '#/components/schemas/schemas.ToolRequirementsRequest' description: Tool requirements request required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/schemas.ToolRequirementsResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '415': description: Unsupported Media Type content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/schemas.Error' /v1/tools/{name}: get: security: - Bearer: [] description: Returns the arcade tool specification for a specific tool tags: - Tools summary: Get Arcade Tool Specification operationId: tool-spec parameters: - description: Tool name name: name in: path required: true schema: type: string - description: Comma separated tool formats that will be included in the response. name: include_format in: query style: form explode: false schema: type: array items: enum: - arcade - openai - anthropic type: string - description: User ID name: user_id in: query schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/schemas.ToolResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '415': description: Unsupported Media Type content: application/json: schema: $ref: '#/components/schemas/schemas.Error' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/schemas.Error' externalDocs: description: Documentation url: https://docs.arcade.dev servers: - url: https://api.arcade.dev components: securitySchemes: Bearer: description: 'Enter your API key or API token in the format: Bearer ' type: apiKey name: Authorization in: header schemas: auth.AuthorizationContext: type: object properties: token: type: string user_info: type: object additionalProperties: true auth.AuthorizationResponse: type: object properties: context: $ref: '#/components/schemas/auth.AuthorizationContext' id: type: string provider_id: type: string scopes: type: array items: type: string status: default: pending allOf: - $ref: '#/components/schemas/auth.AuthorizationStatus' url: type: string user_id: type: string auth.AuthorizationStatus: type: string enum: - not_started - pending - completed - failed x-enum-varnames: - StatusNotStarted - StatusPending - StatusCompleted - StatusFailed auth.Status: type: string enum: - active - inactive x-enum-varnames: - StatusActive - StatusInactive schemas.ArbitraryObject: type: object additionalProperties: true schemas.AuthorizationRequirement: type: object properties: id: type: string oauth2: $ref: '#/components/schemas/schemas.OAuth2AuthorizationRequirement' provider_id: type: string provider_type: type: string status: default: disabled allOf: - $ref: '#/components/schemas/auth.Status' status_reason: type: string token_status: $ref: '#/components/schemas/auth.AuthorizationStatus' schemas.AuthorizationRequirementResult: type: object properties: authorization_id: type: string met: type: boolean provider_id: type: string provider_type: type: string scopes: type: array items: type: string status: $ref: '#/components/schemas/auth.Status' token_status: $ref: '#/components/schemas/auth.AuthorizationStatus' tool_names: type: array items: type: string url: type: string schemas.AuthorizationRequirementsInfo: type: object properties: items: type: object additionalProperties: $ref: '#/components/schemas/schemas.AuthorizationRequirementResult' met: type: boolean schemas.AuthorizeToolRequest: type: object required: - tool_name properties: next_uri: description: 'Optional: if provided, the user will be redirected to this URI after authorization' type: string tool_name: type: string tool_version: description: 'Optional: if not provided, any version is used' type: string user_id: description: Required only when calling with an API key type: string schemas.Error: type: object properties: message: type: string name: type: string schemas.ExecuteToolRequest: type: object required: - tool_name properties: include_error_stacktrace: description: Whether to include the error stacktrace in the response. If not provided, the error stacktrace is not included. type: boolean input: description: JSON input to the tool, if any allOf: - $ref: '#/components/schemas/tool.RawInputs' run_at: description: 'The time at which the tool should be run (optional). If not provided, the tool is run immediately. Format ISO 8601: YYYY-MM-DDTHH:MM:SS' type: string tool_name: type: string tool_version: description: The tool version to use (optional). If not provided, any version is used type: string user_id: type: string schemas.ExecuteToolResponse: type: object properties: duration: type: number execution_id: type: string execution_type: type: string finished_at: type: string id: type: string output: $ref: '#/components/schemas/tool.ResponseOutput' run_at: type: string status: type: string success: description: 'Whether the request was successful. For immediately-executed requests, this will be true if the tool call succeeded. For scheduled requests, this will be true if the request was scheduled successfully.' type: boolean schemas.Input: type: object properties: parameters: type: array minItems: 0 items: $ref: '#/components/schemas/schemas.Parameter' schemas.OAuth2AuthorizationRequirement: type: object properties: scopes: type: array items: type: string schemas.OffsetPage-schemas_ArbitraryObject: type: object properties: items: type: array items: $ref: '#/components/schemas/schemas.ArbitraryObject' limit: type: integer offset: type: integer page_count: type: integer total_count: type: integer schemas.OffsetPage-schemas_ToolExecutionListResponse: type: object properties: items: type: array items: $ref: '#/components/schemas/schemas.ToolExecutionListResponse' limit: type: integer offset: type: integer page_count: type: integer total_count: type: integer schemas.OffsetPage-schemas_ToolResponse: type: object properties: items: type: array items: $ref: '#/components/schemas/schemas.ToolResponse' limit: type: integer offset: type: integer page_count: type: integer total_count: type: integer schemas.Output: type: object properties: available_modes: type: array items: type: string description: type: string value_schema: $ref: '#/components/schemas/schemas.ValueSchema' schemas.Parameter: type: object required: - name - value_schema properties: description: type: string inferrable: type: boolean default: true name: type: string required: type: boolean value_schema: $ref: '#/components/schemas/schemas.ValueSchema' schemas.Requirements: type: object properties: authorization: $ref: '#/components/schemas/schemas.AuthorizationRequirement' met: type: boolean default: false secrets: type: array items: $ref: '#/components/schemas/schemas.SecretRequirement' schemas.SecretRequirement: type: object required: - key properties: key: type: string met: type: boolean default: false status_reason: type: string schemas.SecretRequirementResult: type: object properties: met: type: boolean status_reason: type: string tool_names: type: array items: type: string schemas.SecretRequirementsInfo: type: object properties: items: type: object additionalProperties: $ref: '#/components/schemas/schemas.SecretRequirementResult' met: type: boolean schemas.ToolExecutionAttemptResponse: type: object properties: finished_at: type: string id: type: string output: $ref: '#/components/schemas/tool.ResponseOutput' started_at: type: string success: type: boolean system_error_message: type: string schemas.ToolExecutionDetailResponse: type: object properties: attempts: type: array items: $ref: '#/components/schemas/schemas.ToolExecutionAttemptResponse' created_at: type: string execution_status: type: string execution_type: type: string finished_at: type: string id: type: string input: $ref: '#/components/schemas/tool.RawInputs' run_at: type: string started_at: type: string tool_name: type: string toolkit_name: type: string toolkit_version: type: string updated_at: type: string user_id: type: string schemas.ToolExecutionListResponse: type: object properties: created_at: type: string execution_status: type: string execution_type: type: string finished_at: type: string id: type: string run_at: type: string started_at: type: string tool_name: type: string toolkit_name: type: string toolkit_version: type: string updated_at: type: string user_id: type: string schemas.ToolRef: type: object required: - tool_name properties: tool_name: type: string tool_version: type: string schemas.ToolRequirementsRequest: type: object properties: authorize: type: boolean tool_names: type: array items: type: string tools: type: array items: $ref: '#/components/schemas/schemas.ToolRef' user_id: type: string schemas.ToolRequirementsResponse: type: object properties: authorization: $ref: '#/components/schemas/schemas.AuthorizationRequirementsInfo' met: type: boolean secrets: $ref: '#/components/schemas/schemas.SecretRequirementsInfo' schemas.ToolResponse: type: object required: - fully_qualified_name - input - name - qualified_name - toolkit properties: description: type: string formatted_schema: type: object additionalProperties: {} fully_qualified_name: type: string input: $ref: '#/components/schemas/schemas.Input' metadata: $ref: '#/components/schemas/tool.ToolMetadata' name: type: string output: $ref: '#/components/schemas/schemas.Output' qualified_name: type: string requirements: $ref: '#/components/schemas/schemas.Requirements' toolkit: $ref: '#/components/schemas/schemas.ToolkitResponse' schemas.ToolkitResponse: type: object required: - name properties: description: type: string name: type: string version: type: string schemas.ValueSchema: type: object required: - val_type properties: enum: type: array items: type: string inner_val_type: type: string val_type: type: string tool.Behavior: type: object properties: destructive: type: boolean idempotent: type: boolean open_world: type: boolean operations: type: array items: type: string read_only: type: boolean tool.Classification: type: object properties: service_domains: type: array items: type: string tool.Error: type: object required: - can_retry - kind - message properties: additional_prompt_content: type: string can_retry: type: boolean developer_message: type: string extra: type: object additionalProperties: {} kind: $ref: '#/components/schemas/tool.ErrorKind' message: type: string retry_after_ms: type: integer stacktrace: type: string status_code: type: integer tool.ErrorKind: type: string enum: - TOOLKIT_LOAD_FAILED - TOOL_DEFINITION_BAD_DEFINITION - TOOL_DEFINITION_BAD_INPUT_SCHEMA - TOOL_DEFINITION_BAD_OUTPUT_SCHEMA - TOOL_REQUIREMENTS_NOT_MET - TOOL_RUNTIME_BAD_INPUT_VALUE - TOOL_RUNTIME_BAD_OUTPUT_VALUE - TOOL_RUNTIME_RETRY - TOOL_RUNTIME_CONTEXT_REQUIRED - TOOL_RUNTIME_FATAL - CONTEXT_CHECK_FAILED - CONTEXT_DENIED - UPSTREAM_RUNTIME_BAD_REQUEST - UPSTREAM_RUNTIME_AUTH_ERROR - UPSTREAM_RUNTIME_NOT_FOUND - UPSTREAM_RUNTIME_VALIDATION_ERROR - UPSTREAM_RUNTIME_RATE_LIMIT - UPSTREAM_RUNTIME_SERVER_ERROR - UPSTREAM_RUNTIME_UNMAPPED - NETWORK_TRANSPORT_RUNTIME_TIMEOUT - NETWORK_TRANSPORT_RUNTIME_UNREACHABLE - NETWORK_TRANSPORT_RUNTIME_UNMAPPED - UNKNOWN x-enum-varnames: - ErrorKindToolkitLoadFailed - ErrorKindToolDefinitionBadDefinition - ErrorKindToolDefinitionBadInputSchema - ErrorKindToolDefinitionBadOutputSchema - ErrorKindToolRequirementsNotMet - ErrorKindToolRuntimeBadInputValue - ErrorKindToolRuntimeBadOutputValue - ErrorKindToolRuntimeRetry - ErrorKindToolRuntimeContextRequired - ErrorKindToolRuntimeFatal - ErrorKindContextCheckFailed - ErrorKindContextDenied - ErrorKindUpstreamRuntimeBadRequest - ErrorKindUpstreamRuntimeAuthError - ErrorKindUpstreamRuntimeNotFound - ErrorKindUpstreamRuntimeValidationError - ErrorKindUpstreamRuntimeRateLimit - ErrorKindUpstreamRuntimeServerError - ErrorKindUpstreamRuntimeUnmapped - ErrorKindNetworkTransportRuntimeTimeout - ErrorKindNetworkTransportRuntimeUnreachable - ErrorKindNetworkTransportRuntimeUnmapped - ErrorKindUnknown tool.Log: type: object required: - level - message properties: level: type: string message: type: string subtype: type: string tool.RawInputs: type: object additionalProperties: true tool.ResponseOutput: type: object properties: authorization: $ref: '#/components/schemas/auth.AuthorizationResponse' error: $ref: '#/components/schemas/tool.Error' logs: type: array items: $ref: '#/components/schemas/tool.Log' value: {} tool.ToolMetadata: type: object properties: behavior: $ref: '#/components/schemas/tool.Behavior' classification: $ref: '#/components/schemas/tool.Classification' extras: type: object additionalProperties: {}