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.
Create an OpenStack API credential (secret revealed once)
Mints a RESTRICTED, EXPIRING Keystone application credential for the caller (or, with
serviceAccountId, for a service account) scoped to this project, usable with Terraform, the
openstack CLI, OCCM and Cinder CSI.
The owner's Keystone principal is created lazily; its project roles are derived from the portal
permissions. The chosen profile (full = member + load-balancer_member, readonly = reader +
load-balancer_observer) can never exceed that projection. Expiry is mandatory: default 90 days, at most
365. Limits: 20 active credentials per owner, 50 per project.
The response carries applicationCredentialSecret exactly ONCE. It is never stored by the platform
(not in the database, logs, audit or idempotency records) and cannot be retrieved again.
Authorization: an interactive console session with a second factor verified in the last 5 minutes
(pc_live_ tokens and sak_live_ keys are refused); direct API access enabled for the organisation and
not locked by the platform operator (403 details.reason API_ACCESS_DISABLED_BY_OPERATOR);
own credential: compute, network and storage at least read on the project; service-account credential:
tokens: manage AND the caller's permissions on the project must dominate the service account's.
Errors: 401; 403 (FORBIDDEN, MFA_STEP_UP_REQUIRED, MFA_SETUP_REQUIRED,
INTERACTIVE_SESSION_REQUIRED); 404 scope or service account; 409 an Idempotency-Key that was already
used (the secret is never replayed) or a limit reached (QUOTA_EXCEEDED); 412 API access disabled /
project not provisioned; 422 validation; 429 RATE_LIMITED another credential of the same owner is being
minted right now and did not finish within the wait (retry); 503 the cloud could not complete
it (retry). Concurrent requests with one Idempotency-Key: exactly one mints, the others answer 409.
bearerTokenAuthorizationBearer <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.
scopeId*stringOpaque ownership+authorization scope resolving to tenant + subscription + project.
Idempotency-Key?stringOptional; recommended for safe retries. When sent, the same key+body within 24h replays the original result and the same key with a different body is 409 CONFLICT; keys are unique per tenant. When an API token or service-account (bearer) caller omits it, the request is applied once with no replay protection (a retry may apply it again). A console session gets one from the edge.
uuidapplication/json- body
name*stringLetters, digits, interior space, '.', '_' or '-'; starts with a letter or digit.
^[A-Za-z0-9](?:[A-Za-z0-9._ -]{0,61}[A-Za-z0-9._-])?$1 <= length <= 63profile*OpenStackCredentialProfilefull = Keystone member + load-balancer_member; readonly = reader + load-balancer_observer.
Never more than the owner's projected roles on the project.
"full""readonly"expiresInDays?integerLifetime in days (default 90). Mutually exclusive with expiresAt.
1 <= value <= 365expiresAt?stringExplicit expiry (1-365 days ahead). Mutually exclusive with expiresInDays.
date-timeserviceAccountId?stringMint for this service account instead of the caller (requires tokens manage).
Created; the secret is in this response only.
application/json- response
credential*An OpenStack application credential minted by the platform (the secret is never included).
secret*The one-time secret material plus what a clouds.yaml / openrc needs.
curl -X POST "https://example.com/scopes/string/iam/openstack-credentials" \ -H "Content-Type: application/json" \ -d '{ "name": "string", "profile": "full" }'{ "credential": { "id": "string", "name": "string", "projectId": "string", "owner": { "kind": "user", "id": "string" }, "profile": "full", "roles": [ "string" ], "status": "active", "applicationCredentialId": "string", "expiresAt": "2019-08-24T14:15:22Z", "createdAt": "2019-08-24T14:15:22Z", "createdBy": "string", "lastUsedAt": "2019-08-24T14:15:22Z", "revokedAt": "2019-08-24T14:15:22Z", "revokeReason": "user", "rotatedFromId": "string", "replacedById": "string", "deleteAfter": "2019-08-24T14:15:22Z" }, "secret": { "applicationCredentialId": "string", "applicationCredentialSecret": "string", "authUrl": "string", "regionName": "string", "interface": "string" }}