ChartHeroAI

DocsDeveloper Docs

Linkage

Provider Linking

Configure disabled, optional, or required provider linking with directory and verified-email helper flows.

v1.0

Provider linking modes

Most patient + appointment adapter workflows use disabled — read on only if you need ChartHero to map the launching user to your upstream provider identity.

Each adapter installation chooses one provider-linking mode.

Authorized users configure provider linking from the Custom Adapter installation detail page in ChartHero organization settings. First, configure and enable the provider external identifiers needed by the approved linking flows in the External Identifiers section. Then, in Identity & Directory, choose disabled, optional, or required, and enable provider directory or verified-email lookup only when those flows are approved.

The provider external identifier source is not inferred from the provider-linking mode. It is the enabled provider binding shown in External Identifiers. Your adapter must use the exact provider source and type shown there for provider external_ids[]. The currently published provider directory and verified-email helper contract uses type: "provider_id".

Mode Behavior
disabled ChartHero does not require or use provider/user links for the configured flow. Authenticated calls may still include ChartHero actor context.
optional ChartHero uses valid links when present and follows the configured fallback when absent.
required Affected user-scoped requests require an active, non-conflicting provider/user link.

When linking is required, ChartHero resolves the authenticated ChartHero user to a mapped external actor before affected partner calls. If no provider identifier binding is enabled for the adapter, activation fails. If a runtime flow needs one canonical provider actor source, exactly one enabled provider source/type tuple must be configured; zero or multiple tuples fail closed as configuration errors. If no valid link exists at runtime and no approved auto-link path can repair it, ChartHero fails closed before calling the partner endpoint.

Choose the mode based on the launch and authorization model:

Choose When
disabled Your installation does not need ChartHero user-to-provider mapping and your adapter can authorize launch context from launch_state, ChartHero actor context, or another approved fallback.
optional A mapped provider improves the workflow, but your installation has an approved fallback when no link exists.
required Your system requires a known provider/user actor before ChartHero can request user-scoped context.

For optional mode, document the fallback during onboarding. Common fallbacks include allowing patient context without mapped provider identifiers for a narrow adapter workflow or limiting setup defaults until a provider link exists.

Choose a linking path

Use the least restrictive mode that still matches the partner authorization model.

Question If yes If no
Can your adapter authorize launch context without knowing the ChartHero user's upstream provider identity? disabled may be enough for your installation. ChartHero can still send the authenticated ChartHero actor, but actor.external_ids[] is empty when no provider link exists. Continue to the next question
Is provider identity useful but not required for patient context? Use optional and document the fallback Continue to the next question
Must your system know the upstream provider before ChartHero can request user-scoped context? Use required; ChartHero fails closed before partner calls when no valid link exists, unless verified-email auto-link is enabled and can repair the missing link Revisit the launch authorization model with ChartHero
Will provider links be reviewed from staged rows? Enable provider_directory and implement POST /v1/providers/search Do not build provider directory yet
Is verified-email lookup or auto-link repair explicitly approved? Enable user_lookup_by_email and implement POST /v1/users/resolve-by-email; if repair is approved, also enable provider_linking.auto_link_by_verified_email Keep verified-email lookup disabled

Endpoint labels:

Endpoint Label Build when
POST /v1/providers/search Conditional Provider rows are staged for reviewed mapping
POST /v1/users/resolve-by-email Optional approved flow ChartHero may look up verified emails and, when auto-link is approved, repair missing links

Launch actor evidence

Encrypted launch links may include top-level actor to state which ChartHero user is expected to open the link. This actor is validation evidence, not the final provider link itself.

JSON
{
  "actor": {
    "actor_id": "11111111-1111-4111-8111-111111111111",
    "email": "clinician@example.com",
    "external_ids": [
      {
        "source": "provider_acme_care_prod",
        "type": "provider_id",
        "value": "prov-456"
      }
    ]
  }
}

