Voltair Identity API
The Identity API from Voltair — 1 operation(s) for identity.
The Identity API from Voltair — 1 operation(s) for identity.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/voltair-identity-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Voltair ApiKeys Identity API
version: 0.1.0
description: 'Infrastructure inspection platform API. All endpoints are scoped to the authenticated organization via Bearer JWT or API key.
All timestamp fields on this API (createdAt, updatedAt, scheduledFor, capturedAt, expiresAt, deletedAt, etc.) are Unix timestamps in milliseconds since the epoch (UTC). Both request and response bodies use this representation.'
servers:
- url: /
security:
- BearerAuth: []
- ApiKeyAuth: []
tags:
- name: Identity
paths:
/me:
get:
tags:
- Identity
operationId: getMe
summary: Get authenticated caller
description: Returns the user row, role row, and resolved permission list for the authenticated caller, derived from the auth context's own `auth_lookup_by_cognito_id`. Unlike `GET /users/{id}` and `GET /roles`, this endpoint is keyed to the JWT (not to the currently viewed organization), so it works for super-admins whose user/role rows live in the cluster-internal org but who are viewing a different tenant. Authenticated callers always have permission to read their own identity, so the route is not gated by a `Requires(...)` permission check.
responses:
'200':
description: Success
headers:
X-Request-Id:
$ref: '#/components/headers/XRequestId'
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
type: object
required:
- user
- role
- permissions
properties:
user:
$ref: '#/components/schemas/User'
role:
$ref: '#/components/schemas/Role'
permissions:
type: array
items:
$ref: '#/components/schemas/Permission'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
components:
schemas:
Permission:
type: object
required:
- resource
- level
properties:
resource:
$ref: '#/components/schemas/PermissionResource'
level:
$ref: '#/components/schemas/PermissionLevel'
ErrorResponse:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
description: Machine-readable error code
message:
type: string
description: Human-readable description
details:
type: object
additionalProperties: true
description: Optional structured info (e.g. field-level validation errors, conflictingEventIds)
UserStatus:
type: string
enum:
- active
- invited
- deactivated
Role:
type: object
required:
- id
- name
- description
- permissions
- isSystem
- canSwitchOrganizations
- deletedAt
- createdAt
- updatedAt
properties:
id:
type: string
format: uuid
organizationId:
type:
- string
- 'null'
format: uuid
description: NULL for global roles (e.g. super-admin)
slug:
type:
- string
- 'null'
description: Stable identifier for the super-admin role
name:
type: string
description:
type: string
permissions:
type: array
items:
$ref: '#/components/schemas/Permission'
isSystem:
type: boolean
canSwitchOrganizations:
type: boolean
deletedAt:
type:
- number
- 'null'
createdAt:
type: number
updatedAt:
type: number
PermissionLevel:
type: string
enum:
- none
- read
- write
User:
type: object
required:
- id
- actorId
- cognitoId
- firstName
- lastName
- email
- status
- deletedAt
- createdAt
- updatedAt
properties:
id:
type: string
format: uuid
actorId:
type: string
format: uuid
cognitoId:
type: string
firstName:
type: string
lastName:
type: string
email:
type: string
phone:
type: string
avatarUrl:
type: string
status:
$ref: '#/components/schemas/UserStatus'
invitedAt:
type:
- number
- 'null'
joinedAt:
type:
- number
- 'null'
deletedAt:
type:
- number
- 'null'
createdAt:
type: number
updatedAt:
type: number
PermissionResource:
type: string
enum:
- sites
- missions
- media
- organization
- users
- roles
- billing
- developer
- events
- transactions
headers:
XRequestId:
description: Unique request identifier (UUID)
schema:
type: string
format: uuid
responses:
NotFound:
description: Resource not found
headers:
X-Request-Id:
$ref: '#/components/headers/XRequestId'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
Unauthorized:
description: Authentication required
headers:
X-Request-Id:
$ref: '#/components/headers/XRequestId'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
InternalError:
description: Internal server error
headers:
X-Request-Id:
$ref: '#/components/headers/XRequestId'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: Cognito JWT access token
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key
description: Organization-scoped API key