Tuva Health · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Tuva EMPI API

8 actions 8 updates documentation extends openapi/tuva-health-empi-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Tuva Health's API. It is a proposal applied on top of the contract, not a document Tuva Health publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-patternx-apievangelist-consequencex-apievangelist-notex-apievangelist-providerx-apievangelist-sourcex-apievangelist-licensex-apievangelist-deploymentx-apievangelist-rendered-reference

Targets 6

$.info
$.paths['/api/v1/health-check'].get
$.paths['/api/v1/person-records/import'].post
$.paths['/api/v1/person-records/export'].post
$.paths['/api/v1/matches'].post
$.paths['/api/v1/users/{id}'].post

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Tuva EMPI API
  version: 1.0.0
extends: openapi/tuva-health-empi-openapi.yml
x-provenance:
  generated: '2026-08-15'
  method: generated
  source: >-
    openapi/tuva-health-empi-openapi.yml (harvested verbatim from
    https://raw.githubusercontent.com/tuva-health/tuva_empi/main/docs/resources/tuva-empi-api-schema.yaml)
    + https://tuva-health.github.io/tuva_empi/docs/configuration
  note: >-
    Non-destructive annotations only. Every value below is sourced from Tuva's own
    documentation or from an artifact in this repo; nothing about the API's
    behaviour is invented. The overlay deliberately does NOT add a securityScheme
    to the contract - the provider's spec is silent on auth and it is their call to
    declare it - it records the observed model as an x- extension and flags the gap.
actions:
  - target: $.info
    update:
      x-apievangelist-provider: tuva-health
      x-apievangelist-source: https://github.com/tuva-health/tuva_empi/blob/main/docs/resources/tuva-empi-api-schema.yaml
      x-apievangelist-license: Apache-2.0
      x-apievangelist-deployment: customer-hosted
      x-apievangelist-rendered-reference: https://tuva-health.github.io/tuva_empi/api-docs/
      description: >-
        HTTP API of Tuva EMPI, Tuva Health's open-source enterprise master patient
        index. Customer-deployed (OCI images on Kubernetes or Docker Compose);
        Tuva operates no instance of this API, so there is no vendor base URL.
  - target: $.info
    update:
      x-apievangelist-auth:
        model: oidc-jwt-on-forwarded-header
        header: X-Forwarded-Access-Token
        header_configurable: true
        identity_providers: [keycloak, aws-cognito]
        docs: https://tuva-health.github.io/tuva_empi/docs/configuration
        declared_in_spec: false
        artifact: authentication/tuva-health-authentication.yml
  - target: $.info
    update:
      x-apievangelist-gaps:
        - no components.securitySchemes and no security requirement, though the API is authenticated in every documented deployment
        - every operation declares only a 200 response - no 4xx/5xx anywhere in the contract
        - no idempotency key on any of the five write operations
        - no pagination or filtering parameters on the collection reads
        - no servers[] block (consistent with customer-hosted deployment, but leaves clients with no example host)
  - target: $.paths['/api/v1/health-check'].get
    update:
      x-apievangelist-usage: liveness-probe
  - target: $.paths['/api/v1/person-records/import'].post
    update:
      x-apievangelist-pattern: s3-staged-batch
      x-apievangelist-async: >-
        Matching runs as a separate Kubernetes job (the matching-service
        container), so results are not available on this response.
  - target: $.paths['/api/v1/person-records/export'].post
    update:
      x-apievangelist-pattern: s3-staged-batch
  - target: $.paths['/api/v1/matches'].post
    update:
      x-apievangelist-consequence: write
      x-apievangelist-note: >-
        Adjudicates identity resolution - merging or splitting a person's records.
        Not retry-safe by contract; no idempotency key is defined.
  - target: $.paths['/api/v1/users/{id}'].post
    update:
      x-apievangelist-consequence: write
      x-apievangelist-note: Changes a user's role - an access-control mutation despite the resource path.