Destination Properties by Connector
Reference for all properties available in the to block when writing to each connector type. Every to block shares a set of universal attributes; the sections below document what target, operation, query, and params mean for each connector.
Universal Attributes
Available on every to block regardless of connector type:
| Attribute |
Type |
Default |
Description |
connector |
string |
required |
Target connector name |
target |
string |
— |
Resource identifier (meaning varies per connector — see below) |
operation |
string |
auto |
Override operation type (meaning varies per connector) |
format |
string |
json |
Output format: json, xml |
query |
string |
— |
Raw SQL with named parameters (:name, :id) — resolved from transformed payload |
query_filter |
map |
— |
NoSQL filter document (MongoDB) |
update |
map |
— |
NoSQL update document (MongoDB $set, $inc, etc.) |
params |
map |
— |
Extra connector-specific parameters (CEL expressions) |
when |
string |
— |
CEL condition — only write if true. Context: input, output |
parallel |
bool |
true |
In multi-to, run this destination in parallel |
transform |
block |
— |
Per-destination CEL transform (overrides flow-level transform) |
Data mapping
to.target → connector.Data.Target
to.operation → connector.Data.Operation
to.query → connector.Data.RawSQL
to.query_filter → connector.Data.Filters
to.update → connector.Data.Update
to.params → connector.Data.Params
transformed data → connector.Data.Payload
Database (SQLite, PostgreSQL, MySQL)
| Property |
Value |
target |
Table name (e.g., "users", "orders") |
operation |
INSERT (default for POST), UPDATE, DELETE |
query |
Raw SQL with named parameters (:name, :email). Resolved from payload |
params |
Not used (named params come from payload) |
Named parameters in query
When using query, named parameters like :name are replaced with the corresponding field from the transformed payload:
transform {
number = "input.payload.associateNumber"
name = "input.payload.name"
emails = "input.payload.emails.join(',')"
}
to {
connector = "magento_db"
target = "sales_associate"
query = "INSERT INTO sales_associate (number, name, emails) VALUES (:number, :name, :emails) ON DUPLICATE KEY UPDATE name = :name, emails = :emails"
}
Standard operations (no query)
Without query, the operation is inferred from the HTTP method or set explicitly:
# INSERT — payload fields become columns
to { connector = "db", target = "users" }
# UPDATE — filters from URL params, payload = SET clause
to { connector = "db", target = "users", operation = "UPDATE" }
# DELETE — filters from URL params
to { connector = "db", target = "users", operation = "DELETE" }
PostgreSQL specifics
INSERT ... RETURNING * returns the full created row (including id, created_at, etc.)
MongoDB
| Property |
Value |
target |
Collection name (e.g., "users") |
operation |
INSERT_ONE, INSERT_MANY, UPDATE_ONE, UPDATE_MANY, DELETE_ONE, DELETE_MANY, REPLACE_ONE |
query_filter |
MongoDB filter document (WHERE equivalent) |
update |
MongoDB update document ($set, $inc, $push, etc.) |
params |
{ upsert = true }, { documents = [...] } for INSERT_MANY |
to {
connector = "mongodb"
target = "orders"
operation = "UPDATE_ONE"
query_filter = { order_id = "input.order_id" }
update = { "$set" = { status = "completed", updated_at = "now()" } }
}
Message Queues (RabbitMQ, Kafka, Redis Pub/Sub, MQTT)
| Property |
RabbitMQ |
Kafka |
Redis Pub/Sub |
MQTT |
target |
Routing key |
Topic |
Channel |
Topic |
operation |
PUBLISH (implicit) |
PUBLISH |
PUBLISH |
PUBLISH |
params |
{ exchange = "..." } |
— |
— |
{ qos = 1, retain = true } |
# RabbitMQ
to {
connector = "rabbit"
target = "order.created"
}
# Kafka
to {
connector = "kafka"
target = "orders"
}
# MQTT with QoS
to {
connector = "mqtt"
target = "sensors/temperature"
params = { qos = 1, retain = true }
}
The transformed payload becomes the message body (JSON).
HTTP Client
| Property |
Value |
target |
Endpoint path (e.g., "/api/users", "POST /api/notify") |
operation |
HTTP method override: GET, POST, PUT, PATCH, DELETE |
to {
connector = "external_api"
target = "/webhooks/order-created"
operation = "POST"
}
The transformed payload becomes the request body. URL parameters from input.params become query string parameters.
GraphQL Client
| Property |
Value |
target |
Full GraphQL query/mutation string |
operation |
Not used (embedded in the query string) |
to {
connector = "graphql_api"
target = <<-EOF
mutation CreateUser($input: UserInput!) {
createUser(input: $input) { id name email }
}
EOF
}
The transformed payload becomes the GraphQL variables.
gRPC Client
| Property |
Value |
target |
RPC method name (e.g., "CreateUser", "users.UserService/CreateUser") |
operation |
Alternative to target for the method name |
to {
connector = "grpc_service"
target = "CreateUser"
}
The transformed payload becomes the protobuf message fields.
SOAP Client
| Property |
Value |
target |
SOAP operation name (e.g., "CreateItem", "GetOrder") |
operation |
Alternative to target for the operation name |
to {
connector = "soap_service"
target = "CreateItem"
}
The transformed payload becomes the SOAP body parameters.
File
| Property |
Value |
target |
File path (relative to connector base_path) |
operation |
WRITE (default), DELETE, COPY, MOVE |
params |
{ format = "csv" }, { append = true }, { sheet = "Data" } (Excel) |
# Write JSON
to {
connector = "files"
target = "output/report.json"
}
# Append to CSV
to {
connector = "files"
target = "logs/access.csv"
params = { format = "csv", append = true }
}
# Write to Excel sheet
to {
connector = "files"
target = "reports/monthly.xlsx"
params = { sheet = "March" }
}
Format is auto-detected from file extension. The transformed payload becomes the file content.
S3
| Property |
Value |
target |
S3 object key (e.g., "uploads/document.pdf") |
operation |
PUT (default), DELETE, COPY |
params |
content, content_type, storage_class, acl, metadata |
to {
connector = "s3"
target = "'uploads/' + input.user_id + '/avatar.png'"
params = {
content = "output._binary"
content_type = "'image/png'"
storage_class = "'STANDARD'"
}
}
Exec
| Property |
Value |
target |
Command to execute |
operation |
Not used |
params |
{ args = [...] }, { stdin = "..." } |
to {
connector = "exec"
target = "convert"
params = { args = ["-resize", "800x600", "input.file_path", "output.jpg"] }
}
Elasticsearch
| Property |
Value |
target |
Index name (e.g., "products") |
operation |
index (default), update, delete, bulk |
to {
connector = "search"
target = "products"
operation = "index"
}
The transformed payload becomes the document to index. Returns _id, status.
PDF
| Property |
Value |
target |
Template path fallback (if not in connector config or payload) |
operation |
generate (returns binary for HTTP) or save (writes file) |
to {
connector = "invoice_pdf"
operation = "generate"
}
Template is resolved: payload template field > connector config template > target fallback. All other payload fields become template variables ({{.field_name}}). Special payload fields: filename (for Content-Disposition).
WebSocket
| Property |
Value |
target |
Room name (for send_to_room) |
operation |
broadcast, send_to_room, send_to_user |
# Broadcast to all clients
to { connector = "ws", operation = "broadcast" }
# Send to specific room
to { connector = "ws", operation = "send_to_room", target = "order-updates" }
# Send to specific user (user_id from payload)
to { connector = "ws", operation = "send_to_user" }
For send_to_user, the payload or filters must include user_id.
SSE (Server-Sent Events)
| Property |
Value |
target |
Room name |
operation |
broadcast, send_to_room |
to { connector = "sse", operation = "send_to_room", target = "dashboard" }
TCP Client
| Property |
Value |
target |
Connection identifier |
operation |
SEND (implicit) |
The payload is serialized according to the connector's protocol setting (json, msgpack, nestjs).
Notification Connectors
Notification connectors receive the transformed payload as the message. The payload fields map to the notification's properties.
Email
| Payload field |
Type |
Description |
to |
array |
[{email, name}] recipients |
subject |
string |
Email subject |
text_body |
string |
Plain text body |
html_body |
string |
HTML body |
template |
string |
Override connector-level template path |
template_data |
map |
Variables for template rendering |
cc, bcc |
array |
CC/BCC recipients |
attachments |
array |
[{filename, content, content_type}] |
to { connector = "email_smtp", operation = "send" }
Template resolution: payload template > connector config template.
Slack
| Payload field |
Type |
Description |
text |
string |
Message text |
channel |
string |
Channel name or ID |
blocks |
array |
Slack Block Kit blocks |
thread_ts |
string |
For threaded replies |
Discord
| Payload field |
Type |
Description |
content |
string |
Message text |
channel_id |
string |
Channel ID |
embeds |
array |
Discord embed objects |
SMS
| Payload field |
Type |
Description |
to |
string |
Phone number (E.164) |
message |
string |
SMS body |
Push
| Payload field |
Type |
Description |
device_token |
string |
Target device |
title |
string |
Notification title |
body |
string |
Notification body |
data |
map |
Custom data payload |
Webhook
| Payload field |
Type |
Description |
url |
string |
Override connector URL |
method |
string |
HTTP method |
headers |
map |
Extra headers |
body |
any |
Request body |
Special Response Fields
These fields in the flow result have special meaning when returned through the REST connector:
| Field |
Type |
Recognized by |
Purpose |
_binary |
string (base64) |
REST |
Serve as binary download |
_content_type |
string |
REST |
MIME type for binary response |
_filename |
string |
REST |
Content-Disposition filename |
http_status_code |
int/string |
REST, SOAP |
Override HTTP status code |
grpc_status_code |
int/string |
gRPC |
Override gRPC status code |
_response_headers |
map |
REST (aspects) |
Extra HTTP response headers |
See also: Flows for to block syntax, Configuration Reference for all HCL blocks.