> ## Documentation Index
> Fetch the complete documentation index at: https://docs.phosra.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List platforms

> List all platforms Phosra can integrate with, including category, compliance tier, auth type, and capabilities.

Platforms are the downstream services Phosra can push a child's policy to — devices, DNS resolvers,
gaming networks, and streaming apps. Each entry advertises its `category`, accreditation `tier`,
`auth_type`, and a `rule_support` map describing which of the 123 OCSS categories it can enforce.

This endpoint is **public** (`security: []`) — no token required — so you can browse the catalog
before you authenticate.

```bash theme={null}
curl https://phosra-api-sandbox-production.up.railway.app/api/v1/platforms
```

```json Example response (live sandbox, truncated) theme={null}
[
  {
    "id": "fire_tablet",
    "name": "Amazon Fire Tablet",
    "category": "device",
    "tier": "pending",
    "auth_type": "manual",
    "enforcement_mode": "manual_attested",
    "capabilities": ["content_rating", "time_limit", "scheduled_hours", "web_filtering", "safe_search", "app_control", "purchase_control"],
    "rule_support": { "age_gate": "unsupported", "addictive_pattern_block": "unsupported" }
  }
]
```

The live sandbox currently lists **22 platforms** across four categories: `device`, `dns`, `gaming`,
and `streaming`. Use [Filter by category](/api-reference/platforms/get-platforms-by-category) or
[Filter by capability](/api-reference/platforms/get-platforms-by-capability) to narrow the list.


## OpenAPI

````yaml GET /platforms
openapi: 3.1.0
info:
  title: Phosra API
  description: Universal Parental Controls API - Define once, push everywhere
  version: 1.0.0
  contact:
    name: Phosra Developer Support
    url: https://docs.phosra.com
  license:
    name: Proprietary
    url: https://phosra.com/terms
servers:
  - url: https://phosra-api-sandbox-production.up.railway.app/api/v1
    description: >-
      Hosted sandbox — the one canonical, stable, partner-facing testing
      endpoint (seeded demo family + phosra_test_ keys). Default so the inline
      Try it never touches production. Same base the CLI uses.
  - url: https://prodapi.phosra.com/api/v1
    description: Production
  - url: http://localhost:8080/api/v1
    description: Local development
security:
  - BearerAuth: []
