{
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "$id": "https://altdataatlas.com/schema/provider.schema.json",
 "title": "AltData Atlas provider record",
 "description": "One alternative data provider: the editorial register row plus its coverage record. Served at /api/providers/{id}.json. Coverage is described as universe descriptors, never per-ticker lists; every coverage record carries a provenance tier and a date.",
 "type": "object",
 "required": [
  "id",
  "name",
  "url",
  "website",
  "category",
  "delivery",
  "priceBand",
  "hasSample",
  "verified",
  "coverage",
  "dateModified",
  "license"
 ],
 "properties": {
  "$schema": {
   "type": "string"
  },
  "id": {
   "type": "string",
   "description": "Stable slug; also the page path /provider/{id}."
  },
  "name": {
   "type": "string",
   "description": "Trading name."
  },
  "url": {
   "type": "string",
   "format": "uri",
   "description": "Canonical HTML page on altdataatlas.com (cite this)."
  },
  "links": {
   "type": "object",
   "properties": {
    "html": {
     "type": "string"
    },
    "markdown": {
     "type": "string"
    },
    "json": {
     "type": "string"
    }
   }
  },
  "website": {
   "type": "string",
   "format": "uri",
   "description": "The provider's own website."
  },
  "description": {
   "type": "string"
  },
  "category": {
   "type": "object",
   "description": "Register category (chapter). The same ids are the coverage signal types.",
   "properties": {
    "id": {
     "type": "string"
    },
    "slug": {
     "type": "string"
    },
    "name": {
     "type": "string"
    },
    "url": {
     "type": "string"
    }
   },
   "required": [
    "id",
    "slug",
    "name"
   ]
  },
  "geography": {
   "type": [
    "string",
    "null"
   ],
   "description": "Provider's home market/HQ as recorded in the register — not what the data covers (see coverage.universe.regions)."
  },
  "historySince": {
   "type": [
    "integer",
    "null"
   ],
   "description": "Earliest year on record for the provider in the register (founding or first data year). null when not public."
  },
  "delivery": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "description": "Delivery methods, e.g. API, Dashboard, S3, Snowflake, Bulk, Feed."
  },
  "priceBand": {
   "enum": [
    "free",
    "startup",
    "mid",
    "enterprise",
    "unknown"
   ],
   "description": "Indicative price band. startup = under $50k, mid = $50–150k, enterprise = $150k+, unknown = no price published. Ranges, never exact prices."
  },
  "priceBandLabel": {
   "type": "string"
  },
  "hasSample": {
   "type": "boolean",
   "description": "A free sample or trial is offered (true) or not stated (false)."
  },
  "hasDDQ": {
   "type": "boolean",
   "description": "A due-diligence questionnaire is available (true) or not stated (false)."
  },
  "verified": {
   "type": "boolean",
   "description": "Site is live, on its own brand, and editorially checked. Never paid placement."
  },
  "coverage": {
   "type": "object",
   "required": [
    "tier",
    "source",
    "date",
    "signals",
    "universe",
    "examples"
   ],
   "properties": {
    "tier": {
     "enum": [
      "inferred",
      "stated",
      "confirmed"
     ],
     "description": "Likely, unconfirmed — our editorial inference from the provider's category, not a fact about the provider. | Quoted from the provider's own public page, with the URL and the crawl date. | The provider confirmed this to us directly, dated."
    },
    "tierMeaning": {
     "type": "string"
    },
    "source": {
     "type": "string",
     "description": "stated: the provider page quoted; inferred: the editorial table; confirmed: 'email YYYY-MM-DD'."
    },
    "date": {
     "type": "string",
     "format": "date",
     "description": "Date the tier was assigned (crawl date for stated)."
    },
    "sectorsProvenance": {
     "enum": [
      "stated",
      "inferred"
     ],
     "description": "Whether the sector list itself is supported by the provider's own words."
    },
    "quote": {
     "type": [
      "string",
      "null"
     ],
     "description": "Stated tier: verbatim claim from the provider's page (≤200 chars)."
    },
    "signals": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "id": {
        "type": "string"
       },
       "slug": {
        "type": "string"
       },
       "name": {
        "type": "string"
       }
      }
     }
    },
    "universe": {
     "type": "object",
     "properties": {
      "assetClasses": {
       "type": "array",
       "items": {
        "type": "string"
       }
      },
      "regions": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "North America, Europe, Asia-Pacific, Middle East, Latin America, Africa, Global."
      },
      "sectors": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "GICS sector names."
      },
      "approxCount": {
       "type": [
        "integer",
        "null"
       ],
       "description": "Approximate number of companies/entities covered, as the provider states it."
      },
      "indexRefs": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "Index universes the provider names, e.g. S&P 500, Russell 3000."
      },
      "tickerMapped": {
       "type": [
        "boolean",
        "null"
       ],
       "description": "Provider states its data is mapped to tickers/securities; null = not stated."
      },
      "since": {
       "type": [
        "integer",
        "null"
       ],
       "description": "First year of data history the provider states."
      }
     }
    },
    "examples": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Up to 20 company names the provider itself names as covered or showcased."
    },
    "cells": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "signal": {
        "type": "string"
       },
       "sector": {
        "type": "string"
       },
       "tier": {
        "enum": [
         "inferred",
         "stated",
         "confirmed"
        ]
       },
       "html": {
        "type": [
         "string",
         "null"
        ]
       },
       "json": {
        "type": "string"
       }
      }
     }
    }
   }
  },
  "dateModified": {
   "type": "string",
   "format": "date"
  },
  "license": {
   "type": "object",
   "properties": {
    "name": {
     "type": "string"
    },
    "url": {
     "type": "string"
    }
   }
  },
  "citation": {
   "type": "string"
  },
  "corrections": {
   "type": "string"
  }
 }
}
