Identity & Access 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.

File a quota-increase request

POST
/scopes/{scopeId}/iam/quota-requests

Files a pending request to raise one quota dimension of the scope's subscription to requestedLimit, for review by a platform operator. The current EFFECTIVE limit (configured default overlaid with any operator override) is resolved server-side and recorded as currentLimit. The record is returned 201; an approval later applies the granted limit to the subscription. Validation: quotaId must be a known quota id (e.g. q-vcpus) → else 404 NOT_FOUND; requestedLimit must be an integer in 0..2147483647 and strictly greater than the current effective limit (field requestedLimit); justification at most 1000 characters; unknown properties are refused — every violation → 422 VALIDATION_FAILED. RBAC: MANAGE on billing plus the billing:write token scope (a reader cannot file). A tenant on non-payment hold is read-only → 403. Async & state: Synchronous — 201 with the persisted QuotaIncreaseRequest in status pending. Errors: 401 unauthenticated; 403 caller lacks billing MANAGE / token scope, or tenant on hold; 404 unknown scopeId or quotaId; 409 CONFLICT a request for the same quota is already pending for this subscription (details.reason QUOTA_REQUEST_PENDING, details.requestId); 422 invalid body; 500 internal failure. Idempotency/Concurrency: No Idempotency-Key. At most one pending request per (subscription, quota id): concurrent filings are serialised and the loser gets the 409.

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.

Request Body

application/json
  1. body

Body of POST /scopes/{scopeId}/iam/quota-requests.

quotaId*string

The quota id to raise (e.g. q-vcpus).

requestedLimit*integer

The new limit being requested, in the quota's unit; must exceed the current effective limit.

Range0 <= value <= 2147483647
justification?|

Why the increase is needed (shown to the operator); at most 1000 characters.

Lengthlength <= 1000

Response Body

Request filed; the persisted pending request is returned.

application/json
  1. response

A customer-filed quota-increase request (epic admin-portal#38), reviewed by a platform operator who approves it (granting requestedLimit), approves it lower (granting a smaller grantedLimit → partially_approved) or rejects it. Every property is always present.

id*string

Request id (qr-…).

tenantId*string

Tenant that filed the request.

scopeId*string

The billing grain the quota keys on (the subscription id).

projectId*|

Project (path scopeId) the request was filed from.

requesterId*string

Principal id of the requester.

requesterEmail*string

Email the decision notification is sent to.

quotaId*string

Quota dimension to raise (e.g. q-vcpus).

resource*string

Human label of the quota dimension (e.g. vCPUs).

currentLimit*integer

The effective limit when the request was filed, in the quota's unit.

requestedLimit*integer

The requested new limit, in the quota's unit.

grantedLimit*|

The limit an operator granted; null until decided (and on a rejection).

justification*string

The requester's justification; "" when none was given.

status*string

Lifecycle state of the request.

Value in"pending""approved""partially_approved""rejected"
decisionNote*string

The operator's note on the decision; "" when none.

decidedBy*|

Operator who decided the request; null while pending.

decidedAt*|

When the request was decided; null while pending.

Formatdate-time
createdAt*string

When the request was filed.

Formatdate-time
updatedAt*string

When the request last changed.

Formatdate-time
curl -X POST "https://example.com/scopes/string/iam/quota-requests" \  -H "Content-Type: application/json" \  -d '{    "quotaId": "string",    "requestedLimit": 0  }'
{  "id": "string",  "tenantId": "string",  "scopeId": "string",  "projectId": "string",  "requesterId": "string",  "requesterEmail": "string",  "quotaId": "string",  "resource": "string",  "currentLimit": 0,  "requestedLimit": 0,  "grantedLimit": 0,  "justification": "string",  "status": "pending",  "decisionNote": "string",  "decidedBy": "string",  "decidedAt": "2019-08-24T14:15:22Z",  "createdAt": "2019-08-24T14:15:22Z",  "updatedAt": "2019-08-24T14:15:22Z"}