import { PhosraClient } from "@phosra/sdk";
const phosra = new PhosraClient({
baseUrl: "https://phosra-api-sandbox-production.up.railway.app/api/v1",
accessToken: process.env.PHOSRA_API_KEY,
});
const result = await phosra.standards.list();
console.log(result);curl -sS "https://phosra-api-sandbox-production.up.railway.app/api/v1/standards"
import requests
BASE = "https://phosra-api-sandbox-production.up.railway.app/api/v1"
res = requests.get(
f"{BASE}/standards",
)
print(res.status_code, res.json())
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
base := "https://phosra-api-sandbox-production.up.railway.app/api/v1"
req, _ := http.NewRequest("GET", base+"/standards", nil)
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(resp.Status, string(out))
}
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://phosra-api-sandbox-production.up.railway.app/api/v1/standards",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.get("https://phosra-api-sandbox-production.up.railway.app/api/v1/standards")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://phosra-api-sandbox-production.up.railway.app/api/v1/standards")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"id": "f42e8ef8-7534-4cd1-82fa-eff3fbf818e2",
"slug": "four-norms",
"name": "Four Norms",
"organization": "The Anxious Generation",
"description": "Jonathan Haidt's four foundational norms for a phone-free childhood.",
"long_description": "Based on The Anxious Generation by Jonathan Haidt, the Four Norms represent a research-backed framework for protecting children from the harms of smartphone-based childhood.",
"version": "1.0",
"published": true,
"min_age": 0,
"max_age": 16,
"channel": "stable",
"source": {},
"co_branding": {},
"sort_order": 0,
"adoption_count": 0,
"rules": [
{
"id": "6bc9d15e-31ea-4fce-adf2-a8a8870cc32e",
"standard_id": "f42e8ef8-7534-4cd1-82fa-eff3fbf818e2",
"category": "social_media_min_age",
"label": "No social media until age 16",
"enabled": true,
"config": {
"min_age": 16
},
"kind": "enforced",
"sort_order": 1
},
{
"id": "904e43dc-ef21-454c-9efc-cac10f8ab897",
"standard_id": "f42e8ef8-7534-4cd1-82fa-eff3fbf818e2",
"category": "privacy_account_creation",
"label": "No smartphones until age 14",
"enabled": true,
"config": {
"min_age": 14
},
"kind": "enforced",
"sort_order": 2
},
{
"id": "ad36b403-a8a0-4697-bb5b-c67c5332e312",
"standard_id": "f42e8ef8-7534-4cd1-82fa-eff3fbf818e2",
"category": "time_scheduled_hours",
"label": "Phone-free schools",
"enabled": true,
"config": {
"blocked_during": "school_hours"
},
"kind": "enforced",
"sort_order": 3
},
{
"id": "646309f4-c716-4607-891e-29a73b1e1234",
"standard_id": "f42e8ef8-7534-4cd1-82fa-eff3fbf818e2",
"category": "time_daily_limit",
"label": "More outdoor play",
"enabled": true,
"config": {
"outdoor_minimum_minutes": 120
},
"kind": "enforced",
"sort_order": 4
}
],
"created_at": "2026-06-15T03:04:56.429142Z",
"updated_at": "2026-06-15T03:04:56.429142Z"
},
{
"id": "0890eafb-0a61-46f3-8e9a-21a6e10cf33f",
"slug": "screen-smart-family",
"name": "Screen-Smart Family",
"organization": "Phosra",
"description": "Phosra's recommended baseline for balanced screen time and online safety.",
"long_description": "The Screen-Smart Family standard is Phosra's own curated best-practice ruleset, designed by child development experts and informed by current legislation.",
"version": "1.0",
"published": true,
"min_age": 0,
"max_age": 17,
"channel": "stable",
"source": {},
"co_branding": {},
"sort_order": 0,
"adoption_count": 0,
"rules": [
{
"id": "a01f0637-61a2-4bba-aef4-de7d057377b4",
"standard_id": "0890eafb-0a61-46f3-8e9a-21a6e10cf33f",
"category": "time_daily_limit",
"label": "Daily screen time",
"enabled": true,
"config": {
"adaptive": true
},
"kind": "enforced",
"sort_order": 1
},
{
"id": "af078ce1-caed-4013-96b9-d7460989c99d",
"standard_id": "0890eafb-0a61-46f3-8e9a-21a6e10cf33f",
"category": "content_rating",
"label": "Content ratings",
"enabled": true,
"config": {
"level": "age_appropriate"
},
"kind": "enforced",
"sort_order": 2
},
{
"id": "22ad722a-6f0d-41bc-a77d-4680b6e1b3af",
"standard_id": "0890eafb-0a61-46f3-8e9a-21a6e10cf33f",
"category": "web_safesearch",
"label": "Safe search",
"enabled": true,
"config": {
"enforced": true
},
"kind": "enforced",
"sort_order": 3
},
{
"id": "f52fdbb2-56a9-4b9d-8974-11b1cb9ae54c",
"standard_id": "0890eafb-0a61-46f3-8e9a-21a6e10cf33f",
"category": "social_chat_control",
"label": "Chat controls",
"enabled": true,
"config": {
"mode": "known_contacts_only"
},
"kind": "enforced",
"sort_order": 4
},
{
"id": "1e9779a7-848c-452b-92f2-816f3fc519f3",
"standard_id": "0890eafb-0a61-46f3-8e9a-21a6e10cf33f",
"category": "purchase_approval",
"label": "Purchase approval",
"enabled": true,
"config": {
"required": true
},
"kind": "enforced",
"sort_order": 5
},
{
"id": "33716301-f55a-4d1b-ae4b-e1494ad59777",
"standard_id": "0890eafb-0a61-46f3-8e9a-21a6e10cf33f",
"category": "privacy_data_sharing",
"label": "Data sharing",
"enabled": true,
"config": {
"level": "minimal"
},
"kind": "enforced",
"sort_order": 6
}
],
"created_at": "2026-06-15T03:04:56.429142Z",
"updated_at": "2026-06-15T03:04:56.429142Z"
}
]{
"error": "Unauthorized",
"message": "missing or invalid Authorization header",
"code": 401
}{
"error": "Too Many Requests",
"message": "rate limit exceeded",
"code": 429
}{
"error": "Internal Server Error",
"message": "internal error",
"code": 500
}List community standards
Browse all published community standards/movements. No authentication required.
import { PhosraClient } from "@phosra/sdk";
const phosra = new PhosraClient({
baseUrl: "https://phosra-api-sandbox-production.up.railway.app/api/v1",
accessToken: process.env.PHOSRA_API_KEY,
});
const result = await phosra.standards.list();
console.log(result);curl -sS "https://phosra-api-sandbox-production.up.railway.app/api/v1/standards"
import requests
BASE = "https://phosra-api-sandbox-production.up.railway.app/api/v1"
res = requests.get(
f"{BASE}/standards",
)
print(res.status_code, res.json())
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
base := "https://phosra-api-sandbox-production.up.railway.app/api/v1"
req, _ := http.NewRequest("GET", base+"/standards", nil)
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(resp.Status, string(out))
}
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://phosra-api-sandbox-production.up.railway.app/api/v1/standards",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.get("https://phosra-api-sandbox-production.up.railway.app/api/v1/standards")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://phosra-api-sandbox-production.up.railway.app/api/v1/standards")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"id": "f42e8ef8-7534-4cd1-82fa-eff3fbf818e2",
"slug": "four-norms",
"name": "Four Norms",
"organization": "The Anxious Generation",
"description": "Jonathan Haidt's four foundational norms for a phone-free childhood.",
"long_description": "Based on The Anxious Generation by Jonathan Haidt, the Four Norms represent a research-backed framework for protecting children from the harms of smartphone-based childhood.",
"version": "1.0",
"published": true,
"min_age": 0,
"max_age": 16,
"channel": "stable",
"source": {},
"co_branding": {},
"sort_order": 0,
"adoption_count": 0,
"rules": [
{
"id": "6bc9d15e-31ea-4fce-adf2-a8a8870cc32e",
"standard_id": "f42e8ef8-7534-4cd1-82fa-eff3fbf818e2",
"category": "social_media_min_age",
"label": "No social media until age 16",
"enabled": true,
"config": {
"min_age": 16
},
"kind": "enforced",
"sort_order": 1
},
{
"id": "904e43dc-ef21-454c-9efc-cac10f8ab897",
"standard_id": "f42e8ef8-7534-4cd1-82fa-eff3fbf818e2",
"category": "privacy_account_creation",
"label": "No smartphones until age 14",
"enabled": true,
"config": {
"min_age": 14
},
"kind": "enforced",
"sort_order": 2
},
{
"id": "ad36b403-a8a0-4697-bb5b-c67c5332e312",
"standard_id": "f42e8ef8-7534-4cd1-82fa-eff3fbf818e2",
"category": "time_scheduled_hours",
"label": "Phone-free schools",
"enabled": true,
"config": {
"blocked_during": "school_hours"
},
"kind": "enforced",
"sort_order": 3
},
{
"id": "646309f4-c716-4607-891e-29a73b1e1234",
"standard_id": "f42e8ef8-7534-4cd1-82fa-eff3fbf818e2",
"category": "time_daily_limit",
"label": "More outdoor play",
"enabled": true,
"config": {
"outdoor_minimum_minutes": 120
},
"kind": "enforced",
"sort_order": 4
}
],
"created_at": "2026-06-15T03:04:56.429142Z",
"updated_at": "2026-06-15T03:04:56.429142Z"
},
{
"id": "0890eafb-0a61-46f3-8e9a-21a6e10cf33f",
"slug": "screen-smart-family",
"name": "Screen-Smart Family",
"organization": "Phosra",
"description": "Phosra's recommended baseline for balanced screen time and online safety.",
"long_description": "The Screen-Smart Family standard is Phosra's own curated best-practice ruleset, designed by child development experts and informed by current legislation.",
"version": "1.0",
"published": true,
"min_age": 0,
"max_age": 17,
"channel": "stable",
"source": {},
"co_branding": {},
"sort_order": 0,
"adoption_count": 0,
"rules": [
{
"id": "a01f0637-61a2-4bba-aef4-de7d057377b4",
"standard_id": "0890eafb-0a61-46f3-8e9a-21a6e10cf33f",
"category": "time_daily_limit",
"label": "Daily screen time",
"enabled": true,
"config": {
"adaptive": true
},
"kind": "enforced",
"sort_order": 1
},
{
"id": "af078ce1-caed-4013-96b9-d7460989c99d",
"standard_id": "0890eafb-0a61-46f3-8e9a-21a6e10cf33f",
"category": "content_rating",
"label": "Content ratings",
"enabled": true,
"config": {
"level": "age_appropriate"
},
"kind": "enforced",
"sort_order": 2
},
{
"id": "22ad722a-6f0d-41bc-a77d-4680b6e1b3af",
"standard_id": "0890eafb-0a61-46f3-8e9a-21a6e10cf33f",
"category": "web_safesearch",
"label": "Safe search",
"enabled": true,
"config": {
"enforced": true
},
"kind": "enforced",
"sort_order": 3
},
{
"id": "f52fdbb2-56a9-4b9d-8974-11b1cb9ae54c",
"standard_id": "0890eafb-0a61-46f3-8e9a-21a6e10cf33f",
"category": "social_chat_control",
"label": "Chat controls",
"enabled": true,
"config": {
"mode": "known_contacts_only"
},
"kind": "enforced",
"sort_order": 4
},
{
"id": "1e9779a7-848c-452b-92f2-816f3fc519f3",
"standard_id": "0890eafb-0a61-46f3-8e9a-21a6e10cf33f",
"category": "purchase_approval",
"label": "Purchase approval",
"enabled": true,
"config": {
"required": true
},
"kind": "enforced",
"sort_order": 5
},
{
"id": "33716301-f55a-4d1b-ae4b-e1494ad59777",
"standard_id": "0890eafb-0a61-46f3-8e9a-21a6e10cf33f",
"category": "privacy_data_sharing",
"label": "Data sharing",
"enabled": true,
"config": {
"level": "minimal"
},
"kind": "enforced",
"sort_order": 6
}
],
"created_at": "2026-06-15T03:04:56.429142Z",
"updated_at": "2026-06-15T03:04:56.429142Z"
}
]{
"error": "Unauthorized",
"message": "missing or invalid Authorization header",
"code": 401
}{
"error": "Too Many Requests",
"message": "rate limit exceeded",
"code": 429
}{
"error": "Internal Server Error",
"message": "internal error",
"code": 500
}curl https://phosra-api-sandbox-production.up.railway.app/api/v1/standards
[
{
"slug": "four-norms",
"name": "Four Norms",
"organization": "The Anxious Generation",
"description": "Jonathan Haidt's four foundational norms for a phone-free childhood.",
"version": "1.0",
"min_age": 0,
"max_age": 16,
"rules": [ { "category": "social_media_min_age", "label": "No social media before 16" } ]
}
]
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Response
Standards list
Unique identifier for this resource.
URL-safe stable identifier.
Human-readable display name.
Name of the organization that publishes this standard.
Human-readable description.
Extended multi-paragraph description shown on the standard detail page.
URL of the platform or resource icon.
Monotonically increasing version, bumped on every change.
Whether this standard is published and adoptable by families.
Minimum age (in years) this tier is appropriate for.
Upper age bound (in years) this standard is intended for; null if open-ended.
Number of families that have adopted this standard.
List of rules.
Show child attributes
Show child attributes
RFC 3339 timestamp of when the resource was created.
RFC 3339 timestamp of the resource's most recent update.