Metriport Medical Facilities API

Manage the facilities (care locations) under your organization where patients receive care, including create, get, list, update, and delete operations.

OpenAPI Specification

metriport-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Metriport API
  description: >-
    Metriport is an open-source, universal API for healthcare data. The Medical
    API exchanges patient medical records across the CommonWell and Carequality
    networks and returns consolidated FHIR R4 data; the Devices API hydrates
    activity, biometrics, nutrition, and sleep data from connected wearables and
    mHealth apps. This specification documents the hosted Metriport cloud surface
    at https://api.metriport.com. The same code may be self-hosted from the
    open-source repository.
  termsOfService: https://www.metriport.com/terms
  contact:
    name: Metriport Support
    email: contact@metriport.com
    url: https://docs.metriport.com
  version: '1.0'
servers:
  - url: https://api.metriport.com
    description: Metriport hosted production API
  - url: https://api.sandbox.metriport.com
    description: Metriport sandbox API
security:
  - ApiKeyAuth: []
tags:
  - name: Patient
    description: Medical API patient management.
  - name: Facility
    description: Medical API facility management.
  - name: Document
    description: Medical API clinical document query and retrieval.
  - name: Consolidated
    description: Medical API consolidated FHIR data.
  - name: User
    description: Devices API user and connect management.
  - name: Devices Data
    description: Devices API normalized health data.
  - name: Settings
    description: Account settings and webhooks.
