Placeholders Reference: Injecting Context Into Your Tools and Mates
Every placeholder available in allmates.ai — member identity, personal connectors, tool credentials, attachments and Mate instruction variables — with where each one works and how to fix the errors they raise.
Last updated 15 days ago
Placeholders let you write a configuration once and have allmates.ai fill in the right value at runtime — the person who triggered the tool, their organization, their personal credentials, the file they just attached.
A placeholder looks like this:
{{member.email}}When a Mate calls a tool, every placeholder found in that tool's configuration is replaced by its real value before the request leaves the platform. Nothing is stored resolved: the substitution happens per call, for the person who made the request.
Where placeholders work
Spaces inside the braces are tolerated: {{ member.id }} works exactly like {{member.id}}.
Note for older tools. Custom REST tools created before the current tool runtime resolve placeholders in their credentials only. Headers, OpenAPI schema and call arguments are left untouched. Re-create or migrate the tool to get full resolution.
Quick reference
Placeholders are case-sensitive. {{member.fullName}} is valid; {{member.fullname}} is not and will fail the tool call.
Member placeholders
These describe the human who triggered the tool call — not the Mate, and not the owner of the tool. If three people in a workspace use the same Mate, each call carries their own identity.
Typical uses: passing the requester's email to a ticketing tool so tickets are created under their name, filtering a CRM query by owner, or writing an audit trail on your side.
If a member has not filled in a field (no avatar, no last name), the placeholder resolves to an empty value rather than failing.
Personal variables: member.vars
Every member can store their own credentials from Profile → Connectors. A connector is a named group of key/value pairs — for example a connector holding an apiKey and a baseUrl for your personal CRM account. You then read them with {{member.vars.<group>.<key>}}.
The group name in the placeholder is the connector's identifier, not its display name. When you create a connector, allmates.ai derives that identifier from the name you typed: accents are removed, every non-alphanumeric character becomes a dash, and everything is lowercased.
Renaming a connector later does not change its identifier, so placeholders that already point at it keep working.
Values are encrypted at rest and are never displayed back in chat or in logs.
The key is the name of the value inside the connector — free-form on purpose, so it can match whatever your tool expects (
apiKey,baseUrl,token…).If the connector or the key does not exist, the tool call stops with a clear error instead of sending an empty credential.
This is the right choice when each person must use their own account on a third-party service, and the tool does not declare that credential itself.
Personal connectors exist at member level only. There is no organization equivalent of
vars— shared values are declared by the tool and filled in as organization credentials, described below.
Tool credentials: member.toolInstance and organization.toolInstance
Most tools declare the credentials they need — an API key, a base URL, a client secret. Those declared fields are filled from the tool's own settings page and referenced with the toolInstance sub-namespace:
{{member.toolInstance.apiKey}} # each member fills in their own
{{organization.toolInstance.apiKey}} # one value shared by the whole organizationThe scope is decided by the tool, not by the person writing the placeholder:
member — the value is siloed per user. Everyone must fill it in the first time they use the tool; the Mate will ask them in the conversation.
organization — the value is shared. An organization admin configures it once from the tool's settings page.
Writing {{organization.toolInstance.apiKey}} for a field the tool declares as member is rejected as a configuration error. The tool's declaration is the source of truth for where the value lives, so the mismatch is never silently corrected.
Fields marked as optional resolve to an empty value when nothing is stored and no default is set. Required fields that are missing stop the call and prompt the person to fill them in — all missing fields at once, not one at a time.
Unlike personal connectors, you never name the tool here: toolInstance always refers to the tool currently being called, so the same instructions work for every tool that declares an apiKey. Only keys the tool declares can be read this way — an undeclared key is reported as a configuration error rather than resolving to nothing.
Platform secrets: instance
Reserved for allmates.ai app administrators, managed from Admin → Instance placeholders. The syntax is {{instance.<placeholder-id>.<key>}}:
{{instance.vendor.apiKey}}These are platform-level secrets shared across organizations — typically the credentials of a service allmates.ai operates on your behalf. They are not user-fillable, and a placeholder that is disabled or undefined fails the call rather than resolving to nothing.
Attachment placeholders
Use these to hand a file to an external service — for instance, sending the document a user just dropped in the chat to a signature or OCR API.
{{attachment.latest.signedUrl}}
{{attachment.<attachment-id>.filename}}
{{agent.knowledge.attachment.*.signedUrl}}Selector — latest and * both mean the most recent attachment in this context. You can also pass a specific attachment identifier.
Available fields
The attachment scope looks at the files of the current conversation. The agent.knowledge.attachment scope looks only at the files attached to the Mate's knowledge.
Signed URLs are short-lived by design — they are generated for the call and are not meant to be stored on the other side.
Mate instruction variables
A second, separate family of variables can be used inside a Mate's instructions. They are written in upper case with a DFIO_ prefix and are replaced when the Mate's system prompt is assembled for a chat.
Two behaviours worth knowing:
Organization and workspace variables resolve to an empty value when the Mate's context inheritance is turned off for that level.
There is no date or time variable.
{{DFIO_DATETIME}}was removed on purpose: injecting a fresh timestamp on every message invalidates the model's prompt cache and makes every answer more expensive and slower. Ask for the date through a tool if a Mate genuinely needs it.
Reserved variables. These are used by the platform to assemble the global prompt and have no effect in your own instructions: {{DFIO_AGENT_SYSTEM_PROMPT}}, {{DFIO_OPENAPI_TEMPLATE}}, and the whole {{DFIO_CAPABILITIES_*}} family (context blocks for organization, workspace, project, members and mention rules; widget blocks for instructions, HTML, SVG, charts, carousel and documents).
Rules and troubleshooting
Case matters. {{member.fullName}}, not {{member.fullname}}. A typo on a known scope is treated as a configuration error, never as an empty value — better a loud failure than a request sent to your API with a blank identity.
Types are preserved. When a placeholder is the whole value, the original type survives: a number stays a number, a list stays a list. When it sits inside a longer string, it is converted to text, and an empty value becomes an empty string.
Unknown scopes are left alone. A token the platform does not recognise — a parameter your own tool substitutes later, for example — is passed through untouched rather than raising an error.
When something goes wrong, the Mate reports the reason in the conversation:
Not available yet. There are no workspace, mate or tool scopes. Workspace information is available in Mate instructions through {{DFIO_WORKSPACE_NAME}} and {{DFIO_WORKSPACE_DESCRIPTION}}, but not in tool configurations.
Security. Personal variables, tool credentials and platform secrets are encrypted at rest, decrypted only for the duration of the call, and never written to logs — neither the encrypted blob nor the resolved value.