Fasten Health · OpenAPI Overlay 1.0.0

API Evangelist enhancements for Fasten Connect

13 actions 13 updates update extends openapi/fasten-health-connect-openapi-original.yml
Generated by API Evangelist Written by API Evangelist tooling for Fasten Health's API. It is a proposal applied on top of the contract, not a document Fasten Health publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-notex-contains-phix-human-in-the-loopx-apievangelist-slugx-apievangelist-profilex-apievangelist-reviewedx-spec-gapsx-artifacts

Targets 12

$.info
$.servers
$.paths['/bridge/fhir/ehi-export'].post
$.paths['/bridge/fhir/ehi-export/{taskId}'].get
$.paths['/bridge/fhir/ehi-export/{taskId}/download/{fileId}'].get
$.paths['/bridge/connect'].get
$.paths['/bridge/reconnect'].get
$.paths['/bridge/vault_connection/revoke'].post
$.paths['/bridge/catalog/search'].post
$.paths['/bridge/catalog/export'].get
$.components.schemas.OrganizationConnection
$.components.schemas.ResponseWrapper

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for Fasten Connect
  version: 1.0.0
extends: openapi/fasten-health-connect-openapi-original.yml
x-generated: '2026-08-14'
x-method: generated
x-source: >-
  Derived from the harvested Fasten Connect OpenAPI 1.0.11 plus the artifacts in this repo
  (conventions/, errors/, lifecycle/, sandbox/, asyncapi/, data-model/). Captures API Evangelist
  annotations ONLY — the harvested spec at openapi/fasten-health-connect-openapi-original.yml is
  never mutated.
x-notes:
  - >-
    The upstream spec declares no operationId on any of its 12 operations. This overlay does NOT
    invent operationIds — coining ids would create identifiers no Fasten client or document uses.
    The gap is recorded instead.
  - >-
    The upstream spec declares no 4xx or 5xx response on any operation. This overlay does not add
    error responses, because their shape is not published anywhere and inventing one would put a
    fabricated contract in front of an agent.
actions:
  - target: $.info
    update:
      x-apievangelist-slug: fasten-health
      x-apievangelist-profile: https://apis.io/provider/fasten-health
      x-apievangelist-reviewed: '2026-08-14'
      x-spec-gaps:
        operation_ids: 0 of 12 operations declare an operationId
        error_responses: 0 of 12 operations declare a 4xx or 5xx response
        schema_refs: 0 inter-schema $ref links across 8 component schemas
      x-artifacts:
        conventions: conventions/fasten-health-conventions.yml
        authentication: authentication/fasten-health-authentication.yml
        errors: errors/fasten-health-problem-types.yml
        lifecycle: lifecycle/fasten-health-lifecycle.yml
        sandbox: sandbox/fasten-health-sandbox.yml
        webhooks: asyncapi/fasten-health-webhooks.yml
        data_model: data-model/fasten-health-data-model.yml
        agent_skill: skills/fasten-health-fastenhealth-skill.md
        agent_card: a2a/fasten-health-a2a.yml

  - target: $.info
    update:
      x-agent-readiness:
        agent_card: near-conformant
        agent_skill: provider-published
        llms_txt: true
        mcp_server: false
        rate_limit_signal: none published
        idempotency: natural-key on org_connection_id

  - target: $.servers
    update:
      x-modes:
        description: >-
          One server serves both live and test mode. The API key prefix determines the mode —
          private_test_ / public_test_ versus private_live_ / public_live_.
        test_key_prefixes: [public_test_, private_test_]
        live_key_prefixes: [public_live_, private_live_]

  - target: $.paths['/bridge/fhir/ehi-export'].post
    update:
      x-idempotent: true
      x-idempotency-key-field: org_connection_id
      x-idempotency-note: >-
        Documented as idempotent — a request whose org_connection_id is already registered returns
        the existing request rather than creating a duplicate export.
      x-async: true
      x-completion-events:
        - patient.ehi_export_success
        - patient.ehi_export_failed
      x-contains-phi: true
      x-test-fixtures:
        parameter: fixtures.tefca_ccda
        values: [myra-jones.xml, myra-jones-v2.xml, myra-jones-v7.xml, lennie-connell.xml, bernice-maxwell.xml]

  - target: $.paths['/bridge/fhir/ehi-export/{taskId}'].get
    update:
      x-polling-role: fallback
      x-polling-note: >-
        The provider's own Agent Skill documents webhooks as the primary completion signal and
        polling as a fallback.

  - target: $.paths['/bridge/fhir/ehi-export/{taskId}/download/{fileId}'].get
    update:
      x-contains-phi: true
      x-redirect: 302 to a signed URL in the Location header
      x-signed-url-ttl: 10 minutes
      x-payload-format: application/fhir+ndjson (JSONL)
      x-retention: Export files are deleted from Fasten storage after 24 hours.

  - target: $.paths['/bridge/connect'].get
    update:
      x-human-in-the-loop: required
      x-note: >-
        302 redirect into a patient-facing portal authentication flow. Driven by the Stitch widget;
        not agent-invocable.

  - target: $.paths['/bridge/reconnect'].get
    update:
      x-human-in-the-loop: required
      x-note: >-
        302 redirect into patient re-authentication. Driven by the Stitch widget; not
        agent-invocable.

  - target: $.paths['/bridge/vault_connection/revoke'].post
    update:
      x-destructive: true
      x-scope: test mode / TEFCA synthetic patients only
      x-note: Revokes all vault connections for a synthetic test patient so the next run starts clean.

  - target: $.paths['/bridge/catalog/search'].post
    update:
      x-pagination:
        style: search-after
        params: [searchAfter, sort]
      x-response-typing-gap: >-
        LighthouseCatalogSearchResults.hits is typed `object` with no inner structure, so results
        are untyped in the contract.

  - target: $.paths['/bridge/catalog/export'].get
    update:
      x-bulk: true
      x-note: >-
        Returns pre-signed URLs for JSON files covering every brand, portal and endpoint, for
        hydrating an offline catalog cache instead of paginating.

  - target: $.components.schemas.OrganizationConnection
    update:
      x-primary-key: org_connection_id
      x-must-persist: true
      x-tefca-note: >-
        catalog_brand_id, catalog_portal_id and catalog_endpoint_id may all be absent in TEFCA mode;
        tefca_directory_id identifies the health system instead.

  - target: $.components.schemas.ResponseWrapper
    update:
      x-envelope: true
      x-rfc9457: false
      x-note: Proprietary success/error envelope; the API does not use application/problem+json.