Admin API Reference
For: Platform operators and automation scripts managing Axemere Gateway at runtime.
Complete endpoint listing for the Axemere Gateway v1 Admin API. If you prefer a CLI over direct HTTP calls, see the CLI Reference. For a hosted, API-key-authenticated equivalent of these endpoints (no admin token or direct gateway network access required), see the Management API Reference.
All endpoints require one of:
MVGC-Admin-Token: <token>headerAuthorization: Bearer <token>header
The token value is set via MVGC_ADMIN_TOKEN on the gateway.
Table of Contents
- Health Check
- Credentials
- Workloads
- Policies
- Addons
- Connectors
- Approvals
- Quarantine
- Org Management
- Nodes
- Rate Limiting
- Discovery
- Policy Cache
- Observability
- Record Verification
- SSL MITM Proxy
DELETE endpoint availability: DELETE is supported for credentials and workloads. There is no DELETE endpoint for policies.
- To remove a credential:
DELETE /v1/admin/credentials/{id}(returns 200 on success, 404 if not found).- To remove a policy bundle: push a new empty bundle (deny-all default) via
PUT /v1/admin/policies.- To remove a workload:
DELETE /v1/admin/workloads/{id}(returns 200 on success, 404 if not found).
Health Check
| Method | Endpoint | Description |
|---|---|---|
GET | /healthz | Gateway health (no token required); returns status, version, node ID, control plane connection status, and list of registered connectors with versions |
Credentials
| Method | Endpoint | Description |
|---|---|---|
GET | /v1/admin/credentials | List registered credentials |
PUT | /v1/admin/credentials | Create or update a credential. In CP-managed deployments, also triggers auto-rule generation (auto.allow.{provider}) in the org's policy overlay for ai_provider credentials. |
DELETE | /v1/admin/credentials/{id} | Delete a credential (returns 200, or 404 if not found). In CP-managed deployments, also removes the corresponding auto-rules from the org's policy overlay atomically. |
POST | /v1/admin/credentials/reload | Re-read all *.yaml files from MVGC_CREDENTIALS_DIR and upsert every credential (overwrites DB values; no restart needed) |
Workloads
| Method | Endpoint | Description |
|---|---|---|
GET | /v1/admin/workloads | List registered workloads |
PUT | /v1/admin/workloads | Create or update a workload |
DELETE | /v1/admin/workloads/{id} | Delete a workload (returns 200, or 404 if not found) |
Policies
| Method | Endpoint | Description |
|---|---|---|
GET | /v1/admin/policies | Return the currently active bundle (bundle_id, version, source, loaded_at) |
PUT | /v1/admin/policies | Hot-load a policy bundle (YAML body) without restarting |
POST | /v1/admin/policies/reload | Re-read bundle.yaml and all add-ons from MVGC_POLICIES_DIR on disk; picks up new add-ons without restarting (returns 400 in CP/remote mode) |
Addons
Addons are org-level feature toggles managed from the control plane. When enabled, an addon contributes additional policy rules to the effective bundle for that org. The addon catalog is seeded at migration time; operators enable or disable individual addons per org.
| Method | Endpoint | Description |
|---|---|---|
GET | /v1/orgs/{orgID}/addons | List the addon catalog with per-org enabled state |
POST | /v1/orgs/{orgID}/addons/{addonID}/enable | Enable an addon for the org (returns 200; 404 if addon not found) |
POST | /v1/orgs/{orgID}/addons/{addonID}/disable | Disable an addon for the org (returns 200; 404 if addon not found) |
Response shape for GET /v1/orgs/{orgID}/addons:
{ "addons": [ { "addon_id": "credential-passthrough", "display_name": "Credential Passthrough", "description": "Forward client-supplied auth headers to AI providers unchanged while applying full governance.", "category": "credentials", "version": "1.0.0", "enabled": false, "enabled_at": "" } ] }
Note: Addon endpoints are org-scoped (path prefix
/v1/orgs/) and require the standard admin token. They are available only when the gateway is connected to a control plane (MVGC_CP_ADDRset).
Connectors
| Method | Endpoint | Description |
|---|---|---|
GET | /v1/admin/connectors | List registered connectors with metadata and health |
Approvals
| Method | Endpoint | Description |
|---|---|---|
GET | /v1/admin/approvals | List approval requests (query: org_id, status, limit, page_token); returns {"items": [...], "next_page_token": "..."} |
GET | /v1/admin/approvals/{id} | Get a specific approval request |
POST | /v1/admin/approvals/{id}/approve | Approve a pending request (body: {"decided_by": "..."}) |
POST | /v1/admin/approvals/{id}/deny | Deny a pending request (body: {"decided_by": "..."}) |
Quarantine
| Method | Endpoint | Description |
|---|---|---|
GET | /v1/admin/quarantine | List quarantine entries (query: org_id, limit, page_token); returns {"items": [...], "next_page_token": "..."} |
POST | /v1/admin/quarantine/{id}/release | Release a quarantined request (body: {"released_by": "..."}) |
Org Management
These endpoints let platform operators inspect and control the suspension state of an organisation without restarting the gateway. They are available in both managed and self-hosted modes when the gateway is connected to a control plane.
| Method | Endpoint | Description |
|---|---|---|
GET | /v1/admin/org | Return the current org status (active, suspended, or terminated) and, when suspended, the operator-supplied reason |
POST | /v1/admin/org/suspend | Suspend the org: all inbound requests immediately receive {"error":"org_suspended"}. Optionally accepts a reason in the request body. |
POST | /v1/admin/org/reactivate | Lift a suspension and restore normal traffic flow |
GET /v1/admin/org response:
{ "org_id": "org_01j...", "status": "suspended", "suspended_reason": "Non-payment: invoice #1234 overdue" }
suspended_reason is omitted when the org is active or when no reason was given at suspension time.
POST /v1/admin/org/suspend request body (optional):
{ "reason": "Non-payment: invoice #1234 overdue" }
Returns {"status":"suspended"} on success, 404 if the gateway has no org configured.
POST /v1/admin/org/reactivate response:
Returns {"status":"active"} on success, 404 if the gateway has no org configured.
Effect on traffic:
- Managed gateway: Enforced at the auth layer via push events. Suspension propagates within one
CheckIncycle (~60 s) to all managed nodes.- Self-hosted + CP: Enforced at execution time. The gateway learns the suspended status on its next periodic
CheckIn(default 60 s interval). At most one request may pass through between the suspension event and the next check-in. Reactivation is detected on the first denied request: a background check-in is triggered immediately, so the following request is unblocked without waiting for the full interval.Keys are not revoked; suspension is fully reversible.
Nodes
| Method | Endpoint | Description |
|---|---|---|
GET | /v1/admin/nodes | List gateway nodes (returns [{"node_id","registered_at","mode"}]; mode is "embedded" or "distributed") |
Rate Limiting
| Method | Endpoint | Description |
|---|---|---|
GET | /v1/admin/ratelimit/config | Get current rate limiter configuration (refill_rate, max_tokens, window_duration) |
PUT | /v1/admin/ratelimit/config | Update rate limiter configuration (body: {"refill_rate": N, "max_tokens": N, "window_duration": "1m"}; both must be > 0) |
GET | /v1/admin/ratelimit/keys | List active rate limiter bucket keys (workload IDs with tracked state) |
Discovery
| Method | Endpoint | Description |
|---|---|---|
GET | /v1/admin/discovery/domains | List discovered domains with hit counts (query: managed=true|false); requires MVGC_DISCOVERY_ENABLED=true |
DELETE | /v1/admin/discovery/domains | Reset all discovery domain counters (returns 204) |
Policy Cache
| Method | Endpoint | Description |
|---|---|---|
DELETE | /v1/admin/policy/cache | Clear the durable policy bundle cache for this node (returns 204; returns {"status":"no_cache"} when no durable cache is configured) |
Observability
| Method | Endpoint | Description |
|---|---|---|
GET | /metrics | Prometheus metrics endpoint (requires MVGC_METRICS_ENABLED=true) |
GET | /v1/dashboard/summary | Dashboard summary (query: org_id, from, to) |
GET | /v1/dashboard/decisions | Decision breakdown (query: org_id, from, to) |
Record Verification
| Method | Endpoint | Description |
|---|---|---|
GET | /v1/verify/{record_hash} | Verify a record hash and retrieve its inclusion proof; returns status: "verified" or "pending_inclusion" |
SSL MITM Proxy
| Method | Endpoint | Description |
|---|---|---|
GET | /v1/proxy/ca.crt | Retrieve the gateway root CA certificate for client trust store installation; returns 404 when MVGC_PROXY_MITM_ENABLED=false |
Response Schemas
Approval object
Returned by GET /v1/admin/approvals and GET /v1/admin/approvals/{id}:
{ "approval_id": "01955f3e-bbbb-7abc-8def-000000000002", "org_id": "org-example-001", "workload_id": "wl-prod-app-1", "caller_id": "service-abc", "status": "pending", "reason": "high-cost model requires operator approval", "decided_by": null, "created_at": "2026-03-12T10:00:00Z", "decided_at": null, "expires_at": "2026-03-13T10:00:00Z" }
status values: pending, approved, denied, expired
Quarantine entry object
Returned by GET /v1/admin/quarantine:
{ "quarantine_id": "01955f3e-aaaa-7abc-8def-000000000001", "org_id": "org-example-001", "workload_id": "wl-prod-app-1", "caller_id": "service-abc", "caller_ip": "10.0.1.42", "action_type": "ai.infer", "reason": "composite risk score exceeds threshold", "risk_score": 0.87, "created_at": "2026-03-12T10:15:00Z", "released_at": null, "released_by": null }
Record verification response
Returned by GET /v1/verify/{record_hash}:
{ "status": "verified", "record_hash": "a1b2c3d4e5f6...", "inclusion_proof": { "schema": "mvgc.inclusion_proof.v1", "record_hash": "a1b2c3d4e5f6...", "batch_id": "01955f3e-0000-7abc-8def-000000000001", "leaf_index": 42, "leaf_count": 1000, "path": [ { "side": "right", "hash": "deadbeef..." }, { "side": "left", "hash": "cafebabe..." } ], "root": { "schema": "mvgc.merkle_root.v1", "batch_id": "01955f3e-0000-7abc-8def-000000000001", "root_hash": "abcdef01...", "leaf_count": 1000, "sig": { "alg": "ed25519", "kid": "kid_cp_1", "sig": "..." } } } }
When not yet batched: {"status": "pending_inclusion", "record_hash": "..."}
See Also
- Network Operations Guide — usage examples and full operational context
- Approval Workflows — lifecycle, DSL triggers, polling
- Quarantine — investigation and release workflow
- Risk Scoring — risk signals and thresholds
- Telemetry — Prometheus metrics reference
- Merkle Proof Verification — verifying inclusion proofs
- Delegation Tokens — token creation and verification