Context fields are the data an ai_call step sees. Each has a label (shown to the model) and a value (usually a {{...}} template), plus a type that determines what actually happens to the value before it reaches the model.
text
Passed through as-is — the value is inserted into the prompt directly, no fetching or processing. A value that is one whole record or list (for example {{get_order}}) is inserted as JSON.
url
Fetched over HTTPS (SSRF-checked first — private IPs, localhost, and non-allowlisted hosts are rejected), HTML tags and entities stripped, then truncated to 4000 characters. A non-2xx response fails the step (502).
audio
SSRF-checked, downloaded, then transcribed before the main call runs. The transcription model is picked automatically from the providers the workspace has a key for — the default provider if it can transcribe, otherwise another one that can. To pin it, add taskModels: [{ task: "transcription", provider, model }] to the step.
Needs a provider that can transcribe
Not every provider can. If none of the workspace's enabled providers can transcribe, the step fails with a message naming which provider to enable in Tenant Settings → AI. See Config → Which model runs.
file
SSRF-checked, downloaded, and read as text — accepted content types are text/*, JSON, CSV, and XML, truncated to 8000 characters. Anything else (PDF, DOCX, images-as-files, etc.) is rejected with a 400. For a PDF, add a Document Extract step before the ai_call and pass its {{step.combinedText}} as a text field.
image
Collected as a URL and sent to the model as a vision content part (not fetched/processed by the step itself — the provider's API fetches it). Two real constraints:
- Provider support — OpenAI and Anthropic vision models only. Gemini silently ignores image context fields (logged as a warning, not an error) — swap providers if you need vision on Gemini-only setups.
- Streaming disables images — when the step runs over the WebSocket (
customapi_run, live token streaming), image context is not supported at all — multimodal only works on the synchronous HTTP path.
SSRF protection applies to url/audio/file
All three fetch-based context types are checked against the same domain-safety rules as connector/webhook steps — private IPs and localhost are always blocked; if your org has an allowed_domains list configured, only matching hosts are fetchable.