# ClinikEHR API > Reference and guides for the ClinikEHR API — read a clinic's own inventory from your own systems. - [ClinikEHR API](https://docs.clinikehr.com/index.md): Read a clinic's own inventory, or a network of connected clinics, over plain HTTPS with JSON. - [Quickstart](https://docs.clinikehr.com/quickstart.md): Get a key, make your first request, and read back a clinic's inventory in a few minutes. - [SDKs and Postman](https://docs.clinikehr.com/sdks-and-postman.md): Client libraries and a ready-made request collection for the ClinikEHR API. - [Authentication](https://docs.clinikehr.com/authentication.md): How a ClinikEHR API key is formatted, how to send it, and what each authentication failure means. - [Permissions](https://docs.clinikehr.com/permissions.md): The scopes a key can be given today, what each one exposes, and how a missing one fails. - [Pagination](https://docs.clinikehr.com/pagination.md): How every list endpoint pages through results, and how to read to the end reliably. - [Errors](https://docs.clinikehr.com/errors.md): The error shape every failed request returns, and the stable codes you can branch your code on. - [Rate limits](https://docs.clinikehr.com/rate-limits.md): How many requests a key can make per minute, how to read the headers that tell you where you stand, and what happens if you go over. - [Inventory](https://docs.clinikehr.com/inventory.md): Read a clinic's stock locations, catalogue items, availability and exact stock levels — the only resource available in this release. - [Conditions](https://docs.clinikehr.com/conditions.md): Read a patient's problem list, and send a diagnosis for a clinician to review. A condition you send never reaches the chart on its own. - [Allergies](https://docs.clinikehr.com/allergies.md): Read a patient's allergies and intolerances, and send one for a clinician to review. An allergy you send never reaches the chart on its own. - [Medications](https://docs.clinikehr.com/medications.md): Read the medicines a patient reports and the prescriptions written for them, and send a reported medicine for a clinician to review. Prescriptions are read-only. - [Providers: the clinic's clinicians](https://docs.clinikehr.com/providers.md): Read the directory of a clinic's clinical staff: name, role, specialty, NPI and licence. It is read-only, and it holds no contact details. - [Outside care providers](https://docs.clinikehr.com/care-providers.md): Read the outside doctors, referrers and specialists a patient names, and add or maintain the contacts your app added. - [Encounters](https://docs.clinikehr.com/encounters.md): Read a patient's visits as the clinic documents them, and open a draft visit for a clinician to complete. - [Referrals](https://docs.clinikehr.com/referrals.md): Read the referrals a clinic has received for a patient, and send one for the clinic to review. The clinic decides to accept, decline or book it, and no request can. - [Insurance: payers and coverage](https://docs.clinikehr.com/insurance.md): List the payers a clinic has enabled, read a patient's insurance coverage, and add one. Coverage you add stays inactive until staff confirm it. - [Connections](https://docs.clinikehr.com/connections.md): How an organization's key finds the clinics it can reach, connects to a new one, and searches the pharmacy network. - [Stock bands, and what "unknown" means](https://docs.clinikehr.com/stock-bands.md): Reading availability as a band rather than an exact number, and the one place a band can be unknown. - [Verifying a webhook's signature](https://docs.clinikehr.com/verifying-webhook-signatures.md): How to prove a webhook really came from ClinikEHR, with a worked example in two languages. - [Retries and duplicates](https://docs.clinikehr.com/retries-and-idempotency.md): Safe retries on a write, and catching up on webhooks without losing or double-counting one. - [Workspace settings and your account](https://docs.clinikehr.com/workspace-settings-and-account.md): Where to change your workspace, verify your organization, and manage your own sign-in. - [Uploading your own medicine codes](https://docs.clinikehr.com/uploading-partner-codes.md): Registering your own identifier for a medicine, so availability and network search can resolve it. - [Drug requests](https://docs.clinikehr.com/drug-requests.md): Sending a request for medicines to a pharmacy, and following it through to dispensing. - [Reviewing outside submissions](https://docs.clinikehr.com/reviewing-outside-submissions.md): How an item sent in from outside reaches a patient's chart only after a person at the clinic confirms it. - [Automatic acceptance](https://docs.clinikehr.com/automatic-acceptance.md): What you see when a clinic chooses to accept your items without review: the item is already on the chart, marked as automatic and unconfirmed until a clinician reviews it. - [FHIR R4](https://docs.clinikehr.com/fhir.md): Content-negotiated FHIR R4 for patients, appointments, notes and medicines — and patient import. - [Plans and pricing](https://docs.clinikehr.com/plans-and-pricing.md): The three workspace plans, what each one includes, and how to go live. - [Usage and billing](https://docs.clinikehr.com/usage-and-billing.md): How requests and connected clinics are counted, and what happens when you go over your plan's allowance. - [The calling key's identity, environment and scopes.](https://docs.clinikehr.com/api-reference/me/the-calling-keys-identity-environment-and-scopes.md): Response is the resource DIRECTLY — no `data` wrapper (see the top-level description's "Response envelope" note). - [Clinics this key can reach, and the scopes granted to it.](https://docs.clinikehr.com/api-reference/connections/clinics-this-key-can-reach-and-the-scopes-granted-to-it.md): For a workspace TEST key this is always one entry — the workspace's own sandbox, marked sandbox: true. For a LIVE workspace key this lists every clinic with an ACTIVE, non-expired connection that also still has API access switched on — the same set the key could actually reach on the next call, neve… - [Stock locations inside the clinic (storerooms, shelves, fridges).](https://docs.clinikehr.com/api-reference/inventory/stock-locations-inside-the-clinic-storerooms-shelves-fridges.md): For a workspace TEST key this reads the workspace's seeded synthetic sandbox, never a real clinic's locations — same shape either way. - [The clinic's catalogue.](https://docs.clinikehr.com/api-reference/inventory/the-clinics-catalogue.md): For a workspace TEST key this reads the workspace's seeded synthetic sandbox catalogue, never a real clinic's — same shape either way. - [One catalogue item.](https://docs.clinikehr.com/api-reference/inventory/one-catalogue-item.md): Response is the item DIRECTLY — no `data` wrapper (see the top-level description's "Response envelope" note). - [Availability for up to 100 items, by id or by identifier.](https://docs.clinikehr.com/api-reference/inventory/availability-for-up-to-100-items-by-id-or-by-identifier.md): For a workspace TEST key this reads the workspace's seeded synthetic sandbox — same shape either way. - [Exact quantities per location and lot.](https://docs.clinikehr.com/api-reference/inventory/exact-quantities-per-location-and-lot.md): For a workspace TEST key this reads the workspace's seeded synthetic sandbox stock, never a real clinic's — same shape either way. - [Every pharmacy this key's workspace can reach through an active listing connection.](https://docs.clinikehr.com/api-reference/listing/every-pharmacy-this-keys-workspace-can-reach-through-an-active-listing-connection.md): No clinic in the path — the calling key's organization must hold an ACTIVE connection granting listing.profile:read to each returned clinic; a clinic-owned key always gets an empty page. For a workspace TEST key this reads the workspace's own seeded fictional pharmacies instead — the same shape eith… - [Search by medicine identity across every listed pharmacy this key's workspace can reach.](https://docs.clinikehr.com/api-reference/listing/search-by-medicine-identity-across-every-listed-pharmacy-this-keys-workspace-can-reach.md): A clinic-owned key always gets an empty result. For a workspace TEST key this searches the workspace's own seeded fictional items instead. Fail-closed allow-list — an unlinked or excluded item never appears, code or text search alike. Never an exact quantity; band only. Capped at 50 results. - [One listed pharmacy's items with bands (cache warm-up).](https://docs.clinikehr.com/api-reference/listing/one-listed-pharmacys-items-with-bands-cache-warm-up.md): Has a clinic in the path, so it goes through the ordinary key/clinic authorization every other per-clinic route uses. Linked, listable, non-excluded items only. - [One listed pharmacy's public listing profile.](https://docs.clinikehr.com/api-reference/listing/one-listed-pharmacys-public-listing-profile.md): Response is the profile DIRECTLY — no `data` wrapper (see the top-level description's "Response envelope" note). Has a clinic in the path, so it goes through the ordinary key/clinic authorization. For a workspace TEST key this reaches only that workspace's own sandbox pharmacy. - [Versioning](https://docs.clinikehr.com/versioning.md): What the version in the URL means, what counts as a breaking change, and how we tell you before one happens. - [API Terms of Use](https://docs.clinikehr.com/terms-of-use.md): The terms a workspace accepts to use the ClinikEHR API. Version 2026-10-03. - [Acceptable Use Policy](https://docs.clinikehr.com/acceptable-use-policy.md): What you may and may not do with the ClinikEHR API. Part of the API Terms of Use. Version 2026-10-03. - [Data Protection Addendum for Organizations](https://docs.clinikehr.com/data-protection-addendum.md): What an organization agrees to before it receives patient information through the ClinikEHR API. Version 2026-10-03. - [Changelog](https://docs.clinikehr.com/changelog/index.md): What's new in the ClinikEHR API — new resources, scopes and endpoints, newest first. ## OpenAPI Specs - [ehr-api.v1](/openapi/ehr-api.v1.yaml) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.