Full app configuration input
Use PATCH /llmgateway/management/v1/apps/{app_name} to update stored controls. The complete input schema below covers routing, detection, limits, identity, self-service, existing group/definition references, alerts and transformations.
The public schema groups app configuration by function. All nested fields are typed. Unknown fields are rejected.
How partial updates work
Stored settings and policy authority
With QuilrQL enabled, governed changes save and return an inactive_under_quilrql warning. Disabling authority activates those stored values. Shared-provider credentials/availability and prompt contents remain live dependencies; whole-app availability is always enforced independently.
{
"warnings": [{
"code": "inactive_under_quilrql",
"fields": ["detection.data_risk_action"],
"message": "Saved settings take effect when QuilrQL authority is disabled."
}],
"request_id": "req_example"
}
This is a partial response example showing warnings. A successful update also returns the updated resource/version. There is no single effective configuration for every user/model/content combination: use simulation for a specific request.
Configuration map
Complete PATCH schema
Expand any object, array item or map value to inspect its complete nested specification. Dynamic maps have typed values and must use IDs from the appropriate catalog.
AppPatchOmitted fields are preserved. Objects merge declared fields, arrays replace, and null clears only explicitly nullable fields. All changes are validated together.
enabledbooleanoptionalWhole-app availability, independent of QuilrQL. Disabled apps retain keys/configuration.
tagsarray<string>optionalComplete replacement.
Array item specification
stringprovider_labelsarray<string>optionalOrdered complete provider selection, primary first. Mutating this field on an inline app requires explicit conversion.
Array item specification
stringExact, trimmed tenant-wide provider label. Immutable after creation.
detectionobjectoptionalStored detection controls. Catalogs validate IDs and action/scope compatibility. Governed updates remain inactive while QuilrQL owns enforcement.
Object fields
data_risk_actionstringoptionalAdversarial detections do not expose redactable spans; incompatible actions are rejected by catalog validation.
"monitor""partial-redact""redact""block"enabled_categoriesmap<string, boolean>optionalCatalog category/subcategory IDs mapped to enabled state. Unknown selectors are rejected.
Map value specification
booleancategory_actionsmap<string, string>optionalCategory ID to action.
Map value specification
stringAdversarial detections do not expose redactable spans; incompatible actions are rejected by catalog validation.
Values: "monitor""partial-redact""redact""block"
sub_category_actionsmap<string, map<string, string>>optionalCategory ID to subcategory name to action.
Map value specification
map<string, string>category_scopesmap<string, string>optionalMap value specification
stringValues: "request""response""both"
category_sensitivitiesmap<string, array<string>>optionalMap value specification
array<string>sub_category_sensitivitiesmap<string, map<string, array<string>>>optionalMap value specification
map<string, array<string>>edm_pattern_sensitivitiesmap<string, string>optionalMap value specification
stringValues: "low""medium""high"
custom_definitionsarray<object>optionalFull replacement of definition selections; [] removes selections. Does not delete definitions.
Array item specification
definition_idstringrequiredStable ID from GET /custom-definitions.
enabledbooleanoptionalactionstringoptionalAdversarial detections do not expose redactable spans; incompatible actions are rejected by catalog validation.
"monitor""partial-redact""redact""block"scopestringoptional"request""response""both"sensitivitystringoptional"low""medium""high"Unknown fields are rejected in this object.
Unknown fields are rejected in this object.
routingobjectoptionalTargets reference attached shared providers and configured models. No inline credentials are accepted. Surface compatibility and sum-of-weights checks are mandatory.
Object fields
groupsarray<object>optionalComplete replacement; [] clears all named request/token groups.
Array item specification
namestringrequiredApp-scoped routing alias.
kindstringrequiredMust match the models and supported API surface.
"chat_completion""anthropic_messages""responses""realtime""vertex_ai""bedrock_runtime"modestringrequiredBalance by request count or token usage.
"requests""tokens"membersarray<object>requiredArray item specification
provider_labelstringrequiredExact, trimmed tenant-wide provider label. Immutable after creation.
modelstringrequiredExact configured model identifier; availability depends on the provider and deployment.
weightnumberrequiredPositive percentage. All members of a group must sum to 100.
Unknown fields are rejected in this object.
Unknown fields are rejected in this object.
context_routesarray<object>optionalComplete replacement; [] clears custom context routes.
Array item specification
kindstringrequired"chat_completion""anthropic_messages""responses""vertex_ai""bedrock_runtime"contextstringrequiredOnly the supported low-context override is active in this v1 contract.
"low"enabledbooleanoptionaltargetsarray<object>requiredOrdered fallback targets.
Array item specification
provider_labelstringrequiredExact, trimmed tenant-wide provider label. Immutable after creation.
modelstringrequiredExact configured model identifier; availability depends on the provider and deployment.
Unknown fields are rejected in this object.
Unknown fields are rejected in this object.
context_thresholdsobjectoptionalObject fields
low_max_wordsintegerrequiredmedium_max_wordsintegerrequiredMust be greater than or equal to low_max_words.
Unknown fields are rejected in this object.
Unknown fields are rejected in this object.
limitsobjectoptionalObject fields
timeoutnumber | nulloptionalUpstream timeout in seconds; null clears the configured override.
Variant 1 number
numberUpstream timeout in seconds; null clears the configured override.
Also accepts null.
concurrency_per_minuteinteger | nulloptionalAdmission count over the existing 60-second window.
Variant 1 integer
integerAdmission count over the existing 60-second window.
Also accepts null.
rate_limitobject | nulloptionalNull clears the request limit.
RateLimit object
valueintegerrequiredMaximum events in the window; zero disables this limit.
durationstringrequired"minute""hour""day"Unknown fields are rejected in this object.
Also accepts null.
token_limitsobject | nulloptionalTokenLimits object
max_per_requestinteger | nulloptionalMaximum input tokens per request; zero disables.
Variant 1 integer
integerMaximum input tokens per request; zero disables.
Also accepts null.
inputobject | nulloptionalRateLimit object
valueintegerrequiredMaximum events in the window; zero disables this limit.
durationstringrequired"minute""hour""day"Unknown fields are rejected in this object.
Also accepts null.
outputobject | nulloptionalRateLimit object
valueintegerrequiredMaximum events in the window; zero disables this limit.
durationstringrequired"minute""hour""day"Unknown fields are rejected in this object.
Also accepts null.
Unknown fields are rejected in this object.
Also accepts null.
model_rate_limitsarray<object>optionalFull replacement; [] removes all model overrides. App and model limits both apply.
Array item specification
provider_labelstringrequiredExact, trimmed tenant-wide provider label. Immutable after creation.
modelstringrequiredExact configured model identifier; availability depends on the provider and deployment.
timeoutnumber | nulloptionalSeconds.
Variant 1 number
numberSeconds.
Also accepts null.
concurrency_per_minuteinteger | nulloptionalRequest admissions per 60 seconds, following existing gateway semantics.
Variant 1 integer
integerRequest admissions per 60 seconds, following existing gateway semantics.
Also accepts null.
rate_limitobject | nulloptionalRateLimit object
valueintegerrequiredMaximum events in the window; zero disables this limit.
durationstringrequired"minute""hour""day"Unknown fields are rejected in this object.
Also accepts null.
token_limitsobject | nulloptionalTokenLimits object
max_per_requestinteger | nulloptionalMaximum input tokens per request; zero disables.
Variant 1 integer
integerMaximum input tokens per request; zero disables.
Also accepts null.
inputobject | nulloptionalRateLimit object
valueintegerrequiredMaximum events in the window; zero disables this limit.
durationstringrequired"minute""hour""day"Unknown fields are rejected in this object.
Also accepts null.
outputobject | nulloptionalRateLimit object
valueintegerrequiredMaximum events in the window; zero disables this limit.
durationstringrequired"minute""hour""day"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.
Unknown fields are rejected in this object.
identityobjectoptionalObject fields
jwt_authobject | nulloptionalJwtAuth object
enabledbooleanoptionalallowed_issuersarray<string>optionalArray item specification
stringallowed_client_idsarray<string>optionalArray item specification
stringjwks_urlstringoptionalHTTPS JWKS URL.
Unknown fields are rejected in this object.
Also accepts null.
identity_header_modebooleanoptionalidentity_token_headersarray<string>optionalArray item specification
stringAdditional forwarded identity header name.
identity_token_oid_fallbackbooleanoptionalenforce_identitybooleanoptionalenforce_conversation_idbooleanoptionalallowed_user_domainsarray<string>optionalArray item specification
stringEmail domain without @.
allowed_user_emailsarray<string>optionalArray item specification
stringallowed_source_ipsarray<string> | nulloptionalVariant 1 array<string>
array<string>Also accepts null.
Unknown fields are rejected in this object.
guardian_agentobject | nulloptionalNull removes the complete Guardian configuration.
Guardian object
enabledbooleanoptionalcoding_helpersobjectoptionalObject fields
enabledbooleanoptionaldependency_security_checkbooleanoptionallatest_version_suggestionsbooleanoptionalUnknown fields are rejected in this object.
task_adherenceobjectoptionalObject fields
enabledbooleanoptionalactionstringoptional"nudge""block"sensitivitystringoptional"low""medium""high"agent_purposestringoptionalguardian_agent_promptstringoptionalUnknown fields are rejected in this object.
Unknown fields are rejected in this object.
Also accepts null.
hallucinationobjectoptionalObject fields
enabledbooleanoptionalactionstringoptional"monitor""block"score_thresholdnumberoptionalConfidence threshold from 0 to 1.
risk_levelstringoptionalStored compatibility setting; does not independently select worker behavior.
"low""medium""high"Unknown fields are rejected in this object.
self_serviceobject | nulloptionalNull clears self-service configuration.
SelfService object
enabledbooleanoptionalEnable stored personal self-service credential mode.
access_controlobjectoptionalObject fields
version1requiredself_service_viewerobjectoptionalDeny rules win. A group reference never changes group membership.
Object fields
allow_allbooleanoptionalallow_emailsarray<string>optionalArray item specification
stringdeny_emailsarray<string>optionalArray item specification
stringallow_smart_groupsarray<string>optionalArray item specification
stringExisting gateway smart-group name.
deny_smart_groupsarray<string>optionalArray item specification
stringExisting gateway smart-group name.
Unknown fields are rejected in this object.
settings_update_requesterobjectoptionalDeny rules win. A group reference never changes group membership.
Object fields
allow_allbooleanoptionalallow_emailsarray<string>optionalArray item specification
stringdeny_emailsarray<string>optionalArray item specification
stringallow_smart_groupsarray<string>optionalArray item specification
stringExisting gateway smart-group name.
deny_smart_groupsarray<string>optionalArray item specification
stringExisting gateway smart-group name.
Unknown fields are rejected in this object.
settings_update_directobjectoptionalDeny rules win. A group reference never changes group membership.
Object fields
allow_allbooleanoptionalallow_emailsarray<string>optionalArray item specification
stringdeny_emailsarray<string>optionalArray item specification
stringallow_smart_groupsarray<string>optionalArray item specification
stringExisting gateway smart-group name.
deny_smart_groupsarray<string>optionalArray item specification
stringExisting gateway smart-group name.
Unknown fields are rejected in this object.
show_api_keyobjectoptionalDeny rules win. A group reference never changes group membership.
Object fields
allow_allbooleanoptionalallow_emailsarray<string>optionalArray item specification
stringdeny_emailsarray<string>optionalArray item specification
stringallow_smart_groupsarray<string>optionalArray item specification
stringExisting gateway smart-group name.
deny_smart_groupsarray<string>optionalArray item specification
stringExisting gateway smart-group name.
Unknown fields are rejected in this object.
show_logs_for_all_usersobjectoptionalDeny rules win. A group reference never changes group membership.
Object fields
allow_allbooleanoptionalallow_emailsarray<string>optionalArray item specification
stringdeny_emailsarray<string>optionalArray item specification
stringallow_smart_groupsarray<string>optionalArray item specification
stringExisting gateway smart-group name.
deny_smart_groupsarray<string>optionalArray item specification
stringExisting gateway smart-group name.
Unknown fields are rejected in this object.
Unknown fields are rejected in this object.
Unknown fields are rejected in this object.
Also accepts null.
smart_group_policiesarray<object>optionalComplete replacement of app-local overrides referencing existing groups.
Array item specification
group_namestringrequiredExisting smart-group name.
enabledbooleanoptionaldetectionobjectrequiredStored detection controls. Catalogs validate IDs and action/scope compatibility. Governed updates remain inactive while QuilrQL owns enforcement.
Object fields
data_risk_actionstringoptionalAdversarial detections do not expose redactable spans; incompatible actions are rejected by catalog validation.
"monitor""partial-redact""redact""block"enabled_categoriesmap<string, boolean>optionalCatalog category/subcategory IDs mapped to enabled state. Unknown selectors are rejected.
Map value specification
booleancategory_actionsmap<string, string>optionalCategory ID to action.
Map value specification
stringAdversarial detections do not expose redactable spans; incompatible actions are rejected by catalog validation.
Values: "monitor""partial-redact""redact""block"
sub_category_actionsmap<string, map<string, string>>optionalCategory ID to subcategory name to action.
Map value specification
map<string, string>category_scopesmap<string, string>optionalMap value specification
stringValues: "request""response""both"
category_sensitivitiesmap<string, array<string>>optionalMap value specification
array<string>sub_category_sensitivitiesmap<string, map<string, array<string>>>optionalMap value specification
map<string, array<string>>edm_pattern_sensitivitiesmap<string, string>optionalMap value specification
stringValues: "low""medium""high"
custom_definitionsarray<object>optionalFull replacement of definition selections; [] removes selections. Does not delete definitions.
Array item specification
definition_idstringrequiredStable ID from GET /custom-definitions.
enabledbooleanoptionalactionstringoptionalAdversarial detections do not expose redactable spans; incompatible actions are rejected by catalog validation.
"monitor""partial-redact""redact""block"scopestringoptional"request""response""both"sensitivitystringoptional"low""medium""high"Unknown fields are rejected in this object.
Unknown fields are rejected in this object.
Unknown fields are rejected in this object.
token_savingobjectoptionalObject fields
smart_json_compressionbooleanoptionalhtml_to_textbooleanoptionalmarkdown_to_textbooleanoptionaltext_compressionbooleanoptionalUnknown fields are rejected in this object.
prompt_storeobjectoptionalObject fields
require_system_from_storebooleanoptionalOnly enforcement is controlled here; use prompt endpoints for content.
Unknown fields are rejected in this object.
alertingobject | nulloptionalNull clears alert configuration.
Alerting object
app_levelobjectoptionalObject fields
enabledbooleanoptionalwindow_minutesintegeroptionalfailure_rate_thresholdnumberoptionalPercentage.
minimum_requestsintegeroptionalcooldown_minutesintegeroptionalnotify_on_recoverybooleanoptionalUnknown fields are rejected in this object.
provider_levelobjectoptionalObject fields
enabledbooleanoptionalwindow_minutesintegeroptionalfailure_rate_thresholdnumberoptionalPercentage.
minimum_requestsintegeroptionalcooldown_minutesintegeroptionalnotify_on_recoverybooleanoptionalUnknown fields are rejected in this object.
channelsobjectoptionalObject fields
emailsarray<string>optionalArray item specification
stringwebhooksarray<object>optionalArray item specification
idstringrequiredtypestringrequired"slack""generic"labelstringoptionalurlstringoptionalSecret webhook URL. Omission on an existing webhook preserves it.
Unknown fields are rejected in this object.
Unknown fields are rejected in this object.
Unknown fields are rejected in this object.
Also accepts null.
Unknown fields are rejected in this object.
Example: guardrails, limits and an existing group
{
"detection": {
"data_risk_action": "redact",
"enabled_categories": {"data_risk_category_pii": true},
"custom_definitions": [{
"definition_id": "employee_id",
"enabled": true,
"action": "block",
"scope": "request"
}]
},
"limits": {
"timeout": 60,
"rate_limit": {"value": 1000, "duration": "minute"},
"token_limits": {"max_per_request": 16000}
},
"smart_group_policies": [{
"group_name": "engineering",
"enabled": true,
"detection": {"data_risk_action": "monitor"}
}],
"token_saving": {"smart_json_compression": true},
"prompt_store": {"require_system_from_store": true}
}
The example assumes employee_id and engineering already exist in the tenant. Query the catalogs before using their names/IDs.
Example: weighted routing
{
"routing": {
"groups": [{
"name": "support-chat",
"kind": "chat_completion",
"mode": "requests",
"members": [
{"provider_label": "Production OpenAI", "model": "gpt-4.1-mini", "weight": 80},
{"provider_label": "Backup OpenAI", "model": "gpt-4.1-mini", "weight": 20}
]
}],
"context_routes": [],
"context_thresholds": {"low_max_words": 200, "medium_max_words": 1000}
}
}
Both providers must already be attached with compatible models. The groups array replaces all request/token routing groups; include every group you intend to retain. Policies may govern which routes actually run.