Integrations

202 services with 1392 actions in the catalog. Connect one once, then call its actions from a workflow; credentials stay sealed on the server and your code never holds them.

Reference homeWorkflowsMCP integrations tool

Built in

These actions run in the platform itself, on every server: Slack send_channel_message, Discord send_message_webhook, Telegram Bot send_text_message, Twilio send_sms, WhatsApp sendMessage, ntfy send_notification, Gotify send_notification, Mattermost send_message, Google Chat sendAMessage, plus HTTP requests and outgoing webhooks. Every other action in the catalog runs through the integration runner, which the operator of your server turns on: integrations {action: "catalog"} lists what your server can call.

Call an action

In a workflow, step.ctx.integrations.invoke(id, action, input) runs one action and resolves with the provider's answer; it rejects when the integration isn't connected or the provider refuses. Wrap it in step.run so a retry doesn't send twice. Each integration's page lists its actions with their inputs.

workflows/booking.ts
import { on } from "@appbricx/workflows";

export const tellOps = on.created<{ ref: string }>("booking", async ({ row }, step) => {
  await step.run("slack", () =>
    step.ctx.integrations.invoke("slack", "send_channel_message", {
      channel: "C0123456",
      text: "New booking " + row.ref,
    }),
  );
});

Try an action before you write code with the integrations tool:

Tool call
{
  "name": "integrations",
  "arguments": {
    "project_id": "<project-id>",
    "action": "call",
    "piece": "slack",
    "piece_action": "send_channel_message",
    "input": {
      "channel": "C0123456",
      "text": "Test"
    }
  }
}

Connect

  • From your agent: integrations {action: "connect", piece, credentials, env} stores the credentials for dev, prod or all. Answers name the fields, never the values.
  • Or set the integration's project secrets with the secrets tool (SLACK_BOT_TOKEN, DISCORD_WEBHOOK_URL, TELEGRAM_BOT_TOKEN, TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN …): a call uses the connection, else those secrets. integrations {action: "catalog", piece} lists which ones work.
  • Try one action now with integrations {action: "call", piece, piece_action, input}. It really sends.
OAuth
The connection holds the provider's OAuth tokens. They are sealed on the server and only opened when an action runs.
API key
Pass the provider's API key or token as the connection's credential. It is sealed at rest and only opened on the server when an action runs.
Credentials form
Pass the fields the provider needs (listed below) as the connection's credentials. They are sealed at rest.
Username and password
Pass the username and password (or key pair) the provider issues. They are sealed at rest.
No credentials
Nothing to connect: the actions run without credentials.

Catalog

202 integrations