Skip to main content
An information request is how the reviewing doctor asks for more information before deciding, for example a clearer photo or a measurement checked again. Requests are fully structured: you receive a reason code and the questions to ask again, never free text, and you answer with the same answer format you used at submission. A request has no deadline; it stays open until it is answered or withdrawn. Last reviewed: 2026-11-04 While a request is open the consultation is in the info_requested status described in Consultation lifecycle.

How do you learn about a request?

  • The consultation moves to info_requested and you receive consultation.info_requested.
  • open_info_request on the consultation names the request: id, reason_code, requested_at.
  • The patient also sees a message about it in their Hi Doctor account.
A consultation has at most one open request at a time. There is no deadline to answer it: the request stays open until you answer it or it is withdrawn, for example when the patient withdraws consent. The doctor decides once the information arrives.

Read the request

GET /v1/partner/consultations/{id}/info-requests lists the consultation’s requests. Scope: consultations:read. Each request looks like this (the label text is illustrative):
A request never returns the answer values or the files themselves, in the API or in the Business portal. Keep your own record of what the patient answered.

Reason codes

Document kinds

Answer the request

Ask the patient the listed questions again, upload any new photos or documents with POST /v1/partner/files, then send: POST /v1/partner/consultations/{id}/info-requests/{request_id}/answer. Scope: consultations:write.
  • answers uses the same entries-v1 format as submission, for the re-asked keys only.
  • Each entry is located by question_key. When question_key is set, it is used and key is ignored. When question_key is left out, empty or null, the entry is located by its alias key, which must then be a non-empty string. An entry with neither, or whose locator was not re-asked, fails with 422 unexpected_question_key. Each question can be answered once; a repeated key fails with 422 invalid_answers.
  • A skipped entry (skip: true, for an optional question only) carries just its locator (question_key or key), skip and, optionally, the question’s own step_id. Any other member alongside it, such as value, values or option_inputs, fails with 422 invalid_answers.
  • Your answers are merged over the original answers and validated against the schema version you submitted, so the full set must still be valid.
  • A re-asked upload step, such as body_photo above, is answered in answers with the new upload_id as its value, exactly as at submission.
  • uploads is only for documents named in documents_requested, which are not questionnaire steps. List their upload_ids there: at most 10, each one once. More than 10 fails with 422 invalid_request. An upload_id listed twice, or used both in uploads and as an upload answer in answers, fails with 422 upload_unusable, as does an upload that does not exist, has expired or was already used.
  • Send at least one answer, one upload or, on an identity document request, the identity document. null counts as leaving a member out. A body with none of them fails with 422 invalid_request, before any other check of its contents (including identity_document_required).
  • Free text is not accepted.
The API checks an answer in this order, and returns the first failure:
  1. The request must exist: otherwise 404.
  2. The request must be open: otherwise 409 info_request_not_open. This includes a request withdrawn when the patient withdrew consent.
  3. The patient must not have withdrawn consent: otherwise 409 consent_withdrawn. Withdrawal closes the request open at that moment (step 2), but in live mode the patient’s consultations are not frozen, so a doctor can still raise a request afterwards; an answer to it stops here.
  4. The consultation must still await information: otherwise 409 case_closed.
  5. The body must carry an answer, an upload or the identity document: otherwise 422 invalid_request.
  6. Then its contents are validated.
A retry after a successful answer fails with 409 info_request_not_open.

Identity document requests

When electronic prescribing needs the patient’s identity document and Hi Doctor does not have it, the doctor opens a request with reason_code identity_document_required. It may list no question keys. Answer it with identity_document, in the same shape as patient.identity_document on submission:
  • identity_document is required on this request: an answer that carries answers or uploads but no document fails with 422 identity_document_required. A body with no answer, upload or document fails with 422 invalid_request first.
  • It is accepted only on this request. On any other request it fails with 422 invalid_request, with an error item whose field is identity_document and code is unexpected_field.
  • It is validated like patient.identity_document. A document that breaks the rules (an unknown issuing state, a wrong check letter, a bad number format), a value that is not an object, or unknown members fail with 422 invalid_request, field identity_document, code invalid_identity_document.
  • A structural error keeps its own nested field instead: an unsupported type is field identity_document.type with code invalid_choice, and a missing, blank or too long member is that member’s field, for example identity_document.number with code required, blank or max_length.
  • A document that differs from the one stored for the patient fails with 409 patient_conflict.
  • It is never echoed or returned. Live mode stores it on the patient’s account; test mode stores nothing.
A successful answer marks the request answered, the consultation returns to in_review and you receive consultation.in_review. The doctor sees the original answers and your correction side by side; the original record is never rewritten.

How do you test information requests?

Advance a test consultation to info_requested with a reason_code and question_keys to create a synthetic request, then answer it with the endpoint above. See Test mode. Answer errors are listed in Partner API errors.

Frequently asked questions

Is there a deadline to answer an information request?

No. The request stays open until you answer it or it is withdrawn, and the doctor decides once the information arrives.

Can the doctor send us a free-text message?

No. Requests are fully structured: a reason code, a fixed label, the questions to ask again and any document kinds. Free text is not accepted in answers either.

Can a consultation have several open requests?

No. A consultation has at most one open request at a time.

Which documents can the doctor ask for?

A prescription issued elsewhere, lab or blood test results, a photo, or another health document. Upload them as files first and list them in the answer’s uploads.

Can I read the patient’s answers back from the API?

No. A request never returns the answer values or the files, in the API or in the Business portal. Keep your own record of what the patient answered.

What happens after I answer?

The request is marked answered, the consultation returns to in review and you receive a consultation.in_review event. The doctor sees the original answers and your correction side by side.

Can I answer the same request twice?

No. A second answer is refused because the request is no longer open; see Partner API errors.

Next steps

Questionnaires and schema

The entries-v1 format used for answers.

Photos and files

Upload new photos and documents for the answer.

Webhooks

Receive consultation.info_requested as it happens.