paths:
  /platforms:
    get:
      tags:
        - Platforms
      summary: List all platforms
      description: >-
        List all platforms Phosra can integrate with, including category,
        compliance tier, auth type, and capabilities.
      operationId: listAllPlatforms
      responses:
        '200':
          description: Platform list
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Platform'
              example:
                - id: fire_tablet
                  name: Amazon Fire Tablet
                  category: device
                  tier: pending
                  description: Amazon Fire Tablet Kids parental controls
                  icon_url: ''
                  auth_type: manual
                  enabled: true
                  capabilities:
                    - content_rating
                    - time_limit
                    - scheduled_hours
                    - web_filtering
                    - safe_search
                    - app_control
                    - purchase_control
                  enforcement_mode: manual_attested
                  rule_support:
                    addictive_design_control: unsupported
                    addictive_pattern_block: unsupported
                    adult_site_av_required: unsupported
                    age_appropriate_profile_mode: unsupported
                    age_gate: unsupported
                    age_signal_broadcast: unsupported
                    ai_chatbot_age_assertion: unsupported
                    ai_chatbot_tier_gate: unsupported
                    ai_companion_block: unsupported
                    ai_data_responsibility_rating_threshold: unsupported
                    ai_minor_interaction: unsupported
                    ai_no_csam_generation: unsupported
                    ai_no_engagement_dark_patterns: unsupported
                    ai_no_personhood_deception: unsupported
                    ai_no_self_harm_promotion: unsupported
                    ai_no_simulated_companionship: unsupported
                    ai_no_unsupervised_therapy: unsupported
                    ai_product_classification_gate: unsupported
                    ai_safety_rating_threshold: unsupported
                    ai_synthetic_media_disclosure: unsupported
                    ai_toy_safety_cert: unsupported
                    ai_training_data_opt_out: unsupported
                    ai_transparency_rating_threshold: unsupported
                    algo_feed_control: unsupported
                    algorithmic_audit: unsupported
                    app_install_block: unsupported
                    app_store_age_attestation: unsupported
                    autoplay_disable: unsupported
                    cipa_filter_attestation: unsupported
                    commercial_data_ban: unsupported
                    commercial_pressure_threshold: unsupported
                    content_allow_title: guided
                    content_allowlist_mode: guided
                    content_block_title: guided
                    content_descriptor_block: guided
                    content_rating: guided
                    crisis_resource_surface: unsupported
                    csam_reporting: unsupported
                    data_deletion_request: unsupported
                    data_minimization_enforce: unsupported
                    digital_literacy_curriculum_link: unsupported
                    dm_feature_disable: unsupported
                    dm_restriction: unsupported
                    dpia_request_generator: unsupported
                    dumbphone_migration_mode: unsupported
                    educational_credit: unsupported
                    ephemeral_message_disable: unsupported
                    esafety_commission_reporting: unsupported
                    firearm_content_block: unsupported
                    flagged_content_digest: unsupported
                    gambling_mechanics_block: unsupported
                    geolocation_opt_in: unsupported
                    geolocation_precision_cap: unsupported
                    hard_id_verification_escalation: unsupported
                    harm_report_intake: unsupported
                    image_content_monitoring: unsupported
                    image_rights_minor: unsupported
                    infinite_scroll_block: unsupported
                    library_filter_compliance: unsupported
                    message_content_monitoring: unsupported
                    minor_data_sale_audit_log: unsupported
                    monitoring_activity: unsupported
                    monitoring_alerts: unsupported
                    named_contact_block: unsupported
                    ncii_takedown: unsupported
                    not_for_minors_block: unsupported
                    notification_curfew: unsupported
                    os_age_signal_ingest: unsupported
                    parental_attestation_cert: unsupported
                    parental_consent_gate: unsupported
                    parental_event_notification: unsupported
                    phone_free_school_hours: unsupported
                    platform_liability_evidence_capture: unsupported
                    presence_status_hide: unsupported
                    privacy_account_creation: unsupported
                    privacy_data_sharing: unsupported
                    privacy_location: unsupported
                    privacy_profile_visibility: unsupported
                    privacy_rating_dimension_gate: unsupported
                    privacy_rating_score_threshold: unsupported
                    privacy_rating_tier_gate: unsupported
                    privacy_seal_required: unsupported
                    profanity_threshold: unsupported
                    prosocial_weight: unsupported
                    purchase_approval: guided
                    purchase_block_iap: guided
                    purchase_spending_cap: guided
                    rating_age_gate: unsupported
                    recognized_seal_allowlist: unsupported
                    representation_weight: unsupported
                    role_model_weight: unsupported
                    school_alert_routing: unsupported
                    screen_time_report: unsupported
                    search_query_monitoring: unsupported
                    sexual_content_threshold: unsupported
                    social_account_content_monitoring: unsupported
                    social_chat_control: unsupported
                    social_contacts: unsupported
                    social_media_min_age: unsupported
                    social_media_warning_label_render: unsupported
                    social_multiplayer: unsupported
                    stranger_dm_block: unsupported
                    stranger_outreach_friction: unsupported
                    streaming_age_rating_enforce: unsupported
                    student_privacy_school_mode: unsupported
                    substance_content_threshold: unsupported
                    targeted_ad_block: unsupported
                    teen_minimum_age_16_gate: unsupported
                    third_party_tracker_block: unsupported
                    time_daily_limit: guided
                    time_downtime: guided
                    time_per_app_limit: guided
                    time_scheduled_hours: guided
                    ugc_world_age_gate: unsupported
                    unrated_privacy_default: unsupported
                    usage_timer_notification: unsupported
                    violence_threshold: unsupported
                    voice_chat_minor_limit: unsupported
                    web_category_block: guided
                    web_custom_allowlist: guided
                    web_custom_blocklist: guided
                    web_filter_level: guided
                    web_safesearch: guided
                - id: fire_tv
                  name: Amazon Fire TV Stick
                  category: device
                  tier: pending
                  description: Amazon Fire TV parental controls
                  icon_url: ''
                  auth_type: manual
                  enabled: true
                  capabilities:
                    - content_rating
                    - app_control
                    - purchase_control
                  enforcement_mode: manual_attested
                  rule_support:
                    addictive_design_control: unsupported
                    addictive_pattern_block: unsupported
                    adult_site_av_required: unsupported
                    age_appropriate_profile_mode: unsupported
                    age_gate: unsupported
                    age_signal_broadcast: unsupported
                    ai_chatbot_age_assertion: unsupported
                    ai_chatbot_tier_gate: unsupported
                    ai_companion_block: unsupported
                    ai_data_responsibility_rating_threshold: unsupported
                    ai_minor_interaction: unsupported
                    ai_no_csam_generation: unsupported
                    ai_no_engagement_dark_patterns: unsupported
                    ai_no_personhood_deception: unsupported
                    ai_no_self_harm_promotion: unsupported
                    ai_no_simulated_companionship: unsupported
                    ai_no_unsupervised_therapy: unsupported
                    ai_product_classification_gate: unsupported
                    ai_safety_rating_threshold: unsupported
                    ai_synthetic_media_disclosure: unsupported
                    ai_toy_safety_cert: unsupported
                    ai_training_data_opt_out: unsupported
                    ai_transparency_rating_threshold: unsupported
                    algo_feed_control: unsupported
                    algorithmic_audit: unsupported
                    app_install_block: unsupported
                    app_store_age_attestation: unsupported
                    autoplay_disable: unsupported
                    cipa_filter_attestation: unsupported
                    commercial_data_ban: unsupported
                    commercial_pressure_threshold: unsupported
                    content_allow_title: guided
                    content_allowlist_mode: guided
                    content_block_title: guided
                    content_descriptor_block: guided
                    content_rating: guided
                    crisis_resource_surface: unsupported
                    csam_reporting: unsupported
                    data_deletion_request: unsupported
                    data_minimization_enforce: unsupported
                    digital_literacy_curriculum_link: unsupported
                    dm_feature_disable: unsupported
                    dm_restriction: unsupported
                    dpia_request_generator: unsupported
                    dumbphone_migration_mode: unsupported
                    educational_credit: unsupported
                    ephemeral_message_disable: unsupported
                    esafety_commission_reporting: unsupported
                    firearm_content_block: unsupported
                    flagged_content_digest: unsupported
                    gambling_mechanics_block: unsupported
                    geolocation_opt_in: unsupported
                    geolocation_precision_cap: unsupported
                    hard_id_verification_escalation: unsupported
                    harm_report_intake: unsupported
                    image_content_monitoring: unsupported
                    image_rights_minor: unsupported
                    infinite_scroll_block: unsupported
                    library_filter_compliance: unsupported
                    message_content_monitoring: unsupported
                    minor_data_sale_audit_log: unsupported
                    monitoring_activity: unsupported
                    monitoring_alerts: unsupported
                    named_contact_block: unsupported
                    ncii_takedown: unsupported
                    not_for_minors_block: unsupported
                    notification_curfew: unsupported
                    os_age_signal_ingest: unsupported
                    parental_attestation_cert: unsupported
                    parental_consent_gate: unsupported
                    parental_event_notification: unsupported
                    phone_free_school_hours: unsupported
                    platform_liability_evidence_capture: unsupported
                    presence_status_hide: unsupported
                    privacy_account_creation: unsupported
                    privacy_data_sharing: unsupported
                    privacy_location: unsupported
                    privacy_profile_visibility: unsupported
                    privacy_rating_dimension_gate: unsupported
                    privacy_rating_score_threshold: unsupported
                    privacy_rating_tier_gate: unsupported
                    privacy_seal_required: unsupported
                    profanity_threshold: unsupported
                    prosocial_weight: unsupported
                    purchase_approval: guided
                    purchase_block_iap: guided
                    purchase_spending_cap: guided
                    rating_age_gate: unsupported
                    recognized_seal_allowlist: unsupported
                    representation_weight: unsupported
                    role_model_weight: unsupported
                    school_alert_routing: unsupported
                    screen_time_report: unsupported
                    search_query_monitoring: unsupported
                    sexual_content_threshold: unsupported
                    social_account_content_monitoring: unsupported
                    social_chat_control: unsupported
                    social_contacts: unsupported
                    social_media_min_age: unsupported
                    social_media_warning_label_render: unsupported
                    social_multiplayer: unsupported
                    stranger_dm_block: unsupported
                    stranger_outreach_friction: unsupported
                    streaming_age_rating_enforce: unsupported
                    student_privacy_school_mode: unsupported
                    substance_content_threshold: unsupported
                    targeted_ad_block: unsupported
                    teen_minimum_age_16_gate: unsupported
                    third_party_tracker_block: unsupported
                    time_daily_limit: unsupported
                    time_downtime: unsupported
                    time_per_app_limit: unsupported
                    time_scheduled_hours: unsupported
                    ugc_world_age_gate: unsupported
                    unrated_privacy_default: unsupported
                    usage_timer_notification: unsupported
                    violence_threshold: unsupported
                    voice_chat_minor_limit: unsupported
                    web_category_block: unsupported
                    web_custom_allowlist: unsupported
                    web_custom_blocklist: unsupported
                    web_filter_level: unsupported
                    web_safesearch: unsupported
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
        '502':
          $ref: '#/components/responses/BadGateway'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      security: []
      x-codeSamples:
        - lang: JavaScript
          label: SDK (@phosra/sdk)
          source: |
            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.platforms.list();
            console.log(result);
        - lang: Shell
          label: cURL
          source: >
            curl -sS
            "https://phosra-api-sandbox-production.up.railway.app/api/v1/platforms"
        - lang: Python
          label: Python
          source: |
            import requests

            BASE = "https://phosra-api-sandbox-production.up.railway.app/api/v1"
            res = requests.get(
                f"{BASE}/platforms",
            )
            print(res.status_code, res.json())
        - lang: Go
          label: Go
          source: "package main\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n)\n\nfunc main() {\n\tbase := \"https://phosra-api-sandbox-production.up.railway.app/api/v1\"\n\treq, _ := http.NewRequest(\"GET\", base+\"/platforms\", nil)\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer resp.Body.Close()\n\tout, _ := io.ReadAll(resp.Body)\n\tfmt.Println(resp.Status, string(out))\n}\n"
