{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "niche": {
      "description": "Niche id from the library niche table, for example us-probate. Omit to read every niche.",
      "type": "string",
      "maxLength": 64,
      "pattern": "^[a-z0-9-]+$"
    },
    "opportunityType": {
      "description": "How a link would be earned on the surface: one of the six library opportunity types.",
      "type": "string",
      "enum": [
        "directory",
        "resource_page",
        "listicle_or_review",
        "guest_post_program",
        "link_insertion",
        "ai_citation_source"
      ]
    },
    "status": {
      "description": "Record status: held, published or withdrawn. Records are never deleted, so withdrawn records remain readable with their reason.",
      "type": "string",
      "enum": [
        "held",
        "published",
        "withdrawn"
      ]
    },
    "routeState": {
      "description": "Route verification state: verified (route page read and states the route), partial (renders client-side) or unverified (could not be read).",
      "type": "string",
      "enum": [
        "verified",
        "partial",
        "unverified"
      ]
    },
    "freshness": {
      "description": "Age of the last verification against the fixed 90-day window: fresh (under 60 days), aging (60 to 90 days) or stale (over 90 days or never verified). Computed at read time.",
      "type": "string",
      "enum": [
        "fresh",
        "aging",
        "stale"
      ]
    },
    "sourceClass": {
      "description": "Provenance source class, which decides redistribution rights per class, never per row.",
      "type": "string",
      "enum": [
        "owned_corpus",
        "directory_inventory",
        "cc_host_graph_seed",
        "consented_project_lane",
        "owned_submission"
      ]
    },
    "updatedSince": {
      "description": "ISO 8601 timestamp; only records whose dates.updated_at is at or after this instant are returned.",
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "cursor": {
      "description": "Opaque continuation returned by this same listing with the same filters; omit for the first page.",
      "type": "string",
      "minLength": 1,
      "maxLength": 1024
    },
    "limit": {
      "description": "Maximum records in this page, 1 to 100; defaults to 100.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 100
    }
  },
  "additionalProperties": false
}
