Access and gateway features API
Set access rules and gateway features for apps, users and smart groups without writing policy. Each resource names who it applies to (scope) and what it sets (settings). Every write publishes one new policy revision, so these APIs need the Policy Engine on for the LLM Gateway. Try every operation in the Management API playground.
Scope
scope takes any of apps, app_tags, smart_groups and users. A resource applies to a request that matches every key it sets (within a key, any listed value matches).
- Access controls with an empty scope apply to every request of every app. That is allowed only with
all_apps: true; without it the write is422 access_scope_required, andall_apps: truewith a non-empty scope is400. The response still carries the warningaccess_applies_to_everyone. - Feature settings with an empty scope apply to every app.
How they combine
Writes and versions
These collections follow the same rules as routing and limit controls: PUT /controls/{collection}/{id} creates (201) or replaces (200), an unchanged PUT publishes nothing (changed: false), changing or deleting needs the resource ETag in If-Match, PATCH is a JSON merge patch, and ?dry_run=true previews without publishing. Batch writes across collections go through POST /controls/_batch. See Writes, versions and idempotency.
Lists also show console rules of the same kind as read-only rows (source: "console"); writing one is 409 rule_not_api_managed.
Examples
API=https://guardrails-usa-1.quilr.ai/llmgateway/management/v1
auth=(-H "Authorization: Bearer $QUILR_MANAGEMENT_KEY" -H "Content-Type: application/json")
# Contractors: office network only, signed-in users only
curl -X PUT "$API/controls/access/contractors-office" "${auth[@]}" \
-d '{"scope": {"smart_groups": ["contractors"]},
"settings": {"require_identity": true, "allowed_source_ips": ["203.0.113.0/24"]},
"description": "Contractors: office network only"}'
# Every app: require a conversation ID (an empty scope needs all_apps)
curl -X PUT "$API/controls/access/conversation-id-everywhere" "${auth[@]}" \
-d '{"all_apps": true, "settings": {"require_conversation_id": true}}'
# Support bot: minify JSON and clean up tool output
curl -X PUT "$API/controls/token-saving/support-bot" "${auth[@]}" \
-d '{"scope": {"apps": ["support-bot"]}, "rank": 10,
"settings": {"json_minification": true, "tool_output_cleanup": true}}'
Endpoints
Access controls
/controls/accessList access controls
Every managed access control with its ETag, then the console policy rules of the same kind as read-only rows (source console, policy, rule_index, view). Console rows cannot be written here (409 rule_not_api_managed). Paginated (limit, cursor bound to the revision) and filtered by source, app, requested_model, mode and references.
readPath, query & header parameters 7
limit (query)integeroptionalPage size.
cursor (query)stringoptionalnext_cursor of the previous page; bound to the revision (409 collection_changed when the policy changed).
source (query)objectoptionalOnly managed resources or only console rows.
"managed""console"app (query)stringoptionalRows that can apply to this app (rows scoped only by smart group, user or tag are kept). app_name is a deprecated alias.
requested_model (query)stringoptionalRows that can apply to this requested model. model is a deprecated alias.
mode (query)stringoptionalRows with this mode (routes: active, observe, disabled; limits: enforce, alert, paused).
references (query)stringoptional<provider_label> or <provider_label>/<model>: rows that name it, following destination and failover-profile refs (adds references [paths]).
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/access?limit=example' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/controls/access/{resource_id}Delete an access control
Removes the access control; refused while other controls reference it. If-Match is required.
config:writePath, query & header parameters 4
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringrequiredResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
Full request body specification application/json
Unknown fields are rejected in this object.
curl --request DELETE \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/access/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"'
Authentication, errors & retry rules Try it in the playground
/controls/access/{resource_id}Read an access control
One access control and its ETag.
readPath, query & header parameters 1
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/access/eu-pool' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/controls/access/{resource_id}Update an access control
JSON merge patch of the access control (null removes a field); the result is validated as a whole. If-Match is required. Writes publish one policy revision. A PUT whose content equals the stored resource returns changed false and publishes nothing.
config:writePath, query & header parameters 4
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringrequiredResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
Full request body specification application/json
JSON merge patch of ControlsAccess: send only the fields to change; null removes a field (nested objects merge, lists are replaced). The merged resource must be a valid ControlsAccess.
all_appsboolean | nulloptionalVariant 1 boolean
booleanRequired (true) to leave scope empty.
Also accepts null.
descriptionstring | nulloptionalVariant 1 string
stringAlso accepts null.
scopeobject | nulloptionalVariant 1 object
app_tagsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
appsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
smart_groupsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
usersarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
Unknown fields are rejected in this object.
Also accepts null.
settingsobject | nulloptionalVariant 1 object
allowed_source_ipsarray<string> | nulloptionalVariant 1 array<string>
array<string>IP addresses or CIDR ranges; intersected with every other matching list.
Also accepts null.
blocktrue | nulloptionalVariant 1 true
trueDeny every matching request.
Also accepts null.
require_conversation_idtrue | nulloptionalVariant 1 true
trueRequire a conversation ID.
Also accepts null.
require_identitytrue | nulloptionalVariant 1 true
trueRequire a user identity.
Also accepts null.
Unknown fields are rejected in this object.
Also accepts null.
Unknown fields are rejected in this object.
curl --request PATCH \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/access/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"'
Authentication, errors & retry rules Try it in the playground
/controls/access/{resource_id}Create or replace an access control
Creates (201) or replaces (200) the access control. Changing an existing one needs If-Match; If-None-Match: * creates only. Writes publish one policy revision. A PUT whose content equals the stored resource returns changed false and publishes nothing.
config:writePath, query & header parameters 5
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringoptionalResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
If-None-Match (header)"*"optionalCreate only: 412 when the resource exists with different content.
Full request body specification application/json
Access controls tighten access for the scoped requests and never loosen it: block denies the request, require_identity and require_conversation_id require a user identity or conversation ID, and allowed_source_ips limits the source IP ranges. They apply above every console policy rule wherever they match; console denies and requirements still apply everywhere they match, and source IP lists from every matching control and console rule are intersected (lists with nothing in common deny every source). Overlapping access controls combine to the strictest result.
all_appsbooleanoptionalRequired (true) to leave scope empty.
descriptionstringoptionalscopeobjectoptionalEvery non-empty list must match (AND); empty or omitted lists do not restrict (the control then applies to every request). Returned with every field present.
Object fields
app_tagsarray<string>optionalArray item specification
stringappsarray<string>optionalArray item specification
stringsmart_groupsarray<string>optionalArray item specification
stringusersarray<string>optionalArray item specification
stringUnknown fields are rejected in this object.
settingsobjectrequiredAt least one restriction. Omitted settings are not set by this control.
Object fields
allowed_source_ipsarray<string>optionalIP addresses or CIDR ranges; intersected with every other matching list.
Array item specification
stringblocktrueoptionalDeny every matching request.
require_conversation_idtrueoptionalRequire a conversation ID.
require_identitytrueoptionalRequire a user identity.
Unknown fields are rejected in this object.
Unknown fields are rejected in this object.
curl --request PUT \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/access/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"' \
--header 'Content-Type: application/json' \
--data '{
"description": "Contractors: office network only",
"scope": {
"smart_groups": [
"contractors"
]
},
"settings": {
"allowed_source_ips": [
"203.0.113.0/24"
],
"require_identity": true
}
}'
Authentication, errors & retry rules Try it in the playground
Gateway features
/controls/cache-warmList cache warm settings
Every managed cache warm setting with its ETag, then the console policy rules of the same kind as read-only rows (source console, policy, rule_index, view). Console rows cannot be written here (409 rule_not_api_managed). Paginated (limit, cursor bound to the revision) and filtered by source, app, requested_model, mode and references.
readPath, query & header parameters 7
limit (query)integeroptionalPage size.
cursor (query)stringoptionalnext_cursor of the previous page; bound to the revision (409 collection_changed when the policy changed).
source (query)objectoptionalOnly managed resources or only console rows.
"managed""console"app (query)stringoptionalRows that can apply to this app (rows scoped only by smart group, user or tag are kept). app_name is a deprecated alias.
requested_model (query)stringoptionalRows that can apply to this requested model. model is a deprecated alias.
mode (query)stringoptionalRows with this mode (routes: active, observe, disabled; limits: enforce, alert, paused).
references (query)stringoptional<provider_label> or <provider_label>/<model>: rows that name it, following destination and failover-profile refs (adds references [paths]).
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/cache-warm?limit=example' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/controls/cache-warm/{resource_id}Delete a cache warm setting
Removes the cache warm setting; refused while other controls reference it. If-Match is required.
config:writePath, query & header parameters 4
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringrequiredResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
Full request body specification application/json
Unknown fields are rejected in this object.
curl --request DELETE \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/cache-warm/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"'
Authentication, errors & retry rules Try it in the playground
/controls/cache-warm/{resource_id}Read a cache warm setting
One cache warm setting and its ETag.
readPath, query & header parameters 1
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/cache-warm/eu-pool' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/controls/cache-warm/{resource_id}Update a cache warm setting
JSON merge patch of the cache warm setting (null removes a field); the result is validated as a whole. If-Match is required. Writes publish one policy revision. A PUT whose content equals the stored resource returns changed false and publishes nothing.
config:writePath, query & header parameters 4
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringrequiredResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
Full request body specification application/json
JSON merge patch of ControlsCacheWarm: send only the fields to change; null removes a field (nested objects merge, lists are replaced). The merged resource must be a valid ControlsCacheWarm.
descriptionstring | nulloptionalVariant 1 string
stringAlso accepts null.
rankinteger | nulloptionalVariant 1 integer
integerOrders overlapping controls of this collection: the higher rank wins. Two overlapping controls with the same rank and different values are 422 feature_conflict.
Also accepts null.
scopeobject | nulloptionalVariant 1 object
app_tagsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
appsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
smart_groupsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
usersarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
Unknown fields are rejected in this object.
Also accepts null.
settingsobject | nulloptionalVariant 1 object
extend_cache_lifetimeboolean | nulloptionalVariant 1 boolean
booleanAlso accepts null.
min_prompt_tokensinteger | nulloptionalVariant 1 integer
integerAlso accepts null.
refresh_requestsboolean | nulloptionalVariant 1 boolean
booleanAlso accepts null.
stop_after_idle_minutesinteger | nulloptionalVariant 1 integer
integerAlso accepts null.
Unknown fields are rejected in this object.
Also accepts null.
Unknown fields are rejected in this object.
curl --request PATCH \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/cache-warm/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"'
Authentication, errors & retry rules Try it in the playground
/controls/cache-warm/{resource_id}Create or replace a cache warm setting
Creates (201) or replaces (200) the cache warm setting. Changing an existing one needs If-Match; If-None-Match: * creates only. Writes publish one policy revision. A PUT whose content equals the stored resource returns changed false and publishes nothing.
config:writePath, query & header parameters 5
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringoptionalResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
If-None-Match (header)"*"optionalCreate only: 412 when the resource exists with different content.
Full request body specification application/json
Provider prompt-cache keep-warm: extend_cache_lifetime (1-hour cache lifetime where the provider supports it, no extra requests) and refresh_requests (paid 1-token refresh requests before the provider cache lapses). Both are off unless set to true. A control replaces the whole setting where it wins: omitted keys are stored and read back at their defaults. Gateway-feature controls take precedence over console policy rules wherever they match, except console policies above priority 999 and console policies at 950 to 999 that predate the controls and are unchanged (both listed in overridden_by); console rules still apply elsewhere.
descriptionstringoptionalrankintegeroptionalOrders overlapping controls of this collection: the higher rank wins. Two overlapping controls with the same rank and different values are 422 feature_conflict.
scopeobjectoptionalEvery non-empty list must match (AND); empty or omitted lists do not restrict. Returned with every field present.
Object fields
app_tagsarray<string>optionalArray item specification
stringappsarray<string>optionalArray item specification
stringsmart_groupsarray<string>optionalArray item specification
stringusersarray<string>optionalArray item specification
stringUnknown fields are rejected in this object.
settingsobjectrequiredOmitted settings are not set by this control.
Object fields
extend_cache_lifetimebooleanoptionalmin_prompt_tokensintegeroptionalrefresh_requestsbooleanoptionalstop_after_idle_minutesintegeroptionalUnknown fields are rejected in this object.
Unknown fields are rejected in this object.
curl --request PUT \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/cache-warm/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"' \
--header 'Content-Type: application/json' \
--data '{
"scope": {
"app_tags": [
"coding-agents"
]
},
"settings": {
"extend_cache_lifetime": true,
"stop_after_idle_minutes": 20
}
}'
Authentication, errors & retry rules Try it in the playground
/controls/conversation-headersList conversation header settings
Every managed conversation header setting with its ETag, then the console policy rules of the same kind as read-only rows (source console, policy, rule_index, view). Console rows cannot be written here (409 rule_not_api_managed). Paginated (limit, cursor bound to the revision) and filtered by source, app, requested_model, mode and references.
readPath, query & header parameters 7
limit (query)integeroptionalPage size.
cursor (query)stringoptionalnext_cursor of the previous page; bound to the revision (409 collection_changed when the policy changed).
source (query)objectoptionalOnly managed resources or only console rows.
"managed""console"app (query)stringoptionalRows that can apply to this app (rows scoped only by smart group, user or tag are kept). app_name is a deprecated alias.
requested_model (query)stringoptionalRows that can apply to this requested model. model is a deprecated alias.
mode (query)stringoptionalRows with this mode (routes: active, observe, disabled; limits: enforce, alert, paused).
references (query)stringoptional<provider_label> or <provider_label>/<model>: rows that name it, following destination and failover-profile refs (adds references [paths]).
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/conversation-headers?limit=example' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/controls/conversation-headers/{resource_id}Delete a conversation header setting
Removes the conversation header setting; refused while other controls reference it. If-Match is required.
config:writePath, query & header parameters 4
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringrequiredResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
Full request body specification application/json
Unknown fields are rejected in this object.
curl --request DELETE \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/conversation-headers/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"'
Authentication, errors & retry rules Try it in the playground
/controls/conversation-headers/{resource_id}Read a conversation header setting
One conversation header setting and its ETag.
readPath, query & header parameters 1
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/conversation-headers/eu-pool' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/controls/conversation-headers/{resource_id}Update a conversation header setting
JSON merge patch of the conversation header setting (null removes a field); the result is validated as a whole. If-Match is required. Writes publish one policy revision. A PUT whose content equals the stored resource returns changed false and publishes nothing.
config:writePath, query & header parameters 4
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringrequiredResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
Full request body specification application/json
JSON merge patch of ControlsConversationHeaders: send only the fields to change; null removes a field (nested objects merge, lists are replaced). The merged resource must be a valid ControlsConversationHeaders.
descriptionstring | nulloptionalVariant 1 string
stringAlso accepts null.
rankinteger | nulloptionalVariant 1 integer
integerOrders overlapping controls of this collection: the higher rank wins. Two overlapping controls with the same rank and different values are 422 feature_conflict.
Also accepts null.
scopeobject | nulloptionalVariant 1 object
app_tagsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
appsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
smart_groupsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
usersarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
Unknown fields are rejected in this object.
Also accepts null.
settingsobject | nulloptionalVariant 1 object
id_headersarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
Unknown fields are rejected in this object.
Also accepts null.
Unknown fields are rejected in this object.
curl --request PATCH \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/conversation-headers/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"'
Authentication, errors & retry rules Try it in the playground
/controls/conversation-headers/{resource_id}Create or replace a conversation header setting
Creates (201) or replaces (200) the conversation header setting. Changing an existing one needs If-Match; If-None-Match: * creates only. Writes publish one policy revision. A PUT whose content equals the stored resource returns changed false and publishes nothing.
config:writePath, query & header parameters 5
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringoptionalResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
If-None-Match (header)"*"optionalCreate only: 412 when the resource exists with different content.
Full request body specification application/json
Extra header names that carry the conversation ID. Read before the caller is identified, so scope may name apps only. Lists add up. Gateway-feature controls take precedence over console policy rules wherever they match, except console policies above priority 999 and console policies at 950 to 999 that predate the controls and are unchanged (both listed in overridden_by); console rules still apply elsewhere.
descriptionstringoptionalrankintegeroptionalOrders overlapping controls of this collection: the higher rank wins. Two overlapping controls with the same rank and different values are 422 feature_conflict.
scopeobjectoptionalEvery non-empty list must match (AND); empty or omitted lists do not restrict. Returned with every field present. Only apps may be non-empty.
Object fields
app_tagsarray<string>optionalArray item specification
stringappsarray<string>optionalArray item specification
stringsmart_groupsarray<string>optionalArray item specification
stringusersarray<string>optionalArray item specification
stringUnknown fields are rejected in this object.
settingsobjectrequiredOmitted settings are not set by this control.
Object fields
id_headersarray<string>optionalArray item specification
stringUnknown fields are rejected in this object.
Unknown fields are rejected in this object.
curl --request PUT \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/conversation-headers/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"' \
--header 'Content-Type: application/json' \
--data '{
"scope": {
"apps": [
"support-bot"
]
},
"settings": {
"id_headers": [
"x-thread-id"
]
}
}'
Authentication, errors & retry rules Try it in the playground
/controls/error-messagesList error message settings
Every managed error message setting with its ETag, then the console policy rules of the same kind as read-only rows (source console, policy, rule_index, view). Console rows cannot be written here (409 rule_not_api_managed). Paginated (limit, cursor bound to the revision) and filtered by source, app, requested_model, mode and references.
readPath, query & header parameters 7
limit (query)integeroptionalPage size.
cursor (query)stringoptionalnext_cursor of the previous page; bound to the revision (409 collection_changed when the policy changed).
source (query)objectoptionalOnly managed resources or only console rows.
"managed""console"app (query)stringoptionalRows that can apply to this app (rows scoped only by smart group, user or tag are kept). app_name is a deprecated alias.
requested_model (query)stringoptionalRows that can apply to this requested model. model is a deprecated alias.
mode (query)stringoptionalRows with this mode (routes: active, observe, disabled; limits: enforce, alert, paused).
references (query)stringoptional<provider_label> or <provider_label>/<model>: rows that name it, following destination and failover-profile refs (adds references [paths]).
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/error-messages?limit=example' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/controls/error-messages/{resource_id}Delete an error message setting
Removes the error message setting; refused while other controls reference it. If-Match is required.
config:writePath, query & header parameters 4
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringrequiredResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
Full request body specification application/json
Unknown fields are rejected in this object.
curl --request DELETE \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/error-messages/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"'
Authentication, errors & retry rules Try it in the playground
/controls/error-messages/{resource_id}Read an error message setting
One error message setting and its ETag.
readPath, query & header parameters 1
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/error-messages/eu-pool' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/controls/error-messages/{resource_id}Update an error message setting
JSON merge patch of the error message setting (null removes a field); the result is validated as a whole. If-Match is required. Writes publish one policy revision. A PUT whose content equals the stored resource returns changed false and publishes nothing.
config:writePath, query & header parameters 4
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringrequiredResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
Full request body specification application/json
JSON merge patch of ControlsErrorMessages: send only the fields to change; null removes a field (nested objects merge, lists are replaced). The merged resource must be a valid ControlsErrorMessages.
descriptionstring | nulloptionalVariant 1 string
stringAlso accepts null.
rankinteger | nulloptionalVariant 1 integer
integerOrders overlapping controls of this collection: the higher rank wins. Two overlapping controls with the same rank and different values are 422 feature_conflict.
Also accepts null.
scopeobject | nulloptionalVariant 1 object
app_tagsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
appsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
smart_groupsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
usersarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
Unknown fields are rejected in this object.
Also accepts null.
settingsobject | nulloptionalVariant 1 object
mappingsarray<object> | nulloptionalVariant 1 array<object>
array<object>Also accepts null.
Unknown fields are rejected in this object.
Also accepts null.
Unknown fields are rejected in this object.
curl --request PATCH \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/error-messages/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"'
Authentication, errors & retry rules Try it in the playground
/controls/error-messages/{resource_id}Create or replace an error message setting
Creates (201) or replaces (200) the error message setting. Changing an existing one needs If-Match; If-None-Match: * creates only. Writes publish one policy revision. A PUT whose content equals the stored resource returns changed false and publishes nothing.
config:writePath, query & header parameters 5
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringoptionalResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
If-None-Match (header)"*"optionalCreate only: 412 when the resource exists with different content.
Full request body specification application/json
Friendly error messages: each mapping matches gateway or provider errors and replaces the message (status and code never change). Lists add up and are checked highest precedence first (higher rank first); two error-message controls of the same rank must name disjoint scope.apps lists. Gateway-feature controls take precedence over console policy rules wherever they match, except console policies above priority 999 and console policies at 950 to 999 that predate the controls and are unchanged (both listed in overridden_by); console rules still apply elsewhere.
descriptionstringoptionalrankintegeroptionalOrders overlapping controls of this collection: the higher rank wins. Two overlapping controls with the same rank and different values are 422 feature_conflict.
scopeobjectoptionalEvery non-empty list must match (AND); empty or omitted lists do not restrict. Returned with every field present.
Object fields
app_tagsarray<string>optionalArray item specification
stringappsarray<string>optionalArray item specification
stringsmart_groupsarray<string>optionalArray item specification
stringusersarray<string>optionalArray item specification
stringUnknown fields are rejected in this object.
settingsobjectrequiredOmitted settings are not set by this control.
Object fields
mappingsarray<object>optionalArray item specification
idstringrequiredmatchobjectrequiredObject fields
classarray<string>optionalArray item specification
stringValues: "timeout""connection""rate_limit""server_error""auth""model_not_found""context_length""content_filter"
codearray<string>optionalArray item specification
stringmessage_containsarray<string>optionalArray item specification
stringsourcestringoptional"any""gateway""provider"statusarray<integer>optionalArray item specification
integerUnknown fields are rejected in this object.
messagestringoptionalurlstringoptionalUnknown fields are rejected in this object.
Unknown fields are rejected in this object.
Unknown fields are rejected in this object.
curl --request PUT \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/error-messages/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"' \
--header 'Content-Type: application/json' \
--data '{
"scope": {
"apps": [
"support-bot"
]
},
"settings": {
"mappings": [
{
"id": "busy",
"match": {
"class": [
"rate_limit"
],
"source": "provider"
},
"message": "The assistant is busy; try again in a minute.",
"url": "https://help.example.com/busy"
}
]
}
}'
Authentication, errors & retry rules Try it in the playground
/controls/model-visibilityList model visibility settings
Every managed model visibility setting with its ETag, then the console policy rules of the same kind as read-only rows (source console, policy, rule_index, view). Console rows cannot be written here (409 rule_not_api_managed). Paginated (limit, cursor bound to the revision) and filtered by source, app, requested_model, mode and references.
readPath, query & header parameters 7
limit (query)integeroptionalPage size.
cursor (query)stringoptionalnext_cursor of the previous page; bound to the revision (409 collection_changed when the policy changed).
source (query)objectoptionalOnly managed resources or only console rows.
"managed""console"app (query)stringoptionalRows that can apply to this app (rows scoped only by smart group, user or tag are kept). app_name is a deprecated alias.
requested_model (query)stringoptionalRows that can apply to this requested model. model is a deprecated alias.
mode (query)stringoptionalRows with this mode (routes: active, observe, disabled; limits: enforce, alert, paused).
references (query)stringoptional<provider_label> or <provider_label>/<model>: rows that name it, following destination and failover-profile refs (adds references [paths]).
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/model-visibility?limit=example' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/controls/model-visibility/{resource_id}Delete a model visibility setting
Removes the model visibility setting; refused while other controls reference it. If-Match is required.
config:writePath, query & header parameters 4
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringrequiredResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
Full request body specification application/json
Unknown fields are rejected in this object.
curl --request DELETE \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/model-visibility/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"'
Authentication, errors & retry rules Try it in the playground
/controls/model-visibility/{resource_id}Read a model visibility setting
One model visibility setting and its ETag.
readPath, query & header parameters 1
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/model-visibility/eu-pool' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/controls/model-visibility/{resource_id}Update a model visibility setting
JSON merge patch of the model visibility setting (null removes a field); the result is validated as a whole. If-Match is required. Writes publish one policy revision. A PUT whose content equals the stored resource returns changed false and publishes nothing.
config:writePath, query & header parameters 4
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringrequiredResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
Full request body specification application/json
JSON merge patch of ControlsModelVisibility: send only the fields to change; null removes a field (nested objects merge, lists are replaced). The merged resource must be a valid ControlsModelVisibility.
descriptionstring | nulloptionalVariant 1 string
stringAlso accepts null.
rankinteger | nulloptionalVariant 1 integer
integerOrders overlapping controls of this collection: the higher rank wins. Two overlapping controls with the same rank and different values are 422 feature_conflict.
Also accepts null.
scopeobject | nulloptionalVariant 1 object
app_tagsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
appsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
smart_groupsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
usersarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
Unknown fields are rejected in this object.
Also accepts null.
settingsobject | nulloptionalVariant 1 object
hidearray<object> | nulloptionalVariant 1 array<object>
array<object>Also accepts null.
hide_aliasestrue | nulloptionalVariant 1 true
trueAlso accepts null.
hide_alltrue | nulloptionalVariant 1 true
trueAlso accepts null.
reveal_hiddenobject | nulloptionalVariant 1 object
objectValues: "always""on_request""never"
Also accepts null.
show_onlyarray<object> | nulloptionalVariant 1 array<object>
array<object>Also accepts null.
Unknown fields are rejected in this object.
Also accepts null.
Unknown fields are rejected in this object.
curl --request PATCH \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/model-visibility/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"'
Authentication, errors & retry rules Try it in the playground
/controls/model-visibility/{resource_id}Create or replace a model visibility setting
Creates (201) or replaces (200) the model visibility setting. Changing an existing one needs If-Match; If-None-Match: * creates only. Writes publish one policy revision. A PUT whose content equals the stored resource returns changed false and publishes nothing.
config:writePath, query & header parameters 5
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringoptionalResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
If-None-Match (header)"*"optionalCreate only: 412 when the resource exists with different content.
Full request body specification application/json
What model lists show (never what can be called). hide_all and hide_aliases accept only true; reveal_hidden exempts a scope; show_only and hide grants add up across every matching control and console rule. Gateway-feature controls take precedence over console policy rules wherever they match, except console policies above priority 999 and console policies at 950 to 999 that predate the controls and are unchanged (both listed in overridden_by); console rules still apply elsewhere.
descriptionstringoptionalrankintegeroptionalOrders overlapping controls of this collection: the higher rank wins. Two overlapping controls with the same rank and different values are 422 feature_conflict.
scopeobjectoptionalEvery non-empty list must match (AND); empty or omitted lists do not restrict. Returned with every field present.
Object fields
app_tagsarray<string>optionalArray item specification
stringappsarray<string>optionalArray item specification
stringsmart_groupsarray<string>optionalArray item specification
stringusersarray<string>optionalArray item specification
stringUnknown fields are rejected in this object.
settingsobjectrequiredOmitted settings are not set by this control.
Object fields
hidearray<object>optionalArray item specification
labelsarray<string>optionalArray item specification
stringmodelsarray<string>optionalArray item specification
stringprovidersarray<string>optionalArray item specification
stringUnknown fields are rejected in this object.
hide_aliasestrueoptionalhide_alltrueoptionalreveal_hiddenobjectoptional"always""on_request""never"show_onlyarray<object>optionalArray item specification
labelsarray<string>optionalArray item specification
stringmodelsarray<string>optionalArray item specification
stringprovidersarray<string>optionalArray item specification
stringUnknown fields are rejected in this object.
Unknown fields are rejected in this object.
Unknown fields are rejected in this object.
curl --request PUT \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/model-visibility/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"' \
--header 'Content-Type: application/json' \
--data '{
"scope": {
"smart_groups": [
"contractors"
]
},
"settings": {
"hide_aliases": true,
"show_only": [
{
"models": [
"gpt-4.1*"
],
"providers": [
"openai"
]
}
]
}
}'
Authentication, errors & retry rules Try it in the playground
/controls/prompt-enforcementList prompt enforcement settings
Every managed prompt enforcement setting with its ETag, then the console policy rules of the same kind as read-only rows (source console, policy, rule_index, view). Console rows cannot be written here (409 rule_not_api_managed). Paginated (limit, cursor bound to the revision) and filtered by source, app, requested_model, mode and references.
readPath, query & header parameters 7
limit (query)integeroptionalPage size.
cursor (query)stringoptionalnext_cursor of the previous page; bound to the revision (409 collection_changed when the policy changed).
source (query)objectoptionalOnly managed resources or only console rows.
"managed""console"app (query)stringoptionalRows that can apply to this app (rows scoped only by smart group, user or tag are kept). app_name is a deprecated alias.
requested_model (query)stringoptionalRows that can apply to this requested model. model is a deprecated alias.
mode (query)stringoptionalRows with this mode (routes: active, observe, disabled; limits: enforce, alert, paused).
references (query)stringoptional<provider_label> or <provider_label>/<model>: rows that name it, following destination and failover-profile refs (adds references [paths]).
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/prompt-enforcement?limit=example' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/controls/prompt-enforcement/{resource_id}Delete a prompt enforcement setting
Removes the prompt enforcement setting; refused while other controls reference it. If-Match is required.
config:writePath, query & header parameters 4
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringrequiredResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
Full request body specification application/json
Unknown fields are rejected in this object.
curl --request DELETE \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/prompt-enforcement/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"'
Authentication, errors & retry rules Try it in the playground
/controls/prompt-enforcement/{resource_id}Read a prompt enforcement setting
One prompt enforcement setting and its ETag.
readPath, query & header parameters 1
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/prompt-enforcement/eu-pool' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/controls/prompt-enforcement/{resource_id}Update a prompt enforcement setting
JSON merge patch of the prompt enforcement setting (null removes a field); the result is validated as a whole. If-Match is required. Writes publish one policy revision. A PUT whose content equals the stored resource returns changed false and publishes nothing.
config:writePath, query & header parameters 4
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringrequiredResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
Full request body specification application/json
JSON merge patch of ControlsPromptEnforcement: send only the fields to change; null removes a field (nested objects merge, lists are replaced). The merged resource must be a valid ControlsPromptEnforcement.
descriptionstring | nulloptionalVariant 1 string
stringAlso accepts null.
rankinteger | nulloptionalVariant 1 integer
integerOrders overlapping controls of this collection: the higher rank wins. Two overlapping controls with the same rank and different values are 422 feature_conflict.
Also accepts null.
scopeobject | nulloptionalVariant 1 object
app_tagsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
appsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
smart_groupsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
usersarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
Unknown fields are rejected in this object.
Also accepts null.
settingsobject | nulloptionalVariant 1 object
require_system_from_storeboolean | nulloptionalVariant 1 boolean
booleanAlso accepts null.
universal_system_promptobject | nulloptionalVariant 1 object
contentstring | nulloptionalVariant 1 string
stringAlso accepts null.
enabledboolean | nulloptionalVariant 1 boolean
booleanAlso accepts null.
prompt_idstring | nulloptionalVariant 1 string
stringAlso accepts null.
Unknown fields are rejected in this object.
Also accepts null.
Unknown fields are rejected in this object.
Also accepts null.
Unknown fields are rejected in this object.
curl --request PATCH \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/prompt-enforcement/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"'
Authentication, errors & retry rules Try it in the playground
/controls/prompt-enforcement/{resource_id}Create or replace a prompt enforcement setting
Creates (201) or replaces (200) the prompt enforcement setting. Changing an existing one needs If-Match; If-None-Match: * creates only. Writes publish one policy revision. A PUT whose content equals the stored resource returns changed false and publishes nothing.
config:writePath, query & header parameters 5
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringoptionalResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
If-None-Match (header)"*"optionalCreate only: 412 when the resource exists with different content.
Full request body specification application/json
Prompt store enforcement: require_system_from_store and the universal system prompt. Use prompt_id (a stored prompt) for prompts you edit often: editing the stored prompt needs no control change. Gateway-feature controls take precedence over console policy rules wherever they match, except console policies above priority 999 and console policies at 950 to 999 that predate the controls and are unchanged (both listed in overridden_by); console rules still apply elsewhere.
descriptionstringoptionalrankintegeroptionalOrders overlapping controls of this collection: the higher rank wins. Two overlapping controls with the same rank and different values are 422 feature_conflict.
scopeobjectoptionalEvery non-empty list must match (AND); empty or omitted lists do not restrict. Returned with every field present.
Object fields
app_tagsarray<string>optionalArray item specification
stringappsarray<string>optionalArray item specification
stringsmart_groupsarray<string>optionalArray item specification
stringusersarray<string>optionalArray item specification
stringUnknown fields are rejected in this object.
settingsobjectrequiredOmitted settings are not set by this control.
Object fields
require_system_from_storebooleanoptionaluniversal_system_promptobjectoptionalObject fields
contentstringoptionalenabledbooleanrequiredprompt_idstringoptionalUnknown fields are rejected in this object.
Unknown fields are rejected in this object.
Unknown fields are rejected in this object.
curl --request PUT \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/prompt-enforcement/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"' \
--header 'Content-Type: application/json' \
--data '{
"scope": {
"apps": [
"support-bot"
]
},
"settings": {
"require_system_from_store": true,
"universal_system_prompt": {
"enabled": true,
"prompt_id": "support-guidelines"
}
}
}'
Authentication, errors & retry rules Try it in the playground
/controls/response-cacheList response cache settings
Every managed response cache setting with its ETag, then the console policy rules of the same kind as read-only rows (source console, policy, rule_index, view). Console rows cannot be written here (409 rule_not_api_managed). Paginated (limit, cursor bound to the revision) and filtered by source, app, requested_model, mode and references.
readPath, query & header parameters 7
limit (query)integeroptionalPage size.
cursor (query)stringoptionalnext_cursor of the previous page; bound to the revision (409 collection_changed when the policy changed).
source (query)objectoptionalOnly managed resources or only console rows.
"managed""console"app (query)stringoptionalRows that can apply to this app (rows scoped only by smart group, user or tag are kept). app_name is a deprecated alias.
requested_model (query)stringoptionalRows that can apply to this requested model. model is a deprecated alias.
mode (query)stringoptionalRows with this mode (routes: active, observe, disabled; limits: enforce, alert, paused).
references (query)stringoptional<provider_label> or <provider_label>/<model>: rows that name it, following destination and failover-profile refs (adds references [paths]).
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/response-cache?limit=example' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/controls/response-cache/{resource_id}Delete a response cache setting
Removes the response cache setting; refused while other controls reference it. If-Match is required.
config:writePath, query & header parameters 4
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringrequiredResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
Full request body specification application/json
Unknown fields are rejected in this object.
curl --request DELETE \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/response-cache/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"'
Authentication, errors & retry rules Try it in the playground
/controls/response-cache/{resource_id}Read a response cache setting
One response cache setting and its ETag.
readPath, query & header parameters 1
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/response-cache/eu-pool' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/controls/response-cache/{resource_id}Update a response cache setting
JSON merge patch of the response cache setting (null removes a field); the result is validated as a whole. If-Match is required. Writes publish one policy revision. A PUT whose content equals the stored resource returns changed false and publishes nothing.
config:writePath, query & header parameters 4
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringrequiredResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
Full request body specification application/json
JSON merge patch of ControlsResponseCache: send only the fields to change; null removes a field (nested objects merge, lists are replaced). The merged resource must be a valid ControlsResponseCache.
descriptionstring | nulloptionalVariant 1 string
stringAlso accepts null.
rankinteger | nulloptionalVariant 1 integer
integerOrders overlapping controls of this collection: the higher rank wins. Two overlapping controls with the same rank and different values are 422 feature_conflict.
Also accepts null.
scopeobject | nulloptionalVariant 1 object
app_tagsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
appsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
smart_groupsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
usersarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
Unknown fields are rejected in this object.
Also accepts null.
settingsobject | nulloptionalVariant 1 object
enabledboolean | nulloptionalVariant 1 boolean
booleanAlso accepts null.
Unknown fields are rejected in this object.
Also accepts null.
Unknown fields are rejected in this object.
curl --request PATCH \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/response-cache/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"'
Authentication, errors & retry rules Try it in the playground
/controls/response-cache/{resource_id}Create or replace a response cache setting
Creates (201) or replaces (200) the response cache setting. Changing an existing one needs If-Match; If-None-Match: * creates only. Writes publish one policy revision. A PUT whose content equals the stored resource returns changed false and publishes nothing.
config:writePath, query & header parameters 5
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringoptionalResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
If-None-Match (header)"*"optionalCreate only: 412 when the resource exists with different content.
Full request body specification application/json
Turns the exact-match response cache on or off for the scoped apps. Gateway-feature controls take precedence over console policy rules wherever they match, except console policies above priority 999 and console policies at 950 to 999 that predate the controls and are unchanged (both listed in overridden_by); console rules still apply elsewhere.
descriptionstringoptionalrankintegeroptionalOrders overlapping controls of this collection: the higher rank wins. Two overlapping controls with the same rank and different values are 422 feature_conflict.
scopeobjectoptionalEvery non-empty list must match (AND); empty or omitted lists do not restrict. Returned with every field present.
Object fields
app_tagsarray<string>optionalArray item specification
stringappsarray<string>optionalArray item specification
stringsmart_groupsarray<string>optionalArray item specification
stringusersarray<string>optionalArray item specification
stringUnknown fields are rejected in this object.
settingsobjectrequiredOmitted settings are not set by this control.
Object fields
enabledbooleanoptionalUnknown fields are rejected in this object.
Unknown fields are rejected in this object.
curl --request PUT \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/response-cache/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"' \
--header 'Content-Type: application/json' \
--data '{
"scope": {
"apps": [
"support-bot"
]
},
"settings": {
"enabled": true
}
}'
Authentication, errors & retry rules Try it in the playground
/controls/token-savingList token saving settings
Every managed token saving setting with its ETag, then the console policy rules of the same kind as read-only rows (source console, policy, rule_index, view). Console rows cannot be written here (409 rule_not_api_managed). Paginated (limit, cursor bound to the revision) and filtered by source, app, requested_model, mode and references.
readPath, query & header parameters 7
limit (query)integeroptionalPage size.
cursor (query)stringoptionalnext_cursor of the previous page; bound to the revision (409 collection_changed when the policy changed).
source (query)objectoptionalOnly managed resources or only console rows.
"managed""console"app (query)stringoptionalRows that can apply to this app (rows scoped only by smart group, user or tag are kept). app_name is a deprecated alias.
requested_model (query)stringoptionalRows that can apply to this requested model. model is a deprecated alias.
mode (query)stringoptionalRows with this mode (routes: active, observe, disabled; limits: enforce, alert, paused).
references (query)stringoptional<provider_label> or <provider_label>/<model>: rows that name it, following destination and failover-profile refs (adds references [paths]).
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/token-saving?limit=example' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/controls/token-saving/{resource_id}Delete a token saving setting
Removes the token saving setting; refused while other controls reference it. If-Match is required.
config:writePath, query & header parameters 4
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringrequiredResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
Full request body specification application/json
Unknown fields are rejected in this object.
curl --request DELETE \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/token-saving/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"'
Authentication, errors & retry rules Try it in the playground
/controls/token-saving/{resource_id}Read a token saving setting
One token saving setting and its ETag.
readPath, query & header parameters 1
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/token-saving/eu-pool' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/controls/token-saving/{resource_id}Update a token saving setting
JSON merge patch of the token saving setting (null removes a field); the result is validated as a whole. If-Match is required. Writes publish one policy revision. A PUT whose content equals the stored resource returns changed false and publishes nothing.
config:writePath, query & header parameters 4
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringrequiredResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
Full request body specification application/json
JSON merge patch of ControlsTokenSaving: send only the fields to change; null removes a field (nested objects merge, lists are replaced). The merged resource must be a valid ControlsTokenSaving.
descriptionstring | nulloptionalVariant 1 string
stringAlso accepts null.
rankinteger | nulloptionalVariant 1 integer
integerOrders overlapping controls of this collection: the higher rank wins. Two overlapping controls with the same rank and different values are 422 feature_conflict.
Also accepts null.
scopeobject | nulloptionalVariant 1 object
app_tagsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
appsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
smart_groupsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
usersarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
Unknown fields are rejected in this object.
Also accepts null.
settingsobject | nulloptionalVariant 1 object
base64_blob_elisionboolean | nulloptionalVariant 1 boolean
booleanAlso accepts null.
html_to_textboolean | nulloptionalVariant 1 boolean
booleanAlso accepts null.
json_minificationboolean | nulloptionalVariant 1 boolean
booleanAlso accepts null.
markdown_to_textboolean | nulloptionalVariant 1 boolean
booleanAlso accepts null.
smart_json_compressionboolean | nulloptionalVariant 1 boolean
booleanAlso accepts null.
text_compressionboolean | nulloptionalVariant 1 boolean
booleanAlso accepts null.
tool_output_cleanupboolean | nulloptionalVariant 1 boolean
booleanAlso accepts null.
Unknown fields are rejected in this object.
Also accepts null.
Unknown fields are rejected in this object.
curl --request PATCH \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/token-saving/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"'
Authentication, errors & retry rules Try it in the playground
/controls/token-saving/{resource_id}Create or replace a token saving setting
Creates (201) or replaces (200) the token saving setting. Changing an existing one needs If-Match; If-None-Match: * creates only. Writes publish one policy revision. A PUT whose content equals the stored resource returns changed false and publishes nothing.
config:writePath, query & header parameters 5
resource_id (path)stringrequiredClient-chosen control ID, ^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$ (console rules read as console:<policy>:<rule_index>).
dry_run (query)booleanoptionalPreview: spec and policy diff, diagnostics, warnings, would_publish and impact; nothing is saved.
If-Match (header)stringoptionalResource ETag "r<revision>-<id>-<hash8>" from the latest read, or the collection ETag "r<revision>". Required to change or delete an existing resource (428 when missing, 412 when stale); an unrelated publish does not invalidate it.
Idempotency-Key (header)stringoptionalUnique per logical write. A retry with the same key and body returns the original result, including after a crash once the revision was published. Optional on PUT, PATCH and DELETE.
If-None-Match (header)"*"optionalCreate only: 412 when the resource exists with different content.
Full request body specification application/json
Request-body token saving methods for the scoped requests (true turns a method on, false off). Gateway-feature controls take precedence over console policy rules wherever they match, except console policies above priority 999 and console policies at 950 to 999 that predate the controls and are unchanged (both listed in overridden_by); console rules still apply elsewhere.
descriptionstringoptionalrankintegeroptionalOrders overlapping controls of this collection: the higher rank wins. Two overlapping controls with the same rank and different values are 422 feature_conflict.
scopeobjectoptionalEvery non-empty list must match (AND); empty or omitted lists do not restrict. Returned with every field present.
Object fields
app_tagsarray<string>optionalArray item specification
stringappsarray<string>optionalArray item specification
stringsmart_groupsarray<string>optionalArray item specification
stringusersarray<string>optionalArray item specification
stringUnknown fields are rejected in this object.
settingsobjectrequiredOmitted settings are not set by this control.
Object fields
base64_blob_elisionbooleanoptionalhtml_to_textbooleanoptionaljson_minificationbooleanoptionalmarkdown_to_textbooleanoptionalsmart_json_compressionbooleanoptionaltext_compressionbooleanoptionaltool_output_cleanupbooleanoptionalUnknown fields are rejected in this object.
Unknown fields are rejected in this object.
curl --request PUT \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/controls/token-saving/eu-pool' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "r12-eu-pool-1a2b3c4d"' \
--header 'Content-Type: application/json' \
--data '{
"rank": 10,
"scope": {
"apps": [
"support-bot"
]
},
"settings": {
"json_minification": true,
"tool_output_cleanup": true
}
}'
Authentication, errors & retry rules Try it in the playground
Related
- Routing and failover API - write rules, ETags, batch and revision restore shared by every control collection.
- Rate limits API - request and token limits, request guards and limit responses.
- Management API - authentication, scopes, errors and response formats.