{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/prismareviews/json-schema/prismareviews-platform-schema.json",
  "title": "Platform",
  "description": "How a platform connects and whether this workspace can connect it now.",
  "x-generated": "2026-11-02",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/prismareviews-openapi.json#/components/schemas/Platform",
  "type": "object",
  "required": [
    "id",
    "name",
    "connect",
    "reply",
    "in_your_plan",
    "available",
    "live_ready",
    "live_note",
    "summary",
    "steps",
    "console_url",
    "fields",
    "example"
  ],
  "properties": {
    "id": {
      "$ref": "#/$defs/PlatformId"
    },
    "name": {
      "type": "string",
      "description": "Display name."
    },
    "connect": {
      "type": "string",
      "enum": [
        "oauth",
        "credentials",
        "listing_url"
      ],
      "description": "How `POST /v1/connections` connects it."
    },
    "reply": {
      "type": "string",
      "enum": [
        "api",
        "read"
      ],
      "description": "`api`: Prisma publishes replies. `read`: read only."
    },
    "in_your_plan": {
      "type": "boolean",
      "description": "Whether your plan (or its read packs) includes it."
    },
    "available": {
      "type": "boolean",
      "description": "Whether it is enabled for your account (some platforms open gradually)."
    },
    "live_ready": {
      "type": "boolean",
      "description": "`false` while it can only be tried with test keys; a live `POST /v1/connections` returns `501 platform_not_available`."
    },
    "live_note": {
      "type": [
        "string",
        "null"
      ],
      "description": "Why it isn't ready for live keys yet."
    },
    "summary": {
      "type": "string",
      "description": "What the account owner needs before starting."
    },
    "steps": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Short setup steps for the account owner."
    },
    "console_url": {
      "type": [
        "string",
        "null"
      ],
      "format": "uri",
      "description": "Where the values come from."
    },
    "fields": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ConnectField"
      },
      "description": "What `POST /v1/connections` expects."
    }
  },
  "$defs": {
    "ConnectField": {
      "type": "object",
      "required": [
        "name",
        "label",
        "type",
        "required"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Key inside `credentials`, or `listing_url` at the top level of the request."
        },
        "label": {
          "type": "string",
          "description": "Label for a form."
        },
        "type": {
          "type": "string",
          "enum": [
            "text",
            "secret",
            "textarea",
            "list",
            "url"
          ]
        },
        "required": {
          "type": "boolean"
        },
        "placeholder": {
          "type": "string",
          "description": "Example value."
        },
        "help": {
          "type": "string",
          "description": "Where to find the value."
        },
        "file_accept": {
          "type": "string",
          "description": "For textarea fields: the file the value usually comes from."
        }
      }
    },
    "PlatformId": {
      "type": "string",
      "enum": [
        "google",
        "app_store",
        "google_play",
        "judge_me",
        "trustpilot",
        "google_maps",
        "yelp",
        "tripadvisor",
        "booking",
        "yotpo",
        "reviews_io",
        "g2",
        "ebay",
        "etsy",
        "steam",
        "okendo",
        "feefo",
        "trusted_shops",
        "ekomi",
        "loox",
        "proven_expert",
        "shopper_approved",
        "wordpress",
        "appexchange",
        "facebook",
        "opentable",
        "doordash",
        "angi",
        "checkatrade",
        "avvo",
        "capterra",
        "apartments",
        "gartner",
        "healthgrades",
        "vitals",
        "classpass"
      ],
      "description": "Platform ID.\n\n| ID | Platform | Connects with | Replies |\n| --- | --- | --- | --- |\n| `google` | Google Business Profile | oauth | by API |\n| `app_store` | App Store | credentials | by API |\n| `google_play` | Google Play | credentials | by API |\n| `judge_me` | Judge.me | credentials | by API |\n| `trustpilot` | Trustpilot | oauth | by API |\n| `google_maps` | Google Maps | listing_url | read only |\n| `yelp` | Yelp | listing_url | read only |\n| `tripadvisor` | Tripadvisor | listing_url | read only |\n| `booking` | Booking.com | listing_url | read only |\n| `yotpo` | Yotpo | credentials | read only |\n| `reviews_io` | REVIEWS.io | credentials | read only |\n| `g2` | G2 | credentials | read only |\n| `ebay` | eBay | oauth | by API |\n| `etsy` | Etsy | listing_url | read only |\n| `steam` | Steam | listing_url | read only |\n| `okendo` | Okendo | credentials | read only |\n| `feefo` | Feefo | credentials | read only |\n| `trusted_shops` | Trusted Shops | credentials | by API |\n| `ekomi` | eKomi | credentials | by API |\n| `loox` | Loox | credentials | read only |\n| `proven_expert` | ProvenExpert | credentials | read only |\n| `shopper_approved` | Shopper Approved | credentials | read only |\n| `wordpress` | WordPress.org | listing_url | read only |\n| `appexchange` | Salesforce AppExchange | listing_url | read only |\n| `facebook` | Facebook | listing_url | read only |\n| `opentable` | OpenTable | listing_url | read only |\n| `doordash` | DoorDash | listing_url | read only |\n| `angi` | Angi | listing_url | read only |\n| `checkatrade` | Checkatrade | listing_url | read only |\n| `avvo` | Avvo | listing_url | read only |\n| `capterra` | Capterra | listing_url | read only |\n| `apartments` | Apartments.com | listing_url | read only |\n| `gartner` | Gartner Peer Insights | listing_url | read only |\n| `healthgrades` | Healthgrades | listing_url | read only |\n| `vitals` | Vitals | listing_url | read only |\n| `classpass` | ClassPass | listing_url | read only |"
    }
  }
}