MedTrainer Public API (1.0.0)
The MedTrainer Public API allows external integrations to search and manage core directory resources such as locations, divisions, and practitioners.
This specification describes the available endpoints, request parameters, payloads, authentication requirements, and expected responses for clients integrating with the platform.
Most resource endpoints return FHIR-aligned JSON with content type
application/fhir+json. Protected endpoints accept authentication through
either the X-API-Key header or Authorization: Bearer <token>.
This guide walks you through how to generate an API Key from the platform. This key will allow you to authenticate and interact with the available APIs.
Before you begin, make sure you have:
A valid account and access to the platform
Proper permissions to generate an API Key (Super Admin / Admin)
Logged into the platform
1. Log in to the platform
Sign in to the MedTrainer platform using your credentials.
2. Open Organization settings
Once you're in:
On the left-side menu
Click on Organization
3. Expand “Organization Management” and find the “API keys manager”
Inside Organization Settings:
Expand “Organization Management” menu
Here you’ll find all options to configure the organization
Look for “API keys manager” option and click on it
4. Create a new API Key group
In the “API keys manager” page:
Click on “Create API key group”
Fill the following fields:
name
description
Confirm the action by clicking the “Create” button.
5. Activate the API Key “Default”
After generating the API key group:
On the “API Keys Manager” page, you will see the newly created API key group, along with a “Default” API key in an “Inactive” status.
To activate the “Default” API key:
Click on the status to expand the available options.
Once the list is expanded, select the “Active” status
Search locations
Returns a FHIR Bundle with location resources.
Authorizations:
query Parameters
| _count | integer >= 1 Default: 20 Number of resources to return. Must be a positive integer. |
| _page | integer >= 1 Default: 1 1-based page number. Must be a positive integer. |
| _elements | string Example: _elements=id,name Comma-separated field selector. For location, division, position, department, and practitioner category
searches, the implemented selectors are For practitioners, nested selectors are allowed, including values such
as Whitespace around values is trimmed. Unknown selectors are preserved in pagination links but ignored when each resource is built. Pagination |
Responses
Response samples
- 200
- 400
- 401
- 422
- 429
- 500
{- "resourceType": "Bundle",
- "type": "searchset",
- "total": 3,
- "link": [
- {
- "relation": "self",
- "url": "/api/v1/locations?_count=2&_page=2&_elements=id%2Cname"
}, - {
- "relation": "first",
- "url": "/api/v1/locations?_count=2&_page=1&_elements=id%2Cname"
}, - {
- "relation": "previous",
- "url": "/api/v1/locations?_count=2&_page=1&_elements=id%2Cname"
}, - {
- "relation": "last",
- "url": "/api/v1/locations?_count=2&_page=2&_elements=id%2Cname"
}
], - "entry": [
- {
- "resource": {
- "resourceType": "Location",
- "id": "LOC-003",
- "name": "Location test",
- "state": "State",
- "division": {
- "id": "DIV-003",
- "name": "East Division"
}, - "city": "City",
- "addressLine": "Address 1",
- "zipCode": "33101",
- "phoneNumber": "0987654321",
- "fax": "1234567890",
- "email": "test@example.com",
- "sendEmail": false,
- "enabledCredentialing": false
}
}
]
}Create a location
Authorizations:
Request Body schema: application/jsonrequired
| name required | string [ 1 .. 100 ] characters Required location name. Cannot be blank or whitespace-only. |
| state required | string non-empty ^\S+.*$ Required state value. Cannot be blank or whitespace-only. |
| addressLine | string Location address line. |
| city | string Location city. |
| zipCode | string Location ZIP or postal code. |
| phoneNumber | string <= 10 characters ^[0-9]+$ Location phone number. Must contain only digits up to 10 characters. |
| fax | string <= 10 characters ^[0-9]+$ Location fax number. Must contain only digits up to 10 characters. |
string <email> Location email address. | |
| sendEmail | boolean Default: false Whether to send email for this location. |
| enabledCredentialing | boolean Default: false Whether credentialing is enabled for this location. |
object Optional division reference wrapper. |
Responses
Request samples
- Payload
{- "name": "North Campus",
- "state": "State",
- "city": "City",
- "addressLine": "Address 1",
- "zipCode": "33101",
- "phoneNumber": "0987654321",
- "fax": "1234567890",
- "email": "first@test.com",
- "sendEmail": false,
- "enabledCredentialing": false,
- "division": {
- "reference": "DIV-001"
}
}Response samples
- 200
- 201
- 400
- 401
- 404
- 422
- 429
- 500
- 502
{- "resourceType": "OperationOutcome",
- "issue": [
- {
- "severity": "information",
- "code": "informational",
- "details": {
- "text": "Location created successfully.",
- "id": "LOC-001"
}
}
]
}Get a location by public ID
Resolves the public location identifier before fetching the resource.
When _elements is provided, only the requested fields are returned.
Authorizations:
path Parameters
| publicId required | string Example: LOC-001 Public location identifier. |
query Parameters
| _elements | string Example: _elements=id,name Comma-separated field selector. For location, division, position, department, and practitioner category
searches, the implemented selectors are For practitioners, nested selectors are allowed, including values such
as Whitespace around values is trimmed. Unknown selectors are preserved in pagination links but ignored when each resource is built. Pagination |
Responses
Response samples
- 200
- 401
- 404
- 429
- 500
- 502
{- "resourceType": "Location",
- "id": "LOC-001",
- "name": "North Campus",
- "addressLine": "Address 1",
- "city": "City",
- "state": "State",
- "division": {
- "id": "DIV-001",
- "name": "North Division"
}, - "zipCode": "33101",
- "phoneNumber": "0987654321",
- "fax": "1234567890",
- "email": "first@test.com",
- "sendEmail": false,
- "enabledCredentialing": true
}Update a location
Resolves the public location identifier before updating the resource.
Authorizations:
path Parameters
| publicId required | string Example: LOC-001 Public location identifier. |
Request Body schema: application/jsonrequired
| name required | string [ 1 .. 100 ] characters Required location name. Cannot be blank or whitespace-only. |
| state | string non-empty ^\S+.*$ Optional state value. If provided, it cannot be null, blank, or whitespace-only. Omit the field completely if you do not wish to update this field. |
| addressLine | string Location address line. |
| city | string Location city. |
| zipCode | string Location ZIP or postal code. |
| phoneNumber | string <= 10 characters ^[0-9]+$ Location phone number. Must contain only digits up to 10 characters. |
| fax | string <= 10 characters ^[0-9]+$ Location fax number. Must contain only digits up to 10 characters. |
string <email> Location email address. | |
| sendEmail | boolean Default: false Whether to send email for this location. |
| enabledCredentialing | boolean Default: false Whether credentialing is enabled for this location. |
object Optional division reference wrapper. |
Responses
Request samples
- Payload
{- "name": "North Campus",
- "state": "State",
- "city": "City",
- "addressLine": "Address 1",
- "zipCode": "33101",
- "phoneNumber": "0987654321",
- "fax": "1234567890",
- "email": "first@test.com",
- "sendEmail": false,
- "enabledCredentialing": false,
- "division": {
- "reference": "DIV-001"
}
}Response samples
- 200
- 401
- 404
- 422
- 429
- 500
- 502
{- "resourceType": "OperationOutcome",
- "issue": [
- {
- "severity": "information",
- "code": "informational",
- "details": {
- "text": "Location updated successfully.",
- "id": "LOC-001"
}
}
]
}Update a location with PATCH
Resolves the public location identifier before updating the resource
with the same request body and validation rules as PUT.
Authorizations:
path Parameters
| publicId required | string Example: LOC-001 Public location identifier. |
Request Body schema: application/jsonrequired
| name required | string [ 1 .. 100 ] characters Required location name. Cannot be blank or whitespace-only. |
| state | string non-empty ^\S+.*$ Optional state value. If provided, it cannot be null, blank, or whitespace-only. Omit the field completely if you do not wish to update this field. |
| addressLine | string Location address line. |
| city | string Location city. |
| zipCode | string Location ZIP or postal code. |
| phoneNumber | string <= 10 characters ^[0-9]+$ Location phone number. Must contain only digits up to 10 characters. |
| fax | string <= 10 characters ^[0-9]+$ Location fax number. Must contain only digits up to 10 characters. |
string <email> Location email address. | |
| sendEmail | boolean Default: false Whether to send email for this location. |
| enabledCredentialing | boolean Default: false Whether credentialing is enabled for this location. |
object Optional division reference wrapper. |
Responses
Request samples
- Payload
{- "name": "North Campus",
- "state": "State",
- "city": "City",
- "addressLine": "Address 1",
- "zipCode": "33101",
- "phoneNumber": "0987654321",
- "fax": "1234567890",
- "email": "first@test.com",
- "sendEmail": false,
- "enabledCredentialing": false,
- "division": {
- "reference": "DIV-001"
}
}Response samples
- 200
- 401
- 404
- 422
- 429
- 500
- 502
{- "resourceType": "OperationOutcome",
- "issue": [
- {
- "severity": "information",
- "code": "informational",
- "details": {
- "text": "Location updated successfully.",
- "id": "LOC-001"
}
}
]
}Search divisions
Returns a FHIR Bundle with division resources.
Authorizations:
query Parameters
| _count | integer >= 1 Default: 20 Number of resources to return. Must be a positive integer. |
| _page | integer >= 1 Default: 1 1-based page number. Must be a positive integer. |
| _elements | string Example: _elements=id,name Comma-separated field selector. For location, division, position, department, and practitioner category
searches, the implemented selectors are For practitioners, nested selectors are allowed, including values such
as Whitespace around values is trimmed. Unknown selectors are preserved in pagination links but ignored when each resource is built. Pagination |
Responses
Response samples
- 200
- 400
- 401
- 422
- 429
- 500
{- "resourceType": "Bundle",
- "type": "searchset",
- "total": 3,
- "link": [
- {
- "relation": "self",
- "url": "/api/v1/divisions?_count=2&_page=2"
}, - {
- "relation": "first",
- "url": "/api/v1/divisions?_count=2&_page=1"
}, - {
- "relation": "previous",
- "url": "/api/v1/divisions?_count=2&_page=1"
}, - {
- "relation": "last",
- "url": "/api/v1/divisions?_count=2&_page=2"
}
], - "entry": [
- {
- "resource": {
- "resourceType": "Division",
- "id": "DIV-003",
- "name": "East Division",
- "locations": [
- {
- "reference": "LOC-010"
}, - {
- "reference": "LOC-011"
}
]
}
}
]
}Create a division
Creates a division with a non-blank name and at least one linked location public ID.
Authorizations:
Request Body schema: application/jsonrequired
| name required | string [ 1 .. 254 ] characters Required division name. Cannot be blank or whitespace-only. |
| locations required | Array of strings non-empty [ items non-empty ] Required list of location public IDs. At least one value must be provided, and each value cannot be blank or whitespace-only. |
Responses
Request samples
- Payload
{- "name": "North Division",
- "locations": [
- "LOC-001"
]
}Response samples
- 200
- 201
- 400
- 401
- 422
- 429
- 500
{- "resourceType": "OperationOutcome",
- "issue": [
- {
- "severity": "information",
- "code": "informational",
- "details": {
- "text": "Division created successfully.",
- "id": "DIV-001"
}
}
]
}Get a division by ID
Resolves the public division identifier before fetching the resource.
Authorizations:
path Parameters
| divisionId required | string Example: DIV-001 Public division identifier. |
Responses
Response samples
- 200
- 401
- 404
- 429
- 500
- 502
{- "resourceType": "Division",
- "id": "DIV-123",
- "name": "Clinical Division",
- "locations": [
- {
- "reference": "LOC-001"
}, - {
- "reference": "LOC-002"
}
]
}Update a division
Accepts partial updates. Send at least one of name or locations.
Resolves the public division identifier before updating the resource.
Authorizations:
path Parameters
| divisionId required | string Example: DIV-001 Public division identifier. |
Request Body schema: application/jsonrequired
| name required | string [ 1 .. 254 ] characters Conditionally required division name. Send |
| locations | Array of strings[ items non-empty ] Conditionally required list of location public IDs. Send |
Responses
Request samples
- Payload
{- "name": "Updated Division"
}Response samples
- 200
- 401
- 404
- 422
- 429
- 500
- 502
{- "resourceType": "OperationOutcome",
- "issue": [
- {
- "severity": "information",
- "code": "informational",
- "details": {
- "text": "Division updated successfully.",
- "id": "DIV-001"
}
}
]
}Update a division with PATCH
Resolves the public division identifier before updating the resource
with the same payload as PUT and is routed to the same update handler.
Authorizations:
path Parameters
| divisionId required | string Example: DIV-001 Public division identifier. |
Request Body schema: application/jsonrequired
| name required | string [ 1 .. 254 ] characters Conditionally required division name. Send |
| locations | Array of strings[ items non-empty ] Conditionally required list of location public IDs. Send |
Responses
Request samples
- Payload
{- "name": "Updated Division"
}Response samples
- 200
- 401
- 404
- 422
- 429
- 500
- 502
{- "resourceType": "OperationOutcome",
- "issue": [
- {
- "severity": "information",
- "code": "informational",
- "details": {
- "text": "Division updated successfully.",
- "id": "DIV-001"
}
}
]
}Search positions
Returns a FHIR Bundle with position resources.
Authorizations:
query Parameters
| _count | integer >= 1 Default: 20 Number of resources to return. Must be a positive integer. |
| _page | integer >= 1 Default: 1 1-based page number. Must be a positive integer. |
| _elements | string Example: _elements=id,name Comma-separated field selector. For location, division, position, department, and practitioner category
searches, the implemented selectors are For practitioners, nested selectors are allowed, including values such
as Whitespace around values is trimmed. Unknown selectors are preserved in pagination links but ignored when each resource is built. Pagination |
Responses
Response samples
- 200
- 401
- 422
- 429
- 500
{- "resourceType": "Bundle",
- "type": "searchset",
- "total": 3,
- "link": [
- {
- "relation": "self",
- "url": "/api/v1/position?_count=2&_page=2&_elements=id%2Cname%2Cclinical"
}, - {
- "relation": "first",
- "url": "/api/v1/position?_count=2&_page=1&_elements=id%2Cname%2Cclinical"
}, - {
- "relation": "previous",
- "url": "/api/v1/position?_count=2&_page=1&_elements=id%2Cname%2Cclinical"
}, - {
- "relation": "last",
- "url": "/api/v1/position?_count=2&_page=2&_elements=id%2Cname%2Cclinical"
}
], - "entry": [
- {
- "resource": {
- "resourceType": "Position",
- "id": "POS-003",
- "name": "Supervisor",
- "clinical": true
}
}
]
}Get a position by public ID
Resolves the public position identifier before fetching the resource.
Authorizations:
path Parameters
| publicId required | string Example: POS-001 Public position identifier. |
Responses
Response samples
- 200
- 401
- 404
- 429
- 500
- 502
{- "resourceType": "Position",
- "id": "POS-001",
- "name": "Analyst",
- "clinical": true
}Search departments
Returns a FHIR Bundle with department resources.
Authorizations:
query Parameters
| _count | integer >= 1 Default: 20 Number of resources to return. Must be a positive integer. |
| _page | integer >= 1 Default: 1 1-based page number. Must be a positive integer. |
| _elements | string Example: _elements=id,name Comma-separated field selector. For location, division, position, department, and practitioner category
searches, the implemented selectors are For practitioners, nested selectors are allowed, including values such
as Whitespace around values is trimmed. Unknown selectors are preserved in pagination links but ignored when each resource is built. Pagination |
Responses
Response samples
- 200
- 401
- 404
- 422
- 429
- 500
- 502
{- "resourceType": "Bundle",
- "type": "searchset",
- "total": 3,
- "link": [
- {
- "relation": "self",
- "url": "/api/v1/departments?_count=2&_page=2&_elements=id%2Cname"
}, - {
- "relation": "first",
- "url": "/api/v1/departments?_count=2&_page=1&_elements=id%2Cname"
}, - {
- "relation": "previous",
- "url": "/api/v1/departments?_count=2&_page=1&_elements=id%2Cname"
}, - {
- "relation": "last",
- "url": "/api/v1/departments?_count=2&_page=2&_elements=id%2Cname"
}
], - "entry": [
- {
- "resource": {
- "resourceType": "Department",
- "id": "DEPT-003",
- "name": "Laboratory"
}
}
]
}Get a department by public ID
Resolves the public department identifier before fetching the resource.
Authorizations:
path Parameters
| publicId required | string Example: DEPT-001 Public department identifier. |
Responses
Response samples
- 200
- 401
- 404
- 429
- 500
- 502
{- "resourceType": "Department",
- "id": "DEPT-001",
- "name": "Compliance/HIPAA"
}Search practitioner categories
Returns a FHIR Bundle with practitioner category resources.
Authorizations:
query Parameters
| _count | integer >= 1 Default: 20 Number of resources to return. Must be a positive integer. |
| _page | integer >= 1 Default: 1 1-based page number. Must be a positive integer. |
| _elements | string Example: _elements=id,name Comma-separated field selector for practitioner category search. The only implemented selectors for this endpoint are Whitespace around values is trimmed. Unknown selectors are preserved in pagination links but ignored when each resource is built. |
Responses
Response samples
- 200
- 401
- 422
- 429
- 500
- 502
{- "resourceType": "Bundle",
- "type": "searchset",
- "total": 3,
- "link": [
- {
- "relation": "self",
}, - {
- "relation": "first",
}, - {
- "relation": "previous",
}, - {
- "relation": "last",
}
], - "entry": [
- {
- "resource": {
- "resourceType": "PractitionerCategory",
- "id": "PCAT-003",
- "name": "Operations"
}
}
]
}Get a practitioner category by public ID
Resolves the public practitioner category identifier before fetching the resource.
Authorizations:
path Parameters
| publicId required | string Example: PCAT-001 Public practitioner category identifier. |
Responses
Response samples
- 200
- 401
- 404
- 429
- 500
- 502
{- "resourceType": "PractitionerCategory",
- "id": "PCAT-001",
- "name": "Nursing"
}Create a practitioner
Creates a practitioner/provider profile for the authenticated company context.
A 422 response indicates either request-body validation failures,
unresolved related public IDs such as
extension.employment.positionId,
extension.employment.departmentId, or
extension.user.location, or a validation error returned by the
upstream provider-profile API.
Authorizations:
Request Body schema: application/jsonrequired
| resourceType | string^\s*Practitioner\s*$ Optional resource type discriminator. When present it must equal |
required | object (PractitionerWriteName) Practitioner name payload.
Every string field below is constrained to letters, numbers, spaces,
apostrophes, periods, and hyphens. The character allowlist regex
enforced server-side is |
| birthDate | string (MmDdYyyyDateString) ^(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01])/[0-... Date string in The value must represent a real calendar date accepted by server-side
validation, not just a string that matches the pattern. For example,
|
| gender | string [ 1 .. 100 ] characters ^[A-Za-z0-9 .'\-]+$ Only letters, numbers, spaces, apostrophes, periods, and hyphens are allowed. Maximum 100 characters. |
required | object (PractitionerWriteTelecom) Practitioner telecom payload.
|
object (PractitionerWriteHomeAddress) Optional home address payload. | |
object (PractitionerWriteMailingAddress) Optional mailing address payload. The server enforces:
| |
required | object (PractitionerWriteExtension) Practitioner extension payload. |
Responses
Request samples
- Payload
{- "resourceType": "Practitioner",
- "name": {
- "given": "John",
- "family": "Doe",
- "middle": "Allen",
- "other": {
- "given": "Jonathan",
- "middle": "Alpha",
- "family": "Public",
- "suffix": "III",
- "usageStartDate": "02/14/2001",
- "usageEndDate": "02/14/2005"
}
}, - "birthDate": "01/01/1990",
- "gender": "male",
- "telecom": {
- "email": "john.payload1@example.com",
- "primaryEmail": "john.primary@example.com",
- "personalEmail": "john.personal@example.com",
- "ccEmail1": "john.cc1@example.com",
- "ccEmail2": "john.cc2@example.com",
- "cellPhone": "3055550111",
- "homePhone": "3055550103",
- "workPhone": "3055550104",
- "fax": "3055550105"
}, - "address": {
- "line": [
- "Main Street 1",
- "Suite 10"
], - "city": "Miami",
- "state": "FL",
- "postalCode": "33101",
- "country": "United States",
- "county": "Miami-Dade"
}, - "mailingAddress": {
- "line": [
- "Billing Street 9",
- "Floor 4"
], - "city": "Orlando",
- "state": "FL",
- "postalCode": "32801",
- "country": "United States",
- "county": "Orange",
- "province": "N/A"
}, - "extension": {
- "employment": {
- "positionId": "pos770",
- "departmentId": "dep1",
- "hireDate": "06/15/2020",
- "terminationDate": "06/15/2025"
}, - "user": {
- "location": "loc4857",
- "userType": "admin",
- "password": "<set-at-request-time>",
- "status": "Active",
- "statusReason": "Contracted",
- "ssn": "123456789",
- "birthPlace": {
- "country": "United States",
- "stateOther": "Nuevo Leon",
- "city": "Monterrey"
}, - "citizenship": "United States",
- "raceEthnicity": "Hispanic or Latino",
- "languages": [
- "Spanish",
- "French",
- "German"
], - "fnin": {
- "number": "FNIN12",
- "countryIssue": "United States"
}
}, - "provider": {
- "npiNumber": "1234567890",
- "caqhId": "1234567890",
- "caqhUsername": "caqh_user",
- "caqhPassword": "<set-at-request-time>",
- "caqhLastReattestationDate": "03/01/2026",
- "caqhEmail": "caqh.provider@example.com",
- "treatsGender": "Both",
- "patientAgeMinimum": 18,
- "patientAgeMaximum": 65,
- "upin": "UPIN12"
}
}
}Response samples
- 200
- 201
- 400
- 401
- 422
- 429
- 500
{- "resourceType": "OperationOutcome",
- "issue": [
- {
- "severity": "information",
- "code": "informational",
- "details": {
- "text": "Provider created successfully.",
- "id": "EMP-PUB-002"
}
}
]
}Search practitioners
Returns a FHIR Bundle of practitioner resources. _elements supports
comma-separated selectors and may include nested paths such as
telecom.email, telecom.homePhone, address.city,
extension.user.status, extension.user.statusReason,
extension.user.userType, or extension.provider.npiNumber.
_elements values are normalized by trimming surrounding whitespace.
Unknown selectors are preserved in pagination links but ignored when
building each practitioner resource.
Authorizations:
query Parameters
| _count | integer >= 1 Default: 20 Number of resources to return. Must be a positive integer. |
| _page | integer >= 1 Default: 1 1-based page number. Must be a positive integer. |
| _elements | string Example: _elements=id,name Comma-separated field selector. For location, division, position, department, and practitioner category
searches, the implemented selectors are For practitioners, nested selectors are allowed, including values such
as Whitespace around values is trimmed. Unknown selectors are preserved in pagination links but ignored when each resource is built. Pagination |
Responses
Response samples
- 200
- 400
- 401
- 422
- 429
- 500
{- "resourceType": "Bundle",
- "type": "searchset",
- "total": 3,
- "link": [
- {
- "relation": "self",
- "url": "/api/v1/practitioner?_count=2&_page=2&_elements=name%2Ctelecom.email%2Ctelecom.homePhone"
}, - {
- "relation": "first",
- "url": "/api/v1/practitioner?_count=2&_page=1&_elements=name%2Ctelecom.email%2Ctelecom.homePhone"
}, - {
- "relation": "previous",
- "url": "/api/v1/practitioner?_count=2&_page=1&_elements=name%2Ctelecom.email%2Ctelecom.homePhone"
}, - {
- "relation": "last",
- "url": "/api/v1/practitioner?_count=2&_page=2&_elements=name%2Ctelecom.email%2Ctelecom.homePhone"
}
], - "entry": [
- {
- "resource": {
- "resourceType": "Practitioner",
- "name": {
- "given": "Katherine",
- "family": "Johnson"
}, - "telecom": {
- "email": "katherine@example.test",
- "homePhone": "3055550103"
}
}
}
]
}Get a practitioner by public ID
Returns a single practitioner resource. If _elements is omitted, the
full public practitioner resource is returned.
_elements accepts the same nested selector syntax as practitioner
search and trims surrounding whitespace before filtering.
A 404 response indicates the practitioner public ID could not be
resolved. A 422 response indicates validation failed while reading or
normalizing the upstream practitioner data.
Authorizations:
path Parameters
| publicId required | string Example: PRAC-001 Public practitioner identifier. |
query Parameters
| _elements | string Example: _elements=id,name Comma-separated field selector. For location, division, position, department, and practitioner category
searches, the implemented selectors are For practitioners, nested selectors are allowed, including values such
as Whitespace around values is trimmed. Unknown selectors are preserved in pagination links but ignored when each resource is built. Pagination |
Responses
Response samples
- 200
- 400
- 401
- 404
- 422
- 429
- 500
- 502
{- "resourceType": "Practitioner",
- "name": {
- "given": "Ada",
- "family": "Lovelace"
}, - "telecom": {
- "email": "ada@example.test",
- "homePhone": "3055550103"
}
}Update a practitioner
Updates a practitioner/provider profile identified by publicId.
The request body is a partial update: every top-level field is optional. Omitted fields retain their existing values. Any field that is present is validated with the same format/length/pattern rules as the create payload.
A 422 response indicates either request-body validation failures,
unresolved related public IDs such as
extension.employment.positionId,
extension.employment.departmentId, or
extension.user.location, or a validation error returned by the
upstream provider-profile API.
Authorizations:
path Parameters
| publicId required | string Example: PRAC-001 Public practitioner identifier. |
Request Body schema: application/jsonrequired
| resourceType | string^\s*Practitioner\s*$ Optional resource type discriminator. When present it must equal |
object (PractitionerUpdateName) Practitioner name payload for partial updates. All fields are optional — send only the fields you want to change. Every string field below is constrained to letters, numbers, spaces,
apostrophes, periods, and hyphens. The character allowlist regex
enforced server-side is | |
| birthDate | string (MmDdYyyyDateString) ^(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01])/[0-... Date string in The value must represent a real calendar date accepted by server-side
validation, not just a string that matches the pattern. For example,
|
| gender | string [ 1 .. 100 ] characters ^[A-Za-z0-9 .'\-]+$ Only letters, numbers, spaces, apostrophes, periods, and hyphens are allowed. Maximum 100 characters. |
object (PractitionerUpdateTelecom) Practitioner telecom payload for partial updates. All fields are optional — send only the fields you want to change. Any provided string must contain at least one non-whitespace character. | |
object (PractitionerWriteHomeAddress) Optional home address payload. | |
object (PractitionerWriteMailingAddress) Optional mailing address payload. The server enforces:
| |
object (PractitionerUpdateExtension) Practitioner extension payload for partial updates. All nested objects and their fields are optional — send only the pieces you want to change. The practitioner user status fields are nested under |
Responses
Request samples
- Payload
{- "resourceType": "Practitioner",
- "name": {
- "given": "John",
- "family": "Doe",
- "middle": "Allen",
- "other": {
- "given": "Jonathan",
- "middle": "Alpha",
- "family": "Public",
- "suffix": "III",
- "usageStartDate": "02/14/2001",
- "usageEndDate": "02/14/2005"
}
}, - "birthDate": "01/01/1990",
- "gender": "male",
- "telecom": {
- "email": "john.payload1@example.com",
- "primaryEmail": "john.primary@example.com",
- "personalEmail": "john.personal@example.com",
- "ccEmail1": "john.cc1@example.com",
- "ccEmail2": "john.cc2@example.com",
- "cellPhone": "3055550111",
- "homePhone": "3055550103",
- "workPhone": "3055550104",
- "fax": "3055550105"
}, - "address": {
- "line": [
- "Main Street 1",
- "Suite 10"
], - "city": "Miami",
- "state": "FL",
- "postalCode": "33101",
- "country": "United States",
- "county": "Miami-Dade"
}, - "mailingAddress": {
- "line": [
- "Billing Street 9",
- "Floor 4"
], - "city": "Orlando",
- "state": "FL",
- "postalCode": "32801",
- "country": "United States",
- "county": "Orange",
- "province": "N/A"
}, - "extension": {
- "employment": {
- "positionId": "pos770",
- "departmentId": "dep1",
- "hireDate": "06/15/2020",
- "terminationDate": "06/15/2025"
}, - "user": {
- "location": "loc4857",
- "userType": "admin",
- "password": "<set-at-request-time>",
- "status": "Active",
- "statusReason": "Contracted",
- "ssn": "123456789",
- "birthPlace": {
- "country": "United States",
- "stateOther": "Nuevo Leon",
- "city": "Monterrey"
}, - "citizenship": "United States",
- "raceEthnicity": "Hispanic or Latino",
- "languages": [
- "Spanish",
- "French",
- "German"
], - "fnin": {
- "number": "FNIN12",
- "countryIssue": "United States"
}
}, - "provider": {
- "npiNumber": "1234567890",
- "caqhId": "1234567890",
- "caqhUsername": "caqh_user",
- "caqhPassword": "<set-at-request-time>",
- "caqhLastReattestationDate": "03/01/2026",
- "caqhEmail": "caqh.provider@example.com",
- "treatsGender": "Both",
- "patientAgeMinimum": 18,
- "patientAgeMaximum": 65,
- "upin": "UPIN12"
}
}
}Response samples
- 200
- 400
- 401
- 404
- 422
- 429
- 500
{- "resourceType": "OperationOutcome",
- "issue": [
- {
- "severity": "information",
- "code": "informational",
- "details": {
- "text": "Practitioner updated successfully.",
- "id": "EMP-PUB-002"
}
}
]
}Update a practitioner with PATCH
Accepts the same payload as PUT and is routed to the same update
handler. Both verbs behave as partial updates: send only the fields
you want to change.
A 422 response indicates either request-body validation failures,
unresolved related public IDs such as
extension.employment.positionId,
extension.employment.departmentId, or
extension.user.location, or a validation error returned by the
upstream provider-profile API.
Authorizations:
path Parameters
| publicId required | string Example: PRAC-001 Public practitioner identifier. |
Request Body schema: application/jsonrequired
| resourceType | string^\s*Practitioner\s*$ Optional resource type discriminator. When present it must equal |
object (PractitionerUpdateName) Practitioner name payload for partial updates. All fields are optional — send only the fields you want to change. Every string field below is constrained to letters, numbers, spaces,
apostrophes, periods, and hyphens. The character allowlist regex
enforced server-side is | |
| birthDate | string (MmDdYyyyDateString) ^(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01])/[0-... Date string in The value must represent a real calendar date accepted by server-side
validation, not just a string that matches the pattern. For example,
|
| gender | string [ 1 .. 100 ] characters ^[A-Za-z0-9 .'\-]+$ Only letters, numbers, spaces, apostrophes, periods, and hyphens are allowed. Maximum 100 characters. |
object (PractitionerUpdateTelecom) Practitioner telecom payload for partial updates. All fields are optional — send only the fields you want to change. Any provided string must contain at least one non-whitespace character. | |
object (PractitionerWriteHomeAddress) Optional home address payload. | |
object (PractitionerWriteMailingAddress) Optional mailing address payload. The server enforces:
| |
object (PractitionerUpdateExtension) Practitioner extension payload for partial updates. All nested objects and their fields are optional — send only the pieces you want to change. The practitioner user status fields are nested under |
Responses
Request samples
- Payload
{- "resourceType": "Practitioner",
- "name": {
- "given": "John",
- "family": "Doe",
- "middle": "Allen",
- "other": {
- "given": "Jonathan",
- "middle": "Alpha",
- "family": "Public",
- "suffix": "III",
- "usageStartDate": "02/14/2001",
- "usageEndDate": "02/14/2005"
}
}, - "birthDate": "01/01/1990",
- "gender": "male",
- "telecom": {
- "email": "john.payload1@example.com",
- "primaryEmail": "john.primary@example.com",
- "personalEmail": "john.personal@example.com",
- "ccEmail1": "john.cc1@example.com",
- "ccEmail2": "john.cc2@example.com",
- "cellPhone": "3055550111",
- "homePhone": "3055550103",
- "workPhone": "3055550104",
- "fax": "3055550105"
}, - "address": {
- "line": [
- "Main Street 1",
- "Suite 10"
], - "city": "Miami",
- "state": "FL",
- "postalCode": "33101",
- "country": "United States",
- "county": "Miami-Dade"
}, - "mailingAddress": {
- "line": [
- "Billing Street 9",
- "Floor 4"
], - "city": "Orlando",
- "state": "FL",
- "postalCode": "32801",
- "country": "United States",
- "county": "Orange",
- "province": "N/A"
}, - "extension": {
- "employment": {
- "positionId": "pos770",
- "departmentId": "dep1",
- "hireDate": "06/15/2020",
- "terminationDate": "06/15/2025"
}, - "user": {
- "location": "loc4857",
- "userType": "admin",
- "password": "<set-at-request-time>",
- "status": "Active",
- "statusReason": "Contracted",
- "ssn": "123456789",
- "birthPlace": {
- "country": "United States",
- "stateOther": "Nuevo Leon",
- "city": "Monterrey"
}, - "citizenship": "United States",
- "raceEthnicity": "Hispanic or Latino",
- "languages": [
- "Spanish",
- "French",
- "German"
], - "fnin": {
- "number": "FNIN12",
- "countryIssue": "United States"
}
}, - "provider": {
- "npiNumber": "1234567890",
- "caqhId": "1234567890",
- "caqhUsername": "caqh_user",
- "caqhPassword": "<set-at-request-time>",
- "caqhLastReattestationDate": "03/01/2026",
- "caqhEmail": "caqh.provider@example.com",
- "treatsGender": "Both",
- "patientAgeMinimum": 18,
- "patientAgeMaximum": 65,
- "upin": "UPIN12"
}
}
}Response samples
- 200
- 400
- 401
- 404
- 422
- 429
- 500
{- "resourceType": "OperationOutcome",
- "issue": [
- {
- "severity": "information",
- "code": "informational",
- "details": {
- "text": "Practitioner updated successfully.",
- "id": "EMP-PUB-002"
}
}
]
}