> ## Documentation Index
> Fetch the complete documentation index at: https://build.practicehub.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Postman collection

> Import a ready-made collection and start calling the API in a minute

A Postman collection covering every endpoint is generated from the same source as the [API Reference](/api-reference), so it is always in step with the API.

## Import

<Steps>
  <Step title="Download">
    * [PracticeHub-API.postman\_collection.json](/postman/PracticeHub-API.postman_collection.json) — the collection
    * [PracticeHub-Production.postman\_environment.json](/postman/PracticeHub-Production.postman_environment.json) — an environment template (`base_url`, `api_key`)
  </Step>

  <Step title="Import into Postman">
    **File → Import** and drop both files in. Select the *PracticeHub — Production* environment in the top-right picker.
  </Step>

  <Step title="Set two variables">
    Open the environment and set `base_url` to `https://<your-clinic>.<region>.practicehub.io/v3/api` and `api_key` to a key from **Developers → API Keys** ([Authentication](/authentication)). Save.
  </Step>

  <Step title="Send Utility → Me">
    A `200` with your integration's name, scopes and the account's timezone confirms everything is wired up.
  </Step>
</Steps>

## How the collection works

* **Auth** is set once at collection level (Bearer `{{api_key}}`); every request inherits it.
* **One folder per resource**, each with List, Get, Create, Update and Delete (where the resource supports them). List requests carry every filter, `sort`, `page`/`page_size` and `cursor` parameter, disabled until you need them, with the allowed operators in the description.
* **Ids chain automatically.** `List locations` stores the first id in `{{location_id}}`; `Create patient` stores `{{patient_id}}`; `Find available slots` stores the first slot's `start`, `end` and `practitioner_id`; `Create appointment` uses all of them. Run the folders top to bottom and the getting-started flow just works.
* **Nothing is sent with unset variables.** A request that references a variable you have not populated yet is skipped with a message in the Postman Console naming the request that fills it (`Run "List modalities" first`).
* **Update and Delete only touch records the collection created**, or an id you type into the `:id` path variable yourself — never one that `List` captured. Update bodies list every writable field as a template; delete the keys you do not want to change before sending.
* **Create bodies** contain the required fields with sensible values; the request description has the full field table, and `GET /schema/{resource}` has the live version.
* `POST` requests carry a disabled `Idempotency-Key: {{$guid}}` header — enable it to make retries safe ([Writing data](/guides/writing)).

<Warning>
  Selecting the production environment points the collection at a live account. Prefer a read-only key for exploring, and use `Run collection` only against a test account — it creates (and cleans up) patients, appointments and other records.
</Warning>
