Skip to main content

API Reference

Complete REST API documentation for the BIA OIDC Provider. All endpoints are served from https://bia.ever.health.

Base URL

Production: https://bia.ever.health Sandbox: https://sandbox.bia.ever.health

All requests must use HTTPS. HTTP requests are rejected with 301 Moved Permanently.

Authentication

API endpoints use two authentication schemes:

SchemeUsed ByFormat
Bearer Token (Developer API Key)Developer Platform endpointsAuthorization: Bearer bia_dev_ak_...
Client CredentialsToken endpoint (confidential clients)HTTP Basic or client_id + client_secret in body

Standard OIDC Endpoints

Discovery

GET /.well-known/openid-configuration

Returns the OpenID Connect discovery document. Use this to auto-configure your OIDC client.

Authentication: None

Response:

{
"issuer": "https://bia.ever.health",
"authorization_endpoint": "https://bia.ever.health/bio-oidc/authorize",
"token_endpoint": "https://bia.ever.health/bio-oidc/token",
"userinfo_endpoint": "https://bia.ever.health/bio-oidc/userinfo",
"registration_endpoint": "https://bia.ever.health/bio-oidc/register",
"jwks_uri": "https://bia.ever.health/.well-known/jwks.json",
"scopes_supported": [
"openid", "bio", "bio:liveness", "bio:neuro", "bio:genomic", "offline_access"
],
"response_types_supported": ["code", "id_token", "code id_token"],
"grant_types_supported": ["authorization_code", "refresh_token"],
"subject_types_supported": ["pairwise"],
"id_token_signing_alg_values_supported": ["ES256", "RS256"],
"token_endpoint_auth_methods_supported": [
"client_secret_basic", "client_secret_post", "private_key_jwt"
],
"claims_supported": [
"sub", "iss", "aud", "exp", "iat", "auth_time", "nonce",
"bio_assurance_level", "bio_liveness_active", "bio_liveness_timestamp",
"bio_modalities_used", "bio_commitment_hash", "bio_genomic_verified",
"bio_neuro_features", "bio_neuro_confidence", "bio_match_score",
"health_vectors", "amr", "acr", "zk_proof_id", "zk_verified"
],
"acr_values_supported": [
"urn:bia:assurance:low",
"urn:bia:assurance:substantial",
"urn:bia:assurance:high"
]
}

Example:

curl https://bia.ever.health/.well-known/openid-configuration

Authorization

GET /bio-oidc/authorize

Initiates the BIA authentication flow. Redirects the user to the biological verification interface.

Authentication: None (browser redirect)

Query Parameters:

ParameterTypeRequiredDescription
client_idstringYesYour application's client ID
redirect_uristringYesURL to redirect after authentication. Must match a registered URI.
response_typestringYesMust be code for authorization code flow
scopestringYesSpace-separated scopes. Must include openid.
statestringYesOpaque value for CSRF protection
noncestringYesRandom value bound to the id_token
acr_valuesstringNoRequested assurance level: urn:bia:assurance:high, urn:bia:assurance:substantial, urn:bia:assurance:low
bio_modalitiesstringNoComma-separated requested modalities: face, fingerprint, eeg
promptstringNologin forces re-authentication. consent forces consent screen.
max_agenumberNoMaximum authentication age in seconds
code_challengestringNoPKCE code challenge (required for public clients)
code_challenge_methodstringNoMust be S256 when using PKCE

Scopes:

ScopeClaims Returned
openidsub, iss, aud, exp, iat, auth_time
biobio_assurance_level, bio_modalities_used, bio_match_score, amr, acr
bio:livenessbio_liveness_active, bio_liveness_timestamp
bio:neurobio_neuro_features, bio_neuro_confidence, health_vectors
bio:genomicbio_genomic_verified, bio_commitment_hash
offline_accessReturns a refresh_token

Example:

