Skip to main content
This is the single page to keep open while you build against the sandbox — the equivalent of Stripe’s test cards or Plaid’s sandbox credentials. Everything here is a fixed, seeded value you can hard-code in a test: the demo children, the connectable reference providers, the 22 reference platforms, the exact POST /setup/quick shape, the connect scopes, and the rules that govern resets and retries. Every value on this page was captured live from the sandbox while writing it. For a guided, step-by-step tour of the same sandbox (health, the signed Trust List, self-registering a DID), read Test in the sandbox; this page is the flat lookup table.

Base URL

One sandbox, one base URL. phosra-api-sandbox-production.up.railway.app is the open partner sandbox — no key, no signup, safe to hammer. Every curl on this page runs against it verbatim. (You may see a -staging host elsewhere in the census; that one is a Phosra-internal mirror and does not expose the reference-provider OAuth surface — use the -production host above.) When you go live, swap the base URL for https://prodapi.phosra.com. POST /setup/quick and the other consumer routes on this page authenticate the signed-in parent with a WorkOS session JWT in production, not a phosra_ developer key — see Authentication. The request and response shapes are identical.

The cheat sheet

Everything fixed in the sandbox, in one scan. Each row links to its section below.

Demo child profiles

The sandbox is seeded with one demo family — Mia, Leo, and Ava — each with an active policy already in place. These are the profiles the connect ceremony shares, and their subject_ref values are stable across every sandbox reset, so you can hard-code them in tests. You retrieve them by completing the reference-provider OAuth flow, exactly as a real Connect integration would. The /oauth/profiles leg returns them as a bare ChildProfile[]:
Live response (200 OK):
The consent code and access token are opaque, single-value strings (sbxauth_… and sbxtok_…). The sandbox flow is stateless — it does not persist codes or bind PKCE — so any freshly minted sbxauth_ code exchanges cleanly. This is a sandbox affordance, not a production IdP.

Reference providers

Providers live on the signed Trust List. Two are wired for the full connect ceremony and give you the two branches you need to test:
Live response (200 OK):
The Trust List holds many more verified reference entities you can discover and verify signatures against — did:ocss:aura, did:ocss:brightcanary, did:ocss:murmur, did:ocss:beacon, did:ocss:household-acme, and more — plus a growing set of provisional entries added by self-registration. Because self-registration is open, treat the total entry count as a live number: verify each entry’s signature and tier rather than asserting on the total. See Test in the sandbox for the signed-document shape and how to self-register your own DID.

Reference platforms

GET /api/v1/platforms returns the 22 enforcement targets the sandbox can fan a policy out to, grouped by category. Use any platform_id when connecting a platform or reading discovery results.

POST /setup/quick

The fastest path to a working policy. Hand it a child’s name, birth date, and a strictness level; it creates a family, a child, an active policy, and a full set of age-appropriate rules — derived from the birth date, in one call, no follow-ups.

Request fields

Response shape (201 Created)

Trimmed to the top-level shape — the live rules array carries all 20 entries:
Every POST /setup/quick returns these 20 rule categories (config values vary with the child’s age and the strictness level):addictive_design_control, age_gate, algo_feed_control, content_rating, data_deletion_request, dm_restriction, geolocation_opt_in, monitoring_activity, notification_curfew, privacy_account_creation, privacy_profile_visibility, purchase_approval, purchase_block_iap, social_chat_control, targeted_ad_block, time_daily_limit, time_scheduled_hours, usage_timer_notification, web_filter_level, web_safesearch.These are 20 of the 123 categories in the OCSS rule registry — the age-based generator selects the subset relevant to a child’s age band.

Connect and token scopes

The reference-provider OAuth flow uses two scope strings: The token response is a standard bearer grant:

Reset and idempotency

The sandbox has no destructive “reset” button — instead it gives you two levers so your tests stay clean and repeatable: Deterministic per-caller data (X-Sandbox-Session). Pass an X-Sandbox-Session: <any-string> header and the sandbox keys all your data to a stable sandbox user for that session. Reuse the same value across a test run to accumulate against one caller; use a fresh value to start from a clean slate. Omit it and you share the default session.
Idempotent retries (family_id). POST /setup/quick deduplicates on (family_id, child_name, birth_date). A repeat call that passes the family_id from a previous response — with the same child name and birth date — returns the same child and policy rather than minting a duplicate. This makes the endpoint safe to retry after a network failure, and it repairs a half-created child from an interrupted first attempt.
Without a family_id, each anonymous POST /setup/quick creates a new family — two bare calls return two different families and children. Idempotency kicks in only once you thread the family_id back through. That is the intended design: it lets you build up independent test households without a shared caller identity.

Going to production

Nothing you do in the sandbox touches a real family. When you are ready, three changes flip you to production, and the request shapes are unchanged:
1

Swap the base URL

https://phosra-api-sandbox-production.up.railway.apphttps://prodapi.phosra.com
2

Add a live key

Attach an Authorization: Bearer phosra_live_… header. Create one in the dashboard.
3

Use real DIDs

The reference providers (did:ocss:loopline, …) and demo children are sandbox-only. In production you connect real accredited providers and real family data.