Use actor_id when your system stores the ChartHero public user id. Use email when your system only knows the verified ChartHero user email. Use external_ids[] when provider linking is enabled and your system has durable provider/user identifiers. When provider linking is optional or required and more than one field is present, all provided criteria must match the authenticated ChartHero user. Email matching is case-insensitive after normalization and requires a matching verified ChartHero identity. Direct fields such as actor_id and email do not override conflicting external_ids[] when provider linking is enabled.

When provider linking is disabled, omit actor.external_ids[]; ChartHero does not use provider identifiers for disabled provider-linking installations. If a schema-valid encrypted launch includes actor external IDs anyway, ChartHero ignores them for provider linkage instead of rejecting the launch. You may still use actor_id or verified email as direct actor validation criteria, and those direct criteria must match the authenticated ChartHero user when present. After validation, ChartHero may still send the enriched callback actor with external_ids: [] so your adapter can authorize or configure the request from ChartHero actor context.

When provider linking is required, top-level actor must include at least one of actor_id, email, or external_ids[]. If direct actor evidence matches but the provider link is missing, ChartHero may use verified-email lookup to repair the link only when user_lookup_by_email and provider_linking.auto_link_by_verified_email are approved for the installation.

Provider directory

Provider directory is the standard way to stage provider rows for reviewed mapping.

Text
POST {base_url}/v1/providers/search

Request:

JSON
{
  "query": {
    "active_only": true,
    "updated_since": null
  },
  "pagination": {
    "limit": 100,
    "offset": 0
  }
}

Response:

JSON
{
  "providers": [
    {
      "external_ids": [
        {
          "source": "provider_acme_care_prod",
          "type": "provider_id",
          "value": "prov-456"
        }
      ],
      "email": "clinician@example.com",
      "display_name": "Dr. Chris Smith",
      "first_name": "Chris",
      "last_name": "Smith",
      "active": true
    }
  ],
  "pagination": {
    "limit": 100,
    "offset": 0,
    "next_offset": 100,
    "has_more": true
  }
}

Each provider row must include external_ids[] and active: true. Provider identifiers use source, type, and value. source is the enabled provider identifier source for the adapter installation, and the durable provider identifier type is provider_id in the currently published provider directory contract. Do not return different values for the same source/type tuple on one provider. email, display_name, first_name, and last_name are display and mapping aids. They do not replace stable external IDs. NPI is not a durable provider external ID in version 1.0; if an adapter returns NPI, ChartHero treats it only as display or evidence metadata outside external_ids[].

Pagination rules:

  1. pagination.limit must be 100.
  2. pagination.offset must match the requested offset.
  3. When pagination.has_more is true, include pagination.next_offset and make it greater than the requested offset.
  4. When pagination.has_more is false, omit pagination.next_offset or return it as null.
  5. ChartHero stops provider directory sync after 500 pages with provider_directory_page_limit_exceeded.
  6. ChartHero stops provider directory sync after more than 50,000 providers with provider_directory_provider_limit_exceeded.

Verified-email lookup

Verified-email lookup is optional and disabled by default.

Text
POST {base_url}/v1/users/resolve-by-email

Request:

JSON
{
  "email": "clinician@example.com",
  "purpose": "launch_user_mapping"
}

Response:

JSON
{
  "external_user": {
    "external_ids": [
      {
        "source": "provider_acme_care_prod",
        "type": "provider_id",
        "value": "prov-456"
      }
    ],
    "active": true,
    "email": "clinician@example.com",
    "display_name": "Dr. Chris Smith"
  }
}

This helper can create a provider link only from returned stable external IDs. Returned identifiers use the enabled provider identifier source plus type: "provider_id" in the currently published helper contract, and each source/type tuple may appear at most once for the external user. The email itself is lookup input and display evidence, not the durable identity. Treat the requested email case-insensitively and return exactly one active external user, 404 external_user_not_found, or 409 email_ambiguous. A lookup response that only has NPI evidence cannot auto-link a ChartHero user in version 1.0.

Return 404 external_user_not_found when the verified email has no match. Return 409 email_ambiguous when it resolves to more than one external user.

Next steps

ChartHeroAI

Developer documentation for ChartHero APIs, adapters, and integrations.

HIPAA-aligned safeguards

BAA available

ChartHero AI LLC