P PolyAI × Planet DDS · Cloud 9
Integration Reference

Scheduling, intake and the access-window problem — every branch, every procedure.

A field reference for PolyAI voice agents integrating with Planet DDS Cloud 9 Ortho. Built strictly from Planet DDS's Basic Guide and Commonly Used APIs (12.10 C9 Release, October 2025). Where the documented API cannot complete a flow, this guide says so plainly, and sets out what we do instead.

XML over HTTP POST · single endpoint 5 use cases mapped Production window 00:00–11:00 UTC Every constraint documented
!

Scope — Cloud 9 Ortho only. This is not Denticon.

Planet DDS ships three products: Cloud 9 (orthodontic PM), Denticon (general-dentistry PM) and Apteryx (imaging). The documentation behind this guide covers Cloud 9 only, and the vendor agreement it describes is scoped to “any ortho Cloud 9 Software client.” A general-dentistry DSO running Denticon needs a separate API specification that we have not been provided — none of the procedures below apply to it.

Integration model

One endpoint, ten writes, and a window we design around

Cloud 9 is not a FHIR server and shares no surface with Epic, Cerner or AthenaOne. It is a single ASP.NET handler that dispatches on a <Procedure> element inside an XML body. Understanding three properties of that design determines whether a voice integration is viable at all.

01 One endpoint

Every one of the ~100 operations is an HTTP POST to GetData.ashx. The operation is named in the body, not the path. There is no REST resource model, no HTTP verbs beyond POST, and no status-code semantics — errors come back 200 OK with an <ErrorCode>.

02 Credentials in the body

Auth is a ClientID GUID plus a static UserName / Password, sent in the request body on every call. No OAuth, no bearer tokens, no expiry, no refresh. One credential set per client database.

03 A time-boxed API

Production access is granted 00:00–11:00 UTC only. Calls outside that window fail with error 7 unless the specific procedure has been whitelisted by Planet DDS for daytime use. This is the single largest design constraint.

The canonical booking sequence

For an established patient, five procedures carry the whole flow. Two of them are the join that Cloud 9 does not make for you.

1 · GetPortalPatientLookup

Resolve caller → PatientGUID. Filter accepts last name, first name or Patient ID — not a phone number. Returns PatientBirthDate for the DOB verifier.

2 · GetPatientRelationshipContactInfo

Per-patient contact rows. This is how the third identity point (phone) is verified once you already hold a patGUID.

3 · GetOnlineReservations

Bookable slots from the office's schedule templates. Capped at a 28-week range; only appointment types flagged Allow Online Scheduling in Setup are returned.

4 · GetScheduleViewColumnList Join — verify

SetAppointment requires a ScheduleColumnGUID. GetOnlineReservations returns the column only as a description string. This resolution step is a documented gap — see Gaps.

5 · SetAppointment

Writes the appointment. Returns Appointment GUID Added: apptGUID. Rejects past-dated times and slots the template will not accept.

Request shape

Request<!-- POST https://us-ea1-partner.cloud9ortho.com/GetData.ashx --> <?xml version="1.0" encoding="utf-8" ?> <GetDataRequest xmlns="http://schemas.practica.ws/cloud9/partners/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ClientID>[Cloud9 Client GUID]</ClientID> <UserName>[Partner UserName]</UserName> <Password>[Partner Password]</Password> <Procedure>GetPortalPatientLookup</Procedure> <Parameters> <filter>Hernandez</filter> <lookupByPatient>1</lookupByPatient> <pageIndex>1</pageIndex> <pageSize>50</pageSize> </Parameters> </GetDataRequest>

Response shape

Response · success<GetDataResponse xmlns="…/cloud9/partners/"> <ResponseStatus>Success</ResponseStatus> <Records> <Record> <PatientGUID>59D26B3E-…-BD9C03452B86</PatientGUID> <PatientBirthDate>12/30/1999 12:00:00 AM</PatientBirthDate> <PatientMiddleName xsi:nil="true" /> <!-- null --> </Record> </Records> </GetDataResponse>  <!-- errors also return HTTP 200 --> <ResponseStatus>Error</ResponseStatus> <ErrorCode>7</ErrorCode> <ErrorMessage>Not authorized to collect data outside of allowance window.</ErrorMessage>

Surface used by these flows

