Documentation Index
Fetch the complete documentation index at: https://docs.gainable.dev/llms.txt
Use this file to discover all available pages before exploring further.
What Connect does
Gainable Connect is the integration layer between your Gainable app and external systems. For Gaia Autopilot, Connect plays two roles:- Outbound. The targets agents can reach when they call tools like
send_slackorcall_external. - Inbound. The sources that fire webhook triggers.
Outbound channels
Every outbound integration lives behind a typed tool and inherits a default risk tier. The org configures credentials once; the agent calls the tool.Slack
| Capability | Notes |
|---|---|
| Channels | Public, private (with bot installed) |
| DMs | Yes, to bot-installed users |
| Threading | thread_ts parameter |
| Default risk tier | High (draft-and-approve) |
| Common graduation | Internal channels can graduate to auto_with_undo |
SMS
| Capability | Notes |
|---|---|
| Provider | Twilio (default), configurable |
| Delivery receipts | Logged in action log |
| Default risk tier | High (draft-and-approve), no auto-with-undo path |
| Notes | SMS undo isn’t possible. Always draft-and-approve unless explicitly opted-in |
Calendar
Outbound calendar operations through the configured calendar provider (Google Calendar, Microsoft 365).| Capability | Notes |
|---|---|
| Create event | Yes, draft-and-approve by default |
| Update event | Yes, with undo window |
| Delete event | Yes, draft-and-approve only |
| Default risk tier | High (calendars are user-visible) |
DocuSign
| Capability | Notes |
|---|---|
| Send envelope | Always draft-and-approve. No exceptions. |
| Voiding | Allowed with explicit user action |
| Default risk tier | High (legally binding), no auto path |
Stripe
| Capability | Notes |
|---|---|
| Create invoice | Draft-and-approve |
| Capture payment | Draft-and-approve only |
| Refund | Draft-and-approve only |
| Default risk tier | High (financial operations), no auto path |
Generic webhooks (call_external)
When the registry doesn’t have a dedicated tool, use call_external.
Inbound webhooks (as triggers)
Inbound webhooks become webhook triggers on a playbook. The runtime provisions a unique URL per trigger and verifies signatures where the source supports it.Provisioning
When you add a webhook trigger, Connect generates a URL:Signature verification
| Source | Verification method |
|---|---|
| Stripe | Stripe-Signature header, HMAC-SHA256 |
| GitHub | X-Hub-Signature-256 header |
| SendGrid | Public key signature on each event |
| Twilio | X-Twilio-Signature header |
| Generic | HMAC if shared secret is configured, else IP allow-list |
Common inbound sources
| Source | Example events | Common playbook |
|---|---|---|
| Stripe | invoice.payment_failed | Draft a payment-failure recovery email |
| Stripe | customer.subscription.deleted | Draft a churn outreach |
| SendGrid | bounce, spamreport | Mark contact as undeliverable, exclude from future drafts |
| GitHub | issue.opened | Route to engineering Autopilot |
| Calendar | event.created | Draft a pre-meeting briefing |
| Twilio | inbound SMS | Draft a reply suggestion to the assigned rep |
Configuring credentials
Credentials are stored at the org level, not per-app. To add a Slack workspace, a Stripe key, or a Twilio account, the org admin connects it once. All apps in the org can use the connected services through the tool registry.Credentials never appear in the action log. They’re referenced by name (e.g.
secrets.stripe_key); the runtime resolves them at call time and never logs the resolved value.Allow-lists for outbound recipients
For external messaging tools (send_email, send_slack to external workspaces, send_sms), Connect supports allow-lists at the org level:
| Allow-list | What it does |
|---|---|
| Allowed email domains | Drafts to other domains are blocked at send time |
| Allowed phone country codes | Drafts to other countries are blocked at send time |
| Allowed Slack workspaces | Drafts to other workspaces are blocked at send time |
do_not_contact collection | A list of recipients excluded regardless of domain |
Best practices
Verify signatures wherever the source supports it
Verify signatures wherever the source supports it
Inbound webhooks without signature verification are an attack surface. Configure the secret on the source side and the runtime will reject anything unsigned.
Start with a small allow-list for outbound
Start with a small allow-list for outbound
A new sales agent can email
acmecorp.com and gainable.dev. After a clean approval history, expand. Loud allow-lists invite mistakes.Use generic call_external sparingly
Use generic call_external sparingly
Every
call_external is a system the runtime can’t reason about. Prefer a first-class tool when one exists. If you find yourself using call_external for the same target repeatedly, that target is a candidate for promotion.Test webhook payloads in simulation
Test webhook payloads in simulation
Capture a real payload from the source, then replay it through Simulate on last 30 days. It’s the safest way to verify your filter and steps.
Learn more
Tools
The fixed registry, including outbound tools
Triggers
Webhook trigger configuration
Risk tiers
Default tiers per outbound channel
Datasets
Inbound data ingestion (different from action and event flow)