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

# Intakes and prescriber review

> How a health intake reaches a prescriber, and the two ways to complete it.

# Intakes and prescriber review

A product that needs a prescription (503A) can't be fulfilled until a prescriber has reviewed the
patient's health **intake**. This page covers how an intake gets completed and what happens next.

## The flow

<Steps>
  <Step title="You place the order">
    `POST /orders` with a prescription product. If the order needs an intake, the response includes
    an `intake` object (`url` and `token`) — the patient's hosted intake link — and the order's
    `script_status` is `pending`.
  </Step>

  <Step title="The intake is completed">
    Either the **patient** completes it on the hosted link, or **your app** sends the answers with
    `POST /intakes` (below). Patients with no VitaRelay login are also emailed the link, on your own
    domain — see [Emails your patients receive](/getting-started/patient-emails).
  </Step>

  <Step title="The order moves to prescriber review">
    The order is flagged ready for review, the prescription **request** is created in the
    Internal Doctor Network's queue, the `intake.submitted` webhook fires, and the patient gets a
    "we received your intake" email.
  </Step>

  <Step title="A prescriber signs">
    When the prescriber signs the eScript the `intake.reviewed` webhook fires and the order can be
    dispatched to the pharmacy.
  </Step>
</Steps>

## Completing the intake from your app

```json theme={null}
POST /intakes
{
  "external_patient_id": "your-patient-id",
  "external_intake_id": "your-intake-id",
  "category": "async",
  "responses": { "...": "the answers" }
}
```

* **`category`** must be `async` (everything except hormone therapy) or `hormone`. Any other value
  returns `422 validation_failed` before anything is created.
* **`responses`** must meet the minimum completeness rules; an incomplete set returns `422` and
  creates nothing.
* Identify the patient with `patient_id` **or** your own `external_patient_id`.
* **If the patient has an order waiting on an intake**, these answers **complete that order's
  intake**. The response `id` is that intake, and it includes the `order_id`. If there's no waiting
  order, a standalone intake is created.
* Send an `external_intake_id` so the call is safe to retry — see
  [Idempotency and retries](/getting-started/rest-api#idempotency-and-retries).

## Checking progress

* **`GET /patients/{patientId}/intake/status`** — a PHI-free status probe (needs `intakes:read`).
* **Webhooks** — `intake.submitted` when it's in, `intake.reviewed` when a prescriber signs.
* **Re-send the patient's link** — `POST /patients/{patientId}/intake/send-link`.

## If an order seems stuck

An order that shows `script_status: pending` with an intake still in `draft` is waiting on the
patient: nothing is wrong, and nothing has reached a prescriber yet. Send the patient their link
again, or complete the intake with `POST /intakes`. Once the intake is submitted the request appears
for the prescriber and, on your dashboard, under pending prescription requests.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.