paths:
  /medical/v1/patient:
    post:
      operationId: createPatient
      tags:
        - Patient
      summary: Create Patient
      description: >-
        Creates a Patient in Metriport for the specified Facility where the
        patient is receiving care.
      parameters:
        - name: facilityId
          in: query
          required: true
          description: The ID of the Facility where the patient is receiving care.
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BasePatient'
      responses:
        '200':
          description: The created Patient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Patient'
    get:
      operationId: listPatients
      tags:
        - Patient
      summary: List Patients
      description: Lists all Patients receiving care at the specified Facility.
      parameters:
        - name: facilityId
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: A list of Patients.
          content:
            application/json:
              schema:
                type: object
                properties:
                  patients:
                    type: array
                    items:
                      $ref: '#/components/schemas/Patient'
  /medical/v1/patient/{id}:
    get:
      operationId: getPatient
      tags:
        - Patient
      summary: Get Patient
      description: Gets a Patient by their Metriport ID.
      parameters:
        - $ref: '#/components/parameters/PatientId'
      responses:
        '200':
          description: The requested Patient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Patient'
    put:
      operationId: updatePatient
      tags:
        - Patient
      summary: Update Patient
      description: Updates the specified Patient's demographics.
      parameters:
        - $ref: '#/components/parameters/PatientId'
        - name: facilityId
          in: query
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BasePatient'
      responses:
        '200':
          description: The updated Patient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Patient'
    delete:
      operationId: deletePatient
      tags:
        - Patient
      summary: Delete Patient
      description: Removes the specified Patient.
      parameters:
        - $ref: '#/components/parameters/PatientId'
        - name: facilityId
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Patient deleted.
  /medical/v1/patient/match:
    post:
      operationId: matchPatient
      tags:
        - Patient
      summary: Match Patient
      description: >-
        Searches for an existing Patient that matches the provided demographics
        without creating a new one.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BasePatient'
      responses:
        '200':
          description: The matched Patient, if found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Patient'
  /medical/v1/facility:
    post:
      operationId: createFacility
      tags:
        - Facility
      summary: Create Facility
      description: Creates a Facility under your Organization.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BaseFacility'
      responses:
        '200':
          description: The created Facility.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Facility'
    get:
      operationId: listFacilities
      tags:
        - Facility
      summary: List Facilities
      description: Lists all Facilities under your Organization.
      responses:
        '200':
          description: A list of Facilities.
          content:
            application/json:
              schema:
                type: object
                properties:
                  facilities:
                    type: array
                    items:
                      $ref: '#/components/schemas/Facility'
  /medical/v1/facility/{id}:
    get:
      operationId: getFacility
      tags:
        - Facility
      summary: Get Facility
      parameters:
        - $ref: '#/components/parameters/FacilityId'
      responses:
        '200':
          description: The requested Facility.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Facility'
    put:
      operationId: updateFacility
      tags:
        - Facility
      summary: Update Facility
      parameters:
        - $ref: '#/components/parameters/FacilityId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BaseFacility'
      responses:
        '200':
          description: The updated Facility.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Facility'
    delete:
      operationId: deleteFacility
      tags:
        - Facility
      summary: Delete Facility
      parameters:
        - $ref: '#/components/parameters/FacilityId'
      responses:
        '200':
          description: Facility deleted.
  /medical/v1/document/query:
    post:
      operationId: startDocumentQuery
      tags:
        - Document
      summary: Start Document Query
      description: >-
        Triggers a network query across the HIE networks to discover and
        download the available clinical documents for a Patient. Results are
        delivered asynchronously via webhook.
      parameters:
        - name: patientId
          in: query
          required: true
          schema:
            type: string
        - name: facilityId
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: The document query progress object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentQuery'
    get:
      operationId: getDocumentQueryStatus
      tags:
        - Document
      summary: Get Document Query Status
      parameters:
        - name: patientId
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: The current document query progress.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentQuery'
  /medical/v1/document:
    get:
      operationId: listDocuments
      tags:
        - Document
      summary: List Documents
      description: >-
        Lists the available clinical documents (FHIR DocumentReferences) for a
        Patient that have been retrieved from the networks.
      parameters:
        - name: patientId
          in: query
          required: true
          schema:
            type: string
        - name: dateFrom
          in: query
          required: false
          schema:
            type: string
            format: date
        - name: dateTo
          in: query
          required: false
          schema:
            type: string
            format: date
      responses:
        '200':
          description: A list of DocumentReferences.
          content:
            application/json:
              schema:
                type: object
                properties:
                  documents:
                    type: array
                    items:
                      $ref: '#/components/schemas/DocumentReference'
  /medical/v1/document/download-url:
    get:
      operationId: getDocumentUrl
      tags:
        - Document
      summary: Get Document URL
      description: >-
        Returns a signed URL to download a specific document referenced by its
        file name.
      parameters:
        - name: fileName
          in: query
          required: true
          schema:
            type: string
        - name: conversionType
          in: query
          required: false
          schema:
            type: string
            enum:
              - html
              - pdf
      responses:
        '200':
          description: A signed download URL.
          content:
            application/json:
              schema:
                type: object
                properties:
                  url:
                    type: string
                    format: uri
  /medical/v1/patient/{id}/consolidated/query:
    post:
      operationId: startConsolidatedQuery
      tags:
        - Consolidated
      summary: Start Consolidated Data Query
      description: >-
        Triggers a query that assembles the Patient's consolidated FHIR data
        bundle. Results are delivered asynchronously via webhook.
      parameters:
        - $ref: '#/components/parameters/PatientId'
        - name: resources
          in: query
          required: false
          description: Comma-separated list of FHIR resource types to include.
          schema:
            type: string
        - name: dateFrom
          in: query
          required: false
          schema:
            type: string
            format: date
        - name: dateTo
          in: query
          required: false
          schema:
            type: string
            format: date
        - name: conversionType
          in: query
          required: false
          schema:
            type: string
            enum:
              - json
              - pdf
              - html
      responses:
        '200':
          description: The consolidated query progress object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConsolidatedQuery'
    get:
      operationId: getConsolidatedQueryStatus
      tags:
        - Consolidated
      summary: Get Consolidated Data Query Status
      parameters:
        - $ref: '#/components/parameters/PatientId'
      responses:
        '200':
          description: The list of consolidated query progress objects.
          content:
            application/json:
              schema:
                type: object
                properties:
                  queries:
                    type: array
                    items:
                      $ref: '#/components/schemas/ConsolidatedQuery'
  /medical/v1/patient/{id}/consolidated/count:
    get:
      operationId: countConsolidatedData
      tags:
        - Consolidated
      summary: Count Patient Data
      description: >-
        Returns the count of a Patient's consolidated FHIR resources, optionally
        filtered by resource type and date.
      parameters:
        - $ref: '#/components/parameters/PatientId'
        - name: resources
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: The resource counts.
          content:
            application/json:
              schema:
                type: object
                properties:
                  total:
                    type: integer
                  resources:
                    type: object
                    additionalProperties:
                      type: integer
  /user:
    post:
      operationId: createDevicesUser
      tags:
        - User
      summary: Create User
      description: >-
        Creates a Metriport user that connected wearable and mHealth data will
        be associated with.
      parameters:
        - name: appUserId
          in: query
          required: true
          description: An ID that uniquely identifies the user in your application.
          schema:
            type: string
      responses:
        '200':
          description: The created Metriport user.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevicesUser'
  /user/connect/token:
    get:
      operationId: getConnectToken
      tags:
        - User
      summary: Get Connect Token
      description: >-
        Generates a session token for the Metriport Connect Widget so an end
        user can link their wearables and mHealth apps.
      parameters:
        - name: userId
          in: query
          required: true
          description: The Metriport user ID.
          schema:
            type: string
      responses:
        '200':
          description: A connect session token.
          content:
            application/json:
              schema:
                type: object
                properties:
                  token:
                    type: string
  /user/revoke:
    delete:
      operationId: revokeUserAccess
      tags:
        - User
      summary: Revoke User Access
      description: Revokes a connected provider's access for a Metriport user.
      parameters:
        - name: userId
          in: query
          required: true
          schema:
            type: string
        - name: provider
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Access revoked.
  /activity:
    get:
      operationId: getActivity
      tags:
        - Devices Data
      summary: Get Activity Data
      description: Retrieves normalized activity data for a user on a given date.
      parameters:
        - $ref: '#/components/parameters/DevicesUserId'
        - $ref: '#/components/parameters/DevicesDate'
      responses:
        '200':
          description: An array of normalized activity data per provider.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DevicesData'
  /biometrics:
    get:
      operationId: getBiometrics
      tags:
        - Devices Data
      summary: Get Biometrics Data
      description: >-
        Retrieves normalized biometrics data (heart rate, HRV, respiration,
        blood pressure, glucose, temperature) for a user on a given date.
      parameters:
        - $ref: '#/components/parameters/DevicesUserId'
        - $ref: '#/components/parameters/DevicesDate'
      responses:
        '200':
          description: An array of normalized biometrics data per provider.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DevicesData'
  /body:
    get:
      operationId: getBody
      tags:
        - Devices Data
      summary: Get Body Data
      description: Retrieves normalized body data (weight, height, body fat) for a user.
      parameters:
        - $ref: '#/components/parameters/DevicesUserId'
        - $ref: '#/components/parameters/DevicesDate'
      responses:
        '200':
          description: An array of normalized body data per provider.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DevicesData'
  /nutrition:
    get:
      operationId: getNutrition
      tags:
        - Devices Data
      summary: Get Nutrition Data
      description: Retrieves normalized nutrition data for a user on a given date.
      parameters:
        - $ref: '#/components/parameters/DevicesUserId'
        - $ref: '#/components/parameters/DevicesDate'
      responses:
        '200':
          description: An array of normalized nutrition data per provider.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DevicesData'
  /sleep:
    get:
      operationId: getSleep
      tags:
        - Devices Data
      summary: Get Sleep Data
      description: Retrieves normalized sleep data for a user on a given date.
      parameters:
        - $ref: '#/components/parameters/DevicesUserId'
        - $ref: '#/components/parameters/DevicesDate'
      responses:
        '200':
          description: An array of normalized sleep data per provider.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DevicesData'
  /settings:
    get:
      operationId: getSettings
      tags:
        - Settings
      summary: Get Settings
      description: Returns the account settings, including the configured webhook URL.
      responses:
        '200':
          description: The account settings.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Settings'
    post:
      operationId: updateSettings
      tags:
        - Settings
      summary: Update Settings
      description: Updates the account webhook URL.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                webhookUrl:
                  type: string
                  format: uri
      responses:
        '200':
          description: The updated settings.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Settings'
  /settings/webhook:
    get:
      operationId: getWebhookStatus
      tags:
        - Settings
      summary: Get Webhook Status
      description: Returns the status of webhook request delivery for the account.
      responses:
        '200':
          description: The webhook status.
          content:
            application/json:
              schema:
                type: object
                properties:
                  webhookEnabled:
                    type: boolean
                  webhookStatusDetail:
                    type: string
  /settings/webhook/retry:
    post:
      operationId: retryWebhookRequests
      tags:
        - Settings
      summary: Retry Webhook Requests
      description: Retries any failed webhook requests for the account.
      responses:
        '200':
          description: Retry triggered.
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
  parameters:
    PatientId:
      name: id
      in: path
      required: true
      description: The Metriport Patient ID.
      schema:
        type: string
    FacilityId:
      name: id
      in: path
      required: true
      description: The Metriport Facility ID.
      schema:
        type: string
    DevicesUserId:
      name: userId
      in: query
      required: true
      description: The Metriport user ID.
      schema:
        type: string
    DevicesDate:
      name: date
      in: query
      required: true
      description: The day to fetch data for, in YYYY-MM-DD format.
      schema:
        type: string
        format: date
  schemas:
    BasePatient:
      type: object
      required:
        - firstName
        - lastName
        - dob
        - genderAtBirth
        - address
      properties:
        firstName:
          type: string
        lastName:
          type: string
        dob:
          type: string
          format: date
          description: Date of birth in YYYY-MM-DD format.
        genderAtBirth:
          type: string
          enum:
            - M
            - F
            - O
            - U
        externalId:
          type: string
        contact:
          type: array
          items:
            $ref: '#/components/schemas/Contact'
        address:
          type: array
          items:
            $ref: '#/components/schemas/Address'
    Patient:
      allOf:
        - type: object
          properties:
            id:
              type: string
            facilityIds:
              type: array
              items:
                type: string
        - $ref: '#/components/schemas/BasePatient'
    Contact:
      type: object
      properties:
        phone:
          type: string
        email:
          type: string
          format: email
    Address:
      type: object
      required:
        - addressLine1
        - city
        - state
        - zip
        - country
      properties:
        addressLine1:
          type: string
        addressLine2:
          type: string
        city:
          type: string
        state:
          type: string
        zip:
          type: string
        country:
          type: string
          default: USA
    BaseFacility:
      type: object
      required:
        - name
        - npi
        - address
      properties:
        name:
          type: string
        npi:
          type: string
          description: The 10-digit National Provider Identifier.
        tin:
          type: string
        active:
          type: boolean
        address:
          $ref: '#/components/schemas/Address'
    Facility:
      allOf:
        - type: object
          properties:
            id:
              type: string
            oid:
              type: string
        - $ref: '#/components/schemas/BaseFacility'
    DocumentQuery:
      type: object
      properties:
        download:
          $ref: '#/components/schemas/Progress'
        convert:
          $ref: '#/components/schemas/Progress'
    Progress:
      type: object
      properties:
        status:
          type: string
          enum:
            - processing
            - completed
            - failed
        total:
          type: integer
        successful:
          type: integer
        errors:
          type: integer
    DocumentReference:
      type: object
      description: A FHIR R4 DocumentReference describing a retrieved clinical document.
      properties:
        id:
          type: string
        fileName:
          type: string
        description:
          type: string
        status:
          type: string
        contentType:
          type: string
        size:
          type: integer
        indexed:
          type: string
          format: date-time
    ConsolidatedQuery:
      type: object
      properties:
        requestId:
          type: string
        status:
          type: string
          enum:
            - processing
            - completed
            - failed
        conversionType:
          type: string
          enum:
            - json
            - pdf
            - html
        startedAt:
          type: string
          format: date-time
    DevicesUser:
      type: object
      properties:
        userId:
          type: string
        appUserId:
          type: string
        connectedProviders:
          type: array
          items:
            type: string
    DevicesData:
      type: object
      description: >-
        Normalized device data returned per connected provider, containing a
        metadata block describing the source plus the normalized samples.
      properties:
        metadata:
          type: object
          properties:
            date:
              type: string
              format: date
            source:
              type: string
              description: The provider the data was hydrated from (e.g. fitbit, oura, garmin).
        biometrics:
          type: object
        activity:
          type: object
        body:
          type: object
        nutrition:
          type: object
        sleep:
          type: object
    Settings:
      type: object
      properties:
        id:
          type: string
        webhookUrl:
          type: string
          format: uri
        webhookKey:
          type: string
        webhookEnabled:
          type: boolean