---
title: "Add a specialty to the tenant's configuration"
method: POST
path: "/tenant-specialties"
tags: ["Tenant Specialty"]
---

# Add a specialty to the tenant's configuration

`POST /tenant-specialties`

Creates a new tenant specialty record, associating a global specialty with the tenant identified by the `tenant-id` header.

**What it does:** Persists a tenant-scoped specialty entry. A tenant specialty is distinct from a global specialty — it represents the tenant's adoption of a specialty for use in their credentialing workflows.

**When to use:** Call this after confirming the referenced global specialty exists. Do not call this if a tenant specialty for the same specialty already exists for the tenant (check with `GET /tenant-specialties` first) — this operation does not check for an existing record and is not idempotent; submitting the same payload twice creates a second, duplicate record.

**How to call it:** Supply the required `tenant-id` header. The request body must include a non-empty `specialtyId`; a missing or blank `specialtyId` returns 400 before any other validation occurs. The `data` field is additionally validated against the `TenantSpecialty` JSON Schema; schema violations also return 400. Requires the `CREATE_TENANT_SPECIALTY` permission.

**What you get back:** On success (201) the created tenant specialty object is returned, including the server-assigned `id`. No `Location` header is emitted.

## Headers

- `tenant-id` string, required

## Request body

- CreateTenantSpecialtyRequest
  - `specialtyId` string, required — Identifier of the global specialty this tenant specialty is based on. Required and must reference an existing global specialty; a missing or blank value is rejected with 400 before any other validation runs.
  - `data` TenantSpecialtySchema — Represents a specialty associated with a tenant.
    - `displayName` string, required — Display name for the specialty.
    - `description` string — Detailed description of the specialty.
    - `changeReason` string — Reason for any change to the specialty.

## Response `201`

The newly created tenant specialty, including its server-assigned `id`. No `Location` header is returned.

- object
  - `id` string
  - `tenantId` string
  - `specialtyId` string
  - `data` TenantSpecialtySchema — Represents a specialty associated with a tenant.
    - `displayName` string, required — Display name for the specialty.
    - `description` string — Detailed description of the specialty.
    - `changeReason` string — Reason for any change to the specialty.

## Other responses

- `400` — Missing `tenant-id` header, missing/blank `specialtyId`, or `data` failing TenantSpecialty JSON Schema validation.
- `401` — Unauthorized - the request is missing a valid JWT.
- `403` — Forbidden - the caller lacks the CREATE_TENANT_SPECIALTY permission for this tenant.
- `500` — Internal Server Error - an unexpected error occurred while creating the record.

---

[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)
