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.

Get service account detail with keys, bindings and auth activity

GET
/scopes/{scopeId}/iam/service-accounts/{serviceAccountId}

Retrieves the full service account detail read model for one service account in the active scope: the account profile (email, ARN, uniqueId, status, creator, key hygiene counters), its long-lived keys with age/expiry tracking, its role bindings (role, subscription or project scope, grantor, grant date) and the most recent authentication events (action, source IP, result, token type). Key entries expose only public metadata (fingerprint, dates, status) — private key material is never present in this response. Validation: scopeId must be accessible to the caller and serviceAccountId must reference an account visible in that scope (unknown or soft-deleted → 404 NOT_FOUND); caller needs IAM reader permission or better (else 403 FORBIDDEN). Async & state: Synchronous read; no state change. The detail view subscribes to resource.updated frames (kind: iam.service_account) for live status refreshes but this endpoint itself emits nothing. Errors: 401 unauthenticated; 403 caller lacks IAM read permission; 404 scope or service account not found; 500 read-model unavailable. Idempotency/Concurrency: Safe, cacheable; no idempotency key required. The response carries no ETag; its mutations do not check If-Match.

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.

serviceAccountId*string

Service account identifier (the account name / local part of the email ID).

Response Body

Service account detail read model with related panels.

application/json
  1. response

Detail read model — account profile plus the Keys, Bindings and Activity panels.

serviceAccount*

Machine identity with email-style ID, long-lived keys and scoped role bindings.

keys*array<>
bindings*array<>
authEvents*array<>
tags?array<>

Key/value tags from the editable Tags tab.

curl -X GET "https://example.com/scopes/string/iam/service-accounts/string"
{  "serviceAccount": {    "id": "string",    "name": "string",    "email": "string",    "arn": "string",    "uniqueId": "string",    "description": "string",    "status": "enabled",    "createdAt": "2019-08-24T14:15:22Z",    "createdBy": "string",    "lastUsedAt": "2019-08-24T14:15:22Z",    "keyCount": 0,    "bindingCount": 0,    "oldestKeyAgeDays": 0,    "auth24h": 0,    "denied24h": 0  },  "keys": [    {      "id": "string",      "fingerprint": "string",      "createdAt": "2019-08-24T14:15:22Z",      "lastUsedAt": "2019-08-24T14:15:22Z",      "expiresAt": "2019-08-24T14:15:22Z",      "status": "active",      "ageDays": 0,      "scopes": [        "compute:read"      ]    }  ],  "bindings": [    {      "id": "string",      "roleId": "string",      "roleName": "string",      "scopeType": "tenant",      "scopeName": "string",      "grantedBy": "string",      "grantedAt": "2019-08-24T14:15:22Z"    }  ],  "authEvents": [    {      "id": "string",      "at": "2019-08-24T14:15:22Z",      "action": "string",      "sourceIp": "string",      "result": "success",      "tokenType": "access_token"    }  ],  "tags": [    {      "key": "string",      "value": "string"    }  ]}