The AISIX Cloud Admin API is the stable, customer-facing automation contract for AISIX Cloud across its control-plane deployment options. It lets operators manage organization-scoped environments...
GET List Caller API Keys /environments/{env_id}/api_keysList caller API keys in an environment. Pagination is opt-in: omit page size to get the full key list in one response. page is only meaningful together with page size and is rejected without it.
POST Create Caller API Key /environments/{env_id}/api_keysCreate a caller credential for an environment. The plaintext bearer is returned once in the create response and cannot be recovered later.
DELETE Delete Caller API Key /environments/{env_id}/api_keys/{api_key_id}Deletes the caller credential. Any caller still using the plaintext bearer receives 401 Unauthorized on subsequent gateway requests.
PATCH Update Caller API Key /environments/{env_id}/api_keys/{api_key_id}Update selected caller API key fields. Nullable fields can be cleared with an explicit null. Changing the underlying bearer is not part of this operation — use the rotate operation instead.
POST Rotate Caller API Key /environments/{env_id}/api_keys/{api_key_id}/rotateReplace the key's underlying bearer with a freshly generated value in one operation. The key resource is preserved — name, allowed models, rate limit, bindings, expiry deadline, and disabled state carry over; only the credential changes. The old plaintext stops authenticating...
GET List Environments /environmentsReturn every environment in the authenticated organization. The response is not paginated.
POST Create Environment /environmentsCreate an environment in the authenticated organization. Environment names are case-sensitive and must be unique within the organization.
GET Get Environment by ID /environments/{env_id}Return one environment in the authenticated organization. An ID that is missing or belongs to another organization returns 404.
DELETE Delete Environment /environments/{env_id}Deletes an environment after revoking its active AISIX gateway certificates. If certificate revocation fails, the environment remains intact and the delete operation can be retried. Environment names cannot be updated after creation.
GET List Models /environments/{env_id}/modelsReturn every direct, routing, ensemble, semantic, and embedding model configured in the environment. The response is not paginated.
POST Create Model /environments/{env_id}/modelsCreate a model alias in an environment. The AISIX Cloud control plane creates a direct model unless another kind is selected.
GET Get Model by ID /environments/{env_id}/models/{model_id}Return one model and the configuration block for its model kind. The model must belong to the environment in the request path.
DELETE Delete Model /environments/{env_id}/models/{model_id}Delete a model. If another model still references it, rebind or delete the dependent model first.
PATCH Update Model /environments/{env_id}/models/{model_id}Update selected fields on a model. The model kind is fixed at creation, and editable fields depend on the current kind.
GET List Provider Keys /provider_keysList provider keys in the authenticated organization. Fetch a single key to see its endpoint override. Pagination is opt-in: omit page size to get the full key list in one response. page is only meaningful together with page size and is rejected without it.
POST Create Provider Key /provider_keysCreate an upstream provider credential. The plaintext API key is encrypted before storage and is never returned by read endpoints.
GET Get Provider Key by ID /provider_keys/{provider_key_id}Get a provider key, including its endpoint override.
DELETE Delete Provider Key /provider_keys/{provider_key_id}Deletes the provider key from every environment where it was allowed. Models that still reference the key cannot dispatch successfully, so rebind affected models before deleting the key.
PATCH Update Provider Key /provider_keys/{provider_key_id}Update selected provider key fields, including the upstream secret. Send api key (or config, for a multi-field credential) to rotate the secret in place: every model that references this provider key picks up the new credential, with no model or caller change. Omit those...
GET List MCP Servers /mcp_serversList MCP servers in the authenticated organization. Stored bearer secrets are never included in read responses.
POST Create MCP Server /mcp_serversRegister an upstream MCP server and expose it to the allowed environments.
GET Get MCP Server by ID /mcp_servers/{mcp_server_id}Get an MCP server. Stored bearer secrets are never returned.
DELETE Delete MCP Server /mcp_servers/{mcp_server_id}Deletes the MCP server from every environment where it was allowed.
PATCH Update MCP Server /mcp_servers/{mcp_server_id}Update selected MCP server fields. A new secret rotates a bearer credential. This caller holds the permission that approves servers, so an approved server keeps serving across the patch and the new configuration is published immediately; the edit is recorded as its review...
GET List Generated MCP Tools /mcp_servers/{mcp_server_id}/toolsList the MCP tools an OpenAPI-backed server generates, derived from its stored OpenAPI document by the same walk that validated it at write time. Only servers of type: openapi can be listed: an upstream MCP server's tool set lives on the upstream, which the control plane never...
POST Approve MCP Server /mcp_servers/{mcp_server_id}/approvePublishes a reviewed MCP server: it is projected to the environments in allowed environments and becomes discoverable and callable by gateway clients. A previously rejected server can be approved. Approving one that is already approved returns 400. On a live server carrying a...
POST Reject MCP Server /mcp_servers/{mcp_server_id}/rejectRefuses a submitted MCP server, and is also how an approval is revoked: rejecting an approved server withdraws it from every environment it was serving in, so gateway clients stop seeing it. Rejecting one that is already rejected returns 400. On a live server carrying a...
POST Submit MCP Server for Review /mcp_server_submissionsProposes an upstream MCP server without publishing it. The server is registered with approval status set to pending review and is not projected to any environment, so it cannot be discovered or called until a reviewer approves it. This is the entry point for roles that may...
PATCH Revise a Submitted MCP Server /mcp_server_submissions/{mcp_server_id}The proposer's write path, on a permission that cannot publish. On a server that is not live it corrects the submission in place and leaves it in the review queue — how a rejected server is fixed and resubmitted. On a server that IS live it changes nothing: the patch is stored...
GET List A2A Agents /a2a_agentsList A2A agents in the authenticated organization. Stored credentials are never included in read responses.
POST Create A2A Agent /a2a_agentsRegister an upstream A2A agent and expose it to the allowed environments.
GET Get A2A Agent by ID /a2a_agents/{a2a_agent_id}Get an A2A agent. Stored credentials are never returned.
DELETE Delete A2A Agent /a2a_agents/{a2a_agent_id}Deletes the A2A agent from every environment where it was allowed.
PATCH Update A2A Agent /a2a_agents/{a2a_agent_id}Update selected A2A agent fields. A new secret rotates the stored credential.
GET List Members /membersList organization members. Pagination is opt-in: omit page size to get the full member list in one response. page is only meaningful together with page size and is rejected without it.
POST Create Member /membersCreate a login-less member directly, bypassing the email-invitation handshake. The created principal can be added to teams and issued caller API keys immediately, but carries no dashboard credentials and can never sign in. The role is fixed to member.
GET List Guardrails /environments/{env_id}/guardrailsReturn every guardrail definition in the environment. Scope attachments are listed separately through the attachments endpoint.
POST Create Guardrail /environments/{env_id}/guardrailsCreate a guardrail in an environment. The per-kind config shape is validated by the server against the guardrail catalog (GET /guardrails/schema); this spec models the stable envelope and treats config as an open object.
POST Test Guardrail Connection /environments/{env_id}/guardrails/test-connectionProbe a remote-API guardrail provider (Bedrock, Azure Content Safety, Aliyun, Lakera, OpenAI Moderation, …) with the supplied credentials before saving the guardrail. The request mirrors the create body's kind + config; the exact config shape is provider-specific and validated...
GET Get Guardrail by ID /environments/{env_id}/guardrails/{guardrail_id}Return one guardrail definition in the environment. Provider credentials in the kind-specific configuration are redacted.
DELETE Delete Guardrail /environments/{env_id}/guardrails/{guardrail_id}Delete a guardrail definition from the environment and remove it from the configuration distributed to connected gateways.
PATCH Update Guardrail /environments/{env_id}/guardrails/{guardrail_id}Update selected fields on a guardrail. The kind is fixed at creation; config (when present) is validated by the server against the guardrail catalog for that kind.
GET List Guardrail Attachments /environments/{env_id}/guardrails/{guardrail_id}/attachmentsReturn the scope attachments for one guardrail. Each attachment determines whether the guardrail applies to an environment, model, caller API key, or team.
POST Attach Guardrail to a Scope /environments/{env_id}/guardrails/{guardrail_id}/attachmentsAttach a guardrail to an env, model, api key, or team scope. scope id is required for every scope except env (which must omit it).
DELETE Detach Guardrail from a Scope /environments/{env_id}/guardrails/{guardrail_id}/attachments/{attachment_id}Delete one scope attachment so it no longer makes the guardrail applicable through that scope. Other attachments are unchanged.
GET List Guardrail Providers /guardrails/providersCatalog of guardrail providers and their kinds. Read-only metadata used by the dashboard's guardrail form; the response shape is catalog-driven.
GET Get Guardrail Config Schema /guardrails/schemaPer-kind JSON schema for the guardrail config blob, consumed by the dashboard form. Read-only; the response is catalog-driven. Not every kind publishes a dynamic schema: the ones the dashboard renders with a built-in form (see has schema on GET /guardrails/providers) answer...
GET List Cache Policies /environments/{env_id}/cache_policiesReturn every prompt-response cache policy configured in the environment. The response is not paginated.
POST Create Cache Policy /environments/{env_id}/cache_policiesCreate a prompt-response cache rule in an environment. Policy names are unique within the environment, and the name and backend cannot be changed after creation.
GET Get Cache Policy by ID /environments/{env_id}/cache_policies/{cache_policy_id}Return one cache policy. The policy must belong to the environment in the request path.
DELETE Delete Cache Policy /environments/{env_id}/cache_policies/{cache_policy_id}Deletes the cache policy. The gateway stops serving cached responses for the traffic the policy covered.
PATCH Update Cache Policy /environments/{env_id}/cache_policies/{cache_policy_id}Update selected fields on a cache policy. The policy name and backend are fixed at creation — delete and recreate the policy to change them.
POST Purge Cache Policy Entries /environments/{env_id}/cache_policies/{cache_policy_id}/purgeInvalidate every entry cached under this policy, across both exact and semantic matching and on every gateway instance. The operation increments the policy's purge generation; gateways pick the new generation up through configuration propagation (typically within seconds) and...
GET List Observability Exporters /environments/{env_id}/observability_exportersReturn every telemetry exporter configured in the environment. Secret header values and credential material are not returned.
POST Create Observability Exporter /environments/{env_id}/observability_exportersCreate a telemetry exporter in an environment. The kind value selects which configuration fields apply; fields that belong to other kinds are ignored. Exporter names are unique within the environment. Secrets are never part of this request: aliyun sls, object store, and...
GET Get Observability Exporter by ID /environments/{env_id}/observability_exporters/{exporter_id}Return one telemetry exporter in the environment. Secret header values and credential material are not returned.
DELETE Delete Observability Exporter /environments/{env_id}/observability_exporters/{exporter_id}Deletes the exporter. The gateway stops shipping telemetry to the target.
PATCH Update Observability Exporter /environments/{env_id}/observability_exporters/{exporter_id}Update selected fields on an exporter. The exporter name and kind are fixed at creation, and a field that does not belong to the exporter's kind is rejected. Configuration changes are validated against the same rules as create; an explicit empty string clears optional fields...
GET List Rate Limit Policies /environments/{env_id}/rate_limitsList rate limit policies in an environment. Pagination is opt-in: omit page size to get the full policy list in one response. page is only meaningful together with page size and is rejected without it.
POST Create Rate Limit Policy /environments/{env_id}/rate_limitsCreate a rate limit policy in an environment. Each policy pins one scope and scope ref pair, and a second policy for the same pair is rejected. At least one of max requests or max tokens must be set, and max tokens is only accepted with window: minute or window: day — the...
GET Get Rate Limit Policy by ID /environments/{env_id}/rate_limits/{rate_limit_id}Return one rate-limit policy. The policy must belong to the environment in the request path.
DELETE Delete Rate Limit Policy /environments/{env_id}/rate_limits/{rate_limit_id}Deletes the policy. The gateway stops enforcing the limit.
PATCH Update Rate Limit Policy /environments/{env_id}/rate_limits/{rate_limit_id}Update selected fields on a rate limit policy. The scope and scope ref pair is fixed at creation. The limit fields are independently clearable: an explicit null clears one limit while keeping the other, and an update that would leave the policy with neither limit is rejected.
GET List Data Plane Nodes /environments/{env_id}/dp_nodesList the data plane nodes that have connected to the environment. A node appears after its first status report; a gateway certificate that was issued but never used to connect is not listed. Each entry reflects the node's most recent report, including which configuration...
GET List Rejected Resources /environments/{env_id}/rejected_resourcesList configuration resources in the environment that at least one data plane node is currently refusing to apply. A save can succeed at the API and still be rejected at a gateway — for example when an older gateway version does not recognize a newer field. A rejected resource...
GET Get Effective Permissions /environments/{env_id}/api_keys/{api_key_id}/effective_permissionsResolve the MCP tool access a caller API key ends up with after the environment-default policy, the key team's entitlement, and the key's own configuration are combined. Every allow and deny pattern in the answer carries its source, so an unexpected grant or refusal can be...
GET Get MCP Access Policy /environments/{env_id}/mcp_policyFetch the environment-default MCP access policy. The default applies to caller API keys in inherit or restrict mode whose team has no entitlement of its own; its deny patterns apply to every key in the environment.
PUT Set MCP Access Policy /environments/{env_id}/mcp_policyCreate or replace the environment-default MCP access policy. mode: all grants every tool on every MCP server, including servers and tools registered later — choosing it is always an explicit decision, never a default. Keys keep their own configuration: existing keys that...
DELETE Delete MCP Access Policy /environments/{env_id}/mcp_policyRemove the environment-default MCP access policy. Keys in inherit or restrict mode whose team has no entitlement lose their inherited grant and fall back to no MCP tool access; keys with an explicit allowed tools grant are unaffected.
POST Preview MCP Access Policy Impact /environments/{env_id}/mcp_policy/previewCompute, without changing anything, how caller API keys in the environment would be affected by switching keys that still use an explicit allowed tools grant over to inherit. Send a prospective policy in the body to evaluate it before saving, or send an empty body to evaluate...
POST Switch Keys to Inherit /environments/{env_id}/mcp_policy/applySwitch caller API keys in the environment from their explicit allowed tools grant to policy inheritance (mcp access.mode: inherit) in one batch. By default every key that still uses an explicit grant is switched; send key ids to switch a subset. The previous allowed tools...
GET Get Team Entitlements /teams/{team_id}/entitlementsFetch the team's entitlements. The mcp block, when present, is the MCP access grant caller API keys bound to this team inherit in every environment of the organization; it replaces the environment-default policy for those keys. Absent means the team has no entitlement of its...
PUT Set Team Entitlements /teams/{team_id}/entitlementsCreate, replace, or clear the team's entitlements. Setting the mcp block grants it to the team's caller API keys in every environment of the organization — identity-provider group changes synced to the team propagate automatically, with no per-key edits. Sending "mcp": null...
GET List OIDC Providers /environments/{env_id}/oidc_providersReturn every OIDC provider configured for JWT authentication in the environment. The response is not paginated.
POST Create OIDC Provider /environments/{env_id}/oidc_providersRegister an identity provider the gateway trusts for JWT authentication in this environment. Once at least one enabled provider exists, requests may authenticate with a JWT issued by it instead of an API key: the token's issuer selects the provider, its signature and claims...
GET Get OIDC Provider by ID /environments/{env_id}/oidc_providers/{oidc_provider_id}Return one OIDC provider. The provider must belong to the environment in the request path.
DELETE Delete OIDC Provider /environments/{env_id}/oidc_providers/{oidc_provider_id}Deletes the OIDC provider. Tokens issued by it stop authenticating as soon as the gateway picks up the change; API keys and their jwt subject bindings are unaffected.
PATCH Update OIDC Provider /environments/{env_id}/oidc_providers/{oidc_provider_id}Update selected fields on an OIDC provider. The provider name is fixed at creation — delete and recreate the provider to change it. Changes take effect on new requests without a gateway restart.
GET List Claim Mappings /environments/{env_id}/claim_mappingsReturn every claim mapping in the environment. The response is not paginated.
POST Create Claim Mapping /environments/{env_id}/claim_mappingsCreate a rule that resolves verified JWT claims to an existing caller API key. When a token passes an OIDC provider's verification and no key binds its subject via jwt subject, the enabled mappings naming that provider are evaluated in priority order (lower first, ties broken...
GET Get Claim Mapping by ID /environments/{env_id}/claim_mappings/{claim_mapping_id}Return one claim mapping. The mapping must belong to the environment in the request path.
DELETE Delete Claim Mapping /environments/{env_id}/claim_mappings/{claim_mapping_id}Deletes the claim mapping. Identities it admitted stop authenticating as soon as the gateway picks up the change; API keys bound directly via jwt subject are unaffected.
PATCH Update Claim Mapping /environments/{env_id}/claim_mappings/{claim_mapping_id}Update selected fields on a claim mapping. The mapping name is fixed at creation — delete and recreate the mapping to change it. Changes take effect on new requests without a gateway restart.
GET List Budgets /budgetsList every budget in the organization, across all scopes, each with its current-period spend state. Budgets whose spend is not tracked as a single total (team member) return a zero-seeded state: the limit applies to each member of the team separately.
POST Create Budget /budgetsCreate a spending cap. Each target — identified by the scope + scope ref pair — can hold at most one budget; creating a second one for the same target is rejected with 409. A hard stop budget makes the gateway reject matching traffic with 429 budget exceeded once the period's...
GET Get Budget /budgets/{budget_id}Return one budget together with its current-period spend state. The state starts as a zero seed at creation and updates as spend is aggregated.
DELETE Delete Budget /budgets/{budget_id}Remove a budget. Spend tracking continues; only the cap is removed. Enforcement stops within a few seconds — in-flight traffic checked against a cached decision may still be rejected briefly.
PATCH Update Budget /budgets/{budget_id}Update a budget's name, limit, period, or enforcement mode. Fields left out keep their current values. The budget's scope and scope ref are fixed at creation — to cap a different target, create a new budget.
GET List Notification Channels /notification_channelsList the organization's outbound notification channels. Channel URLs are masked — the full URL is write-only.
POST Create Notification Channel /notification_channelsCreate an outbound notification channel. webhook channels receive alert events as JSON POSTs; slack channels expect a Slack incoming-webhook URL and receive a rendered text message. Enabled channels receive every alert raised in the organization (budget threshold alerts...
GET Get Notification Channel /notification_channels/{channel_id}Return one notification channel in the authenticated organization. The destination URL is masked in the response.
DELETE Delete Notification Channel /notification_channels/{channel_id}Remove a channel. Its delivery history is kept as an audit trail; pending deliveries to it are marked failed.
PATCH Update Notification Channel /notification_channels/{channel_id}Update a channel's name, type, URL, or enabled state. Fields left out keep their current values. Disabling a channel stops future deliveries; already-queued deliveries to it are marked failed rather than parked.
POST Test Notification Channel /notification_channels/{channel_id}/testSynchronously send a clearly-labeled test notification through the channel and report the outcome. Always returns 200; the body carries the verdict.