CapabilityCloud 9 procedure(s)Status
Patient identificationGetPortalPatientLookupName / ID only — no phone
Identity verification (3rd point)GetPatientRelationshipContactInfoSupported
Locate appointmentsGetPatientAppointmentsSupported
Slot availabilityGetOnlineReservations28-week cap · Setup-gated
BookSetAppointmentColumn-GUID join unresolved
CancelSetAppointmentStatusCanceledSupported — no reason field
ConfirmSetAppointmentStatusConfirmedSupported
Reschedule— none —No native operation
Create patientSetPatient · SetPersonRelationshipHard DB preconditions
Coverage on file (read)GetInsurancePoliciesForPatientStored record — not eligibility
Real-time eligibility (270/271)— none —Requires clearinghouse
Reverse phone lookup— none —Cache + local index
Payment capture— none —No Set procedure exists
i
Read the status column literally. Every “no native operation” row was verified against the full 100-procedure index in the Planet DDS integration guide, not inferred from absence in a subset.

Where the platform earns its place

Cloud 9's constraints — a closed daytime window, no push events, no phone-indexed lookup, no atomic reschedule — are exactly the constraints that a thin “call the EHR from the turn” integration handles badly. Agent Studio carries three things that make it workable:

A cache tier that is part of the agent

Nightly deltas via GetAppointmentListSince and GetPatientList(ModifiedSince) land in a store the agent reads inside the turn — no live dip needed for identification.

Deterministic branch logic

The cancel-then-book reschedule needs a real failure branch, not a prompt that hopes. Studio steps make the compensating path explicit and testable.

Variants per location

GetLocations returns a per-location TimeZone. Variants re-scope the agent's date maths and hours to the resolved location rather than a single global assumption.

The controlling constraint

Production access is closed during business hours — by default

Page 4 of the Planet DDS integration guide: “All authorized vendors or third parties will have access to Cloud 9 APIs for 7 days a week between the hours of 12:00:00 AM – 11:00:00 AM UTC.” Everything else in this guide is downstream of that sentence.

What the window looks like locally

The window is fixed in UTC and does not shift for daylight saving — so it drifts an hour against US local time twice a year. The vendor guide calls this out explicitly.

UTC
API OPEN 00:00–11:00
Eastern · EDT
OPEN → 07:00
BUSINESS HOURS — CLOSED
Pacific · PDT
OPEN → 04:00
BUSINESS HOURS — CLOSED
00:0006:0012:0018:0024:00
ZoneAPI openOverlap with 8am–5pm local
Eastern · EST (UTC−5)7:00 PM – 6:00 AMNone
Eastern · EDT (UTC−4)8:00 PM – 7:00 AMNone
Central · CDT (UTC−5)7:00 PM – 6:00 AMNone
Mountain · MDT (UTC−6)6:00 PM – 5:00 AMNone
Pacific · PST (UTC−8)4:00 PM – 3:00 AMNone
Pacific · PDT (UTC−7)5:00 PM – 4:00 AMNone
Across every US timezone the default window has zero overlap with practice business hours. An unwhitelisted real-time integration cannot function during the hours the phone actually rings.

How the platform enforces it

Three of the fourteen documented error codes exist solely to police this.

CodeMessage
7Not authorized to collect data outside of allowance window.
9Procedure < > not whitelisted for partner / client. The current allowance window for non-whitelisted procedures is < > - < >.
8Too many requests within the timeframe for procedure < >.

Code 9 is the important one: it proves a per-procedure whitelist exists and that whitelisted procedures get a different allowance window. Code 8 confirms per-procedure rate limiting, whose thresholds are not published.

The two documents to obtain

Neither is included in the guide we hold. Both are named on pages 4–5 as available on request from cloud9.integrations@planetdds.com.

Allowable APIs During Production Hours

The authoritative list of which procedures may run in daytime. Nothing in this guide can be committed to a customer until this list is in hand.

New Patient Online Scheduling Process

Page 5: “If a vendor or third-party plans to integrate a new patient online scheduling service, please reach out to the Cloud 9 integrations team for a recommended process workflow.” Directly governs the New Patient Intake flow.

Also referenced and worth requesting: Converting Person with SetPatient, Document Uploads, Insurance Claim APIs.

Reference architecture — whitelist for writes, cache for reads

The design that survives both outcomes: pursue whitelisting for the small set of write procedures that genuinely must happen live, and serve every read from a locally-synced cache so identification and slot presentation never depend on the window at all.

