Integration providers and operations
Every integration provider and operation, with auth type, parameters and outputs, for Slack, Google Calendar, Google Analytics, Search Console, GitHub, LinkedIn, X, Claude, OpenAI and Grok.
Last updated
This page lists the integration providers every project has, with the operations an Integration workflow step can run. To connect one, see Post to Slack when a record is created. For how connections and credential sources work, see How integrations work.
A step's inputs object takes the parameter names exactly as written here. Google Calendar's parameters are camelCase, such as startDateTime. Every other provider's are snake_case, such as per_page. Each operation's result is saved at the top level of the step's output, so a step with the key notify_slack gives you {{ $anythink.steps.notify_slack.ts }}.
Find an operation's inputs
In the Anythink dashboard
- Open a workflow, select Add Step and open the Integrations tab.
- Choose the provider, then pick an Operation. The step shows that operation's fields, with the required ones marked.
With the CLI
anythink integrations list
anythink integrations get slack
anythink fetch /integrations/definitions/slack/operations/send-message/schema
integrations get lists the provider's operations by key, name and description. The fetch call returns the operation's input schema: field names, types, defaults and allowed values. To build a step from flags, use anythink workflows integration-add. See Step types.
With an AI assistant (MCP)
Show me the Slack operations and the inputs of send-message.
The assistant calls the cli tool with integrations get slack and fetch /integrations/definitions/slack/operations/send-message/schema. This needs the MCP server running locally in stdio mode.
Providers
| Provider | provider key |
Category | Auth type | Parent provider | Operations |
|---|---|---|---|---|---|
google |
Authentication | OAuth2 | None | None. Sign-in only. Its OAuth client is shared with the Google services below. | |
| Google Calendar | google-calendar |
Calendar | OAuth2 | google |
5 |
| Google Analytics | google-analytics |
Analytics | OAuth2 | google |
2, both read-only |
| Google Search Console | google-search-console |
Analytics | OAuth2 | google |
2, both read-only |
| Slack | slack |
Communication | OAuth2 | None | 2 |
| GitHub | github |
Developer Tools | OAuth2 | None | 7, all read-only |
linkedin |
Social | OAuth2 | None | 1 | |
| Twitter / X | twitter |
Social | OAuth2 | None | 1 |
| Apple | apple |
Authentication | OAuth2 | None | None. Sign-in only. |
| Claude AI | claude |
AI | API key | None | 5 |
| OpenAI (ChatGPT) | openai |
AI | API key | None | 6 |
| Grok (xAI) | grok |
AI | API key | None | 5 |
Note: Google Calendar, Google Analytics and Google Search Console can share one Google OAuth client. Gmail and Google Drive are coming soon.
Credentials by provider
| Provider | How you connect | Scopes Anythink requests |
|---|---|---|
| Slack | anythink integrations oauth configure slack, then oauth connect slack |
chat:write, chat:write.public, channels:read, groups:read, users:read, users:read.email, im:write, reactions:write, files:write, channels:history |
| Google Calendar | oauth configure google-calendar, then oauth connect google-calendar. It can reuse the Google sign-in client. |
calendar, calendar.events |
| Google Analytics | oauth configure google-analytics, then oauth connect google-analytics. It can reuse the Google sign-in client. |
analytics.readonly |
| Google Search Console | oauth configure google-search-console, then oauth connect google-search-console. It can reuse the Google sign-in client. |
webmasters.readonly |
| GitHub | oauth configure github, then oauth connect github |
repo, read:user |
oauth configure linkedin, then oauth connect linkedin |
openid, profile, email, w_member_social |
|
| Twitter / X | oauth configure twitter, then oauth connect twitter |
tweet.read, tweet.write, users.read, offline.access |
| Claude, OpenAI, Grok | anythink integrations connect <provider>, which prompts for the key without echoing it |
None |
Any provider can have a project connection. Add --user-connection to oauth connect or connect for a user connection. See Let each user connect their own account.
Credential modes in a step
credential_source |
Dashboard label | Uses |
|---|---|---|
system |
System (shared connection) | An enabled project connection. The default. |
current_user |
Current User (first connection) | An enabled connection visible to the user who triggered the job: theirs, or a project connection. |
connection |
Specific Connection (by ID) | The connection in connection_id. Falls back to current_user when the ID matches nothing. |
Slack
| Operation | Key | Parameters | Output |
|---|---|---|---|
| Send Message | send-message |
channel (required): a name such as #general, or a channel ID. text (required). |
ok, channel (the channel ID), ts |
| Send Direct Message | send-direct-message |
user (required): a Slack user ID such as U024BE7LH. text (required). |
ok, ts |
Messages post as your Slack app's bot. chat:write.public lets it post to public channels it hasn't joined. Invite the bot to a private channel first.
Google Calendar
| Operation | Key | Parameters | Output |
|---|---|---|---|
| Create Event | create-event |
summary, startDateTime, endDateTime (required, ISO 8601). description, location, attendees (a list of email addresses), organizer (an email address), addGoogleMeet (boolean, default false), timeZone (default UTC). |
id, summary, description, location, organizer, start, end, timeZone, attendees, htmlLink, created, updated, and meetLink when addGoogleMeet is true |
| List Events | list-events |
All optional. calendarId (default primary), timeMin (default now), maxResults (default 10), query. |
items (each with id, summary, description, start, end, htmlLink), totalItems |
| Get Event | get-event |
eventId (required). calendarId (default primary). |
id, summary, description, start, end, htmlLink, attendees |
| Update Event | update-event |
eventId (required). summary, description, startDateTime, endDateTime. Only the parameters you send change. |
id, summary, htmlLink, updated |
| Delete Event | delete-event |
eventId (required). |
success, message |
Events go on the connected account's primary calendar. When you set attendees, Google emails each of them an invitation. list-events returns upcoming events in start order, with recurring events expanded.
Anythink timestamp fields are UTC. Pass them straight through as startDateTime and endDateTime, and leave timeZone at its default. update-event reads its times as UTC.
Google Analytics
Both operations are read-only. Run list-properties first to find the property ID for run-report.
| Operation | Key | Parameters | Output |
|---|---|---|---|
| List Properties | list-properties |
None. | rows (each with property_id, display_name, account_id, account_display_name), row_count |
| Run Report | run-report |
property_id (required, the GA4 property ID, such as 123456789). start_date and end_date (YYYY-MM-DD, today, yesterday or NdaysAgo, both default yesterday), dimensions (a list, such as date, sessionSource, sessionMedium, landingPagePlusQueryString), metrics (a list, default sessions and totalUsers), limit (default 10000). |
rows (one per combination of dimension values, keyed by each dimension and metric name), row_count, and total_row_count when Google reports it |
Each row is flat, so a Create data or Upsert data step can save a report straight into an entity.
Google Search Console
Both operations are read-only. Run list-sites first to find the exact site_url for search-analytics-query.
| Operation | Key | Parameters | Output |
|---|---|---|---|
| List Sites | list-sites |
None. | rows (each with site_url, permission_level), row_count |
| Search Analytics Query | search-analytics-query |
site_url (required: sc-domain:example.com for a domain property, or a URL prefix such as https://example.com/), start_date and end_date (required, YYYY-MM-DD). dimensions (a list, default page and query; others include date, country and device), row_limit (default 1000, up to 25000), start_row (default 0, for paging), search_type (web, image, video, news, discover or googleNews, default web). |
rows (one per combination of dimension values, with each dimension plus clicks, impressions, ctr and position), row_count |
GitHub
repo is an owner/name string. In the dashboard it's a searchable list of the connected account's repositories. List operations return one page, up to per_page results (1 to 100, default 30).
| Operation | Key | Parameters | Output |
|---|---|---|---|
| List Commits | list-commits |
repo (required). sha, path, author, since, until (ISO 8601), per_page. |
items, count |
| List Pull Requests | list-pull-requests |
repo (required). state (open, closed or all, default open), sort (created, updated, popularity or long-running, default created), direction (asc or desc, default desc), per_page. |
items, count |
| List Releases | list-releases |
repo (required). per_page. |
items, count |
| List Issues | list-issues |
repo (required). state (default open), labels (comma-separated), since, per_page. Pull requests aren't included. |
items, count |
| Get File Contents | get-file-contents |
repo, path (required). ref: a branch, tag or commit SHA, defaulting to the default branch. |
name, path, sha, size, html_url, download_url, encoding, binary, content |
| Get Repository Tree | get-repo-tree |
repo (required). tree_sha, defaulting to the default branch. The tree is recursive. |
sha, tree, count, truncated, and warning when GitHub truncated the tree |
| List GitHub Actions Runs | list-workflow-runs |
repo (required). workflow (a workflow file name or ID, defaulting to all workflows), branch, status, event, head_sha, per_page. |
items, count, total_count |
The items are GitHub's own objects. Binary files return binary: true and an empty content.
| Operation | Key | Parameters | Output |
|---|---|---|---|
| Create Post | create-post |
text (required). visibility (PUBLIC or CONNECTIONS, default PUBLIC). |
id, success, url |
Twitter / X
| Operation | Key | Parameters | Output |
|---|---|---|---|
| Create Tweet | create-tweet |
text (required). reply_to: the ID of a tweet to reply to. |
id, text, success, url |
Claude AI
All AI operations call the provider's own API with the connection's key, and return the text in text. If you leave out model, the provider's current default is used.
| Operation | Key | Parameters | Output |
|---|---|---|---|
| Generate Text | generate-text |
prompt (required). system_prompt, model, max_tokens (default 1024). |
text, model, input_tokens, output_tokens, success |
| Analyse Image | analyse-image |
image_url (required). prompt, model, max_tokens (default 1024). |
As Generate Text |
| Analyse Document | analyse-document |
content (required). content_type (text or pdf, default text; a PDF is base64 data), prompt, model, max_tokens (default 2048). |
As Generate Text |
| Summarise | summarise |
content (required). format (paragraph, bullets, tweet or linkedin, default paragraph), max_length (characters), model, max_tokens (default 1024). |
As Generate Text |
| Translate | translate |
content, target_language (required). source_language (default auto-detect), tone (formal, informal or technical, default formal), model, max_tokens (default 2048). |
As Generate Text, plus detected_language |
OpenAI (ChatGPT)
| Operation | Key | Parameters | Output |
|---|---|---|---|
| Generate Text | generate-text |
prompt (required). system_prompt, model, max_tokens (default 1024). |
text, model, input_tokens, output_tokens, success |
| Analyse Image | analyse-image |
image_url (required). prompt, model, max_tokens (default 1024). |
As Generate Text |
| Analyse Document | analyse-document |
content (required). content_type (text or pdf, default text), prompt, model, max_tokens (default 2048). |
As Generate Text |
| Summarise | summarise |
content (required). format, max_length, model, max_tokens, as for Claude. |
As Generate Text |
| Translate | translate |
content, target_language (required). source_language, tone, model, max_tokens, as for Claude. |
As Generate Text, plus detected_language |
| Generate Image | generate-image |
prompt (required). size (1024x1024, 1024x1792 or 1792x1024, default 1024x1024), model (default dall-e-3), quality (standard or hd, default standard). |
image_url, revised_prompt, success |
Grok (xAI)
| Operation | Key | Parameters | Output |
|---|---|---|---|
| Generate Text | generate-text |
prompt (required). system_prompt, model, max_tokens (default 1024). |
text, model, input_tokens, output_tokens, success |
| Analyse Image | analyse-image |
image_url (required). prompt, model, max_tokens (default 1024). |
As Generate Text |
| Analyse Document | analyse-document |
content (required, text only). prompt, model, max_tokens (default 2048). |
As Generate Text |
| Summarise | summarise |
content (required). format, max_length, model, max_tokens, as for Claude. |
As Generate Text |
| Translate | translate |
content, target_language (required). source_language, tone, model, max_tokens, as for Claude. |
As Generate Text, plus detected_language |
Note: These operations are separate from the AI sidebar's chat. The sidebar can use the same claude, openai or grok connection in bring-your-own-key mode instead of Anythink's shared AI quota.
Step errors
| Error | Meaning |
|---|---|
No credentials found for <provider> |
No enabled connection matched the step's credential source. Connect the provider, or enable the connection. |
Slack API error: <code> |
Slack rejected the call. invalid_auth means the token is no longer valid, so reconnect Slack. |
Failed to <action>: <message> |
Google Calendar rejected the call, for example because the Google Calendar API isn't enabled for your OAuth client. |
<Provider> API error (<status>) |
An AI, LinkedIn or X provider rejected the call. The provider's response follows. |
Operation '<key>' is not supported for <provider> |
The operation key isn't one of those on this page. Some providers word this as an unknown-operation error. |
Surfaces
| Task | Dashboard | CLI | AI assistant (MCP, stdio) |
|---|---|---|---|
| Browse providers and connections | Yes | integrations list, get, connections list |
Yes, through the cli tool |
| Connect with an API key | Yes | integrations connect |
Run it in your own terminal, so the key stays out of the conversation |
| Connect with OAuth | Yes, by redirect | integrations oauth configure, oauth connect |
oauth connect opens your browser. Run oauth configure yourself. |
| Project connection | Yes | Yes | Yes |
| User connection | No | --user-connection |
Yes, through the cli tool |
| Enable or disable | No | enable, disable |
Yes, through the cli tool |
| Disconnect | Yes | disconnect |
Yes, through the cli tool |
Limit: The hosted MCP server doesn't run integrations commands. Run the MCP server locally in stdio mode to manage integrations from an assistant. See Connect Claude to your backend with MCP.
The integrations API
Everything the dashboard's Settings › Integrations page does goes through these endpoints, so your own app can read definitions, list and manage connections, and start an OAuth connection. Paths start /org/{project_id}/integrations.
| Endpoint | Needs | Returns |
|---|---|---|
GET /definitions/{provider} |
anythink_integrations:read |
One provider's definition |
GET /definitions/oauth-all |
anythink_integrations:read |
OAuth settings for every provider, keyed by provider |
GET /definitions/{provider}/connections |
anythink_integrations:read |
The connections you can see for that provider |
GET /definitions/{provider}/fields/{field}/options |
anythink_integrations:read |
The choices for a field, such as Slack channels |
GET /definitions/{provider}/oauth-url?redirectUri= |
anythink_integrations:read |
The provider's sign-in address for an OAuth connection |
POST /connections/api-key |
anythink_integrations:create |
The new connection |
PUT /connections/{connectionId} |
anythink_integrations:update |
The updated connection |
DELETE /connections/{connectionId} |
anythink_integrations:delete |
Nothing (204) |
A provider's {provider} is its key from the providers table, such as slack or claude. A {connectionId} is the connection's id, a UUID string.
In the Anythink dashboard
Settings › Integrations lists every provider and its connections. Select a provider to connect it, switch a connection off, or disconnect it.
With the CLI
anythink fetch /integrations/definitions/slack
anythink fetch /integrations/definitions/oauth-all
anythink fetch /integrations/definitions/github/connections
anythink fetch /integrations/definitions/github/fields/repos/options
anythink fetch "/integrations/definitions/github/oauth-url?redirectUri=https://example.com/callback"
The raw request:
GET /org/{project_id}/integrations/definitions/slack
A definition carries provider, parent_provider, display_name, description, icon, category, auth_type, is_enabled, can_social_sign_in and supports_native_sign_in. It also carries operations (each with key, display_name, description, input_schema and output_schema) and auth_config (authorization_url, token_url and scopes). An unknown provider returns 404.
oauth-all returns an object keyed by provider. Each value reports whether the provider is configured, as has_client_id, has_web_client_secret, web_flow_configured, native_flow_configured, use_social_sign_in and is_enabled, plus the public identifiers you saved. Secrets are never returned, only has_ flags.
Connections for a provider are the project's connections plus your own user connections, never another user's. Each has id, user_id, integration_definition_id, provider, name, display_name, is_enabled, connected_at and last_used_at. A project connection has a user_id of null.
Field options return a list of { "value": "...", "label": "..." } and use the first enabled connection you can see. These fields are supported:
| Provider | field |
Options |
|---|---|---|
slack |
channel or channels |
Public and private channels, labelled #name |
slack |
user or users |
People, not bots, labelled @name |
github |
repo, repos or repository |
The repositories the connection can see, as owner/name |
Any other field returns an empty list. With no enabled connection the response is 400 with { "error": "No active slack connection. Connect in Settings > Integrations." }.
OAuth address: oauth-url returns { "url": "https://..." }, the provider's authorisation address for the redirectUri you pass. Send the user there, and the provider returns them to your redirectUri with a code. The query parameter is spelt redirectUri and is required. The provider's OAuth client must already be saved for your project, or the call returns 400 with a message saying so.
To save an API key connection, send the provider key as integration_definition_id:
anythink fetch /integrations/connections/api-key --method POST --body '{
"integration_definition_id": "claude",
"name": "Claude for the support team",
"api_key": "<your provider API key>"
}'
The raw request:
POST /org/{project_id}/integrations/connections/api-key
Content-Type: application/json
{
"integration_definition_id": "claude",
"name": "Claude for the support team",
"api_key": "<your provider API key>",
"is_user_connection": false
}
The response is the new connection. The key is encrypted and never returned. Set is_user_connection to true to make the connection yours rather than the project's. See Let each user connect their own account.
To rename or switch off a connection, send only what changes. Disabling stops steps using it without deleting it:
anythink fetch /integrations/connections/<connection_id> --method PUT --body '{"is_enabled": false}'
anythink fetch /integrations/connections/<connection_id> --method DELETE
PUT accepts name and is_enabled. Only a project administrator can send user_id to move a connection to another user. An unknown id returns 404 with Connection not found.
With an AI assistant (MCP)
Show me the channels my Slack connection can post to.
The assistant calls fetch /integrations/definitions/slack/fields/channels/options through the cli tool. This needs the MCP server running locally in stdio mode.
Required permission
Every integrations endpoint needs anythink_integrations:read, :create, :update or :delete, depending on the action. The Settings › Integrations page is also limited to project administrators. See Roles and permissions.