> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hi-doctor.ai/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Connect the Hi Doctor MCP connector at https://mcp.hi-doctor.ai/mcp. Add this URL as a remote HTTP MCP server in your client, then sign in and authorise access through OAuth. Setup: https://docs.hi-doctor.ai/mcp/connect.
>
> The REST API base is https://api.hi-doctor.ai. Hi Doctor Docs at https://docs.hi-doctor.ai/mcp searches documentation; connect to the product endpoint above for patient tools.
>
> Hi Doctor operates across the whole European Union: residents of all 27 EU member states can use the service, and every consultation is reviewed by an EU-licensed doctor. Every consultation is reviewed in full by an EU-licensed doctor, who decides on medical grounds only. No algorithm, assistant or API call approves a consultation, issues a prescription or changes a dose. The service is available in eight languages: English, Spanish, German, Dutch, Italian, French, Portuguese and Chinese.
>
> ## Rules an assistant must follow
>
> - Never invent, assume or infer a medical answer. "I don't know" is a real answer: ask the patient to pick the closest option rather than guessing for them.
> - Never give medical advice and never suggest a medication or a dose. An EU-licensed doctor decides those.
> - If a questionnaire returns `ineligible`, say so plainly. Do not retry with altered answers.
> - Before anything that costs money or cancels a plan, state exactly what will happen and get an explicit yes.
> - Cancellation takes effect at the **end of the paid period**, not immediately. Say so.
> - An early order is irreversible: it creates the renewal consultation immediately and uses up the period's one early order. Explain that and get an explicit yes.
> - Prescription and invoice links are medical documents. A `signed_redirect` link opens without signing in: give it only to the patient, never repeat it anywhere shared.
> - Send option `value`s, not the labels shown to the patient. Labels are translated, values are stable.
> - Never ask for card details. Payment happens on Stripe's hosted checkout via a link.
> - On severe or sudden symptoms (chest pain, difficulty breathing, severe allergic reaction, suicidal thoughts), stop and direct the patient to their local emergency number.

# Partner API versioning policy and changelog

> How the Hi Doctor Partner API is versioned in the /v1 path, how to tolerate additive change, and every dated change as Breaking, Added or Changed.

The Hi Doctor Partner API carries its version in the path, `/v1/partner/`, and there is no version header. Within v1 changes are additive, so a well-built integration keeps working when fields, events or codes are added. Every change is listed below by date and split into Breaking, Added and Changed, newest first.

Last reviewed: 2026-11-04

## How is the Partner API versioned?

* The version is in the path: `/v1/partner/...`. There is no version header.
* Within v1, changes are **additive**: new endpoints, new optional request fields, new response fields, new event types, new error codes and new enum values.
* A change that would break a working integration, such as removing or renaming a field or changing its meaning, ships under a new path version, with notice.
* The only exceptions are the changes listed under **Breaking** below. They were made in v1 in the first weeks of the Partner API, and each one names exactly what to update.

## How do I build for additive change?