Tier 1 · Nightly sync (inside the open window)
ProcedurePurpose
GetPatientList ModifiedSincePatient demographics delta
GetPatientPhoneBuilds the reverse-phone index
GetAppointmentListSince dtSinceAppointment delta, paged
GetLocationsLocation + per-location timezone
GetAppointmentTypesType list + AllowOnlineScheduling
GetScheduleViewColumnListView/column GUID map for the join
GetPatientStatuses · GetContactInfoTypesPrecondition checks for SetPatient
Tier 2 · Live, whitelist required
ProcedureWhy it cannot be cached
GetOnlineReservationsSlot availability is stale within minutes; double-booking risk
SetAppointmentA write. Deferring it means the caller leaves without a booking
SetAppointmentStatusCanceledA write, and the release must free the slot for others
SetAppointmentStatusConfirmedA write
SetPatientA write; blocks the booking that follows it
GetPatientAppointmentsCacheable, but staleness risks acting on an already-cancelled appointment
!
This is the exact list to submit with the business case Planet DDS requires — the guide asks for “minimum needs, not API calls.”

If whitelisting is refused

The integration does not become impossible, but it changes shape. Be explicit with the customer about which of these they are buying.

CapabilityCache-only behaviourAcceptable?
Identify the callerFull fidelity from the nightly index, including reverse-phoneYes
Read back an upcoming appointmentAccurate as of last sync; risks quoting a slot changed same-dayQualified
Confirm an appointmentQueued and flushed in the next window — the caller is told “confirmed,” the chart updates overnightQualified
CancelQueued; the slot is not released until overnight, so it cannot be re-offered same-dayQualified
Book a specific slotCannot be honoured — availability is unverifiable and the write cannot landNo
New patient registrationCannot create the record during the callNo
A queued request is not a booking, and we never present it as one. If SetAppointment is not whitelisted, the agent captures the request and hands off warmly — it will not tell a caller they hold a slot the system has not accepted. Trust in the agent is built on exactly this kind of restraint.
Scope & clinical line

Why intake and coverage are in scope — and where the clinical line sits

The agent performs administrative patient-access work. It does not assess symptoms, judge urgency, or decide what care a patient needs — and it never adjudicates coverage.

1 · The administrative / clinical line

Every procedure this guide uses is scheduling, demographic or financial. Cloud 9's clinical surface — treatment cards, charting, imaging — is not touched by any flow here. That is a deliberate boundary, and it happens to be easy to hold in Cloud 9 because the documented API exposes very little clinical data in the first place.

The agent doesThe agent does not
Resolve who is calling against existing recordsInterpret a clinical complaint or rank its urgency
Map a stated reason to a configured appointment typeDecide what treatment the patient needs
Read the coverage already on file and report itAdjudicate, approve or deny coverage
Offer slots the practice has flagged bookableCreate availability, override templates or double-book
Write appointments, cancellations and confirmationsWrite clinical notes, charting or treatment plans

2 · The Emergency Safety-Net — the controlling guardrail

Every booking flow is fronted by a Safety-Net step that screens for emergency cues before anything else happens. The cue set is authored and approved by the customer's clinical leadership, not by PolyAI, and is deliberately tuned to over-escalate.

!
An orthodontic practice's cue list is its own. Facial trauma, uncontrolled bleeding, airway compromise and swelling are the categories customers typically include — but the operative list must come from the practice in writing, and this guide does not supply one.

On a red flag the agent stops, gives the customer-approved emergency instruction, and transfers to a human. It does not continue to booking, and it does not record a clinical impression.

3 · Coverage — report, never adjudicate

This distinction matters more in Cloud 9 than in the other EHRs, because Cloud 9 gives you data that looks like an eligibility answer and is not one.

What GetInsurancePoliciesForPatient is

The practice's stored record of the patient's policy: carrier, billing centre, policy and group number, subscriber, and the Emdeon payer ID. Written by staff, accurate as of whenever they last touched it.

What GetPatientInsurancePolicies adds

Benefit fields including pipIndividualOrthoMax, pipLifetimeMax and pipIndividualOrthoMaxRemaining. These are Cloud 9's own running totals — useful, and not a payer response.

What neither is

There is no 270/271 transaction anywhere in the Cloud 9 API. No procedure contacts a payer. SetAppointmentInsuranceVerified ticks a checkbox on the appointment bubble — it verifies nothing and calls nobody.

!
If the customer expects real-time verification, it requires the same clearinghouse seam used in the Epic / Cerner / Athena guides (pVerify or equivalent) running alongside Cloud 9, keyed off the stored payer ID.
Reporting a benefit figure is administrative. Deciding coverage is an adverse determination that AI is increasingly barred from making. The agent quotes what is on file, attributes it as on-file information, and never states that a service is or is not covered.