# Construct the authorization URL and redirect the user
https://bia.ever.health/bio-oidc/authorize?\
client_id=bia_cid_a1b2c3d4e5f6&\
redirect_uri=https://localhost:3000/callback&\
response_type=code&\
scope=openid%20bio%20bio:liveness&\
state=af0ifjsldkj&\
nonce=n-0S6_WzA2Mj&\
acr_values=urn:bia:assurance:substantial

Success Response: Redirects to redirect_uri with code and state parameters.

Error Response: Redirects to redirect_uri with error and error_description parameters.

ErrorDescription
invalid_requestMissing or invalid parameter
unauthorized_clientClient not authorized for this grant type
access_deniedUser denied consent or biometric verification failed
unsupported_response_typeResponse type not supported
invalid_scopeRequested scope is invalid or unknown
bio_verification_failedBiometric verification did not meet the requested assurance level
bio_liveness_failedLiveness detection failed

Token

POST /bio-oidc/token

Exchanges an authorization code for tokens, or refreshes an existing session.

Authentication: Client credentials (HTTP Basic or body params)

Content-Type: application/x-www-form-urlencoded

Request Body (Authorization Code):

ParameterTypeRequiredDescription
grant_typestringYesauthorization_code
codestringYesThe authorization code from the callback
redirect_uristringYesMust match the URI used in the authorize request
client_idstringYesYour client ID (if not using HTTP Basic auth)
client_secretstringYesYour client secret (if not using HTTP Basic auth)
code_verifierstringConditionalPKCE code verifier (required if code_challenge was sent)

Request Body (Refresh Token):

ParameterTypeRequiredDescription
grant_typestringYesrefresh_token
refresh_tokenstringYesThe refresh token
scopestringNoReduced scope for the new token

Success Response (200):

{
"access_token": "bia_at_eyJhbGciOi...",
"token_type": "Bearer",
"expires_in": 3600,
"id_token": "eyJhbGciOiJFUzI1NiIs...",
"refresh_token": "bia_rt_dGhpcyBpcyBh..."
}

Error Responses:

StatusErrorDescription
400invalid_grantCode is expired, already used, or invalid
400invalid_clientClient authentication failed
400unsupported_grant_typeGrant type not supported
401invalid_clientInvalid client credentials

Example:

curl -X POST https://bia.ever.health/bio-oidc/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-u "bia_cid_a1b2c3d4e5f6:bia_cs_..." \
-d "grant_type=authorization_code" \
-d "code=bia_authz_abc123" \
-d "redirect_uri=https://localhost:3000/callback"

UserInfo

GET /bio-oidc/userinfo

Returns claims about the authenticated user. The claims returned depend on the scopes granted during authorization.

Authentication: Bearer token (access_token)

Response (200):

{
"sub": "bia_usr_8f3a1b2c4d5e6789",
"bio_assurance_level": "high",
"bio_liveness_active": true,
"bio_liveness_timestamp": "2026-04-02T10:06:30Z",
"bio_modalities_used": ["face", "fingerprint", "eeg"],
"bio_commitment_hash": "0x7a8b...3f2e",
"bio_genomic_verified": true,
"bio_neuro_features": 15,
"bio_neuro_confidence": 0.9987,
"bio_match_score": 0.9995,
"health_vectors": {
"cognitive_load": "normal",
"stress_index": "low",
"sleep_quality": "good",
"focus_stability": "high",
"emotional_valence": "positive"
},
"amr": ["bio:face", "bio:fingerprint", "bio:neuro", "bio:genomic"],
"acr": "urn:bia:assurance:high"
}

Error Responses:

StatusErrorDescription
401invalid_tokenAccess token is expired or invalid
403insufficient_scopeToken lacks the required scope for requested claims

Example:

curl https://bia.ever.health/bio-oidc/userinfo \
-H "Authorization: Bearer bia_at_eyJhbGciOi..."

Dynamic Client Registration

