Arcade Gateways API
Create and manage MCP gateways scoped to organizations and projects. Gateways expose curated tool catalogs to MCP clients (Cursor, Claude Desktop, Claude Code, VS Code, Microsoft Copilot Studio, GitHub Copilot).
Create and manage MCP gateways scoped to organizations and projects. Gateways expose curated tool catalogs to MCP clients (Cursor, Claude Desktop, Claude Code, VS Code, Microsoft Copilot Studio, GitHub Copilot).
openapi: 3.0.0
info:
description: Create and manage MCP gateways scoped to organizations and projects. Gateways expose tool catalogs to MCP clients.
title: Arcade Gateways API
contact:
name: Arcade
url: https://arcade.dev
email: contact@arcade.dev
version: 0.1.0
paths:
/v1/orgs/{org_id}/projects/{project_id}/gateways:
get:
security:
- Bearer: []
description: Returns a paginated list of gateways for the current project
tags:
- Gateways
summary: List Gateways
operationId: project-gateways-list
parameters:
- description: Organization ID
name: org_id
in: path
required: true
schema:
type: string
- description: Project ID
name: project_id
in: path
required: true
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
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.OffsetPage-schemas_GatewayResponse'
'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'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.Error'
post:
security:
- Bearer: []
description: Creates a new gateway in the current project
tags:
- Gateways
summary: Create a Gateway
operationId: project-gateways-create
parameters:
- description: Organization ID
name: org_id
in: path
required: true
schema:
type: string
- description: Project ID
name: project_id
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.CreateGatewayRequest'
description: Gateway configuration
required: true
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.GatewayResponse'
'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'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.Error'
/v1/orgs/{org_id}/projects/{project_id}/gateways/slug:
post:
security:
- Bearer: []
description: Checks whether a gateway slug is available for use
tags:
- Gateways
summary: Check Gateway Slug Availability
operationId: project-gateways-slug-info
parameters:
- description: Organization ID
name: org_id
in: path
required: true
schema:
type: string
- description: Project ID
name: project_id
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.SlugInfoRequest'
description: Slug info request
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.SlugInfoResponse'
'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'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.Error'
/v1/orgs/{org_id}/projects/{project_id}/gateways/{gateway_id}:
get:
security:
- Bearer: []
description: Returns a single gateway by ID
tags:
- Gateways
summary: Get a Gateway
operationId: project-gateways-get
parameters:
- description: Organization ID
name: org_id
in: path
required: true
schema:
type: string
- description: Project ID
name: project_id
in: path
required: true
schema:
type: string
- description: Gateway ID
name: gateway_id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.GatewayResponse'
'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'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.Error'
put:
security:
- Bearer: []
description: Replaces the full configuration of an existing gateway
tags:
- Gateways
summary: Update a Gateway
operationId: project-gateways-update
parameters:
- description: Organization ID
name: org_id
in: path
required: true
schema:
type: string
- description: Project ID
name: project_id
in: path
required: true
schema:
type: string
- description: Gateway ID
name: gateway_id
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.UpdateGatewayRequest'
description: Gateway configuration
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.GatewayResponse'
'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'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.Error'
delete:
security:
- Bearer: []
description: Deletes a gateway by ID
tags:
- Gateways
summary: Delete a Gateway
operationId: project-gateways-delete
parameters:
- description: Organization ID
name: org_id
in: path
required: true
schema:
type: string
- description: Project ID
name: project_id
in: path
required: true
schema:
type: string
- description: Gateway ID
name: gateway_id
in: path
required: true
schema:
type: string
responses:
'204':
description: No Content
'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'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.Error'
patch:
security:
- Bearer: []
description: Partially updates an existing gateway configuration
tags:
- Gateways
summary: Patch a Gateway
operationId: project-gateways-patch
parameters:
- description: Organization ID
name: org_id
in: path
required: true
schema:
type: string
- description: Project ID
name: project_id
in: path
required: true
schema:
type: string
- description: Gateway ID
name: gateway_id
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.PatchGatewayRequest'
description: Gateway fields to update
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/schemas.GatewayResponse'
'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'
'404':
description: Not Found
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 <token>'
type: apiKey
name: Authorization
in: header
schemas:
identity.BindingType:
type: string
enum:
- static
- tenant
- project
- account
x-enum-varnames:
- StaticBindingType
- TenantBindingType
- ProjectBindingType
- AccountBindingType
schemas.BindingResponse:
type: object
properties:
id:
type: string
type:
$ref: '#/components/schemas/identity.BindingType'
schemas.CreateDiscoveryRequest:
type: object
properties:
allowed_classes:
type: array
maxItems: 10
items:
type: string
enabled:
type: boolean
pinned_asset_keys:
type: array
maxItems: 500
items:
type: string
schemas.CreateGatewayRequest:
type: object
required:
- name
properties:
allowed_passthrough_headers:
type: array
maxItems: 100
uniqueItems: true
items:
type: string
auth_type:
type: string
enum:
- arcade
- arcade_header
- user_source
consent_skip_client_ids:
type: array
maxItems: 64
uniqueItems: true
items:
type: string
description:
type: string
maxLength: 1000
instructions:
type: string
maxLength: 5000
name:
type: string
maxLength: 256
slug:
type: string
maxLength: 256
status:
type: string
tool_filter:
$ref: '#/components/schemas/schemas.CreateToolFilterRequest'
user_source_id:
type: string
schemas.CreateToolFilterRequest:
type: object
properties:
allowed_tools:
description: 'Qualified tool names allowed through this gateway. Each entry must be in the
"Provider.ToolName" form (for example, "Google.SendEmail"). Versioned tool
names are not yet supported.'
type: array
maxItems: 500
uniqueItems: true
items:
type: string
discovery:
$ref: '#/components/schemas/schemas.CreateDiscoveryRequest'
schemas.DiscoveryResponse:
type: object
properties:
allowed_classes:
type: array
items:
type: string
enabled:
type: boolean
pinned_asset_keys:
type: array
items:
type: string
schemas.Error:
type: object
properties:
message:
type: string
name:
type: string
schemas.GatewayResponse:
type: object
properties:
allowed_passthrough_headers:
type: array
items:
type: string
auth_type:
type: string
binding:
$ref: '#/components/schemas/schemas.BindingResponse'
consent_skip_client_ids:
type: array
items:
type: string
created_at:
type: string
description:
type: string
id:
type: string
instructions:
type: string
name:
type: string
slug:
type: string
status:
type: string
tool_filter:
$ref: '#/components/schemas/schemas.ToolFilterResponse'
updated_at:
type: string
user_source_id:
type: string
schemas.OffsetPage-schemas_GatewayResponse:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/schemas.GatewayResponse'
limit:
type: integer
offset:
type: integer
page_count:
type: integer
total_count:
type: integer
schemas.PatchDiscoveryRequest:
type: object
properties:
allowed_classes:
type: array
maxItems: 10
items:
type: string
enabled:
type: boolean
pinned_asset_keys:
type: array
maxItems: 500
items:
type: string
schemas.PatchGatewayRequest:
type: object
properties:
allowed_passthrough_headers:
type: array
maxItems: 100
uniqueItems: true
items:
type: string
auth_type:
type: string
enum:
- arcade
- arcade_header
- user_source
consent_skip_client_ids:
type: array
maxItems: 64
uniqueItems: true
items:
type: string
description:
type: string
maxLength: 1000
instructions:
type: string
maxLength: 5000
name:
type: string
maxLength: 256
minLength: 1
slug:
type: string
maxLength: 256
status:
type: string
tool_filter:
$ref: '#/components/schemas/schemas.PatchToolFilterRequest'
user_source_id:
type: string
schemas.PatchToolFilterRequest:
type: object
properties:
allowed_tools:
type: array
maxItems: 500
uniqueItems: true
items:
type: string
discovery:
$ref: '#/components/schemas/schemas.PatchDiscoveryRequest'
schemas.SlugInfoRequest:
type: object
required:
- slug
properties:
slug:
type: string
maxLength: 256
schemas.SlugInfoResponse:
type: object
properties:
available:
type: boolean
schemas.ToolFilterResponse:
type: object
properties:
allowed_tools:
type: array
items:
type: string
discovery:
$ref: '#/components/schemas/schemas.DiscoveryResponse'
schemas.UpdateDiscoveryRequest:
type: object
properties:
allowed_classes:
type: array
maxItems: 10
items:
type: string
enabled:
type: boolean
pinned_asset_keys:
type: array
maxItems: 500
items:
type: string
schemas.UpdateGatewayRequest:
type: object
required:
- id
- name
properties:
allowed_passthrough_headers:
type: array
maxItems: 100
uniqueItems: true
items:
type: string
auth_type:
type: string
enum:
- arcade
- arcade_header
- user_source
consent_skip_client_ids:
type: array
maxItems: 64
uniqueItems: true
items:
type: string
description:
type: string
maxLength: 1000
id:
type: string
instructions:
type: string
maxLength: 5000
name:
type: string
maxLength: 256
slug:
type: string
maxLength: 256
status:
type: string
tool_filter:
$ref: '#/components/schemas/schemas.UpdateToolFilterRequest'
user_source_id:
type: string
schemas.UpdateToolFilterRequest:
type: object
properties:
allowed_tools:
description: 'Qualified tool names allowed through this gateway. Each entry must be in the
"Provider.ToolName" form (for example, "Google.SendEmail"). Versioned tool
names are not yet supported.'
type: array
maxItems: 500
uniqueItems: true
items:
type: string
discovery:
$ref: '#/components/schemas/schemas.UpdateDiscoveryRequest'