Skip to content

Manual Connection Objects

Any step that takes a connection input also accepts a plain object, not just a {{ $connections.<name> }} reference. The runner uses it as-is.

When the credentials aren’t known until runtime. The canonical case: a form submission (or webhook body) carries a partner’s API credentials, and the workflow needs to use them for that one execution. There’s no stored connection to reference because the credentials are different every run.

Stored connections are still the right default wherever possible.

The object’s fields are whatever a stored connection of that type would have. Pass it inline, or stage it once with core.set-variable and reference it as {{ $vars.my_conn }}.

For OAuth-backed steps there’s no automatic token refresh — you have to acquire the access token yourself first (typically a core.http call to the provider’s token endpoint), then pass it as { "accessToken": "..." }.

Connection redirection via {{ $env.MY_CONN }} doesn’t work either — it expects a stored-connection name on the other end, not an object.

{
"stepId": "send-sms",
"stepType": "core.http",
"input": {
"connection": {
"accountSid": "{{ initial.twilio_sid }}",
"authToken": "{{ initial.twilio_token }}"
},
"url": "https://api.twilio.com/2010-04-01/Accounts/{{ initial.twilio_sid }}/Messages.json",
"method": "POST",
"form": {
"From": "{{ initial.from_number }}",
"To": "{{ initial.to_number }}",
"Body": "Hello from QuickFlo"
}
}
}

region is one of US, CA, EU, UK, IN. The domainId property is only needed for Five9 SMS or the latest admin REST APIs.

{
"stepId": "run-report",
"stepType": "five9.run-report",
"input": {
"connection": {
"username": "{{ initial.five9_username }}",
"password": "{{ initial.five9_password }}",
"region": "{{ initial.five9_region }}"
},
"folderName": "Reports",
"reportName": "Daily Call Summary"
}
}

Three steps: exchange the credentials for an access token, stash it in $vars, then use it as { "accessToken": ... } on every typed Zoom step.

{
"stepId": "auth",
"stepType": "core.http",
"input": {
"url": "https://zoom.us/oauth/token",
"method": "POST",
"headers": {
"Authorization": "{{ initial.client_id | basicAuthHeader: initial.client_secret }}"
},
"searchParams": {
"account_id": "{{ initial.account_id }}",
"grant_type": "account_credentials"
}
}
}
{
"stepId": "stage-zoom-conn",
"stepType": "core.set-variable",
"input": {
"zoom_conn": {
"accessToken": "{{ auth.body.access_token }}"
}
}
}
{
"stepId": "list-units",
"stepType": "zoom.list-units",
"input": {
"connection": "{{ $vars.zoom_conn }}",
"page_size": 300
}
}