4 · Minors, guardians and the responsible party

Orthodontics skews heavily paediatric, so the caller is frequently not the patient. Cloud 9 models this well and the agent should use it rather than improvising.

NeedProcedureNote
Who may act for this patientGetPatientRelationshipContactInfoReturns Relationship, FullName, persGUID per contact row
Who is financially responsibleGetResponsiblePartiesForPatientOnly relationships flagged financially responsible
Family groupingGetIsFamilyPartyListResponsible parties flagged Is Family
Link a new relationshipSetPersonRelationshipA patient must have at least one responsible party. The FRP flag cannot be turned off via API.
i
Verify the caller against the relationship rows before disclosing anything. A name that does not appear as a relationship on the patient is not authorised by default — route to staff.

5 · Roles, ownership & sign-off

ArtefactOwnerSign-off
Emergency cue list & escalation scriptCustomer clinical leadershipWritten approval before go-live
Appointment-type mapping (reason → type)Customer practice operationsReviewed per location
Which procedures are whitelisted for daytimePlanet DDS integrationsBlocking dependency
Client authorisation form per databaseCustomerRequired before credentials are issued
MNDA + Integration AgreementPolyAI ↔ Planet DDSPrecedes any documentation or sandbox
Coverage-disclosure languageCustomer + PolyAIMust not imply adjudication
Call flows

Branch logic, fallbacks, and the procedure at every node

Pick a flow, then click any node to see what the agent says, what it captures, or the exact Cloud 9 procedure it calls with per-field provenance. Purple nodes are shared sub-flows — click to drill in.

Data capture

Handling the hard-to-capture data points

Each item below is captured by voice under adverse conditions and then used as a match key, a security verifier or a write payload. Strategy, validation and fallback for each.

API reference

Every procedure, grouped by the use case that calls it

Expand a use case to see the procedures it uses; expand a procedure for its parameters, its returns, and where each field comes from in the conversation. Nothing here is aspirational — every procedure listed is documented in the Planet DDS integration guide, and every field is traced to the moment in the call that produces it.

How to read this page

Three terms carry most of the meaning, and they are worth two minutes — they are the vocabulary this integration is scoped, approved and supported in.

Procedure

Cloud 9 exposes its API as a set of named procedures rather than REST endpoints — the operation is named inside the request body, not in the address. Around a hundred exist across reads and writes; this guide uses twenty-one of them.

Why we use the wordIt is Planet DDS's own term, and the procedure is the unit they approve, rate-limit and support. Speaking their vocabulary keeps every conversation — technical and commercial — unambiguous.
What it means for the practiceScope is discussed in concrete, countable units rather than abstractions. When we say a use case needs six procedures, that is exactly what gets requested and exactly what runs.
Whitelist

Planet DDS grants partner API access between 00:00 and 11:00 UTC as standard. Procedures approved to run outside that window — during the practice's working day — are whitelisted individually by the Planet DDS integrations team, against a documented business case.

Why PolyAI tracks it per procedureThese are the calls that must happen live, while the caller is on the line — finding a genuinely available slot, writing a real booking. We keep the list as short as the use cases allow: a focused, well-evidenced request is approved faster, and a smaller live surface is a more reliable one.
What it means for the practiceThis is the one part of the build we ask you to sponsor with Planet DDS, and it is a single, bounded conversation. We bring the exact list, the business case and the volumes; you bring the relationship. The Usage Estimator produces the number that conversation needs.
Cacheable

Everything that does not need to be live. PolyAI keeps a synchronised copy of reference and patient data, refreshed overnight inside the standard access window, using Cloud 9's own incremental delta procedures.

Why PolyAI builds it this wayCached reads return instantly, so the agent never leaves a caller waiting on a round-trip mid-sentence. They consume none of the live allowance, and they keep the agent oriented even if the API is briefly unavailable.
What it means for the practiceA faster, steadier conversation, a materially smaller ask of Planet DDS — and one capability we could not otherwise offer at all: recognising a patient from their caller ID, which the Cloud 9 API cannot do directly.
Every procedure below is labelled one way or the other, and you can filter by either. That split is the heart of the design: be live only where being live actually matters.

The other badges

