Natzar Partner API Reference - v1.0.0
    Preparing search index...

    Interface PhysicianResource

    A physician you provisioned via POST /v1/physicians.

    Every partner physician is backed by a real portal account (they can sign in to the Natzar portal if you send them a portal invite) and participates in automatic async assignment unless asyncAvailable is false.

    interface PhysicianResource {
        id: string;
        externalId: string;
        email: string;
        givenName?: string;
        familyName?: string;
        title?: string;
        suffix?: string;
        displayName?: string;
        schedulingTimezone?: string;
        presence: PhysicianPresence;
        asyncAvailable: boolean;
        specialties?: string[];
        acceptsAllSpecialties?: boolean;
        licensedStates?: string[];
        languages?: ("en" | "es" | "de" | "fr" | "it")[];
        createdAt: string;
    }
    Index
    id: string

    Our id for the physician (their portal identity id). This is the value to pass as physicianId on reply/claim/takeover/resolve calls.

    externalId: string

    Your id for the physician, as supplied at provisioning.

    email: string

    Sign-in email of the backing portal account.

    givenName?: string

    Given (first) name, if set.

    familyName?: string

    Family (last) name, if set.

    title?: string

    Honorific the physician signs with (Dr., Prof.), if set.

    suffix?: string

    Credential suffix (MD, DO), if set.

    displayName?: string

    The physician's SIGNATURE — title givenName familyName, suffix (e.g. Dr. Sarah Chen, MD), exactly the string frozen onto their replies as MessageResource.signature and shown to patients as the caller name. Absent while the profile has no name at all. Render THIS as the physician's name rather than assembling one: it applies the same honorific fallback our own surfaces use when title is unset.

    schedulingTimezone?: string

    The ONE zone this physician's calendar is drawn and booked in — every rule and exception of their /schedule is read in it. Absent means the clinic's zone. Set it with PATCH /v1/physicians/{id}/schedule {timezone} (null clears); GET /schedule reports the effective zone as timezone either way.

    Live-queue presence — see PhysicianPresence. Always present: a physician who has never touched the live queue reads {status: 'offline'}.

    asyncAvailable: boolean

    Whether the automatic async-assignment engine may assign new consults to this physician. Defaults to true at creation; toggle via POST /v1/physicians/{id}/availability. Turning it ON can immediately drain queued consults to this physician.

    specialties?: string[]

    Specialty slugs this clinician covers. Empty means they cover EVERYTHING — the permissive default that lets a tenant enable specialty routing without emptying its rota (docs/SCHEDULED-CONSULTS.md).

    acceptsAllSpecialties?: boolean

    Explicit "takes every specialty", independent of the list above.

    licensedStates?: string[]

    Jurisdictions this clinician is licensed in — the OPPOSITE default to specialties: empty means licensed NOWHERE, and under a tenant with licence enforcement on they are offered no patients at all. Manage with PUT /v1/physicians/{id}/licenses.

    languages?: ("en" | "es" | "de" | "fr" | "it")[]

    The languages this clinician consults in, as base codes (fr, never fr_CH), in the order they were declared. A RANKED PREFERENCE, never a filter: among the physicians a consult may go to, one who speaks the patient's language is offered it first, then one who speaks English, then anyone — so no value here can ever exclude a physician from a patient, and a rota cannot be emptied by it. Absent or empty means nothing recorded, which ranks LAST (never assumed English). Manage with PUT /v1/physicians/{id}/languages; the codes are ./languages' PhysicianLanguage.

    createdAt: string

    When the physician record was created.