POST /bio-oidc/register

Dynamically register a new OIDC client. Follows RFC 7591.

Authentication: None (open registration) or Bearer token (authenticated registration)

Request Body:

{
"redirect_uris": ["https://app.example.com/callback"],
"client_name": "My Health App",
"token_endpoint_auth_method": "client_secret_basic",
"grant_types": ["authorization_code", "refresh_token"],
"response_types": ["code"],
"scope": "openid bio bio:liveness",
"contacts": ["dev@example.com"],
"logo_uri": "https://app.example.com/logo.png",
"policy_uri": "https://app.example.com/privacy",
"tos_uri": "https://app.example.com/terms"
}

Response (201):

{
"client_id": "bia_cid_x9y8z7w6v5u4",
"client_secret": "bia_cs_...",
"client_id_issued_at": 1743606000,
"client_secret_expires_at": 0,
"redirect_uris": ["https://app.example.com/callback"],
"client_name": "My Health App",
"token_endpoint_auth_method": "client_secret_basic",
"grant_types": ["authorization_code", "refresh_token"],
"response_types": ["code"],
"scope": "openid bio bio:liveness"
}

Error Responses:

StatusErrorDescription
400invalid_redirect_uriRedirect URI is not HTTPS or is malformed
400invalid_client_metadataRequired metadata is missing or invalid

Example:

curl -X POST https://bia.ever.health/bio-oidc/register \
-H "Content-Type: application/json" \
-d '{
"redirect_uris": ["https://app.example.com/callback"],
"client_name": "My Health App",
"grant_types": ["authorization_code"],
"response_types": ["code"],
"scope": "openid bio"
}'

BIA Extension Endpoints

Wallet Response

POST /bio-oidc/wallet-response

Receives a verifiable presentation from a wallet during the on-chain authentication flow. Used when the user authenticates via a blockchain wallet that holds BIA credentials.

Authentication: None (called by wallet)

Request Body:

{
"vp_token": "eyJhbGciOi...",
"presentation_submission": {
"id": "ps_1a2b3c",
"definition_id": "bia_identity_request",
"descriptor_map": [
{
"id": "bio_identity_credential",
"format": "jwt_vp",
"path": "$.vp_token",
"path_nested": {
"id": "bio_identity_credential",
"format": "jwt_vc",
"path": "$.vp.verifiableCredential[0]"
}
}
]
},
"state": "af0ifjsldkj"
}

Response (200):

{
"redirect_uri": "https://app.example.com/callback?code=bia_authz_abc123&state=af0ifjsldkj",
"session_id": "sess_4d5e6f7g",
"bio_assurance_level": "high",
"verified": true
}

Error Responses:

StatusErrorDescription
400invalid_presentationVP token is malformed or signature is invalid
400credential_expiredVerifiable credential has expired
403verification_failedBiometric verification in the credential did not pass
404session_not_foundThe state does not match any active authorization session

Example:

curl -X POST https://bia.ever.health/bio-oidc/wallet-response \
-H "Content-Type: application/json" \
-d '{
"vp_token": "eyJhbGciOi...",
"presentation_submission": {
"id": "ps_1a2b3c",
"definition_id": "bia_identity_request",
"descriptor_map": [{
"id": "bio_identity_credential",
"format": "jwt_vp",
"path": "$.vp_token"
}]
},
"state": "af0ifjsldkj"
}'

Commitment

POST /bio-oidc/commitment

Creates or updates a biological identity commitment. A commitment is a cryptographic binding between a user's biometric template and their on-chain identity, without revealing the underlying biometric data.

Authentication: Bearer token (access_token with bio:genomic scope)

Request Body:

{
"commitment_type": "genomic",
"commitment_hash": "0x7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a",
"proof": {
"circuit_id": "bia-genomic-commitment-v2",
"proof_data": "base64-encoded-zk-proof...",
"public_inputs": [
"0x7a8b9c0d...",
"0x1a2b3c4d..."
]
},
"metadata": {
"marker_count": 44,
"reference_build": "GRCh38",
"extraction_method": "vcf_v4.3"
}
}

