Voltair Events API
The Events API from Voltair — 2 operation(s) for events.
The Events API from Voltair — 2 operation(s) for events.
openapi: 3.0.3
info:
title: Voltair ApiKeys Events 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: Events
paths:
/events:
get:
tags:
- Events
operationId: listEvents
summary: List events
parameters:
- name: resourceType
in: query
schema:
type: string
description: Comma-separated resource types
- name: resourceId
in: query
schema:
type: string
format: uuid
- name: action
in: query
schema:
type: string
description: Comma-separated actions (create, update, delete)
- name: actorId
in: query
schema:
type: string
format: uuid
- name: after
in: query
schema:
type: number
description: Unix timestamp in milliseconds — events after this time
- name: before
in: query
schema:
type: number
description: Unix timestamp in milliseconds — events before this time
- $ref: '#/components/parameters/LimitParam'
- $ref: '#/components/parameters/CursorParam'
responses:
'200':
description: Success
headers:
X-Request-Id:
$ref: '#/components/headers/XRequestId'
content:
application/json:
schema:
type: object
required:
- data
- meta
properties:
data:
type: array
items:
$ref: '#/components/schemas/Event'
meta:
$ref: '#/components/schemas/PaginationMeta'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
/events/{eventId}:
parameters:
- name: eventId
in: path
required: true
schema:
type: string
format: uuid
get:
tags:
- Events
operationId: getEvent
summary: Get event
responses:
'200':
description: Success
headers:
X-Request-Id:
$ref: '#/components/headers/XRequestId'
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
$ref: '#/components/schemas/Event'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
components:
responses:
Forbidden:
description: Insufficient permissions
headers:
X-Request-Id:
$ref: '#/components/headers/XRequestId'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
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'
TooManyRequests:
description: Rate limit exceeded
headers:
X-Request-Id:
$ref: '#/components/headers/XRequestId'
X-RateLimit-Limit:
schema:
type: integer
description: Maximum requests per window
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in current window
X-RateLimit-Reset:
schema:
type: number
description: Unix timestamp (ms) when the window resets
Retry-After:
schema:
type: integer
description: Seconds until the next rate limit window
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
schemas:
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)
PaginationMeta:
type: object
required:
- cursor
properties:
cursor:
type: string
nullable: true
description: Opaque cursor for the next page; null when no more results
total:
type: integer
description: Total matching results across all pages; included when cheaply computable
Event:
type: object
required:
- id
- organizationId
- transactionId
- resourceType
- resourceId
- resourceIds
- resourceName
- action
- actorId
- actorType
- actorName
- actorRoleName
- actorIsSuperAdmin
- timestamp
- before
- after
properties:
id:
type: string
format: uuid
organizationId:
type: string
format: uuid
transactionId:
type: string
format: uuid
resourceType:
$ref: '#/components/schemas/EventResourceType'
resourceId:
type: string
format: uuid
nullable: true
description: Single resource; null for bulk events
resourceIds:
type: array
nullable: true
items:
type: string
format: uuid
description: Bulk events; null for single-resource events
resourceName:
type: string
action:
$ref: '#/components/schemas/EventActionType'
actorId:
type: string
format: uuid
actorType:
type: string
enum:
- user
- api_key
- system
nullable: true
description: Type of the actor (resolved at read time). Null if the actor row is not visible under the current org RLS scope (e.g. a Voltair super admin who has since switched to a different organization).
actorName:
type: string
nullable: true
description: 'Display name for the actor: ''first last'' for users, api_key name for api_keys, ''System'' for system actors. Null when the actor row is not resolvable.'
actorRoleName:
type: string
nullable: true
description: Name of the actor's role (e.g. 'Admin', 'Super Admin'). Null when the role row is not resolvable.
actorIsSuperAdmin:
type: boolean
nullable: true
description: True when the actor's role slug is 'super-admin'. Used by the UI to render 'Voltair Admin' instead of the underlying user's name.
timestamp:
type: number
before:
type: object
nullable: true
additionalProperties: true
description: Null for create; delta for update; full row for delete
after:
type: object
nullable: true
additionalProperties: true
description: Full row for create; delta for update; null for delete
EventResourceType:
type: string
enum:
- site
- cluster
- mission
- cluster_visit
- site_visit
- mission_media
- asset
- defect
- site_inspection
- asset_inspection
- organization
- user
- role
- api_key
- webhook
EventActionType:
type: string
enum:
- create
- update
- delete
parameters:
CursorParam:
name: cursor
in: query
schema:
type: string
description: Opaque pagination cursor from a previous response
LimitParam:
name: limit
in: query
schema:
type: integer
minimum: 1
maximum: 200
description: Page size (default 50, max 200)
headers:
XRequestId:
description: Unique request identifier (UUID)
schema:
type: string
format: uuid
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