platform.synheart.ai.
The CLI uses OAuth Device Flow, not API keys, for
synheart login. Generate an API key only when you need server-to-server or SDK-to-platform access. See Authenticate the CLI.What a key carries
Each key the portal issues is bound to:- An organization (selected from the org switcher).
- An app inside a project; keys are minted at the app level, so one key can’t speak for multiple apps.
- A label you supply (free-form, used to identify the key in the list).
- One or more scopes that grant CRUD permissions:
read,write,delete,admin. - An environment tag for your own bookkeeping:
production,development,staging,testing, orother.
Generate a key
- Open the developer portal and switch to the organization, tenant, and project that own the app.
- Open the app’s API keys tab and choose Generate API Key.
- In the side panel, set:
- Choose App: the key is bound to one app.
- Key Type:
Production,Development,Staging,Testing, orOther. - Scopes: tick at least one of
Read,Write,Delete,Admin. The form blocks submission until one is selected.
- The portal returns a secret key and a signing secret in a one-time dialog. Both are shown only once and stored hashed; copy them immediately into a secret manager. The dialog also offers a Download credentials JSON button that bundles the new secrets together with the identifiers:
org_id,tenant_id,project_id,app_id,secret_key, and (when present)signing_secret. Save it to your secret manager; it never appears again.
app_api_key when configuring the runtime; see Runtime configuration.
The two secrets serve different callers:
secret_keyauthenticates every request via thex-api-keyheader. The on-device SDK uses this.signing_secretis for server-to-server callers that sign ingest requests directly from your own backend. The on-device SDK does not use this; it handles signing automatically. Only configuresigning_secretif your backend bypasses the SDK and calls the platform REST API directly (e.g. from a server-side ingest pipeline).
Ingestion access
Reading data and pushing biosignals share the same key surface, but biosignal ingestion is gated by an app-level allowlist maintained by Synheart. Keys for apps that aren’t on the list are rejected at ingestion time with the message “App<app_id> is not verified for data ingestion.”
If you need ingestion access, contact Synheart with the platform app_id shown on the App in the dashboard; there’s no self-service request flow today.
Rotate
There’s no automatic rotation. To rotate:- Generate a new key with the same scopes and environment.
- Roll both the secret key and signing secret out to your callers.
- Revoke the old key.
Revoke
Revoke unused keys from the API keys list. Revocation is immediate; subsequent requests with the revoked key fail with401. Revoked keys stay visible in the list (toggle Include revoked) for audit.
Errors
Next
Projects
Organize the apps your keys point at into projects.