Response (201):

{
"commitment_id": "cmt_5a6b7c8d9e",
"commitment_hash": "0x7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a",
"status": "verified",
"on_chain_tx": "0xabcdef1234567890...",
"block_number": 18456789,
"created_at": "2026-04-02T10:15:00Z",
"expires_at": "2027-04-02T10:15:00Z"
}

Error Responses:

StatusErrorDescription
400invalid_commitmentCommitment hash format is invalid
400proof_verification_failedZK proof did not verify against the commitment
401invalid_tokenAccess token is missing or invalid
403insufficient_scopeToken lacks bio:genomic scope
409commitment_existsA commitment for this identity already exists. Use PUT to update.

Example:

curl -X POST https://bia.ever.health/bio-oidc/commitment \
-H "Authorization: Bearer bia_at_eyJhbGciOi..." \
-H "Content-Type: application/json" \
-d '{
"commitment_type": "genomic",
"commitment_hash": "0x7a8b9c0d...",
"proof": {
"circuit_id": "bia-genomic-commitment-v2",
"proof_data": "base64-encoded-zk-proof...",
"public_inputs": ["0x7a8b9c0d...", "0x1a2b3c4d..."]
}
}'

Developer Platform Endpoints

All developer platform endpoints require a developer API key.

Register Developer

POST /bio-oidc/developers/register

Create a new developer account on the BIA platform.

Authentication: None

Request Body:

{
"email": "dev@yourcompany.com",
"password": "your-secure-password",
"organization": "Your Company",
"website": "https://yourcompany.com",
"use_case": "Healthcare patient verification"
}

Response (201):

{
"developer_id": "dev_8f3a1b2c4d5e",
"email": "dev@yourcompany.com",
"organization": "Your Company",
"api_key": "bia_dev_ak_...",
"status": "active",
"created_at": "2026-04-02T10:00:00Z",
"rate_limits": {
"requests_per_minute": 60,
"apps_allowed": 10
}
}

Error Responses:

StatusErrorDescription
400invalid_emailEmail format is invalid
400weak_passwordPassword does not meet complexity requirements
409email_takenA developer account with this email already exists

Example:

curl -X POST https://bia.ever.health/bio-oidc/developers/register \
-H "Content-Type: application/json" \
-d '{
"email": "dev@yourcompany.com",
"password": "your-secure-password",
"organization": "Your Company"
}'

Create Application

POST /bio-oidc/developers/apps

Register a new application under your developer account.

Authentication: Bearer token (Developer API Key)

Request Body:

{
"name": "My Health App",
"description": "Patient identity verification for telehealth",
"redirect_uris": [
"https://app.example.com/callback",
"https://localhost:3000/callback"
],
"grant_types": ["authorization_code", "refresh_token"],
"response_types": ["code"],
"bio_assurance_required": "substantial",
"bio_modalities": ["face", "fingerprint"],
"token_endpoint_auth_method": "client_secret_basic",
"logo_uri": "https://app.example.com/logo.png"
}
FieldTypeRequiredDescription
namestringYesApplication display name (3--64 characters)
descriptionstringNoShort description of the application
redirect_urisstring[]YesAllowed redirect URIs (must be HTTPS, except localhost)
grant_typesstring[]Yesauthorization_code, refresh_token
response_typesstring[]NoDefaults to ["code"]
bio_assurance_requiredstringNoMinimum assurance: high, substantial, low. Default: low
bio_modalitiesstring[]NoRequired modalities: face, fingerprint, eeg
token_endpoint_auth_methodstringNoclient_secret_basic, client_secret_post, private_key_jwt
logo_uristringNoLogo URL displayed during consent

Response (201):

