---
title: "Add a specialty to a facility"
method: POST
path: "/facilities/{id}/specialties"
tags: ["Facility"]
---

# Add a specialty to a facility

`POST /facilities/{id}/specialties`

Adds a new specialty to an existing facility. Optionally cascades into facility location, group, group-location, and group-network specialty levels.

## Path parameters

- `id` string, required

## Headers

- `tenant-id` string

## Request body

- CreateFacilitySpecialtyRequest
  - `tenantSpecialtyId` string, required — ID of the tenant specialty
  - `facilitySpecialtyEffectiveDate` string — Effective date for the facility specialty (YYYY-MM-DD)
  - `facilitySpecialtyIsPrimary` boolean, required — Indicates if the specialty is primary
  - `certifyLocationId` string — Certify location ID to associate the specialty at the facility-location level
  - `facilityLocationSpecialtyEffectiveDate` string — Effective date for the facility location specialty (YYYY-MM-DD)
  - `facilityLocationSpecialtyIsPrimary` boolean — Indicates if the location specialty is primary
  - `certifyGroupId` string — Certify group ID to associate the specialty at the group-facility level
  - `certifyNetworkId` string — Certify network ID to associate the specialty at the group-facility-network level (requires certifyGroupId)
  - `groupSpecialtyEffectiveDate` string — Effective date for the group facility specialty (YYYY-MM-DD)
  - `locationSpecialtyEffectiveDate` string — Effective date for the group facility location specialty (YYYY-MM-DD). Triggers group-location specialty creation when both certifyGroupId and certifyLocationId are provided.
  - `networkSpecialtyEffectiveDate` string — Effective date for the group facility network specialty (YYYY-MM-DD)

## Response `201`

Facility specialty successfully created

- AssociateFacilitySpecialtyResponse
  - `facilitySpecialty` TenantFacilitySpecialtyResponse
    - `id` string
    - `tenantFacilityId` string
    - `tenantSpecialtyId` string
    - `tenantId` string
    - `createdAt` string, date
    - `updatedAt` string, date
    - `data` JsonNode
      - `empty` boolean
      - `valueNode` boolean
      - `containerNode` boolean
      - `missingNode` boolean
      - `array` boolean
      - `object` boolean
      - `nodeType` 'ARRAY' | 'BINARY' | 'BOOLEAN' | 'MISSING' | 'NULL' | 'NUMBER' | 'OBJECT' | 'POJO' | 'STRING'
      - `pojo` boolean
      - `number` boolean
      - `integralNumber` boolean
      - `floatingPointNumber` boolean
      - `short` boolean
      - `int` boolean
      - `long` boolean
      - `float` boolean
      - `double` boolean
      - `bigDecimal` boolean
      - `bigInteger` boolean
      - `textual` boolean
      - `boolean` boolean
      - `null` boolean
      - `binary` boolean
  - `facilityLocationSpecialty` TenantFacilityLocationSpecialtyResponse
    - `id` string
    - `tenantFacilityLocationId` string
    - `tenantId` string
    - `tenantSpecialtyId` string
    - `createdAt` string, date
    - `updatedAt` string, date
    - `data` JsonNode
      - `empty` boolean
      - `valueNode` boolean
      - `containerNode` boolean
      - `missingNode` boolean
      - `array` boolean
      - `object` boolean
      - `nodeType` 'ARRAY' | 'BINARY' | 'BOOLEAN' | 'MISSING' | 'NULL' | 'NUMBER' | 'OBJECT' | 'POJO' | 'STRING'
      - `pojo` boolean
      - `number` boolean
      - `integralNumber` boolean
      - `floatingPointNumber` boolean
      - `short` boolean
      - `int` boolean
      - `long` boolean
      - `float` boolean
      - `double` boolean
      - `bigDecimal` boolean
      - `bigInteger` boolean
      - `textual` boolean
      - `boolean` boolean
      - `null` boolean
      - `binary` boolean
  - `groupFacilitySpecialty` TenantGroupFacilitySpecialtyResponse
    - `id` string
    - `tenantGroupFacilityId` string
    - `tenantSpecialtyId` string
    - `data` JsonNode
      - `empty` boolean
      - `valueNode` boolean
      - `containerNode` boolean
      - `missingNode` boolean
      - `array` boolean
      - `object` boolean
      - `nodeType` 'ARRAY' | 'BINARY' | 'BOOLEAN' | 'MISSING' | 'NULL' | 'NUMBER' | 'OBJECT' | 'POJO' | 'STRING'
      - `pojo` boolean
      - `number` boolean
      - `integralNumber` boolean
      - `floatingPointNumber` boolean
      - `short` boolean
      - `int` boolean
      - `long` boolean
      - `float` boolean
      - `double` boolean
      - `bigDecimal` boolean
      - `bigInteger` boolean
      - `textual` boolean
      - `boolean` boolean
      - `null` boolean
      - `binary` boolean
  - `groupFacilityLocationSpecialty` TenantGroupFacilityLocationSpecialtyResponse
    - `id` string
    - `tenantGroupFacilityLocationId` string
    - `tenantGroupFacilitySpecialtyId` string
    - `data` JsonNode
      - `empty` boolean
      - `valueNode` boolean
      - `containerNode` boolean
      - `missingNode` boolean
      - `array` boolean
      - `object` boolean
      - `nodeType` 'ARRAY' | 'BINARY' | 'BOOLEAN' | 'MISSING' | 'NULL' | 'NUMBER' | 'OBJECT' | 'POJO' | 'STRING'
      - `pojo` boolean
      - `number` boolean
      - `integralNumber` boolean
      - `floatingPointNumber` boolean
      - `short` boolean
      - `int` boolean
      - `long` boolean
      - `float` boolean
      - `double` boolean
      - `bigDecimal` boolean
      - `bigInteger` boolean
      - `textual` boolean
      - `boolean` boolean
      - `null` boolean
      - `binary` boolean
  - `groupFacilityNetworkSpecialty` TenantGroupFacilityNetworkSpecialtyResponse
    - `id` string
    - `tenantGroupFacilityNetworkId` string
    - `tenantGroupFacilitySpecialtyId` string
    - `data` JsonNode
      - `empty` boolean
      - `valueNode` boolean
      - `containerNode` boolean
      - `missingNode` boolean
      - `array` boolean
      - `object` boolean
      - `nodeType` 'ARRAY' | 'BINARY' | 'BOOLEAN' | 'MISSING' | 'NULL' | 'NUMBER' | 'OBJECT' | 'POJO' | 'STRING'
      - `pojo` boolean
      - `number` boolean
      - `integralNumber` boolean
      - `floatingPointNumber` boolean
      - `short` boolean
      - `int` boolean
      - `long` boolean
      - `float` boolean
      - `double` boolean
      - `bigDecimal` boolean
      - `bigInteger` boolean
      - `textual` boolean
      - `boolean` boolean
      - `null` boolean
      - `binary` boolean
  - `notCreated` SpecialtyNotCreated[] — Specialty associations that could not be created. Empty when all requested levels succeeded.
    - `level` 'GROUP' | 'LOCATION' | 'NETWORK_GROUP' | 'NETWORK_LOCATION', required
    - `reason` 'MISSING_DEPENDENCY' | 'DOWNSTREAM_ERROR' | 'CONFLICT' | 'VALIDATION_ERROR', required
    - `message` string, required — User-facing message explaining what went wrong and how to fix it

## Other responses

- `400` — Invalid request body or missing required parameters
- `404` — Facility not found with the given ID for tenant
- `500` — Internal server error during request processing

---

[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/versions/3d27e9019c7b/schema)
