Skip to main content

Health and discovery

These endpoints need no authentication. Use them to check whether the API is available, discover sign-in endpoints, and find the FHIR capabilities exposed by a server.

OperationMethodPath
Health checkGET/healthcheck
Health check aliasGET/
Health check aliasGET/_health
Readiness checkGET/healthcheck/ready
OpenID Connect discoveryGET/.well-known/openid-configuration
JSON Web Key SetGET/.well-known/jwks.json
SMART configurationGET/.well-known/smart-configuration
SMART configurationGET/fhir/R4/.well-known/smart-configuration
OpenAPI documentGET/openapi.json
FHIR CapabilityStatementGET/fhir/R4/metadata

Health check​

GET /healthcheck

Reports whether the API and its dependencies are healthy, and identifies the running build. The same health response is served at / and /_health.

curl -sS "https://api.sandbox.ovok.com/healthcheck"
FieldTypeExampleDescription
okbooleantrueTrue only when every dependency below is healthy.
dependencies.redis.okbooleantrueWhether Redis answered within two seconds.
dependencies.fhirStore.okbooleantrueWhether the FHIR store answered within two seconds and reported healthy.
versionstring or nullnullRelease version, or null when the build did not set one.
buildEnvstring or nullproductionRuntime environment reported by the build; this can differ from the hostname used to reach the API.
commitHashstring or nullb336f80First seven characters of the deployed commit. Use it to confirm a deployment is live.
buildDatestring or nullnullBuild timestamp, or null when the build did not set one.
runningSincestringISO 8601 timestampWhen this server process started. It changes after a restart or deployment.

Health versus readiness​

The status code from /healthcheck is 200 even when a dependency is down, so inspect ok in the response body. A load balancer or monitor that needs a failing HTTP status should call GET /healthcheck/ready; it returns 503 when a dependency is unavailable.

Any origin may call the health check. Its response includes Access-Control-Allow-Origin: *.


OpenID Connect discovery​

GET /.well-known/openid-configuration

Returns the OpenID Provider metadata described by OpenID Connect Discovery 1.0. OAuth and OpenID Connect client libraries read it to find sign-in endpoints and supported features.

curl -sS "https://api.sandbox.ovok.com/.well-known/openid-configuration"
FieldExampleDescription
issuerhttps://<identity-host>/Token issuer identifier. The iss claim in a token must match it exactly.
authorization_endpointhttps://<identity-host>/oauth2/authorizeWhere to send the user to sign in with the authorization code flow.
token_endpointhttps://<identity-host>/oauth2/tokenWhere to exchange a code, refresh token, or client credentials for tokens.
userinfo_endpointhttps://<identity-host>/oauth2/userinfoReturns claims for the signed-in user when called with an access token.
jwks_urihttps://<identity-host>/.well-known/jwks.jsonPublic keys used to verify token signatures. See JSON Web Key Set.
introspection_endpointhttps://<identity-host>/oauth2/introspectReports whether a token is active (RFC 7662).
registration_endpointhttps://<identity-host>/oauth2/registerDynamic client registration endpoint.
grant_types_supportedauthorization_code, refresh_tokenOAuth grant types accepted by the token endpoint.
response_types_supportedcoderesponse_type values accepted by the authorization endpoint.
scopes_supportedopenid, profile, emailOpenID Connect scopes advertised by this provider.
token_endpoint_auth_methods_supportedclient_secret_basic, private_key_jwtClient authentication methods accepted by the token endpoint.
id_token_signing_alg_values_supportedES256, RS256Algorithms that may be used to sign ID tokens.
code_challenge_methods_supportedS256PKCE methods accepted. Use S256.
subject_types_supportedpairwise, publicSubject identifier types the issuer can produce.
request_object_signing_alg_values_supportednoneAlgorithms accepted for request objects.

The response is sent with Cache-Control: no-store. Use the metadata returned here rather than constructing issuer or endpoint URLs from the API base URL; the identity service may use a different hostname.


JSON Web Key Set​

GET /.well-known/jwks.json

Returns the public signing keys (RFC 7517). Use them to verify access and ID tokens locally.

curl -sS "https://api.sandbox.ovok.com/.well-known/jwks.json"
FieldExampleDescription
keys[].kid<key-id>Key ID. A token header's kid identifies the key that signed it.
keys[].ktyRSAKey type.
keys[].algRS256Signing algorithm.
keys[].usesigKey purpose; sig means signature verification.
keys[].n, keys[].e<base64url-encoded-modulus>, AQABRSA modulus and exponent, base64url-encoded.

Select the key whose kid matches the token header. Keys can rotate; if a token names an unknown kid, fetch the JWKS again before rejecting it.


SMART configuration​

GET /.well-known/smart-configuration
GET /fhir/R4/.well-known/smart-configuration