BadgeMeaning
Cloud 9The platform serving the call. Every procedure in these flows is Cloud 9's own — this integration introduces no third-party dependency.
GET  SETPlanet DDS's own division of the API. GET reads; SET writes. There are around ninety GET procedures and exactly ten SET procedures — so the writes are worth knowing individually, and this guide uses seven of them.
GET · ref GET · syncReads that serve the overnight synchronisation rather than the live call — reference lists and incremental deltas respectively. GET · bulk denotes a full extract.
1–3×Expected calls per conversation, with conditional branches already weighted. This is what the Usage Estimator multiplies by your volumes.
Platform FeePlanet DDS charges an initial and a monthly recurring integration fee. No per-call pricing is published, so call volume affects approval and rate limits rather than a per-transaction bill — which is why this guide estimates procedure volume rather than cost.
VerifyBehaviour the vendor documentation does not settle. We have flagged it rather than assumed it, and it sits on the list to confirm with Planet DDS.
GapA capability confirmed absent from the documented API, with the workaround stated wherever one exists.
Usage estimator

Estimate call volume from projected conversations

Cloud 9 does not publish per-transaction API pricing — the guide states only that “there are initial and monthly recurring integration fees.” So this estimates procedure volume, which is what the whitelist and rate-limit conversations with Planet DDS actually turn on.

Monthly conversation volume

Enter expected conversations per month for each use case.

Containment rate

Share of conversations reaching the end of the flow. Non-contained calls still consume the early lookups.

70%

Estimated procedure calls per month

How the estimator works

Each use case has a per-conversation call profile drawn from the flows in this guide. Conditional calls are weighted by how often that branch is expected to fire; fallback calls are weighted lower still. Volume is split into whitelist-required (must run live, daytime) and cacheable (can be served from the nightly sync) so the two numbers can be quoted separately.

!
Error 8 — “Too many requests within the timeframe for procedure” — confirms per-procedure rate limits exist, but no thresholds are published. Take the whitelist-required figure to Planet DDS and ask them to confirm it clears their limits before committing to a volume.
Authentication

Static credentials, per client database

There is no OAuth flow, no token endpoint and no expiry. Every request carries the full credential set in its body — which changes how secrets, rotation and multi-tenancy have to be handled.

The credential triple

ElementScopeIssued by
ClientIDOne GUID per client databasePlanet DDS, after the client signs an authorisation form
UserNameStatic, per integrationPlanet DDS
PasswordStatic, per integrationPlanet DDS
VendorUserNamePer write — stamped as the actor on the recordPolyAI (max 25 chars)
!
Credentials are static and non-expiring. There is no refresh mechanism and no documented rotation procedure — rotation is a support request. Store them as secrets and never log a request body.

Multi-tenancy is the vendor's problem, and yours

The guide is explicit: “The vendor or third-party must have the ability to update any number of URLs (databases) for each client. Each database will have a unique Client ID (GUID).”

GUIDs are only unique within a database. The guide warns that GUIDs “can be and sometimes purposefully are shared across multiple databases.” Any cache must key on (ClientID, GUID) — never on the GUID alone. A DSO with per-location databases will collide otherwise.

The endpoint hostname is also per-client: us-ea1-partner is one region. The guide notes that calling the wrong endpoint for a client returns “BAD RESPONSE: HTTP/1.1 500 Server Error.” Treat the base URL as per-tenant configuration, not a constant.

Environments

Testing (sandbox)Production
Endpointhttps://us-ea1-partnertest.cloud9ortho.com/GetData.ashxhttps://us-ea1-partner.cloud9ortho.com/GetData.ashx
Availability24/7, minus maintenance windows00:00–11:00 UTC, 7 days
ScopeOne endpoint, one sandbox, one ClientIDPer-client ClientID; multiple databases
ExpiryInaccessible after 3 months idle; deactivated at 6 months (reactivation fee)
i
The sandbox is 24/7 but production is not. Plan against production hours, not sandbox hours. A flow that passes end-to-end in test will return error 7 in production at 10am Eastern — so the whitelist conversation should start well before testing finishes.

From integration request to live agent

MNDA executed

Required before any documentation changes hands — for each individual party including subcontractors.

Integration Agreement executed

Required before entering a testing state, receiving a sandbox, or touching confidential data. Designates the integration type. Initial and monthly recurring fees attach here.

Sandbox opened · alpha

One endpoint, one ClientID. Vendor is expected to have a working integration within 6 months; an extension of 3–6 months needs written approval.

Whitelist request submitted

Business case + minimum data needs for daytime procedures. Do this early — it gates the architecture, not just the launch.

Demo to Cloud 9

Vendor presents to Planet DDS before any production release. The service must be approved to proceed.

