Integrations (custom HTTP)

The 39 MCP tools in Integrations (custom HTTP), granted with the integrations scope under AI agents.

To let an assistant use these tools, grant AI agents on the consent screen, or just Integrations (custom HTTP) under its Fine-tune. The scope is integrations. Read tools work with Read only or Read & write access; write tools only with Read & write.

Your assistant doesn't see these tools straight away. It finds them with search_tools or describe_tools, and runs one with use_tool, passing its name and arguments. Most assistants do this for you: just ask for what you want.

What your assistant is told about this group

Connections to other systems. list_integration_providers says what can be connected and how. Provider connections (Google Calendar and Sheets, Google Ads, Meta ads, webhooks, API-key providers): list, rename, pick settings from get_integration_connection_options, rotate credentials, revoke; Google and Meta ones connect in the browser. An ad platform (Google Ads, Meta) needs its account, and its conversion actions (Google) or pixel and events (Meta), chosen before it sends leads, bookings and sales back against ad clicks: list_ad_conversions shows what was sent and sync_ad_spend pulls cost per campaign now. To check one works: a Meta connection with a test_event_code set sends a made-up lead to Test events with send_ad_test_event (while the code is set every conversion goes to Test events only: clear it to go live); validate_ad_connection checks a Google Ads one without recording anything. A custom HTTP integration is a definition you build: outbound, to call another system's API (a base URL; sign-in details read from secret variables such as secret.api_key; endpoints, each with a body template written in Liquid; lookups; and optionally an agent tool per endpoint), or inbound, to receive another system's webhooks. Build order: create_integration_definition, then variables, then point auth_settings at them, then endpoints, test_integration_endpoint (list_integration_test_samples gives real event variables), then the agent tool. To make it fire on its own, add a call_endpoint action to a CRM workflow (save_crm_workflow, e.g. on lead.created to send leads on: write its template from get_lead_payload_reference, which checks it) or a product lifecycle event (create_lifecycle_action), using the definition's managed connection. From an API guide or spec the person gives you: read all of it first, then in one message say what's missing or contradictory (test versus live URL, where the key goes, account or campaign ids, fields their API requires that the CRM doesn't hold, clashing field names) and ask, before building anything. Ask once: once they've answered, build, taking a sensible default for anything still open (send every new lead, leave out fields the CRM doesn't hold) and saying what you chose. Build against their test server. Never ask for a secret in chat or make one up: auth_settings can only point at a variable that exists, so create the secret with the value REPLACE_ME, point auth at it (an API key is auth_type api_key with {header, value_ref}, never a header or body field), and tell the person to set the real value under Variables on the definition page before testing. When the API reports failures inside a 2xx, add success_conditions so they count as failures. To test with made-up data, invent params in the template's shape for test_integration_endpoint: never create CRM records to test with. export_integration_definition and import_integration_definition copy one between orgs. Each definition has one connection, always on, that Subcontext manages; updating a variable's value repairs it. Secret values are never returned. A paused connection stopped because its calls kept failing: it tries again by itself every 15 minutes, and resume_integration_connection restarts it once the other system is fixed. Revoking, deleting and testing write endpoints affect live systems: confirm first.

The descriptions below are the ones your assistant reads, so they're written for it. When a connection covers more than one organisation, the assistant passes org (the organisation's slug, from list_orgs) to say which one.

list_integration_providers

Read List integration providers

Every kind of system the organisation can connect, and how. connect is "settings" (create_integration_connection with these settings and credentials), "browser" (OAuth: the person connects it on the Integrations page; send them the url) or "definition" (a custom HTTP integration: create_integration_definition, or import_integration_definition from a config file). available is false when the plan doesn't include it. Owners and managers.

Arguments

FieldTypeDescription
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

list_integration_connections

Read List integration connections

The organisation's connected systems (Google Calendar and Sheets, API-key providers, and each custom integration's managed connection) with status. Credentials are never returned.

Arguments

FieldTypeDescription
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

get_integration_connection_options

Read Get a connection's setting choices

The values a connection's settings can take, read live from the connected account: calendar_id (its calendars), spreadsheet_id (its spreadsheets) and, once a spreadsheet is set, sheet_name (its tabs). Use before update_integration_connection so you set a real id. A setting the account can't list is left out: ask the person for it.

Arguments

FieldTypeDescription
id required string Connection id
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

get_integration_connection

Read Get an integration connection

