1. Introduction
1.1 What PanAPI Is
PanAPI is the RESTful management API for VDURA storage infrastructure: tenants, users, volumes, nodes, hardware, StorageSets, subnets, and the S3 gateway. It is the single backend service both panctl (the command-line client) and the VDURA web UI (Vantage) talk to; neither is more authoritative than the other, and changes made through one are immediately visible through the other. See the PanCTL User Guide’s introduction for that CLI-side perspective.
All endpoints are namespaced under the base path /api/v1. The realm also serves an interactive Swagger UI at /docs and the raw machine-readable specification at /openapi.json; this guide is generated directly from that specification (captured at API version 12.0.0, on 2026-10-19), so its endpoint and schema reference stays exactly in sync with what the realm actually accepts. For the most current behavior of a realm you administer, /docs on that realm is always the ground truth.
1.2 Authentication Schemes
Every call needs an Authorization: Bearer <JWT> header, except POST /auth/login, POST /auth/refresh, and GET /api/v1/about (see Chapter 4). Two schemes can supply that header, and only one may be active on a given request. A request carrying both credentials is rejected with 401:
PasswordLogin: sign in with a tenant user name and password. The user name carries the tenant it belongs to,<tenant-name>/<user>. Leave the prefix off for the platform tenant, soadminsigns in as the platform administrator.BearerJWT: present a JWT access token directly, such as one returned byPOST /auth/tenant-switchor a long-lived API token fromPOST /auth/tokens.
The full authentication endpoint reference, including tenant switching and API token issuance, is Chapter 3.
1.3 Request and Response Conventions
- Content types. Most request and response bodies are
application/json. The two token endpoints (POST /auth/login,POST /auth/refresh) takeapplication/x-www-form-urlencodedinstead, matching the OAuth2 password-grant convention. - Success responses. A successful call returns either a JSON body describing the result (with a
2xxstatus) or204 No Contentfor actions and deletes that return nothing. - Error responses. Every error response is a JSON object with a
detailfield: a plain string for most errors ({"detail": "Not authenticated"}), or, for422 Validation Error, a list of per-fieldValidationErrorobjects describing exactly which field failed and why. See Appendix A for the common error shapes shared across every endpoint in this guide. The endpoint sections below list the status codes their spec declares; the common codes apply to every endpoint whether or not they are listed. - Tenant scoping. Most resources belong to a tenant. A tenant user’s calls are implicitly scoped to their own tenant; the platform tenant (Platform Admin) can typically pass an optional
tenant_idquery parameter orall_tenantson list endpoints to read across tenants. A tenant user’s writes stay in their own tenant, while a Platform Admin can write into any tenant through the/tenants/{tenant_id}/...paths.
1.4 Who May Call What
Access depends on the caller’s role, and some calls are open only to the platform tenant. The prose elsewhere in this guide follows the table below where the two differ.
| Task | Who may do it | Anything else returns |
|---|---|---|
Update a tenant (PATCH /tenants/{tenant_id}) |
Platform Admin only | 403 for a Tenant Admin |
| Change a tenant’s StorageSet quota | platform-admin and storage-admin, for any tenant |
403 for a Tenant Admin |
Create a tenant’s subnet (POST /tenants/{tenant_id}/subnets) |
A Platform Admin, calling the endpoint directly without switching into the tenant | 403 from a switched-in session |
Call mount-info and the attachment endpoints |
Platform roles only | 403 for a Tenant Admin |
| Query logs and metrics through the observability proxy | Platform roles only (observability-realm:view) |
403 |
| Write into a tenant other than your own | A Platform Admin, through the /tenants/{tenant_id}/... paths |
Tenant users write only in their own tenant |
Set dns.mode to panfs on a tenant |
The platform tenant only | 400 for any other tenant |
Assign the roles platform-support or s3-gateway |
Nobody; both are reserved | 400 |
Roles are defined per tenant, so an unknown role in a role-assignment request also returns 400. The S3 aggregator is off by default and must be turned on.
1.5 Common Procedures
These procedures must be run in the order shown. Run in another order, the steps fail with the status codes noted.
Onboard a tenant (Platform Admin):
PUT /api/v1/subnets/segment-type, once per realm, to choose VLAN or VXLAN. It must be set before the first subnet.POST /api/v1/tenantsto create the tenant.PUT /api/v1/tenants/{tenant_id}/storagesets/{storageset_id}to give the tenant a StorageSet. Without it, creating a volume returns404.POST /api/v1/tenants/{tenant_id}/subnetsto create the tenant’s subnet. Then wait untilmount-inforeturns a non-emptyrmlist. A non-emptydirectorslist is not enough.- Create a tenant user and give it the
adminrole. - The tenant admin creates volumes. Always include
hard_quota_bytes, with a value greater than 0.
Enable S3 (Platform Admin, then Tenant Admin):
PUT /api/v1/s3/enabledto enable S3 for the realm. Enabling the tenant before the realm returns409.PUT /api/v1/tenants/{tenant_id}/s3to create the tenant’s S3 configuration.PATCH /api/v1/tenants/{tenant_id}/s3withenabledset totrueand adefault_prefix.- Create a gateway instance, which needs a subnet. A tenant gets at most one instance per node.
- Start the instance. The call returns
202; poll the instance’sobservedfield until it reaches the desired state. - Create a bucket. Bucket calls return
503until a gateway instance is running.
Delete a tenant (Platform Admin):
POST /api/v1/tenants/{tenant_id}/s3/instances/delete-allto remove the tenant’s S3 gateway instances.- Delete the tenant’s volumes.
- Delete the tenant’s subnets.
DELETE /api/v1/tenants/{tenant_id}.
Any leftover resource, including an S3 gateway instance, makes the final call return 409.
1.6 How This Guide Is Organized
Chapter 2 is a single master index of every endpoint in the guide, for a full-text scan or search without opening each chapter in turn. Chapters 3 through 14 each cover one area of the API, grouped the same way the specification itself tags its endpoints: Authentication, Realm and Platform, Tenants, Tenant Users, PanFS Users, Service Accounts, Volumes, StorageSets, Subnets and Attachments, Nodes and Hardware, the S3 Gateway, and Observability. Each of those chapters opens with its own Endpoint Summary table (method, path, one-line summary) that doubles as that chapter’s index, followed by the full reference for every endpoint: parameters, request body fields, and response shapes. Appendix A covers the error conventions shared across all endpoints; Appendix B is an alphabetical index of every schema used anywhere in this guide.