Versioning
What the /api/v1 prefix guarantees, which changes can happen inside it, the unversioned discovery paths, and the OpenAPI document.
Every documented operation is under /api/v1. The prefix is our contract: if your client pins it, it keeps the shapes on these pages.
Stable inside /api/v1
- No operation is removed; paths and methods stay.
- No response field is removed or renamed, and no field changes type.
- No optional request field becomes required.
- No status code or
errorcode changes for an existing condition. - No permission stops allowing what it allows today.
We ship any of those as a new prefix, /api/v2, running beside v1.
Changes without notice
We may make these at any time:
- New operations.
- New response fields.
- New optional request fields.
- New
errorcodes for conditions that had none. - Plan ceilings, latency and array order.
Read the fields you need and ignore the rest. Handle an unknown error code by status:
| Status | Action |
|---|---|
| 429, 503 | Retry. |
| 400 | Fix the request. |
| 401, 403 | Fix the credential. |
Current codes: error codes.
Discovery paths
https://penv.cloud/.well-known/openid-configuration
https://penv.cloud/.well-known/jwksUnversioned, because the protocol fixes the paths: a relying party derives {iss}/.well-known/openid-configuration from the token's iss and follows its jwks_uri (OpenID Connect Discovery). Both are public and unauthenticated, and we cache them for 300 seconds. See discovery.
The SCIM endpoint, /api/scim/v2/{connectionId}, carries the SCIM protocol's own version, not ours. You configure it in the console, and it is outside this reference.
OpenAPI document
https://penv.cloud/openapi.jsonDescribes every operation on these pages. Point your client generator at it. The per-operation pages under Secrets, Dynamic, Auth and Discovery are generated from it; the four overview pages are hand-written.
We leave console, workspace, environment, approval, job, webhook and SCIM endpoints out of the document on purpose: they are not a public contract.
Next: secrets.