One connection's status and settings. Credentials show as present or absent only.

Arguments

FieldTypeDescription
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

create_integration_connection

Write Connect an API-key integration

Connect a provider that uses an API key and settings. Google providers connect in the browser (OAuth) and custom HTTP integrations through their definition.

Arguments

FieldTypeDescription
provider_key required string
name required string
config object The provider's declared settings
credentials object Secrets, e.g. {api_key}. Stored encrypted and never returned
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

update_integration_connection

Write Update an integration connection

Rename a provider connection, change its settings, or rotate its credentials (fresh credentials heal an auth_error connection). Only what you pass changes.

Arguments

FieldTypeDescription
id required string
name string
config object Settings to merge, e.g. {calendar_id} or {spreadsheet_id, sheet_name}
credentials object Secrets to rotate; blank values keep the stored ones
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

revoke_integration_connection

Write Revoke an integration connection

Revoke a provider connection. THIS IS PERMANENT AND STOPS EVERYTHING WIRED TO A LIVE CONNECTION (bookings, sheet exports, workflows): confirm with the user first.

Arguments

FieldTypeDescription
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

resume_integration_connection

Write Resume a paused integration connection

Put a paused connection (status paused: its calls kept failing, so sending stopped) back to active now, instead of waiting for the next send its 15-minute cool-off lets through. Use it once the person says the other system is fixed. Works for a custom integration's managed connection too.

Arguments

FieldTypeDescription
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

sync_ad_spend

Write Sync ad spend now

Queue a Google Ads or Meta connection's spend sync (daily cost per campaign) now rather than at the morning sweep. The first sync of a connection covers 90 days, later ones the last 3.

Arguments

FieldTypeDescription
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

send_ad_test_event

Write Send a Meta test event

Send one made-up Lead (a placeholder click and a hashed test email) to a Meta connection's pixel under its test event code, and report what Meta said (events_received, fbtrace_id, or its error). It shows in Events Manager under the pixel's Test events and nowhere else. Needs the connection's test_event_code setting (from Events Manager, Test events; set it with update_integration_connection). While that code is set ALL of the connection's conversions go to Test events only: clear it to go live. Google Ads connections use validate_ad_connection.

Arguments

FieldTypeDescription
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

validate_ad_connection

Write Validate a Google Ads connection

Check a Google Ads connection end to end: a validate-only upload of one made-up click conversion to one of its conversion actions. Google checks the sign-in, developer token, ad account and conversion action and records nothing. ok: true (Google objecting only to the made-up click id counts as a pass) means conversions will be accepted; otherwise message says what to fix. Meta connections use send_ad_test_event.

Arguments

FieldTypeDescription
id required string
conversion_action string Resource name (customers/1/conversionActions/2) of one of the connection's configured conversion actions. Default: the lead stage's, else the first one configured
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

list_ad_conversions

Read List ad conversions

The leads, bookings and sales a Google Ads or Meta connection has sent back against ad clicks (or skipped / failed to send, with the reason), newest first, plus counts by status. A conversion is only sent when the journey started from the firm's own ad (a gclid / fbclid), or for an outcome under a rule, on hashed email and phone when enhanced matching is on. Also lists the connection's outcome rules and any retraction or restatement of a sent outcome.

Arguments

FieldTypeDescription
id required string
status string One of: "pending", "sent", "failed", "skipped"
limit integer
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

save_ad_conversion_rule

Write Send an outcome to an ad platform