{
"app_id": "app_7x9k2m4n",
"client_id": "bia_cid_a1b2c3d4e5f6",
"client_secret": "bia_cs_...",
"name": "My Health App",
"redirect_uris": [
"https://app.example.com/callback",
"https://localhost:3000/callback"
],
"bio_assurance_required": "substantial",
"bio_modalities": ["face", "fingerprint"],
"status": "active",
"created_at": "2026-04-02T10:00:00Z"
}

Error Responses:

StatusErrorDescription
400invalid_redirect_uriRedirect URI is not HTTPS or is malformed
400invalid_nameName is too short, too long, or contains invalid characters
400invalid_modalityUnrecognized biometric modality
401unauthorizedInvalid or missing API key
409name_takenAn app with this name already exists under your account
429app_limit_reachedMaximum number of apps for your plan reached

Example:

curl -X POST https://bia.ever.health/bio-oidc/developers/apps \
-H "Authorization: Bearer bia_dev_ak_..." \
-H "Content-Type: application/json" \
-d '{
"name": "My Health App",
"redirect_uris": ["https://localhost:3000/callback"],
"grant_types": ["authorization_code"],
"bio_assurance_required": "substantial"
}'

List Applications

GET /bio-oidc/developers/apps

List all applications under your developer account.

Authentication: Bearer token (Developer API Key)

Query Parameters:

ParameterTypeRequiredDescription
pagenumberNoPage number (default: 1)
limitnumberNoItems per page (default: 20, max: 100)
statusstringNoFilter by status: active, suspended, pending

Response (200):

{
"apps": [
{
"app_id": "app_7x9k2m4n",
"client_id": "bia_cid_a1b2c3d4e5f6",
"name": "My Health App",
"status": "active",
"bio_assurance_required": "substantial",
"created_at": "2026-04-02T10:00:00Z",
"last_auth_at": "2026-04-02T14:30:00Z",
"total_authentications": 1247
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 1,
"total_pages": 1
}
}

Example:

curl https://bia.ever.health/bio-oidc/developers/apps \
-H "Authorization: Bearer bia_dev_ak_..."

Get Application

GET /bio-oidc/developers/apps/:appId

Retrieve details for a specific application.

Authentication: Bearer token (Developer API Key)

Path Parameters:

ParameterTypeDescription
appIdstringThe application ID

Response (200):

{
"app_id": "app_7x9k2m4n",
"client_id": "bia_cid_a1b2c3d4e5f6",
"name": "My Health App",
"description": "Patient identity verification for telehealth",
"redirect_uris": [
"https://app.example.com/callback",
"https://localhost:3000/callback"
],
"grant_types": ["authorization_code", "refresh_token"],
"response_types": ["code"],
"bio_assurance_required": "substantial",
"bio_modalities": ["face", "fingerprint"],
"token_endpoint_auth_method": "client_secret_basic",
"logo_uri": "https://app.example.com/logo.png",
"status": "active",
"created_at": "2026-04-02T10:00:00Z",
"updated_at": "2026-04-02T10:00:00Z",
"total_authentications": 1247,
"last_auth_at": "2026-04-02T14:30:00Z"
}

Error Responses:

StatusErrorDescription
401unauthorizedInvalid or missing API key
404app_not_foundApplication not found or does not belong to your account

Example:

curl https://bia.ever.health/bio-oidc/developers/apps/app_7x9k2m4n \
-H "Authorization: Bearer bia_dev_ak_..."

Update Application

PUT /bio-oidc/developers/apps/:appId

Update an existing application's configuration.

Authentication: Bearer token (Developer API Key)

Path Parameters:

ParameterTypeDescription
appIdstringThe application ID

Request Body: Same fields as Create Application. Only include fields you want to change.

{
"name": "My Health App v2",
"redirect_uris": [
"https://app.example.com/callback",
"https://app.example.com/callback/v2"
],
"bio_assurance_required": "high",
"bio_modalities": ["face", "fingerprint", "eeg"]
}

Response (200):

{
"app_id": "app_7x9k2m4n",
"client_id": "bia_cid_a1b2c3d4e5f6",
"name": "My Health App v2",
"redirect_uris": [
"https://app.example.com/callback",
"https://app.example.com/callback/v2"
],
"bio_assurance_required": "high",
"bio_modalities": ["face", "fingerprint", "eeg"],
"status": "active",
"updated_at": "2026-04-02T11:00:00Z"
}

Error Responses:

StatusErrorDescription
400invalid_redirect_uriRedirect URI is not HTTPS or is malformed
401unauthorizedInvalid or missing API key
404app_not_foundApplication not found

Example:

curl -X PUT https://bia.ever.health/bio-oidc/developers/apps/app_7x9k2m4n \
-H "Authorization: Bearer bia_dev_ak_..." \
-H "Content-Type: application/json" \
-d '{
"bio_assurance_required": "high",
"bio_modalities": ["face", "fingerprint", "eeg"]
}'

