ModMed Providers and Referring Providers API

Providers details

OpenAPI Specification

modernizing-medicine-providers-and-referring-providers-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: EMA Proprietary Providers and Referring Providers API
  contact:
    email: ankit.srivastava@modmed.com
  version: 3.4.3_FINAL
  description: 'The EMA Proprietary FHIR API provides programmatic access to ModMed EMA clinical and practice-management data using FHIR R4-style resources under `/fhir/v2`.


    This documentation targets the **public sandbox** (`stage.ema-api.com`).


    **Authentication.** Two mechanisms are supported during the current migration: the **legacy OAuth2 `password` grant** (being sunset) and the **new OAuth2 `client_credentials`** flow (recommended for new integrations) — see the **Authentication** guide. Every API call also requires the `x-api-key` header.'
servers:
- url: https://stage.ema-api.com/ema-dev/firm/apiportal/ema
security:
- BearerAuth: []
  ApiKeyAuth: []
tags:
- name: Providers and Referring Providers
  description: Providers details
paths:
  /fhir/v2/Practitioner/{id}:
    get:
      tags:
      - Providers and Referring Providers
      summary: Retrieve Provider by ID
      parameters:
      - name: id
        in: path
        description: The resource ID
        required: true
        style: simple
        schema:
          minimum: 1
          type: string
        example: '123'
      responses:
        '200':
          description: Success
          content:
            application/fhir+json:
              schema:
                $ref: '#/components/schemas/FHIR-JSON-RESOURCE'
              example:
                resourceType: Practitioner
                id: '450861'
                meta:
                  lastUpdated: '2026-06-25T16:18:04.000+00:00'
                identifier:
                - system: http://www.hl7.org/fhir/v2/0203/index.html#v2-0203-NPI
                  value: '6666666666'
                active: true
                name:
                - family: Frankenstein
                  given:
                  - Frederick
                telecom:
                - system: email
                  value: ffrankenstein@modmed.com
                - system: phone
                  value: '6666666666'
                  use: mobile
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
  /fhir/v2/Practitioner:
    get:
      tags:
      - Providers and Referring Providers
      summary: 'search-type: Search for Practitioner instances'
      description: This is a search type
      parameters:
      - name: _count
        in: query
        description: Number of records to use as the page size for paginated search. The maximum page size for this Resource is 100
        required: false
        schema:
          type: string
      - name: _lastUpdated
        in: query
        description: This is an Optional Date in the format _lastUpdated=gtDATE, _lastUpdated=eqDATE and _lastUpdated=leDATE in the format yyyy-mm-dd
        required: false
        schema:
          type: string
          format: date
      - name: active
        in: query
        description: Whether the practitioner record is active
        required: false
        schema:
          type: string
      - name: email
        in: query
        description: A value in an email contact
        required: false
        schema:
          type: string
      - name: family
        in: query
        description: A portion of the family name
        required: false
        schema:
          type: string
      - name: given
        in: query
        description: A portion of the given name
        required: false
        schema:
          type: string
      - name: identifier
        in: query
        description: A practitioner's Identifier
        required: false
        schema:
          type: string
      - name: page
        in: query
        description: Page to be used for paginated search
        required: false
        schema:
          type: string
      - name: phone
        in: query
        description: A value in a phone contact
        required: false
        schema:
          type: string
      - name: type
        in: query
        description: type=‘ref’ (to find referring providers)
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/fhir+json:
              schema:
                $ref: '#/components/schemas/FHIR-JSON-RESOURCE'
              example:
                resourceType: Bundle
                id: b013574a-327c-4040-be3f-22280d270434
                meta:
                  lastUpdated: '2026-06-25T16:21:56.520+00:00'
                type: searchset
                total: 1
                link:
                - relation: self
                  url: https://stage.ema-api.com/ema-dev/firm/apiportal/ema/fhir/v2/Practitioner?family=Frankenstein&_count=2
                - relation: next
                  url: https://stage.ema-api.com/ema-dev/firm/apiportal/ema/fhir/v2/Practitioner?family=Frankenstein&_count=2&page=2
                entry:
                - fullUrl: https://stage.ema-api.com/ema-dev/firm/apiportal/ema/fhir/v2/Practitioner/450861
                  resource:
                    resourceType: Practitioner
                    id: '450861'
                    meta:
                      lastUpdated: '2026-06-25T16:18:04.000+00:00'
                    identifier:
                    - system: http://www.hl7.org/fhir/v2/0203/index.html#v2-0203-NPI
                      value: '6666666666'
                    active: true
                    name:
                    - family: Frankenstein
                      given:
                      - Frederick
                    telecom:
                    - system: email
                      value: ffrankenstein@modmed.com
                    - system: phone
                      value: '6666666666'
                      use: mobile
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
    post:
      tags:
      - Providers and Referring Providers
      summary: Create Referring Practitioner
      requestBody:
        required: true
        content:
          application/fhir+json:
            schema:
              $ref: '#/components/schemas/FHIR-JSON-RESOURCE'
            example:
              resourceType: Practitioner
              active: true
              name:
              - family: Lecter
                given:
                - Hannibal
              telecom:
              - system: fax
                value: '5615551212'
                use: work
              qualification:
              - code:
                  coding:
                  - system: http://nucc.org/provider-taxonomy
                    code: 1835C0206X
                    display: Cardiology
      responses:
        '200':
          description: Success
          content:
            application/fhir+json:
              schema:
                $ref: '#/components/schemas/FHIR-JSON-RESOURCE'
            application/fhir+xml:
              schema:
                $ref: '#/components/schemas/FHIR-XML-RESOURCE'
        '201':
          description: Created
          content:
            application/fhir+json:
              schema:
                $ref: '#/components/schemas/FHIR-JSON-RESOURCE'
              example:
                resourceType: Practitioner
                active: true
                name:
                - family: Lecter
                  given:
                  - Hannibal
                telecom:
                - system: fax
                  value: '5615551212'
                  use: work
                qualification:
                - code:
                    coding:
                    - system: http://nucc.org/provider-taxonomy
                      code: 1835C0206X
                      display: Cardiology
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
      x-readme:
        explorer-enabled: false
