Apps and credentials API
An app owns its gateway credentials, stored controls, routing, prompts and configuration history. Manage it by app name within the key's tenant. App deletion is Not Generally Available.
Apps and provider attachments
Naming and identity
Names are trimmed and compared case-insensitively. New names must be unique among enabled and disabled apps. A disabled app continues to reserve its name. If multiple legacy apps match a name, the API returns 409 ambiguous_app_name instead of choosing one silently.
For simple names, encode one URL path segment: Support Bot becomes Support%20Bot. For names containing /, % or other proxy-sensitive characters, use /app?app_name=<URL-encoded name>. Every app subresource has this query alias, for example /app/keys?app_name=Team%20%2F%20Support. Encode the query value once. App renaming is Not Generally Available. Changing an individual credential does not change the canonical app or log attribution.
Creating an app
App creation validates configuration without contacting an upstream model. When QuilrQL is already enabled, creation captures an app baseline and can publish an app-scoped allowed-models default for all users. This does not enable authority or edit drafts, and matching tenant policies still apply. See QuilrQL behavior. Model reachability requires an explicit supported model test.
Disable means the whole app
PATCH enabled:false to prevent newly admitted runtime traffic once the new configuration has propagated. Settings, provider references, keys, prompts and history remain available to management. Setting enabled:true resumes normal authentication, provider and policy checks.
Whole-app availability is independent of QuilrQL. Disabling an app does not become an inactive policy-governed setting, and re-enabling it does not resurrect expired/revoked keys. This is different from disabling just its primary provider.
Attachment and conversion rules
- Attach an existing enabled shared provider by label.
primary:falsepreserves the current primary;primary:truedeliberately promotes the attachment. provider_labelson an app PATCH replaces the entire ordered selection. Omission preserves it.- A detach is app-local and validates remaining routing references and provider selection. While QuilrQL is enabled, provider removal conservatively returns
409 policy_dependency; adding a provider remains supported. Provider-backed apps must keep at least one provider. - Legacy inline-provider apps can be read and receive non-provider edits. Provider changes require the explicit conversion endpoint first.
- Conversion supplies the complete shared-provider selection and optional routing, using the current app ETag. It preserves the app and its keys. It does not create shared providers or publish policy, and it has no idempotent-replay contract.
App endpoints
Expand Full request body specification for every field, including nested configuration. For a focused view, see the configuration schema.
/appsList apps
Tenant app collection. Creation requires config:write and credentials:write and issues one gateway credential. Existing QuilrQL authority can publish app-specific model-access defaults.
readPath, query & header parameters 5
limit (query)integeroptionalcursor (query)stringoptionalname (query)stringoptionalCase-insensitive name substring.
tag (query)stringoptionalExact tag.
enabled (query)stringoptionaltrue or false.
No request body.
curl --request GET \
'https://management.example.com/llmgateway/management/v1/apps?limit=50' \
--header 'Authorization: Bearer <management-key>'
/appsCreate an app
Tenant app collection. Creation requires config:write and credentials:write and issues one gateway credential. Existing QuilrQL authority can publish app-specific model-access defaults.
config:writecredentials:writePath, query & header parameters 1
Idempotency-Key (header)stringrequiredFull request body specification application/json
Create an app and one gateway credential. Gateway mode requires a nonempty ordered provider_labels list; SDK/Copilot Studio omit it. initial_key defaults to a key named Default. Existing QuilrQL authority can publish the new app allowed-models default.
detectionobjectoptionalObject fields
category_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"
category_scopesmap<string, string>optionalMap value specification
stringValues: "request""response""both"
category_sensitivitiesmap<string, array<string>>optionalMap value specification
array<string>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.
data_risk_actionstringoptionalAdversarial detections do not expose redactable spans; incompatible actions are rejected by catalog validation.
"monitor""partial-redact""redact""block"edm_pattern_sensitivitiesmap<string, string>optionalMap value specification
stringValues: "low""medium""high"
enabled_categoriesmap<string, boolean>optionalCatalog category/subcategory IDs mapped to enabled state. Unknown selectors are rejected.
Map value specification
booleanguardian_agentobjectoptionalPartial update of Guardian branches. Set a branch enabled:false to disable it. Model-backed checks follow deployment capability.
Object fields
enabledbooleanoptionalcoding_helpersobjectoptionalObject fields
enabledbooleanoptionaldependency_security_checkbooleanoptionallatest_version_suggestionsbooleanoptionaltask_adherenceobjectoptionalObject fields
enabledbooleanoptionalactionstringoptional"nudge""block"sensitivitystringoptional"low""medium""high"agent_purposestringoptionalguardian_agent_promptstringoptionalhallucination_check_actionstringoptional"block""monitor"hallucination_check_risk_levelstringoptionalhallucination_check_score_thresholdnumberoptionalis_hallucination_check_enabledbooleanoptionalscan_encoded_imagesbooleanoptionalscan_encoded_images_scopestringoptional"request""response""both"scan_imagesbooleanoptionalscan_images_scopestringoptional"request""response""both"sub_category_actionsmap<string, map<string, string>>optionalCategory ID to subcategory name to action.
Map value specification
map<string, string>sub_category_sensitivitiesmap<string, map<string, string>>optionalMap value specification
map<string, string>Unknown fields are rejected in this object.
limitsobjectoptionalObject fields
concurrency_per_minuteinteger | nulloptionalmodel_rate_limitsarray<object>optionalArray 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"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"Also accepts null.
outputobject | nulloptionalRateLimit object
valueintegerrequiredMaximum events in the window; zero disables this limit.
durationstringrequired"minute""hour""day"Also accepts null.
Also accepts null.
rate_limitobject | nulloptionalRateLimit object
valueintegerrequiredMaximum events in the window; zero disables this limit.
durationstringrequired"minute""hour""day"Also accepts null.
rate_limit_per_minuteintegeroptionaltimeoutinteger | nulloptionaltoken_limitsobjectoptionalObject fields
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"Also accepts null.
outputobject | nulloptionalRateLimit object
valueintegerrequiredMaximum events in the window; zero disables this limit.
durationstringrequired"minute""hour""day"Also accepts null.
Unknown fields are rejected in this object.
routingobjectoptionalObject fields
custom_routingarray<object>optionalArray item specification
groupstringoptional"chat_completion""anthropic_messages""vertex_ai""responses""bedrock_runtime"typestringrequired"Low_Context_Request""Medium_Context_Request""High_Context_Request"is_publishedbooleanrequiredmodelsarray<object>requiredArray item specification
provider_namestringrequiredmodelstringrequiredlabelstringoptionalcredential_sourcestringoptionalrouting_groupsarray<object>optionalArray item specification
group_namestringrequiredgroup_kindstringoptional"chat_completion""anthropic_messages""vertex_ai""responses""realtime""bedrock_runtime"modelsarray<object>requiredArray item specification
provider_namestringrequiredmodel_namestringrequiredcredential_sourcestringoptionalAttached shared-provider label; no inline credentials.
weightnumberrequiredrouting_thresholdsobjectoptional0 <= low_max_words <= medium_max_words.
Object fields
low_max_wordsintegerrequiredmedium_max_wordsintegerrequiredUnknown fields are rejected in this object.
token_based_routing_groupsarray<object>optionalArray item specification
group_namestringrequiredgroup_kindstringoptional"chat_completion""anthropic_messages""vertex_ai""responses""realtime""bedrock_runtime"modelsarray<object>requiredArray item specification
provider_namestringrequiredmodel_namestringrequiredcredential_sourcestringoptionalAttached shared-provider label; no inline credentials.
weightnumberrequiredUnknown fields are rejected in this object.
accessobjectoptionalObject fields
allowed_source_ipsone of 3 variantsoptionalVariant 1 array<string>
array<string>Variant 2 object
enabledbooleanoptionalipsarray<string>optionalArray item specification
stringUnknown fields are rejected in this object.
Also accepts null.
allowed_user_domainsarray<string>optionalArray item specification
stringallowed_user_emailsarray<string>optionalArray item specification
stringenforce_conversation_idbooleanoptionalenforce_identitybooleanoptionalidentity_header_modebooleanoptionalidentity_token_headersarray<string>optionalArray item specification
stringidentity_token_oid_fallbackbooleanoptionaljwt_authobject | nulloptionalJwtAuth object
enabledbooleanoptionalallowed_issuersarray<string>optionalArray item specification
stringallowed_client_idsarray<string>optionalArray item specification
stringpublic_key_pemstringoptionalRSA public key in PEM format. Required for an enabled configuration; saves do not fetch JWKS URLs.
kidstringoptionalUnknown fields are rejected in this object.
Also accepts null.
Unknown fields are rejected in this object.
transformationsobjectoptionalObject fields
token_savingobjectoptionalObject fields
smart_json_compressionbooleanoptionalhtml_to_textbooleanoptionalmarkdown_to_textbooleanoptionaltext_compressionbooleanoptionalUnknown fields are rejected in this object.
Unknown fields are rejected in this object.
self_serviceobjectoptionalObject fields
enable_self_servicebooleanoptionalself_serviceobjectoptionalStored self-service configuration. Access-control roles live inside this object. Omit to preserve; the section itself does not accept null.
Object fields
access_controlobject | nulloptionalVariant 1 object
version1optionalself_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.
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.
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.
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.
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.
Also accepts null.
Unknown fields are rejected in this object.
promptsobjectoptionalObject fields
require_system_from_storebooleanoptionalUnknown fields are rejected in this object.
enabledbooleanoptionalsmart_group_policiesarray<object>optionalArray item specification
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>group_namestringrequiredenabledbooleanoptionalactionsobjectoptionalObject fields
data_risk_actionstringoptionalAdversarial detections do not expose redactable spans; incompatible actions are rejected by catalog validation.
"monitor""partial-redact""redact""block"hallucination_check_actionstringoptional"block""monitor"sub_category_sensitivitiesmap<string, map<string, string>>optionalMap value specification
map<string, string>Unknown fields are rejected in this object.
alertingobject | nulloptionalAlerting object
app_levelobjectoptionalObject fields
enabledbooleanoptionalwindow_minutesintegeroptionalfailure_rate_thresholdnumberoptionalPercentage.
minimum_requestsintegeroptionalcooldown_minutesintegeroptionalnotify_on_recoverybooleanoptionalprovider_levelobjectoptionalObject fields
enabledbooleanoptionalwindow_minutesintegeroptionalfailure_rate_thresholdnumberoptionalPercentage.
minimum_requestsintegeroptionalcooldown_minutesintegeroptionalnotify_on_recoverybooleanoptionalchannelsobjectoptionalObject fields
emailsarray<string>optionalArray item specification
stringwebhooksarray<object>optionalArray item specification
idstringoptionaltypestringoptional"slack""generic"labelstringoptionalurlstringrequiredHTTPS webhook URL, required for each submitted webhook. Omit the whole alerting field to preserve stored configuration.
Also accepts null.
provider_labelsarray<string>optionalArray item specification
stringtagsarray<string>optionalArray item specification
stringnamestringrequiredmodestringoptional"gateway""sdk""copilot_studio"initial_keyobjectoptionalObject fields
namestringoptionalexpires_atstring | nulloptionalUnknown fields are rejected in this object.
Unknown fields are rejected in this object.
curl --request POST \
'https://management.example.com/llmgateway/management/v1/apps' \
--header 'Authorization: Bearer <management-key>' \
--header 'Idempotency-Key: unique-operation-001' \
--header 'Content-Type: application/json' \
--data '{
"name": "Support Bot",
"provider_labels": [
"Production OpenAI"
],
"tags": [
"production"
]
}'
/apps/{app_name}Read an app
Read or update stored settings. App enablement is enforced independently of QuilrQL.
readPath, query & header parameters 1
app_name (path)stringrequiredNo request body.
curl --request GET \
'https://management.example.com/llmgateway/management/v1/apps/Support%20Bot' \
--header 'Authorization: Bearer <management-key>'
/apps/{app_name}Update or disable an app
Read or update stored settings. App enablement is enforced independently of QuilrQL.
config:writePath, query & header parameters 2
app_name (path)stringrequiredIf-Match (header)stringrequiredQuoted ETag returned by the latest resource read. Prompt/attachment/rollback writes use the app ETag.
Full request body specification application/json
Stored app settings. Omitted fields are preserved. Unknown top-level and section fields are rejected. Nested controls follow the existing gateway validators. Responses report settings that are inactive under QuilrQL.
detectionobjectoptionalObject fields
category_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"
category_scopesmap<string, string>optionalMap value specification
stringValues: "request""response""both"
category_sensitivitiesmap<string, array<string>>optionalMap value specification
array<string>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.
data_risk_actionstringoptionalAdversarial detections do not expose redactable spans; incompatible actions are rejected by catalog validation.
"monitor""partial-redact""redact""block"edm_pattern_sensitivitiesmap<string, string>optionalMap value specification
stringValues: "low""medium""high"
enabled_categoriesmap<string, boolean>optionalCatalog category/subcategory IDs mapped to enabled state. Unknown selectors are rejected.
Map value specification
booleanguardian_agentobjectoptionalPartial update of Guardian branches. Set a branch enabled:false to disable it. Model-backed checks follow deployment capability.
Object fields
enabledbooleanoptionalcoding_helpersobjectoptionalObject fields
enabledbooleanoptionaldependency_security_checkbooleanoptionallatest_version_suggestionsbooleanoptionaltask_adherenceobjectoptionalObject fields
enabledbooleanoptionalactionstringoptional"nudge""block"sensitivitystringoptional"low""medium""high"agent_purposestringoptionalguardian_agent_promptstringoptionalhallucination_check_actionstringoptional"block""monitor"hallucination_check_risk_levelstringoptionalhallucination_check_score_thresholdnumberoptionalis_hallucination_check_enabledbooleanoptionalscan_encoded_imagesbooleanoptionalscan_encoded_images_scopestringoptional"request""response""both"scan_imagesbooleanoptionalscan_images_scopestringoptional"request""response""both"sub_category_actionsmap<string, map<string, string>>optionalCategory ID to subcategory name to action.
Map value specification
map<string, string>sub_category_sensitivitiesmap<string, map<string, string>>optionalMap value specification
map<string, string>Unknown fields are rejected in this object.
limitsobjectoptionalObject fields
concurrency_per_minuteinteger | nulloptionalmodel_rate_limitsarray<object>optionalArray 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"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"Also accepts null.
outputobject | nulloptionalRateLimit object
valueintegerrequiredMaximum events in the window; zero disables this limit.
durationstringrequired"minute""hour""day"Also accepts null.
Also accepts null.
rate_limitobject | nulloptionalRateLimit object
valueintegerrequiredMaximum events in the window; zero disables this limit.
durationstringrequired"minute""hour""day"Also accepts null.
rate_limit_per_minuteintegeroptionaltimeoutinteger | nulloptionaltoken_limitsobjectoptionalObject fields
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"Also accepts null.
outputobject | nulloptionalRateLimit object
valueintegerrequiredMaximum events in the window; zero disables this limit.
durationstringrequired"minute""hour""day"Also accepts null.
Unknown fields are rejected in this object.
routingobjectoptionalObject fields
custom_routingarray<object>optionalArray item specification
groupstringoptional"chat_completion""anthropic_messages""vertex_ai""responses""bedrock_runtime"typestringrequired"Low_Context_Request""Medium_Context_Request""High_Context_Request"is_publishedbooleanrequiredmodelsarray<object>requiredArray item specification
provider_namestringrequiredmodelstringrequiredlabelstringoptionalcredential_sourcestringoptionalrouting_groupsarray<object>optionalArray item specification
group_namestringrequiredgroup_kindstringoptional"chat_completion""anthropic_messages""vertex_ai""responses""realtime""bedrock_runtime"modelsarray<object>requiredArray item specification
provider_namestringrequiredmodel_namestringrequiredcredential_sourcestringoptionalAttached shared-provider label; no inline credentials.
weightnumberrequiredrouting_thresholdsobjectoptional0 <= low_max_words <= medium_max_words.
Object fields
low_max_wordsintegerrequiredmedium_max_wordsintegerrequiredUnknown fields are rejected in this object.
token_based_routing_groupsarray<object>optionalArray item specification
group_namestringrequiredgroup_kindstringoptional"chat_completion""anthropic_messages""vertex_ai""responses""realtime""bedrock_runtime"modelsarray<object>requiredArray item specification
provider_namestringrequiredmodel_namestringrequiredcredential_sourcestringoptionalAttached shared-provider label; no inline credentials.
weightnumberrequiredUnknown fields are rejected in this object.
accessobjectoptionalObject fields
allowed_source_ipsone of 3 variantsoptionalVariant 1 array<string>
array<string>Variant 2 object
enabledbooleanoptionalipsarray<string>optionalArray item specification
stringUnknown fields are rejected in this object.
Also accepts null.
allowed_user_domainsarray<string>optionalArray item specification
stringallowed_user_emailsarray<string>optionalArray item specification
stringenforce_conversation_idbooleanoptionalenforce_identitybooleanoptionalidentity_header_modebooleanoptionalidentity_token_headersarray<string>optionalArray item specification
stringidentity_token_oid_fallbackbooleanoptionaljwt_authobject | nulloptionalJwtAuth object
enabledbooleanoptionalallowed_issuersarray<string>optionalArray item specification
stringallowed_client_idsarray<string>optionalArray item specification
stringpublic_key_pemstringoptionalRSA public key in PEM format. Required for an enabled configuration; saves do not fetch JWKS URLs.
kidstringoptionalUnknown fields are rejected in this object.
Also accepts null.
Unknown fields are rejected in this object.
transformationsobjectoptionalObject fields
token_savingobjectoptionalObject fields
smart_json_compressionbooleanoptionalhtml_to_textbooleanoptionalmarkdown_to_textbooleanoptionaltext_compressionbooleanoptionalUnknown fields are rejected in this object.
Unknown fields are rejected in this object.
self_serviceobjectoptionalObject fields
enable_self_servicebooleanoptionalself_serviceobjectoptionalStored self-service configuration. Access-control roles live inside this object. Omit to preserve; the section itself does not accept null.
Object fields
access_controlobject | nulloptionalVariant 1 object
version1optionalself_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.
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.
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.
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.
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.
Also accepts null.
Unknown fields are rejected in this object.
promptsobjectoptionalObject fields
require_system_from_storebooleanoptionalUnknown fields are rejected in this object.
enabledbooleanoptionalsmart_group_policiesarray<object>optionalArray item specification
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>group_namestringrequiredenabledbooleanoptionalactionsobjectoptionalObject fields
data_risk_actionstringoptionalAdversarial detections do not expose redactable spans; incompatible actions are rejected by catalog validation.
"monitor""partial-redact""redact""block"hallucination_check_actionstringoptional"block""monitor"sub_category_sensitivitiesmap<string, map<string, string>>optionalMap value specification
map<string, string>Unknown fields are rejected in this object.
alertingobject | nulloptionalAlerting object
app_levelobjectoptionalObject fields
enabledbooleanoptionalwindow_minutesintegeroptionalfailure_rate_thresholdnumberoptionalPercentage.
minimum_requestsintegeroptionalcooldown_minutesintegeroptionalnotify_on_recoverybooleanoptionalprovider_levelobjectoptionalObject fields
enabledbooleanoptionalwindow_minutesintegeroptionalfailure_rate_thresholdnumberoptionalPercentage.
minimum_requestsintegeroptionalcooldown_minutesintegeroptionalnotify_on_recoverybooleanoptionalchannelsobjectoptionalObject fields
emailsarray<string>optionalArray item specification
stringwebhooksarray<object>optionalArray item specification
idstringoptionaltypestringoptional"slack""generic"labelstringoptionalurlstringrequiredHTTPS webhook URL, required for each submitted webhook. Omit the whole alerting field to preserve stored configuration.
Also accepts null.
provider_labelsarray<string>optionalArray item specification
stringtagsarray<string>optionalArray item specification
stringUnknown fields are rejected in this object.
curl --request PATCH \
'https://management.example.com/llmgateway/management/v1/apps/Support%20Bot' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "resource-version-from-read"' \
--header 'Content-Type: application/json' \
--data '{
"detection": {
"data_risk_action": "redact"
},
"limits": {
"timeout": 30
}
}'
/apps/{app_name}/providersList app providers
Returns ordered provider_labels and the app version, not a paginated provider collection.
readPath, query & header parameters 1
app_name (path)stringrequiredNo request body.
curl --request GET \
'https://management.example.com/llmgateway/management/v1/apps/Support%20Bot/providers' \
--header 'Authorization: Bearer <management-key>'
/apps/{app_name}/providers/{label}Attach a shared provider
Use the current app ETag. PUT preserves unrelated attachments; DELETE validates remaining routes. Provider removal while QuilrQL is enabled returns policy_dependency.
config:writePath, query & header parameters 3
app_name (path)stringrequiredlabel (path)stringrequiredIf-Match (header)stringrequiredQuoted ETag returned by the latest resource read. Prompt/attachment/rollback writes use the app ETag.
Full request body specification application/json
primarybooleanoptionalUnknown fields are rejected in this object.
curl --request PUT \
'https://management.example.com/llmgateway/management/v1/apps/Support%20Bot/providers/Production%20OpenAI' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "resource-version-from-read"' \
--header 'Content-Type: application/json' \
--data '{
"primary": false
}'
/apps/{app_name}/providers/{label}Detach an app provider
Use the current app ETag. PUT preserves unrelated attachments; DELETE validates remaining routes. Provider removal while QuilrQL is enabled returns policy_dependency.
config:writePath, query & header parameters 3
app_name (path)stringrequiredlabel (path)stringrequiredIf-Match (header)stringrequiredQuoted ETag returned by the latest resource read. Prompt/attachment/rollback writes use the app ETag.
Full request body specification application/json
Unknown fields are rejected in this object.
curl --request DELETE \
'https://management.example.com/llmgateway/management/v1/apps/Support%20Bot/providers/Production%20OpenAI' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "resource-version-from-read"' \
--header 'Content-Type: application/json' \
--data '{}'
/apps/{app_name}/provider-conversionConvert inline providers
Convert an inline app using a complete shared-provider selection. Uses the app ETag; no idempotency replay contract.
config:writePath, query & header parameters 2
app_name (path)stringrequiredIf-Match (header)stringrequiredQuoted ETag returned by the latest resource read. Prompt/attachment/rollback writes use the app ETag.
Full request body specification application/json
provider_labelsarray<string>requiredArray item specification
stringroutingobjectoptionalObject fields
custom_routingarray<object>optionalArray item specification
groupstringoptional"chat_completion""anthropic_messages""vertex_ai""responses""bedrock_runtime"typestringrequired"Low_Context_Request""Medium_Context_Request""High_Context_Request"is_publishedbooleanrequiredmodelsarray<object>requiredArray item specification
provider_namestringrequiredmodelstringrequiredlabelstringoptionalcredential_sourcestringoptionalrouting_groupsarray<object>optionalArray item specification
group_namestringrequiredgroup_kindstringoptional"chat_completion""anthropic_messages""vertex_ai""responses""realtime""bedrock_runtime"modelsarray<object>requiredArray item specification
provider_namestringrequiredmodel_namestringrequiredcredential_sourcestringoptionalAttached shared-provider label; no inline credentials.
weightnumberrequiredrouting_thresholdsobjectoptional0 <= low_max_words <= medium_max_words.
Object fields
low_max_wordsintegerrequiredmedium_max_wordsintegerrequiredUnknown fields are rejected in this object.
token_based_routing_groupsarray<object>optionalArray item specification
group_namestringrequiredgroup_kindstringoptional"chat_completion""anthropic_messages""vertex_ai""responses""realtime""bedrock_runtime"modelsarray<object>requiredArray item specification
provider_namestringrequiredmodel_namestringrequiredcredential_sourcestringoptionalAttached shared-provider label; no inline credentials.
weightnumberrequiredUnknown fields are rejected in this object.
Unknown fields are rejected in this object.
curl --request POST \
'https://management.example.com/llmgateway/management/v1/apps/Support%20Bot/provider-conversion' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "resource-version-from-read"' \
--header 'Content-Type: application/json' \
--data '{
"provider_labels": [
"Production OpenAI"
]
}'
/appRead an app (query locator)
Read or update stored settings. App enablement is enforced independently of QuilrQL. Use app_name in the query for names containing slashes or literal percent signs; URL-encode the query value once.
readPath, query & header parameters 1
app_name (query)stringrequiredExact display name; encode with standard query URL encoding.
No request body.
curl --request GET \
'https://management.example.com/llmgateway/management/v1/app?app_name=Support%20Bot' \
--header 'Authorization: Bearer <management-key>'
/appUpdate or disable an app (query locator)
Read or update stored settings. App enablement is enforced independently of QuilrQL. Use app_name in the query for names containing slashes or literal percent signs; URL-encode the query value once.
config:writePath, query & header parameters 2
app_name (query)stringrequiredExact display name; encode with standard query URL encoding.
If-Match (header)stringrequiredQuoted ETag returned by the latest resource read. Prompt/attachment/rollback writes use the app ETag.
Full request body specification application/json
Stored app settings. Omitted fields are preserved. Unknown top-level and section fields are rejected. Nested controls follow the existing gateway validators. Responses report settings that are inactive under QuilrQL.
detectionobjectoptionalObject fields
category_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"
category_scopesmap<string, string>optionalMap value specification
stringValues: "request""response""both"
category_sensitivitiesmap<string, array<string>>optionalMap value specification
array<string>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.
data_risk_actionstringoptionalAdversarial detections do not expose redactable spans; incompatible actions are rejected by catalog validation.
"monitor""partial-redact""redact""block"edm_pattern_sensitivitiesmap<string, string>optionalMap value specification
stringValues: "low""medium""high"
enabled_categoriesmap<string, boolean>optionalCatalog category/subcategory IDs mapped to enabled state. Unknown selectors are rejected.
Map value specification
booleanguardian_agentobjectoptionalPartial update of Guardian branches. Set a branch enabled:false to disable it. Model-backed checks follow deployment capability.
Object fields
enabledbooleanoptionalcoding_helpersobjectoptionalObject fields
enabledbooleanoptionaldependency_security_checkbooleanoptionallatest_version_suggestionsbooleanoptionaltask_adherenceobjectoptionalObject fields
enabledbooleanoptionalactionstringoptional"nudge""block"sensitivitystringoptional"low""medium""high"agent_purposestringoptionalguardian_agent_promptstringoptionalhallucination_check_actionstringoptional"block""monitor"hallucination_check_risk_levelstringoptionalhallucination_check_score_thresholdnumberoptionalis_hallucination_check_enabledbooleanoptionalscan_encoded_imagesbooleanoptionalscan_encoded_images_scopestringoptional"request""response""both"scan_imagesbooleanoptionalscan_images_scopestringoptional"request""response""both"sub_category_actionsmap<string, map<string, string>>optionalCategory ID to subcategory name to action.
Map value specification
map<string, string>sub_category_sensitivitiesmap<string, map<string, string>>optionalMap value specification
map<string, string>Unknown fields are rejected in this object.
limitsobjectoptionalObject fields
concurrency_per_minuteinteger | nulloptionalmodel_rate_limitsarray<object>optionalArray 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"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"Also accepts null.
outputobject | nulloptionalRateLimit object
valueintegerrequiredMaximum events in the window; zero disables this limit.
durationstringrequired"minute""hour""day"Also accepts null.
Also accepts null.
rate_limitobject | nulloptionalRateLimit object
valueintegerrequiredMaximum events in the window; zero disables this limit.
durationstringrequired"minute""hour""day"Also accepts null.
rate_limit_per_minuteintegeroptionaltimeoutinteger | nulloptionaltoken_limitsobjectoptionalObject fields
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"Also accepts null.
outputobject | nulloptionalRateLimit object
valueintegerrequiredMaximum events in the window; zero disables this limit.
durationstringrequired"minute""hour""day"Also accepts null.
Unknown fields are rejected in this object.
routingobjectoptionalObject fields
custom_routingarray<object>optionalArray item specification
groupstringoptional"chat_completion""anthropic_messages""vertex_ai""responses""bedrock_runtime"typestringrequired"Low_Context_Request""Medium_Context_Request""High_Context_Request"is_publishedbooleanrequiredmodelsarray<object>requiredArray item specification
provider_namestringrequiredmodelstringrequiredlabelstringoptionalcredential_sourcestringoptionalrouting_groupsarray<object>optionalArray item specification
group_namestringrequiredgroup_kindstringoptional"chat_completion""anthropic_messages""vertex_ai""responses""realtime""bedrock_runtime"modelsarray<object>requiredArray item specification
provider_namestringrequiredmodel_namestringrequiredcredential_sourcestringoptionalAttached shared-provider label; no inline credentials.
weightnumberrequiredrouting_thresholdsobjectoptional0 <= low_max_words <= medium_max_words.
Object fields
low_max_wordsintegerrequiredmedium_max_wordsintegerrequiredUnknown fields are rejected in this object.
token_based_routing_groupsarray<object>optionalArray item specification
group_namestringrequiredgroup_kindstringoptional"chat_completion""anthropic_messages""vertex_ai""responses""realtime""bedrock_runtime"modelsarray<object>requiredArray item specification
provider_namestringrequiredmodel_namestringrequiredcredential_sourcestringoptionalAttached shared-provider label; no inline credentials.
weightnumberrequiredUnknown fields are rejected in this object.
accessobjectoptionalObject fields
allowed_source_ipsone of 3 variantsoptionalVariant 1 array<string>
array<string>Variant 2 object
enabledbooleanoptionalipsarray<string>optionalArray item specification
stringUnknown fields are rejected in this object.
Also accepts null.
allowed_user_domainsarray<string>optionalArray item specification
stringallowed_user_emailsarray<string>optionalArray item specification
stringenforce_conversation_idbooleanoptionalenforce_identitybooleanoptionalidentity_header_modebooleanoptionalidentity_token_headersarray<string>optionalArray item specification
stringidentity_token_oid_fallbackbooleanoptionaljwt_authobject | nulloptionalJwtAuth object
enabledbooleanoptionalallowed_issuersarray<string>optionalArray item specification
stringallowed_client_idsarray<string>optionalArray item specification
stringpublic_key_pemstringoptionalRSA public key in PEM format. Required for an enabled configuration; saves do not fetch JWKS URLs.
kidstringoptionalUnknown fields are rejected in this object.
Also accepts null.
Unknown fields are rejected in this object.
transformationsobjectoptionalObject fields
token_savingobjectoptionalObject fields
smart_json_compressionbooleanoptionalhtml_to_textbooleanoptionalmarkdown_to_textbooleanoptionaltext_compressionbooleanoptionalUnknown fields are rejected in this object.
Unknown fields are rejected in this object.
self_serviceobjectoptionalObject fields
enable_self_servicebooleanoptionalself_serviceobjectoptionalStored self-service configuration. Access-control roles live inside this object. Omit to preserve; the section itself does not accept null.
Object fields
access_controlobject | nulloptionalVariant 1 object
version1optionalself_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.
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.
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.
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.
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.
Also accepts null.
Unknown fields are rejected in this object.
promptsobjectoptionalObject fields
require_system_from_storebooleanoptionalUnknown fields are rejected in this object.
enabledbooleanoptionalsmart_group_policiesarray<object>optionalArray item specification
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>group_namestringrequiredenabledbooleanoptionalactionsobjectoptionalObject fields
data_risk_actionstringoptionalAdversarial detections do not expose redactable spans; incompatible actions are rejected by catalog validation.
"monitor""partial-redact""redact""block"hallucination_check_actionstringoptional"block""monitor"sub_category_sensitivitiesmap<string, map<string, string>>optionalMap value specification
map<string, string>Unknown fields are rejected in this object.
alertingobject | nulloptionalAlerting object
app_levelobjectoptionalObject fields
enabledbooleanoptionalwindow_minutesintegeroptionalfailure_rate_thresholdnumberoptionalPercentage.
minimum_requestsintegeroptionalcooldown_minutesintegeroptionalnotify_on_recoverybooleanoptionalprovider_levelobjectoptionalObject fields
enabledbooleanoptionalwindow_minutesintegeroptionalfailure_rate_thresholdnumberoptionalPercentage.
minimum_requestsintegeroptionalcooldown_minutesintegeroptionalnotify_on_recoverybooleanoptionalchannelsobjectoptionalObject fields
emailsarray<string>optionalArray item specification
stringwebhooksarray<object>optionalArray item specification
idstringoptionaltypestringoptional"slack""generic"labelstringoptionalurlstringrequiredHTTPS webhook URL, required for each submitted webhook. Omit the whole alerting field to preserve stored configuration.
Also accepts null.
provider_labelsarray<string>optionalArray item specification
stringtagsarray<string>optionalArray item specification
stringUnknown fields are rejected in this object.
curl --request PATCH \
'https://management.example.com/llmgateway/management/v1/app?app_name=Support%20Bot' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "resource-version-from-read"' \
--header 'Content-Type: application/json' \
--data '{
"detection": {
"data_risk_action": "redact"
},
"limits": {
"timeout": 30
}
}'
/app/providersList app providers (query locator)
Returns ordered provider_labels and the app version, not a paginated provider collection. Use app_name in the query for names containing slashes or literal percent signs; URL-encode the query value once.
readPath, query & header parameters 1
app_name (query)stringrequiredExact display name; encode with standard query URL encoding.
No request body.
curl --request GET \
'https://management.example.com/llmgateway/management/v1/app/providers?app_name=Support%20Bot' \
--header 'Authorization: Bearer <management-key>'
/app/providers/{label}Attach a shared provider (query locator)
Use the current app ETag. PUT preserves unrelated attachments; DELETE validates remaining routes. Provider removal while QuilrQL is enabled returns policy_dependency. Use app_name in the query for names containing slashes or literal percent signs; URL-encode the query value once.
config:writePath, query & header parameters 3
label (path)stringrequiredapp_name (query)stringrequiredExact display name; encode with standard query URL encoding.
If-Match (header)stringrequiredQuoted ETag returned by the latest resource read. Prompt/attachment/rollback writes use the app ETag.
Full request body specification application/json
primarybooleanoptionalUnknown fields are rejected in this object.
curl --request PUT \
'https://management.example.com/llmgateway/management/v1/app/providers/Production%20OpenAI?app_name=Support%20Bot' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "resource-version-from-read"' \
--header 'Content-Type: application/json' \
--data '{
"primary": false
}'
/app/providers/{label}Detach an app provider (query locator)
Use the current app ETag. PUT preserves unrelated attachments; DELETE validates remaining routes. Provider removal while QuilrQL is enabled returns policy_dependency. Use app_name in the query for names containing slashes or literal percent signs; URL-encode the query value once.
config:writePath, query & header parameters 3
label (path)stringrequiredapp_name (query)stringrequiredExact display name; encode with standard query URL encoding.
If-Match (header)stringrequiredQuoted ETag returned by the latest resource read. Prompt/attachment/rollback writes use the app ETag.
Full request body specification application/json
Unknown fields are rejected in this object.
curl --request DELETE \
'https://management.example.com/llmgateway/management/v1/app/providers/Production%20OpenAI?app_name=Support%20Bot' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "resource-version-from-read"' \
--header 'Content-Type: application/json' \
--data '{}'
/app/provider-conversionConvert inline providers (query locator)
Convert an inline app using a complete shared-provider selection. Uses the app ETag; no idempotency replay contract. Use app_name in the query for names containing slashes or literal percent signs; URL-encode the query value once.
config:writePath, query & header parameters 2
app_name (query)stringrequiredExact display name; encode with standard query URL encoding.
If-Match (header)stringrequiredQuoted ETag returned by the latest resource read. Prompt/attachment/rollback writes use the app ETag.
Full request body specification application/json
provider_labelsarray<string>requiredArray item specification
stringroutingobjectoptionalObject fields
custom_routingarray<object>optionalArray item specification
groupstringoptional"chat_completion""anthropic_messages""vertex_ai""responses""bedrock_runtime"typestringrequired"Low_Context_Request""Medium_Context_Request""High_Context_Request"is_publishedbooleanrequiredmodelsarray<object>requiredArray item specification
provider_namestringrequiredmodelstringrequiredlabelstringoptionalcredential_sourcestringoptionalrouting_groupsarray<object>optionalArray item specification
group_namestringrequiredgroup_kindstringoptional"chat_completion""anthropic_messages""vertex_ai""responses""realtime""bedrock_runtime"modelsarray<object>requiredArray item specification
provider_namestringrequiredmodel_namestringrequiredcredential_sourcestringoptionalAttached shared-provider label; no inline credentials.
weightnumberrequiredrouting_thresholdsobjectoptional0 <= low_max_words <= medium_max_words.
Object fields
low_max_wordsintegerrequiredmedium_max_wordsintegerrequiredUnknown fields are rejected in this object.
token_based_routing_groupsarray<object>optionalArray item specification
group_namestringrequiredgroup_kindstringoptional"chat_completion""anthropic_messages""vertex_ai""responses""realtime""bedrock_runtime"modelsarray<object>requiredArray item specification
provider_namestringrequiredmodel_namestringrequiredcredential_sourcestringoptionalAttached shared-provider label; no inline credentials.
weightnumberrequiredUnknown fields are rejected in this object.
Unknown fields are rejected in this object.
curl --request POST \
'https://management.example.com/llmgateway/management/v1/app/provider-conversion?app_name=Support%20Bot' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "resource-version-from-read"' \
--header 'Content-Type: application/json' \
--data '{
"provider_labels": [
"Production OpenAI"
]
}'
Gateway app credentials
An app can have multiple named gateway credentials. They share the same app controls, limits, prompts and log identity. Issuing or revoking a credential does not create another app.
Credential contract
Whole-app disable overrides every credential without revoking it. On re-enable, only credentials still valid under expiry/revocation checks work again. JWT/self-service identity follows its own runtime authentication rules.
Rotate without changing the app
A dedicated rotation operation is Not Generally Available; the issue/migrate/revoke workflow above is supported. Retain the new credential in your secret store. credentials:write lets an issuer receive a newly created key, but it does not grant permission to reveal every existing key. Management-key issuance and retrieval follow a different administration contract.
GET an individual key to obtain its metadata and version; use that quoted version for PATCH/DELETE. Revocation returns 200 with the updated key and version. Request expires_at and returned gateway-key expiry use RFC 3339; null means no expiry.
Credential endpoints
/apps/{app_name}/keysList gateway credentials
Tenant-scoped operation. Resource reads return redacted metadata; writes use the permissions and preconditions shown below.
readPath, query & header parameters 3
app_name (path)stringrequiredlimit (query)integeroptionalcursor (query)stringoptionalNo request body.
curl --request GET \
'https://management.example.com/llmgateway/management/v1/apps/Support%20Bot/keys?limit=50' \
--header 'Authorization: Bearer <management-key>'
/apps/{app_name}/keysIssue a gateway credential
Tenant-scoped operation. Resource reads return redacted metadata; writes use the permissions and preconditions shown below.
credentials:writePath, query & header parameters 2
app_name (path)stringrequiredIdempotency-Key (header)stringrequiredFull request body specification application/json
namestringrequiredexpires_atstring | nulloptionalUnknown fields are rejected in this object.
curl --request POST \
'https://management.example.com/llmgateway/management/v1/apps/Support%20Bot/keys' \
--header 'Authorization: Bearer <management-key>' \
--header 'Idempotency-Key: unique-operation-001' \
--header 'Content-Type: application/json' \
--data '{
"name": "Deployment",
"expires_at": null
}'
/apps/{app_name}/keys/{key_id}Get key
Tenant-scoped operation. Resource reads return redacted metadata; writes use the permissions and preconditions shown below.
readPath, query & header parameters 2
app_name (path)stringrequiredkey_id (path)stringrequiredNo request body.
curl --request GET \
'https://management.example.com/llmgateway/management/v1/apps/Support%20Bot/keys/key_example' \
--header 'Authorization: Bearer <management-key>'
/apps/{app_name}/keys/{key_id}Change gateway key expiry
Tenant-scoped operation. Resource reads return redacted metadata; writes use the permissions and preconditions shown below.
credentials:writePath, query & header parameters 3
app_name (path)stringrequiredkey_id (path)stringrequiredIf-Match (header)stringrequiredQuoted ETag returned by the latest resource read. Prompt/attachment/rollback writes use the app ETag.
Full request body specification application/json
expires_atstring | nullrequiredUnknown fields are rejected in this object.
curl --request PATCH \
'https://management.example.com/llmgateway/management/v1/apps/Support%20Bot/keys/key_example' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "resource-version-from-read"' \
--header 'Content-Type: application/json' \
--data '{
"expires_at": null
}'
/apps/{app_name}/keys/{key_id}Revoke a gateway credential
Tenant-scoped operation. Resource reads return redacted metadata; writes use the permissions and preconditions shown below.
credentials:writePath, query & header parameters 3
app_name (path)stringrequiredkey_id (path)stringrequiredIf-Match (header)stringrequiredQuoted ETag returned by the latest resource read. Prompt/attachment/rollback writes use the app ETag.
Full request body specification application/json
Unknown fields are rejected in this object.
curl --request DELETE \
'https://management.example.com/llmgateway/management/v1/apps/Support%20Bot/keys/key_example' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "resource-version-from-read"' \
--header 'Content-Type: application/json' \
--data '{}'
/apps/{app_name}/keys/{key_id}/revealReveal a gateway credential
Explicitly reveal an active gateway credential. Expired/revoked credentials return terminal_key_state.
credentials:readPath, query & header parameters 2
app_name (path)stringrequiredkey_id (path)stringrequiredFull request body specification application/json
Unknown fields are rejected in this object.
curl --request POST \
'https://management.example.com/llmgateway/management/v1/apps/Support%20Bot/keys/key_example/reveal' \
--header 'Authorization: Bearer <management-key>' \
--header 'Content-Type: application/json' \
--data '{}'
/app/keysList gateway credentials (query locator)
Tenant-scoped operation. Resource reads return redacted metadata; writes use the permissions and preconditions shown below. Use app_name in the query for names containing slashes or literal percent signs; URL-encode the query value once.
readPath, query & header parameters 3
app_name (query)stringrequiredExact display name; encode with standard query URL encoding.
limit (query)integeroptionalcursor (query)stringoptionalNo request body.
curl --request GET \
'https://management.example.com/llmgateway/management/v1/app/keys?app_name=Support%20Bot&limit=50' \
--header 'Authorization: Bearer <management-key>'
/app/keysIssue a gateway credential (query locator)
Tenant-scoped operation. Resource reads return redacted metadata; writes use the permissions and preconditions shown below. Use app_name in the query for names containing slashes or literal percent signs; URL-encode the query value once.
credentials:writePath, query & header parameters 2
app_name (query)stringrequiredExact display name; encode with standard query URL encoding.
Idempotency-Key (header)stringrequiredFull request body specification application/json
namestringrequiredexpires_atstring | nulloptionalUnknown fields are rejected in this object.
curl --request POST \
'https://management.example.com/llmgateway/management/v1/app/keys?app_name=Support%20Bot' \
--header 'Authorization: Bearer <management-key>' \
--header 'Idempotency-Key: unique-operation-001' \
--header 'Content-Type: application/json' \
--data '{
"name": "Deployment",
"expires_at": null
}'
/app/keys/{key_id}Get key (query locator)
Tenant-scoped operation. Resource reads return redacted metadata; writes use the permissions and preconditions shown below. Use app_name in the query for names containing slashes or literal percent signs; URL-encode the query value once.
readPath, query & header parameters 2
key_id (path)stringrequiredapp_name (query)stringrequiredExact display name; encode with standard query URL encoding.
No request body.
curl --request GET \
'https://management.example.com/llmgateway/management/v1/app/keys/key_example?app_name=Support%20Bot' \
--header 'Authorization: Bearer <management-key>'
/app/keys/{key_id}Change gateway key expiry (query locator)
Tenant-scoped operation. Resource reads return redacted metadata; writes use the permissions and preconditions shown below. Use app_name in the query for names containing slashes or literal percent signs; URL-encode the query value once.
credentials:writePath, query & header parameters 3
key_id (path)stringrequiredapp_name (query)stringrequiredExact display name; encode with standard query URL encoding.
If-Match (header)stringrequiredQuoted ETag returned by the latest resource read. Prompt/attachment/rollback writes use the app ETag.
Full request body specification application/json
expires_atstring | nullrequiredUnknown fields are rejected in this object.
curl --request PATCH \
'https://management.example.com/llmgateway/management/v1/app/keys/key_example?app_name=Support%20Bot' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "resource-version-from-read"' \
--header 'Content-Type: application/json' \
--data '{
"expires_at": null
}'
/app/keys/{key_id}Revoke a gateway credential (query locator)
Tenant-scoped operation. Resource reads return redacted metadata; writes use the permissions and preconditions shown below. Use app_name in the query for names containing slashes or literal percent signs; URL-encode the query value once.
credentials:writePath, query & header parameters 3
key_id (path)stringrequiredapp_name (query)stringrequiredExact display name; encode with standard query URL encoding.
If-Match (header)stringrequiredQuoted ETag returned by the latest resource read. Prompt/attachment/rollback writes use the app ETag.
Full request body specification application/json
Unknown fields are rejected in this object.
curl --request DELETE \
'https://management.example.com/llmgateway/management/v1/app/keys/key_example?app_name=Support%20Bot' \
--header 'Authorization: Bearer <management-key>' \
--header 'If-Match: "resource-version-from-read"' \
--header 'Content-Type: application/json' \
--data '{}'
/app/keys/{key_id}/revealReveal a gateway credential (query locator)
Explicitly reveal an active gateway credential. Expired/revoked credentials return terminal_key_state. Use app_name in the query for names containing slashes or literal percent signs; URL-encode the query value once.
credentials:readPath, query & header parameters 2
key_id (path)stringrequiredapp_name (query)stringrequiredExact display name; encode with standard query URL encoding.
Full request body specification application/json
Unknown fields are rejected in this object.
curl --request POST \
'https://management.example.com/llmgateway/management/v1/app/keys/key_example/reveal?app_name=Support%20Bot' \
--header 'Authorization: Bearer <management-key>' \
--header 'Content-Type: application/json' \
--data '{}'