Voltair Organization API
The Organization API from Voltair — 1 operation(s) for organization.
The Organization API from Voltair — 1 operation(s) for organization.
openapi: 3.0.3
info:
title: Voltair ApiKeys Organization 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: Organization
paths:
/organization:
get:
tags:
- Organization
operationId: getOrganization
summary: Get organization
description: Returns the organization for the authenticated caller.
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/Organization'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
put:
tags:
- Organization
operationId: updateOrganization
summary: Update organization
description: Updates organization details. Cannot edit id or createdAt.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateOrganizationRequest'
responses:
'200':
description: Success
headers:
X-Request-Id:
$ref: '#/components/headers/XRequestId'
content:
application/json:
schema:
type: object
required:
- data
- transactionId
properties:
data:
$ref: '#/components/schemas/Organization'
transactionId:
type: string
format: uuid
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'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'
BadRequest:
description: Bad request or validation error
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)
Organization:
type: object
required:
- id
- name
- featureFlags
- deletedAt
- createdAt
- updatedAt
properties:
id:
type: string
format: uuid
name:
type: string
logoUrl:
type: string
contactEmail:
type: string
address:
$ref: '#/components/schemas/Address'
featureFlags:
type: object
description: "Per-organization feature flags. Keys are camelCase flag names, values are typed (currently only booleans). A missing key means the feature is off; each consumer documents its own default at the read site. Known keys:\n - fakeDroneVideo (boolean): when true, ViewMissionPage shows the\n demo drone video loop for missions whose status is\n \"in-progress\". Defaults to off when missing.\n"
additionalProperties: true
deletedAt:
type: number
nullable: true
description: Soft-delete Unix timestamp in milliseconds; null if not deleted
createdAt:
type: number
description: Unix timestamp in milliseconds
updatedAt:
type: number
description: Unix timestamp in milliseconds
Address:
type: object
required:
- street
- city
- state
- zip
- country
properties:
street:
type: string
city:
type: string
state:
type: string
zip:
type: string
country:
type: string
UpdateOrganizationRequest:
type: object
properties:
name:
type: string
logoUrl:
type: string
contactEmail:
type: string
address:
$ref: '#/components/schemas/Address'
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