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.

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 via OpenAI Whisper — literally https://api.openai.com/v1/audio/transcriptions, always, regardless of which provider you've configured as your main AI provider.

Requires an OpenAI key even if you're not using OpenAI

Audio context transcription needs an OpenAI-protocol provider configured with a valid key somewhere in Tenant Settings → AI — the engine searches all your configured providers for one with protocol openai and uses its key just for Whisper. If your workspace only has Anthropic or a Kimi/DeepSeek-style provider configured, an audio context field fails with a 400 until you add an OpenAI key too.

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 telling you to pre-process it into text first; there's no binary/document parsing built in.

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.