Cancels a consultation that is still submitted; check cancellable first, which reports exactly this rule. It is refused with 409 not_cancellable once the reviewing doctor has opened the consultation or it has a decision or a prescription, and also while it is unopened but clinically locked (a decision was recorded or an electronic prescription signing has started) or a prescription issuance or replacement is in flight. 409 consultation_busy means the clinical record is locked right now; retry shortly. A cancelled consultation is not billed. Requires the consultations:write scope.
Access, effects and retries
Ownership: The API key’s own partner and mode (test or live); another partner’s or mode’s records answer 404.
Prerequisites: A partner API key with the consultations:write scope.
Effects: Cancels the consultation and voids its pending billing; emits a consultation webhook event.
Retries: A retry after a successful cancel answers 409 not_cancellable; read the consultation to confirm.
POST
/
v1
/
partner
/
consultations
/
{consultation_id}
/
cancel
/
curl
set -euumask 077# Path values must be URL-encoded; query string excludes the leading question mark.url="${HD_BASE_URL:?Set API origin}/v1/partner/consultations/${HD_PATH_CONSULTATION_ID:?Set the path fixture}/cancel/${HD_QUERY_STRING:+?${HD_QUERY_STRING}}"printf 'Accept: application/json\n' > "${HD_REQUEST_HEADERS_FILE:?Private header file}"printf 'Authorization: Bearer %s\n' "${HD_PARTNER_API_KEY:?Set partner API key}" >> "$HD_REQUEST_HEADERS_FILE"curl --silent --show-error --max-time 30 --request POST \ --header "@$HD_REQUEST_HEADERS_FILE" \ --dump-header "${HD_HEADERS_FILE:?Private response header file}" \ --output "${HD_RESPONSE_FILE:?Private response file}" \ --write-out '%{http_code}\n%{content_type}\n' \ "$url"
Increases with every change to the consultation's public state, i.e. every field of this object except version, status_history, updated_at and product.name (catalogue copy: a product rename does not advance it). Events carry the same number.
true exactly when POST /consultations/{consultation_id}/cancel would succeed now: the consultation is submitted, has no prescription, and (live) no doctor has opened it, no decision or electronic prescription signing has started, and no prescription issuance or replacement is in flight.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Hi Doctor","public":true,"description":"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. Connect it to an AI assistant over MCP, or build on the REST API.","colors":{"primary":"#157A5C","light":"#39C69C","dark":"#0E6149"},"logo":{"light":"https://mintcdn.com/hi-doctor-ai/PIEJYA1zSavoVnhH/logo/wordmark-on-light.svg?fit=max\u0026auto=format\u0026n=PIEJYA1zSavoVnhH\u0026q=85\u0026s=c7243fb417e4d3908f3b5fc634a28923","dark":"https://mintcdn.com/hi-doctor-ai/PIEJYA1zSavoVnhH/logo/wordmark-on-dark.svg?fit=max\u0026auto=format\u0026n=PIEJYA1zSavoVnhH\u0026q=85\u0026s=06850588c83edfff94669e9260585343","href":"https://hi-doctor.ai"},"favicon":"https://mintcdn.com/hi-doctor-ai/V_4Yl0k2E857_Kxm/favicon.svg?fit=max\u0026auto=format\u0026n=V_4Yl0k2E857_Kxm\u0026q=85\u0026s=581ac27595afff79fbc35c5d54d60709","api":{"openapi":"api-reference/openapi.json","examples":{"prefill":true},"mdx":{"auth":{"method":"bearer"},"server":"https://api.hi-doctor.ai"}},"background":{"color":{"light":"#FFFFFF","dark":"#0A0A0A"}},"navbar":{"links":[{"icon":"star","href":"https://www.trustpilot.com/review/hi-doctor.ai","label":"Reviews"},{"icon":"envelope","href":"mailto:hello@hi-doctor.ai","label":"Support"}],"primary":{"type":"button","label":"Start a consultation","href":"https://hi-doctor.ai/consultation"}},"footer":{"socials":{"website":"https://hi-doctor.ai"}},"search":{"prompt":"Search Hi Doctor docs..."},"seo":{"metatags":{"description":"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. Weight loss, hair growth and sexual health consultations. Connect your account to an AI assistant with the Hi Doctor MCP connector, or build on the REST API.","author":"Hi Doctor","robots":"index, follow, max-image-preview:large, max-snippet:-1","og:site_name":"Hi Doctor Documentation","og:type":"website","og:locale":"en_US","twitter:card":"summary_large_image","theme-color":"#157A5C"},"organization":{"name":"Hi Doctor","url":"https://hi-doctor.ai"},"indexing":"navigable"},"fonts":{"family":"Figtree"},"errors":{"404":{"redirect":false,"title":"Page not found","description":"This page moved or never existed. [Back to the docs](/)"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity",{"title":"Hi Doctor Docs search","description":"Search the documentation with the Hi Doctor Docs MCP server.","icon":"magnifying-glass","href":"https://docs.hi-doctor.ai/mcp"},{"title":"Connect Hi Doctor","description":"Install the Hi Doctor MCP connector for patient tools.","icon":"plug","href":"/mcp/connect"}],"display":"header"},"markdown":{"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.\n\nThe 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.\n\nHi 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.\n\n## Rules an assistant must follow\n\n- 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.\n- Never give medical advice and never suggest a medication or a dose. An EU-licensed doctor decides those.\n- If a questionnaire returns `ineligible`, say so plainly. Do not retry with altered answers.\n- Before anything that costs money or cancels a plan, state exactly what will happen and get an explicit yes.\n- Cancellation takes effect at the **end of the paid period**, not immediately. Say so.\n- 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.\n- 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.\n- Send option `value`s, not the labels shown to the patient. Labels are translated, values are stable.\n- Never ask for card details. Payment happens on Stripe's hosted checkout via a link.\n- On severe or sudden symptoms (chest pain, difficulty breathing, severe allergic reaction, suicidal thoughts), stop and direct the patient to their local emergency number."},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"OpenAPI spec","icon":"file-code","href":"/api-reference/openapi.json"},{"anchor":"Add the MCP connector","icon":"plug","href":"https://claude.ai/customize/connectors?modal=add-custom-connector\u0026connectorName=Hi%20Doctor\u0026connectorUrl=https://mcp.hi-doctor.ai/mcp"},{"anchor":"AI integration prompt","icon":"wand-magic-sparkles","href":"/mcp/ai-integration"},{"anchor":"hi-doctor.ai","icon":"house-medical","href":"https://hi-doctor.ai"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"hi-doctor-ai","hasAudioNarration":false,"actualSubdomain":"hi-doctor-ai","customDomains":["docs.hi-doctor.ai"],"gitSource":{"type":"github","owner":"online-medicine","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6aeb4f77b21018c2553e6554","collectionId":"479e76df-8b71-4bcd-b29d-f545ddafad1a","liveDeploymentHistoryId":"6aeb4f77b21018c2553e6554","schemaVersion":"v3"},"entitlements":{},"buildId":"6aeb4f77b21018c2553e6554","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"Health library","count":132},{"language":"default","tag":"API reference","count":114},{"language":"default","tag":"Endpoints","count":104},{"language":"default","tag":"Medicines","count":72},{"language":"default","tag":"Partners","count":47},{"language":"default","tag":"Sexual-health medicines","count":28},{"language":"default","tag":"Documentation","count":26},{"language":"default","tag":"Partner API reference","count":26},{"language":"default","tag":"Conditions","count":25},{"language":"default","tag":"Progress","count":23}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":":root{--hd-brand: #157a5c;--hd-brand-strong: #0e6149;--hd-tint: #e3f4ec;--hd-canvas: #ffffff;--hd-alt: #f4f7f4;--hd-border: #e0e0e0;--hd-secondary: #666666;--hd-ink: #000000;--hd-brand-deep: #0b2b22;--hd-dark-bg: #0a0a0a;--hd-dark-surface: #161616;--hd-dark-raised: #1c1c1c;--hd-dark-border: #262626;--hd-dark-text: #ededed;--hd-dark-muted: #a1a1a1;--hd-dark-accent: #39c69c;--hd-status-warning: #8f5e1d;--hd-status-warning-wash: #f6e9dd;--hd-canvas-rgb: 255 255 255;--hd-tint-rgb: 227 244 236;--hd-ink-rgb: 0 0 0;--hd-dark-accent-rgb: 57 198 156;--hd-label-on-dark: rgb(var(--hd-tint-rgb) / 0.75);--hd-card-bg: var(--hd-brand-deep);--hd-card-fg: var(--hd-tint);--hd-card-accent: var(--hd-tint);--hd-card-accent-rgb: var(--hd-tint-rgb);--hd-card-border: rgb(var(--hd-ink-rgb) / 0.1)}html.dark{--hd-label-on-dark: var(--hd-dark-muted);--hd-card-bg: var(--hd-dark-surface);--hd-card-fg: var(--hd-dark-text);--hd-card-accent: var(--hd-dark-accent);--hd-card-accent-rgb: var(--hd-dark-accent-rgb);--hd-card-border: var(--hd-dark-border);--gray-50: 250 250 250;--gray-100: 245 245 245;--gray-200: 237 237 237;--gray-300: 212 212 212;--gray-400: 161 161 161;--gray-500: 115 115 115;--gray-600: 82 82 82;--gray-700: 58 58 58;--gray-800: 38 38 38;--gray-900: 22 22 22;--gray-950: 10 10 10}.nav-logo{height:26px;width:auto;max-width:none}a:has(>.nav-logo){display:inline-flex;align-items:center;min-height:44px}@media (max-width: 1023px){.nav-logo{height:24px}}#topbar-cta-button a{--hd-cta-bg: var(--hd-ink);--hd-cta-fg: var(--hd-canvas);--hd-cta-ring: var(--hd-brand);background-color:var(--hd-cta-bg);color:var(--hd-cta-fg);border-radius:999px;transition:background-color 160ms ease, color 160ms ease}#topbar-cta-button a>span.absolute{background-color:transparent;opacity:1}#topbar-cta-button a span,#topbar-cta-button a svg{color:var(--hd-cta-fg)}#topbar-cta-button a:hover{--hd-cta-bg: var(--hd-brand);--hd-cta-fg: var(--hd-canvas);transition-duration:240ms}#topbar-cta-button a:focus-visible{outline:2px solid var(--hd-cta-ring);outline-offset:2px}html.dark #topbar-cta-button a{--hd-cta-bg: var(--hd-canvas);--hd-cta-fg: var(--hd-ink);--hd-cta-ring: var(--hd-dark-accent)}html.dark #topbar-cta-button a:hover{--hd-cta-bg: var(--hd-tint);--hd-cta-fg: var(--hd-ink)}.hd-agent-card{width:100%;max-width:100%;min-width:0;margin:12px 0 20px;border-radius:12px;border:1px solid var(--hd-card-border);overflow:hidden;box-sizing:border-box;background:var(--hd-card-bg)}.hd-agent-titlebar{display:flex;align-items:center;gap:10px;width:100%;box-sizing:border-box;padding:10px 14px;background:rgb(var(--hd-canvas-rgb) / 0.05);border-bottom:1px solid rgb(var(--hd-canvas-rgb) / 0.1)}.hd-agent-mark{display:inline-flex;align-items:center;color:var(--hd-card-accent)}.hd-agent-filename{flex:1;font-family:ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;font-size:11px;letter-spacing:0.18em;text-transform:uppercase;color:var(--hd-card-accent)}.hd-agent-copy{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:8px;border:1px solid rgb(var(--hd-canvas-rgb) / 0.18);background:transparent;color:var(--hd-canvas);font-size:12px;cursor:pointer;transition:background-color 160ms ease, border-color 160ms ease}.hd-agent-copy:hover{background:rgb(var(--hd-canvas-rgb) / 0.1);border-color:rgb(var(--hd-canvas-rgb) / 0.32);transition-duration:240ms}.hd-agent-copy-copied{color:var(--hd-card-accent);border-color:var(--hd-card-accent)}.hd-agent-body{width:100%;max-height:340px;overflow-y:auto;overflow-x:auto;margin:0!important;padding:16px 18px!important;background:var(--hd-card-bg)!important;border:none!important;border-radius:0!important;box-shadow:none!important;font-family:ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace!important;font-size:12.5px!important;line-height:1.65!important;color:var(--hd-card-fg)!important;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;scrollbar-width:thin;scrollbar-color:rgb(var(--hd-canvas-rgb) / 0.18) transparent}.hd-agent-footer{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:10px 14px;background:rgb(var(--hd-canvas-rgb) / 0.04);border-top:1px solid rgb(var(--hd-canvas-rgb) / 0.1)}.hd-agent-footer-label{font-family:ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;font-size:10px;letter-spacing:0.2em;text-transform:uppercase;color:var(--hd-label-on-dark)}.hd-agent-chips{display:flex;flex-wrap:wrap;gap:6px}.hd-agent-chip{padding:3px 9px;border-radius:999px;background:rgb(var(--hd-card-accent-rgb) / 0.14);color:var(--hd-card-accent);font-size:11px;white-space:nowrap}.hd-agent-card pre,.hd-agent-card code{max-width:100%}#content-area h1,#content-area h2,#content-area h3,#content-area h4{color:var(--hd-ink)}html.dark #content-area h1,html.dark #content-area h2,html.dark #content-area h3,html.dark #content-area h4{color:var(--hd-canvas)}html.dark #content-area table th,html.dark #content-area table td{border-color:var(--hd-dark-border)}html.dark #content-area table th{color:var(--hd-dark-text)}html.dark #content-area :not(pre):not(a)>code{background-color:var(--hd-dark-surface);border-color:var(--hd-dark-border);color:var(--hd-dark-text)}.sidebar-group-header{font-family:ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;font-size:11px;font-weight:600;line-height:1.2;letter-spacing:0.16em;text-transform:uppercase;color:var(--hd-brand);margin-top:0.35rem;margin-bottom:0.9rem}.sidebar-group-header .sidebar-title{font:inherit;letter-spacing:inherit}html.dark .sidebar-group-header{color:var(--hd-label-on-dark)}.callout[data-callout-type=\"note\"]{border-color:var(--hd-border);background-color:var(--hd-alt)}.callout[data-callout-type=\"note\"] [data-component-part=\"callout-icon\"] svg,.callout[data-callout-type=\"note\"] [data-component-part=\"callout-content\"]{color:var(--hd-secondary)}.callout[data-callout-type=\"info\"]{border-color:var(--hd-brand);background-color:var(--hd-tint)}.callout[data-callout-type=\"info\"] [data-component-part=\"callout-icon\"] svg,.callout[data-callout-type=\"info\"] [data-component-part=\"callout-content\"]{color:var(--hd-brand-deep)}.callout[data-callout-type=\"tip\"]{border-color:var(--hd-brand-strong);background-color:var(--hd-canvas)}.callout[data-callout-type=\"tip\"] [data-component-part=\"callout-icon\"] svg,.callout[data-callout-type=\"tip\"] [data-component-part=\"callout-content\"]{color:var(--hd-brand-deep)}.callout[data-callout-type=\"warning\"]{border-color:var(--hd-status-warning);background-color:var(--hd-status-warning-wash)}.callout[data-callout-type=\"warning\"] [data-component-part=\"callout-icon\"] svg{color:var(--hd-status-warning)}.callout[data-callout-type=\"warning\"] [data-component-part=\"callout-content\"]{color:var(--hd-ink)}html.dark .callout[data-callout-type=\"note\"]{border-color:var(--hd-dark-border);background-color:var(--hd-dark-surface)}html.dark .callout[data-callout-type=\"note\"] [data-component-part=\"callout-icon\"] svg,html.dark .callout[data-callout-type=\"note\"] [data-component-part=\"callout-content\"]{color:var(--hd-dark-muted)}html.dark .callout[data-callout-type=\"info\"]{border-color:rgb(var(--hd-dark-accent-rgb) / 0.6);background-color:rgb(var(--hd-dark-accent-rgb) / 0.1)}html.dark .callout[data-callout-type=\"tip\"]{border-color:rgb(var(--hd-dark-accent-rgb) / 0.5);background-color:transparent}html.dark .callout[data-callout-type=\"info\"] [data-component-part=\"callout-icon\"] svg,html.dark .callout[data-callout-type=\"tip\"] [data-component-part=\"callout-icon\"] svg{color:var(--hd-dark-accent)}html.dark .callout[data-callout-type=\"info\"] [data-component-part=\"callout-content\"],html.dark .callout[data-callout-type=\"tip\"] [data-component-part=\"callout-content\"]{color:var(--hd-dark-text)}html.dark .callout[data-callout-type=\"warning\"]{border-color:#a57e4a;background-color:rgb(143 94 29 / 0.22)}html.dark .callout[data-callout-type=\"warning\"] [data-component-part=\"callout-icon\"] svg,html.dark .callout[data-callout-type=\"warning\"] [data-component-part=\"callout-content\"]{color:#d8b28a}"}],"page":{"pagePath":"api-reference/consultations/cancel-a-consultation","slug":"/api-reference/consultations/cancel-a-consultation","pageMetadata":{"title":"Cancel a consultation","description":"Cancels a consultation that is still submitted; check cancellable first, which reports exactly this rule. It is refused with 409 not_cancellable once the reviewing doctor has opened the consultation or it has a decision or a prescription, and also while it is unopened but clinically locked (a decision was recorded or an electronic prescription signing has started) or a prescription issuance or replacement is in flight. 409 consultation_busy means the clinical record is locked right now; retry shortly. A cancelled consultation is not billed. Requires the consultations:write scope.\n\n### Access, effects and retries\n**Ownership:** The API key's own partner and mode (test or live); another partner's or mode's records answer 404.\n\n**Prerequisites:** A partner API key with the `consultations:write` scope.\n\n**Effects:** Cancels the consultation and voids its pending billing; emits a consultation webhook event.\n\n**Retries:** A retry after a successful cancel answers 409 not_cancellable; read the consultation to confirm.","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json post /v1/partner/consultations/{consultation_id}/cancel/","href":"/api-reference/consultations/cancel-a-consultation","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n h3: \"h3\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Cancels a consultation that is still submitted; check cancellable first, which reports exactly this rule. It is refused with 409 not_cancellable once the reviewing doctor has opened the consultation or it has a decision or a prescription, and also while it is unopened but clinically locked (a decision was recorded or an electronic prescription signing has started) or a prescription issuance or replacement is in flight. 409 consultation_busy means the clinical record is locked right now; retry shortly. A cancelled consultation is not billed. Requires the consultations:write scope.\"\n }), \"\\n\", _jsx(_components.h3, {\n children: \"Access, effects and retries\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Ownership:\"\n }), \" The API key’s own partner and mode (test or live); another partner’s or mode’s records answer 404.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Prerequisites:\"\n }), \" A partner API key with the \", _jsx(_components.code, {\n children: \"consultations:write\"\n }), \" scope.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Effects:\"\n }), \" Cancels the consultation and voids its pending billing; emits a consultation webhook event.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Retries:\"\n }), \" A retry after a successful cancel answers 409 not_cancellable; read the consultation to confirm.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Cancel a consultation","description":"Cancels a consultation that is still submitted; check cancellable first, which reports exactly this rule. It is refused with 409 not_cancellable once the reviewing doctor has opened the consultation or it has a decision or a prescription, and also while it is unopened but clinically locked (a decision was recorded or an electronic prescription signing has started) or a prescription issuance or replacement is in flight. 409 consultation_busy means the clinical record is locked right now; retry shortly. A cancelled consultation is not billed. Requires the consultations:write scope.\n\n### Access, effects and retries\n**Ownership:** The API key's own partner and mode (test or live); another partner's or mode's records answer 404.\n\n**Prerequisites:** A partner API key with the `consultations:write` scope.\n\n**Effects:** Cancels the consultation and voids its pending billing; emits a consultation webhook event.\n\n**Retries:** A retry after a successful cancel answers 409 not_cancellable; read the consultation to confirm.","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json post /v1/partner/consultations/{consultation_id}/cancel/","href":"/api-reference/consultations/cancel-a-consultation","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"cancel_consultation","description":"Cancels a consultation that is still submitted; check cancellable first, which reports exactly this rule. It is refused with 409 not_cancellable once the reviewing doctor has opened the consultation or it has a decision or a prescription, and also while it is unopened but clinically locked (a decision was recorded or an electronic prescription signing has started) or a prescription issuance or replacement is in flight. 409 consultation_busy means the clinical record is locked right now; retry shortly. A cancelled consultation is not billed. Requires the consultations:write scope.\n\n### Access, effects and retries\n**Ownership:** The API key's own partner and mode (test or live); another partner's or mode's records answer 404.\n\n**Prerequisites:** A partner API key with the `consultations:write` scope.\n\n**Effects:** Cancels the consultation and voids its pending billing; emits a consultation webhook event.\n\n**Retries:** A retry after a successful cancel answers 409 not_cancellable; read the consultation to confirm.","summary":"Cancel a consultation","parameters":["ab9fb4a0-0b86-4200-8816-4178e122e4d7","0b1cdfdf-72f5-420d-ba43-c965ccb053b0"],"tags":["Consultations"],"security":["a304c7e5-1bb0-4760-a30a-dce87fe769fd"],"responses":{"200":"70d23274-e6bc-42d9-99e2-34f3db314828","400":"a62f2e2d-a54e-49ca-8783-1df7451008ce","401":"4bcc3560-1572-4eca-a5f8-4762377af6e5","403":"2b06075d-d7ab-4531-8cc8-014f49226e55","404":"0b54f794-4925-494f-b70d-7fe024e5eda7","409":"3e90b627-38ea-4161-9730-f99698d9f639","429":"36de3b1d-e989-40ed-9289-e54d5874c80f"},"x-codeSamples":[{"lang":"Shell","label":"curl","source":"set -eu\numask 077\n# Path values must be URL-encoded; query string excludes the leading question mark.\nurl=\"${HD_BASE_URL:?Set API origin}/v1/partner/consultations/${HD_PATH_CONSULTATION_ID:?Set the path fixture}/cancel/${HD_QUERY_STRING:+?${HD_QUERY_STRING}}\"\nprintf 'Accept: application/json\\n' > \"${HD_REQUEST_HEADERS_FILE:?Private header file}\"\nprintf 'Authorization: Bearer %s\\n' \"${HD_PARTNER_API_KEY:?Set partner API key}\" >> \"$HD_REQUEST_HEADERS_FILE\"\ncurl --silent --show-error --max-time 30 --request POST \\\n --header \"@$HD_REQUEST_HEADERS_FILE\" \\\n --dump-header \"${HD_HEADERS_FILE:?Private response header file}\" \\\n --output \"${HD_RESPONSE_FILE:?Private response file}\" \\\n --write-out '%{http_code}\\n%{content_type}\\n' \\\n \"$url\"\n"},{"lang":"Python","label":"requests","source":"import os, json\nfrom pathlib import Path\nfrom urllib.parse import quote\nimport requests\nos.umask(0o077)\nurl = os.environ[\"HD_BASE_URL\"].rstrip(\"/\") + '/v1/partner/consultations/{consultation_id}/cancel/'\nurl = url.replace('{consultation_id}', quote(os.environ['HD_PATH_CONSULTATION_ID'], safe=\"\"))\nif os.environ.get(\"HD_QUERY_STRING\"): url += \"?\" + os.environ[\"HD_QUERY_STRING\"]\nheaders = {\"Accept\": 'application/json'}\nheaders[\"Authorization\"] = \"Bearer \" + os.environ[\"HD_PARTNER_API_KEY\"]\nkwargs = {}\nresponse = requests.request('POST', url, headers=headers, timeout=30, allow_redirects=False, **kwargs)\nPath(os.environ[\"HD_RESPONSE_FILE\"]).write_bytes(response.content)\nPath(os.environ[\"HD_HEADERS_FILE\"]).write_text(json.dumps(dict(response.headers)))\nprint(response.status_code)\nprint(response.headers.get(\"Content-Type\", \"\"))\n"},{"lang":"JavaScript","label":"fetch","source":"import { readFileSync, writeFileSync } from \"node:fs\";\nconst env = process.env;\nlet url = env.HD_BASE_URL.replace(/\\/$/, \"\") + \"/v1/partner/consultations/{consultation_id}/cancel/\";\nurl = url.replace(\"{consultation_id}\", encodeURIComponent(env.HD_PATH_CONSULTATION_ID));\nif (env.HD_QUERY_STRING) url += \"?\" + env.HD_QUERY_STRING;\nconst headers = { \"Accept\": \"application/json\" };\nheaders.Authorization = \"Bearer \" + env.HD_PARTNER_API_KEY;\nconst options = { method: \"POST\", headers, redirect: \"manual\", signal: AbortSignal.timeout(30000) };\nconst response = await fetch(url, options);\nwriteFileSync(env.HD_RESPONSE_FILE, Buffer.from(await response.arrayBuffer()), {mode: 0o600});\nwriteFileSync(env.HD_HEADERS_FILE, JSON.stringify(Object.fromEntries(response.headers)), {mode: 0o600});\nconsole.log(response.status);\nconsole.log(response.headers.get(\"content-type\") ?? \"\");\n"}],"method":"post","type":"path","servers":["a52f5261-d6ca-4f76-8d3e-ad58db271710"],"path":"/v1/partner/consultations/{consultation_id}/cancel/","baseUrlOptions":["https://api.hi-doctor.ai"],"title":"Cancel a consultation","codeSamples":[{"label":"curl","lang":"Shell","source":"set -eu\numask 077\n# Path values must be URL-encoded; query string excludes the leading question mark.\nurl=\"${HD_BASE_URL:?Set API origin}/v1/partner/consultations/${HD_PATH_CONSULTATION_ID:?Set the path fixture}/cancel/${HD_QUERY_STRING:+?${HD_QUERY_STRING}}\"\nprintf 'Accept: application/json\\n' > \"${HD_REQUEST_HEADERS_FILE:?Private header file}\"\nprintf 'Authorization: Bearer %s\\n' \"${HD_PARTNER_API_KEY:?Set partner API key}\" >> \"$HD_REQUEST_HEADERS_FILE\"\ncurl --silent --show-error --max-time 30 --request POST \\\n --header \"@$HD_REQUEST_HEADERS_FILE\" \\\n --dump-header \"${HD_HEADERS_FILE:?Private response header file}\" \\\n --output \"${HD_RESPONSE_FILE:?Private response file}\" \\\n --write-out '%{http_code}\\n%{content_type}\\n' \\\n \"$url\"\n"},{"label":"requests","lang":"Python","source":"import os, json\nfrom pathlib import Path\nfrom urllib.parse import quote\nimport requests\nos.umask(0o077)\nurl = os.environ[\"HD_BASE_URL\"].rstrip(\"/\") + '/v1/partner/consultations/{consultation_id}/cancel/'\nurl = url.replace('{consultation_id}', quote(os.environ['HD_PATH_CONSULTATION_ID'], safe=\"\"))\nif os.environ.get(\"HD_QUERY_STRING\"): url += \"?\" + os.environ[\"HD_QUERY_STRING\"]\nheaders = {\"Accept\": 'application/json'}\nheaders[\"Authorization\"] = \"Bearer \" + os.environ[\"HD_PARTNER_API_KEY\"]\nkwargs = {}\nresponse = requests.request('POST', url, headers=headers, timeout=30, allow_redirects=False, **kwargs)\nPath(os.environ[\"HD_RESPONSE_FILE\"]).write_bytes(response.content)\nPath(os.environ[\"HD_HEADERS_FILE\"]).write_text(json.dumps(dict(response.headers)))\nprint(response.status_code)\nprint(response.headers.get(\"Content-Type\", \"\"))\n"},{"label":"fetch","lang":"JavaScript","source":"import { readFileSync, writeFileSync } from \"node:fs\";\nconst env = process.env;\nlet url = env.HD_BASE_URL.replace(/\\/$/, \"\") + \"/v1/partner/consultations/{consultation_id}/cancel/\";\nurl = url.replace(\"{consultation_id}\", encodeURIComponent(env.HD_PATH_CONSULTATION_ID));\nif (env.HD_QUERY_STRING) url += \"?\" + env.HD_QUERY_STRING;\nconst headers = { \"Accept\": \"application/json\" };\nheaders.Authorization = \"Bearer \" + env.HD_PARTNER_API_KEY;\nconst options = { method: \"POST\", headers, redirect: \"manual\", signal: AbortSignal.timeout(30000) };\nconst response = await fetch(url, options);\nwriteFileSync(env.HD_RESPONSE_FILE, Buffer.from(await response.arrayBuffer()), {mode: 0o600});\nwriteFileSync(env.HD_HEADERS_FILE, JSON.stringify(Object.fromEntries(response.headers)), {mode: 0o600});\nconsole.log(response.status);\nconsole.log(response.headers.get(\"content-type\") ?? \"\");\n"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated","prefillPlaygroundWithExample":true,"prefillPlaygroundExamples":[]},"dependencies":{"parameters":{"ab9fb4a0-0b86-4200-8816-4178e122e4d7":{"in":"path","name":"consultation_id","schema":{"type":"string","format":"uuid","isRequired":true,"description":"The consultation id.","uniqueKey":"","typeLabel":"string\u003cuuid>"},"description":"The consultation id.","required":true,"example":"7f8b1c2e-4d5a-4e6f-9a0b-1c2d3e4f5a6b"},"0b1cdfdf-72f5-420d-ba43-c965ccb053b0":{"in":"header","name":"Idempotency-Key","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{8,128}$","description":"Accepted but not used for replay on this operation. Only POST /v1/partner/consultations stores and replays responses by Idempotency-Key.","uniqueKey":"","typeLabel":"string"},"description":"Accepted but not used for replay on this operation. Only POST /v1/partner/consultations stores and replays responses by Idempotency-Key.","example":"b7c1d2e3f4a5b6c7"}},"responses":{"70d23274-e6bc-42d9-99e2-34f3db314828":{"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window for the most restrictive limit that applies. Absent on refusals made before the throttles run (brand header, flag off, partner_not_live)."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix time, in seconds, when the window frees up."}},"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The consultation id.","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"object":{"type":"string","description":"Always consultation.","enum":["consultation"],"isRequired":true,"uniqueKey":"object","typeLabel":"enum\u003cstring>"},"mode":{"type":"string","description":"test or live, from the API key.","enum":["live","test"],"isRequired":true,"uniqueKey":"mode","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Current consultation status.","enum":["submitted","in_review","info_requested","approved","rejected","cancelled"],"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"version":{"type":"integer","description":"Increases with every change to the consultation's public state, i.e. every field of this object except version, status_history, updated_at and product.name (catalogue copy: a product rename does not advance it). Events carry the same number.","isRequired":true,"uniqueKey":"version","typeLabel":"integer"},"status_history":{"type":"array","items":{"type":"object","properties":{"status":{"type":"string","description":"The status entered.","enum":["submitted","in_review","info_requested","approved","rejected","cancelled"],"isRequired":true,"uniqueKey":"status_history.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"version":{"type":"integer","description":"Consultation version at this status.","isRequired":true,"uniqueKey":"status_history.items.[INDEX].version","typeLabel":"integer"},"at":{"type":"string","format":"date-time","description":"When the consultation entered this status.","isRequired":true,"uniqueKey":"status_history.items.[INDEX].at","typeLabel":"string\u003cdate-time>"}},"required":["at","status","version"],"uniqueKey":"status_history.items.[INDEX]","typeLabel":"object"},"description":"Every status change, oldest first.","isRequired":true,"uniqueKey":"status_history","typeLabel":"object[]"},"external_reference":{"oneOf":[{"type":"string","description":"Your order or case reference; null when none was sent.","isRequired":true,"uniqueKey":"external_reference.oneOf.0","typeLabel":"string"},{"type":"null","description":"Your order or case reference; null when none was sent.","isRequired":true,"uniqueKey":"external_reference.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"external_reference","typeLabel":"string | null"},"product":{"type":"object","description":"The product.","required":["name","product_id"],"properties":{"product_id":{"type":"string","description":"Product id from GET /v1/partner/products.","isRequired":true,"uniqueKey":"product.product_id","typeLabel":"string"},"name":{"type":"string","description":"Product display name.","isRequired":true,"uniqueKey":"product.name","typeLabel":"string"}},"isRequired":true,"uniqueKey":"product","typeLabel":"object"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code.","isRequired":true,"uniqueKey":"country","typeLabel":"string"},"plan_key":{"oneOf":[{"type":"string","description":"The chosen plan.","isRequired":true,"uniqueKey":"plan_key.oneOf.0","typeLabel":"string"},{"type":"null","description":"The chosen plan.","isRequired":true,"uniqueKey":"plan_key.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"plan_key","typeLabel":"string | null"},"dosage":{"oneOf":[{"type":"string","description":"The chosen dosage; null when the product has none.","isRequired":true,"uniqueKey":"dosage.oneOf.0","typeLabel":"string"},{"type":"null","description":"The chosen dosage; null when the product has none.","isRequired":true,"uniqueKey":"dosage.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dosage","typeLabel":"string | null"},"patient":{"type":"object","description":"The patient.","required":["external_patient_id","id"],"properties":{"id":{"type":"string","format":"uuid","description":"The patient id.","isRequired":true,"uniqueKey":"patient.id","typeLabel":"string\u003cuuid>"},"external_patient_id":{"type":"string","description":"Your stable identifier for the patient.","isRequired":true,"uniqueKey":"patient.external_patient_id","typeLabel":"string"}},"isRequired":true,"uniqueKey":"patient","typeLabel":"object"},"submitted_at":{"type":"string","format":"date-time","description":"When the consultation was submitted.","isRequired":true,"uniqueKey":"submitted_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","description":"When it last changed.","isRequired":true,"uniqueKey":"updated_at","typeLabel":"string\u003cdate-time>"},"reviewer":{"oneOf":[{"type":"object","description":"Present once the reviewing doctor has opened the case.","required":["description","licence_country"],"properties":{"description":{"type":"string","description":"Who reviewed the consultation.","isRequired":true,"uniqueKey":"reviewer.oneOf.0.description","typeLabel":"string"},"licence_country":{"oneOf":[{"type":"string","description":"ISO 3166-1 alpha-2 country of the reviewing doctor's licence; null when not recorded.","isRequired":true,"uniqueKey":"reviewer.oneOf.0.licence_country.oneOf.0","typeLabel":"string"},{"type":"null","description":"ISO 3166-1 alpha-2 country of the reviewing doctor's licence; null when not recorded.","isRequired":true,"uniqueKey":"reviewer.oneOf.0.licence_country.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"reviewer.oneOf.0.licence_country","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"reviewer.oneOf.0","typeLabel":"object"},{"type":"string","description":"Present once the reviewing doctor has opened the case.","enum":[null],"isRequired":true,"uniqueKey":"reviewer.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Present once the reviewing doctor has opened the case.","enum":[null],"isRequired":true,"uniqueKey":"reviewer.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"reviewer","typeLabel":"object | enum\u003cstring> | null"},"decision":{"oneOf":[{"type":"object","description":"The clinical decision; null until one is recorded.","required":["decided_at","outcome","reason_category"],"properties":{"outcome":{"type":"string","description":"approved or rejected.","enum":["approved","rejected"],"isRequired":true,"uniqueKey":"decision.oneOf.0.outcome","typeLabel":"enum\u003cstring>"},"reason_category":{"oneOf":[{"type":"string","description":"Category of a rejection; null otherwise.","enum":["safety","not_eligible"],"isRequired":true,"uniqueKey":"decision.oneOf.0.reason_category.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Category of a rejection; null otherwise.","enum":[null],"isRequired":true,"uniqueKey":"decision.oneOf.0.reason_category.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Category of a rejection; null otherwise.","enum":[null],"isRequired":true,"uniqueKey":"decision.oneOf.0.reason_category.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"decision.oneOf.0.reason_category","typeLabel":"enum\u003cstring> · enum\u003cstring> · null"},"decided_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the decision was recorded.","isRequired":true,"uniqueKey":"decision.oneOf.0.decided_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the decision was recorded.","isRequired":true,"uniqueKey":"decision.oneOf.0.decided_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"decision.oneOf.0.decided_at","typeLabel":"string\u003cdate-time> | null"}},"isRequired":true,"uniqueKey":"decision.oneOf.0","typeLabel":"object"},{"type":"string","description":"The clinical decision; null until one is recorded.","enum":[null],"isRequired":true,"uniqueKey":"decision.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The clinical decision; null until one is recorded.","enum":[null],"isRequired":true,"uniqueKey":"decision.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"decision","typeLabel":"object | enum\u003cstring> | null"},"open_info_request":{"oneOf":[{"type":"object","description":"The open information request; null when there is none.","required":["id","reason_code","requested_at"],"properties":{"id":{"type":"string","format":"uuid","description":"The information request id.","isRequired":true,"uniqueKey":"open_info_request.oneOf.0.id","typeLabel":"string\u003cuuid>"},"reason_code":{"type":"string","description":"Why the doctor needs more information.","enum":["answer_unclear","answer_inconsistent","photo_quality","photo_missing","measurement_check","medication_history","medical_history","identity_check","document_missing","identity_document_required","other_clarification"],"isRequired":true,"uniqueKey":"open_info_request.oneOf.0.reason_code","typeLabel":"enum\u003cstring>"},"requested_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the doctor raised the request.","isRequired":true,"uniqueKey":"open_info_request.oneOf.0.requested_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the doctor raised the request.","isRequired":true,"uniqueKey":"open_info_request.oneOf.0.requested_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"open_info_request.oneOf.0.requested_at","typeLabel":"string\u003cdate-time> | null"}},"isRequired":true,"uniqueKey":"open_info_request.oneOf.0","typeLabel":"object"},{"type":"string","description":"The open information request; null when there is none.","enum":[null],"isRequired":true,"uniqueKey":"open_info_request.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The open information request; null when there is none.","enum":[null],"isRequired":true,"uniqueKey":"open_info_request.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"open_info_request","typeLabel":"object | enum\u003cstring> | null"},"prescriptions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The prescription id.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].id","typeLabel":"string\u003cuuid>"},"consultation_id":{"oneOf":[{"type":"string","format":"uuid","description":"The consultation this belongs to.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].consultation_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","description":"The consultation this belongs to.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].consultation_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].consultation_id","typeLabel":"string\u003cuuid> | null"},"status":{"type":"string","description":"issued until the prescription is cancelled. It does not say whether the prescription can still be used: read active, and compare expires_at yourself.","enum":["issued","cancelled"],"isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"active":{"type":"boolean","description":"false once the prescription is cancelled or no longer published to the patient, for example after a dispensing is recorded during a manual recovery. It does not check expiry: an expired prescription can stay active true, so compare expires_at yourself.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].active","typeLabel":"boolean"},"issued_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the prescription was issued.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].issued_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the prescription was issued.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].issued_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].issued_at","typeLabel":"string\u003cdate-time> | null"},"cancelled_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the prescription was cancelled; null if it was not.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].cancelled_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the prescription was cancelled; null if it was not.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].cancelled_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].cancelled_at","typeLabel":"string\u003cdate-time> | null"},"expires_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the prescription expires, or null when not recorded. Always null in test mode.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].expires_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the prescription expires, or null when not recorded. Always null in test mode.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].expires_at","typeLabel":"string\u003cdate-time> | null"},"dispensing_country":{"oneOf":[{"type":"string","description":"ISO 3166-1 alpha-2 country where the prescription is dispensed, or null when not recorded. Always null in test mode.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].dispensing_country.oneOf.0","typeLabel":"string"},{"type":"null","description":"ISO 3166-1 alpha-2 country where the prescription is dispensed, or null when not recorded. Always null in test mode.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].dispensing_country.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].dispensing_country","typeLabel":"string | null"},"medication":{"type":"object","description":"The prescribed medication.","required":["dosage","name","prescribed_label","supply_days"],"properties":{"name":{"type":"string","description":"Medication name.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].medication.name","typeLabel":"string"},"prescribed_label":{"type":"string","description":"The medication as prescribed.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].medication.prescribed_label","typeLabel":"string"},"dosage":{"oneOf":[{"type":"string","description":"Prescribed dosage.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].medication.dosage.oneOf.0","typeLabel":"string"},{"type":"null","description":"Prescribed dosage.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].medication.dosage.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].medication.dosage","typeLabel":"string | null"},"supply_days":{"oneOf":[{"type":"integer","description":"Days of supply prescribed.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].medication.supply_days.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Days of supply prescribed.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].medication.supply_days.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].medication.supply_days","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].medication","typeLabel":"object"},"fulfilment":{"type":"object","description":"How the patient obtains the medication.","required":["route"],"properties":{"route":{"type":"string","description":"How the patient obtains the medication; see the fulfilment guide.","enum":["national_e_prescription","signed_pdf","pharmacy_delivery","cross_border_pdf"],"isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].fulfilment.route","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].fulfilment","typeLabel":"object"},"collected_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the medication was collected, when known; otherwise null.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].collected_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the medication was collected, when known; otherwise null.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].collected_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].collected_at","typeLabel":"string\u003cdate-time> | null"},"replaced_by":{"oneOf":[{"type":"string","format":"uuid","description":"The prescription that replaced this one.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].replaced_by.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","description":"The prescription that replaced this one.","isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].replaced_by.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"prescriptions.items.[INDEX].replaced_by","typeLabel":"string\u003cuuid> | null"}},"required":["active","cancelled_at","collected_at","consultation_id","dispensing_country","expires_at","fulfilment","id","issued_at","medication","replaced_by","status"],"uniqueKey":"prescriptions.items.[INDEX]","typeLabel":"object"},"description":"Prescriptions issued for the consultation.","isRequired":true,"uniqueKey":"prescriptions","typeLabel":"object[]"},"billing":{"type":"object","description":"Billing state and price of the consultation.","required":["price","state"],"properties":{"state":{"oneOf":[{"type":"string","description":"pending, billable, void or reversed.","enum":["pending","billable","void","reversed"],"isRequired":true,"uniqueKey":"billing.state.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"pending, billable, void or reversed.","enum":[null],"isRequired":true,"uniqueKey":"billing.state.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","description":"pending, billable, void or reversed.","enum":[null],"isRequired":true,"uniqueKey":"billing.state.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"billing.state","typeLabel":"enum\u003cstring> · enum\u003cstring> · null"},"price":{"type":"object","description":"Price agreed for the consultation.","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"Amount in the currency's minor unit.","isRequired":true,"uniqueKey":"billing.price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"ISO 4217 currency code.","isRequired":true,"uniqueKey":"billing.price.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"billing.price","typeLabel":"object"}},"isRequired":true,"uniqueKey":"billing","typeLabel":"object"},"cancellable":{"type":"boolean","description":"true exactly when POST /consultations/{consultation_id}/cancel would succeed now: the consultation is submitted, has no prescription, and (live) no doctor has opened it, no decision or electronic prescription signing has started, and no prescription issuance or replacement is in flight.","isRequired":true,"uniqueKey":"cancellable","typeLabel":"boolean"}},"required":["billing","cancellable","country","decision","dosage","external_reference","id","mode","object","open_info_request","patient","plan_key","prescriptions","product","reviewer","status","status_history","submitted_at","updated_at","version"],"uniqueKey":"","typeLabel":"object"},"examples":{"example-1":{"title":"example-1","value":{"id":"7f8b1c2e-4d5a-4e6f-9a0b-1c2d3e4f5a6b","object":"consultation","mode":"test","status":"cancelled","version":2,"status_history":[{"status":"submitted","version":1,"at":"2026-11-03T10:15:00Z"},{"status":"cancelled","version":2,"at":"2026-11-03T12:40:00Z"}],"external_reference":"order-10045","product":{"product_id":"oral_finasteride","name":"Oral finasteride"},"country":"ES","plan_key":"one_off","dosage":"1 mg","patient":{"id":"0e1d2c3b-4a59-4687-8b9a-0b1c2d3e4f50","external_patient_id":"cust-8812"},"submitted_at":"2026-11-03T10:15:00Z","updated_at":"2026-11-03T12:40:00Z","reviewer":null,"decision":null,"open_info_request":null,"prescriptions":[],"billing":{"state":"void","price":{"amount_cents":2900,"currency":"EUR"}},"cancellable":false}}},"exampleType":"examples"}},"description":"The cancelled consultation.","exampleType":"examples"},"a62f2e2d-a54e-49ca-8783-1df7451008ce":{"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window for the most restrictive limit that applies. Absent on refusals made before the throttles run (brand header, flag off, partner_not_live)."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix time, in seconds, when the window frees up."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","description":"The error.","required":["code","message","request_id","type"],"properties":{"type":{"type":"string","description":"Error type, for example validation_error or rate_limited; see Errors in the partner guides.","enum":["api_error","authentication_error","conflict","invalid_request","not_found","permission_error","rate_limited","validation_error"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"A stable, machine-readable error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation; do not parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","description":"Quote this identifier when you contact support.","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code for this item.","isRequired":true,"uniqueKey":"error.errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable message. It never repeats the submitted value.","isRequired":true,"uniqueKey":"error.errors.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","description":"The request field the problem refers to, or null when none.","uniqueKey":"error.errors.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the problem refers to, or null when none.","uniqueKey":"error.errors.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.errors.items.[INDEX].field","typeLabel":"string | null"},"question_key":{"oneOf":[{"type":"string","description":"The questionnaire question the problem refers to, or null when the entry named none.","uniqueKey":"error.errors.items.[INDEX].question_key.oneOf.0","typeLabel":"string"},{"type":"null","description":"The questionnaire question the problem refers to, or null when the entry named none.","uniqueKey":"error.errors.items.[INDEX].question_key.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.errors.items.[INDEX].question_key","typeLabel":"string | null"},"min":{"type":"number","format":"double","description":"On out_of_range: the lowest allowed value, when the schema sets one.","uniqueKey":"error.errors.items.[INDEX].min","typeLabel":"number\u003cdouble>"},"max":{"type":"number","format":"double","description":"On out_of_range: the highest allowed value, when the schema sets one.","uniqueKey":"error.errors.items.[INDEX].max","typeLabel":"number\u003cdouble>"}},"required":["code","message"],"uniqueKey":"error.errors.items.[INDEX]","typeLabel":"object"},"description":"Field-level problems, when any.","uniqueKey":"error.errors","typeLabel":"object[]"},"current":{"type":"object","description":"On 409 schema_outdated: the schema_version and schema_hash currently published.","required":["schema_hash","schema_version"],"properties":{"schema_version":{"type":"string","description":"The published schema_version.","isRequired":true,"uniqueKey":"error.current.schema_version","typeLabel":"string"},"schema_hash":{"type":"string","description":"A hash accepted for the published version.","isRequired":true,"uniqueKey":"error.current.schema_hash","typeLabel":"string"}},"uniqueKey":"error.current","typeLabel":"object"},"current_notice_version":{"type":"string","description":"On 422 consent_notice_outdated: the patient notice version to show and record.","uniqueKey":"error.current_notice_version","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"example-1":{"title":"example-1","value":{"error":{"type":"invalid_request","code":"brand_header_not_allowed","message":"Brand headers are not accepted on partner requests; the brand comes from the API key.","request_id":"req_5f0c3a9d2b7e4f18a6c1d9e3b2a7f4c8"}}}},"exampleType":"examples"}},"description":"The request is malformed. Partner routes also refuse the patient-app brand header with 400 brand_header_not_allowed, before authentication (no rate-limit headers).","exampleType":"examples"},"4bcc3560-1572-4eca-a5f8-4762377af6e5":{"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"description":"The authentication scheme to use: Bearer realm=\"hi-doctor-partner\"."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","description":"The error.","required":["code","message","request_id","type"],"properties":{"type":{"type":"string","description":"Error type, for example validation_error or rate_limited; see Errors in the partner guides.","enum":["api_error","authentication_error","conflict","invalid_request","not_found","permission_error","rate_limited","validation_error"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"A stable, machine-readable error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation; do not parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","description":"Quote this identifier when you contact support.","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code for this item.","isRequired":true,"uniqueKey":"error.errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable message. It never repeats the submitted value.","isRequired":true,"uniqueKey":"error.errors.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","description":"The request field the problem refers to, or null when none.","uniqueKey":"error.errors.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the problem refers to, or null when none.","uniqueKey":"error.errors.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.errors.items.[INDEX].field","typeLabel":"string | null"},"question_key":{"oneOf":[{"type":"string","description":"The questionnaire question the problem refers to, or null when the entry named none.","uniqueKey":"error.errors.items.[INDEX].question_key.oneOf.0","typeLabel":"string"},{"type":"null","description":"The questionnaire question the problem refers to, or null when the entry named none.","uniqueKey":"error.errors.items.[INDEX].question_key.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.errors.items.[INDEX].question_key","typeLabel":"string | null"},"min":{"type":"number","format":"double","description":"On out_of_range: the lowest allowed value, when the schema sets one.","uniqueKey":"error.errors.items.[INDEX].min","typeLabel":"number\u003cdouble>"},"max":{"type":"number","format":"double","description":"On out_of_range: the highest allowed value, when the schema sets one.","uniqueKey":"error.errors.items.[INDEX].max","typeLabel":"number\u003cdouble>"}},"required":["code","message"],"uniqueKey":"error.errors.items.[INDEX]","typeLabel":"object"},"description":"Field-level problems, when any.","uniqueKey":"error.errors","typeLabel":"object[]"},"current":{"type":"object","description":"On 409 schema_outdated: the schema_version and schema_hash currently published.","required":["schema_hash","schema_version"],"properties":{"schema_version":{"type":"string","description":"The published schema_version.","isRequired":true,"uniqueKey":"error.current.schema_version","typeLabel":"string"},"schema_hash":{"type":"string","description":"A hash accepted for the published version.","isRequired":true,"uniqueKey":"error.current.schema_hash","typeLabel":"string"}},"uniqueKey":"error.current","typeLabel":"object"},"current_notice_version":{"type":"string","description":"On 422 consent_notice_outdated: the patient notice version to show and record.","uniqueKey":"error.current_notice_version","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"example-1":{"title":"example-1","value":{"error":{"type":"authentication_error","code":"not_authenticated","message":"Authentication credentials were not provided.","request_id":"req_5f0c3a9d2b7e4f18a6c1d9e3b2a7f4c8"}}},"example-2":{"title":"example-2","value":{"error":{"type":"authentication_error","code":"invalid_token","message":"The API key is not valid.","request_id":"req_5f0c3a9d2b7e4f18a6c1d9e3b2a7f4c8"}}},"example-3":{"title":"example-3","value":{"error":{"type":"authentication_error","code":"key_revoked","message":"The API key has been revoked.","request_id":"req_5f0c3a9d2b7e4f18a6c1d9e3b2a7f4c8"}}},"example-4":{"title":"example-4","value":{"error":{"type":"authentication_error","code":"key_expired","message":"The API key has expired.","request_id":"req_5f0c3a9d2b7e4f18a6c1d9e3b2a7f4c8"}}},"example-5":{"title":"example-5","value":{"error":{"type":"authentication_error","code":"partner_suspended","message":"The partner account is suspended.","request_id":"req_5f0c3a9d2b7e4f18a6c1d9e3b2a7f4c8"}}}},"exampleType":"examples"}},"description":"The API key is missing, malformed, unknown, revoked or expired, or the partner account is suspended. The response carries WWW-Authenticate: Bearer realm=\"hi-doctor-partner\" and no rate-limit headers.","exampleType":"examples"},"2b06075d-d7ab-4531-8cc8-014f49226e55":{"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window for the most restrictive limit that applies. Absent on refusals made before the throttles run (brand header, flag off, partner_not_live)."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix time, in seconds, when the window frees up."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","description":"The error.","required":["code","message","request_id","type"],"properties":{"type":{"type":"string","description":"Error type, for example validation_error or rate_limited; see Errors in the partner guides.","enum":["api_error","authentication_error","conflict","invalid_request","not_found","permission_error","rate_limited","validation_error"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"A stable, machine-readable error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation; do not parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","description":"Quote this identifier when you contact support.","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code for this item.","isRequired":true,"uniqueKey":"error.errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable message. It never repeats the submitted value.","isRequired":true,"uniqueKey":"error.errors.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","description":"The request field the problem refers to, or null when none.","uniqueKey":"error.errors.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the problem refers to, or null when none.","uniqueKey":"error.errors.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.errors.items.[INDEX].field","typeLabel":"string | null"},"question_key":{"oneOf":[{"type":"string","description":"The questionnaire question the problem refers to, or null when the entry named none.","uniqueKey":"error.errors.items.[INDEX].question_key.oneOf.0","typeLabel":"string"},{"type":"null","description":"The questionnaire question the problem refers to, or null when the entry named none.","uniqueKey":"error.errors.items.[INDEX].question_key.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.errors.items.[INDEX].question_key","typeLabel":"string | null"},"min":{"type":"number","format":"double","description":"On out_of_range: the lowest allowed value, when the schema sets one.","uniqueKey":"error.errors.items.[INDEX].min","typeLabel":"number\u003cdouble>"},"max":{"type":"number","format":"double","description":"On out_of_range: the highest allowed value, when the schema sets one.","uniqueKey":"error.errors.items.[INDEX].max","typeLabel":"number\u003cdouble>"}},"required":["code","message"],"uniqueKey":"error.errors.items.[INDEX]","typeLabel":"object"},"description":"Field-level problems, when any.","uniqueKey":"error.errors","typeLabel":"object[]"},"current":{"type":"object","description":"On 409 schema_outdated: the schema_version and schema_hash currently published.","required":["schema_hash","schema_version"],"properties":{"schema_version":{"type":"string","description":"The published schema_version.","isRequired":true,"uniqueKey":"error.current.schema_version","typeLabel":"string"},"schema_hash":{"type":"string","description":"A hash accepted for the published version.","isRequired":true,"uniqueKey":"error.current.schema_hash","typeLabel":"string"}},"uniqueKey":"error.current","typeLabel":"object"},"current_notice_version":{"type":"string","description":"On 422 consent_notice_outdated: the patient notice version to show and record.","uniqueKey":"error.current_notice_version","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"example-1":{"title":"example-1","value":{"error":{"type":"permission_error","code":"insufficient_scope","message":"This endpoint requires the consultations:write scope.","request_id":"req_5f0c3a9d2b7e4f18a6c1d9e3b2a7f4c8"}}},"example-2":{"title":"example-2","value":{"error":{"type":"permission_error","code":"partner_not_live","message":"Live mode is not enabled for this partner.","request_id":"req_5f0c3a9d2b7e4f18a6c1d9e3b2a7f4c8"}}}},"exampleType":"examples"}},"description":"The key lacks the consultations:write scope (insufficient_scope), or a live key was used while live mode is not enabled for the partner (partner_not_live).","exampleType":"examples"},"0b54f794-4925-494f-b70d-7fe024e5eda7":{"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window for the most restrictive limit that applies. Absent on refusals made before the throttles run (brand header, flag off, partner_not_live)."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix time, in seconds, when the window frees up."}},"content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["error"],"properties":{"error":{"type":"object","description":"The error.","required":["code","message","request_id","type"],"properties":{"type":{"type":"string","description":"Error type, for example validation_error or rate_limited; see Errors in the partner guides.","enum":["api_error","authentication_error","conflict","invalid_request","not_found","permission_error","rate_limited","validation_error"],"isRequired":true,"uniqueKey":"oneOf.0.error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"A stable, machine-readable error code.","isRequired":true,"uniqueKey":"oneOf.0.error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation; do not parse it.","isRequired":true,"uniqueKey":"oneOf.0.error.message","typeLabel":"string"},"request_id":{"type":"string","description":"Quote this identifier when you contact support.","isRequired":true,"uniqueKey":"oneOf.0.error.request_id","typeLabel":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code for this item.","isRequired":true,"uniqueKey":"oneOf.0.error.errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable message. It never repeats the submitted value.","isRequired":true,"uniqueKey":"oneOf.0.error.errors.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","description":"The request field the problem refers to, or null when none.","uniqueKey":"oneOf.0.error.errors.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the problem refers to, or null when none.","uniqueKey":"oneOf.0.error.errors.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.errors.items.[INDEX].field","typeLabel":"string | null"},"question_key":{"oneOf":[{"type":"string","description":"The questionnaire question the problem refers to, or null when the entry named none.","uniqueKey":"oneOf.0.error.errors.items.[INDEX].question_key.oneOf.0","typeLabel":"string"},{"type":"null","description":"The questionnaire question the problem refers to, or null when the entry named none.","uniqueKey":"oneOf.0.error.errors.items.[INDEX].question_key.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.errors.items.[INDEX].question_key","typeLabel":"string | null"},"min":{"type":"number","format":"double","description":"On out_of_range: the lowest allowed value, when the schema sets one.","uniqueKey":"oneOf.0.error.errors.items.[INDEX].min","typeLabel":"number\u003cdouble>"},"max":{"type":"number","format":"double","description":"On out_of_range: the highest allowed value, when the schema sets one.","uniqueKey":"oneOf.0.error.errors.items.[INDEX].max","typeLabel":"number\u003cdouble>"}},"required":["code","message"],"uniqueKey":"oneOf.0.error.errors.items.[INDEX]","typeLabel":"object"},"description":"Field-level problems, when any.","uniqueKey":"oneOf.0.error.errors","typeLabel":"object[]"},"current":{"type":"object","description":"On 409 schema_outdated: the schema_version and schema_hash currently published.","required":["schema_hash","schema_version"],"properties":{"schema_version":{"type":"string","description":"The published schema_version.","isRequired":true,"uniqueKey":"oneOf.0.error.current.schema_version","typeLabel":"string"},"schema_hash":{"type":"string","description":"A hash accepted for the published version.","isRequired":true,"uniqueKey":"oneOf.0.error.current.schema_hash","typeLabel":"string"}},"uniqueKey":"oneOf.0.error.current","typeLabel":"object"},"current_notice_version":{"type":"string","description":"On 422 consent_notice_outdated: the patient notice version to show and record.","uniqueKey":"oneOf.0.error.current_notice_version","typeLabel":"string"}},"isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"object"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"The reduced body every route answers while the Partner API is switched off for the environment: no code, message or request_id.","required":["error"],"properties":{"error":{"type":"object","properties":{"type":{"type":"string","enum":["not_found"],"description":"Always not_found.","isRequired":true,"uniqueKey":"oneOf.1.error.type","typeLabel":"enum\u003cstring>"}},"required":["type"],"additionalProperties":false,"description":"Only the error type; no code, message or request_id.","isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"example-1":{"title":"example-1","value":{"error":{"type":"not_found","code":"not_found","message":"No such resource.","request_id":"req_5f0c3a9d2b7e4f18a6c1d9e3b2a7f4c8"}}},"example-2":{"title":"example-2","value":{"error":{"type":"not_found"}}}},"exampleType":"examples"}},"description":"No such resource for this key's partner and mode. While the Partner API is switched off for the environment, every route answers 404 with only {\"error\": {\"type\": \"not_found\"}}, before authentication.","exampleType":"examples"},"3e90b627-38ea-4161-9730-f99698d9f639":{"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window for the most restrictive limit that applies. Absent on refusals made before the throttles run (brand header, flag off, partner_not_live)."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix time, in seconds, when the window frees up."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","description":"The error.","required":["code","message","request_id","type"],"properties":{"type":{"type":"string","description":"Error type, for example validation_error or rate_limited; see Errors in the partner guides.","enum":["api_error","authentication_error","conflict","invalid_request","not_found","permission_error","rate_limited","validation_error"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"A stable, machine-readable error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation; do not parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","description":"Quote this identifier when you contact support.","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code for this item.","isRequired":true,"uniqueKey":"error.errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable message. It never repeats the submitted value.","isRequired":true,"uniqueKey":"error.errors.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","description":"The request field the problem refers to, or null when none.","uniqueKey":"error.errors.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the problem refers to, or null when none.","uniqueKey":"error.errors.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.errors.items.[INDEX].field","typeLabel":"string | null"},"question_key":{"oneOf":[{"type":"string","description":"The questionnaire question the problem refers to, or null when the entry named none.","uniqueKey":"error.errors.items.[INDEX].question_key.oneOf.0","typeLabel":"string"},{"type":"null","description":"The questionnaire question the problem refers to, or null when the entry named none.","uniqueKey":"error.errors.items.[INDEX].question_key.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.errors.items.[INDEX].question_key","typeLabel":"string | null"},"min":{"type":"number","format":"double","description":"On out_of_range: the lowest allowed value, when the schema sets one.","uniqueKey":"error.errors.items.[INDEX].min","typeLabel":"number\u003cdouble>"},"max":{"type":"number","format":"double","description":"On out_of_range: the highest allowed value, when the schema sets one.","uniqueKey":"error.errors.items.[INDEX].max","typeLabel":"number\u003cdouble>"}},"required":["code","message"],"uniqueKey":"error.errors.items.[INDEX]","typeLabel":"object"},"description":"Field-level problems, when any.","uniqueKey":"error.errors","typeLabel":"object[]"},"current":{"type":"object","description":"On 409 schema_outdated: the schema_version and schema_hash currently published.","required":["schema_hash","schema_version"],"properties":{"schema_version":{"type":"string","description":"The published schema_version.","isRequired":true,"uniqueKey":"error.current.schema_version","typeLabel":"string"},"schema_hash":{"type":"string","description":"A hash accepted for the published version.","isRequired":true,"uniqueKey":"error.current.schema_hash","typeLabel":"string"}},"uniqueKey":"error.current","typeLabel":"object"},"current_notice_version":{"type":"string","description":"On 422 consent_notice_outdated: the patient notice version to show and record.","uniqueKey":"error.current_notice_version","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"example-1":{"title":"example-1","value":{"error":{"type":"conflict","code":"not_cancellable","message":"The consultation has been opened by the reviewing doctor or decided.","request_id":"req_5f0c3a9d2b7e4f18a6c1d9e3b2a7f4c8"}}},"example-2":{"title":"example-2","value":{"error":{"type":"conflict","code":"consultation_busy","message":"The consultation is busy; retry shortly.","request_id":"req_5f0c3a9d2b7e4f18a6c1d9e3b2a7f4c8"}}}},"exampleType":"examples"}},"description":"The request conflicts with the resource's current state.","exampleType":"examples"},"36de3b1d-e989-40ed-9289-e54d5874c80f":{"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window for the most restrictive limit that applies. Absent on refusals made before the throttles run (brand header, flag off, partner_not_live)."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix time, in seconds, when the window frees up."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","description":"The error.","required":["code","message","request_id","type"],"properties":{"type":{"type":"string","description":"Error type, for example validation_error or rate_limited; see Errors in the partner guides.","enum":["api_error","authentication_error","conflict","invalid_request","not_found","permission_error","rate_limited","validation_error"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"A stable, machine-readable error code.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation; do not parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","description":"Quote this identifier when you contact support.","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code for this item.","isRequired":true,"uniqueKey":"error.errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable message. It never repeats the submitted value.","isRequired":true,"uniqueKey":"error.errors.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","description":"The request field the problem refers to, or null when none.","uniqueKey":"error.errors.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the problem refers to, or null when none.","uniqueKey":"error.errors.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.errors.items.[INDEX].field","typeLabel":"string | null"},"question_key":{"oneOf":[{"type":"string","description":"The questionnaire question the problem refers to, or null when the entry named none.","uniqueKey":"error.errors.items.[INDEX].question_key.oneOf.0","typeLabel":"string"},{"type":"null","description":"The questionnaire question the problem refers to, or null when the entry named none.","uniqueKey":"error.errors.items.[INDEX].question_key.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.errors.items.[INDEX].question_key","typeLabel":"string | null"},"min":{"type":"number","format":"double","description":"On out_of_range: the lowest allowed value, when the schema sets one.","uniqueKey":"error.errors.items.[INDEX].min","typeLabel":"number\u003cdouble>"},"max":{"type":"number","format":"double","description":"On out_of_range: the highest allowed value, when the schema sets one.","uniqueKey":"error.errors.items.[INDEX].max","typeLabel":"number\u003cdouble>"}},"required":["code","message"],"uniqueKey":"error.errors.items.[INDEX]","typeLabel":"object"},"description":"Field-level problems, when any.","uniqueKey":"error.errors","typeLabel":"object[]"},"current":{"type":"object","description":"On 409 schema_outdated: the schema_version and schema_hash currently published.","required":["schema_hash","schema_version"],"properties":{"schema_version":{"type":"string","description":"The published schema_version.","isRequired":true,"uniqueKey":"error.current.schema_version","typeLabel":"string"},"schema_hash":{"type":"string","description":"A hash accepted for the published version.","isRequired":true,"uniqueKey":"error.current.schema_hash","typeLabel":"string"}},"uniqueKey":"error.current","typeLabel":"object"},"current_notice_version":{"type":"string","description":"On 422 consent_notice_outdated: the patient notice version to show and record.","uniqueKey":"error.current_notice_version","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"example-1":{"title":"example-1","value":{"error":{"type":"rate_limited","code":"throttled","message":"Request was throttled. Expected available in 12 seconds.","request_id":"req_5f0c3a9d2b7e4f18a6c1d9e3b2a7f4c8"}}}},"exampleType":"examples"}},"description":"Too many requests; wait for the number of seconds in Retry-After.","exampleType":"examples"}},"security":{"a304c7e5-1bb0-4760-a30a-dce87fe769fd":{"PartnerApiKey":{"type":"http","scheme":"bearer","bearerFormat":"API key","description":"Partner API key sent as Authorization: Bearer \u003capi key>. Test keys and live keys are separate.","scopes":[],"schemeName":"PartnerApiKey"}}},"servers":{"a52f5261-d6ca-4f76-8d3e-ad58db271710":{"url":"https://api.hi-doctor.ai","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"API key","description":"Partner API key sent as Authorization: Bearer \u003capi key>. Test keys and live keys are separate.","scopes":[],"schemeName":"PartnerApiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Partner API key sent as Authorization: Bearer \u003capi key>. Test keys and live keys are separate.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"PartnerApiKey","name":"Authorization"}],"title":"PartnerApiKey"}]},"originalFileLocation":"api-reference/partner/openapi.json"},"subdomain":"hi-doctor-ai","siteName":"Hi Doctor","title":"Cancel a consultation - Hi Doctor","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-04T14:38:28.103Z","originalFileLocation":"api-reference/consultations/cancel-a-consultation.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Cancels a consultation that is still submitted; check cancellable first, which reports exactly this rule. It is refused with 409 not_cancellable once the reviewing doctor has opened the consultation or it has a decision or a prescription, and also while it is unopened but clinically locked (a decision was recorded or an electronic prescription signing has started) or a prescription issuance or replacement is in flight. 409 consultation_busy means the clinical record is locked right now; retry shortly. A cancelled consultation is not billed. Requires the consultations:write scope. ### Access, effects and retries Ownership: The API key\u0026#x27;s own partner and mode (test or live); another partner\u0026#x27;s or mode\u0026#x27;s records answer 404. Prerequisites: A partner API key with the consultations:write scope. Effects: Cancels the consultation and voids its pending billing; emits a consultation webhook event. Retries: A retry after a successful cancel answers 409 not_cancellable; read the consultation to confirm.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Hi Doctor\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"index, follow, max-image-preview:large, max-snippet:-1\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/hi-doctor-ai/nurYHPmYbdMdWury/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/hi-doctor-ai/nurYHPmYbdMdWury/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/hi-doctor-ai/nurYHPmYbdMdWury/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/hi-doctor-ai/nurYHPmYbdMdWury/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/hi-doctor-ai/nurYHPmYbdMdWury/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/hi-doctor-ai/nurYHPmYbdMdWury/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/hi-doctor-ai/nurYHPmYbdMdWury/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/hi-doctor-ai/nurYHPmYbdMdWury/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/hi-doctor-ai/nurYHPmYbdMdWury/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Cancel a consultation - Hi Doctor\">\u003cmeta data-mint-head property=\"og:description\" content=\"Cancels a consultation that is still submitted; check cancellable first, which reports exactly this rule. It is refused with 409 not_cancellable once the reviewing doctor has opened the consultation or it has a decision or a prescription, and also while it is unopened but clinically locked (a decision was recorded or an electronic prescription signing has started) or a prescription issuance or replacement is in flight. 409 consultation_busy means the clinical record is locked right now; retry shortly. A cancelled consultation is not billed. Requires the consultations:write scope. ### Access, effects and retries Ownership: The API key\u0026#x27;s own partner and mode (test or live); another partner\u0026#x27;s or mode\u0026#x27;s records answer 404. Prerequisites: A partner API key with the consultations:write scope. Effects: Cancels the consultation and voids its pending billing; emits a consultation webhook event. Retries: A retry after a successful cancel answers 409 not_cancellable; read the consultation to confirm.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Hi Doctor Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.hi-doctor.ai/api-reference/consultations/cancel-a-consultation\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://hi-doctor-ai.mintlify.app/_mintlify/api/og/v2?division=Consultations\u0026amp;title=Cancel+a+consultation\u0026amp;description=Cancels+a+consultation+that+is+still+submitted%3B+check+cancellable+first%2C+which+reports+exactly+this+rule.+It+is+refused+with+409+not_cancellable+once+the+review\u0026amp;theme=62172df8443c9a1536d0ebde\u0026amp;signature=2791dfe8dc27519c493a3344dcb82e2ad74816076b1320f3ecdbc40a8201a936\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Cancel a consultation - Hi Doctor\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Cancels a consultation that is still submitted; check cancellable first, which reports exactly this rule. It is refused with 409 not_cancellable once the reviewing doctor has opened the consultation or it has a decision or a prescription, and also while it is unopened but clinically locked (a decision was recorded or an electronic prescription signing has started) or a prescription issuance or replacement is in flight. 409 consultation_busy means the clinical record is locked right now; retry shortly. A cancelled consultation is not billed. Requires the consultations:write scope. ### Access, effects and retries Ownership: The API key\u0026#x27;s own partner and mode (test or live); another partner\u0026#x27;s or mode\u0026#x27;s records answer 404. Prerequisites: A partner API key with the consultations:write scope. Effects: Cancels the consultation and voids its pending billing; emits a consultation webhook event. Retries: A retry after a successful cancel answers 409 not_cancellable; read the consultation to confirm.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://hi-doctor-ai.mintlify.app/_mintlify/api/og/v2?division=Consultations\u0026amp;title=Cancel+a+consultation\u0026amp;description=Cancels+a+consultation+that+is+still+submitted%3B+check+cancellable+first%2C+which+reports+exactly+this+rule.+It+is+refused+with+409+not_cancellable+once+the+review\u0026amp;theme=62172df8443c9a1536d0ebde\u0026amp;signature=2791dfe8dc27519c493a3344dcb82e2ad74816076b1320f3ecdbc40a8201a936\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/hi-doctor-ai/nurYHPmYbdMdWury/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Hi Doctor\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#157A5C\">\u003cmeta data-mint-head name=\"og:locale\" content=\"en_US\">\u003cmeta data-mint-head name=\"author\" content=\"Hi Doctor\">\u003cmeta data-mint-head name=\"theme-color\" content=\"#157A5C\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.hi-doctor.ai/api-reference/consultations/cancel-a-consultation\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/consultations/cancel-a-consultation.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://hi-doctor.ai/#organization\",\"name\":\"Hi Doctor\",\"url\":\"https://hi-doctor.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/hi-doctor-ai/PIEJYA1zSavoVnhH/logo/wordmark-on-light.svg?fit=max\u0026auto=format\u0026n=PIEJYA1zSavoVnhH\u0026q=85\u0026s=c7243fb417e4d3908f3b5fc634a28923\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.hi-doctor.ai#website\",\"name\":\"Hi Doctor\",\"url\":\"https://docs.hi-doctor.ai\",\"publisher\":{\"@id\":\"https://hi-doctor.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.hi-doctor.ai/api-reference/consultations/cancel-a-consultation#webpage\",\"url\":\"https://docs.hi-doctor.ai/api-reference/consultations/cancel-a-consultation\",\"name\":\"Cancel a consultation\",\"description\":\"Cancels a consultation that is still submitted; check cancellable first, which reports exactly this rule. It is refused with 409 not_cancellable once the reviewing doctor has opened the consultation or it has a decision or a prescription, and also while it is unopened but clinically locked (a decision was recorded or an electronic prescription signing has started) or a prescription issuance or replacement is in flight. 409 consultation_busy means the clinical record is locked right now; retry shortly. A cancelled consultation is not billed. Requires the consultations:write scope. ### Access, effects and retries Ownership: The API key's own partner and mode (test or live); another partner's or mode's records answer 404. Prerequisites: A partner API key with the consultations:write scope. Effects: Cancels the consultation and voids its pending billing; emits a consultation webhook event. Retries: A retry after a successful cancel answers 409 not_cancellable; read the consultation to confirm.\",\"dateModified\":\"2026-11-04T14:38:28.103Z\",\"isPartOf\":{\"@id\":\"https://docs.hi-doctor.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.hi-doctor.ai/api-reference/consultations/cancel-a-consultation#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.hi-doctor.ai/api-reference/consultations/cancel-a-consultation#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Partner API reference\",\"item\":\"https://docs.hi-doctor.ai/api-reference/connectivity/check-an-api-key\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Consultations\",\"item\":\"https://docs.hi-doctor.ai/api-reference/consultations/list-consultations\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cancel a consultation\",\"item\":\"https://docs.hi-doctor.ai/api-reference/consultations/cancel-a-consultation\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.hi-doctor.ai/api-reference/consultations/cancel-a-consultation#apireference\",\"headline\":\"Cancel a consultation\",\"name\":\"Cancel a consultation\",\"description\":\"Cancels a consultation that is still submitted; check cancellable first, which reports exactly this rule. It is refused with 409 not_cancellable once the reviewing doctor has opened the consultation or it has a decision or a prescription, and also while it is unopened but clinically locked (a decision was recorded or an electronic prescription signing has started) or a prescription issuance or replacement is in flight. 409 consultation_busy means the clinical record is locked right now; retry shortly. A cancelled consultation is not billed. Requires the consultations:write scope. ### Access, effects and retries Ownership: The API key's own partner and mode (test or live); another partner's or mode's records answer 404. Prerequisites: A partner API key with the consultations:write scope. Effects: Cancels the consultation and voids its pending billing; emits a consultation webhook event. Retries: A retry after a successful cancel answers 409 not_cancellable; read the consultation to confirm.\",\"url\":\"https://docs.hi-doctor.ai/api-reference/consultations/cancel-a-consultation\",\"mainEntityOfPage\":{\"@id\":\"https://docs.hi-doctor.ai/api-reference/consultations/cancel-a-consultation#webpage\"},\"dateModified\":\"2026-11-04T14:38:28.103Z\",\"publisher\":{\"@id\":\"https://hi-doctor.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.hi-doctor.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Hi Doctor\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Hi Doctor","nav":{"global":{"anchors":[{"anchor":"OpenAPI spec","icon":"file-code","href":"/api-reference/openapi.json"},{"anchor":"Add the MCP connector","icon":"plug","href":"https://claude.ai/customize/connectors?modal=add-custom-connector\u0026connectorName=Hi%20Doctor\u0026connectorUrl=https://mcp.hi-doctor.ai/mcp"},{"anchor":"AI integration prompt","icon":"wand-magic-sparkles","href":"/mcp/ai-integration"},{"anchor":"hi-doctor.ai","icon":"house-medical","href":"https://hi-doctor.ai"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"MCP","pages":[{"title":"MCP","href":"/mcp/overview"}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api-reference/introduction"}]},{"tab":"Partners","groups":[{"group":"Start","pages":[{"title":"Hi Doctor Partner API overview for developers","sidebarTitle":"Partner API overview","href":"/partners/overview"},{"title":"How the Hi Doctor Partner API works: roles and flow","sidebarTitle":"How it works","href":"/partners/how-it-works"},{"title":"Partner API quickstart: your first test consultation","sidebarTitle":"Quickstart","href":"/partners/quickstart"},{"title":"Partner API authentication: keys, scopes and rotation","sidebarTitle":"Authentication","href":"/partners/authentication"},{"title":"Partner API test mode: synthetic consultations","sidebarTitle":"Test mode","href":"/partners/test-mode"}]},{"group":"Build","pages":[{"title":"Partner API questionnaires: schema and answer format","sidebarTitle":"Questionnaires and schema","href":"/partners/questionnaires-and-schema"},{"title":"Submit a consultation with the Partner API","sidebarTitle":"Submit a consultation","href":"/partners/submit-a-consultation"},{"title":"Partner API photos and files: uploads and limits","sidebarTitle":"Photos and files","href":"/partners/photos"},{"title":"Partner API consultation lifecycle and statuses","sidebarTitle":"Consultation lifecycle","href":"/partners/consultation-lifecycle"},{"title":"Partner API prescriptions: data, status and events","sidebarTitle":"Prescriptions","href":"/partners/prescriptions"},{"title":"Partner API webhooks: events, signing and retries","sidebarTitle":"Webhooks","href":"/partners/webhooks"},{"title":"Partner API information requests from the doctor","sidebarTitle":"Information requests","href":"/partners/information-requests"},{"title":"Partner API errors: envelope and error codes","sidebarTitle":"Errors","href":"/partners/errors"},{"title":"Partner API rate limits: per key and per partner","sidebarTitle":"Rate limits","href":"/partners/rate-limits"},{"title":"Partner API idempotency: retry submissions safely","sidebarTitle":"Idempotency","href":"/partners/idempotency"},{"title":"Partner API pagination with opaque cursors","sidebarTitle":"Pagination","href":"/partners/pagination"},{"title":"Partner API versioning policy and changelog","sidebarTitle":"Versioning and changelog","href":"/partners/versioning-and-changelog"}]},{"group":"Operate","pages":[{"title":"Hi Doctor Business portal for Partner API teams","sidebarTitle":"Business portal","href":"/partners/business-portal"},{"title":"Partner API security, GDPR and patient consent","sidebarTitle":"Security and compliance","href":"/partners/security-and-compliance"},{"title":"Partner API go-live checklist before live mode","sidebarTitle":"Go-live checklist","href":"/partners/go-live-checklist"},{"title":"Partner API FAQ for developers","sidebarTitle":"Developer FAQ","href":"/partners/faq"}]},{"group":"Partner API reference","pages":[{"group":"Connectivity","pages":[{"title":"Check an API key","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json get /v1/partner/ping/","href":"/api-reference/connectivity/check-an-api-key"}]},{"group":"Products","pages":[{"title":"List products","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json get /v1/partner/products/","href":"/api-reference/products/list-products"}]},{"group":"Questionnaires","pages":[{"title":"Get a questionnaire","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json get /v1/partner/questionnaires/{slug}/","href":"/api-reference/questionnaires/get-a-questionnaire"}]},{"group":"Files","pages":[{"title":"Upload a photo or document","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json post /v1/partner/files/","href":"/api-reference/files/upload-a-photo-or-document"}]},{"group":"Consultations","pages":[{"title":"List consultations","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json get /v1/partner/consultations/","href":"/api-reference/consultations/list-consultations"},{"title":"Submit a consultation","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json post /v1/partner/consultations/","href":"/api-reference/consultations/submit-a-consultation"},{"title":"Get a consultation by id","description":"The current state of one consultation: status, decision, open information request, prescriptions and billing. Requires the consultations:read scope.\n\n### Access, effects and retries\n**Ownership:** The API key's own partner and mode (test or live); another partner's or mode's records answer 404.\n\n**Prerequisites:** A partner API key with the `consultations:read` scope.\n\n**Effects:** None.\n\n**Retries:** Safe to retry.","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json get /v1/partner/consultations/{consultation_id}/","href":"/api-reference/consultations/get-a-consultation-by-id"},{"title":"Cancel a consultation","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json post /v1/partner/consultations/{consultation_id}/cancel/","href":"/api-reference/consultations/cancel-a-consultation"}]},{"group":"Patients","pages":[{"title":"List patients","description":"Patients you have submitted consultations for, in this key's mode, newest first. Requires the patients:read scope.\n\n### Access, effects and retries\n**Ownership:** The API key's own partner and mode (test or live).\n\n**Prerequisites:** A partner API key with the `patients:read` scope.\n\n**Effects:** None.\n\n**Retries:** Safe to retry.","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json get /v1/partner/patients/","href":"/api-reference/patients/list-patients"},{"title":"Get a patient","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json get /v1/partner/patients/{patient_id}/","href":"/api-reference/patients/get-a-patient"},{"title":"Record a consent withdrawal","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json post /v1/partner/patients/{patient_id}/consent-withdrawal/","href":"/api-reference/patients/record-a-consent-withdrawal"}]},{"group":"Information requests","pages":[{"title":"List a consultation's information requests","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json get /v1/partner/consultations/{consultation_id}/info-requests/","href":"/api-reference/information-requests/list-a-consultations-information-requests"},{"title":"Answer an information request","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json post /v1/partner/consultations/{consultation_id}/info-requests/{request_id}/answer/","href":"/api-reference/information-requests/answer-an-information-request"},{"title":"Answer an information request by id","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json post /v1/partner/info-requests/{request_id}/answer/","href":"/api-reference/information-requests/answer-an-information-request-by-id"}]},{"group":"Prescriptions","pages":[{"title":"List prescriptions","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json get /v1/partner/prescriptions/","href":"/api-reference/prescriptions/list-prescriptions"},{"title":"Get a prescription","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json get /v1/partner/prescriptions/{prescription_id}/","href":"/api-reference/prescriptions/get-a-prescription"}]},{"group":"Webhooks","pages":[{"title":"List webhook endpoints","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json get /v1/partner/webhook-endpoints/","href":"/api-reference/webhooks/list-webhook-endpoints"},{"title":"Create a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json post /v1/partner/webhook-endpoints/","href":"/api-reference/webhooks/create-a-webhook-endpoint"},{"title":"Get a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json get /v1/partner/webhook-endpoints/{endpoint_id}/","href":"/api-reference/webhooks/get-a-webhook-endpoint"},{"title":"Update a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json patch /v1/partner/webhook-endpoints/{endpoint_id}/","href":"/api-reference/webhooks/update-a-webhook-endpoint"},{"title":"Delete a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json delete /v1/partner/webhook-endpoints/{endpoint_id}/","href":"/api-reference/webhooks/delete-a-webhook-endpoint"},{"title":"Rotate a webhook signing secret","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json post /v1/partner/webhook-endpoints/{endpoint_id}/rotate-secret/","href":"/api-reference/webhooks/rotate-a-webhook-signing-secret"},{"title":"Send a test event","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json post /v1/partner/webhook-endpoints/{endpoint_id}/test/","href":"/api-reference/webhooks/send-a-test-event"},{"title":"List deliveries for an endpoint","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json get /v1/partner/webhook-endpoints/{endpoint_id}/deliveries/","href":"/api-reference/webhooks/list-deliveries-for-an-endpoint"},{"title":"Replay a delivery","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json post /v1/partner/webhook-deliveries/{delivery_id}/replay/","href":"/api-reference/webhooks/replay-a-delivery"}]},{"group":"Test mode","pages":[{"title":"Move a test consultation forward","deprecated":null,"version":null,"openapi":"/api-reference/partner/openapi.json post /v1/partner/test/consultations/{consultation_id}/advance/","href":"/api-reference/test-mode/move-a-test-consultation-forward"}]}]}]},{"tab":"Articles","pages":[{"title":"Articles","href":"/blog/connect-hi-doctor-mcp"}]},{"tab":"Health library","pages":[{"title":"Health library","href":"/library/overview"}]}]},"basePath":"","title":"Cancel a consultation - Hi Doctor","buildId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","deploymentId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DX1Meug0.js","utils-B_OMIQVC.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-ChxhRPMa.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CuKvD8Iv.js","snippetPresets-C5d7p2hp.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CfHcE8m4.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C1zZV314.js","shallow-CmQhqCJn.js","getApiPlaygroundDisplay-YRo9s1O7.js","CodeSnippet-RN1MTdfk.js","CodeSnippets-DKLPHxJA.js","Page-BAvA99GL.js","getPastedJson-bz0M41mU.js","icon-CsmhpPrv.js","MethodPill-CNGsVE77.js","DuplicateIcon-DilfU_Z2.js","createIcon-BdsYzQck.js","DynamicMarkdown-CbqEDjbV.js","SectionHeading-O6hXpFCN.js","axios-vUo_bRtp.js","Markdown-nKm-uidQ.js","clsx-ClVdStUn.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CIQkMg3R.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-ImrFS4Fy.js"]}