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.