Returns the SMART App Launch configuration. Both paths return the same document. SMART clients discover configuration relative to the FHIR base URL (https://api.sandbox.ovok.com/fhir/R4), so clients should use the FHIR-relative path.

curl -sS "https://api.sandbox.ovok.com/fhir/R4/.well-known/smart-configuration"
FieldExampleDescription
issuer, jwks_urihttps://<identity-host>/, https://<identity-host>/.well-known/jwks.jsonIssuer and public signing-key location, as in OpenID Connect discovery.
authorization_endpoint, token_endpoint, introspection_endpoint/oauth2/authorize, /oauth2/token, /oauth2/introspect on the returned identity hostAuthorization, token, and token-introspection endpoints.
grant_types_supportedclient_credentials, authorization_code, refresh_tokenAccepted grants. client_credentials is used by backend services.
token_endpoint_auth_methods_supportedclient_secret_basic, private_key_jwtClient authentication methods; private_key_jwt is intended for asymmetric backend clients.
token_endpoint_auth_signing_alg_values_supportedRS256, RS384, ES384Algorithms accepted for private_key_jwt client assertions.
scopes_supportedpatient/*.rs, user/*.cruds, openid, fhirUserSMART and OpenID scopes. patient/*.rs reads and searches the launch patient's data; user/*.cruds reflects interactions allowed by the user's permissions.
response_types_supportedcodeSupported response types; this configuration lists the authorization code flow.
capabilitieslaunch-ehr, launch-standalone, permission-v1, permission-v2SMART features such as EHR and standalone launch, public and confidential clients, and v1 and v2 scope syntax.
code_challenge_methods_supportedS256PKCE methods.

The response is sent with Cache-Control: no-store.


OpenAPI document​

GET /openapi.json

This path currently returns 404 Not Found in the checked environments. If the route is enabled later, the response body will be an OpenAPI document.

curl -i "https://api.sandbox.ovok.com/openapi.json"

The checked environments return 404 Not Found; no response body is documented here because its shape was not included in the captured response. Use the published API reference while this endpoint is unavailable.


FHIR CapabilityStatement​

GET /fhir/R4/metadata

Returns the server's FHIR CapabilityStatement. It describes supported resource types, interactions, search parameters, operations, security, and the FHIR base URL. Ovok also includes an extension listing public non-FHIR endpoints.

curl -sS "https://api.sandbox.ovok.com/fhir/R4/metadata" -H 'Accept: application/fhir+json'

The full response is about 370 KB and lists 146 resource types. This query prints a useful overview; remove the jq filter to save the complete response:

curl -sS "https://api.sandbox.ovok.com/fhir/R4/metadata" | jq '{
resourceType,
status,
kind,
fhirVersion,
format,
software,
implementation,
rest: [.rest[] | {
mode,
security: {
cors: .security.cors,
services: [.security.service[].coding[].code],
oauthUris: [.security.extension[].extension[] | {rel: .url, url: .valueUri}]
},
resourceCount: (.resource | length),
patient: [.resource[] | select(.type == "Patient") | {
type,
profile,
interactions: [.interaction[].code],
versioning,
searchParameterCount: (.searchParam | length)
}][0]
}]
}'

The response is a FHIR CapabilityStatement. The jq command above selects a compact overview; the full response includes these key sections:

FieldExampleDescription
resourceTypeCapabilityStatementIdentifies the FHIR resource.
id, name, titleovok-server, OvokCapabilityStatementIdentify the statement as Ovok's CapabilityStatement.
urlhttps://api.sandbox.ovok.com/fhir/R4/metadataAddress from which this statement is served.
version, software.version<deployed-commit>First seven characters of the deployed commit, also shown as commitHash in the health check.
dateISO 8601 timestampWhen the FHIR resource definitions behind the statement were last built.
kindinstanceIndicates that this statement describes the running server.
implementation.urlhttps://api.sandbox.ovok.com/fhir/R4/FHIR base URL; FHIR request paths are relative to it.
fhirVersion4.0.1FHIR version, here R4.
format, patchFormatjson, application/json-patch+jsonSupported resource formats and PATCH content type.
rest[].security.serviceOAuth, SMART-on-FHIRAdvertised security schemes.
rest[].security.extensionauthorize, token endpoint URIsOAuth authorization and token endpoints for SMART clients. Use the returned URIs.
rest[].interactiontransaction, batchServer-wide interactions, such as FHIR transaction and batch Bundles.
rest[].searchParam_count (number)Search parameters valid across resource types.
rest[].resource[].typeObservationA supported FHIR resource type.
rest[].resource[].interactionread, create, update, search-typeREST interactions advertised for that type.
rest[].resource[].versioning, conditional*versioned, conditionalCreate: trueVersion handling and conditional create, update, and delete support.
rest[].resource[].searchParam_id (token), _lastUpdated (date)Search parameters and their types for a specific resource type.
rest[].resource[].operationlastnExtended operations supported on a resource type.
extension (ovok-public-api)Endpoint method, path, and groupOvok's public non-FHIR endpoints. FHIR clients can ignore this extension.

Operations Ovok implements​

ResourceOperationLevel
Observation$lastntype
Questionnaire$populateinstance
QuestionnaireResponse$extractinstance
Patient$enable-signalsinstance

Useful queries​

# Every resource type the server supports
curl -sS "https://api.sandbox.ovok.com/fhir/R4/metadata" | jq -r '.rest[0].resource[].type'

# Every Ovok public endpoint, as "METHOD /path"
curl -sS "https://api.sandbox.ovok.com/fhir/R4/metadata" | jq -r '
.extension[] | select(.url | endswith("ovok-public-api")) | .extension[]
| (.extension | map({(.url): (.valueCode // .valueString)}) | add) | "\(.method) \(.path)"'

The CapabilityStatement is rebuilt at most every five minutes, so a change after deployment may take up to five minutes to appear. If the FHIR store is unavailable, this request returns 503; a partial statement is not returned. Retry after the store recovers.

See the FHIR resources reference for the standard resource definitions. The live CapabilityStatement is the source of truth for capabilities advertised by the selected environment.