Endpoint summary
Every operation the Partner API serves: 83 across 52 paths. This page is a map — the interactive reference carries the parameters, request and response schemas, and examples for each one.
Every path below is relative to the base URL for your environment, and every request carries Authorization: Bearer <token>. The scope column names the organisation scope an operation requires; a blank cell means the operation is reached with a delegated practitioner token rather than an organisation scope.
Meta
Service health and connectivity. Use these endpoints to confirm a token authenticates and the API is reachable before exercising any business endpoint.
| Method | Path | What it does | Scope |
|---|---|---|---|
GET |
/v1/partner/health |
Partner API health check |
Practitioners
Clinic-bound provider records. Every practitioner belongs to exactly one clinic. A practitioner’s email maps to a login identity, so an email already in use returns 409. Deleting a practitioner de-lists rather than destroys it.
| Method | Path | What it does | Scope |
|---|---|---|---|
GET |
/v1/partner/practitioners |
List partner practitioners | practitioners:read |
POST |
/v1/partner/practitioners |
Create a partner practitioner | practitioners:write |
GET |
/v1/partner/practitioners/{id} |
Get a partner practitioner by id | practitioners:read |
PATCH |
/v1/partner/practitioners/{id} |
Update a partner practitioner | practitioners:write |
DELETE |
/v1/partner/practitioners/{id} |
Soft-delete a partner practitioner | practitioners:delete |
Clinics
Clinics are the partition that practitioners, patients, and appointments belong to. Deleting a clinic de-lists rather than destroys it. A clinic cannot be deleted while it still has active practitioners, patients, or appointments: that returns 409 with problem type clinic-not-empty and counts of the blocking dependents. Clear or reassign the dependents first.
| Method | Path | What it does | Scope |
|---|---|---|---|
GET |
/v1/partner/clinics |
List partner clinics | clinics:read |
POST |
/v1/partner/clinics |
Create a partner clinic | clinics:write |
GET |
/v1/partner/clinics/{id} |
Get a partner clinic by id | clinics:read |
PATCH |
/v1/partner/clinics/{id} |
Update a partner clinic | clinics:write |
DELETE |
/v1/partner/clinics/{id} |
Soft-delete a partner clinic | clinics:delete |
Patients
Patient records are maintained per organization: a patient created by your organization is yours alone, and the same person may exist independently under another organization. Email is not unique — duplicate emails within or across organizations are legitimate, because families commonly share an inbox. These records carry protected health information; handle and store them accordingly. A delegated token (see "Acting as a clinician") narrows this surface to the token clinician's roster.
| Method | Path | What it does | Scope |
|---|---|---|---|
GET |
/v1/partner/patients |
List patients | patients:read |
POST |
/v1/partner/patients |
Create a patient | patients:write |
GET |
/v1/partner/patients/{id} |
Get a patient by id | patients:read |
PATCH |
/v1/partner/patients/{id} |
Update a patient | patients:write |
DELETE |
/v1/partner/patients/{id} |
Soft-delete a patient | patients:delete |
Playrooms
Playrooms are the themed virtual spaces a clinician runs a session in: a name, an age band, a colour theme, and the set of session items available inside. Each playroom belongs to exactly one practitioner, so this surface requires a delegated token (see "Acting as a clinician") on every verb; an organization token is refused. Every new practitioner account starts with a set of PlaySpace-created rooms, flagged is_default. There is no delete endpoint: unpublish a room with PATCH setting published to false.
| Method | Path | What it does | Scope |
|---|---|---|---|
GET |
/v1/partner/playrooms |
List the acting practitioner's playrooms | |
POST |
/v1/partner/playrooms |
Create a playroom for the acting practitioner | |
GET |
/v1/partner/playrooms/{id} |
Get a playroom by id | |
PATCH |
/v1/partner/playrooms/{id} |
Update a playroom | |
GET |
/v1/partner/playrooms/{id}/content |
List the content on a playroom's shelf | practitioners:read |
GET |
/v1/partner/playrooms/{id}/content/{contentType}/{contentId} |
Get one content attachment on a playroom | practitioners:read |
PUT |
/v1/partner/playrooms/{id}/content/{contentType}/{contentId} |
Attach a worksheet or storybook to a playroom | practitioners:write |
DELETE |
/v1/partner/playrooms/{id}/content/{contentType}/{contentId} |
Detach content from a playroom | practitioners:write |
Toolkits
Toolkits are named bundles of session items, using the same item vocabulary as a playroom but without the room theming. Like playrooms they belong to a single practitioner and require a delegated token on every verb, ship as PlaySpace-created defaults on a new account, and have no delete endpoint — unpublish with PATCH setting published to false.
| Method | Path | What it does | Scope |
|---|---|---|---|
GET |
/v1/partner/toolkits |
List the acting practitioner's toolkits | |
POST |
/v1/partner/toolkits |
Create a toolkit for the acting practitioner | |
GET |
/v1/partner/toolkits/{id} |
Get a toolkit by id | |
PATCH |
/v1/partner/toolkits/{id} |
Update a toolkit | |
GET |
/v1/partner/toolkits/{id}/content |
List the content in a toolkit | practitioners:read |
GET |
/v1/partner/toolkits/{id}/content/{contentType}/{contentId} |
Get one content attachment in a toolkit | practitioners:read |
PUT |
/v1/partner/toolkits/{id}/content/{contentType}/{contentId} |
Attach a worksheet or storybook to a toolkit | practitioners:write |
DELETE |
/v1/partner/toolkits/{id}/content/{contentType}/{contentId} |
Detach content from a toolkit | practitioners:write |
Appointments
Appointments link one practitioner and one patient who belong to the same clinic. There is no delete endpoint: cancel an appointment with PATCH setting status to cancelled. Cancelling removes the appointment from connected calendars and notifies the patient. A delegated token (see "Acting as a clinician") narrows this surface to the token clinician's own appointments.
| Method | Path | What it does | Scope |
|---|---|---|---|
GET |
/v1/partner/appointments |
List appointments | appointments:read |
POST |
/v1/partner/appointments |
Create an appointment | appointments:write |
GET |
/v1/partner/appointments/{id} |
Get an appointment | appointments:read |
PATCH |
/v1/partner/appointments/{id} |
Update an appointment | appointments:write |
POST |
/v1/partner/appointments/{id}/session-links |
Get an appointment's session join links | appointments:read |
Forms
Questionnaires a clinician authors and owns. Each form belongs to a single practitioner, so this surface requires a delegated token (see "Acting as a clinician") and always lists that clinician's own library. Only published forms are listed: a draft is still being authored, and answers recorded against one would not be meaningful. Answers are never returned here — a listed form is a blank template. To have a patient fill one, mint an embed token for the form and frame the embedded form surface.
| Method | Path | What it does | Scope |
|---|---|---|---|
GET |
/v1/partner/forms |
List the acting practitioner's published forms | |
POST |
/v1/partner/forms |
Create a form | |
GET |
/v1/partner/forms/{id} |
Get a form by id | |
PATCH |
/v1/partner/forms/{id} |
Make a form shelf-ready | |
DELETE |
/v1/partner/forms/{id} |
Delete a form | |
GET |
/v1/partner/forms/{id}/submissions |
List a form's submissions | |
GET |
/v1/partner/forms/{id}/submissions/{submissionId} |
Get one submission |
Storybooks
Illustrated stories a clinician creates and owns. Every endpoint here requires a delegated token (see "Acting as a clinician"): a story belongs to one clinician, so an organization-wide token has nobody to scope to and is refused. Generation is asynchronous and bills per story — the response returns the story in its generating state, so poll it rather than retrying the create. Image links expire about an hour after they are issued: re-read the pages for fresh links, or fetch the asset bytes, rather than storing a link.
| Method | Path | What it does | Scope |
|---|---|---|---|
GET |
/v1/partner/storybooks |
List the acting practitioner's storybooks | |
POST |
/v1/partner/storybooks |
Generate a storybook | |
GET |
/v1/partner/storybooks/{id} |
Get a storybook by id | |
PATCH |
/v1/partner/storybooks/{id} |
Make a storybook shelf-ready | |
DELETE |
/v1/partner/storybooks/{id} |
Delete a storybook | |
GET |
/v1/partner/storybooks/{id}/pages |
List a storybook's pages | |
GET |
/v1/partner/storybooks/{id}/pages/{pageId} |
Get one page of a storybook | |
GET |
/v1/partner/storybooks/{id}/pages/{pageId}/image |
Download a page's illustration | |
GET |
/v1/partner/storybooks/{id}/cover |
Download a storybook's cover image | |
GET |
/v1/partner/storybooks/{id}/download |
Download a storybook as a PDF | |
POST |
/v1/partner/storybooks/{id}/share |
Email a storybook to a patient |
Games
Live sandtray and dollhouse sessions, and the scenes they leave behind. Starting a session returns one ready-to-frame URL per seat — clinician and patient — both bound to the same session key, so the two participants share one scene. Every endpoint here requires a delegated token (see "Acting as a clinician"), and the clinician is read from the token rather than from the request. Deleting a saved scene de-lists it rather than destroying it. Scene preview images are served as bytes and most scenes have none, so check has_thumbnail before asking for one.
| Method | Path | What it does | Scope |
|---|---|---|---|
GET |
/v1/partner/game-saves |
List the acting clinician's saved scenes | |
GET |
/v1/partner/game-saves/{id} |
Get one saved scene, with its contents | |
DELETE |
/v1/partner/game-saves/{id} |
Delete a saved scene | |
GET |
/v1/partner/game-saves/{id}/thumbnail |
Download a scene's preview image | |
POST |
/v1/partner/game-sessions |
Start a sandtray or dollhouse session |
Notes
Clinical notes a clinician writes about a session, including the ones PlaySpace drafts automatically from a recorded session. Read-only: a note is the clinician's own record, so this API can return one but can never create, change or remove one. Every endpoint here requires a delegated token (see "Acting as a clinician") — a note belongs to one clinician, so an organization-wide token has nobody to scope to and is refused. Each note carries the appointment, patient and practitioner it belongs to as ids on your own records. Bodies are omitted from the list by default and returned on request; a single note always carries its body. The verbatim, speaker-diarised session recording is returned only by GET /v1/partner/notes/{id}, and only when you ask for it with include=transcript — never on the list, at any page size.
| Method | Path | What it does | Scope |
|---|---|---|---|
GET |
/v1/partner/notes |
List the acting clinician's notes | |
GET |
/v1/partner/notes/{id} |
Get a note by id |
Exports
A complete copy of one clinician's PlaySpace records, delivered as a single ZIP archive. Every endpoint here requires a delegated token (see "Acting as a clinician"): an export is one clinician's whole record, so an organization-wide token has nobody to scope to and is refused. Starting one is asynchronous — the response is the export in its queued state, so poll it rather than retrying the start. A clinician can have only one export running at a time and that slot is shared with the exports they start themselves, so a start while one is in flight returns 409. A finished archive stays downloadable for seven days and is then deleted. The download answers a redirect to a short-lived link: follow it and fetch the bytes promptly rather than storing the link.
| Method | Path | What it does | Scope |
|---|---|---|---|
POST |
/v1/partner/exports |
Start an export of the acting clinician's records | |
GET |
/v1/partner/exports/{id} |
Get an export by id | |
GET |
/v1/partner/exports/{id}/download |
Download a finished export archive |
Embed
Short-lived tokens that let your own application frame a PlaySpace surface for one clinician. Mint them server-side, once per session, and never expose your partner credential to a browser. Requires a delegated token (see "Acting as a clinician"); the clinician the surface acts as comes from your token, never from the request body. Supply the exact origins that will frame the surface — an origin you omit cannot render it.
| Method | Path | What it does | Scope |
|---|---|---|---|
POST |
/v1/partner/embed-tokens |
Mint an embed capability token |
Clinic community
What the clinicians of one clinic have shared with each other: worksheets, storybooks and forms a practitioner published for colleagues to preview and copy into their own library. Delegated tokens act as one clinician; an organization token may list one clinic's items.
| Method | Path | What it does | Scope |
|---|---|---|---|
GET |
/v1/partner/clinic-community/items |
List what the clinic has shared | |
POST |
/v1/partner/clinic-community/items |
Share your content with the clinic | |
GET |
/v1/partner/clinic-community/items/{id} |
Preview a shared item | |
DELETE |
/v1/partner/clinic-community/items/{id} |
Remove an item you shared | |
POST |
/v1/partner/clinic-community/items/{id}/copy |
Copy a shared item into your library |
Session configuration
| Method | Path | What it does | Scope |
|---|---|---|---|
GET |
/v1/partner/session-config |
Read your organization's session configuration | |
PATCH |
/v1/partner/session-config |
Change your organization's session configuration |
Worksheets
| Method | Path | What it does | Scope |
|---|---|---|---|
GET |
/v1/partner/worksheets |
List the acting practitioner's worksheets | |
POST |
/v1/partner/worksheets |
Create a worksheet | |
GET |
/v1/partner/worksheets/{id} |
Get a worksheet by id | |
DELETE |
/v1/partner/worksheets/{id} |
Delete a worksheet | |
GET |
/v1/partner/worksheets/{id}/pages |
List a worksheet's pages | |
GET |
/v1/partner/worksheets/{id}/pages/{pageId} |
Get one page of a worksheet | |
GET |
/v1/partner/worksheets/{id}/pages/{pageId}/image |
Download a page's image | |
GET |
/v1/partner/worksheets/{id}/cover |
Download a worksheet's cover image | |
GET |
/v1/partner/worksheets/{id}/download |
Download a worksheet as a PDF | |
POST |
/v1/partner/worksheets/{id}/share |
Email a worksheet to a patient |
What is not here
This table is the whole external surface. If an operation is not listed, no route serves it — see what you can build for the shape of the platform, and the machine-readable OpenAPI document for the full contract.