# SmileLine Docs > SmileLine is the CRM for dental practices: lead capture, calling, patient > records, booking and marketing, with a JSON HTTP API behind all of it. - [All guides and concepts as one file](/llms-full.txt) - [OpenAPI specification](/openapi.json) - Guides: How to use the SmileLine CRM - [Welcome to SmileLine](/guides): The CRM built for dental practices — capture leads, run your day, and keep every patient conversation in one place. - **Get started** - Getting started - [Sign in](/guides/getting-started/sign-in): Sign in to SmileLine with your email and password or with Google or Apple, and reset your password when you forget it. - [Create your practice](/guides/getting-started/create-organization): Set up your practice organisation in SmileLine and invite your team with the right roles. - [Workspaces](/guides/getting-started/workspaces): SmileLine has a CRM workspace and a clinical workspace. Learn which one your role opens, where you land after sign-in, and how to switch between them. - [Quick search](/guides/getting-started/quick-search): Jump to any patient, page or setting from anywhere in SmileLine with one shortcut. - [Demo data](/guides/getting-started/demo-data): Seed your practice with realistic sample records, then remove an unchanged set or archive a modified one safely. - **Daily work** - Today - [Overview](/guides/today/overview): The Today page is your daily work queue — who to contact, what's overdue, and new leads the moment they arrive. - [Outcomes and undo](/guides/today/outcomes-and-undo): Record what happened on each queue item with the outcome wizard, and undo a just-recorded outcome. - Power dialer - [Run a dialing session](/guides/dialer): Start a dialing session from Today and let SmileLine call each lead for you as you work down the queue. - [Set up dialing](/guides/dialer/setup): Get the practice ready to dial — SmileLine Voice for the full phone system, or assisted dialing through the phone system you already have. - [Call recording](/guides/dialer/recording): Record dialer calls for training and dispute resolution with consent, central retention controls and a full audit trail. - Desktop app - [Desktop app](/guides/desktop-app): Smileline Desk keeps the Today queue, inbox, calendar, patients, the clinical day list and optional practice calling together in a dedicated desktop app. - [Install and sign in](/guides/desktop-app/install): Download Smileline Desk for macOS or Windows, sign in once, and stay signed in. - [Calls on the desk](/guides/desktop-app/calls): Incoming screen pops, click-to-call for Smileline Voice practices, and dialing sessions for everyone else. - [The call log](/guides/desktop-app/call-log): Every call in and out of the practice, with recordings, AI transcripts and summaries, without leaving the desk. - [Tray and availability](/guides/desktop-app/tray-and-availability): Hide the desk to the tray and keep ringing, or switch to Do not disturb when you step away. - Mobile app - [Mobile app](/guides/mobile-app): The Smileline app for iPhone and Android puts the Today queue, the clinical day list, the inbox, your calls and the dashboard in your pocket, with push notifications for new leads and replies. - [Calls on your phone](/guides/mobile-app/calls): With Smileline Voice the mobile app can call leads over the practice line and run Power Dialer sessions while the app is open. - [Browser extension](/guides/browser-extension): The SmileLine Chrome extension puts a free on-page SEO report, link analysis and Google result positions one click away — and, signed in, your practice dialer. - Desk phones - [Desk phones](/guides/desk-phones): Ring a physical SIP handset directly on one of your numbers — even when SmileLine is unreachable — and understand exactly what that number gives up in return. - [Yealink](/guides/desk-phones/yealink): Register a Yealink T3x, T4x or T5x series IP phone on your desk phone line. - [Grandstream](/guides/desk-phones/grandstream): Register a Grandstream GRP26xx series IP phone on your desk phone line. - [Poly](/guides/desk-phones/poly): Register a Poly VVX x50 or Edge E series IP phone on your desk phone line. - [Fanvil](/guides/desk-phones/fanvil): Register a Fanvil X-series IP phone on your desk phone line. - [Cisco](/guides/desk-phones/cisco): Register a Cisco 68xx or 88xx multiplatform (MPP) phone on your desk phone line. - [Cordless (DECT)](/guides/desk-phones/dect): Register a Yealink W-series DECT base station so cordless handsets ring on your desk phone line. - [Analogue adapter (ATA)](/guides/desk-phones/ata): Keep an existing analogue phone by registering a Grandstream HT801 or HT802 adapter on your desk phone line. - Patients - [List and filters](/guides/patients/list-and-filters): Search, filter, and sort the patients table to find exactly the records you need. - [Saved views](/guides/patients/saved-views): Save reusable patient list filters for yourself or the whole practice. - [CSV export](/guides/patients/csv-export): Download the patients you're currently looking at as a CSV file. - [Bulk actions](/guides/patients/bulk-actions): Select many patients at once to tag them, set their location, export them, or archive them. - [The patient record](/guides/patients/patient-detail): Everything about one patient — contact details, tags, treatment journeys, and a full activity timeline. - [Clinical chart](/guides/patients/clinical-chart): Record findings and plan, complete or void procedures on the patient's chart in the PMS workspace. - [Periodontal examinations](/guides/patients/perio): Six-site probing charts, BPE and PSR screening, BEWE and soft-tissue examinations on the clinical record — drafted, completed and amended with every earlier version kept. - [Treatment plans](/guides/patients/treatment-plans): Draft a plan from charted procedures, present it, record the patient's signed acceptance and follow it through treatment. - [Clinical notes and medical history](/guides/patients/clinical-notes): Write, complete and sign clinical notes, and keep the patient's conditions, medications, allergies and alerts as an append-only history. - [Patient forms and recalls](/guides/patients/forms-and-recalls): Record a patient's form answers at the desk, have a clinician review them into the medical history, and keep recalls moving. - [Account and payments](/guides/patients/ledger): The patient's ledger on the clinical record — charges, payments (cash, card or on a card reader), refunds, adjustments, reversals, invoices, credit notes and period close. - [Insurance cover and estimates](/guides/patients/insurance): Record who covers a patient, in what order, what benefit has been used this year, and estimate the insurance portion of planned treatment. - [Insurance claims](/guides/patients/claims): Build a claim from completed treatment, send it to the clearinghouse, check eligibility, and record what the payer answers. - [NHS details](/guides/patients/nhs): Record a patient's NHS number, exemption or remission, and ethnicity so the FP17 cites them. - [Prescriptions](/guides/patients/prescriptions): Draft a prescription with its items, issue and print it with a fresh sign-in, and void one that must not be dispensed. - [Lab cases and referrals](/guides/patients/lab-and-referrals): Track work sent to a lab through to fitting, and referrals to or from other clinicians through to their outcome. - [Letters and the waitlist](/guides/patients/letters-and-waitlist): Generate letters from templates and file them on the patient, and keep patients who are waiting for an earlier or specific appointment on the waitlist. - [Worklists](/guides/patients/worklists): What needs doing across the practice — recalls due, treatment accepted but not booked, notes not yet signed, balances unpaid, lab work back and referrals awaiting an outcome — as lists derived live from the record. - Journeys - [Boards and stages](/guides/journeys/boards-and-stages): Track every treatment enquiry through your pipeline on the Journeys board. - [Move, close, and reopen](/guides/journeys/move-close-reopen): Move journeys between stages, mark them won or lost, and reopen closed ones. - Booking deposits - [Set up booking deposits](/guides/deposits/setup): Connect the practice's Stripe account and configure deposit amounts, link expiry and the no-show policy. - [Request and track deposits](/guides/deposits/requests): Send a deposit payment link mid-call, record cash payments, and handle refunds and no-shows. - Calendar - [Calendar](/guides/calendar/overview): A month at a glance — results on past days, workload on future days, and a drill-down behind every date. - [Diary](/guides/calendar/diary): The clinical workspace's day — a column per practitioner or room on an hour rail shaded by the rota, a date picker that shows how busy each day is, booking by click or drag, editing in the card, a 3-day view, and a short-notice gap filler. - Inbox - [Working with conversations](/guides/inbox/conversations): Read, answer and triage patient messages from every channel in one place. - [Channels](/guides/inbox/channels): How WhatsApp, SMS, email, Telegram, Messenger, Instagram, TikTok, comments and live-chat messages reach the Inbox, and the rules for each channel. - [Message templates](/guides/inbox/templates): Insert reusable message snippets in the composer, and manage the practice's template library. - [AI assist](/guides/inbox/ai-assist): Draft replies and summarise long conversations with AI, without anything sending on its own. - Team chat - [Team chat](/guides/team-chat): Message colleagues directly or in a group without leaving the page you are working on. - **Grow** - Lead capture - [Website tracking](/guides/lead-capture/website-tracking): Install one snippet so SmileLine finds your website's forms, captures their submissions and attributes every enquiry. - [Website forms](/guides/lead-capture/website-forms): Build forms in SmileLine, confirm the forms detected on your website, and manage every enquiry endpoint from one list. - [Call tracking](/guides/lead-capture/call-tracking): Phone numbers that attribute every call — rotating numbers for your website, and static numbers for the adverts you print. - [Native lead ads](/guides/lead-capture/native-lead-ads): Connect Meta, Google Ads, and TikTok lead forms directly to Smileline, map their fields, and review capture exceptions. - [Intake review](/guides/lead-capture/intake-review): Correct and acknowledge capture warnings without losing a lead or silently changing CRM data. - [Review queue](/guides/lead-capture/review-queue): Recover, resolve, or discard inbound submissions that could not be processed — nothing sent to SmileLine is ever silently lost. - [Attribution](/guides/lead-capture/attribution): How SmileLine records where every lead came from, and where to see it. - **Advanced** - [Custom integrations](/guides/lead-capture/custom-integrations): Give your own form, backend or third-party tool a SmileLine capture endpoint, with optional signed server-to-server delivery. - [Post leads from your own code](/guides/lead-capture/direct-posting): Point a website form or script at a capture endpoint URL so submissions become leads automatically. - Online booking - [Set up online booking](/guides/online-booking/setup): Let patients book real appointments themselves — from your website, your ads, or a link in any message. - [How bookings work](/guides/online-booking/bookings): Slot holds, deposits, confirmations and the manage links patients use to reschedule or cancel. - Referrals - [Set up the referral programme](/guides/referrals/setup): Configure rewards for both sides, the qualification rules and the terms that make the offer compliant, then switch the programme on. - [Enroll patients and capture referrals](/guides/referrals/sharing): Give patients their personal link, code and QR, and record the referrals that arrive online, by booking or verbally at reception. - [Approve and fulfil rewards](/guides/referrals/rewards): Work the approval queue on the Referrals page, mark rewards issued, and understand the referral lifecycle end to end. - Chat widget - [Set up the chat widget](/guides/chat-widget/setup): Add the SmileLine messenger to your practice website with one line of code. - [Guided qualifier](/guides/chat-widget/scripted-flow): Configure the treatment picker, qualifying questions and contact capture the widget walks visitors through. - [AI assistant](/guides/chat-widget/ai-assistant): Let the widget answer dental and practice questions, qualify leads, and connect booking-ready visitors to your online funnel. - Automations - [Automations](/guides/automations): Nurture sequences and appointment reminders that message patients for you. - [Sequences](/guides/automations/sequences): Multi-step nurture that starts when a lead enters a stage and stops the moment a human takes over. - [Appointment reminders](/guides/automations/reminders): Confirmations, move notices, pre-visit reminders, post-visit follow-ups and no-show recovery — anchored to the appointment. - Marketing - [Outbound campaigns](/guides/marketing/campaigns): Message a filtered patient segment once by SMS, email or WhatsApp, with consent checks, scheduling and delivery results. - [Marketing consent](/guides/marketing/consent): Record channel-specific consent evidence and understand how SmileLine separates marketing from essential messages. - [Ads workspace](/guides/marketing/ads): Capture leads from ad platforms, feed results back to them, and manage campaigns — and understand what's included in Core versus the add-on. - [ChatGPT Ads](/guides/marketing/chatgpt-ads): Advertise inside ChatGPT with an API key, attribute the leads that arrive on your website, and feed bookings back to OpenAI. - [Conversion feedback](/guides/marketing/conversion-feedback): Report Lead, Booked and Won back to Google, Meta, TikTok and ChatGPT automatically, so platform optimisation learns from real practice outcomes. - [Ad campaigns](/guides/marketing/ads-campaigns): Create supported Meta campaigns, manage campaigns imported from every connected ads platform, and let external edits win. - [Creative studio](/guides/marketing/creative-studio): Generate on-policy ad copy and images from guided templates, then pick and approve the variants you want to run. - [SEO & Ads](/guides/marketing/seo-and-ads): Open the SEO workspace, choose the right visibility tool, and understand access when the add-on is inactive. - [Use the SEO overview](/guides/marketing/seo-overview): Read the visibility score, search-attributed leads, provider budget and priority SEO actions. - [Track search visibility](/guides/marketing/search-visibility): Manage keywords, inspect the local position grid, run research and connect Google Search Console. - [Manage Google Business Profile](/guides/marketing/google-business-profile): Connect Google, map locations, audit a mapped profile, approve proposed fixes, prepare posts and upload photos. - [Reputation management](/guides/marketing/reputation): Request patient feedback, monitor Google reviews, respond safely, and route private feedback to your team. - [Audit your website SEO](/guides/marketing/website-seo): Run a bounded public-site audit, prioritise retained findings and email an immutable fix brief. - [Monitor AI visibility](/guides/marketing/ai-visibility): Sample whether supported AI search products mention or cite your practice and inspect retained evidence excerpts. - [Monitor directory listings](/guides/marketing/listings): Compare practice contact details across directories, confirm a listing and follow a guided fix link. - [Create reviewed SEO content](/guides/marketing/content-studio): Generate a research brief, write in the TipTap editor, request clinical review and export an approved revision. - Reports - [Reports overview](/guides/reports/overview): What each report shows and how to filter, compare and share them. - [Calls](/guides/reports/calls): Inbound calls on your numbers — answered against missed, ring time, which campaign and keyword the callers came from, who took them, and the missed calls nobody rang back. - [Patient value and retention](/guides/reports/patient-value): How to read the cohort grid, what counts as a patient, and why these two reports won't match Revenue summary. - [Money reports](/guides/reports/money): Day sheet and takings, aged debt, production, collections, associate pay and chair utilisation — every figure read from the patient ledger. - **Partners** - Partner programme - [Partner programme](/guides/partner-programme): Bring practices to Smileline, set them up on the free plan, and earn a share of what they pay every month. - **Configure** - Settings - [Vocabularies](/guides/settings/vocabularies): Manage the seven lookup lists that power dropdowns across SmileLine. - [Locations & operatories](/guides/settings/locations-and-operatories): Set up your practice's sites and the treatment rooms inside them. - [Practitioners](/guides/settings/practitioners): Maintain the list of clinicians appointments are booked with. - [Rotas and time off](/guides/settings/rota): Working hours for every member of staff, and time off that is requested, approved and cancelled with its reason — approved practitioner absences leave online booking. - [Clinical catalogue](/guides/settings/clinical-catalogue): Set up the procedure codes, fees, price lists, recall types, note templates and patient forms the clinical workspace charts and charges with. - [Clinical storage](/guides/settings/clinical-storage): How clinical documents are kept, verified and backed up, and how to replay a stalled copy. - [Card readers](/guides/settings/card-readers): Buy a Stripe Terminal reader, set it up and register it, see whether it is online, and understand how a card-present payment reaches the patient ledger. - [Insurance carriers, plans and benefits](/guides/settings/insurance): Set up the US carriers and plans the practice bills, and keep each plan's benefit design so estimates and claims cite the right figures. - [NHS contracts, targets and rates](/guides/settings/nhs): Record the practice's NHS England contracts, each contract year's UDA and UOA targets, the performers on each contract, and read the band rates in force. - [Accounting](/guides/settings/accounting): Connect Xero or QuickBooks Online and post one balanced journal per location per day. - [Sistema TS](/guides/settings/sistema-ts): Report paid Italian invoices to the Sistema Tessera Sanitaria for the patient's pre-filled tax return. - [Italian practices](/guides/settings/italy): What an Italian practice gets on day one — roles, VAT, yearly invoice numbering, the stamp duty, Sistema TS and Italian defaults. - [Compliance](/guides/settings/compliance): Recurring checks, sterilisation cycles, incidents, policies and staff records in one place. - [Professional contacts](/guides/settings/professional-contacts): Keep the labs, referrers, specialists and GPs the practice works with, so lab cases and referrals can name them. - [Letter templates](/guides/settings/letter-templates): Write the letters the practice sends, with merge tags for the patient and the practice, and keep every version. - [Treatment templates](/guides/settings/treatment-templates): Save common combinations of procedures as templates and add them to a draft treatment plan in one step. - [Channels](/guides/settings/channels): Connect WhatsApp, SMS, email, Telegram, Messenger, Instagram, TikTok and comment accounts to the shared inbox. - [Sending domains](/guides/settings/sending-domains): Send patient email from your own domain instead of the shared SmileLine one. - [Connected accounts](/guides/settings/connections): See every Google, Meta and vendor account SmileLine is signed in to, whether each one is working, and what happens when one stops. - [PMS integrations](/guides/settings/integrations): Connect a practice management system, map its sites, review patient matches, and monitor automatic polling. - [Zapier](/guides/settings/zapier): Connect Smileline to Zapier so enquiries, appointments and tasks can start work in the other tools your practice uses. - [Voice and calling](/guides/settings/voice): Turn on SmileLine Voice, provision the practice's calling, choose how many concurrent lines you need, and let each person enable calling on their own device. - [Phone numbers](/guides/settings/voice-numbers): The practice's whole number inventory — order UK or US numbers, complete UK verification where it applies, bring your existing numbers in, move a number between the phone system and call tracking, and pick the outbound caller ID. - [Emergency calling](/guides/settings/emergency-calling): How 999, 112 and 911 work from Smileline — register each number to the location it serves, tell each device where it is calling from, and know what the phone system cannot do in an outage. - [Call routing](/guides/settings/call-routing): Decide who rings when a number is called, what happens outside opening hours, and how a keypad menu sends callers to the right team. - [Voicemail](/guides/settings/voicemail): Hear what callers left when nobody could answer, read the transcript, and see which messages are still new. - [AI receptionist](/guides/settings/ai-receptionist): Let the practice's AI voice agent answer calls in natural conversation — book appointments, capture new enquiries, transfer to the team, and cover the hours nobody is at the desk. - [AI outbound calling](/guides/settings/ai-outbound-calling): Let the AI voice agent ring new enquiries back — assignment rules, the per-lead hand-over, the calling window, attempt limits, and what happens when it gives up. - [Phone providers](/guides/settings/phone-providers): Keep the phone system your practice already uses — JustCall, Aircall or VoiceStack — and still get calls on the patient's timeline, callers recognised while the phone rings, and assisted power dialing. - [Notifications](/guides/settings/notifications): The bell tells you what happened while you were looking somewhere else — and nags when a new lead still hasn't been called. - [Your language](/guides/settings/language): Choose the language the Smileline apps use for you — on the web, in Smileline Desk and in the mobile app. - [Practice details](/guides/settings/practice): Set your practice identity, messaging defaults, data retention and operational defaults. - [Billing and subscription access](/guides/settings/billing): Manage the Core subscription and add-ons, and understand exactly what happens after a failed payment or cancellation. - [Import & export](/guides/settings/import-export): Move core practice data between SmileLine accounts, import CRM CSVs, or export clearly labelled entity CSVs. - [Practice archive](/guides/settings/practice-archive): Take the complete record of the practice out as machine-readable files with an index of every part and original document, a manifest and a validation report. - [Activity log](/guides/settings/activity-log): Review the append-only record of important practice changes, imports, exports and staff actions. - [Agreements](/guides/settings/agreements): See the legal agreements in place for your practice — terms, privacy, data processing and the ones specific to your country — with who accepted them and when. - API Reference: The SmileLine HTTP API - [Overview](/reference): Base URLs, organization scoping, and the conventions shared by every SmileLine API endpoint. - [Authentication](/reference/authentication): Authenticate with an API key or an OAuth connection over Bearer auth, or ride the browser session. Roles decide what you can write. - [Errors](/reference/errors): Every error uses one JSON envelope, with a machine-readable code where it helps. - [Pagination](/reference/pagination): Offset pagination for most lists, cursor pagination for conversation feeds. - [Rate limits](/reference/rate-limits): Token-bucket limits protect public intake, booking, referral, chat and AI surfaces, while campaigns have configurable delivery pacing. - [Webhooks](/reference/webhooks): Send signed CRM events to your systems and understand the provider callbacks SmileLine receives. - Build an app - [Register an app](/reference/build-an-app): Create a developer account at developer.smileline.io, register an OAuth app, and understand the lifecycle from development to approval. - [Connect a practice with OAuth](/reference/build-an-app/oauth): The authorization-code flow with PKCE against Smileline's global authorise and token URLs, and what to keep from the token response. - [Scopes](/reference/build-an-app/scopes): The permission areas a developer app can request, what each covers, and which webhook events it admits. - [App webhooks](/reference/build-an-app/webhooks): One delivery URL and signing secret per app; how Smileline materialises a verified endpoint for every connected practice and what it sends. - [Test with real practices](/reference/build-an-app/testing): Apps are live in both regions from the moment they are created; what the unreviewed notice and the 25-practice cap mean while you build. - [Submit for approval](/reference/build-an-app/approval): What to have ready before you submit, what a reviewer looks at, and what changes when an app is approved, sent back or disabled. - **Endpoints** - Patients - Patients - [List patients](/reference/patients/patients/get): Paginated list. q is a typo-tolerant (trigram) search over name, email, phones, fiscal code and address (street, city, postal code). `filters` is URL-encoded JSON matching the PatientFilters schema; keys are AND-ed. sort=relevance ranks by similarity to q. embed=tags attaches each row's tags. Archived patients are excluded unless includeArchived=true or a status filter asks for archived. - [Create a patient](/reference/patients/patients/post) - Bulk - Archive - [Archive many patients](/reference/patients/patients/bulk/archive/post): Sets archivedAt and status=archived on every listed patient still unarchived. Requires the patient delete permission. 409 ARCHIVE_REASON_REQUIRED (details.underCalledLeads) when the selection holds leads under five contact attempts and no reason was sent; nothing is archived. - Location - [Assign many patients to a location](/reference/patients/patients/bulk/location/post): Sets (or clears, with locationId=null) the location on every listed patient; ids outside the organization are ignored. Returns the number of patients touched. - Tags - [Add/remove tags on many patients](/reference/patients/patients/bulk/tags/post): Idempotent per patient-tag pair; ids outside the organization are ignored. Returns the number of patients touched. - Export - [Export patients as CSV](/reference/patients/patients/export/get): Same filtering as GET /patients (q, filters, includeArchived…). `columns` selects and orders the CSV columns; `ids` restricts to a selection. Caps at 10000 rows — code EXPORT_TOO_LARGE. - Id - [Erase a patient](/reference/patients/patients/id/delete): Owner only. Permanently deletes the patient and everything keyed to them — journeys, activities, conversations, calls, voicemails and transcripts — and schedules every stored call recording for deletion, all in one transaction: if anything fails the patient and their recordings are untouched. This is the right-to-erasure action; use Archive to hide a record while keeping its history. - [Get a patient with tags](/reference/patients/patients/id/get): embed=timeline,journeys,touches folds the first timeline page, the patient's journeys and the capture-attribution touches into the response — a detail view's single data call. - [Update a patient](/reference/patients/patients/id/patch): 409 PATIENT_MERGED when the patient was merged into another record; the survivor's id rides on details.mergedIntoPatientId. - Archive - [Archive a patient](/reference/patients/patients/id/archive/post): Sets archivedAt and status=archived. Idempotent. 409 PATIENT_MERGED when the patient was merged into another record. 409 ARCHIVE_REASON_REQUIRED when a lead under five contact attempts is archived without a reason; the reason is saved on the timeline. - Export - [Export everything held about one patient](/reference/patients/patients/id/export/get): The subject-access package as JSON: profile, calls, voicemails, transcripts, and short-lived signed links to stored recordings. The export is written to the audit log; the links are not. - Marketing preferences - [Get a patient's per-channel marketing preferences](/reference/patients/patients/id/marketing-preferences/get) - Channel - [Record marketing consent or an opt-out with evidence](/reference/patients/patients/id/marketing-preferences/channel/put): Writes the current projection and an append-only evidence event in one transaction. Soft opt-in must be recorded and is never inferred from patient status. - Notes - [Add a note to the patient timeline](/reference/patients/patients/id/notes/post) - Referral - [Patient's referral-programme view](/reference/patients/patients/id/referral/get): The patient page panel: advocate enrollment (share link, code, status page), referrals they've made, rewards they hold, and who referred them. - Enroll - [Enroll a patient as a referral advocate](/reference/patients/patients/id/referral/enroll/post): Creates (or re-activates) the patient's advocate record with a share link, human-readable code and status page, and sends the welcome message on their preferred channel. 400 PROGRAM_DISABLED while the programme is off. - Tags - [Add a tag to a patient](/reference/patients/patients/id/tags/post): Idempotent; returns the patient's current tags. 409 PATIENT_MERGED when the patient was merged into another record. - Tagid - [Remove a tag from a patient](/reference/patients/patients/id/tags/tagid/delete): Idempotent; returns the patient's current tags. 409 PATIENT_MERGED when the patient was merged into another record. - Timeline - [Patient activity timeline](/reference/patients/patients/id/timeline/get): Activities for the patient, newest first. - Saved views - Saved views - Entity - [List saved views for an entity](/reference/saved-views/saved-views/entity/get): The caller's own views plus org-shared views. - [Create a saved view for an entity](/reference/saved-views/saved-views/entity/post) - Id - [Delete a saved view](/reference/saved-views/saved-views/entity/id/delete) - [Update a saved view](/reference/saved-views/saved-views/entity/id/patch): Owners edit their own views; org admins/owners may also edit shared views. - Appointments - Appointments - [List appointments in a date range](/reference/appointments/appointments/get) - [Book an appointment](/reference/appointments/appointments/post): Uses requestId as the idempotency key. Practitioner or operatory collisions return 409 unless an owner or manager deliberately supplies an overbook reason. - Id - [Get an appointment](/reference/appointments/appointments/id/get) - [Update an appointment](/reference/appointments/appointments/id/patch): Requires the current version. Time or resource conflicts return 409 unless an owner or manager deliberately supplies an overbook reason. - Approve - [Approve a pending online booking](/reference/appointments/appointments/id/approve/post): Confirms an online booking request: pending → booked, the patient's booking confirmation and reminders schedule now, and the Today confirm task completes. Unpaid deposit holds can't be approved. Declining is a normal /cancel. - Cancel - [Cancel an appointment](/reference/appointments/appointments/id/cancel/post) - Status - [Progress an appointment's status](/reference/appointments/appointments/id/status/post): Stamps the matching timestamp column (confirmedAt, arrivedAt, seatedAt, fulfilledAt, noShowAt). Cancellation goes through /cancel. - Journeys - Journeys - [List journeys](/reference/journeys/journeys/get): Pass embed=patient to include a compact patient on each row. - [Create a journey](/reference/journeys/journeys/post): Writes the initial stage transition and timeline activity, and promotes the patient from enquiry to lead. - Id - [Get a journey](/reference/journeys/journeys/id/get): Pass embed=patient to include the same compact patient the list embeds, so a caller that needs both does not pay a second round trip. - [Update a journey](/reference/journeys/journeys/id/patch): Stage and status never change here — use move, close and reopen. - Ai handling - [Hand a lead to the AI or take it back](/reference/journeys/journeys/id/ai-handling/post): The per-lead toggle. Enabling clears a prior release and (re)queues the journey; the lifetime dial-attempt budget never resets. Optimistic concurrency via expectedVersion. - Close - [Close a journey as won or lost](/reference/journeys/journeys/id/close/post) - Junk - [Remove a journey's junk mark](/reference/journeys/journeys/id/junk/delete): Clears the junk flag. Conversion events already suppressed while the journey was junk stay suppressed — suppression is the safe direction, and the ad platforms' upload windows may have passed. - [Mark a journey as junk](/reference/journeys/journeys/id/junk/post): A junk lead was never a real enquiry: ad-platform conversion feedback is suppressed for it, in addition to whatever the journey's own status says. Independent of losing — losing with a marksJunk reason stamps this automatically. - Move - [Move a journey to another stage](/reference/journeys/journeys/id/move/post): Entering a "won" stage also sets status=won and closedAt. - Reopen - [Reopen a closed journey](/reference/journeys/journeys/id/reopen/post) - Pipelines - Pipelines - [List pipelines with their stages](/reference/pipelines/pipelines/get) - [Create a pipeline](/reference/pipelines/pipelines/post): Creates the required entry and won stages. isDefault=true atomically moves the organization's default pointer. - Id - [Update a pipeline](/reference/pipelines/pipelines/id/patch) - Archive - [Archive a pipeline](/reference/pipelines/pipelines/id/archive/post): Refused for the default pipeline or while active journeys sit in the pipeline. - Restore - [Restore an archived pipeline](/reference/pipelines/pipelines/id/restore/post): Clears archivedAt only — does NOT restore isDefault. Idempotent. - Stages - [Add a stage to a pipeline](/reference/pipelines/pipelines/id/stages/post) - Reorder - [Reorder a pipeline's stages](/reference/pipelines/pipelines/id/stages/reorder/post): Sets position for each item in one transaction; an id outside the pipeline rolls the batch back. Returns all of the pipeline's stages (archived included). - Stageid - [Update a stage (rename, reorder, category, color)](/reference/pipelines/pipelines/id/stages/stageid/patch) - Archive - [Archive a stage](/reference/pipelines/pipelines/id/stages/stageid/archive/post): Refused (400) while active journeys sit in the stage. - Restore - [Restore an archived stage](/reference/pipelines/pipelines/id/stages/stageid/restore/post): Clears archivedAt only. Idempotent. - Reorder - [Reorder pipelines](/reference/pipelines/pipelines/reorder/post): Sets position for each item in one transaction; an unknown id rolls the batch back. Returns all pipelines (archived included) with their stages. - Tasks - Tasks - [List tasks](/reference/tasks/tasks/get) - [Create a task](/reference/tasks/tasks/post) - Id - [Get a task](/reference/tasks/tasks/id/get) - [Update a task](/reference/tasks/tasks/id/patch) - Complete - [Complete a task](/reference/tasks/tasks/id/complete/post): Sets status=done, stamps completedAt/completedById and appends a timeline activity when the task has a patient. Idempotent. 409 when the lead is locked by another user on the Today page. - Outcome - [Record a contact outcome for a task](/reference/tasks/tasks/id/outcome/post): Composite wizard commit, atomic: completes the task, stamps the journey's first-contact timestamps, moves the journey forward to the matching systemKey stage when the pipeline has one (booked targets consultation_booked), closes the journey as lost for outcome=not_proceeding (optional lostReasonId), optionally confirms the value (booked), books the consultation into the own diary (`booking`, needs appointment:create; a site a PMS connection covers answers 409 PMS_MANAGED_SITE) or links an existing booked/confirmed appointment (`appointmentId`, needs appointment:update), creates a follow-up task and appends a human-readable timeline activity. Returns an undo receipt valid for 60 seconds; undo never cancels the booking. 409 when the task is not open (TASK_ALREADY_DONE) or the lead is locked by another user (LOCKED); 422 when the site books by chair and no operatory was sent. - Undo - [Undo a just-recorded task outcome](/reference/tasks/tasks/id/outcome/undo/post): Corrects the composite outcome within 60 seconds: cancels the follow-up task, appends reverse transition/activity/correction events, restores the prior projection and reopens the task. History is never deleted. Only the user who recorded the outcome can correct it. - Today - Today - [The Today work queue](/reference/today/today/get): The whole bucketed queue in one response, pre-sorted server-side against the practice's local day: uncontacted new leads (newest first), overdue tasks, today's tasks + enquiry triage cards, and tomorrow's follow-ups. Pass ?date=YYYY-MM-DD (today … today+41, practice-local) to preview a future day — those responses carry only that day's due tasks. Every response includes the rolling 42-day `week` counts. - Diary - [The diary slice Today's slot picker draws](/reference/today/today/diary/get): One practice-local day (or up to seven) of appointments, working time, absences and closures — the /day-list shape without the lab-case flag — for a signed-in member with appointment:read. Today books consultations from it into the own diary or, for a site a PMS connection covers, through POST /pms/patients/:patientId/book. - Load - [How full each day is, for Today's slot picker](/reference/today/today/diary/load/get): Bookable and booked minutes per practitioner per practice-local day (up to 100 days) for a signed-in member with appointment:read. - Ws ticket - [Mint a short-lived voice-audience ticket for the Today socket](/reference/today/today/ws-ticket/post): Requires the dialer permission (and, over OAuth, the dialer scope). The ticket is single-purpose: offer it as the Sec-WebSocket-Protocol on GET /today/ws within 60 seconds. The resulting socket carries voice events only. - Calendar - Calendar - [Per-day business aggregates for a date range](/reference/calendar/calendar/get): One row per practice-local day, zero-filled: new leads, distinct patients contacted (outbound touches + outcome receipts), journeys won/lost with the deal value won, appointments taking place, and open tasks due. Pass from/to (both-or-neither, ≤45 days) — typically a Monday-aligned month grid; omitted = the practice's current month grid. - Detail - [Every row behind a span of calendar days](/reference/calendar/calendar/detail/get): The drill-down for an inclusive practice-local day range (from ≤ to, ≤45 days; a single day when from === to): the overview stats summed over the range, plus the underlying rows merged chronologically — new leads with their source, every outbound contact, all appointments (any status), journeys won/lost with values, and open tasks due. Each section is capped at 200 rows. - Inbox - Conversations - [List conversations](/reference/inbox/conversations/get): Sorted by lastMessageAt DESC with cursor pagination. Without a status filter, closed conversations are excluded. assignee accepts 'me', 'unassigned' or a member user id. q searches peer name/handle and the last-message preview. - [Start an outbound conversation](/reference/inbox/conversations/post): Finds or creates the contact's unified thread for the recipient and sends the first message through it — if the recipient (or the matched patient) already has a thread, the message lands there as a new endpoint and the existing conversation is returned. WhatsApp with no prior inbound requires a template message. - Attachments - [Stage an attachment before a thread exists](/reference/inbox/conversations/attachments/post): Same multipart/form-data shape as the per-conversation upload, for a first message to a contact who has no thread yet. The expiring, one-time upload id is accepted by POST /conversations and by any send from the same user. - Id - [Get a conversation](/reference/inbox/conversations/id/get): embed=messages includes the newest page of messages (ascending) with a cursor for older pages. - [Update a conversation](/reference/inbox/conversations/id/patch): Assign, close/reopen, snooze (status=snoozed + snoozedUntil), link a patient/journey, or mark unread. Linking a patient backfills the timeline; if the patient already has a thread, the two are merged and the survivor is returned (a conversation.merged event re-points open clients). - Ai - Suggest - [AI: suggest a reply](/reference/inbox/conversations/id/ai/suggest/post): Drafts a reply from the recent thread plus the linked patient's context. The draft is editable — nothing is sent. Rate limited per organization. - Summarize - [AI: summarize the conversation](/reference/inbox/conversations/id/ai/summarize/post): Short summary of the thread for handovers; can be saved as an internal note. Rate limited per organization. - Attachments - [Upload an attachment](/reference/inbox/conversations/id/attachments/post): multipart/form-data with a single `file` field (max 16 MiB). Returns an expiring, one-time upload id to include in a subsequent send. - Messages - [List older messages](/reference/inbox/conversations/id/messages/get): Keyset pagination walking backwards from `before`; items are ascending within the page. - [Send a message (or add an internal note)](/reference/inbox/conversations/id/messages/post): Sends through the endpoint named by endpointId (required unless type=note). subjectPatientId identifies which represented patient a message concerns, must belong to that contact, and is required when the contact represents more than one patient (409 CONTACT_PARTY_SUBJECT_REQUIRED). Returns the queued row synchronously for optimistic UI; delivery progresses via WebSocket message.updated events. Notes are never sent to the patient. Sends respect per-channel opt-outs (403 OPTED_OUT), the WhatsApp 24h window (400 WHATSAPP_WINDOW_CLOSED — retry with a template), and the 1 MiB patient-bearing metadata ceiling (413 MESSAGE_CONTENT_METADATA_TOO_LARGE). - Messageid - [Get a single message](/reference/inbox/conversations/id/messages/messageid/get): Hydrates one message for a caller holding only its id — the same row the thread page returns, including the resolved email HTML body. The conversation is part of the lookup, not a check after it: a message id from another thread is indistinguishable from one that does not exist. - Attachments - Index - [Download an attachment](/reference/inbox/conversations/id/messages/messageid/attachments/index/get): Streams the server-owned object after the org check. Active and unknown formats are forced to a safe download. - Retry - [Retry a failed message](/reference/inbox/conversations/id/messages/messageid/retry/post): Re-enqueues a conclusively failed outbound message, keeping its id. Provider-ambiguous delivery cannot be retried because the original may have been accepted. Content already removed by retention cannot be retried (409 MESSAGE_CONTENT_REDACTED). - Read - [Mark a conversation read](/reference/inbox/conversations/id/read/post): Zeroes the org-wide unread counter. Idempotent. - Represented patients - [Add a patient represented by this contact](/reference/inbox/conversations/id/represented-patients/post): Explicitly records a family, guardian, guarantor or other relationship before the shared phone number or email can be used for that patient. - Inbox - Counts - [Inbox badge counts](/reference/inbox/inbox/counts/get): open/mine/unassigned/unread conversation counts plus a per-channel breakdown (closed excluded). - Templates - Templates - [List message templates](/reference/templates/templates/get): Archived templates are excluded unless includeArchived=true. - [Create a message template](/reference/templates/templates/post): channel NULL makes a channel-agnostic snippet. A WhatsApp template is submitted to Meta for approval automatically; its approved template name is derived and written by SmileLine when Meta approves it. - Id - [Get a message template](/reference/templates/templates/id/get) - [Update a message template](/reference/templates/templates/id/patch) - Archive - [Archive a message template](/reference/templates/templates/id/archive/post): Sets archivedAt. Idempotent. - Restore - [Restore an archived message template](/reference/templates/templates/id/restore/post): Clears archivedAt only. Idempotent. - Whatsapp - [Get a WhatsApp template's submissions](/reference/templates/templates/id/whatsapp/get): The organisation's template account and every version of this template submitted to it, newest first. - Submit - [Resubmit a WhatsApp template to Meta](/reference/templates/templates/id/whatsapp/submit/post): Re-arms a rejected or parked version as a fresh draft for the next submission. A version Meta is still reviewing, or has approved, is left alone. - Capture - Capture - Token - [Public lead intake](/reference/capture/capture/token/post): Unauthenticated endpoint for website forms and webhooks. Public-token hooks accept application/json, application/x-www-form-urlencoded and multipart/form-data; URL query parameters are merged underneath the body. Signed hooks accept JSON only with no query string and require X-SmileLine-Delivery-Id, X-SmileLine-Timestamp and X-SmileLine-Signature: v1=, signing timestamp.deliveryId.rawBody with HMAC-SHA256. Timestamps have a five-minute skew allowance and use Unix seconds; deliveryId is the idempotency key and any _sl.event_id must be absent or identical. The hook's fieldMap routes incoming keys to patient fields; each entry is an exact key or a dot path into a nested payload (data.contact.email, answers.0.value), and an exact key always wins over a path. The hook's extraFields ([{key, label}]) promote further incoming keys onto the created journey's customFields as label → value. Attribution is captured automatically into a lead touch: attribution-named keys anywhere in the payload, nested objects included, with the shallowest occurrence winning (utm_*, gclid/gbraid/wbraid, fbclid, msclkid, ttclid, li_fat_id, twclid, epik, sc_click_id, rdt_cid and more, plus landing_url/referrer/user_agent and a forwarded visitor IP as client_ip/visitor_ip/user_ip/remote_ip/ip_address/ip, which beats the request's own IP on server-to-server posts) and/or a structured `_sl` envelope (event_id, visitor_id, urls, url_params, cookies, client_hints, screen, timezone, consent, ga) — envelope values win. `_sl.event_id` is an idempotency key: re-posting the same event_id returns the original result without creating anything. Every bounded unmapped field is preserved verbatim on the touch's raw snapshot. Requests are limited to 64 KiB; the merged body/query snapshot allows at most 100 keys, 128-byte key names, 8 KiB string values, 20 items per array and five levels of nesting. Requires at least a valid email or phone after mapping. Rate limited per hook; unknown, paused and archived tokens all answer 404. - Intake review issues - Intake review issues - [List intake issues that need staff review](/reference/intake-review-issues/intake-review-issues/get): Lists capture-time reference degradations without changing patient data. Staff correct the patient or hook through the existing editors, then acknowledge the issue separately. Reason totals use the selected status and ignore the optional reason filter. - Id - Resolve - [Acknowledge a corrected intake issue](/reference/intake-review-issues/intake-review-issues/id/resolve/post): Records an audited acknowledgement and optional bounded note. It never mutates the patient, journey, hook, or referenced lookup. - Deposit requests - Deposit requests - [List deposit requests](/reference/deposit-requests/deposit-requests/get) - [Create a deposit request and send the payment link](/reference/deposit-requests/deposit-requests/post): Freezes the amount (explicit → treatment override → org default), mints the short payment link and sends it on every selected channel. Per-channel failures are reported in the response, not thrown. Only one pending request may exist for the same journey, appointment, or patient-only subject. - Id - [Get a deposit request](/reference/deposit-requests/deposit-requests/id/get) - Cancel - [Cancel a pending deposit request](/reference/deposit-requests/deposit-requests/id/cancel/post): Voids the payment link; any open Checkout session is expired best-effort. A payment that still lands is auto-refunded. - Forfeit - [Forfeit a paid deposit (no-show)](/reference/deposit-requests/deposit-requests/id/forfeit/post): The practice keeps the money; clears any review flag. - Mark external - [Mark the deposit as collected at the practice](/reference/deposit-requests/deposit-requests/id/mark-external/post): Cash/card taken in person. Terminal: attendance refunds must then be settled at the practice too. - Refund - [Refund a paid deposit](/reference/deposit-requests/deposit-requests/id/refund/post): Enqueues a full refund on the practice's connected account. Also retries a failed refund. - Resend - [Re-send the payment link on the selected channels](/reference/deposit-requests/deposit-requests/id/resend/post): Pending requests only. Reuse clientRef when retrying the same command; a different channel set with that clientRef returns 409. - Settings - Accounting - Settings - Accounting - [The accounting connection and its account mappings](/reference/settings/accounting/settings/accounting/get) - Accounts - [The provider's chart of accounts and tax rates](/reference/settings/accounting/settings/accounting/accounts/get) - Connection - Status - [Pause, resume or disconnect the accounting connection](/reference/settings/accounting/settings/accounting/connection/status/post): Disconnecting bumps the credential generation, so an in-flight delivery claimed under the old grant parks instead of posting. - Journals - [Journal revisions and their delivery attempts](/reference/settings/accounting/settings/accounting/journals/get) - Build - [Build the day's journal for a location](/reference/settings/accounting/settings/accounting/journals/build/post): Reads the day's live ledger entries at the location, maps them to accounts and records one balanced revision for the lane to post. A day already posted with the same figures is unchanged; changed figures post a reversal and a new generation. - Mappings - [Replace the account mappings](/reference/settings/accounting/settings/accounting/mappings/put): The whole set at once: revenue by procedure category, each payment method, each location's bank account, and the control accounts (deposits held, refunds, write-offs, patient liability, VAT). - Oauth - Start - [Start a Xero or QuickBooks connect](/reference/settings/accounting/settings/accounting/oauth/start/post): Mints a single-use signed handshake and returns the provider's authorize URL. The callback stores the grant and marks the connection active; a reconnect bumps the credential generation. - Ai voice - Settings - Ai voice - [AI voice agent overview](/reference/settings/ai-voice/settings/ai-voice/get): The org's agent (null until provisioned), assignment rules, resolved calling window and entitlement state. - [Update the AI voice agent](/reference/settings/ai-voice/settings/ai-voice/patch): Turning the booking tool on requires an enabled booking page, a live location and a deposit-free online-bookable appointment type; otherwise 409 AI_BOOKING_PREREQUISITES lists what is missing. - [Provision the AI voice agent](/reference/settings/ai-voice/settings/ai-voice/post): Idempotent singleton provision with default config. Requires the AI voice entitlement. - Dnc imports - [Import a Do-Not-Call list for outbound AI screening](/reference/settings/ai-voice/settings/ai-voice/dnc-imports/post): US practices upload their downloaded National Do-Not-Call registry list (one number per line, or the first field of each CSV line). The raw upload is kept before it is parsed; lines that do not read as a number in the practice's country are counted and named in Review rather than dropped. Numbers on the list are never dialled by the AI. - Queue - [AI outbound queue](/reference/settings/ai-voice/settings/ai-voice/queue/get): Journeys currently AI-handled with their attempt/pacing state, newest next-attempt first. - Rules - [Create an AI assignment rule](/reference/settings/ai-voice/settings/ai-voice/rules/post): Journeys matching an enabled rule are marked AI-handled and queued for outbound calling. Bounded per org. - Id - [Update an AI assignment rule](/reference/settings/ai-voice/settings/ai-voice/rules/id/patch) - Archive - [Archive an AI assignment rule](/reference/settings/ai-voice/settings/ai-voice/rules/id/archive/post): Archived rules stop matching new journeys; already-queued journeys keep their marker. - Test - [Text-mode agent test bench](/reference/settings/ai-voice/settings/ai-voice/test/post): Runs the composed persona + tools through the chat model in text mode. Live test calls ride the ordinary call path on stage. - Appointment types - Settings - Appointment types - [List appointment types](/reference/settings/appointment-types/settings/appointment-types/get) - [Create a appointment type](/reference/settings/appointment-types/settings/appointment-types/post) - Id - [Update a appointment type](/reference/settings/appointment-types/settings/appointment-types/id/patch) - Archive - [Archive a appointment type](/reference/settings/appointment-types/settings/appointment-types/id/archive/post) - Restore - [Restore an archived appointment type](/reference/settings/appointment-types/settings/appointment-types/id/restore/post) - Reorder - [Reorder appointment types](/reference/settings/appointment-types/settings/appointment-types/reorder/post) - Call tracking - Settings - Call tracking - [Get call-tracking pools and numbers](/reference/settings/call-tracking/settings/call-tracking/get): Pools, their rotating numbers, verification state and the transcription switch. Call tracking is part of the core plan; it bills per held number plus metered minutes/transcription. - [Update call-tracking settings](/reference/settings/call-tracking/settings/call-tracking/patch): Flip the transcription switch and/or set the GA4 destination. `ga4: null` disconnects GA4; a `ga4` object without `apiSecret` keeps the stored secret. Any GA4 save re-sends call events that had exhausted their delivery attempts. - Pools - [Create a tracking pool](/reference/settings/call-tracking/settings/call-tracking/pools/post): An active pool must name a live treatment — a call from an unknown number is guaranteed to become a patient + journey + Today task. Forward targets that are the practice's own Voice number are recognized and rung internally. - Id - [Update a tracking pool](/reference/settings/call-tracking/settings/call-tracking/pools/id/patch) - Cancellation reasons - Settings - Cancellation reasons - [List cancellation reasons](/reference/settings/cancellation-reasons/settings/cancellation-reasons/get) - [Create a cancellation reason](/reference/settings/cancellation-reasons/settings/cancellation-reasons/post) - Id - [Update a cancellation reason](/reference/settings/cancellation-reasons/settings/cancellation-reasons/id/patch) - Archive - [Archive a cancellation reason](/reference/settings/cancellation-reasons/settings/cancellation-reasons/id/archive/post) - Restore - [Restore an archived cancellation reason](/reference/settings/cancellation-reasons/settings/cancellation-reasons/id/restore/post) - Reorder - [Reorder cancellation reasons](/reference/settings/cancellation-reasons/settings/cancellation-reasons/reorder/post) - Capture hooks - Settings - Capture hooks - [List capture hooks](/reference/settings/capture-hooks/settings/capture-hooks/get): Archived hooks are excluded unless includeArchived=true. The secret is never exposed. - [Create a capture hook](/reference/settings/capture-hooks/settings/capture-hooks/post): Mints the endpoint token server-side. defaultTreatmentId is optional; without a matching submitted treatment or a default, new contacts arrive as enquiries. authMode=signed returns a signingSecret exactly once; it is never returned by later reads. - Id - [Get a capture hook](/reference/settings/capture-hooks/settings/capture-hooks/id/get) - [Update a capture hook](/reference/settings/capture-hooks/settings/capture-hooks/id/patch): Set active=false to pause intake without archiving. - Archive - [Archive a capture hook](/reference/settings/capture-hooks/settings/capture-hooks/id/archive/post): Sets archivedAt; the public endpoint answers 404. Idempotent. - Deliveries - [List deliveries a capture hook received](/reference/settings/capture-hooks/settings/capture-hooks/id/deliveries/get): Newest first, keyset-paginated. Merges accepted deliveries (from the attribution touch), replayed duplicates, and rejected deliveries aggregated by failure shape with an occurrence count. Requests refused before the hook resolved — an unknown or paused token, or a rate limit — are never recorded and cannot appear here. - Kind - Deliveryid - [Get one delivery's payload](/reference/settings/capture-hooks/settings/capture-hooks/id/deliveries/kind/deliveryid/get): Returns the stored payload so a field mapping can be built from a real submission, plus the attribution intake made of it — the stored touch columns for an accepted delivery, the same extraction re-run over the body for a rejected one. Rejected bodies older than 13 months are redacted in place; the delivery itself is retained. - Regenerate token - [Regenerate the public token](/reference/settings/capture-hooks/settings/capture-hooks/id/regenerate-token/post): Mints a fresh token; the previous endpoint URL stops working immediately. - Restore - [Restore an archived capture hook](/reference/settings/capture-hooks/settings/capture-hooks/id/restore/post): Clears archivedAt only — a previously paused hook stays paused. Idempotent. - Signing - Disable - [Disable signed capture delivery](/reference/settings/capture-hooks/settings/capture-hooks/id/signing/disable/post): Revokes both signing secrets immediately and returns the hook to public-token browser form mode. - Enable - [Enable signed capture delivery](/reference/settings/capture-hooks/settings/capture-hooks/id/signing/enable/post): Switches a public hook to signed JSON delivery and returns the fresh signingSecret exactly once. - Revoke previous - [Revoke the previous capture signing secret](/reference/settings/capture-hooks/settings/capture-hooks/id/signing/revoke-previous/post): Ends the rotation overlap immediately. Idempotent. - Rotate - [Rotate a capture signing secret](/reference/settings/capture-hooks/settings/capture-hooks/id/signing/rotate/post): Returns the new signingSecret exactly once. The previous secret remains valid for 24 hours unless explicitly revoked. - Channels - Settings - Channels - [List channel connections](/reference/settings/channels/settings/channels/get): Archived connections are excluded unless includeArchived=true. Credentials are never exposed. - [Connect a channel](/reference/settings/channels/settings/channels/post): Creates a connection with a server-minted routing token. Credentials are encrypted at rest and write-only. - Id - [Get a channel connection](/reference/settings/channels/settings/channels/id/get) - [Update a channel connection](/reference/settings/channels/settings/channels/id/patch): Set status=disconnected to pause sends/receives without archiving. Passing credentials replaces the stored set. - Archive - [Archive a channel connection](/reference/settings/channels/settings/channels/id/archive/post): Sets archivedAt; inbound webhooks answer 200-and-drop, sends are rejected. Conversation history is kept. Idempotent. - Test - [Test a channel connection](/reference/settings/channels/settings/channels/id/test/post): Pings the provider with the stored credentials and reports reachability. - Whatsapp - Resume - [Resume WhatsApp setup with the saved grant](/reference/settings/channels/settings/channels/id/whatsapp/resume/post) - Mailbox - Oauth - Start - [Start a Gmail/Outlook mailbox connect](/reference/settings/channels/settings/channels/mailbox/oauth/start/post): Mints a single-use PKCE handshake and returns the provider's authorize URL. The callback creates the email-channel connection and starts the forward-only sync. - Meta - Oauth - Start - [Start the Messenger/Instagram/comments connect](/reference/settings/channels/settings/channels/meta/oauth/start/post): Mints a single-use OAuth handshake and returns Meta's Login for Business URL. Connections are created by the callback for every Page the user grants. - Setup - [Get guided channel setup availability](/reference/settings/channels/settings/channels/setup/get) - Sms - Documents - [Upload a document for SMS registration](/reference/settings/channels/settings/channels/sms/documents/post): Upload one document up to 10 MiB. The returned document belongs to this practice and can be reused in its registration. - Numbers - Id - [Release a standalone SMS number and end its rental](/reference/settings/channels/settings/channels/sms/numbers/id/delete) - Activate - [Connect an eligible number to the approved SMS registration](/reference/settings/channels/settings/channels/sms/numbers/id/activate/post) - Check - [Check whether an owned number can send and receive SMS](/reference/settings/channels/settings/channels/sms/numbers/id/check/post) - Purchase - [Accept an SMS number rental and begin the durable order](/reference/settings/channels/settings/channels/sms/numbers/purchase/post) - Search - [Find available UK mobile or US local SMS numbers](/reference/settings/channels/settings/channels/sms/numbers/search/get) - Registrations - [Save a practice's SMS registration details](/reference/settings/channels/settings/channels/sms/registrations/put) - Id - Number quote - [Review rental for an SMS number without the Voice add-on](/reference/settings/channels/settings/channels/sms/registrations/id/number-quote/post) - Otp - [Verify the mobile owner for a US sole proprietor brand](/reference/settings/channels/settings/channels/sms/registrations/id/otp/post) - Resend - [Request another registration code for a sole proprietor](/reference/settings/channels/settings/channels/sms/registrations/id/otp/resend/post) - Quote - [Review SMS registration charges before submitting](/reference/settings/channels/settings/channels/sms/registrations/id/quote/post) - Refresh - [Refresh SMS carrier review or resume interrupted setup](/reference/settings/channels/settings/channels/sms/registrations/id/refresh/post) - Stop renewal - [Stop renewing a US SMS campaign](/reference/settings/channels/settings/channels/sms/registrations/id/stop-renewal/post): The campaign expires at the carrier's current period end. Existing charges remain due. Number rental is separate. - Submit - [Accept a saved quote and submit SMS registration](/reference/settings/channels/settings/channels/sms/registrations/id/submit/post) - Setup - [Get guided SMS setup and number readiness](/reference/settings/channels/settings/channels/sms/setup/get) - Uk requirements - [Get the UK's mobile-number registration requirements](/reference/settings/channels/settings/channels/sms/uk-requirements/get) - Telnyx sms - [Enable texting from a Voice number](/reference/settings/channels/settings/channels/telnyx-sms/post): Assigns the practice's Voice number to the platform messaging profile and creates (or returns) the sms/telnyx connection that sends from it and routes its replies to the inbox. Idempotent per number. US numbers also need 10DLC registration before carriers deliver. - Tiktok - Oauth - Start - [Start the TikTok Business Messaging connect](/reference/settings/channels/settings/channels/tiktok/oauth/start/post): Mints a single-use OAuth handshake and returns TikTok's authorize URL. The callback creates the TikTok channel connection for the granted Business Account. - Whatsapp - Embedded signup - [Complete WhatsApp Embedded Signup](/reference/settings/channels/settings/channels/whatsapp/embedded-signup/post): Exchanges the popup's code, validates the grant covers the posted assets, and walks the resumable onboarding (subscribe, verify, register, activate). Re-posting the same payload resumes after a provider hiccup. - Chat widget - Settings - Chat widget - [Get the chat widget and its knowledge base](/reference/settings/chat-widget/settings/chat-widget/get): Returns the org's widget (null until provisioned) plus every knowledge-base source with ingestion status. - [Update widget config](/reference/settings/chat-widget/settings/chat-widget/patch): Config is replaced whole. Changes propagate to embedded widgets within ~a minute (the public config is edge-cached). - [Provision the chat widget](/reference/settings/chat-widget/settings/chat-widget/post): Idempotently creates the org's webchat channel connection (whose routing token is the public embed key), a hidden capture hook for the scripted flow, and the widget row with default config. - Kb - Document - [Upload a document knowledge source](/reference/settings/chat-widget/settings/chat-widget/kb/document/post): multipart/form-data with a single `file` field (pdf, txt, md or html, max 10 MB). Extraction and embedding run asynchronously. - Id - [Update a snippet source](/reference/settings/chat-widget/settings/chat-widget/kb/id/patch): Snippets only; re-embeds on save. - Archive - [Archive a knowledge source](/reference/settings/chat-widget/settings/chat-widget/kb/id/archive/post): Removes its chunks from retrieval immediately. Idempotent. - Recrawl - [Re-ingest a knowledge source](/reference/settings/chat-widget/settings/chat-widget/kb/id/recrawl/post): Websites re-crawl; documents and snippets re-extract and re-embed. - Snippet - [Add a text snippet knowledge source](/reference/settings/chat-widget/settings/chat-widget/kb/snippet/post): Free-text knowledge (opening hours, price list, policies) — the fastest way to teach the assistant. - Website - [Add a website knowledge source](/reference/settings/chat-widget/settings/chat-widget/kb/website/post): Queues a same-host crawl from the start URL (up to 150 pages). Re-crawls run weekly and on demand. - Test - [Test the AI assistant](/reference/settings/chat-widget/settings/chat-widget/test/post): Runs the widget's AI answering pipeline (knowledge retrieval included) without persisting anything. Requires the AI assistant add-on. - Clinical - Settings - Clinical - Adjustment types - [List adjustment types](/reference/settings/clinical/settings/clinical/adjustment-types/get) - [Create a adjustment type](/reference/settings/clinical/settings/clinical/adjustment-types/post) - Id - [Update a adjustment type](/reference/settings/clinical/settings/clinical/adjustment-types/id/patch) - Archive - [Archive a adjustment type](/reference/settings/clinical/settings/clinical/adjustment-types/id/archive/post) - Restore - [Restore an archived adjustment type](/reference/settings/clinical/settings/clinical/adjustment-types/id/restore/post) - Reorder - [Reorder adjustment types](/reference/settings/clinical/settings/clinical/adjustment-types/reorder/post) - Code entitlements - [The practice's coding-standard licence entitlements](/reference/settings/clinical/settings/clinical/code-entitlements/get) - Code standards - [Search the coding standards the practice may see](/reference/settings/clinical/settings/clinical/code-standards/get): SNOMED rows for every practice; CDT rows only while the practice holds an unrevoked licence entitlement for the edition (04 §5). - Defaults - [What restoring the clinical defaults would add](/reference/settings/clinical/settings/clinical/defaults/get): The country's default pack — codes with chart icons and indicative fees, findings, recall types, fee schedule and price lists, appointment types, rooms, treatment / note / letter / form templates — compared with what the practice has. Identity is the code, the form key or the name; the practice's own rows are never touched. - [Restore the clinical defaults](/reference/settings/clinical/settings/clinical/defaults/post): Adds every default the practice is missing (or only the sections named), in dependency order. Installing twice adds nothing. GB practices in England also get the NHS price list and band items, priced from the frozen NHS evidence only. - Fee schedules - [List fee schedules](/reference/settings/clinical/settings/clinical/fee-schedules/get) - [Create a fee schedule](/reference/settings/clinical/settings/clinical/fee-schedules/post) - Id - [Update a fee schedule](/reference/settings/clinical/settings/clinical/fee-schedules/id/patch) - Archive - [Archive a fee schedule](/reference/settings/clinical/settings/clinical/fee-schedules/id/archive/post) - Items - [List the fee revisions of a schedule](/reference/settings/clinical/settings/clinical/fee-schedules/id/items/get) - [Add a fee revision to a schedule](/reference/settings/clinical/settings/clinical/fee-schedules/id/items/post): Fee revisions are immutable: a change is a new row from its effective date; a mistake is retired. - Itemid - Retire - [Retire a fee revision](/reference/settings/clinical/settings/clinical/fee-schedules/id/items/itemid/retire/post) - Restore - [Restore an archived fee schedule](/reference/settings/clinical/settings/clinical/fee-schedules/id/restore/post) - Form templates - [List patient form templates (current versions, archived on request)](/reference/settings/clinical/settings/clinical/form-templates/get) - [Create a patient form template (version 1)](/reference/settings/clinical/settings/clinical/form-templates/post) - Id - Archive - [Archive a form template version](/reference/settings/clinical/settings/clinical/form-templates/id/archive/post) - Versions - [Publish a new version of a form template](/reference/settings/clinical/settings/clinical/form-templates/id/versions/post): Templates are sealed once used: a change is a new version row and the previous version is archived in the same transaction. Submissions keep citing the version they answered. - Note templates - [List note templates](/reference/settings/clinical/settings/clinical/note-templates/get) - [Create a note template](/reference/settings/clinical/settings/clinical/note-templates/post) - Id - [Update a note template](/reference/settings/clinical/settings/clinical/note-templates/id/patch) - Archive - [Archive a note template](/reference/settings/clinical/settings/clinical/note-templates/id/archive/post) - Restore - [Restore an archived note template](/reference/settings/clinical/settings/clinical/note-templates/id/restore/post) - Reorder - [Reorder note templates](/reference/settings/clinical/settings/clinical/note-templates/reorder/post) - Payment methods - [List payment methods](/reference/settings/clinical/settings/clinical/payment-methods/get) - [Create a payment method](/reference/settings/clinical/settings/clinical/payment-methods/post) - Id - [Update a payment method](/reference/settings/clinical/settings/clinical/payment-methods/id/patch) - Archive - [Archive a payment method](/reference/settings/clinical/settings/clinical/payment-methods/id/archive/post) - Restore - [Restore an archived payment method](/reference/settings/clinical/settings/clinical/payment-methods/id/restore/post) - Reorder - [Reorder payment methods](/reference/settings/clinical/settings/clinical/payment-methods/reorder/post) - Price lists - [List price lists](/reference/settings/clinical/settings/clinical/price-lists/get) - [Create a price list](/reference/settings/clinical/settings/clinical/price-lists/post) - Id - [Update a price list](/reference/settings/clinical/settings/clinical/price-lists/id/patch) - Archive - [Archive a price list](/reference/settings/clinical/settings/clinical/price-lists/id/archive/post) - Items - [List a price list's overrides](/reference/settings/clinical/settings/clinical/price-lists/id/items/get) - Procedurecodeid - [Remove a price list's override for one code](/reference/settings/clinical/settings/clinical/price-lists/id/items/procedurecodeid/delete) - [Set a price list's override for one code](/reference/settings/clinical/settings/clinical/price-lists/id/items/procedurecodeid/put) - Restore - [Restore an archived price list](/reference/settings/clinical/settings/clinical/price-lists/id/restore/post) - Reorder - [Reorder price lists](/reference/settings/clinical/settings/clinical/price-lists/reorder/post) - Procedure categories - [List procedure categories](/reference/settings/clinical/settings/clinical/procedure-categories/get) - [Create a procedure category](/reference/settings/clinical/settings/clinical/procedure-categories/post) - Id - [Update a procedure category](/reference/settings/clinical/settings/clinical/procedure-categories/id/patch) - Archive - [Archive a procedure category](/reference/settings/clinical/settings/clinical/procedure-categories/id/archive/post) - Restore - [Restore an archived procedure category](/reference/settings/clinical/settings/clinical/procedure-categories/id/restore/post) - Reorder - [Reorder procedure categories](/reference/settings/clinical/settings/clinical/procedure-categories/reorder/post) - Procedure codes - [List procedure codes](/reference/settings/clinical/settings/clinical/procedure-codes/get) - [Create a procedure code](/reference/settings/clinical/settings/clinical/procedure-codes/post) - Id - [Update a procedure code](/reference/settings/clinical/settings/clinical/procedure-codes/id/patch) - Archive - [Archive a procedure code](/reference/settings/clinical/settings/clinical/procedure-codes/id/archive/post) - Restore - [Restore an archived procedure code](/reference/settings/clinical/settings/clinical/procedure-codes/id/restore/post) - Reorder - [Reorder procedure codes](/reference/settings/clinical/settings/clinical/procedure-codes/reorder/post) - Recall types - [List recall types](/reference/settings/clinical/settings/clinical/recall-types/get) - [Create a recall type](/reference/settings/clinical/settings/clinical/recall-types/post) - Id - [Update a recall type](/reference/settings/clinical/settings/clinical/recall-types/id/patch) - Archive - [Archive a recall type](/reference/settings/clinical/settings/clinical/recall-types/id/archive/post) - Restore - [Restore an archived recall type](/reference/settings/clinical/settings/clinical/recall-types/id/restore/post) - Reorder - [Reorder recall types](/reference/settings/clinical/settings/clinical/recall-types/reorder/post) - Clinical storage - Settings - Clinical storage - Deletions - [Clinical document deletions that are not complete](/reference/settings/clinical-storage/settings/clinical-storage/deletions/get): Every deletion row of the practice whose backup copy is still present: requested, in progress, waiting for the backup account's thirty-day window, or parked. Nothing is deleted before its retention date, and a completed row is not listed. - Id - Replay - [Replay one parked deletion](/reference/settings/clinical-storage/settings/clinical-storage/deletions/id/replay/post): Re-arms a parked deletion with a fresh attempt budget. The executor revalidates before touching anything, so a row whose legal hold still stands is skipped again. Anything not parked is refused. - Veto - [Veto one deletion](/reference/settings/clinical-storage/settings/clinical-storage/deletions/id/veto/post): Parks the row on the primary side: it leaves the backup manifest at once and is never resumed automatically. A primary object already removed stays removed; the backup copy is retained. Replay re-arms the row. - Keys - [The cell's clinical master-key versions](/reference/settings/clinical-storage/settings/clinical-storage/keys/get): Every master-key version of the practice's cell with its state — active, retiring while documents are rewritten under the new key, or retired once nothing is encrypted under it (07 §7). Read-only: activation is an operator action. - Restore items - [Restored objects waiting for an owner](/reference/settings/clinical-storage/settings/clinical-storage/restore-items/get): Every backup object a restore brought back that the database could not file by itself — its owner row is missing, its document is deleted, or its metadata is incomplete. Each is attached to a record or discarded from here; the generic review-queue actions refuse them. - Id - Attach - [Attach one restored object to a record](/reference/settings/clinical-storage/settings/clinical-storage/restore-items/id/attach/post): Reads the object back under the practice's key, writes its document, copy and copy-work rows and the child link of the chosen owner (a patient document for a patient; the document row only for an account, a staff record or a user), reopens its key version if it had been retired, and resolves the review item. Refused when the owner does not exist or the object's document already exists. - Discard - [Discard one restored object](/reference/settings/clinical-storage/settings/clinical-storage/restore-items/id/discard/post): Never an immediate delete: the object is filed as an organisation document of kind restore_orphan, so retention, the signed manifest, the backup account's thirty-day delay and both vetoes apply before anything is removed. The review item is marked discarded with the reason. - Rotations - [Parked key rotations](/reference/settings/clinical-storage/settings/clinical-storage/rotations/get): Every document key rotation of the practice that spent its attempt budget, with the last error. Rotations still in progress need nobody and are not listed. - Id - Replay - [Replay one parked key rotation](/reference/settings/clinical-storage/settings/clinical-storage/rotations/id/replay/post): Re-arms a parked rotation with a fresh attempt budget; it resumes from the step it was parked in. Anything not parked is refused. - Work - [Clinical storage work that is not complete](/reference/settings/clinical-storage/settings/clinical-storage/work/get): Every backup-copy work row that is still open, reserved, parked, or waiting for its primary verification — the review list of 07 §7. Completed rows are not listed. - Id - Replay - [Replay one storage work row](/reference/settings/clinical-storage/settings/clinical-storage/work/id/replay/post): An unverified primary is read back and sealed; a parked backup copy re-arms its attempt budget and reopens for the copier. Anything else is refused. - Compliance - Settings - Compliance - Checks - [Recurring and ad-hoc checks with their latest entry](/reference/settings/compliance/settings/compliance/checks/get) - [Define a check](/reference/settings/compliance/settings/compliance/checks/post) - Id - [Edit or deactivate a check](/reference/settings/compliance/settings/compliance/checks/id/patch) - Entries - [A check's entries, newest first](/reference/settings/compliance/settings/compliance/checks/id/entries/get) - [Record a completed check](/reference/settings/compliance/settings/compliance/checks/id/entries/post): Append-only. Completing the task a due check opened closes it; an autoclave or spore check may cite the sterilisation cycle it verified. - Incidents - [Incidents, open first](/reference/settings/compliance/settings/compliance/incidents/get) - [Report an incident](/reference/settings/compliance/settings/compliance/incidents/post) - Id - [Investigate or close an incident](/reference/settings/compliance/settings/compliance/incidents/id/patch): reported → investigating → closed, or straight to closed; a closed incident is immutable (409 INCIDENT_TRANSITION). - Policies - [Policies: every version, drafts first](/reference/settings/compliance/settings/compliance/policies/get) - [Draft a policy version](/reference/settings/compliance/settings/compliance/policies/post): A new key starts at version 1; an existing key drafts the next version, which supersedes the live one when published. - Id - [Edit a draft, or set a published version's review date](/reference/settings/compliance/settings/compliance/policies/id/patch) - Acknowledge - [Acknowledge the published version as the signed-in member](/reference/settings/compliance/settings/compliance/policies/id/acknowledge/post) - Archive - [Archive a published version, or delete a draft](/reference/settings/compliance/settings/compliance/policies/id/archive/post) - Publish - [Publish a draft; the previous live version is archived](/reference/settings/compliance/settings/compliance/policies/id/publish/post) - Staff records - [Staff records with their expiry dates](/reference/settings/compliance/settings/compliance/staff-records/get) - [Add a staff record](/reference/settings/compliance/settings/compliance/staff-records/post) - Id - [Update or archive a staff record](/reference/settings/compliance/settings/compliance/staff-records/id/patch) - Sterilisation cycles - [Recent sterilisation cycles with their uses](/reference/settings/compliance/settings/compliance/sterilisation-cycles/get) - [Start a sterilisation cycle](/reference/settings/compliance/settings/compliance/sterilisation-cycles/post) - Id - Complete - [Complete a cycle with its outcome, sealed once](/reference/settings/compliance/settings/compliance/sterilisation-cycles/id/complete/post) - Uses - [Record instruments from a passed cycle used on a patient](/reference/settings/compliance/settings/compliance/sterilisation-cycles/id/uses/post) - Connections - Settings - Connections - [List every external provider connection](/reference/settings/connections/settings/connections/get): One health board over the ad, SEO, reputation, inbox, PMS and dialer grants. Read-only: each row deep-links to the page that owns its connect and disconnect flow. Credentials, tokens and account identifiers beyond a display name are never exposed. - Contact methods - Settings - Contact methods - [List contact methods](/reference/settings/contact-methods/settings/contact-methods/get) - [Create a contact method](/reference/settings/contact-methods/settings/contact-methods/post) - Id - [Update a contact method](/reference/settings/contact-methods/settings/contact-methods/id/patch) - Archive - [Archive a contact method](/reference/settings/contact-methods/settings/contact-methods/id/archive/post) - Restore - [Restore an archived contact method](/reference/settings/contact-methods/settings/contact-methods/id/restore/post) - Reorder - [Reorder contact methods](/reference/settings/contact-methods/settings/contact-methods/reorder/post) - Demo data - Settings - Demo data - [Remove demo data](/reference/settings/demo-data/settings/demo-data/delete): Deletes an unchanged sample set. If ordinary activity history was added to the sample graph, archives the linked sample records and disables its integrations instead so immutable evidence is preserved. Answers 404 when no demo data is present. - [Demo data status](/reference/settings/demo-data/settings/demo-data/get): Whether the organization currently holds seeded demo data, with per-entity counts. - [Seed demo data](/reference/settings/demo-data/settings/demo-data/post): Fills the organization with realistic marked sample data — patients in every status, journeys in every pipeline stage, appointments past and future, tasks and timeline activity. Answers 409 when demo data is already present. - Clinical - [Add clinical demo data (one step)](/reference/settings/demo-data/settings/demo-data/clinical/post): Runs the next step of the v4 clinical top-up on a seeded v3 organization — charts, treatment plans, three months of diaries, notes, ledger, recalls, perio exams, forms and images — and records it, so a repeated call resumes where the last one stopped. Answers 404 outside the stage cell or for a member who is not a platform admin, 409 when nothing is seeded or the top-up is already complete. - Email domains - Settings - Email domains - [List sending domains](/reference/settings/email-domains/settings/email-domains/get): Includes archived domains whose removal has not finished at the provider, so a stuck teardown stays visible. - [Connect a sending domain](/reference/settings/email-domains/settings/email-domains/post): Creates the domain at the email provider and returns it with the DNS records to publish. Verification is asynchronous — poll the domain until it reports verified. - Id - [Get one sending domain](/reference/settings/email-domains/settings/email-domains/id/get) - Archive - [Stop using a sending domain](/reference/settings/email-domains/settings/email-domains/id/archive/post): Sends fall back to the shared platform domain immediately. The domain is handed back to the provider in the background. - Cloudflare apply - [Publish the records with a Cloudflare API token](/reference/settings/email-domains/settings/email-domains/id/cloudflare-apply/post): Uses the token for this one setup — a zone lookup, a read of each name, one batch write and a read-back — and then discards it. It is never stored, logged or returned. Only empty names are written to: anything already published is left alone and reported. - Dns host - [Find out where this domain's DNS is managed](/reference/settings/email-domains/settings/email-domains/id/dns-host/get): Reads public DNS to name the provider and say which automatic routes are open. Proves nothing about whether the records are published — only a verify does that. - Domain connect url - [Get the one-click link to the practice's DNS provider](/reference/settings/email-domains/settings/email-domains/id/domain-connect-url/post): Returns a signed, single-purpose link the practice follows to approve our records at their own DNS host. The link carries the DKIM key and can be replayed by anyone with a session there, so it is minted behind a write permission and never cached. - Retry teardown - [Retry removing a sending domain](/reference/settings/email-domains/settings/email-domains/id/retry-teardown/post) - Verify - [Check a sending domain again](/reference/settings/email-domains/settings/email-domains/id/verify/post): Asks the provider to re-read DNS. Use after publishing or correcting the records; a domain that gave up waiting is re-armed by the same call. - Insurance - Settings - Insurance - Billing - [Read the practice's claims billing identity](/reference/settings/insurance/settings/insurance/billing/get) - [Set the practice's claims billing identity](/reference/settings/insurance/settings/insurance/billing/put) - Carriers - [List insurance carriers](/reference/settings/insurance/settings/insurance/carriers/get) - [Create a insurance carrier](/reference/settings/insurance/settings/insurance/carriers/post) - Id - [Update a insurance carrier](/reference/settings/insurance/settings/insurance/carriers/id/patch) - Archive - [Archive a insurance carrier](/reference/settings/insurance/settings/insurance/carriers/id/archive/post) - Restore - [Restore an archived insurance carrier](/reference/settings/insurance/settings/insurance/carriers/id/restore/post) - Reorder - [Reorder insurance carriers](/reference/settings/insurance/settings/insurance/carriers/reorder/post) - Plans - [List insurance plans](/reference/settings/insurance/settings/insurance/plans/get) - [Create a insurance plan](/reference/settings/insurance/settings/insurance/plans/post) - Id - [Update a insurance plan](/reference/settings/insurance/settings/insurance/plans/id/patch) - Archive - [Archive a insurance plan](/reference/settings/insurance/settings/insurance/plans/id/archive/post) - Restore - [Restore an archived insurance plan](/reference/settings/insurance/settings/insurance/plans/id/restore/post) - Revisions - [List a plan's benefit revisions](/reference/settings/insurance/settings/insurance/plans/id/revisions/get): Every effective-dated benefit design of the plan with its ranges, exceptions and copays, newest first; retired revisions stay listed because estimates cite them. - [Add a benefit revision to a plan](/reference/settings/insurance/settings/insurance/plans/id/revisions/post): A benefit design is written once with every range, exception and copay anchored in one CDT edition. Live revisions of a plan never overlap (409 REVISION_OVERLAP); a correction is a new revision that retires the mistaken one. An unknown CDT code answers 422 CODE_UNKNOWN. - Reorder - [Reorder insurance plans](/reference/settings/insurance/settings/insurance/plans/reorder/post) - Revisions - Id - Retire - [Retire a benefit revision](/reference/settings/insurance/settings/insurance/revisions/id/retire/post): Seals retired_at; the revision leaves the estimate path but stays readable because stamped estimates cite it. - Lead sources - Settings - Lead sources - [List lead sources](/reference/settings/lead-sources/settings/lead-sources/get) - [Create a lead source](/reference/settings/lead-sources/settings/lead-sources/post) - Id - [Update a lead source](/reference/settings/lead-sources/settings/lead-sources/id/patch) - Archive - [Archive a lead source](/reference/settings/lead-sources/settings/lead-sources/id/archive/post) - Restore - [Restore an archived lead source](/reference/settings/lead-sources/settings/lead-sources/id/restore/post) - Reorder - [Reorder lead sources](/reference/settings/lead-sources/settings/lead-sources/reorder/post) - Letter templates - Settings - Letter templates - [List Letter templates](/reference/settings/letter-templates/settings/letter-templates/get) - [Create a letter template](/reference/settings/letter-templates/settings/letter-templates/post) - Id - [Update a letter template](/reference/settings/letter-templates/settings/letter-templates/id/patch) - Archive - [Archive a letter template](/reference/settings/letter-templates/settings/letter-templates/id/archive/post) - Restore - [Restore an archived letter template](/reference/settings/letter-templates/settings/letter-templates/id/restore/post) - Locations - Settings - Locations - [List locations](/reference/settings/locations/settings/locations/get) - [Create a location](/reference/settings/locations/settings/locations/post) - Id - [Update a location](/reference/settings/locations/settings/locations/id/patch) - Archive - [Archive a location](/reference/settings/locations/settings/locations/id/archive/post) - Restore - [Restore an archived location](/reference/settings/locations/settings/locations/id/restore/post) - Reorder - [Reorder locations](/reference/settings/locations/settings/locations/reorder/post) - Lost reasons - Settings - Lost reasons - [List lost reasons](/reference/settings/lost-reasons/settings/lost-reasons/get) - [Create a lost reason](/reference/settings/lost-reasons/settings/lost-reasons/post) - Id - [Update a lost reason](/reference/settings/lost-reasons/settings/lost-reasons/id/patch) - Archive - [Archive a lost reason](/reference/settings/lost-reasons/settings/lost-reasons/id/archive/post) - Restore - [Restore an archived lost reason](/reference/settings/lost-reasons/settings/lost-reasons/id/restore/post) - Reorder - [Reorder lost reasons](/reference/settings/lost-reasons/settings/lost-reasons/reorder/post) - Nhs - Settings - Nhs - Contracts - [List NHS contracts](/reference/settings/nhs/settings/nhs/contracts/get) - [Create a NHS contract](/reference/settings/nhs/settings/nhs/contracts/post) - Id - [Update a NHS contract](/reference/settings/nhs/settings/nhs/contracts/id/patch) - Activity - [UDA delivered, expected and forecast for a contract year](/reference/settings/nhs/settings/nhs/contracts/id/activity/get): Awarded activity from completed claims, expected activity from claims still in flight, and a run-rate forecast against the year's target, by month and by performer. Defaults to the year covering today (404 YEAR_MISSING when none is set). - Archive - [Archive a NHS contract](/reference/settings/nhs/settings/nhs/contracts/id/archive/post) - Detail - [Read a contract's years and performer targets](/reference/settings/nhs/settings/nhs/contracts/id/detail/get) - Performers - [Add a performer's target on a contract](/reference/settings/nhs/settings/nhs/contracts/id/performers/post): One open target per performer and contract (409 PERFORMER_OPEN); end the open one first to change it. The performer number is also recorded on the practitioner's identifiers. - Restore - [Restore an archived NHS contract](/reference/settings/nhs/settings/nhs/contracts/id/restore/post) - Schedules - [List a contract's imported pay schedules](/reference/settings/nhs/settings/nhs/contracts/id/schedules/get) - [Import a pay schedule and settle its claims](/reference/settings/nhs/settings/nhs/contracts/id/schedules/post): The file is captured raw before it is parsed. Each line is matched to the contract's submitted claim by NHSBSA reference and recorded as that claim's completed event with the awarded activity; a line with no match, or naming a claim that is not waiting, parks with a review task. The same file imports once (duplicate: true on a re-upload); an unreadable file parks for review (422 SCHEDULE_UNREADABLE). - Years - [Set a contract year's targets and values](/reference/settings/nhs/settings/nhs/contracts/id/years/put): Creates or replaces the year that starts on the given date. Years of one contract never overlap (409 YEAR_OVERLAP). - Performers - Id - End - [End a performer's target](/reference/settings/nhs/settings/nhs/performers/id/end/post) - Rules - [Read the NHS rates and vocabularies in force](/reference/settings/nhs/settings/nhs/rules/get): Every band rate and dataset rule of a nation in force on a day, with the frozen evidence each came from. Values absent from every frozen excerpt are null and the course that needs them is refused. - Online booking - Settings - Online booking - [Get the online booking page](/reference/settings/online-booking/settings/online-booking/get): Returns the org's booking page (provisioned on first read) — public token, enable switch and page config. - [Update the online booking page](/reference/settings/online-booking/settings/online-booking/patch): Config is replaced whole. Changes propagate to embedded pages within ~a minute (the public config is edge-cached). - Regenerate token - [Regenerate the public booking token](/reference/settings/online-booking/settings/online-booking/regenerate-token/post): Invalidates the current hosted link and embed snippet immediately; update the practice website after rotating. - Operatories - Settings - Operatories - [List operatories](/reference/settings/operatories/settings/operatories/get) - [Create a operatory](/reference/settings/operatories/settings/operatories/post) - Id - [Update a operatory](/reference/settings/operatories/settings/operatories/id/patch) - Archive - [Archive a operatory](/reference/settings/operatories/settings/operatories/id/archive/post) - Restore - [Restore an archived operatory](/reference/settings/operatories/settings/operatories/id/restore/post) - Reorder - [Reorder operatories](/reference/settings/operatories/settings/operatories/reorder/post) - Payments - Settings - Payments - [Get Stripe Connect status and deposit configuration](/reference/settings/payments/settings/payments/get): Answers defaults for organizations that never configured payments. Connect state mirrors Stripe webhooks and may lag a few seconds. - [Update the deposit configuration](/reference/settings/payments/settings/payments/patch): Partial update; creates the payments row on first save. Connect state fields are read-only (webhook-mirrored). - Connect - [Authorize a Stripe Connect account](/reference/settings/payments/settings/payments/connect/post): Creates a single-use OAuth state and returns Stripe's authorization URL. A different account remains pending until it is explicitly confirmed. - Cancel - [Cancel a pending Stripe account switch](/reference/settings/payments/settings/payments/connect/cancel/post): Deauthorizes only the pending account and preserves the currently active account. - Confirm - [Confirm a pending Stripe account switch](/reference/settings/payments/settings/payments/connect/confirm/post): Re-verifies the pending account and atomically makes it active. Existing deposits and refunds retain their frozen account identity. - Pms - Settings - Pms - Adoptions - [Start a system-of-record adoption](/reference/settings/pms/settings/pms/adoptions/post): Opens the adoption (started); one open adoption per practice. Freezing, the owner's fresh approval, draining, reconciling and completing follow as separate steps, each recorded. - Id - Abort - [Abort the adoption](/reference/settings/pms/settings/pms/adoptions/id/abort/post): Any non-terminal adoption may be aborted; nothing already flipped is undone. - Advance - [Move the adoption to its next state](/reference/settings/pms/settings/pms/adoptions/id/advance/post): started → frozen → drained → reconciled, in order; draining needs the owner's approval first. - Approve - [Approve the adoption (owner, freshly re-authenticated)](/reference/settings/pms/settings/pms/adoptions/id/approve/post): The owner's approval, with a fresh re-authentication, before the adoption drains. - Complete - [Complete the adoption](/reference/settings/pms/settings/pms/adoptions/id/complete/post): Flips the system of record, installs the new authority generation so stale provider work parks, and refreshes every member's session. - Appointment corrections - [List pending PMS appointment corrections](/reference/settings/pms/settings/pms/appointment-corrections/get): Lists bounded, cursor-paginated provider facts that would rewrite a terminal or backwards appointment state. - Id - Resolve - [Resolve a PMS appointment correction](/reference/settings/pms/settings/pms/appointment-corrections/id/resolve/post): Appointment editors can accept the provider projection or keep SmileLine's local fact. Acceptance preserves external-effect evidence and opens an urgent manual follow-up task. - Connections - [List PMS connections](/reference/settings/pms/settings/pms/connections/get): All non-deleted connections including pending requests. Provider-managed poll timing is diagnostic; credentials, lease tokens and sync cursors are never exposed. - [Connect (or request) a PMS](/reference/settings/pms/settings/pms/connections/post): One connection per provider covers the whole account. Created in pending_vendor_activation: Dentally activates when the partner OAuth flow completes (which also seeds the site→location map); CareStack and Open Dental activate through the credentials endpoint; every other connectable provider records an integration request. - Id - [Get a PMS connection](/reference/settings/pms/settings/pms/connections/id/get) - Credentials - [Activate a PMS connection with its credentials](/reference/settings/pms/settings/pms/connections/id/credentials/post): Providers that take practice-supplied keys: CareStack (account subdomain, account id, account key) and Open Dental (customer key, optional eConnector workstation). Proves the credentials against the practice's own site list, seeds the site map from it and moves the connection to connecting, which starts the historical import; Open Dental also registers its change subscriptions. CareStack rotation is allowed only onto the same account; a different account is a disconnect. An organization may operate one PMS at a time, so activation is refused while another provider is live. - Disconnect - [Disconnect a PMS connection](/reference/settings/pms/settings/pms/connections/id/disconnect/post): Also cancels a pending integration request. Synced data and links are kept. Idempotent. - Pause - [Pause a PMS connection](/reference/settings/pms/settings/pms/connections/id/pause/post): Sync stops (webhooks are staged but not processed). - Practitioners - [List provider clinicians nobody has named yet](/reference/settings/pms/settings/pms/connections/id/practitioners/get): A provider that publishes no directory names its clinicians only by id inside appointments, so the sync engine holds an inactive placeholder for each. Their appointments still import and still block that column of the diary, but an inactive practitioner is in no booking roster. Name and activate them under Settings -> Practitioners to make them bookable. - Receipts - [List a connection's webhook receipts](/reference/settings/pms/settings/pms/connections/id/receipts/get): Every signed webhook delivery the connection received, newest first, with its ingress state. A receipt's raw body is captured before it is parsed, so a completed receipt can be replayed on demand while the capture is inside retention. - Receiptid - Replay - [Replay a completed webhook receipt from its captured body](/reference/settings/pms/settings/pms/connections/id/receipts/receiptid/replay/post): Re-parses the captured body through the provider adapter and re-stages its events (rows that still exist are untouched), then re-arms the receipt's processing. Parked and rejected receipts are replayed from the review queue instead. - Resume - [Resume a paused PMS connection](/reference/settings/pms/settings/pms/connections/id/resume/post) - Sites - Siteid - [Map a PMS site to a location](/reference/settings/pms/settings/pms/connections/id/sites/siteid/patch): Points a provider site at a location (null unmaps) or parks it (enabled=false). Mapping releases inbound records held for that site. - Matches - [List patient match candidates](/reference/settings/pms/settings/pms/matches/get): Probabilistic PMS↔CRM patient matches awaiting review (55–89 score band). - Id - Accept - [Accept a match candidate](/reference/settings/pms/settings/pms/matches/id/accept/post): Links the CRM patient to the PMS record and retires competing suggestions. Held sync rows re-process. - Reject - [Reject a match candidate](/reference/settings/pms/settings/pms/matches/id/reject/post): When no suggestion remains for the PMS record it becomes a new CRM patient. - System of record - [The clinical system of record](/reference/settings/pms/settings/pms/system-of-record/get): Which system holds the clinical record — Smileline or the connected PMS — and the adoption in progress, if one is. - Practice - Settings - Practice - [Get the practice identity/brand settings](/reference/settings/practice/settings/practice/get): Answers defaults for organizations that never saved settings. legalCountry and accountingCurrency are non-null values derived from the immutable organization country. Retention defaults to Forever for message content, activity detail and patient detail in audit history, and 90 days for recordings. Shorter windows apply progressively to existing rows and immediately to new rows. - [Update the practice identity/brand settings](/reference/settings/practice/settings/practice/patch): Partial update; creates the settings row on first save. Country and currency are derived organization facts and cannot be patched here. Omitted retention fields are unchanged and null means Forever. Shortening creates bounded progressive restamp work; extending a window never increases an already-materialized expiry or restores redacted data. - Practice archive - Settings - Practice archive - [Archive requests, newest first](/reference/settings/practice-archive/settings/practice-archive/get) - [Request a complete archive of the practice's records](/reference/settings/practice-archive/settings/practice-archive/post): Every table of the practice is written as JSON Lines parts to the practice's clinical bucket in bounded steps, then a manifest and a validation report close the archive. One archive is produced at a time (409 EXPORT_IN_PROGRESS); earlier completed archives stay downloadable. - Id - Acknowledge - [Acknowledge a completed archive as the closure record](/reference/settings/practice-archive/settings/practice-archive/id/acknowledge/post): Only an archive whose validation report is complete and that was requested and completed in the same `closing` lifecycle generation is acknowledged (409 EXPORT_NOT_CONSISTENT otherwise); an archive produced while the practice was active stays a downloadable snapshot. - Documents - Documentid - Link - [A one-minute download link for one part, one index part, the manifest, or one original document the archive lists](/reference/settings/practice-archive/settings/practice-archive/id/documents/documentid/link/get) - Run - [Run one bounded step of a requested archive](/reference/settings/practice-archive/settings/practice-archive/id/run/post): The archive is produced by the practice's own page: each call writes a few parts under a short lease and returns the archive as it stands. Call again while it is requested or running; a closed page pauses the archive at its cursor and a later call resumes it. A step whose lease was taken over by another page stops without writing (409 EXPORT_LEASE_LOST is logged, the archive is returned as the new holder left it). - Practitioners - Settings - Practitioners - [List practitioners](/reference/settings/practitioners/settings/practitioners/get) - [Create a practitioner](/reference/settings/practitioners/settings/practitioners/post) - Id - [Update a practitioner](/reference/settings/practitioners/settings/practitioners/id/patch) - Archive - [Archive a practitioner](/reference/settings/practitioners/settings/practitioners/id/archive/post) - Restore - [Restore an archived practitioner](/reference/settings/practitioners/settings/practitioners/id/restore/post) - User link - [Link or unlink the member behind a practitioner](/reference/settings/practitioners/settings/practitioners/id/user-link/post): Sets which signed-in member acts as this practitioner (null unlinks). Needs member:update and a browser session; 404 when the practitioner or the member is not in the practice, 409 when the member already acts as another practitioner. - Professional contacts - Settings - Professional contacts - [List Professional contacts](/reference/settings/professional-contacts/settings/professional-contacts/get) - [Create a professional contact](/reference/settings/professional-contacts/settings/professional-contacts/post) - Id - [Update a professional contact](/reference/settings/professional-contacts/settings/professional-contacts/id/patch) - Archive - [Archive a professional contact](/reference/settings/professional-contacts/settings/professional-contacts/id/archive/post) - Restore - [Restore an archived professional contact](/reference/settings/professional-contacts/settings/professional-contacts/id/restore/post) - Referral program - Settings - Referral program - [Get the referral programme](/reference/settings/referral-program/settings/referral-program/get): Returns the org's referral programme configuration (provisioned lazily with defaults on first read). - [Update the referral programme](/reference/settings/referral-program/settings/referral-program/put): Upserts the programme config. Enabling requires non-empty terms & conditions (400 TERMS_REQUIRED) — significant conditions must be published with the offer. Reward config is frozen into rewards at qualification, so edits never rewrite already-minted rewards. - Regenerate token - [Regenerate the programme's public token](/reference/settings/referral-program/settings/referral-program/regenerate-token/post): Invalidates the current generic landing link (poster QR codes must be re-printed). Advocate share links are unaffected. - Schedules - Settings - Schedules - Members - Userid - Locationid - [Get a staff member's rota](/reference/settings/schedules/settings/schedules/members/userid/locationid/get): The working pattern of a non-clinical member of staff at one location; feeds nothing bookable, only the rota and time off. - [Replace a staff member's rota](/reference/settings/schedules/settings/schedules/members/userid/locationid/put): Whole-write, as the practitioner rota. - Practitionerid - Locationid - [Get a practitioner's rota](/reference/settings/schedules/settings/schedules/practitionerid/locationid/get): The weekly recurrence rules plus date overrides that feed online-booking availability. Empty until a rota is saved. - [Replace a practitioner's rota](/reference/settings/schedules/settings/schedules/practitionerid/locationid/put): Whole-write: the submitted rules replace the existing rota in one transaction. A date override with start = end marks the practitioner off that day. - Sistema ts - Settings - Sistema ts - [Disconnect Sistema TS](/reference/settings/sistema-ts/settings/sistema-ts/delete) - [The Sistema TS connection](/reference/settings/sistema-ts/settings/sistema-ts/get) - [Connect, or replace the credentials of, Sistema TS](/reference/settings/sistema-ts/settings/sistema-ts/put): The username, password and pincode are encrypted at rest and never returned; replacing them starts a new credential generation, so a document claimed under the old one parks and replays. - Run - [Build the submissions the practice owes right now](/reference/settings/sistema-ts/settings/sistema-ts/run/post): The same pass the nightly producer makes: every paid Italian invoice Sistema TS has not acquired becomes a submission the delivery lane carries within the minute. - Submissions - [Documents reported to Sistema TS, newest first](/reference/settings/sistema-ts/settings/sistema-ts/submissions/get) - Tags - Settings - Tags - [List tags](/reference/settings/tags/settings/tags/get) - [Create a tag](/reference/settings/tags/settings/tags/post) - Id - [Update a tag](/reference/settings/tags/settings/tags/id/patch) - Archive - [Archive a tag](/reference/settings/tags/settings/tags/id/archive/post) - Restore - [Restore an archived tag](/reference/settings/tags/settings/tags/id/restore/post) - Reorder - [Reorder tags](/reference/settings/tags/settings/tags/reorder/post) - Team - Settings - Team - [The Team page in one read](/reference/settings/team/settings/team/get): Members with their account, invitations with email delivery state, member locations and the locations to assign — everything the Team page renders. Readable by every member; the mutations stay on the better-auth organization routes. - Member locations - [Which locations each member works at](/reference/settings/team/settings/team/member-locations/get): One row per (member, location) assignment; members without a location are absent. Readable by every member, like the team list. - Members - Userid - Location - [Set the locations a member works at](/reference/settings/team/settings/team/members/userid/location/put): Replaces the set of sites a member works at (an empty list clears it) — what a "location's staff" ring group rings. Gated like a role change. 404 for a user who is not a member of the practice or a location the practice does not own; 409 for an archived location. - Suspension - [Suspend or restore a member's access to the practice](/reference/settings/team/settings/team/members/userid/suspension/put): Gated like removing a member (owners and managers; only an owner may suspend an owner). Suspending yourself is refused. Idempotent: a member already in the requested state answers 200 without a change. 403 when the caller may not act on this member; 404 for a user who is not a member of the practice; 409 SELF_SUSPENSION. - Workspace - [Set the workspace a member lands in](/reference/settings/team/settings/team/members/userid/workspace/put): A member sets their own default workspace freely; setting another member's needs member:update. 404 for a user who is not a member of the practice; 409 when the workspace is not visible to that member (role or practice access). - Treatment templates - Settings - Treatment templates - [List Treatment templates](/reference/settings/treatment-templates/settings/treatment-templates/get) - [Create a treatment template](/reference/settings/treatment-templates/settings/treatment-templates/post) - Id - [Update a treatment template](/reference/settings/treatment-templates/settings/treatment-templates/id/patch) - Archive - [Archive a treatment template](/reference/settings/treatment-templates/settings/treatment-templates/id/archive/post) - Items - [A treatment template's items](/reference/settings/treatment-templates/settings/treatment-templates/id/items/get) - [Replace a treatment template's items](/reference/settings/treatment-templates/settings/treatment-templates/id/items/put): Every item names an act code of the catalogue (409 CODE_KIND); the same code appears once per visit. - Restore - [Restore an archived treatment template](/reference/settings/treatment-templates/settings/treatment-templates/id/restore/post) - Treatments - Settings - Treatments - [List treatments](/reference/settings/treatments/settings/treatments/get) - [Create a treatment](/reference/settings/treatments/settings/treatments/post) - Id - [Update a treatment](/reference/settings/treatments/settings/treatments/id/patch) - Archive - [Archive a treatment](/reference/settings/treatments/settings/treatments/id/archive/post) - Restore - [Restore an archived treatment](/reference/settings/treatments/settings/treatments/id/restore/post) - Reorder - [Reorder treatments](/reference/settings/treatments/settings/treatments/reorder/post) - Webhook endpoints - Settings - Webhook endpoints - [List outbound webhook endpoints](/reference/settings/webhook-endpoints/settings/webhook-endpoints/get) - [Create an outbound webhook endpoint](/reference/settings/webhook-endpoints/settings/webhook-endpoints/post): Returns the HMAC signing secret once. The endpoint stays disabled until a test delivery succeeds. - Id - [Archive an outbound webhook endpoint](/reference/settings/webhook-endpoints/settings/webhook-endpoints/id/delete) - [Get an outbound webhook endpoint](/reference/settings/webhook-endpoints/settings/webhook-endpoints/id/get) - [Update an outbound webhook endpoint](/reference/settings/webhook-endpoints/settings/webhook-endpoints/id/patch): Changing the URL clears verification and disables delivery. - Deliveries - [List webhook deliveries](/reference/settings/webhook-endpoints/settings/webhook-endpoints/id/deliveries/get) - Deliveryid - [Get a webhook delivery](/reference/settings/webhook-endpoints/settings/webhook-endpoints/id/deliveries/deliveryid/get) - Replay - [Replay a webhook delivery](/reference/settings/webhook-endpoints/settings/webhook-endpoints/id/deliveries/deliveryid/replay/post) - Enable - [Enable a verified webhook endpoint](/reference/settings/webhook-endpoints/settings/webhook-endpoints/id/enable/post) - Pause - [Pause a webhook endpoint](/reference/settings/webhook-endpoints/settings/webhook-endpoints/id/pause/post) - Secret - Revoke previous - [Revoke the previous webhook signing secret](/reference/settings/webhook-endpoints/settings/webhook-endpoints/id/secret/revoke-previous/post) - Rotate - [Rotate a webhook signing secret](/reference/settings/webhook-endpoints/settings/webhook-endpoints/id/secret/rotate/post): The previous secret remains valid for 24 hours unless revoked. - Test - [Queue a test webhook delivery](/reference/settings/webhook-endpoints/settings/webhook-endpoints/id/test/post) - Subscriptions - [Create or resume a machine-managed webhook subscription](/reference/settings/webhook-endpoints/settings/webhook-endpoints/subscriptions/post): Creates the endpoint, delivers a signed verification probe with an X-Hook-Secret challenge, and enables it when the receiver returns a 2xx response echoing that challenge. Idempotent on subscriptionKey: an existing live subscription is returned with its current signing secret (200) rather than replaced. - Website - Settings - Website - Forms - [List website forms](/reference/settings/website/settings/website/forms/get): All three transports: CRM-built, auto-discovered and custom integrations. Archived forms are excluded unless includeArchived=true. - [Create a website form](/reference/settings/website/settings/website/forms/post): crm builds a hosted/embeddable form from a builder document; custom mints a raw capture endpoint (today's capture-hook fields). Both mint the invisible owning capture hook; authMode=signed returns a signingSecret exactly once. - Id - [Get a website form](/reference/settings/website/settings/website/forms/id/get): Embeds the owning capture hook, so the form page needs no second read. - [Update a website form](/reference/settings/website/settings/website/forms/id/patch): Form fields and the owning hook's fields through one surface. Set status=paused to stop intake without archiving. - Archive - [Archive a website form](/reference/settings/website/settings/website/forms/id/archive/post): Sets archivedAt on the form and its capture hook; the public endpoints answer 404. Permanently discards every submission still waiting for the form's field mapping, in the same transaction. Idempotent — a repeated call sweeps anything a previous one left. - Confirm mapping - [Confirm a pending form's field mapping](/reference/settings/website/settings/website/forms/id/confirm-mapping/post): For a form in `pending` (discovered, or a custom endpoint awaiting its first submission): writes the hook's fieldMap and defaults, activates the form, and replays every submission parked for it through the ingress vault. - Propose mapping - [Propose a field mapping](/reference/settings/website/settings/website/forms/id/propose-mapping/post): For a form in `pending`: synchronous AI proposal over the discovered field inventory (or, for a custom endpoint, the fields of its newest submission) and the latest stored delivery, falling back to the pure heuristic. Nothing is written until the mapping is confirmed. - Restore - [Restore an archived website form](/reference/settings/website/settings/website/forms/id/restore/post): Clears archivedAt only — a previously paused form stays paused. Submissions the archive discarded are not restored; a form still awaiting its mapping returns to the review queue and groups its next submissions again. Idempotent. - Sample - [Get a form's newest submission payload](/reference/settings/website/settings/website/forms/id/sample/get): The newest accepted delivery's payload, else the newest parked pending submission. Null until something arrives. Cheap enough to poll while a custom endpoint listens for its first submission. - Tracking - [Get website tracking setup](/reference/settings/website/settings/website/tracking/get): Lazily mints the tracking row and its public site key on first read. - [Update website tracking settings](/reference/settings/website/settings/website/tracking/patch) - Detect cms - [Detect the website's CMS](/reference/settings/website/settings/website/tracking/detect-cms/post): Fetches the configured site URL server-side and records the detected builder. Fail-closed: an unreachable or unrecognized site records `unknown`, never an error. - Regenerate key - [Regenerate the public site key](/reference/settings/website/settings/website/tracking/regenerate-key/post): Mints a fresh key; snippets carrying the previous key stop resolving immediately. - Send instructions - [Email install instructions to a developer](/reference/settings/website/settings/website/tracking/send-instructions/post): Throttled to one send per hour per organization. - Status - [Get the derived setup checklist](/reference/settings/website/settings/website/tracking/status/get) - Bootstrap - Bootstrap - [All rarely-changing org lookups in one call](/reference/bootstrap/bootstrap/get): Non-archived lookups, members, pipelines with stages and the caller's saved patient and conversation views. savedViews are scoped to the caller (own + shared), so responses must never be cached across users. - Reports - Reports - Report - [One report's KPIs, chart series and breakdown tables](/reference/reports/reports/report/get): Computes a named report over the org's CRM data as a generic block envelope (KPI tiles with previous-period comparison, zero-filled chart series, breakdown tables with server-emitted display labels). `filters` is url-encoded JSON validated against the report filter model; the date window defaults to the last 30 practice-local days — cohort reports default wider — and non-applicable filter keys are ignored. `grain` buckets timeseries by day/week/month; cohort reports pin it to month and ignore the parameter. Series of kind `matrix` are cohort grids whose cells are omitted where the period is not observable yet, rather than zero-filled. - Report subscriptions - Report subscriptions - [List scheduled report email subscriptions](/reference/report-subscriptions/report-subscriptions/get) - [Create a scheduled report email subscription](/reference/report-subscriptions/report-subscriptions/post) - Id - [Delete a scheduled report email subscription](/reference/report-subscriptions/report-subscriptions/id/delete) - [Get a scheduled report email subscription](/reference/report-subscriptions/report-subscriptions/id/get) - [Update a scheduled report email subscription](/reference/report-subscriptions/report-subscriptions/id/patch) - Deliveries - [List the email deliveries of a scheduled report](/reference/report-subscriptions/report-subscriptions/id/deliveries/get): Every delivery attempt row, newest first, including the ones that failed after their attempts ran out. Parked deliveries stay listed until a human acts on them. - Deliveryid - [Inspect one email delivery of a scheduled report](/reference/report-subscriptions/report-subscriptions/id/deliveries/deliveryid/get) - Replay - [Replay a failed email delivery of a scheduled report](/reference/report-subscriptions/report-subscriptions/id/deliveries/deliveryid/replay/post): Queues a new delivery row at the next generation for the same occurrence; the failed row stays on record unchanged. Only a failed delivery, or one still queued after its recovery window closed, can be replayed. - Test - [Queue a test report email](/reference/report-subscriptions/report-subscriptions/id/test/post) - Campaigns - Campaigns - [List outbound marketing campaigns](/reference/campaigns/campaigns/get) - [Create a campaign draft](/reference/campaigns/campaigns/post) - Id - [Delete a campaign draft](/reference/campaigns/campaigns/id/delete): Only draft campaigns can be deleted. - [Get a campaign](/reference/campaigns/campaigns/id/get) - [Update a campaign draft](/reference/campaigns/campaigns/id/patch): Only draft campaigns can be edited. - Cancel - [Cancel a campaign](/reference/campaigns/campaigns/id/cancel/post) - Duplicate - [Duplicate a campaign as a draft](/reference/campaigns/campaigns/id/duplicate/post) - Launch - [Send or schedule a campaign](/reference/campaigns/campaigns/id/launch/post): Freezes the draft's selector and content. Dispatch pauses instead of silently exceeding the confirmed recipient or credit ceiling. - Pause - [Pause a campaign](/reference/campaigns/campaigns/id/pause/post) - Recipients - [List campaign recipients and exclusions](/reference/campaigns/campaigns/id/recipients/get) - Resume - [Resume a paused campaign](/reference/campaigns/campaigns/id/resume/post) - Test - [Send a campaign test message](/reference/campaigns/campaigns/id/test/post) - Preview - [Preview campaign eligibility and estimated usage](/reference/campaigns/campaigns/preview/post): The preview is an estimate. Segment membership is materialized and eligibility rechecked when dispatch begins.