Delete Application

DELETE /bio-oidc/developers/apps/:appId

Permanently delete an application. This revokes all issued tokens and invalidates the client credentials.

Authentication: Bearer token (Developer API Key)

Path Parameters:

ParameterTypeDescription
appIdstringThe application ID

Response (200):

{
"app_id": "app_7x9k2m4n",
"status": "deleted",
"deleted_at": "2026-04-02T12:00:00Z",
"tokens_revoked": 42
}

Error Responses:

StatusErrorDescription
401unauthorizedInvalid or missing API key
404app_not_foundApplication not found
Irreversible action

Deleting an application immediately revokes all access tokens, refresh tokens, and client credentials. Users currently authenticated through this application will be signed out. This action cannot be undone.

Example:

curl -X DELETE https://bia.ever.health/bio-oidc/developers/apps/app_7x9k2m4n \
-H "Authorization: Bearer bia_dev_ak_..."

Get SDK Configuration

GET /bio-oidc/developers/apps/:appId/sdk-config

Returns a ready-to-use SDK configuration object for your application.

Authentication: Bearer token (Developer API Key)

Path Parameters:

ParameterTypeDescription
appIdstringThe application ID

Response (200):

{
"issuer": "https://bia.ever.health",
"authorization_endpoint": "https://bia.ever.health/bio-oidc/authorize",
"token_endpoint": "https://bia.ever.health/bio-oidc/token",
"userinfo_endpoint": "https://bia.ever.health/bio-oidc/userinfo",
"jwks_uri": "https://bia.ever.health/.well-known/jwks.json",
"client_id": "bia_cid_a1b2c3d4e5f6",
"scopes_supported": ["openid", "bio", "bio:liveness", "bio:neuro", "bio:genomic"],
"redirect_uris": [
"https://app.example.com/callback",
"https://localhost:3000/callback"
],
"bio_assurance_required": "substantial",
"bio_modalities": ["face", "fingerprint"]
}

Example:

curl https://bia.ever.health/bio-oidc/developers/apps/app_7x9k2m4n/sdk-config \
-H "Authorization: Bearer bia_dev_ak_..."

Get API Documentation

GET /bio-oidc/developers/docs

Returns the machine-readable OpenAPI 3.1 specification for the BIA API.

Authentication: Bearer token (Developer API Key)

Query Parameters:

ParameterTypeRequiredDescription
formatstringNojson (default) or yaml

Response (200): OpenAPI 3.1 specification document.

Example:

curl https://bia.ever.health/bio-oidc/developers/docs?format=yaml \
-H "Authorization: Bearer bia_dev_ak_..."

Test Authentication

POST /bio-oidc/developers/apps/:appId/test-auth

Trigger a test authentication flow in the sandbox environment. Returns a simulated id_token with configurable bio claims -- no real biometric hardware needed.