Beta

A small number of mutual clients who have authorised the service, in live production. Target duration ~1 month.

Live

After beta sign-off the vendor may sell to any ortho Cloud 9 client. Each client database still needs its own signed authorisation form before credentials are issued.

Agent Studio

Wiring Cloud 9 into PolyAI Agent Studio

Cloud 9's shape — XML bodies, credentials per call, a closed daytime window, no push events — means the integration layer does real work. This is where that work lives.

Functions, not raw calls

Each Cloud 9 procedure is wrapped in an Agent Studio function that owns the XML envelope, injects the credential triple from secrets, parses <Records> into typed output, and — importantly — maps ErrorCode to a branchable outcome rather than an exception.

ErrorCodeAgent behaviour
0 unknown errorRetry once, then handoff
1 invalid credentialsDo not retry. Alert; handoff every call until resolved
2/3/4/5 bad inputRe-capture the offending field, then retry once
7 outside allowance windowFall back to cache for reads; for writes, capture and handoff
8 rate limitedBack off; serve from cache if the procedure is cacheable
9/10 not whitelisted / not authorisedConfiguration fault — alert and handoff. Never retry in a loop
16 procedure validation failureSurface the specific message; re-capture if it names a field
Because errors arrive as 200 OK, the wrapper must inspect <ResponseStatus> on every response. An HTTP-status-only check will treat every failure as a success and return an empty record set.

Config & secrets

ItemWhere
ClientID, UserName, PasswordProject secrets, per environment
Base endpoint URLConfig variable — per tenant, not global
VendorUserNameConfig variable (≤25 chars)
Default locationGUID, providerGUIDConfig page, per location variant
Schedule view / column GUID mapRefreshed by the nightly sync
Reason → appointment-type mappingConfig page, customer-owned

Variants per location

GetLocations returns TimeZone per location — Cloud 9 expects you to know it, and returns datetime values in the plain 12/30/1999 12:00:00 AM format with no offset attached.

!
Every datetime in this API is offset-free. Resolving the location before interpreting “tomorrow at 3” is not an optimisation — it is required for correctness in any multi-location deployment.

Variants re-scope: greeting and practice name, the location's timezone for all date maths, default provider and schedule view, and the bookable appointment-type subset.

The sync job

A scheduled job running inside the open window. It is part of the integration, not infrastructure trivia — several flows are unbuildable without it.

Delta pulls

GetPatientList(ModifiedSince) and GetAppointmentListSince(dtSince) — both paged, pageSize capped at 1000.

Reverse-phone index

GetPatientPhone and GetResponsiblePartyPhone return every number with no phone-side filter. Normalise to E.164 and index locally — this is the only route to caller-ID identification.

Reference data

Locations, appointment types, schedule views and columns, patient statuses, contact-info types, SMS carriers.

Pre-flight assertions

Assert a NEW patient status and a Home contact-info type exist. Fail loudly — these silently break new-patient registration.

Deferred write queue

Only if writes are not whitelisted. Flush confirmations and cancellations in the next window, and reconcile against the following delta.

Gaps & open questions

What we verified — and what still needs confirming

Everything here was checked against the full procedure index of the 12.10 C9 release guide. Nothing on this page is an assumption of absence — each is a confirmed absence, or a question the document leaves genuinely open.

Deliberately out of scope

These are supported by the API but excluded from the flows in this guide.

CapabilityProcedureWhy excluded
Financial balances & agingGetResponsiblePartyBalance, GetAgingReportDataReading a balance is feasible, but no payment can be taken — quoting a balance with no way to settle it creates a worse call, not a better one.
Contract / payment plan detailGetContracts, GetInsuranceContractsSame reason. Belongs to a treatment-coordinator conversation, not an automated one.
Recall & continuing careGetRecallListByDate, GetPatientsContinuingCareGenuinely useful for outbound campaigns — out of scope for the five inbound use cases here.
No-show & dismissed listsGetNoShowList, GetLastDismissedAppointmentsOutbound reactivation, not inbound handling.
“Sooner if possible” waitlistGetSoonerIfPossibleAppointmentsRead-only. The flag can be read but not set, so the agent cannot add a caller to the waitlist.
PolyAI × Planet DDS Cloud 9 · Built from Basic Guide and Commonly Used APIs, 12.10 C9 Release (October 2025).
Procedure behaviour is as documented by Planet DDS and not yet verified against a live sandbox. Items marked Verify require confirmation from cloud9.integrations@planetdds.com.