Skip to main content

Integrations

apptor flow connects to external systems through a Connections system — a centralized credential store that decouples workflow logic from authentication details.


How Integrations Work

The platform separates external service connectivity into three layers:

Integration (template — defines structure and auth type)
└── Connection (named instance — environment-agnostic)
├── Development credentials ← resolved when flow runs in Development
└── Production credentials ← resolved when flow runs in Production

When a workflow node needs to call an external service, it references a Connection by name. At runtime the engine resolves the correct credentials based on the current execution environment — no changes to the flow definition are needed.

This pattern means:

  • Credentials are never visible in workflow definitions
  • The same workflow uses sandbox credentials in Development and live credentials in Production automatically
  • Rotating a credential only requires updating the connection's credentials — no workflow changes needed

Integration Types

TypeNode TypesDescription
REST APIService Task (REST), Tool (REST)Any HTTP/HTTPS API
EmailService Task (Email), Tool (Email)Transactional email delivery
DatabaseService Task (SQL), Tool (SQL)Direct SQL execution
SMSService Task (SMS)Text message delivery
AI ProviderAI Task, Voice TaskLLM and voice AI models
MCP ServerTool (MCP)Model Context Protocol servers
VoiceVoice TaskTelephony for voice calls
DomainDomain TaskVertical-specific API abstractions

REST API

The most general-purpose integration type. Connects to any HTTP or HTTPS endpoint.

Supported Auth Types

Auth TypeHow It WorksWhen to Use
NoneNo auth header addedPublic APIs
Bearer TokenAdds Authorization: Bearer <token>OAuth2 access tokens, JWT
Basic AuthAdds Authorization: Basic base64(user:pass)APIs using HTTP Basic authentication
API Key HeaderAdds a custom header (e.g., X-API-Key: <key>)APIs requiring a key in a header
OAuth2Performs client credentials flow; refreshes token automaticallyEnterprise APIs (Salesforce, Microsoft 365, etc.)

Connection Fields

FieldRequiredDescription
NameYesDisplay name (e.g., "Stripe Production")
Base URLYesRoot URL — node paths are appended to this
Auth TypeYesOne of the auth types above
Token / KeyConditionalCredential value — use {env.SECRET_NAME}
HeadersNoStatic headers added to every request (JSON)
TimeoutNoRequest timeout in seconds (default: 30)

OAuth2 Additional Fields

FieldDescription
Token URLOAuth2 token endpoint
Client IDOAuth2 client ID
Client SecretUse {env.OAUTH_SECRET}
ScopeSpace-separated OAuth2 scopes

Email

Sends transactional emails through your chosen email provider.

Supported Providers

ProviderDescription
MailjetAPI-based delivery, good for transactional and bulk
SendGridIndustry-standard email API
SMTPAny SMTP server (Google Workspace, Office 365, custom)
Amazon SESAWS Simple Email Service

Connection Fields

FieldRequiredDescription
NameYesDisplay name
ProviderYesMailjet / SendGrid / SMTP / SES
API KeyConditionalProvider API key — use {env.EMAIL_API_KEY}
From NameYesDefault sender display name
From EmailYesDefault sender email address
SMTP HostSMTP onlySMTP server hostname
SMTP PortSMTP onlyPort (587 for TLS, 465 for SSL, 25 for plain)
SMTP UserSMTP onlySMTP username
SMTP PasswordSMTP onlyUse {env.SMTP_PASSWORD}

Database (SQL)

Executes SQL queries against relational databases. Supports parameterized queries to prevent SQL injection.

Supported Databases

DatabaseDriverDefault Port
PostgreSQLJDBC5432
MySQLJDBC3306
Microsoft SQL ServerJDBC1433
Oracle DatabaseJDBC1521

Connection Fields

FieldRequiredDescription
NameYesDisplay name
DriverYesDatabase type
HostYesDatabase server hostname or IP
PortYesConnection port
DatabaseYesDatabase / schema name
UsernameYesDatabase user
PasswordYesUse {env.DB_PASSWORD}
SSLNoEnable SSL/TLS encryption
Pool SizeNoMax connection pool size (default: 5)

Security Note

Always use parameterized queries in Service Task (SQL) nodes. Never concatenate user input directly into SQL strings. The SQL node supports named parameters (?1, ?2) which the engine substitutes safely.


SMS

Sends text messages (SMS) to phone numbers.

Supported Providers

ProviderDescription
TwilioMarket leader for programmable SMS
Vonage (Nexmo)Global SMS delivery
Amazon SNSAWS Simple Notification Service

Connection Fields

FieldRequiredDescription
NameYesDisplay name
ProviderYesTwilio / Vonage / SNS
Account SIDTwilioTwilio account identifier
Auth TokenTwilioUse {env.TWILIO_AUTH_TOKEN}
From NumberYesRegistered sender number (E.164 format)
API KeyVonage/SNSUse {env.SMS_API_KEY}

