https://phosra-api-sandbox-production.up.railway.app. No API key, nothing to install — the
platform roster comes from the sandbox reference provider (did:ocss:loopline).
Sandbox-first. These calls run against the open sandbox with no credential. In production the
platform roster comes from the real provider you connected (via the OAuth ceremony in
Connect a platform) and the family endpoints are family-scoped — the
diff-and-reconcile logic is identical.
Before you start
This recipe uses a family with one child in Phosra (Mia) connected to a platform that reports three (Mia, Leo, Ava). Set the base URL and family once:Pull the Phosra roster
GET /families/{familyID}/children returns the
children Phosra currently knows about for this family.200 — Phosra has one child:Pull the platform roster
The connected platform reports its own view of the family through
Live Phosra has Mia; the platform has Mia, Leo, and Ava. Leo and Ava are the drift.
GET /oauth/profiles — the child list you receive after the connect
ceremony, authorized with the access_token that ceremony returned. The authorize step is
browser-driven (the parent grants consent), so the TypeScript and Python tabs start from the
accessToken you already hold; the cURL tab runs the whole chain inline as a sandbox shortcut.200 — the platform reports three children:Diff the rosters
Compute which platform children Phosra is missing. Match on the child’s name (
displayName on the
platform side, name on Phosra’s) — a platform’s subject_ref is its own identifier and will not
equal a Phosra child id, so it is not the join key.Add the missing children
For each missing child, Live
POST /families/{familyID}/children
adds them to the Phosra family. Only a name and birth date are required.201 for the Ava add — a new Phosra child id:The platform profile does not carry a birth date, so supply one from your own records or an age
band. A newly-added child has no policy yet — generate an age-appropriate one next (see
Onboard a multi-child household, which turns a birth date
into a full rule set in one call).
Confirm parity
Re-pull the Phosra roster. It now matches the platform — every child the console reports exists in
Phosra:Live The drift is reconciled. Give Leo and Ava a policy, then enforce so the new children are actually
covered on every connected platform.
200 — three children, matching the platform’s three profiles:The whole flow at a glance
| # | Step | Call | Live result |
|---|---|---|---|
| 1 | Phosra roster | GET /families/{id}/children | 1 child — Mia |
| 2 | Platform roster | GET /oauth/profiles | 3 profiles — Mia, Leo, Ava |
| 3 | Diff by name | (local) | missing: Leo, Ava |
| 4 | Add missing | POST /families/{id}/children ×2 | Leo 567b2b02…, Ava 66c24a80… |
| 5 | Confirm | GET /families/{id}/children | 3 children — in sync |
Next steps
Onboard a multi-child household
Turn each newly-added child’s birth date into a full age-appropriate policy in one call.
Connect a platform
The full OAuth ceremony behind the
GET /oauth/profiles roster this recipe diffs against.Recover a disconnected platform
The other reconciliation — a platform link that dropped rather than a roster that drifted.
Change a rule and enforce it
Push policy to every connected platform once the new children have one.