* Ignore response fields you do not know.
* Ignore webhook event types you do not know (see [Webhooks](https://docs.hi-doctor.ai/partners/webhooks.md)).
* Treat unknown enum values, such as a new `fulfilment.route`, as "other" rather than failing.
* Branch on error `code`, never on `message` (see [Errors](https://docs.hi-doctor.ai/partners/errors.md)).

Questionnaire content changes independently of the API version. It is versioned by `schema_version` and `schema_hash`; see [Questionnaires and schema](https://docs.hi-doctor.ai/partners/questionnaires-and-schema.md#versions-and-schema_outdated).

## Changelog

**2026-11-04**

Standard Webhooks, answer values removed from information requests

### Breaking

* Webhooks follow the [Standard Webhooks](https://www.standardwebhooks.com/) specification, so any Standard Webhooks library verifies them. The old headers, all prefixed with `Hi-Doctor` and a hyphen, are replaced:

  | Before (after the `Hi-Doctor` prefix) | Now |
  | - | - |
  | `Event-Id` | `webhook-id` (still the event `id`; deduplicate on it) |
  | `t=` inside `Signature` | `webhook-timestamp` |
  | `Signature: t=<unix>,v1=<hex>[,v1=<hex>]` | `webhook-signature: v1,<base64>[ v1,<base64>]`, space-separated, newest secret first during a rotation |
  | `Event-Type` | `webhook-event-type` |
  | `Delivery-Attempt` | `webhook-delivery-attempt` |
  | `Delivery-Id` | Removed. The delivery `id` stays in the deliveries list and in replay. |

  The signed message is now `{webhook-id}.{webhook-timestamp}.{body}`, the HMAC key is the base64-decoded part of the secret after `whsec_`, and the signature is base64 rather than hex. The tolerance stays 300 seconds. Update your verifier with the code in [Verify the signature](https://docs.hi-doctor.ai/partners/webhooks.md#verify-the-signature).
* Information requests no longer return answer values. `answer_entries` and `answer_document_ids` are removed from the information-request response, in the API and in the Business portal; each request now carries `answered_question_keys`, `answer_count` and `answer_document_count`. If you read the removed fields, keep your own record of what the patient answered. See [Read the request](https://docs.hi-doctor.ai/partners/information-requests.md#read-the-request).

### Added

* Consent withdrawal is recorded with `POST /v1/partner/patients/{id}/consent-withdrawal/`.
* Published the full [Partner API reference](https://docs.hi-doctor.ai/api-reference/connectivity/check-an-api-key.md), generated from the Partner API itself: products, questionnaires, files, consultations, patients, information requests, prescriptions, webhooks and test mode.
* Questionnaires take an optional `locale` (`en`, `es` or `zh`, falling back to English); `schema_hash` is per locale and any supported locale's hash is accepted on submission. See [Questionnaires and schema](https://docs.hi-doctor.ai/partners/questionnaires-and-schema.md#labels-and-locale).
* Submissions accept an optional `patient.national_identifier`, validated per product country and never echoed. See [National identifier](https://docs.hi-doctor.ai/partners/submit-a-consultation.md#national-identifier).
* Submissions accept an optional `patient.identity_document` (`type`, `number`, `issuing_state`) and never echoed. A doctor who needs it asks with the information request reason `identity_document_required`, answered with `identity_document`. See [Identity document](https://docs.hi-doctor.ai/partners/submit-a-consultation.md#identity-document).
* Business portal: cancel a consultation before a doctor opens it, and see the team roster. See [Business portal](https://docs.hi-doctor.ai/partners/business-portal.md).
* Responses carry `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset`.
* The Business portal shows the network each API key was last used from and exports the usage ledger as CSV.

### Changed

* Webhook secrets are `whsec_` followed by standard base64 of 32 random bytes. Existing secrets were converted in place and keep their key bytes, so you do not need to rotate. If you stored an older secret (`whsec_` followed by URL-safe base64 without padding), convert it yourself: in the part after `whsec_`, replace `-` with `+` and `_` with `/`, then append `=` until the length is a multiple of 4. For example, in Python: `"whsec_" + base64.b64encode(base64.urlsafe_b64decode(old[6:] + "=" * (-len(old[6:]) % 4))).decode()`. Rotating the secret also gives you a new one in the current format.
* Consent: the reference lists `true` as the only accepted value of each consent flag, and `consent.ip` must be an IPv4 or IPv6 address or `null`; any other value fails with `422 invalid_request`. See [Consent](https://docs.hi-doctor.ai/partners/submit-a-consultation.md#consent).
* A skipped answer entry carries only its locator, `skip` and, optionally, the step's own `step_id`; any other member fails with `422 invalid_answers`.
* An information-request answer entry is located by `question_key`, or by its alias `key` when `question_key` is left out, empty or `null`; when `question_key` is set, `key` is ignored.
* An answer to a step that the other answers hide now fails with `422 unexpected_question_key`.
* Information-request answers: an answer to a request withdrawn by a consent withdrawal fails with `409 info_request_not_open`; the body must carry an answer, an upload or the identity document (an empty body fails with `422 invalid_request` first); `uploads` takes at most 10 unique ids, and a duplicate fails with `422 upload_unusable`. See [Answer the request](https://docs.hi-doctor.ai/partners/information-requests.md#answer-the-request).
* Every information-request answer entry needs a `question_key`, or its alias `key`; the alias applies only to information-request answers, and a consultation submission entry without `question_key` fails with `422 invalid_answers`. Identity document errors keep their nested field for structural problems, such as `patient.identity_document.type`.
* Test advance validates the shape of `reason_code` and `question_keys` on every request, before the transition. See [Test mode](https://docs.hi-doctor.ai/partners/test-mode.md).
* `prescription.active` does not check expiry; compare `expires_at` yourself. See [Prescriptions](https://docs.hi-doctor.ai/partners/prescriptions.md).
* The reference now states the backend's request constraints: required strings must contain a non-blank character, `limit` is 1 to 100 (default 50, outside it `400 invalid_request`), a skipped answer entry carries no `value`, `values` or `option_inputs` (`422 invalid_answers`), and an information-request `identity_document` has only `type`, `number` and `issuing_state`.
* `patient.address.line2` is stored with `line1`; together they are limited to 200 characters.
* Expired uploads no longer count towards the storage quota and are deleted by a periodic cleanup.
* Error messages no longer repeat submitted answer values or identifiers. An unexpected answer key is still named in `errors[].question_key`.
* `cancellable` now applies exactly the cancel rule, and `version` advances on every change to the public consultation resource except a change to a product's display name.

**2026-11-03**

Partner guides published

### Added

* Published the partner guides: authentication, test mode, questionnaires and schema, submission, photos and files, consultation lifecycle, prescriptions, webhooks, information requests, errors, rate limits, idempotency, pagination, the Business portal, security and compliance, and the go-live checklist.

## Next steps

> [card] [Partner API overview](https://docs.hi-doctor.ai/partners/overview.md)
>
> What the Partner API does and how to get access.

> [card] [Developer FAQ](https://docs.hi-doctor.ai/partners/faq.md)
>
> Short answers to common integration questions.

Commercial questions: read the [partnership FAQ](https://docs.hi-doctor.ai/partnerships/faq.md) or write to [hello@hi-doctor.ai](mailto:hello@hi-doctor.ai).


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