Skip to content

API Overview

The VeraID API provides programmatic access to all identity governance capabilities, including identity management, credential lifecycle, policy enforcement, audit logging, and integrations.

Base URL

https://app.veraid.io/api/v1

All API endpoints are prefixed with /api/v1. The API is served over HTTPS only. HTTP requests are rejected.

Authentication

The VeraID API supports two authentication methods:

API Key (Bearer Token)

Include your API key in the Authorization header using the Bearer scheme:

Terminal window
curl -X GET https://app.veraid.io/api/v1/identities \
-H "Authorization: Bearer kd_live_abc123..."

API keys follow the format kd_{env}_{random}:

PrefixEnvironmentDescription
kd_live_ProductionFull access to production data
kd_test_TestAccess to test/sandbox data only

Browser-based requests from the VeraID dashboard use session cookies managed by NextAuth. This method is used automatically when interacting with the API through the web interface and is not intended for programmatic access.


Content Type

All requests and responses use JSON. Include the Content-Type header for requests with a body:

Content-Type: application/json

Rate Limiting

API requests are rate-limited to ensure fair usage and platform stability.

LimitValue
Requests per minute100
Burst allowance20 (above the per-minute rate)

Rate limit status is communicated via response headers:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed per minute
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the rate limit window resets

When the rate limit is exceeded, the API responds with a 429 Too Many Requests status:

{
"error": "Rate limit exceeded",
"details": {
"limit": 100,
"remaining": 0,
"resetAt": "2026-03-19T10:01:00Z"
}
}

Organization Scoping

All API requests are automatically scoped to the organization associated with the API key. You cannot access resources belonging to other organizations. The organization context is derived from the API key and does not need to be specified in the request.


Error Format

All error responses follow a consistent structure:

{
"error": "Human-readable error message",
"details": {
"field": "Additional context about the error"
}
}

The details object provides additional context and varies by error type. For validation errors, it contains field-level error messages:

{
"error": "Validation failed",
"details": {
"name": "Name is required",
"type": "Must be one of: SERVICE_ACCOUNT, API_KEY, CI_CD, AI_AGENT"
}
}

Status Codes

CodeMeaningDescription
200OKRequest succeeded. Response body contains the requested data.
201CreatedResource created successfully. Response body contains the new resource.
400Bad RequestInvalid request body, missing required fields, or validation failure.
401UnauthorizedMissing or invalid API key.
403ForbiddenValid API key but insufficient permissions for the requested operation.
404Not FoundThe requested resource does not exist or is not accessible within your organization.
429Too Many RequestsRate limit exceeded. Retry after the time indicated in the X-RateLimit-Reset header.
500Internal Server ErrorAn unexpected error occurred. Contact support if the issue persists.

Pagination

List endpoints support cursor-based pagination using page and limit query parameters:

Terminal window
curl -X GET "https://app.veraid.io/api/v1/identities?page=2&limit=25" \
-H "Authorization: Bearer kd_live_abc123..."

Response:

{
"data": [...],
"pagination": {
"page": 2,
"limit": 25,
"total": 142,
"totalPages": 6,
"hasMore": true
}
}
ParameterDefaultMaximumDescription
page1Page number (1-indexed)
limit20100Number of items per page

Request ID

Every API response includes an X-Request-Id header containing a unique identifier for the request. Include this ID when contacting support to help diagnose issues:

X-Request-Id: req_abc123def456

SDK Support

Official SDKs are available for TypeScript and Python, providing type-safe wrappers around the API with built-in retry logic, rate limit handling, and error typing.