Certifyos Practitioner API

Endpoints for managing practitioner information and associations.

Business capability
Medical Staff & Credentialing Management BC-2890

Operations 52

GET /practitioners Find Practitioner by filter criteria with pagination #
POST /practitioners Create a new practitioner #
PUT /practitioners/group-practitioner-location-network-specialties/effective-date Update effective date of a practitioner location network specialty at group level #
PATCH /practitioners/group-practitioner-location-network-specialties/specialty Correct the specialty at the practitioner-location-network level #
PUT /practitioners/group-practitioner-location-specialties/effective-date Update effective date of a practitioner location specialty at group level #
PATCH /practitioners/group-practitioner-location-specialties/specialty Correct the specialty at the practitioner-location level #
PUT /practitioners/group-practitioner-network-participation-specialties/effective-date Update effective date of a practitioner network participation specialty at group level #
PUT /practitioners/group-practitioner-specialties/effective-date Update effective date of a practitioner specialty at group level #
PATCH /practitioners/practitioner-locations/{id}/roles/correct Correct a practitioner role key on a group-practitioner-location record #
PATCH /practitioners/practitioner-locations/{id}/roles/remove Remove a practitioner role at the location level #
PUT /practitioners/practitioner-role-assignments/{id}/terminate Terminate a practitioner role at a network location assignment #
PUT /practitioners/tenant-practitioner-specialties Update a tenant practitioner specialty #
PATCH /practitioners/tenant-practitioner-specialties/specialty Correct the specialty on a tenant practitioner specialty record #
PUT /practitioners/tenant-practitioner-specialties/terminate Terminate a tenant practitioner specialty with cascading support #
PUT /practitioners/terminate Terminate practitioner from network/location/group_locations #
PUT /practitioners/{certifyPractitionerId}/groups/{certifyGroupId}/effective-date Update effective dates for practitioner-group association #
PUT /practitioners/{id} Update a practitioner #
GET /practitioners/{id} Get a practitioner value by their ID #
PUT /practitioners/{id}/board-certifications Update or Delete board certifications for a practitioner #
GET /practitioners/{id}/core Get core practitioner record by crosswalk ID #
PUT /practitioners/{id}/dea Update or Delete DEA records for a practitioner #
PUT /practitioners/{id}/education-training Update or delete education and training records for a practitioner #
PUT /practitioners/{id}/facilities Update practitioner facility associations #
PUT /practitioners/{id}/licenses Update or Delete licenses for a practitioner #
PUT /practitioners/{id}/networks Update practitioner network associations #
GET /practitioners/{id}/networks Get all the networks that the practitioner belongs to #
POST /practitioners/{id}/networks Associate practitioner with a network #
PUT /practitioners/{id}/overview Update practitioner overview information #
GET /practitioners/{id}/relationships/all Get all the relationships of the practitioner #
GET /practitioners/{id}/relationships/groups Get all the groups that the practitioner belongs to #
GET /practitioners/{id}/relationships/locations Get all the locations that the practitioner belongs to #
GET /practitioners/{id}/relationships/networks Get all the networks that the practitioner belongs to #
PUT /practitioners/{id}/roles Update practitioner roles #
PATCH /practitioners/{id}/roles/correct Correct a practitioner role key in data-correction mode #
PATCH /practitioners/{id}/roles/remove Remove a practitioner role at the core level #
PUT /practitioners/{id}/ssn Update practitioner SSN #
PUT /practitioners/{id}/supporting-documents Update or Delete a supporting document for a practitioner #
POST /practitioners/{id}/supporting-documents Create a new supporting document for a practitioner #
GET /practitioners/{practitionerId}/groups Get groups for a practitioner #
PUT /practitioners/{practitionerId}/groups/{groupId} Associate practitioner with a group #
POST /practitioners/{practitionerId}/groups/{groupId}/locations Associate practitioner with group locations #
GET /practitioners/{practitionerId}/hospital-affiliations List hospital affiliations for a practitioner #
POST /practitioners/{practitionerId}/hospital-affiliations Create a hospital affiliation for a practitioner #
PATCH /practitioners/{practitionerId}/hospital-affiliations/{affiliationId} Partially update a hospital affiliation #
DELETE /practitioners/{practitionerId}/hospital-affiliations/{affiliationId} Delete a hospital affiliation #
PUT /practitioners/{practitionerId}/locations Update practitioner location associations #
GET /practitioners/{practitionerId}/locations Get locations for a practitioner #
PUT /practitioners/{practitionerId}/locations/{locationId}/networks/{networkId} Update practitioner details at a location for a network or all networks #
PUT /practitioners/{practitionerId}/locations/{locationId}/networks/{networkId}/npi-par-date Update NPI and Location NPI Participation Date for a practitioner at a location-network #
GET /practitioners/{practitionerId}/specialties Get specialties for a practitioner #
POST /practitioners/{practitionerId}/specialties Associate a practitioner with a specialty #
DELETE /practitioners/{practitionerId}/tenant-practitioner-specialties/{tpsId} Permanently remove a practitioner specialty (hard delete with FK cascade) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/certifyos-practitioner-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