Authentication: Bearer token (Developer API Key)

Path Parameters:

ParameterTypeDescription
appIdstringThe application ID

Request Body:

{
"bio_assurance_level": "high",
"bio_modalities": ["face", "fingerprint", "eeg"],
"bio_liveness_active": true,
"bio_genomic_verified": true,
"bio_neuro_confidence": 0.9987,
"simulate_failure": false
}
FieldTypeRequiredDescription
bio_assurance_levelstringNoSimulated assurance level. Default: app's configured minimum
bio_modalitiesstring[]NoSimulated modalities used
bio_liveness_activebooleanNoSimulate liveness pass/fail. Default: true
bio_genomic_verifiedbooleanNoSimulate genomic verification. Default: true
bio_neuro_confidencenumberNoSimulated neural confidence (0.0--1.0). Default: 0.99
simulate_failurebooleanNoIf true, returns an authentication failure response

Response (200):

{
"test": true,
"id_token": "eyJhbGciOiJFUzI1NiIs...",
"access_token": "bia_test_at_...",
"decoded_claims": {
"sub": "bia_test_usr_000000",
"bio_assurance_level": "high",
"bio_liveness_active": true,
"bio_modalities_used": ["face", "fingerprint", "eeg"],
"amr": ["bio:face", "bio:fingerprint", "bio:neuro"]
},
"expires_in": 3600
}
Sandbox only

Test authentication is only available for sandbox applications. Production applications must use real biometric flows.

Example:

curl -X POST https://bia.ever.health/bio-oidc/developers/apps/app_7x9k2m4n/test-auth \
-H "Authorization: Bearer bia_dev_ak_..." \
-H "Content-Type: application/json" \
-d '{
"bio_assurance_level": "high",
"bio_modalities": ["face", "fingerprint", "eeg"],
"simulate_failure": false
}'

Developer Statistics

GET /bio-oidc/developers/stats

Returns aggregate statistics across all your applications.

Authentication: Bearer token (Developer API Key)

Query Parameters:

ParameterTypeRequiredDescription
periodstringNoday, week, month (default), year
app_idstringNoFilter to a specific application

Response (200):

{
"period": "month",
"start_date": "2026-03-02T00:00:00Z",
"end_date": "2026-04-02T00:00:00Z",
"total_authentications": 12847,
"successful_authentications": 12103,
"failed_authentications": 744,
"unique_users": 3891,
"assurance_breakdown": {
"high": 4521,
"substantial": 6832,
"low": 750
},
"modality_usage": {
"face": 11200,
"fingerprint": 8900,
"eeg": 4521,
"genomic": 2100
},
"average_verification_time_ms": 2340,
"daily_breakdown": [
{
"date": "2026-04-01",
"authentications": 456,
"success_rate": 0.94
}
]
}

Example:

curl "https://bia.ever.health/bio-oidc/developers/stats?period=week" \
-H "Authorization: Bearer bia_dev_ak_..."

Error Format

All error responses follow a consistent format:

{
"error": "error_code",
"error_description": "Human-readable description of the error",
"error_uri": "https://docs.ever.health/errors/error_code",
"request_id": "req_a1b2c3d4e5"
}

Include the request_id when contacting support for faster debugging.

Rate Limits

PlanRequests/minuteAppsMonthly Authentications
Free6031,000
Developer3001050,000
Enterprise3,000UnlimitedUnlimited

Rate limit headers are included in every response:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1743606060

When rate limited, the API returns 429 Too Many Requests:

{
"error": "rate_limit_exceeded",
"error_description": "Rate limit exceeded. Try again in 23 seconds.",
"retry_after": 23
}

Pagination

List endpoints return paginated results:

{
"data": [],
"pagination": {
"page": 1,
"limit": 20,
"total": 142,
"total_pages": 8
}
}

Use ?page=2&limit=50 to navigate through results.