System Prompts
Every request resolves to exactly one system message, assembled server-side from up to four layers, in this order:
- Platform guardrail — always present, never overridable by you or your end users. It keeps the underlying model/vendor undisclosed regardless of what's asked.
- Resolved system prompt — the API key's own prompt if it has one, otherwise the org's default, otherwise a generic fallback ("You are a helpful AI assistant. Answer clearly and concisely.").
- Current date/time, injected automatically so the model has a correct "now" for relative references ("today", "last week") and for building date filters if your org has MCP tools enabled.
- Your supplemental instructions — if your request's
messagesincludes one or morerole: "system"messages, their content is appended here as additional instructions layered on top of the resolved prompt, not a replacement for it.
Setting the resolved prompt
- Org default: set on the dashboard's Settings page by an Admin. Applies to every API key in the org that doesn't have its own override.
- Per-key override: set on a specific key from the API Keys page by an Admin or Member. Useful for running several distinct assistants (e.g. one per product surface) off one org without them stepping on each other's identity.
Neither is configurable via the API itself — both are dashboard-only, since they're org/key management rather than per-request behavior.
Supplemental instructions per request
{
"messages": [
{"role": "system", "content": "Respond only in French."},
{"role": "user", "content": "What's the weather like today?"}
]
}
This doesn't replace your org or key's resolved prompt — it's layered underneath it. Use it for request-specific steering (tone, language, output format), not for redefining who the assistant is; that belongs in the org/key-level prompt instead.
Why layering, not full override
A caller-supplied system message can't be used to strip the platform guardrail or the resolved prompt, by design — the guardrail is always prepended first and the resolved prompt is always present, so nothing your request sends can remove either.