certifyos-practitioner-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: API for Certify application
  title: Certify API Layer Practitioner API
  version: 1.0.0
servers:
- url: http://localhost:9000
  description: Local Development Server
- url: https://api-service.staging.certifyos.com
  description: Staging Server
- url: https://api-service.internal.certifyos.com
  description: Internal Server
- url: https://api-service.test.certifyos.com
  description: Test Server
- url: https://api-service.demo.certifyos.com
  description: Demo Server
- url: https://api-service.certifyos.com
  description: Production Server
tags:
- name: Practitioner
  description: Endpoints for managing practitioner information and associations.
paths:
  /practitioners:
    get:
      summary: Find Practitioner by filter criteria with pagination
      description: Returns a paginated list of Practitioner based on filter criteria. Supports offset-based (page/size) pagination. Multiple filters are combined with AND logic.
      operationId: practitionerFindMany
      tags:
      - Practitioner
      parameters:
      - description: Search by Caqh Provider Id
        name: caqhProviderId
        in: query
        schema:
          type: string
      - description: Filter by delegation status (Direct or Delegated)
        name: delegationStatus
        in: query
        schema:
          type: string
      - description: Search by External Id
        name: externalId
        in: query
        schema:
          type: string
      - description: 'Filter criteria as JSON (must be URL encoded). Multiple filters are combined with AND logic.


          **Filterable Fields:**

          - `credentialingStatus` (String): Workflow status (eq, neq, in, nin, contains)

          - `data.lineOfBusiness` (Array): Line of business values (in, nin)

          - `data.userDefinedFields.*` (Any): User-defined fields with dot notation (eq, neq, in, nin, contains)

          - `data.*` (Any): Any data field (eq, neq, in, nin, contains, gt, gte, lt, lte)


          **Operations:**

          - String: `eq`, `neq`, `in`, `nin`, `contains`

          - Array: `in`, `nin` (use `in` for arrays, not `eq`)

          - Numeric/Date: `eq`, `neq`, `gt`, `gte`, `lt`, `lte`


          **Examples:**

          ```json

          {"credentialingStatus":{"eq":"PSV_READY"}}

          {"credentialingStatus":{"in":["PSV_READY","PSV_COMPLETED"]}}

          {"data.lineOfBusiness":{"in":["MEDICARE","MEDICAID"]}}

          {"data.userDefinedFields.market":{"in":["MARKET1","MARKET2"]}}

          {"credentialingStatus":{"eq":"PSV_READY"},"data.lineOfBusiness":{"in":["MEDICARE"]}}

          ```


          **Notes:**

          - Filter must be URL encoded when sent as query parameter

          - `tenantId` from header always takes precedence (cannot be overridden)

          - Credentialing status derived from latest workflow timeline event

          - String operations are case-sensitive

          '
        name: filter
        in: query
        schema:
          type: string
      - description: Search by Practitioner First Name
        name: firstName
        in: query
        schema:
          type: string
      - description: Search by Practitioner Last Name
        name: lastName
        in: query
        schema:
          type: string
      - description: Filter by licensed states (comma-separated list of state codes)
        name: licensedStates
        in: query
        schema:
          type: string
      - description: 'Search by NPI. May contain one or more values for bulk search (copy-paste): separate with comma, newline, tab, semicolon, or space. When one or more NPI values are provided via this parameter, the response includes optional identifiersSearched, matchedCount, notFoundCount, unmatchedIdentifiers. When the query parameter is omitted (standard list request), those fields are null.'
        name: npi
        in: query
        schema:
          type: string
      - description: Page number for offset-based pagination (0-based index). Defaults to 0 if not specified.
        name: page
        in: query
        schema:
          type: integer
          format: int32
          default: '0'
      - description: Search by Practitioner Roles (comma-separated list)
        name: practitionerRoles
        in: query
        schema:
          type: string
      - description: Search by Practitioner Type (comma-separated list)
        name: practitionerType
        in: query
        schema:
          type: string
      - description: Number of items per page in offset-based pagination. Defaults to 2 if not specified.
        name: size
        in: query
        schema:
          type: integer
          format: int32
          default: '2'
      - description: Filter by states to credential (comma-separated list of state codes)
        name: statesToCredential
        in: query
        schema:
          type: string
      - description: Include PII in response; requires practitioner read:pii permission
        in: header
        name: X-PII-View
        schema:
          type: string
      - name: tenant-id
        in: header
        schema:
          type: string
      responses:
        '200':
          description: List of Practitioner
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedPractitionerGetResponse'
        '400':
          description: Bad request - Invalid pagination parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json: {}
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json: {}
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
      security:
      - jwt: []
    post:
      summary: Create a new practitioner
      description: Creates a new practitioner for the request tenant.
      operationId: practitionerCreate
      tags:
      - Practitioner
      parameters:
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        description: Practitioner data as JSON
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePractitionerRequest'
        required: true
      responses:
        '201':
          description: Practitioner successfully created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PractitionerCreateResponse'
        '400':
          description: Invalid request body (e.g., schema validation failed), or unsupported source type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json: {}
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json: {}
        '409':
          description: Conflict - Practitioner already exists for this tenant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '500':
          description: Internal server error during request processing (e.g., network timeout, etc.)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
      security:
      - jwt: []
  /practitioners/group-practitioner-location-network-specialties/effective-date:
    put:
      summary: Update effective date of a practitioner location network specialty at group level
      description: Updates the effective date of a practitioner location network specialty association at the group level
      operationId: updateGroupPractitionerLocationNetworkSpecialtyEffectiveDate
      tags:
      - Practitioner
      parameters:
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateGroupPractitionerLocationNetworkSpecialtyEffectiveDateRequest'
        required: true
      responses:
        '200':
          description: Practitioner location network specialty effective date successfully updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonNode'
        '400':
          description: Invalid request body or missing required parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '404':
          description: Group practitioner location network specialty not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '500':
          description: Internal server error during request processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
      security:
      - jwt: []
  /practitioners/group-practitioner-location-network-specialties/specialty:
    patch:
      summary: Correct the specialty at the practitioner-location-network level
      description: Resolves the FK chain from TenantGroupPractitionerLocationNetworkSpecialty through GroupPractitionerLocationSpecialty to the parent TenantPractitionerSpecialty and replaces its tenant_specialty_id. Does not trigger termination events.
      operationId: correctGroupPractitionerLocationNetworkSpecialty
      tags:
      - Practitioner
      parameters:
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CorrectLocationNetworkSpecialtyRequest'
        required: true
      responses:
        '200':
          description: Specialty corrected successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonNode'
        '400':
          description: Bad request - Invalid input
          content:
            application/json: {}
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json: {}
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json: {}
        '404':
          description: Group practitioner location network specialty not found
          content:
            application/json: {}
        '409':
          description: Conflict - Practitioner already has this specialty
          content:
            application/json: {}
        '500':
          description: Internal server error
          content:
            application/json: {}
      security:
      - jwt: []
  /practitioners/group-practitioner-location-specialties/effective-date:
    put:
      summary: Update effective date of a practitioner location specialty at group level
      description: Updates the effective date of a practitioner location specialty association at the group level
      operationId: updateGroupPractitionerLocationSpecialtyEffectiveDate
      tags:
      - Practitioner
      parameters:
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateGroupPractitionerLocationSpecialtyEffectiveDateRequest'
        required: true
      responses:
        '200':
          description: Practitioner location specialty effective date successfully updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonNode'
        '400':
          description: Invalid request body or missing required parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '404':
          description: Group practitioner location specialty not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '500':
          description: Internal server error during request processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
      security:
      - jwt: []
  /practitioners/group-practitioner-location-specialties/specialty:
    patch:
      summary: Correct the specialty at the practitioner-location level
      description: Resolves the FK chain from GroupPractitionerLocationSpecialty to the parent TenantPractitionerSpecialty and replaces its tenant_specialty_id. Does not trigger termination events.
      operationId: correctGroupPractitionerLocationSpecialty
      tags:
      - Practitioner
      parameters:
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CorrectLocationSpecialtyRequest'
        required: true
      responses:
        '200':
          description: Specialty corrected successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonNode'
        '400':
          description: Bad request - Invalid input
          content:
            application/json: {}
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json: {}
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json: {}
        '404':
          description: Group practitioner location specialty not found
          content:
            application/json: {}
        '409':
          description: Conflict - Practitioner already has this specialty
          content:
            application/json: {}
        '500':
          description: Internal server error
          content:
            application/json: {}
      security:
      - jwt: []
  /practitioners/group-practitioner-network-participation-specialties/effective-date:
    put:
      summary: Update effective date of a practitioner network participation specialty at group level
      description: Updates the effective date of a practitioner network participation specialty association at the group level
      operationId: updateGroupPractitionerNetworkParticipationSpecialtyEffectiveDate
      tags:
      - Practitioner
      parameters:
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateGroupPractitionerNetworkParticipationSpecialtyEffectiveDateRequest'
        required: true
      responses:
        '200':
          description: Practitioner network participation specialty effective date successfully updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonNode'
        '400':
          description: Invalid request body or missing required parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '404':
          description: Group practitioner network participation specialty not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '500':
          description: Internal server error during request processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
      security:
      - jwt: []
  /practitioners/group-practitioner-specialties/effective-date:
    put:
      summary: Update effective date of a practitioner specialty at group level
      description: Updates the effective date of a practitioner specialty association at the group level
      operationId: updateGroupPractitionerSpecialtyEffectiveDate
      tags:
      - Practitioner
      parameters:
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateGroupPractitionerSpecialtyEffectiveDateRequest'
        required: true
      responses:
        '200':
          description: Practitioner specialty effective date successfully updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonNode'
        '400':
          description: Invalid request body or missing required parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '404':
          description: Group practitioner specialty not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '500':
          description: Internal server error during request processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
      security:
      - jwt: []
  /practitioners/practitioner-locations/{id}/roles/correct:
    patch:
      summary: Correct a practitioner role key on a group-practitioner-location record
      description: Renames an existing role key in practitionerRolesMap on a group_practitioner_location record (e.g., PCP -> Specialist) while preserving the inner map (effectiveDate, terminationDate). Does not trigger termination events or lifecycle changes.
      operationId: correctLocationRole
      tags:
      - Practitioner
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PractitionerRoleCorrectionRequest'
        required: true
      responses:
        '200':
          description: Location role corrected successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PractitionerRolesUpdateResponse'
        '400':
          description: Bad request - Invalid role or role not found
          content:
            application/json: {}
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json: {}
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json: {}
        '404':
          description: Location not found
          content:
            application/json: {}
        '409':
          description: Conflict - New role already exists on location
          content:
            application/json: {}
        '500':
          description: Internal server error
          content:
            application/json: {}
      security:
      - jwt: []
  /practitioners/practitioner-locations/{id}/roles/remove:
    patch:
      summary: Remove a practitioner role at the location level
      description: Removes a role key from practitionerRolesMap on a group_practitioner_location record and all associated tenant_group_location_practitioner_network records for that location.
      operationId: removePractitionerLocationRole
      tags:
      - Practitioner
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RemovePractitionerRoleRequest'
        required: true
      responses:
        '200':
          description: Location role removed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PractitionerRolesUpdateResponse'
        '400':
          description: Bad request - Invalid role or role not found on location
          content:
            application/json: {}
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json: {}
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json: {}
        '404':
          description: Location not found
          content:
            application/json: {}
        '500':
          description: Internal server error
          content:
            application/json: {}
      security:
      - jwt: []
  /practitioners/practitioner-role-assignments/{id}/terminate:
    put:
      summary: Terminate a practitioner role at a network location assignment
      description: Sets the terminationDate on a single role entry inside practitionerRolesMap of a TenantGroupLocationPractitionerNetwork (TGLPN) record. Does not cascade to the parent TGLPN record status, TenantGroupPractitionerNetwork, or the practitioner's main termination. The response echoes tglpnId, role (canonical casing), and terminationDate only; terminationInformedDate and terminationReason are accepted and persisted but not returned. If the role's stored effectiveDate cannot be parsed as a valid ISO date, the termination-before-effective constraint is skipped and the request succeeds; this preserves forward progress for legacy records with malformed effectiveDate values.
      operationId: terminatePractitionerRole
      tags:
      - Practitioner
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TerminatePractitionerRoleRequest'
        required: true
      responses:
        '200':
          description: Role terminated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TerminatePractitionerRoleResponse'
        '400':
          description: Bad request - invalid role value, terminationDate before effectiveDate, or role not found in practitionerRolesMap
          content:
            application/json: {}
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json: {}
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json: {}
        '404':
          description: TGLPN record not found
          content:
            application/json: {}
        '409':
          description: Conflict - role is already terminated
          content:
            application/json: {}
        '500':
          description: Internal server error
          content:
            application/json: {}
      security:
      - jwt: []
  /practitioners/tenant-practitioner-specialties:
    put:
      summary: Update a tenant practitioner specialty
      description: Updates an existing tenant practitioner specialty record by ID
      operationId: updateTenantPractitionerSpecialty
      tags:
      - Practitioner
      parameters:
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateTenantPractitionerSpecialtyRequest'
        required: true
      responses:
        '200':
          description: Tenant practitioner specialty successfully updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonNode'
        '400':
          description: Invalid request body or missing required parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '404':
          description: Tenant practitioner specialty not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '500':
          description: Internal server error during request processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
      security:
      - jwt: []
  /practitioners/tenant-practitioner-specialties/specialty:
    patch:
      summary: Correct the specialty on a tenant practitioner specialty record
      description: Replaces the tenant_specialty_id on a TenantPractitionerSpecialty record in data-correction mode. Does not trigger termination events or lifecycle changes.
      operationId: correctTenantPractitionerSpecialty
      tags:
      - Practitioner
      parameters:
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CorrectPractitionerSpecialtyRequest'
        required: true
      responses:
        '200':
          description: Specialty corrected successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonNode'
        '400':
          description: Bad request - Invalid input
          content:
            application/json: {}
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json: {}
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json: {}
        '404':
          description: Tenant practitioner specialty not found
          content:
            application/json: {}
        '409':
          description: Conflict - Practitioner already has this specialty
          content:
            application/json: {}
        '500':
          description: Internal server error
          content:
            application/json: {}
      security:
      - jwt: []
  /practitioners/tenant-practitioner-specialties/terminate:
    put:
      summary: Terminate a tenant practitioner specialty with cascading support
      description: Terminates a tenant practitioner specialty and optionally cascades the termination to related specialties at the group, location, and network levels.
      operationId: terminateTenantPractitionerSpecialty
      tags:
      - Practitioner
      parameters:
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PractitionerSpecialtyTerminationRequest'
        required: true
      responses:
        '200':
          description: Tenant practitioner specialty terminated successfully
          content:
            application/json: {}
        '400':
          description: Bad request - Invalid input
          content:
            application/json: {}
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json: {}
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json: {}
        '404':
          description: Tenant practitioner specialty not found
          content:
            application/json: {}
        '500':
          description: Internal server error
          content:
            application/json: {}
      security:
      - jwt: []
  /practitioners/terminate:
    put:
      summary: Terminate practitioner from network/location/group_locations
      description: Accepts terminationType and updates relevant records with termination details.
      operationId: terminatePractitioner
      tags:
      - Practitioner
      parameters:
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TerminationRequest'
        required: true
      responses:
        '200':
          description: Termination updated
          content:
            application/json: {}
        '400':
          description: Bad request - Invalid input
          content:
            application/json: {}
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json: {}
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json: {}
        '404':
          description: Association not found
          content:
            application/json: {}
        '409':
          description: Conflict - Termination blocked by active credentialing or monitoring workflows
          content:
            application/json: {}
        '500':
          description: Internal server error
          content:
            application/json: {}
      security:
      - jwt: []
  /practitioners/{certifyPractitionerId}/groups/{certifyGroupId}/effective-date:
    put:
      summary: Update effective dates for practitioner-group association
      description: Updates the effective start date and/or termination date for a practitioner-group association. Optionally cascades the date change to network participation based on the cascadeToNetworkParticipation flag. If terminationDate is provided, it must be after the effectiveDate.
      operationId: updatePractitionerGroupEffectiveDate
      tags:
      - Practitioner
      parameters:
      - description: Certify group ID
        in: path
        required: true
        name: certifyGroupId
        schema:
          type: string
          pattern: \S
      - description: Certify practitioner ID
        in: path
        required: true
        name: certifyPractitionerId
        schema:
          type: string
          pattern: \S
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePractitionerGroupEffectiveDateRequest'
        required: true
      responses:
        '200':
          description: Practitioner-group effective date successfully updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonNode'
        '400':
          description: Invalid request body, missing required parameters, or validation failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '403':
          description: Forbidden - Insufficient permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '404':
          description: Practitioner-group association not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '500':
          description: Internal server error during request processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
      security:
      - jwt: []
  /practitioners/{id}:
    put:
      summary: Update a practitioner
      description: Updates an existing practitioner based on the practitioner ID.
      operationId: practitionerUpdate
      tags:


# --- truncated at 32 KB (386 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/certifyos/refs/heads/main/openapi/certifyos-practitioner-api-openapi.yml