components:
  responses:
    Unauthorized:
      description: NOT AUTHORIZED - Authentication error; this token is not allowed access to the API
    TooManyRequests:
      description: TOO MANY REQUESTS - Request was rate limited (1000 calls/min default); please retry
    ServerError:
      description: SERVER ERROR - Internal Server Error
    BadRequest:
      description: BAD REQUEST - The request was bad, often due to a missing required parameter
    NotFound:
      description: NOT FOUND
    UnprocessableEntity:
      description: UNPROCESSABLE ENTITY - Request could not be processed; typically a validation error
    Forbidden:
      description: FORBIDDEN
  schemas:
    FHIR-XML-RESOURCE:
      type: object
      description: A FHIR resource
    FHIR-JSON-RESOURCE:
      type: object
      description: A FHIR resource
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'OAuth2 access token (JWT). Obtain it via the legacy `password` grant or the new `client_credentials` flow (see the **Authentication** guide), then send as `Authorization: Bearer <token>`.'
      x-default: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJhN2NiZmYwZWUxYjk0ODkwOWMxZmQzYzk3ODhlZjc1NCIsImlzcyI6Im1vZG1lZCIsInN1YiI6ImZoaXJfUWZMbG8iLCJ1cmxQcmVmaXgiOiJhcGlwb3J0YWwiLCJ0b2tlblR5cGUiOiJhY2Nlc3MiLCJ2ZW5kb3IiOiJmaGlyX1FmTGxvQGFwaXBvcnRhbCIsInBvbCI6ImNoYW5nZW1lIn0.f0VcA3R56IuAvdbPhInqUbhmEwk-tiOIeELVpTZCUZ8
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: 'Shared **sandbox** API key (public sandbox only). Send as the `x-api-key` header.


        `Zt9tXPIgz17uxEU6gkZPWa3ZAFhZOqm04oEDHC1f`'
      x-default: Zt9tXPIgz17uxEU6gkZPWa3ZAFhZOqm04oEDHC1f