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
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.
Endpoint reference
/apps/{app_name}/keysList gateway credentials
Read metadata and fingerprints for app credentials, including expired/revoked history. Does not reveal secrets.
readPath, query & header parameters 3
app_name (path)stringrequiredTrimmed display name. App lookup is case-insensitive within the authenticated tenant. Ambiguous legacy names return 409.
limit (query)integeroptionalItems per page.
cursor (query)stringoptionalOpaque cursor returned by this same collection and filters.
No 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
Issue a named key for the existing canonical app. No default expiry. Non-revoked names are unique case-insensitively.
credentials:writePath, query & header parameters 2
app_name (path)stringrequiredTrimmed display name. App lookup is case-insensitive within the authenticated tenant. Ambiguous legacy names return 409.
Idempotency-Key (header)stringrequiredUnique operation key. Reuse only with the identical request; mismatch returns 409.
Full request body specification application/json
Initial key uses Default when omitted. Additional key creation requires a name.
namestringrequiredTrimmed, case-insensitively unique among non-revoked keys of this app.
expires_atstring | nulloptionalOmit on create or send null for no expiry. On PATCH, omission preserves the current expiry and null removes it. Expired/revoked credentials cannot be resurrected.
Variant 1 string
stringFuture RFC 3339 timestamp with an explicit timezone.
Also accepts null.
Unknown 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: operation-001' \
--header 'Content-Type: application/json' \
--data '{
"name": "CI automation",
"expires_at": null
}'
/apps/{app_name}/keys/{key_id}Change gateway key expiry
Only active credentials may change expiry. Null removes expiry; expired/revoked states are terminal. Key name is immutable.
credentials:writePath, query & header parameters 3
app_name (path)stringrequiredTrimmed display name. App lookup is case-insensitive within the authenticated tenant. Ambiguous legacy names return 409.
key_id (path)stringrequiredIf-Match (header)stringrequiredExact quoted ETag from a current resource read.
Full request body specification application/json
expires_atstring | nullrequiredOmit on create or send null for no expiry. On PATCH, omission preserves the current expiry and null removes it. Expired/revoked credentials cannot be resurrected.
Variant 1 string
stringFuture RFC 3339 timestamp with an explicit timezone.
Also accepts null.
Unknown 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"' \
--header 'Content-Type: application/json' \
--data '{
"expires_at": "2027-01-01T00:00:00Z"
}'
/apps/{app_name}/keys/{key_id}Revoke a gateway credential
Idempotently revoke this key, preserve history and release its display name. The app and other valid keys remain available.
credentials:writePath, query & header parameters 3
app_name (path)stringrequiredTrimmed display name. App lookup is case-insensitive within the authenticated tenant. Ambiguous legacy names return 409.
key_id (path)stringrequiredIf-Match (header)stringrequiredExact quoted ETag from a current resource read.
No request body.
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"'
/apps/{app_name}/keys/{key_id}/revealReveal a gateway credential
Explicitly reveal an active or expired retained gateway credential; revoked keys return terminal_key_state. Response is no-store and reveal is audited without the secret.
credentials:readPath, query & header parameters 2
app_name (path)stringrequiredTrimmed display name. App lookup is case-insensitive within the authenticated tenant. Ambiguous legacy names return 409.
key_id (path)stringrequiredNo request body.
curl --request POST \
'https://management.example.com/llmgateway/management/v1/apps/Support%20Bot/keys/key_example/reveal' \
--header 'Authorization: Bearer <management-key>'