AI Provider

Connects to large language model (LLM) providers used by AI Task and Voice Task nodes.

Supported Providers

ProviderModels Available
OpenAIGPT-4o, GPT-4o-mini, GPT-4 Turbo, o1, o3-mini, DALL-E (images)
AnthropicClaude 3.5 Sonnet, Claude 3.5 Haiku, Claude 3 Opus
Google GeminiGemini 1.5 Pro, Gemini 1.5 Flash, Gemini 2.0 Flash
Azure OpenAIGPT-4o, GPT-4 (deployed via Azure)
OllamaAny locally-hosted open-source model (Llama, Mistral, Qwen, etc.)

Connection Fields

FieldRequiredDescription
NameYesDisplay name
ProviderYesProvider type
API KeyYesUse {env.OPENAI_API_KEY}
ModelYesDefault model identifier
TemperatureNoSampling temperature 0.0–2.0 (default: 0.7)
Max TokensNoMaximum response token count
Base URLAzure/OllamaCustom API endpoint URL

AI Provider Selection Guide

Use CaseRecommended Provider
General-purpose reasoningOpenAI GPT-4o or Anthropic Claude 3.5 Sonnet
High-volume, cost-sensitiveGPT-4o-mini or Gemini Flash
Long context (200K+ tokens)Anthropic Claude 3 or Gemini 1.5 Pro
Private/on-premise deploymentOllama with a local model
Enterprise Microsoft environmentAzure OpenAI

MCP Server

Connects to any Model Context Protocol (MCP) server, enabling AI Tasks to call any tool exposed by that server.

Connection Fields

FieldRequiredDescription
NameYesDisplay name
URLYesMCP server endpoint URL
Auth TypeNoBearer Token or API Key
TokenConditionalAuth credential — use {env.MCP_TOKEN}

MCP tools exposed by the server are automatically discovered and made available to AI Tasks that use this connection.


Voice

Telephony connections for voice call automation using the Voice Task node.

Supported Providers

ProviderDescription
TwilioPSTN calls with real-time audio streaming
VonageVoice API for inbound/outbound calls

Connection Fields

FieldDescription
NameDisplay name
ProviderTwilio / Vonage
Account SID / KeyProvider credentials
Phone NumberRegistered Twilio/Vonage number for outbound calls
Webhook Base URLYour server URL for inbound call webhooks

Domain (Vertical)

Domain connections abstract over business-domain APIs — CRM, HR, payments, etc. — using a provider-agnostic model. The Domain Task node works in terms of domain operations (e.g., "create customer", "get invoice") rather than raw HTTP calls.

How It Differs from REST API

REST API ConnectionDomain Connection
You specify exact endpoint pathsYou select a domain operation by name
You build the request payload manuallyThe engine maps domain model to provider format
Output is raw JSONOutput is a normalized domain object
Works with any HTTP APIWorks only with supported vertical providers

Supported Domains

DomainOperations
CRMGet contact, create contact, update contact, search contacts
HRGet employee, list employees, create time-off request
PaymentsCreate invoice, get invoice, charge customer
TicketingCreate ticket, update ticket, get ticket, list tickets

Custom domains can be added by implementing the DomainProvider extension point.


Connection Best Practices

Use Secrets for All Credentials

Never paste raw API keys or passwords into connection fields. Always:

  1. Create a Secret in the Secrets page (/secrets)
  2. Reference it in the connection as {env.MY_SECRET_NAME}

The engine resolves {env.X} at runtime from the encrypted secrets store.

Separate Environments

Create one connection per service and configure credentials per-environment within it — do not create "Stripe Dev" and "Stripe Production" as separate connections.

When adding or editing a connection, configure credentials for each environment:

EnvironmentExample credentials
DevelopmentStripe test key (sk_test_...), sandbox database, test email account
ProductionStripe live key (sk_live_...), production database, live email account

The engine automatically uses Development credentials when a flow runs in Development, and Production credentials when a flow runs in Production. The flow definition never needs to change.

Test After Credential Rotation

When you rotate an API key or database password:

  1. Update the secret value in the Secrets page
  2. Open the connection and click Test Connection
  3. Verify it shows Connected before deploying

Name Connections Clearly

Good names prevent mistakes:

BadGood
StripeStripe Production
EmailMailjet Transactional
DBPostgreSQL Analytics DB
AIOpenAI GPT-4o Production

API: Managing Connections

Connections can also be managed via the REST API. The full endpoint reference is shown below.

# List all connections
GET /api/integrations

# Create a connection
POST /api/integrations

# Update a connection
PUT /api/integrations/{id}

# Test a connection
POST /api/integrations/{id}/test

# Delete a connection
DELETE /api/integrations/{id}