Endpoint-specific error types

Complete registry of Ovok HTTP Problem Details types emitted by the current core release.

Ovok uses the following endpoint-specific machine codes to choose a stable Problem Details type. This inventory was checked against merged ovok-core development commit 6e295b659132da0d97f474508bbbea4b038310b3, plus the four carer types added at 6a0d0f675. It covers 82 app-defined types in addition to the status-derived types on the Error responses page. A source change that adds a new machine code must update this registry and its troubleshooting page.

Use the type URI as the stable category. Legacy response fields can vary by endpoint; do not assume the machine code is a top-level Problem Details code. The page for each type explains its status, likely cause, checks, and safe next step.

Problem typeHTTPMachine-code slugMeaning
account-exists409ACCOUNT_EXISTSAn email address already belongs to an Ovok account, so registration or provisioning cannot create another account with it.
address-has-account409ADDRESS_HAS_ACCOUNTA new carer's address already has an account, so accepting the invite cannot create a carer account for it.
already-subscribed409ALREADY_SUBSCRIBEDThe customer already has a subscription, so self-service checkout cannot create another one.
app-url-not-allowed400APP_URL_NOT_ALLOWEDThe supplied patient or practitioner application URL points to the Ovok API host and cannot be used as a return destination.
app-url-not-configured409APP_URL_NOT_CONFIGUREDThe project has no usable patient or practitioner app URL for an invitation or wearable-connection flow that needs a return destination.
billing-disabled403BILLING_DISABLEDPayments are not enabled in this Ovok deployment.
billing-hub403BILLING_HUBThis deployment is the central billing hub and does not accept this customer-facing billing operation.
client-id-reserved422CLIENT_ID_RESERVEDThe Withings client ID belongs to Ovok's legacy Withings device integration.
cms-api-key-limit409CMS_API_KEY_LIMITThe project already holds the maximum of 20 CMS API keys.
cms-api-key-not-found404CMS_API_KEY_NOT_FOUNDThe CMS API key identifier does not exist in the authenticated project.
connection-changed409CONNECTION_CHANGEDThe patient reconnected the wearable provider during a sync, so nothing was written over the new connection.
connection-not-found404CONNECTION_NOT_FOUNDThe patient has no current wearable connection for the requested provider.
email-not-verified403EMAIL_NOT_VERIFIEDThe account's email address has not been verified, so this sign-in step is blocked.
encryption-unavailable503ENCRYPTION_UNAVAILABLEThis server cannot encrypt a secret, so provider configuration was not saved.
enterprise-contract409ENTERPRISE_CONTRACTThe customer is billed under an Enterprise contract, so self-service subscription operations are unavailable.
events-unavailable503EVENTS_UNAVAILABLEOvok could not read the project's request-event service in time or the service is temporarily unavailable.
feature-not-configured501FEATURE_NOT_CONFIGUREDThe requested feature or integration is recognized but not configured or enabled in this deployment.
from-required422FROM_REQUIREDThe configured email provider requires a sender address that the project does not have.
invalid-link400INVALID_LINKThe verification link is invalid, expired, or already used.
invalid-secret422INVALID_SECRETThe supplied provider secret does not match the format accepted by the selected integration.
invalid-setting-value422INVALID_SETTING_VALUEThe supplied project setting is not valid for that setting's type or accepted values.
invalid-signature401INVALID_SIGNATUREA wearable provider notification arrived without a valid signature or URL token.
invalid-state422INVALID_STATEThe wearable authorization state is expired, already used, or bound to another provider or attempt.
invalid-switch400INVALID_SWITCHThe project-switch token is malformed, expired, used at the wrong step, or already completed.
invalid-template-content422INVALID_TEMPLATE_CONTENTTemplate content does not satisfy the selected email provider's requirements.
invalid-template-id422INVALID_TEMPLATE_IDThe template identifier is invalid for the selected email provider.
invitation-not-configured409INVITATION_NOT_CONFIGUREDThe project lacks a valid default access policy required for the invitation flow.
live-reads-over-capacity503LIVE_READS_OVER_CAPACITYThe server reached its concurrent live-read limit and shed the request.
malformed-notification400MALFORMED_NOTIFICATIONA wearable provider notification had a body that is neither a JSON object nor form fields.
monthly-request-cap429MONTHLY_REQUEST_CAPThe project has used its monthly API request allowance.
no-subscription409NO_SUBSCRIPTIONThere is no subscription on this billing customer to cancel.
not-parent-project403NOT_PARENT_PROJECTThis billing operation must be made from the parent project that owns the sub-project's billing.
not-your-email403NOT_YOUR_EMAILThe address in the project-switch request differs from the signed-in account.
not-your-switch403NOT_YOUR_SWITCHAnother session started or owns this project-switch flow.
parent-project-has-no-access-policy424PARENT_PROJECT_HAS_NO_ACCESS_POLICYThe parent project lacks the default access policy required by this child-project operation.
password-required422PASSWORD_REQUIREDThe invite creates a new carer account, and the request did not include the password to sign in with.
patient-profile-required403PATIENT_PROFILE_REQUIREDThis wearable operation needs a patient session, but the current token does not identify a patient profile.
plan-limit-reached403PLAN_LIMIT_REACHEDThe project reached a resource or feature limit in its current plan.
practitioner-registration-not-configured409PRACTITIONER_REGISTRATION_NOT_CONFIGUREDPractitioner registration is enabled but has no valid default access policy for new practitioners.
practitioner-without-access-policy409PRACTITIONER_WITHOUT_ACCESS_POLICYA share could grant broader access than intended because the practitioner has no access policy.
project-context-required403PROJECT_CONTEXT_REQUIREDThe session has no project context for an operation scoped to one project.
project-not-empty409PROJECT_NOT_EMPTYThe child project still contains patients, devices, locations, or child projects and cannot be deleted.
project-not-found404PROJECT_NOT_FOUNDThe caller does not administer a project matching the requested tenant code, or a wearable webhook URL names a project that does not exist.
provider-configured409PROVIDER_CONFIGUREDThe provider is already configured, so a create operation cannot add another configuration.
provider-mismatch409PROVIDER_MISMATCHThe template mapping provider does not match the provider configured for the project.
provider-not-available404PROVIDER_NOT_AVAILABLEThe wearable provider is unavailable or disabled for this project.
provider-not-configured404PROVIDER_NOT_CONFIGUREDThe requested email or wearable provider has not been set up for this project.
provider-rate-limited503PROVIDER_RATE_LIMITEDThe wearable provider is limiting requests from the project's app.
provider-unavailable502PROVIDER_UNAVAILABLEThe wearable provider failed, could not be reached, or answered something unreadable.
reconnect-required409RECONNECT_REQUIREDThe wearable provider no longer accepts the connection; the patient has to connect it again.
related-person-without-access-policy409RELATED_PERSON_WITHOUT_ACCESS_POLICYA carer's membership has no access policy, so adding a share would narrow its access instead of extending it.
sharing-not-configured409SHARING_NOT_CONFIGUREDThe project has no patient-sharing access policy, so a carer share cannot be granted.
signals-audit-failed503SIGNALS_AUDIT_FAILEDOvok could not record an audit event, so the requested Signals change was not applied.
signals-bad-request422SIGNALS_BAD_REQUESTSignals rejected the alert query, or the cursor was not issued by this list operation.
signals-code-invalid422SIGNALS_CODE_INVALIDThe vital-sign code is empty, malformed, too long, or contains unsupported characters.
signals-episodes-disabled409SIGNALS_EPISODES_DISABLEDEpisodic alerts are disabled for the project's Signals tenant.
signals-mint-failed503SIGNALS_MINT_FAILEDOvok could not provision the resident in Signals and rolled back the related resident creation.
signals-patient-not-enrolled409SIGNALS_PATIENT_NOT_ENROLLEDThe resident is not enrolled in the Signals tenant needed for this operation.
signals-project-migrating409SIGNALS_PROJECT_MIGRATINGThe project is moving to another Signals tenant, so tenant-dependent work is temporarily blocked.
signals-shared-tenant409SIGNALS_SHARED_TENANTThe project uses a shared Signals tenant, so this setting affects every project on that tenant.
signals-tenant-revoke-failed502SIGNALS_TENANT_REVOKE_FAILEDThe child project was deleted but its Signals tenant could not be revoked.
signals-tenant-unavailable503SIGNALS_TENANT_UNAVAILABLEThe project's Signals tenant is unreachable or not ready to serve the request.
signals-threshold-not-editable409SIGNALS_THRESHOLD_NOT_EDITABLEThe threshold rule is not editable through this route, or a conflicting write is in progress.
signals-unavailable503SIGNALS_UNAVAILABLEOvok did not get a timely response from Signals for this operation.
signals-undo-failed503SIGNALS_UNDO_FAILEDThe Signals change could not be recorded or undone and requires operator reconciliation.
signup-closed403SIGNUP_CLOSEDPublic sign-up is closed on this deployment.
state-store-unavailable503STATE_STORE_UNAVAILABLEOvok's temporary wearable authorization-state store is unavailable.
subscription-key-not-used422SUBSCRIPTION_KEY_NOT_USEDA subscription key was sent to a wearable provider that does not accept one.
subscription-key-required422SUBSCRIPTION_KEY_REQUIREDThe wearable provider requires a subscription key that was not supplied.
sync-failed500SYNC_FAILEDA wearable sync failed on Ovok's side; nothing was written.
sync-in-progress409SYNC_IN_PROGRESSA sync of this wearable connection is already running.
sync-not-supported501SYNC_NOT_SUPPORTEDOvok can connect this wearable provider but does not sync its data yet.
sync-queue-unavailable503SYNC_QUEUE_UNAVAILABLEOvok accepted a wearable provider notification but could not queue the sync it asks for.
sync-too-soon429SYNC_TOO_SOONThe wearable connection synced less than 15 minutes ago.
too-many-requests429TOO_MANY_REQUESTSThe request rate exceeded an applicable Ovok limit.
trace-not-found404TRACE_NOT_FOUNDNo request event for this project has the supplied trace identifier.
transaction-too-large422TRANSACTION_TOO_LARGEThe FHIR transaction bundle exceeds Ovok's supported entry limit.
unknown-setting400UNKNOWN_SETTINGThe setting name is not supported by this project-settings route.
unknown-template400UNKNOWN_TEMPLATEThe template name is not in the supported template catalogue.
vat-id-required422VAT_ID_REQUIREDThe customer's region requires a VAT ID for this billing operation.
webhook-not-supported404WEBHOOK_NOT_SUPPORTEDOvok takes no notifications from this wearable provider.
webhook-secret-not-used422WEBHOOK_SECRET_NOT_USEDA webhookSecret was sent for a wearable provider that does not take one.

FHIR routes return FHIR OperationOutcome resources; OAuth and MCP endpoints use their protocol error formats. These are not members of this Problem Details registry. See FHIR OperationOutcome, refresh-token OAuth errors, and the MCP server troubleshooting guide.

Last updated on