Send an outcome type (one off the engagement ladder, e.g. commission paid or policy renewed: the ladder is set in the connection's settings) to a Google Ads or Meta connection as a conversion. destination is the Google Ads conversion action resource name (customers/123/conversionActions/456) or the Meta event name; value_measure is a money measure key for its value. Replaces the type's existing rule. Changes what the org reports to its ad platform: confirm first. Owner or manager only.

Arguments

FieldTypeDescription
id required string The connection id.
outcome_type required string
destination required string
value_measure string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

delete_ad_conversion_rule

Write Stop sending an outcome to an ad platform

Remove an outcome rule from a Google Ads or Meta connection (list_ad_conversions lists them). Conversions already sent stay sent. Owner or manager only.

Arguments

FieldTypeDescription
id required string The connection id.
rule_id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

create_integration_spreadsheet

Write Create a spreadsheet for a connection

Create a new Google Sheet in the connected account and point the Sheets connection at it.

Arguments

FieldTypeDescription
id required string The Google Sheets connection
title required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

list_integration_definitions

Read List custom integrations

The organisation's custom HTTP integration definitions (outbound APIs it calls, inbound webhooks it receives).

Arguments

FieldTypeDescription
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

get_integration_definition

Read Get a custom integration

One definition in full: auth settings, endpoints with their agent tools, variables (secret values shown as present or absent only), lookups and the managed connection.

Arguments

FieldTypeDescription
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

create_integration_definition

Write Create a custom integration

Create a custom HTTP integration. Direction is fixed at creation: outbound (we call their API) or inbound (they send us webhooks).

Arguments

FieldTypeDescription
direction required string One of: "outbound", "inbound"
name required string
description string
base_url string Outbound only: the API root, e.g. https://api.example.com/v1
auth_type string Outbound only One of: "none", "api_key", "bearer_token", "basic_auth", "oauth2_client_credentials"
auth_settings object Outbound only. Variable REFERENCES, never values: api_key {header, value_ref}, bearer_token {token_ref}, basic_auth {username_ref, password_ref}, oauth2_client_credentials {token_url, client_id_ref, client_secret_ref, client_auth} where client_auth is client_secret_post (default: id and secret in the form body) or client_secret_basic (an HTTP Basic header). A ref looks like secret.name and must already exist, so a new definition starts with auth_type none: create it, add the secret with create_integration_variable, then set auth with update_integration_definition.
default_headers object Outbound only: flat {header: value} sent on every call. A value is plain text or a variable reference written exactly as secret.name or static.name, never {{ }}. No Authorization, and no API key: put a key in auth_type api_key with auth_settings {header, value_ref}
webhook_config object Inbound only: {kind_path, enrichment_kinds (list), enrichment_source_policy_id_path, header, secret_ref, outcome_kinds (list: events recorded as lead outcomes), outcome_mapping (the outcome upload mapping shape with dotted payload paths: {lead: {id, external_id, email, phone}, type_column | type, occurred_at, deal_ref, event_id, note, values: {measure_key: path}})}. An empty kind_path turns event routing off.
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

update_integration_definition

Write Update a custom integration

Edit a definition. Only the fields you pass change; direction can't.

Arguments

FieldTypeDescription
id required string
name string
description string
base_url string Outbound only: the API root, e.g. https://api.example.com/v1
auth_type string Outbound only One of: "none", "api_key", "bearer_token", "basic_auth", "oauth2_client_credentials"
auth_settings object Outbound only. Variable REFERENCES, never values: api_key {header, value_ref}, bearer_token {token_ref}, basic_auth {username_ref, password_ref}, oauth2_client_credentials {token_url, client_id_ref, client_secret_ref, client_auth} where client_auth is client_secret_post (default: id and secret in the form body) or client_secret_basic (an HTTP Basic header). A ref looks like secret.name; create the variable first.
default_headers object Outbound only: flat {header: value} sent on every call. A value is plain text or a variable reference written exactly as secret.name or static.name, never {{ }}. No Authorization, and no API key: put a key in auth_type api_key with auth_settings {header, value_ref}
webhook_config object Inbound only: {kind_path, enrichment_kinds (list), enrichment_source_policy_id_path, header, secret_ref, outcome_kinds (list: events recorded as lead outcomes), outcome_mapping (the outcome upload mapping shape with dotted payload paths: {lead: {id, external_id, email, phone}, type_column | type, occurred_at, deal_ref, event_id, note, values: {measure_key: path}})}. An empty kind_path turns event routing off.
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

delete_integration_definition

Write Delete a custom integration

Delete a definition with its endpoints, agent tools, variables and connection history. IF IT IS IN USE (AGENTS CALL ITS TOOLS, OR IT SYNCS POLICIES OR RECEIVES WEBHOOKS) THIS BREAKS THAT: confirm with the user first.

Arguments

FieldTypeDescription
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

import_integration_definition

Write Import a custom integration

Create a definition from a v2 backend_api config file (the export format). Secret variables arrive with placeholder values; set the real ones with update_integration_variable.

Arguments

FieldTypeDescription
config required object or string The whole exported file, as an object or its JSON text: {"backend_api": {...}}
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

export_integration_definition

Read Export a custom integration

A custom integration as a portable config file (the same file the Export button downloads): pass config to import_integration_definition to copy it into another organisation. Secret values are never included, only their names.

Arguments

FieldTypeDescription
id required string Definition id
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

list_integration_test_samples

Read List integration test samples

Real recent events to test a custom integration's endpoints with: product lifecycle events (policy bound, cancelled...) and CRM lead events, each with the exact variables an endpoint's template is rendered with when that event calls it. Pass a sample's vars as params to test_integration_endpoint.

Arguments

FieldTypeDescription
definition_id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

get_lead_payload_reference

Read Get the lead payload reference

What a CRM workflow's call_endpoint action sends an integration endpoint, the same for every trigger: the variables a body template can use ({{ lead.first_name }}, {{ lead.fields.<key> }}, {{ event_type }}...), the organisation's custom fields, and a live example from its newest lead. Read this BEFORE writing an endpoint template for a workflow, and pass your draft as template to see every name it uses that the workflow wouldn't fill (unknown names render blank, so workflows refuse them). An endpoint with no body template is sent this whole payload as JSON.

Arguments

FieldTypeDescription
template string A draft Liquid body template to check
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

get_integration_endpoint

Read Get an integration endpoint

One endpoint of a custom integration in full, with its agent tool and what calls it (used_by: CRM workflows and product lifecycle actions). Check used_by before deleting or changing its template.

Arguments

FieldTypeDescription
definition_id required string
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

create_integration_endpoint

Write Create an integration endpoint

Add an outbound call to a custom integration.

Arguments

FieldTypeDescription
definition_id required string
key required string Lowercase identifier, e.g. create_policy
name string
path required string Path under the base URL; {{param}} placeholders allowed
http_method required string One of: "get", "post", "put", "patch", "delete"
request_body_template string Liquid body for POST/PUT/PATCH; {{ secret.name }} / {{ static.name }} and lookups available. For a CRM workflow, call get_lead_payload_reference FIRST and use only the names it lists (it checks a draft): lead.fields.* covers custom fields that already exist, nothing else. Leave it empty to send the whole lead payload
content_format string One of: "json", "form", "xml"
headers object Flat {header: value}. A value is a literal or EXACTLY a variable ref like secret.name, never Liquid ({{ }} is rejected). API keys belong in the definition's auth_settings, not here
success_conditions array of object Rules deciding a 2xx actually succeeded: {source, operator, property, target}. source is status_code, response_body, json_body, xml_body or header (the last three need a property). Add them whenever the API can reject inside a 2xx: e.g. it answers 200 with FAIL in the body, {source: response_body, operator: not_contains, target: FAIL}
request_schema object JSON Schema of the endpoint's parameters (object with properties)
policy_operation string Bind to a policy lifecycle operation (request_change: changes asked of a PAS that keeps the policy record) One of: "create_policy", "cancel_policy", "endorse_policy", "request_change"
external_id_path string Dotted path to the created record's id (required for create_policy)
pull_source boolean GET endpoint the platform polls for records
pull_config object Pull settings: {strategy (cursor, page_number, offset_limit, auto), records_path, source_policy_id_path, ...}
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

update_integration_endpoint

Write Update an integration endpoint

Edit an endpoint. Only the fields you pass change.

Arguments

FieldTypeDescription
definition_id required string
id required string
key string Lowercase identifier, e.g. create_policy
name string
path string Path under the base URL; {{param}} placeholders allowed
http_method string One of: "get", "post", "put", "patch", "delete"
request_body_template string Liquid body for POST/PUT/PATCH; {{ secret.name }} / {{ static.name }} and lookups available. For a CRM workflow, call get_lead_payload_reference FIRST and use only the names it lists (it checks a draft): lead.fields.* covers custom fields that already exist, nothing else. Leave it empty to send the whole lead payload
content_format string One of: "json", "form", "xml"
headers object Flat {header: value}. A value is a literal or EXACTLY a variable ref like secret.name, never Liquid ({{ }} is rejected). API keys belong in the definition's auth_settings, not here
success_conditions array of object Rules deciding a 2xx actually succeeded: {source, operator, property, target}. source is status_code, response_body, json_body, xml_body or header (the last three need a property). Add them whenever the API can reject inside a 2xx: e.g. it answers 200 with FAIL in the body, {source: response_body, operator: not_contains, target: FAIL}
request_schema object JSON Schema of the endpoint's parameters (object with properties)
policy_operation string Bind to a policy lifecycle operation (request_change: changes asked of a PAS that keeps the policy record) One of: "create_policy", "cancel_policy", "endorse_policy", "request_change"
external_id_path string Dotted path to the created record's id (required for create_policy)
pull_source boolean GET endpoint the platform polls for records
pull_config object Pull settings: {strategy (cursor, page_number, offset_limit, auto), records_path, source_policy_id_path, ...}
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

delete_integration_endpoint

Write Delete an integration endpoint

Delete an endpoint and its agent tool. Refused while agent versions use the tool.

Arguments

FieldTypeDescription
definition_id required string
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

test_integration_endpoint

Write Test an integration endpoint

Call the endpoint for real with sample params and report the status, response excerpt and success checks. A test of a write endpoint CREATES OR CHANGES REAL DATA in the other system: confirm first.

Arguments

FieldTypeDescription
definition_id required string
id required string
params object Sample values for the path and body template: a sample's vars from list_integration_test_samples, or invented ones in the same shape when the person wants made-up test data. Never create real records just to test
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

create_integration_endpoint_tool

Write Expose an endpoint to agents

Create the agent tool for an endpoint. Left-out fields take the suggestions: a name from the endpoint key, approval for anything but GET, parameters from the endpoint's request schema.

Arguments

FieldTypeDescription
definition_id required string
endpoint_id required string
name string Tool name agents see; starts with a letter
description required string What the tool does, for the agent
requires_approval boolean Whether a human approves each call
parameters array of object Parameter rows: {name, type (string, integer, number, boolean), description, required}
response_fields array of string Top-level response keys the agent sees (empty = all)
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

update_integration_endpoint_tool

Write Update an endpoint's agent tool

Edit an endpoint's agent tool, or disable it. Only the fields you pass change.

Arguments

FieldTypeDescription
definition_id required string
endpoint_id required string
status string One of: "active", "disabled"
name string Tool name agents see; starts with a letter
description string What the tool does, for the agent
requires_approval boolean Whether a human approves each call
parameters array of object Parameter rows: {name, type (string, integer, number, boolean), description, required}
response_fields array of string Top-level response keys the agent sees (empty = all)
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

delete_integration_endpoint_tool

Write Delete an endpoint's agent tool

Remove an endpoint's agent tool. Refused while agent versions carry it.

Arguments

FieldTypeDescription
definition_id required string
endpoint_id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

create_integration_variable

Write Add an integration variable

Add a secret (API keys, tokens) or static value to a custom integration; reference it as secret.name or static.name. Secret values are never shown again. Never ask for a secret's value in chat or make one up: leave value out and the secret is created with the placeholder REPLACE_ME, so auth can point at it now; then send the person to Variables on the definition page to set the real value.

Arguments

FieldTypeDescription
definition_id required string
name required string
kind required string One of: "secret", "static"
value string Required for a static value. For a secret, only a value the person gave you; leave it out to create the placeholder
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

update_integration_variable

Write Rotate an integration variable

Replace a variable's value (name and kind are fixed). Rotating credentials heals an integration in auth_error.

Arguments

FieldTypeDescription
definition_id required string
id required string
value required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

delete_integration_variable

Write Delete an integration variable

Delete a variable. Refused while templates, headers, auth settings or lookups reference it.

Arguments

FieldTypeDescription
definition_id required string
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

create_integration_lookup

Write Add an integration lookup

Add a label to value table templates use via the lookup filter, e.g. {{ cover | lookup: "cover_codes" }}.

Arguments

FieldTypeDescription
definition_id required string
name required string
entries array of any {label: value} pairs, or a list of {label:, value:} rows
default_value string Used when no label matches
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

update_integration_lookup

Write Update an integration lookup

Edit a lookup. Entries replace the whole table; only the fields you pass change.

Arguments

FieldTypeDescription
definition_id required string
id required string
name string
entries array of any {label: value} pairs, or a list of {label:, value:} rows
default_value string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

delete_integration_lookup

Write Delete an integration lookup

Delete a lookup. Refused while an endpoint template uses it.

Arguments

FieldTypeDescription
definition_id required string
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

get_integration_log

Read Get an integration log

One call to or from a connected system in full, with the request and response excerpts (secrets redacted).

Arguments

FieldTypeDescription
id required string
org string Organisation slug: required when this authorization covers more than one organisation (see list_orgs)

Stuck, or something missing?

Get in touch and a person on the team will help.

Contact us