components:
  schemas:
    Platform:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for this resource.
        name:
          type: string
          description: Human-readable display name.
        category:
          type: string
          enum:
            - dns
            - streaming
            - gaming
            - device
            - browser
          description: >-
            OCSS rule category this rule enforces (see the Rule Categories
            reference).
        tier:
          type: string
          enum:
            - compliant
            - provisional
            - pending
          description: Accreditation / integration tier of the platform.
        description:
          type: string
          description: Human-readable description.
        icon_url:
          type: string
          description: URL of the platform or resource icon.
        auth_type:
          type: string
          enum:
            - api_key
            - oauth2
            - manual
          description: How the platform is authenticated (e.g. `oauth`, `manual`).
        enabled:
          type: boolean
          description: Whether this item is currently active.
        enforcement_mode:
          type: string
          enum:
            - dns
            - device
            - api_write
            - manual_attested
            - coming_soon
          description: >
            How Phosra enforces rules on this platform. `dns` = live
            DNS-provider API write (NextDNS/CleanBrowsing/Control D); `device` =
            on-device enforcement, requires Phosra app installed; `api_write` =
            live third-party write API; `manual_attested` = no programmatic API
            — Phosra generates setup steps and records a signed parent
            attestation. Never render "Enforced" for this value; `coming_soon` =
            adapter not yet built.
        rule_support:
          type: object
          additionalProperties:
            type: string
            enum:
              - dns
              - device
              - guided
              - unsupported
          description: >
            Per-category enforcement support across all 123 OCSS rule
            categories. `dns` = DNS provider can filter this category; `device`
            = on-device enforcement handles it; `guided` = manual_attested
            platform, parent applies with Phosra guidance; `unsupported` = not
            addressable on this platform.
      additionalProperties: true
    Error:
      type: object
      properties:
        error:
          type: string
          description: >-
            Short, stable, machine-readable error class — matches the HTTP
            status text (e.g. `Not Found`).
        message:
          type: string
          description: >-
            Human-readable explanation of what went wrong and, where possible,
            how to fix it.
        code:
          type: integer
          description: Numeric HTTP status code, duplicated in the body for convenience.
      description: Standard error envelope returned for every 4xx and 5xx response.
      example:
        error: Not Found
        message: policy not found
        code: 404
      additionalProperties: true
  responses:
    Unauthorized:
      description: >-
        Authentication failed. Send a Bearer WorkOS JWT, or a
        `phosra_live_`/`phosra_test_` developer API key, in the `Authorization`
        header.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Unauthorized
            message: missing or invalid Authorization header
            code: 401
    RateLimited:
      description: >-
        Too many requests. Back off and retry after the interval given in the
        `Retry-After` response header.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Too Many Requests
            message: rate limit exceeded
            code: 429
    ServerError:
      description: >-
        An unexpected error occurred inside Phosra. The request is safe to retry
        with exponential backoff; contact support if it persists.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Internal Server Error
            message: internal error
            code: 500
    BadGateway:
      description: >-
        A downstream provider returned an invalid response while Phosra was
        fulfilling the request. Retry with backoff.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Bad Gateway
            message: downstream provider error
            code: 502
    ServiceUnavailable:
      description: >-
        A downstream provider or dependency is temporarily unavailable. Retry
        with backoff.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Service Unavailable
            message: downstream provider unavailable
            code: 503
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````