{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://socialcrawl.dev/schemas/app.json",
  "title": "SocialCrawl App",
  "description": "Canonical unified app-store listing object returned by every SocialCrawl endpoint with the App/AppList archetype. Nullability is expressed via JSON Schema 2020-12 type arrays. Generated from the Zod schema in packages/social-api/src/schemas/canonical.ts.",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Store app ID (Google Play package name / App Store numeric id)"
    },
    "store": {
      "type": "string",
      "description": "App marketplace (\"google_play\" or \"app_store\")"
    },
    "url": {
      "type": [
        "string",
        "null"
      ],
      "description": "String at app.url"
    },
    "title": {
      "type": [
        "string",
        "null"
      ],
      "description": "App title"
    },
    "icon": {
      "type": [
        "string",
        "null"
      ],
      "description": "String at app.icon"
    },
    "description": {
      "type": [
        "string",
        "null"
      ],
      "description": "String at app.description"
    },
    "developer": {
      "type": "object",
      "description": "Developer block (name, id, url; email/address for Google)",
      "properties": {
        "id": {
          "type": [
            "string",
            "null"
          ],
          "description": "String at app.developer.id"
        },
        "name": {
          "type": [
            "string",
            "null"
          ],
          "description": "String at app.developer.name"
        },
        "url": {
          "type": [
            "string",
            "null"
          ],
          "description": "String at app.developer.url"
        },
        "email": {
          "type": [
            "string",
            "null"
          ],
          "description": "String at app.developer.email"
        },
        "address": {
          "type": [
            "string",
            "null"
          ],
          "description": "String at app.developer.address"
        },
        "website": {
          "type": [
            "string",
            "null"
          ],
          "description": "String at app.developer.website"
        }
      }
    },
    "rating": {
      "type": "object",
      "description": "Aggregate rating (value, max, number of ratings)",
      "properties": {
        "value": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Numeric at app.rating.value"
        },
        "max": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Numeric at app.rating.max"
        },
        "count": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Numeric at app.rating.count"
        }
      }
    },
    "price": {
      "type": "object",
      "description": "Price block (current, original, currency, is_free, displayed)",
      "properties": {
        "current": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Numeric at app.price.current"
        },
        "original": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Numeric at app.price.original"
        },
        "currency": {
          "type": [
            "string",
            "null"
          ],
          "description": "String at app.price.currency"
        },
        "is_free": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Boolean at app.price.is_free"
        },
        "displayed": {
          "type": [
            "string",
            "null"
          ],
          "description": "String at app.price.displayed"
        }
      }
    },
    "reviews_count": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Numeric at app.reviews_count"
    },
    "category": {
      "type": [
        "string",
        "null"
      ],
      "description": "String at app.category"
    },
    "categories": {
      "type": [
        "array",
        "null"
      ],
      "description": "Array at app.categories",
      "items": {
        "type": "string",
        "description": "String at app.categories"
      }
    },
    "installs": {
      "type": [
        "object",
        "null"
      ],
      "description": "Install signal (Google only): { display \"1,000,000,000+\", count }; null on Apple",
      "properties": {
        "display": {
          "type": [
            "string",
            "null"
          ],
          "description": "String at app.installs.display"
        },
        "count": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Numeric at app.installs.count"
        }
      }
    },
    "version": {
      "type": [
        "string",
        "null"
      ],
      "description": "String at app.version"
    },
    "minimum_os_version": {
      "type": [
        "string",
        "null"
      ],
      "description": "String at app.minimum_os_version"
    },
    "size": {
      "type": [
        "string",
        "null"
      ],
      "description": "String at app.size"
    },
    "released_at": {
      "type": [
        "string",
        "integer",
        "null"
      ],
      "description": "Union: string | integer | null"
    },
    "updated_at": {
      "type": [
        "string",
        "integer",
        "null"
      ],
      "description": "Union: string | integer | null"
    },
    "update_notes": {
      "type": [
        "string",
        "null"
      ],
      "description": "String at app.update_notes"
    },
    "image_urls": {
      "type": [
        "array",
        "null"
      ],
      "description": "Screenshot URLs",
      "items": {
        "type": "string",
        "description": "Screenshot URLs"
      }
    },
    "video_urls": {
      "type": [
        "array",
        "null"
      ],
      "description": "Array at app.video_urls",
      "items": {
        "type": "string",
        "description": "String at app.video_urls"
      }
    },
    "languages": {
      "type": [
        "array",
        "null"
      ],
      "description": "Array at app.languages",
      "items": {
        "type": "string",
        "description": "String at app.languages"
      }
    },
    "advisories": {
      "type": [
        "array",
        "null"
      ],
      "description": "Apple age/content advisories (null on Google)",
      "items": {
        "type": "string",
        "description": "Apple age/content advisories (null on Google)"
      }
    },
    "genres": {
      "type": [
        "array",
        "null"
      ],
      "description": "Google Play genres (null on Apple)",
      "items": {
        "type": "string",
        "description": "Google Play genres (null on Apple)"
      }
    },
    "tags": {
      "type": [
        "array",
        "null"
      ],
      "description": "Array at app.tags",
      "items": {
        "type": "string",
        "description": "String at app.tags"
      }
    },
    "similar_apps": {
      "type": [
        "array",
        "null"
      ],
      "description": "Array at app.similar_apps",
      "items": {
        "type": "object",
        "description": "Nested object: app.similar_apps",
        "properties": {
          "id": {
            "type": [
              "string",
              "null"
            ],
            "description": "String at app.similar_apps.id"
          },
          "title": {
            "type": [
              "string",
              "null"
            ],
            "description": "String at app.similar_apps.title"
          },
          "url": {
            "type": [
              "string",
              "null"
            ],
            "description": "String at app.similar_apps.url"
          }
        }
      }
    },
    "more_by_developer": {
      "type": [
        "array",
        "null"
      ],
      "description": "Array at app.more_by_developer",
      "items": {
        "type": "object",
        "description": "Nested object: app.more_by_developer",
        "properties": {
          "id": {
            "type": [
              "string",
              "null"
            ],
            "description": "String at app.more_by_developer.id"
          },
          "title": {
            "type": [
              "string",
              "null"
            ],
            "description": "String at app.more_by_developer.title"
          },
          "url": {
            "type": [
              "string",
              "null"
            ],
            "description": "String at app.more_by_developer.url"
          }
        }
      }
    }
  },
  "additionalProperties": true
}
