Connector Nodes
Connector nodes use saved connectors to interact with external services, providing reusable authentication and centralized configuration.
Overview#
Connector nodes allow you to:
- Reuse authentication - Configure credentials once, use everywhere
- Centralize configuration - Update settings in one place
- Secure credentials - All sensitive data is encrypted at rest
- Override settings - Customize per-node when needed
Benefits
- Store credentials securely (encrypted)
- Update credentials without changing workflows
- Share connectors across multiple workflows
- Test connectors independently
Connector Capabilities#
Each connector has a direction that describes what it can do, and one or more operations you can select when configuring a node.
| Direction | Meaning |
|---|---|
| Read / Write | Can both send data to and retrieve data from the service |
| Write Only | Can only forward/send data to the service (fire-and-forget) |
Read operations load data into the workflow
Read operations (e.g., S3get_object, SQSreceive_message) read data into the node's output payload as JSON. They do not download or save files to disk.
Quick Reference#
| Connector | Direction | Operations |
|---|---|---|
| HTTP REST API | Read / Write | GET, POST, PUT, PATCH, DELETE, HEAD |
| MQTT | Write Only | Publish |
| AWS S3 | Read / Write | Upload Object, Download Object, List Objects |
| AWS SQS | Read / Write | Send Message, Receive Message |
| AWS SNS | Write Only | Publish |
| AWS EventBridge | Write Only | Put Events |
| AWS Lambda | Read / Write | Invoke Function |
| Azure Blob Storage | Read / Write | Upload Blob, Download Blob |
| Azure Service Bus | Write Only | Send Message |
| Azure Event Grid | Write Only | Publish Event |
| Azure Queue Storage | Read / Write | Send Message, Receive Message |
| Google Cloud Storage | Read / Write | Upload Object, Download Object |
| Google Pub/Sub | Read / Write | Publish, Subscribe |
| Google Firebase FCM | Write Only | Send Notification |
| Google Firestore | Read / Write | Set Document, Get Document, Query Collection |
| AI Agent (OpenAI, Anthropic, Gemini, OpenAI-compatible) | Read / Write | Chat Completion |
| MCP Server | Read / Write | Tool Call (auto-discovered) |
| Contact Entity Message | Write Only | Send Message, Send File |
| Tendrl Email | Write Only | Send Email |
| SMTP Email | Write Only | Send Email |
| Slack | Write Only | Send Message, Update Message, Add Reaction |
| Discord | Write Only | Send Message, Send Webhook, Add Reaction |
| Telegram | Write Only | Send Message, Send Photo, Send Document |
| Twilio | Write Only | Send SMS |
| Google Sheets | Read / Write | Read Range, Write Range, Append Rows |
| Redis | Read / Write | Get, Set, Delete, Publish |
| Apache Kafka | Read / Write | Produce, Consume |
| Home Assistant | Read / Write | Call Service, Get State, Fire Event, Render Template |
| AWS DynamoDB | Read / Write | Put Item, Get Item, Query |
| AWS Kinesis | Read / Write | Put Record, Get Records |
| AWS CloudWatch | Read / Write | Put Metric Data, Get Metric Data, Put Log Events |
Connector Health Monitoring#
Strand tracks connector health with a circuit breaker pattern:
- Consecutive failures are tracked per connector
- After 5 consecutive failures, a connector is automatically disabled
- Health status, last error, and last health check time are recorded
- Use the Reset Circuit Breaker action to re-enable a disabled connector
Security and credentials#
These guarantees apply to every connector; individual pages don't repeat them:
- All credential fields (API keys, passwords, tokens, secrets) are encrypted at rest with Fernet
- Credentials are only decrypted at execution time, never stored or logged in plaintext
- Any config field accepts
{{ vault.key }}to pull from the Global Vault. Vault values rendered into outputs are automatically masked back to their{{ vault.key }}placeholder in run logs and step output
---
Platform Nodes#
These nodes are always available in the node selector and do not require a saved connector instance; they integrate with built-in Tendrl platform services. They appear alongside the connector nodes when you add a node.
Surface: Scan Payload (platform.surface.scan)#
Scans payload content for threats using Surface and returns a threat level, score, and indicators of compromise.
Configuration:
| Field | Required | Description |
|---|---|---|
content |
Yes | Payload content to scan. Supports Jinja templates. |
reject_on |
No | Comma-separated threat levels that set safe=false. Default: malicious,suspicious. |
profile_id |
No | Scan profile to use. Leave empty for the account default. |
label |
No | Optional label for the scan (supports Jinja). |
timeout |
No | Request timeout in seconds, 5–120 (default: 30). |
Output: scan results are written flat onto the payload (not wrapped in a data envelope):
| Field | Description |
|---|---|
threat_level |
Clean, Informational, Suspicious, or Malicious (title-case; reject_on matching is case-insensitive) |
score |
0-100 safety score (higher is safer) |
iocs |
List of indicators of compromise |
primary_threat |
Name of the primary detected threat |
recommended_action |
Recommended handling action |
safe |
true unless threat_level is in reject_on |
service |
surface |
Branch on the result with an If/Else Logic node, e.g. {{ payload.safe }} or {{ payload.threat_level == 'malicious' }}.
Contact: Send Message (platform.contact.send)#
Sends a message via Contact using an entity API key.
Configuration:
| Field | Required | Description |
|---|---|---|
api_key |
Yes | Contact entity API key. Supports Jinja (e.g. {{ vault.contact_key }}). |
dest |
No | Destination entity name. |
tags |
No | Comma-separated routing tags. |
data |
No | Message data payload. |
timeout |
No | Request timeout in seconds, 5–120 (default: 30). |
Output: the standard request envelope (data, status) with service: contact and operation: send added; an error field is set on a failed status.
Contact: Send File (platform.contact.send_file)#
Sends a file into Contact using an entity API key (Contact file transfer). The sending entity needs the entity:SendFiles permission and pays storage until the file is consumed.
Configuration:
| Field | Required | Description |
|---|---|---|
api_key |
Yes | Contact entity API key. Supports Jinja (e.g. {{ vault.contact_key }}). |
content_base64 |
Yes | File bytes, base64-encoded. Defaults to {{ payload.content_base64 }} so it chains straight from a Contact: Fetch File or HTTP node. |
file_name |
No | File name including extension (drives Contact's file-type allowlist). |
content_type |
No | MIME type; inferred from the extension if omitted. |
dest |
No | Recipient entity name or resource path, for direct / group / cross-account delivery. |
tags |
No | Comma-separated routing tags that route the file to subscribing Strand workflows/connectors. |
kind |
No | Set to clip for the motion gallery (no recipient). |
meta |
No | Optional sender metadata, ≤8 KB (supports Jinja). |
timeout |
No | Request timeout in seconds, 5–120 (default: 30). |
Set exactly one delivery target: dest, tags, or kind: clip. See Delivery modes for how each routes.
Output: on success, transfer_id, sha256, size, and mode are added to the payload alongside service: contact and operation: send_file. A Contact rejection (missing entity:SendFiles permission, over the monthly-data or size limit, an unsupported file type, or a file flagged by Surface) fails the node.
Contact: Update State (platform.contact.update_state)#
Updates an entity's state table in Contact.
Configuration:
| Field | Required | Description |
|---|---|---|
api_key |
Yes | Contact entity API key (supports Jinja). |
entity |
Yes | Entity name to update (supports Jinja). |
state |
Yes | State data to write (supports Jinja). |
replace |
No | true replaces the entire state table; default merges. |
timeout |
No | Request timeout in seconds, 5–120 (default: 30). |
Output: the standard request envelope with service: contact and operation: update_state added; an error field is set on a failed status.
---
HTTP Connectors#
Direction: Read / Write
Comprehensive HTTP connector for REST APIs, webhooks, and HTTP-based services.
HTTP Connector Configuration#
Required:
- URL - Base URL for the API (e.g.,
https://api.example.com)
Optional:
- Default Method - Default HTTP method (GET, POST, PUT, PATCH, DELETE, HEAD)
- Allowed Methods - Methods available in node dropdown (default: all methods)
- Default Headers - Headers included in all requests (supports Jinja2 templating)
- Authentication - See authentication options below
- Timeout - Request timeout in seconds (1-300, default: 30)
- Follow Redirects - Automatically follow HTTP redirects (default: true)
- Max Redirects - Maximum redirects to follow (default: 10)
- Verify SSL - Verify SSL/TLS certificates (default: true)
- SSL Certificates - Client certificates for mutual TLS
Authentication Options#
None#
No authentication (default).
Basic Authentication#
{
"type": "basic",
"username": "myuser",
"password": "mypassword"
}
Bearer Token#
{
"type": "bearer",
"token": "your-token-here"
}
API Key#
{
"type": "api_key",
"api_key_header": "Authorization",
"api_key_value": "your-api-key",
"api_key_location": "header"
}
Location options:
header- API key in header (default)query- API key as query parameter
OAuth2#
{
"type": "oauth2",
"oauth2": {
"token_url": "https://oauth.example.com/token",
"client_id": "your-client-id",
"client_secret": "your-client-secret",
"scope": "read write",
"grant_type": "client_credentials"
}
}
Grant types:
client_credentials- Client credentials flow (default)authorization_code- Authorization code flow
AWS Signature V4#
{
"type": "aws_sigv4",
"aws_sigv4": {
"region": "us-east-1",
"service": "execute-api",
"access_key_id": "AKIAIOSFODNN7EXAMPLE",
"secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"session_token": "optional-session-token"
}
}
Service identifiers:
execute-api- AWS API Gateways3- Amazon S3es- Amazon Elasticsearch
Custom Headers#
{
"type": "custom",
"custom_headers": {
"X-Custom-Auth": "{{ payload.token }}",
"X-API-Version": "v2"
}
}
HTTP Node Configuration#
Override at node level:
- Endpoint - Path appended to base URL (supports Jinja2)
- Method - HTTP method (must be in allowed methods)
- Headers - Additional headers (merged with connector headers)
- Body - Request body (supports Jinja2 templating)
- Query Parameters - URL query parameters
HTTP Example#
Connector Setup:
{
"url": "https://api.example.com",
"default_method": "POST",
"auth": {
"type": "bearer",
"token": "secret-token"
},
"default_headers": {
"Content-Type": "application/json",
"X-Client-Version": "1.0"
}
}
Node Usage:
- Endpoint:
/users/{{ payload.user_id }} - Method:
GET - Additional Headers:
{"X-Request-At": "{{ meta.received_at }}"}
Result: GET https://api.example.com/users/123 with Bearer token and custom headers.
---
MQTT Publish Connectors#
Direction: Write Only
Publish messages to MQTT message brokers with support for TLS/SSL and authentication.
MQTT Connector Configuration#
Required:
- Broker URL - MQTT broker address
- Unencrypted:
mqtt://broker.example.com:1883 - TLS/SSL:
mqtts://broker.example.com:8883
Optional:
- Client ID - MQTT client identifier (auto-generated if not provided)
- Username - Broker username for authentication (encrypted)
- Password - Broker password for authentication (encrypted)
- Keepalive - Keepalive interval in seconds (default: 60)
- Clean Session - Start with clean session (default: true)
- TLS/SSL Configuration - See TLS options below
- Default Topic - Default topic (can be overridden at node level)
- QoS - Default Quality of Service (0, 1, or 2, default: 0)
- Timeout - Connection timeout in seconds (default: 30)
- Retain - Retain messages on broker (default: false)
TLS/SSL Configuration#
{
"tls": {
"enabled": true,
"ca_certs": "/path/to/ca-cert.pem",
"certfile": "/path/to/client-cert.pem",
"keyfile": "/path/to/client-key.pem",
"cert_reqs": "required",
"tls_version": "tlsv1.2"
}
}
Options:
- enabled - Enable TLS/SSL (default: false)
- ca_certs - CA certificate file for server validation
- certfile - Client certificate for mutual TLS
- keyfile - Client private key for mutual TLS
- cert_reqs - Certificate validation level:
none,optional,required(default) - tls_version - TLS protocol version:
tlsv1,tlsv1.1,tlsv1.2(default),tlsv1.3
Quality of Service (QoS) Levels#
- QoS 0 - At most once (fire and forget, fastest)
- QoS 1 - At least once (acknowledged delivery)
- QoS 2 - Exactly once (guaranteed delivery, slowest)
MQTT Node Configuration#
Required:
- Topic - MQTT topic to publish to (supports Jinja2 templating)
Optional:
- QoS - Quality of Service (0, 1, or 2, overrides connector default)
- Retain - Retain message (overrides connector default)
- Payload - Message payload (string with Jinja2, or object, defaults to event payload as JSON)
- Timeout - Publish timeout (overrides connector default)
MQTT Example#
Connector Setup:
{
"broker_url": "mqtts://broker.example.com:8883",
"username": "mqtt_user",
"password": "mqtt_password",
"tls": {
"enabled": true,
"cert_reqs": "required"
},
"qos": 1
}
Node Configuration:
- Topic:
events/{{ payload.device_id }}/{{ payload.event_type }} - QoS:
2(overrides connector default) - Payload:
{{ payload | tojson }}
---
AWS Connectors#
Amazon Web Services connectors for S3, SQS, SNS, EventBridge, and Lambda.
S3, SQS, and Lambda are Read / Write. SNS and EventBridge are Write Only (forward data).
Common AWS Configuration#
All AWS connectors require:
- Region - AWS region code (e.g.,
us-east-1,eu-west-1) - Access Key ID - AWS access key (encrypted)
- Secret Access Key - AWS secret key (encrypted)
AWS S3#
Amazon Simple Storage Service for object storage.
Direction: Read / Write
Operations: put_object (write), get_object (read), list_objects (read)
S3 Node Configuration:
- Operation - Operation type
- Bucket - S3 bucket name (if not set in connector)
- Key - Object key/path (required for
put_objectandget_object)
S3 Example:
- Operation:
put_object - Key:
events/{{ meta.received_at }}/{{ payload.id }}.json
AWS SQS#
Amazon Simple Queue Service for message queuing.
Direction: Read / Write
Operations: send_message (write), receive_message (read)
SQS Node Configuration:
- Operation - Operation type
- Queue URL - SQS queue URL (if not set in connector)
- Max Messages - Maximum messages to receive (default: 1, for receive_message)
AWS SNS#
Amazon Simple Notification Service for pub/sub messaging.
Direction: Write Only
Operations: publish
SNS Node Configuration:
- Topic ARN - SNS topic ARN (if not set in connector)
- Subject - Message subject (default: "Event Notification")
AWS EventBridge#
Amazon EventBridge for event-driven architecture.
Direction: Write Only
Operations: put_events
EventBridge Node Configuration:
- Event Bus Name - Event bus name (defaults to
default) - Source - Event source identifier (default:
strand) - Detail Type - Event detail type (default:
Workflow Event)
AWS Lambda#
Amazon Lambda for serverless function invocation.
Direction: Read / Write
Operations: invoke
Lambda Node Configuration:
- Function Name - Lambda function name or ARN (if not set in connector)
- Invocation Type -
RequestResponse(synchronous, default) orEvent(asynchronous)
---
Azure Connectors#
Microsoft Azure connectors for Storage, Service Bus, Event Grid, and Queue Storage.
Blob Storage and Queue Storage are Read / Write. Service Bus and Event Grid are Write Only (forward data).
Azure Blob Storage#
Direction: Read / Write
Configuration: Account Name, Account Key (encrypted), Container Name (optional)
Operations: upload (write), download (read)
Blob Storage Node Configuration:
- Operation - Operation type
- Container Name - Blob container name (if not set in connector)
- Blob Name - Blob name/path
Azure Service Bus#
Direction: Write Only
Configuration: Connection String (encrypted), Queue Name or Topic Name (optional)
Operations: send
Service Bus Node Configuration:
- Queue Name or Topic Name - Queue or topic name (if not set in connector)
Azure Event Grid#
Direction: Write Only
Configuration: Endpoint URL, Access Key (encrypted)
Event Grid Node Configuration:
- Subject - Event subject (default:
strand/event) - Event Type - Event type (default:
WorkflowEvent)
Azure Queue Storage#
Direction: Read / Write
Configuration: Account Name, Account Key (encrypted), Queue Name (optional)
Operations: send_message (write), receive_message (read)
---
Google Cloud Connectors#
Google Cloud and Firebase connectors for Storage, Pub/Sub, Firebase, and Firestore.
Cloud Storage, Pub/Sub, and Firestore are Read / Write. Firebase FCM is Write Only (push notifications).
Common Google Configuration#
All Google connectors require:
- Project ID - Google Cloud or Firebase project ID
- Credentials JSON - Google service account JSON credentials (encrypted)
Google Cloud Storage#
Direction: Read / Write
Operations: upload (write), download (read)
Cloud Storage Node Configuration:
- Operation - Operation type
- Bucket Name - Cloud Storage bucket name (if not set in connector)
- Blob Name - Blob name/path
Google Pub/Sub#
Direction: Read / Write
Operations: publish (write), subscribe (read)
Pub/Sub Node Configuration:
- Operation - Operation type
- Topic Name - Pub/Sub topic name (for publish)
- Subscription Name - Subscription name (for subscribe)
Google Firebase Cloud Messaging#
Direction: Write Only
Push notifications via FCM.
FCM Node Configuration:
- Token - FCM device token
- Title - Notification title (default: "Notification")
- Body - Notification body
Google Firestore#
Direction: Read / Write
NoSQL document database operations.
Operations: set (write), get (read), query (read)
Firestore Node Configuration:
- Collection - Firestore collection name
- Operation - Operation type
- Document ID - Document ID (required for
get, optional forset) - Filters - Query filters for
queryoperation - Limit - Query result limit (default: 10)
---
AI/LLM Connectors#
Direction: Read / Write
AI Agent nodes provide LLM integration with prompting, system instructions, reasoning control, MCP tool access, automatic retries, and conversation memory across workflow runs. They run through an AI Provider: OpenAI, Anthropic Claude, Google Gemini, or any OpenAI-compatible endpoint.
See AI Agent for full node configuration, output format, memory, and examples.
---
MCP Server Connectors#
Direction: Read / Write
Model Context Protocol (MCP) server connectors provide external tool access for AI nodes. MCP connectors are selected at the AI node level, not used as standalone nodes.
Connector Configuration:
- URL (required) - Streamable HTTP endpoint for the MCP server
- Auth Type - Authentication method:
none(default),api_key, orbearer - API Key - API key for authentication (encrypted, when auth type is
api_key) - Bearer Token - Bearer token (encrypted, when auth type is
bearer) - Custom Headers - Additional HTTP headers for requests
- Tool Prefix - Optional prefix added to all tool names (helps avoid conflicts)
- Timeout - Request timeout in seconds, 5-300 (default: 30)
Using MCP with AI Nodes#
- Create an MCP server connector with the server URL and authentication
- Add an AI connector node to your workflow
- In the AI node configuration, select the MCP server connector(s)
- The AI model can then invoke tools provided by the MCP server
Tip: You can attach multiple MCP server connectors to a single AI node, giving the model access to tools from multiple servers.
---
Contact Entity Message Connectors#
Direction: Write Only
Send messages to contact entities in the Tendrl platform.
See Contact Message Connector for detailed documentation.
---
Email Connectors#
Tendrl Email#
Direction: Write Only
Send emails using Tendrl's managed email service. No server setup needed: just configure recipients, subject, and body.
See Tendrl Email Connector for detailed documentation.
SMTP Email#
Direction: Write Only
Send emails using your own SMTP server. Full control over your email infrastructure.
See SMTP Email Connector for detailed documentation.
---
Slack Connectors#
Direction: Write Only
Send messages and interact with Slack workspaces using a Bot Token. Post to channels, update messages, and add reactions.
Operations: send_message (write), update_message (write), add_reaction (write)
See Slack Connector for detailed documentation.
---
Using Connectors in Workflows#
Selecting a Connector#
- Add a Connector node to your workflow
- The connector selector appears
- Choose from your saved connectors
- Configure node-specific settings
Templating in Connector Configs#
Many connector fields support Jinja2 templating:
- Topics/Queues -
events/{{ payload.device_id }} - Keys/Paths -
data/{{ meta.received_at }}/{{ payload.id }}.json - Headers -
{{ payload.api_token }}
---
Managing Connectors#
Connectors are managed through the Connectors page:
- Navigate to Connectors from the sidebar
- Click "Add Connector" to create a new connector
- Select connector type and configure
- Edit or delete connectors from the list
- Filter by All, Configured, or Unconfigured types
Connector Management
- Group connectors by environment (Production, Staging, Development)
- Use naming conventions (e.g.,AWS-Prod-S3,Azure-Dev-Storage)
- Regularly rotate credentials and update connectors
- Test connectors after credential updates
Best Practices#
Tips
1. Create connectors for frequently used services - Reuse authentication and configuration
2. Use descriptive connector names -AWS-Production-S3,Azure-Staging-Storage
3. Store sensitive data in connectors - Never hardcode credentials in workflows
4. Update connectors when credentials change - All workflows using the connector automatically use new credentials
5. Test connectors before using - Verify configuration in connector manager
6. Use node-level overrides sparingly - Prefer connector defaults when possible
7. Document connector purposes - Add descriptions when creating connectors
Related Documentation#
- Connector Output Structure - Standardized response format
- HTTP Request Node - Direct HTTP requests without connectors
- Templating Guide - Using Jinja2 in configurations
Individual Connector Docs#
- HTTP | MQTT
- AWS: S3 | SQS | SNS | EventBridge | Lambda | DynamoDB | Kinesis | CloudWatch
- Azure: Blob Storage | Service Bus | Event Grid | Queue Storage
- Google Cloud: Cloud Storage | Pub/Sub | Firebase FCM | Firestore
- AI/LLM: AI Agent | AI Provider | MCP Server
- Messaging: Slack | Discord | Telegram | Twilio
- Databases: Redis | Kafka
- Enterprise: Google Sheets | Home Assistant
- Contact Entity Message
- Email: Tendrl Email | SMTP
Tendrl