powered by

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

  1. Open a workflow, select Add Step and open the Integrations tab.
  2. Choose the provider, then pick an Operation. The step shows that operation's fields, with the required ones marked.

With the CLI

bash
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)

text
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 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 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
LinkedIn 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.

LinkedIn

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

bash
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:

http
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:

bash
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:

http
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:

bash
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)

text
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.

Next steps