Amigo Integrations API
The Integrations API from Amigo — 7 operation(s) for integrations.
The Integrations API from Amigo — 7 operation(s) for integrations.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/amigo-integrations-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Amigo Account Integrations API
version: 0.1.0
servers:
- url: https://api.amigo.ai
- url: https://internal-api.amigo.ai
- url: https://api-eu-central-1.amigo.ai
- url: https://api-ap-southeast-2.amigo.ai
- url: https://api-ca-central-1.amigo.ai
security:
- Bearer-Authorization: []
Bearer-Authorization-Organization: []
Basic: []
tags:
- name: Integrations
paths:
/v1/{workspace_id}/integrations:
post:
tags:
- Integrations
summary: Create a REST integration
description: Create a new REST integration in a workspace. Endpoints are added separately via `POST /integrations/{integration_id}/endpoints`. Requires `Integration.create` permission.
operationId: create-integration
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/src__routes__integrations__create_integration__Request'
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/RestIntegrationResponse'
'404':
description: Workspace not found.
'409':
description: Integration name already taken in this workspace.
'403':
description: Insufficient permissions.
'401':
description: Missing or invalid API key.
'422':
description: Invalid request body.
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
get:
tags:
- Integrations
summary: List integrations
description: 'List every integration for a workspace. Optionally filter by `enabled` or `search` (name/display_name/id ilike). Sort via repeated `sort_by` query params; each entry is `+field` or `-field` (allowed fields: name, created_at, updated_at). Default: `-created_at`. Cursor opaque — round-trip `continuation_token` unchanged with the same `sort_by`. Requires `Integration.view` permission.'
operationId: list-integrations
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: enabled
in: query
required: false
schema:
anyOf:
- type: boolean
- type: 'null'
description: Filter to integrations with this enabled flag. None matches both.
title: Enabled
description: Filter to integrations with this enabled flag. None matches both.
- name: search
in: query
required: false
schema:
anyOf:
- $ref: '#/components/schemas/SearchString'
- type: 'null'
description: Substring match against name, display_name, or id (case-insensitive).
title: Search
description: Substring match against name, display_name, or id (case-insensitive).
- name: sort_by
in: query
required: false
schema:
type: array
items:
type: string
description: 'Sort axes. Repeated query param stacks left-to-right. Each entry is `+field` or `-field`
(direction prefix REQUIRED). Allowed fields: ``name``, ``created_at``, ``updated_at``.
Default: ``-created_at``. ``id`` is always appended as the final tiebreaker.'
default: []
title: Sort By
description: 'Sort axes. Repeated query param stacks left-to-right. Each entry is `+field` or `-field`
(direction prefix REQUIRED). Allowed fields: ``name``, ``created_at``, ``updated_at``.
Default: ``-created_at``. ``id`` is always appended as the final tiebreaker.'
- name: limit
in: query
required: false
schema:
type: integer
maximum: 200
exclusiveMinimum: 0
description: The maximum number of integrations to return.
default: 50
title: Limit
description: The maximum number of integrations to return.
- name: continuation_token
in: query
required: false
schema:
description: Opaque token from a prior response. Pass back unchanged with the same `sort_by` to advance.
title: Continuation Token
description: Opaque token from a prior response. Pass back unchanged with the same `sort_by` to advance.
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/src__routes__integrations__list_integrations__Response'
'403':
description: Insufficient permissions.
'401':
description: Missing or invalid API key.
'422':
description: Query parameter failed validation or continuation_token is unparseable.
/v1/{workspace_id}/integrations/approvals/{conversation_id}/approve:
post:
tags:
- Integrations
summary: Approve a pending integration-write approval
description: Approve a pending human-in-the-loop integration-write approval for a conversation. Publishes `integration.approval_granted` to the workspace event channel; the subscribed text session fires the gated write. Requires `ReviewQueue.review` permission.
operationId: approve-integration-write
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: conversation_id
in: path
required: true
schema:
type: string
format: uuid
title: Conversation Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationApprovalResponse'
'404':
description: Conversation not found in this workspace.
'403':
description: Insufficient permissions.
'401':
description: Missing or invalid API key.
'429':
description: Rate limited.
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/integrations/approvals/{conversation_id}/reject:
post:
tags:
- Integrations
summary: Reject a pending integration-write approval
description: Reject a pending human-in-the-loop integration-write approval for a conversation. Publishes `integration.approval_rejected` to the workspace event channel; the subscribed text session declines the gated write. Requires `ReviewQueue.review` permission.
operationId: reject-integration-write
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: conversation_id
in: path
required: true
schema:
type: string
format: uuid
title: Conversation Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationRejectRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationApprovalResponse'
'404':
description: Conversation not found in this workspace.
'403':
description: Insufficient permissions.
'401':
description: Missing or invalid API key.
'429':
description: Rate limited.
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/integrations/{integration_id}:
get:
tags:
- Integrations
summary: Get an integration
description: Retrieve an integration by ID. Requires `Integration.view` permission.
operationId: get-integration
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: integration_id
in: path
required: true
schema:
type: string
format: uuid
title: Integration Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/RestIntegrationResponse'
'404':
description: Integration not found.
'403':
description: Insufficient permissions.
'401':
description: Missing or invalid API key.
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
patch:
tags:
- Integrations
summary: Update a REST integration
description: 'Patch a REST integration. NOT NULL fields reject `null` at validation time; pass `auth: null` to clear the auth config. `auth` and `secret_value` are independent — update either alone to swap auth shape (reusing the existing secret) or rotate the secret (keeping the existing auth shape). Requires `Integration.update` permission.'
operationId: update-integration
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: integration_id
in: path
required: true
schema:
type: string
format: uuid
title: Integration Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/src__routes__integrations__update_integration__Request'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/RestIntegrationResponse'
'404':
description: Integration not found.
'409':
description: Managed integration mutation blocked.
'403':
description: Insufficient permissions.
'401':
description: Missing or invalid API key.
'422':
description: Invalid request body, NOT NULL field set to null, or no fields to update.
delete:
tags:
- Integrations
summary: Delete a REST integration
description: Delete a REST integration. Requires `Integration.delete` permission.
operationId: delete-integration
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: integration_id
in: path
required: true
schema:
type: string
format: uuid
title: Integration Id
responses:
'204':
description: Successful Response
'404':
description: Integration not found.
'409':
description: Integration is managed or referenced by one or more skills.
'403':
description: Insufficient permissions.
'401':
description: Missing or invalid API key.
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/integrations/{integration_id}/endpoints:
post:
tags:
- Integrations
summary: Add an endpoint
description: Add a new endpoint to a REST integration. Requires `Integration.update` permission.
operationId: create-integration-endpoint
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: integration_id
in: path
required: true
schema:
type: string
format: uuid
title: Integration Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/src__routes__integrations__create_endpoint__Request'
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/EndpointResponse'
'404':
description: Integration not found.
'409':
description: Integration is managed or endpoint name already exists.
'403':
description: Insufficient permissions.
'401':
description: Missing or invalid API key.
'422':
description: Invalid request body.
get:
tags:
- Integrations
summary: List endpoints
description: 'List endpoints on a REST integration. Optionally search by name/description. Sort via repeated `sort_by` query params; each entry is `+field` or `-field` (allowed fields: name, created_at, updated_at). Default: `-created_at`. Cursor opaque — round-trip `continuation_token` unchanged with the same `sort_by`. Requires `Integration.view` permission.'
operationId: list-integration-endpoints
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: integration_id
in: path
required: true
schema:
type: string
format: uuid
title: Integration Id
- name: search
in: query
required: false
schema:
anyOf:
- $ref: '#/components/schemas/SearchString'
- type: 'null'
description: Substring match against name or description (case-insensitive).
title: Search
description: Substring match against name or description (case-insensitive).
- name: sort_by
in: query
required: false
schema:
type: array
items:
type: string
description: 'Sort axes. Repeated query param stacks left-to-right. Each entry is `+field` or `-field`
(direction prefix REQUIRED). Allowed fields: ``name``, ``created_at``, ``updated_at``.
Default: ``-created_at``. ``id`` is always appended as the final tiebreaker.'
default: []
title: Sort By
description: 'Sort axes. Repeated query param stacks left-to-right. Each entry is `+field` or `-field`
(direction prefix REQUIRED). Allowed fields: ``name``, ``created_at``, ``updated_at``.
Default: ``-created_at``. ``id`` is always appended as the final tiebreaker.'
- name: limit
in: query
required: false
schema:
type: integer
maximum: 200
exclusiveMinimum: 0
description: The maximum number of endpoints to return.
default: 50
title: Limit
description: The maximum number of endpoints to return.
- name: continuation_token
in: query
required: false
schema:
description: Opaque token from a prior response. Pass back unchanged with the same `sort_by` to advance.
title: Continuation Token
description: Opaque token from a prior response. Pass back unchanged with the same `sort_by` to advance.
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/src__routes__integrations__list_endpoints__Response'
'403':
description: Insufficient permissions.
'401':
description: Missing or invalid API key.
'422':
description: Query parameter failed validation or continuation_token is unparseable.
/v1/{workspace_id}/integrations/{integration_id}/endpoints/{endpoint_id}:
get:
tags:
- Integrations
summary: Get an endpoint
description: Get a single endpoint on a REST integration. Requires `Integration.view` permission.
operationId: get-integration-endpoint
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: integration_id
in: path
required: true
schema:
type: string
format: uuid
title: Integration Id
- name: endpoint_id
in: path
required: true
schema:
type: string
format: uuid
title: Endpoint Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/EndpointResponse'
'404':
description: Endpoint not found.
'403':
description: Insufficient permissions.
'401':
description: Missing or invalid API key.
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
patch:
tags:
- Integrations
summary: Update an endpoint
description: 'Patch an endpoint on a REST integration. The endpoint `name` is immutable. Pass `response_template: null` to clear the Jinja template (the only DB-nullable column). Every other field rejects explicit null at validation time. Requires `Integration.update` permission.'
operationId: update-integration-endpoint
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: integration_id
in: path
required: true
schema:
type: string
format: uuid
title: Integration Id
- name: endpoint_id
in: path
required: true
schema:
type: string
format: uuid
title: Endpoint Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/src__routes__integrations__update_endpoint__Request'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/EndpointResponse'
'404':
description: Endpoint not found.
'409':
description: Managed integration endpoint mutation blocked.
'403':
description: Insufficient permissions.
'401':
description: Missing or invalid API key.
'422':
description: Invalid request body, NOT NULL field set to null, or no fields to update.
delete:
tags:
- Integrations
summary: Delete an endpoint
description: Delete an endpoint from a REST integration. Requires `Integration.update` permission.
operationId: delete-integration-endpoint
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: integration_id
in: path
required: true
schema:
type: string
format: uuid
title: Integration Id
- name: endpoint_id
in: path
required: true
schema:
type: string
format: uuid
title: Endpoint Id
responses:
'204':
description: Successful Response
'404':
description: Endpoint not found.
'409':
description: Managed integration endpoint mutation blocked.
'403':
description: Insufficient permissions.
'401':
description: Missing or invalid API key.
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/integrations/{integration_id}/endpoints/{endpoint_id}/test:
post:
tags:
- Integrations
summary: Test an integration endpoint
description: Execute an integration endpoint with test parameters and return the full response pipeline breakdown. Requires `Integration.view` permission.
operationId: test-integration-endpoint
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: integration_id
in: path
required: true
schema:
type: string
format: uuid
title: Integration Id
- name: endpoint_id
in: path
required: true
schema:
type: string
format: uuid
title: Endpoint Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/src__routes__integrations__test_endpoint__Request'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/src__routes__integrations__test_endpoint__Response'
'404':
description: Integration or endpoint not found.
'403':
description: Insufficient permissions.
'401':
description: Missing or invalid API key.
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
components:
schemas:
IntegrationRejectRequest:
properties:
reason:
anyOf:
- type: string
maxLength: 2000
- type: 'null'
title: Reason
type: object
title: IntegrationRejectRequest
description: Reject body — optional free-text reason surfaced to the agent.
src__routes__integrations__test_endpoint__Response:
properties:
status_code:
anyOf:
- type: integer
- type: 'null'
title: Status Code
description: HTTP status code from the upstream call.
duration_ms:
type: number
title: Duration Ms
description: Request duration in milliseconds.
default: 0
retries:
type: integer
title: Retries
description: Number of retry attempts.
default: 0
raw_response:
title: Raw Response
description: Raw response body from the upstream call.
rendered:
anyOf:
- type: string
- type: 'null'
title: Rendered
description: Response after Jinja `response_template` rendering, pre-truncation.
final_result:
anyOf:
- type: string
- type: 'null'
title: Final Result
description: Final processed result (rendered + truncated to max_response_length).
error:
anyOf:
- type: string
- type: 'null'
title: Error
description: Error message if the request failed.
type: object
title: Response
description: Full breadcrumb returned by the test handler.
src__routes__integrations__update_endpoint__Request:
properties:
description:
type: string
maxLength: 2048
minLength: 1
title: Description
method:
type: string
enum:
- GET
- POST
- PUT
- PATCH
- DELETE
title: Method
path:
type: string
maxLength: 2048
minLength: 1
pattern: ^[^/]
title: Path
description: URL path appended to the integration's base_url. Must NOT start with `/`.
input_schema:
additionalProperties: true
type: object
title: Input Schema
headers:
additionalProperties:
type: string
type: object
title: Headers
static_body_fields:
additionalProperties:
type: string
type: object
title: Static Body Fields
body_format:
type: string
enum:
- json
- form
title: Body Format
response_template:
anyOf:
- type: string
maxLength: 16384
- type: 'null'
title: Response Template
description: Jinja template; pass `null` to clear (the only DB-nullable column on this row).
max_response_length:
type: integer
maximum: 1000000.0
minimum: 0.0
title: Max Response Length
timeout_seconds:
type: number
maximum: 600.0
exclusiveMinimum: 0.0
title: Timeout Seconds
max_retries:
type: integer
maximum: 10.0
minimum: 0.0
title: Max Retries
retry_on_status:
items:
type: integer
type: array
maxItems: 20
uniqueItems: true
title: Retry On Status
type: object
title: Request
description: Patch an existing endpoint (V186 flat shape). ``name`` is immutable.
OAuth2JwtBearerAuthDict:
properties:
type:
type: string
const: oauth2_jwt_bearer
title: Type
token_url:
type: string
title: Token Url
assertion_issuer:
type: string
title: Assertion Issuer
assertion_audience:
type: string
title: Assertion Audience
assertion_subject:
type: string
title: Assertion Subject
assertion_lifetime_seconds:
type: integer
title: Assertion Lifetime Seconds
include_iat:
type: boolean
title: Include Iat
include_jti:
type: boolean
title: Include Jti
assertion_algorithm:
type: string
enum:
- RS256
- RS384
- RS512
- PS256
- PS384
- PS512
- ES256
- ES384
- ES512
title: Assertion Algorithm
assertion_usage:
type: string
enum:
- authorization_grant
- client_authentication
title: Assertion Usage
scopes:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Scopes
extra_claims:
additionalProperties: true
type: object
title: Extra Claims
type: object
required:
- type
- token_url
- assertion_issuer
- assertion_audience
- assertion_subject
- assertion_lifetime_seconds
- include_iat
- include_jti
- assertion_algorithm
- assertion_usage
- scopes
- extra_claims
title: OAuth2JwtBearerAuthDict
description: 'OAuth 2.0 JWT Bearer Token — RFC 7523.
``assertion_usage`` selects the flow: § 2.1 (JWT as authorization grant) or
§ 2.2 (JWT as client authentication / private_key_jwt).'
src__routes__integrations__create_integration__Request:
properties:
name:
type: string
maxLength: 128
minLength: 2
pattern: ^[a-z0-9][a-z0-9_-]*[a-z0-9]$
title: Name
description: Slug-like identifier, lowercase alphanumeric + hyphens/underscores. Immutable post-create.
display_name:
$ref: '#/components/schemas/NameString'
description: Human-readable name.
base_url:
type: string
maxLength: 2083
minLength: 1
format: uri
title: Base Url
description: Base URL for the upstream REST API.
auth:
anyOf:
- oneOf:
- $ref: '#/components/schemas/StaticHeaderAuthRequest'
- $ref: '#/components/schemas/OAuth2ClientCredentialsAuthRequest'
- $ref: '#/components/schemas/OAuth2JwtBearerAuthRequest'
- $ref: '#/components/schemas/CustomTokenExchangeAuthRequest'
discriminator:
propertyName: type
mapping:
custom_token_exchange: '#/components/schemas/CustomTokenExchangeAuthRequest'
oauth2_client_credentials: '#/components/schemas/OAuth2ClientCredentialsAuthRequest'
oauth2_jwt_bearer: '#/components/schemas/OAuth2JwtBearerAuthRequest'
static_header: '#/components/schemas/StaticHeaderAuthRequest'
- type: 'null'
title: Auth
description: Auth configuration. When set, ``secret_value`` is required.
secret_value:
anyOf:
- type: string
maxLength: 8192
minLength: 1
- type: 'null'
title: Secret Value
description: 'Inline secret literal — auto-provisioned to the per-integration SSM path.
Required when ``auth`` is set. Bounded to fit a PEM RSA-4096 key + cert chain.'
enabled:
type: boolean
title: Enabled
description: Whether the integration is active on create.
default: true
managed:
type: boolean
title: Managed
description: Whether this is a system-managed integration protected from workspace CRUD.
default: false
approval_policy:
type: string
enum:
- none
- writes
- all
title: Approval Policy
description: 'Human-in-the-loop approval gate. ``none`` (default) = no approval
required; ``writes`` = approval required for write-classified endpoints;
``all`` = approval required for every endpoint.'
default: none
type: object
required:
- name
- display_name
- base_url
title: Request
description: Create body — REST only.
NameString:
type: string
maxLength: 256
minLength: 1
EndpointResponse:
properties:
id:
type: string
format: uuid
title: Id
description: Endpoint ID — stable, used in subsequent GET/PATCH/DELETE/test URLs.
name:
type: string
title: Name
description: Slug-like identifier. Unique per integration; immutable post-create.
description:
type: string
title: Description
description: LLM-facing description.
method:
type: string
enum:
- GET
- POST
- PUT
- PATCH
- DELETE
title: Method
description: HTTP method.
path:
type: string
title: Path
description: URL path appended to the integration's base_url.
input_schema:
additionalProperties: true
type: object
title: Input Schema
description: JSON Schema for the tool's input arguments.
headers:
additionalProperties:
type: string
type: object
title: Headers
description: Static request headers.
static_body_fields:
additionalProperties:
type: string
type: object
title: Static Body Fields
description: 'Static body fields mer
# --- truncated at 32 KB (61 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/amigo/refs/heads/main/openapi/amigo-integrations-api-openapi.yml