Key & Certificate Management

Preview — pending review

This reference is generated from the platform API contract and is still under review. Operations, fields, and descriptions can change before publication.

List and query TLS certificates in the active scope

GET
/scopes/{scopeId}/keys/certificates

Returns the paginated collection of TLS certificates (Key Vault certificates / managed certs) visible in the active tenant/subscription/project scope. This single endpoint serves both the plain Certificates page load (keys.certificate.list) and the interactive search/filter/sort/pagination controls (keys.certificate.search_filter_sort): free-text q matches certificate name, subject CN, and issuer CN; the status facet mirrors the UI counter chips (All / Valid / Expiring / Expired); sort accepts the sortable columns name and expiry (notAfter) with order asc|desc. No resource state is mutated by this call. Validation: scopeId must resolve to a scope the caller can read, else 403 FORBIDDEN; unknown scope → 404 NOT_FOUND; status must be one of valid|expiring|expired, sort one of name|expiry, page>=1, pageSize within bounds, else 422 VALIDATION_FAILED. Async & state: Synchronous read; no state change. Always 200 with { data, meta }; never a naked array. Errors: 401 when unauthenticated; 403 when the caller lacks reader access to the scope; 404 when scopeId does not exist; 422 on malformed query parameters; 500 on backend failure. Idempotency/Concurrency: Safe, cacheable; no idempotency key required.

Authorization

bearerToken
headerAuthorizationBearer <token>

An API token (pc_live_…) or a service-account key (sak_live_…), created in Identity & Access Management and sent as Authorization: Bearer <token>. Requests are rate limited per credential and per tenant: every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, and a refused request gets 429 RATE_LIMITED with Retry-After.

Path Parameters

scopeId*string

Opaque ownership+authorization scope resolving to tenant + subscription + project.

Query Parameters

region?string

Restrict the result set to a single region.

Match^[a-z][a-z0-9-]{1,39}$
q?string

Free-text search.

sort?string

Field to sort by (entity-specific; defaults to the entity's natural order).

order?string

Sort direction.

Default"asc"
Value in"asc""desc"
page?integer

1-based page number.

Range1 <= value
Default1
pageSize?integer

Items per page (max 200).

Range1 <= value <= 200
Default50
status?string

Filter by certificate lifecycle status (UI counter chips All/Valid/Expiring/Expired).

Value in"valid""expiring""expired"
origin?string

Filter by certificate origin (imported PEM bundle, platform-managed, or external CSR).

Value in"IMPORTED""MANAGED""CSR"

Response Body

Paginated certificate collection for the scope.

application/json
  1. response
data*array<>
meta*

Pagination envelope metadata. List responses are always { data, meta } — never a naked array.

curl -X GET "https://example.com/scopes/string/keys/certificates"
{  "data": [    {      "id": "string",      "name": "string",      "subjectCn": "string",      "sans": [        "string"      ],      "issuer": "string",      "issuerCn": "string",      "status": "valid",      "origin": "IMPORTED",      "notBefore": "2019-08-24T14:15:22Z",      "notAfter": "2019-08-24T14:15:22Z",      "serial": "string",      "thumbprintSha1": "string",      "thumbprintSha256": "string",      "keyAlgorithm": "RSA-2048",      "signatureAlgorithm": "string",      "autoRenew": true,      "chain": [        {          "cn": "string",          "kind": "Leaf"        }      ],      "activity": [        {          "id": "string",          "at": "2019-08-24T14:15:22Z",          "action": "string",          "actor": "string",          "detail": "string",          "status": "SUCCESS"        }      ],      "tags": [        {          "key": "string",          "value": "string"        }      ]    }  ],  "meta": {    "page": 1,    "pageSize": 1,    "total": 0,    "hasNext": true  }}