CaboLabs · Authentication Profile

Cabolabs Authentication

Authentication

CaboLabs declares 0 security scheme(s) across its OpenAPI definitions.

CompanyHealthHealthcareInteroperabilityopenEHRFHIRHL7Clinical Data RepositoryElectronic Health RecordsStandardsSNOMED CTDICOMMedical RecordsUruguay
Methods: Schemes: 0 OAuth flows: API key in:

Security Schemes

Source

Authentication Profile

cabolabs-authentication.yml Raw ↑
generated: '2026-09-02'
method: searched
source: >-
  https://atomik.app/documentation/security and
  https://atomik.app/documentation/getting_started (Atomik);
  https://github.com/ppazos/cabolabs-ehrserver/wiki/API-error-codes-and-messages and
  the published Insomnia collection api/EHRServer_2_0_API_Insomnia.json (EHRServer).
  Read 2026-09-02.
docs: https://atomik.app/documentation/security
note: >-
  Derived by SEARCH of the provider's own security and getting-started
  documentation, not from an OpenAPI - CaboLabs publishes no machine-readable
  contract, so there is no securitySchemes block to parse.
apis:
- api: Atomik openEHR REST API
  schemes:
  - id: atomik_jwt_bearer
    type: http
    scheme: bearer
    bearer_format: JWT
    in: header
    header: Authorization
    value_pattern: 'Authorization: Bearer {token}'
    token_endpoint: POST /api/v1/auth
    token_endpoint_note: >-
      Documented two ways in CaboLabs' own docs, which disagree on how credentials
      are passed. The security page and the getting-started curl both show
      Content-Type application/x-www-form-urlencoded with email and password form
      fields; the getting-started quick-start snippet at the top of the same page
      shows them as QUERY STRING parameters
      (POST /api/v1/auth?email=YOUR_EMAIL&password=YOUR_PASS). Recorded as
      published - not reconciled, because the docs do not reconcile it.
    token_response: '{"token":"eyJ..."}'
    expiry: 24 hours by default, configurable to match the customer security policy
    refresh: >-
      No refresh-token flow is documented. On expiry the client re-authenticates
      against POST /api/v1/auth for a fresh JWT.
    applied_to: All API endpoints other than the auth endpoint itself.
  - id: atomik_application_token
    type: apiKey
    in: header
    header: Authorization
    description: >-
      Application-level access tokens for integrations with no human user - a
      background service, a mobile app, or an integration engine. Created by an
      Atomik administrator and configured in the external system. Atomik trusts the
      token and DELEGATES user-level authorization to the calling application.
      Any token is revocable instantly from the admin panel with no code change or
      deployment.
    revocation: instant, from the admin panel
  - id: atomik_keycloak_oidc
    type: openIdConnect
    status: supported-integration
    description: >-
      Atomik can delegate authentication entirely to an external identity provider.
      CaboLabs explicitly recommends Keycloak for self-hosted OAuth2/OIDC, RBAC,
      SSO and MFA. No discovery document, issuer URL, scope list or client
      registration procedure is published - the integration is scoped per
      deployment, which is why scopes/ carries no artifact for this provider.
  audit_headers:
    note: >-
      Atomik requires openEHR audit provenance on writes, carried in custom request
      headers rather than the body. These are not authentication, but a write is
      rejected without them, so an agent must send them.
    headers:
    - name: openEHR-AUDIT_DETAILS.committer
      example: 'name="John Doe, MD", external_ref.id="BC8132EA-8F4A-11E7-BB31-BE2E44B06B35", external_ref.namespace="demographic", external_ref.type="PERSON"'
      required: true
    - name: openEHR-AUDIT_DETAILS.description
      example: 'value="Created EHR by XYZ"'
      required: false
  console_auth:
    method: username + password
    optional_hardening:
    - Google reCAPTCHA on the login form
    - Two-factor authentication via TOTP mobile app
    note: Both are described as "available on request", i.e. not on by default.
  roles:
  - role: Administrators
    access: Full Web Console access - templates, queries, audit logs, system configuration.
  - role: API users
    access: REST API only, via the auth endpoint and a JWT.
- api: CaboLabs EHRServer REST API
  schemes:
  - id: ehrserver_login_token
    type: http
    scheme: bearer
    in: header
    header: Authorization
    token_endpoint: POST /rest/v1/auth
    description: >-
      EHRServer authenticates against a login endpoint that returns a token, in
      JSON or XML (the published Insomnia collection carries both a "login JSON"
      and a "login XML" request against /rest/v1/auth). Login is multi-tenant:
      the documented 401 error codes e01.0006 through e01.0008 show that an
      organization number is a required credential alongside username and password,
      and that a user must be associated with the organization it names.
    multi_tenant: true
    organization_scoped: true
  - id: ehrserver_sync_key
    type: apiKey
    description: >-
      The synchronization endpoints under /sync are authenticated with a separate
      scoped JWT (the published collection's development environment carries a
      sync_key whose payload declares "scope":"sync"). Scoped to synchronization
      only; not a general API credential.
    scope: sync
gaps:
- No OAuth2 authorization-server metadata, no /.well-known/openid-configuration, and no published scope list on any CaboLabs host - every /.well-known/ probe on cabolabs.com returned 404 and every one on atomik.app returned an SPA shell.
- No documented API-key prefix convention, no key-rotation policy, and no documented rate or lockout behaviour on repeated auth failure for Atomik.
- Atomik's own docs give two different credential-passing shapes for the same POST /api/v1/auth call (form-encoded body vs query string); an integrator must try both.

Work with this as data

Every security artifact here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for security posture

4 MCP tools reach this
  • find_securityBrowse and filter every security artifact in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This security artifact
curl "https://apis.io/api/v1/security/cabolabs-authentication"
All security posture
curl "https://apis.io/api/v1/security?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.