Docs / Strand / nodes/connectors
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 Connectors (OpenAI, Anthropic, Gemini) | 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. |
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 connectors provide LLM integration with prompting, system instructions, MCP tool access, automatic retries, and conversation memory across workflow runs. Supports OpenAI, Anthropic Claude, and Google Gemini.
See AI Connectors 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 Connectors | OpenAI | Anthropic | Google Gemini | MCP Server
- Messaging: Slack | Discord | Telegram | Twilio
- Databases: Redis | Kafka
- Enterprise: Google Sheets | Home Assistant
- Contact Entity Message
- Email: Tendrl Email | SMTP
Tendrl