---
title: "Add a hospital affiliation to a practitioner"
method: POST
path: "/practitioners/{practitionerId}/hospital-affiliations"
tags: ["Practitioner"]
---

# Add a hospital affiliation to a practitioner

`POST /practitioners/{practitionerId}/hospital-affiliations`

Creates a new hospital affiliation entry on the practitioner record; the server assigns a stable UUID v4 as the affiliation identifier and returns the full affiliation in the response body. Use this when a practitioner gains a new hospital affiliation that needs to be recorded; no `Location` header is returned in the 201 response, so use the `id` field in the response body to reference the created affiliation. `{practitionerId}` is the `certifyPractitionerId`, and the hospital affiliations feature must be enabled for the tenant (403 returned if not). Only `name` and `type` are required; all other fields are optional, and `endDate` must be on or after `startDate` when both are supplied.

## Path parameters

- `practitionerId` string, required

## Headers

- `tenant-id` string

## Request body

- CreateHospitalAffiliationRequest — Create payload for a practitioner-level hospital affiliation.
  - `name` string, required — Hospital name
  - `type` string, required — Type of affiliation
  - `specialty` string — Specialty practiced at the hospital
  - `state` string — State where hospital is located
  - `source` 'MANUAL' | 'ROSTER' | 'CAQH' — Source-of-truth tag for a practitioner-level hospital affiliation. Accepts MANUAL, ROSTER, CAQH (any case), or the legacy long-form CAQH label. Always serializes the canonical short label.
  - `startDate` string, date
  - `endDate` string, date
  - `status` string — Status of the affiliation

## Response `201`

The full `HospitalAffiliationResponse`, including the server-assigned `id`.

- HospitalAffiliationResponse — Practitioner-level hospital affiliation as exposed by the practitioner CRUD API.
  - `id` string, required — Stable UUID v4 identifying this affiliation. For legacy entries this may be a deterministic synthesized UUID until the next write backfills a real one.
  - `name` string — Hospital name
  - `type` string — Type of affiliation
  - `specialty` string — Specialty practiced at the hospital
  - `state` string — State where hospital is located
  - `source` 'MANUAL' | 'ROSTER' | 'CAQH' — Source-of-truth tag for a practitioner-level hospital affiliation. Accepts MANUAL, ROSTER, CAQH (any case), or the legacy long-form CAQH label. Always serializes the canonical short label.
  - `startDate` string — Start date of affiliation in YYYY-MM-DD format
  - `endDate` string — End date of affiliation in YYYY-MM-DD format
  - `status` string — Status of the affiliation

## Other responses

- `400` — Validation error
- `401` — Unauthorized
- `403` — Forbidden — caller lacks UPDATE_PRACTITIONER or feature disabled
- `404` — Practitioner not found
- `409` — Duplicate (name, type) for this practitioner — a case-insensitive match on the existing affiliations' `(name, type)` pair, returned with reason `DUPLICATE_HOSPITAL_AFFILIATION`.

---

[API](https://skmtc.net/certifyos/apis/certify-api-layer.md) · [All operations](https://skmtc.net/certifyos/apis/certify-api-layer/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/certifyos/certify-api-layer/revisions/563848e0ecc0/schema)
