{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/boardwalkai-com/json-schema/boardwalkai-com-ai-search-job-status-schema.json",
  "title": "AiSearchJobStatus",
  "x-generated": "2026-11-02",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/boardwalkai-com-openapi.yml#/components/schemas/AiSearchJobStatus",
  "type": "object",
  "properties": {
    "requestId": {
      "type": "integer"
    },
    "status": {
      "type": "string",
      "enum": [
        "queued",
        "running",
        "completed",
        "partial",
        "failed",
        "cancelled",
        "expired"
      ]
    },
    "creditsReserved": {
      "type": "integer"
    },
    "creditsCharged": {
      "type": [
        "integer",
        "null"
      ]
    },
    "data": {
      "description": "Project results when completed or partial; null while queued/running.",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "oneOf": [
          {
            "$ref": "#/$defs/ProjectRecordCompact"
          },
          {
            "$ref": "#/$defs/ProjectRecord"
          },
          {
            "$ref": "#/$defs/ProjectRecordFull"
          }
        ]
      }
    },
    "meta": {
      "type": [
        "object",
        "null"
      ],
      "description": "Same shape as sync AI search meta when completed, plus matchesByProjectId.",
      "allOf": [
        {
          "$ref": "#/$defs/AiSearchJobMeta"
        }
      ]
    },
    "error": {
      "type": [
        "string",
        "null"
      ]
    },
    "progress": {
      "type": [
        "object",
        "null"
      ],
      "description": "Live screening progress while queued or running.",
      "properties": {
        "stage": {
          "type": "string",
          "enum": [
            "queued",
            "screening"
          ]
        },
        "candidatesRetrieved": {
          "type": [
            "integer",
            "null"
          ]
        },
        "candidatesScreened": {
          "type": "integer",
          "minimum": 0
        },
        "batchesRun": {
          "type": "integer",
          "minimum": 0
        },
        "screeningCeiling": {
          "type": [
            "integer",
            "null"
          ]
        },
        "confirmedSoFar": {
          "type": "integer",
          "minimum": 0
        },
        "cancelRequested": {
          "type": "boolean"
        }
      }
    },
    "stopReason": {
      "type": [
        "string",
        "null"
      ]
    },
    "partialReason": {
      "type": [
        "string",
        "null"
      ]
    },
    "createdAt": {
      "type": "string",
      "format": "date-time"
    },
    "startedAt": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "completedAt": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "expiresAt": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    }
  },
  "$defs": {
    "AiMatch": {
      "type": "object",
      "title": "AI Match",
      "required": [
        "score",
        "summary",
        "channels"
      ],
      "additionalProperties": false,
      "properties": {
        "score": {
          "type": [
            "number",
            "null"
          ]
        },
        "summary": {
          "type": [
            "string",
            "null"
          ]
        },
        "channels": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          }
        }
      }
    },
    "AiPaginationMeta": {
      "type": "object",
      "properties": {
        "schemaVersion": {
          "type": "string",
          "description": "The response-contract version. Also sent as the X-Boardwalk-Schema-Version header."
        },
        "representation": {
          "type": "string",
          "enum": [
            "compact",
            "standard",
            "full"
          ]
        },
        "total": {
          "type": "integer",
          "description": "The AI search engine's reported result-set total before page delivery."
        },
        "limit": {
          "type": "integer"
        },
        "offset": {
          "type": "integer"
        },
        "pageCount": {
          "type": "integer",
          "description": "Records returned on this page after collapse and the serving gate."
        },
        "hasMore": {
          "type": "boolean",
          "description": "Whether the retrieved eligible candidate pool contains another page."
        },
        "filteredAfterSearch": {
          "type": "object",
          "additionalProperties": {
            "type": "integer"
          },
          "description": "Candidates removed after ranking; `servingGate`, `hardConstraints`, and `mergeCollapse` candidates never fill a paid page slot."
        },
        "creditsUsed": {
          "type": "integer"
        },
        "creditsRemaining": {
          "type": "integer"
        },
        "trialTruncation": {
          "$ref": "#/$defs/TrialTruncation"
        },
        "searchMethod": {
          "type": "string"
        },
        "duplicatesCollapsed": {
          "type": "integer",
          "description": "Duplicate ids folded together in the bounded ranked candidate pool before paging."
        },
        "collapseApplied": {
          "type": "boolean"
        },
        "delivery": {
          "$ref": "#/$defs/DeliveryMeta"
        },
        "requestId": {
          "type": "string"
        }
      }
    },
    "AiSearchJobMeta": {
      "description": "Completed AI-search job metadata, including evidence and screening state.",
      "allOf": [
        {
          "$ref": "#/$defs/AiPaginationMeta"
        },
        {
          "type": "object",
          "properties": {
            "creditsReserved": {
              "type": "integer"
            },
            "parsedQuery": {
              "type": "object",
              "additionalProperties": true
            },
            "matchesByProjectId": {
              "type": "object",
              "additionalProperties": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "lowConfidence": {
              "type": "boolean"
            },
            "stopReason": {
              "type": "string"
            },
            "candidatesRetrieved": {
              "type": "integer"
            },
            "candidatesScreened": {
              "type": "integer"
            },
            "batchesRun": {
              "type": "integer"
            },
            "screeningCeiling": {
              "type": "integer"
            },
            "screeningCeilingSource": {
              "type": "string"
            },
            "batchSizeYields": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "partialReason": {
              "type": [
                "string",
                "null"
              ]
            },
            "matchCount": {
              "type": "integer",
              "description": "Verified matches that survived final delivery eligibility and hard-constraint revalidation, before offset."
            },
            "matchCountIsExact": {
              "type": "boolean"
            },
            "reusedVerdictCount": {
              "type": "integer"
            },
            "verifierErrorCount": {
              "type": "integer"
            },
            "enrichment": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      ]
    },
    "AlertMatch": {
      "type": "object",
      "title": "Alert Match",
      "required": [
        "alertName",
        "why",
        "quotes"
      ],
      "additionalProperties": false,
      "properties": {
        "alertName": {
          "type": [
            "string",
            "null"
          ]
        },
        "why": {
          "type": [
            "string",
            "null"
          ]
        },
        "quotes": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          }
        }
      }
    },
    "Contact": {
      "type": "object",
      "title": "Contacts",
      "required": [
        "name",
        "title",
        "role",
        "roleLabel",
        "partyClass",
        "partyClassLabel",
        "entityType",
        "company",
        "email",
        "emailSource",
        "phone",
        "phoneSource",
        "linkedinUrl",
        "linkedinSource",
        "contactProvenance",
        "enrichmentSource",
        "enrichedAt",
        "enrichmentStatus",
        "contactsWithheldReason"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": [
            "string",
            "null"
          ]
        },
        "title": {
          "type": [
            "string",
            "null"
          ]
        },
        "role": {
          "type": [
            "string",
            "null"
          ]
        },
        "roleLabel": {
          "type": [
            "string",
            "null"
          ]
        },
        "partyClass": {
          "type": [
            "string",
            "null"
          ]
        },
        "partyClassLabel": {
          "type": [
            "string",
            "null"
          ]
        },
        "entityType": {
          "type": [
            "string",
            "null"
          ]
        },
        "company": {
          "type": [
            "string",
            "null"
          ]
        },
        "email": {
          "type": [
            "string",
            "null"
          ]
        },
        "emailSource": {
          "type": [
            "string",
            "null"
          ]
        },
        "phone": {
          "type": [
            "string",
            "null"
          ]
        },
        "phoneSource": {
          "type": [
            "string",
            "null"
          ]
        },
        "linkedinUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "linkedinSource": {
          "type": [
            "string",
            "null"
          ]
        },
        "contactProvenance": {
          "type": [
            "string",
            "null"
          ]
        },
        "enrichmentSource": {
          "type": [
            "string",
            "null"
          ]
        },
        "enrichedAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "enrichmentStatus": {
          "type": [
            "string",
            "null"
          ]
        },
        "contactsWithheldReason": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "ContactSummary": {
      "type": "object",
      "title": "Contact Summary",
      "required": [
        "externalCount",
        "governmentCount",
        "unclassifiedCount",
        "withEmail",
        "withPhone",
        "withLinkedin",
        "enrichedCount",
        "lowConfidenceWithheld",
        "withheldCount",
        "withheldReason"
      ],
      "additionalProperties": false,
      "properties": {
        "externalCount": {
          "type": [
            "integer",
            "null"
          ]
        },
        "governmentCount": {
          "type": [
            "integer",
            "null"
          ]
        },
        "unclassifiedCount": {
          "type": [
            "integer",
            "null"
          ]
        },
        "withEmail": {
          "type": [
            "integer",
            "null"
          ]
        },
        "withPhone": {
          "type": [
            "integer",
            "null"
          ]
        },
        "withLinkedin": {
          "type": [
            "integer",
            "null"
          ]
        },
        "enrichedCount": {
          "type": [
            "integer",
            "null"
          ]
        },
        "lowConfidenceWithheld": {
          "type": [
            "integer",
            "null"
          ]
        },
        "withheldCount": {
          "type": [
            "integer",
            "null"
          ]
        },
        "withheldReason": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "DeliveryMeta": {
      "type": "object",
      "description": "What this page cost you, split by delivery history. A record you have already been delivered and that has not changed is returned again without being charged again.",
      "properties": {
        "mode": {
          "type": "string"
        },
        "notPreviouslyExported": {
          "type": "integer"
        },
        "previouslyExported": {
          "type": "integer"
        },
        "updatedSinceExport": {
          "type": "integer"
        },
        "billed": {
          "type": "integer",
          "description": "Records charged for on this response."
        },
        "notRebilled": {
          "type": "integer",
          "description": "Records returned free because you already had them."
        },
        "ledgerApplied": {
          "type": "boolean"
        }
      }
    },
    "DeliveryState": {
      "type": "object",
      "title": "Delivery State",
      "required": [
        "alreadyExported",
        "updatedSinceExport",
        "lastExportedAt",
        "billed"
      ],
      "additionalProperties": false,
      "properties": {
        "alreadyExported": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "updatedSinceExport": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "lastExportedAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "billed": {
          "type": [
            "boolean",
            "null"
          ]
        }
      }
    },
    "EnrichedCompany": {
      "type": "object",
      "title": "Company Enrichment",
      "required": [
        "name",
        "website",
        "linkedinUrl",
        "archetype",
        "phone"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": [
            "string",
            "null"
          ]
        },
        "website": {
          "type": [
            "string",
            "null"
          ]
        },
        "linkedinUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "archetype": {
          "type": [
            "string",
            "null"
          ]
        },
        "phone": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "KeyFact": {
      "type": "object",
      "title": "Key Facts",
      "required": [
        "fact",
        "category",
        "categoryLabel"
      ],
      "additionalProperties": false,
      "properties": {
        "fact": {
          "type": [
            "string",
            "null"
          ]
        },
        "category": {
          "type": [
            "string",
            "null"
          ]
        },
        "categoryLabel": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "LikelyTrade": {
      "type": "object",
      "title": "Likely Trades",
      "required": [
        "trade",
        "tradeLabel",
        "basis"
      ],
      "additionalProperties": false,
      "properties": {
        "trade": {
          "type": [
            "string",
            "null"
          ]
        },
        "tradeLabel": {
          "type": [
            "string",
            "null"
          ]
        },
        "basis": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "ProjectAddress": {
      "type": "object",
      "title": "Additional Addresses",
      "required": [
        "address",
        "city",
        "state",
        "postalCode",
        "latitude",
        "longitude"
      ],
      "additionalProperties": false,
      "properties": {
        "address": {
          "type": [
            "string",
            "null"
          ]
        },
        "city": {
          "type": [
            "string",
            "null"
          ]
        },
        "state": {
          "type": [
            "string",
            "null"
          ]
        },
        "postalCode": {
          "type": [
            "string",
            "null"
          ]
        },
        "latitude": {
          "type": [
            "number",
            "null"
          ]
        },
        "longitude": {
          "type": [
            "number",
            "null"
          ]
        }
      }
    },
    "ProjectClassification": {
      "type": "object",
      "title": "All Classifications",
      "required": [
        "role",
        "type",
        "typeLabel",
        "subtype",
        "subtypeLabel",
        "assetClass",
        "assetClassLabel"
      ],
      "additionalProperties": false,
      "properties": {
        "role": {
          "type": [
            "string",
            "null"
          ]
        },
        "type": {
          "type": [
            "string",
            "null"
          ]
        },
        "typeLabel": {
          "type": [
            "string",
            "null"
          ]
        },
        "subtype": {
          "type": [
            "string",
            "null"
          ]
        },
        "subtypeLabel": {
          "type": [
            "string",
            "null"
          ]
        },
        "assetClass": {
          "type": [
            "string",
            "null"
          ]
        },
        "assetClassLabel": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "ProjectDecision": {
      "type": "object",
      "title": "Decisions",
      "required": [
        "meetingDate",
        "decisionBody",
        "actionType",
        "actionTypeLabel",
        "requestType",
        "requestTypeLabel",
        "outcome",
        "outcomeLabel",
        "motionType",
        "motionOutcome",
        "evidenceBasis",
        "evidenceBasisLabel",
        "isConsentAgenda",
        "caseNumber",
        "evidence",
        "conditions",
        "voteTally",
        "votes"
      ],
      "additionalProperties": false,
      "properties": {
        "meetingDate": {
          "type": [
            "string",
            "null"
          ]
        },
        "decisionBody": {
          "type": [
            "string",
            "null"
          ]
        },
        "actionType": {
          "type": [
            "string",
            "null"
          ]
        },
        "actionTypeLabel": {
          "type": [
            "string",
            "null"
          ]
        },
        "requestType": {
          "type": [
            "string",
            "null"
          ]
        },
        "requestTypeLabel": {
          "type": [
            "string",
            "null"
          ]
        },
        "outcome": {
          "type": [
            "string",
            "null"
          ]
        },
        "outcomeLabel": {
          "type": [
            "string",
            "null"
          ]
        },
        "motionType": {
          "type": [
            "string",
            "null"
          ]
        },
        "motionOutcome": {
          "type": [
            "string",
            "null"
          ]
        },
        "evidenceBasis": {
          "type": [
            "string",
            "null"
          ]
        },
        "evidenceBasisLabel": {
          "type": [
            "string",
            "null"
          ]
        },
        "isConsentAgenda": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "caseNumber": {
          "type": [
            "string",
            "null"
          ]
        },
        "evidence": {
          "type": [
            "string",
            "null"
          ]
        },
        "conditions": {
          "type": [
            "string",
            "null"
          ]
        },
        "voteTally": {
          "nullable": true,
          "allOf": [
            {
              "$ref": "#/$defs/VoteTally"
            }
          ]
        },
        "votes": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/Vote"
          }
        }
      }
    },
    "ProjectLandUse": {
      "type": "object",
      "title": "Land Uses",
      "required": [
        "type",
        "typeLabel",
        "subtype",
        "subtypeLabel",
        "assetClass",
        "assetClassLabel",
        "matchedOn"
      ],
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": [
            "string",
            "null"
          ]
        },
        "typeLabel": {
          "type": [
            "string",
            "null"
          ]
        },
        "subtype": {
          "type": [
            "string",
            "null"
          ]
        },
        "subtypeLabel": {
          "type": [
            "string",
            "null"
          ]
        },
        "assetClass": {
          "type": [
            "string",
            "null"
          ]
        },
        "assetClassLabel": {
          "type": [
            "string",
            "null"
          ]
        },
        "matchedOn": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          }
        }
      }
    },
    "ProjectRecord": {
      "type": "object",
      "description": "A land use project record at the `standard` representation. Every representation costs the same 1 credit per record. Where our current-generation extraction has not covered an attribute, the field is null rather than filled from an older, less accurate source.",
      "required": [
        "id",
        "recordType",
        "projectName",
        "projectHeadline",
        "boardwalkLink",
        "mergedFrom",
        "lastUpdated",
        "meetingDate",
        "delivery",
        "address",
        "city",
        "county",
        "state",
        "postalCode",
        "latitude",
        "longitude",
        "locationPrecision",
        "locationPrecisionLabel",
        "isApproximate",
        "parcelApn",
        "inOpportunityZone",
        "inFemaFloodZone",
        "propertyType",
        "propertyTypeLabel",
        "propertySubtype",
        "propertySubtypeLabel",
        "assetClass",
        "assetClassLabel",
        "leadType",
        "leadTypeLabel",
        "stage",
        "stageLabel",
        "landUses",
        "status",
        "statusLabel",
        "statusSummary",
        "requestType",
        "requestTypeLabel",
        "decisionBody",
        "caseNumbers",
        "acreage",
        "squareFootage",
        "unitMix",
        "totalUnitCount",
        "bedroomCount",
        "buildingStories",
        "floorCount",
        "buildingHeightFeet",
        "parkingSpaces",
        "existingZoning",
        "proposedZoning",
        "isRezone",
        "constructionType",
        "constructionTypeLabel",
        "projectSize",
        "projectSizeLabel",
        "developerCompany",
        "developerCompanyRole",
        "developerCompanyRoleLabel",
        "contacts",
        "contactEnrichment",
        "companyEnrichment",
        "publicOfficials",
        "contactSummary",
        "keyFacts",
        "evidence",
        "summary",
        "voteSummary",
        "sourceDocumentUrl"
      ],
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "integer",
          "description": "Boardwalk's stable identifier for this project.",
          "x-group": "identity",
          "x-csv-field": "project_id"
        },
        "recordType": {
          "type": "string",
          "description": "What kind of record this is. Always \"project\" today; reserved for future record types.",
          "x-group": "identity"
        },
        "projectName": {
          "type": "string",
          "description": "The project's display name.",
          "x-group": "identity",
          "x-csv-field": "project_name"
        },
        "projectHeadline": {
          "type": [
            "string",
            "null"
          ],
          "description": "A one-line description of the latest development on this project.",
          "x-group": "identity",
          "x-csv-field": "project_headline"
        },
        "boardwalkLink": {
          "type": "string",
          "format": "uri",
          "description": "Deep link to this project in the Boardwalk map.",
          "x-group": "identity",
          "x-csv-field": "boardwalk_link"
        },
        "mergedFrom": {
          "type": "array",
          "description": "The project ids folded into this record as duplicates of the same development, including its own. You are billed once for the record, not once per id.",
          "x-group": "identity",
          "items": {
            "type": "integer"
          }
        },
        "lastUpdated": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time",
          "description": "When this project record last changed, RFC 3339 UTC.",
          "x-group": "identity",
          "x-csv-field": "last_updated"
        },
        "meetingDate": {
          "type": [
            "string",
            "null"
          ],
          "format": "date",
          "description": "The date of the most recent public meeting this project appeared at. For a merged development this is reconciled across the whole family (the newest hearing of any merged record, never later than today or than your meetingDateTo bound), so it matches the product map and your date filters.",
          "x-group": "identity",
          "x-csv-field": "meeting_date"
        },
        "delivery": {
          "nullable": true,
          "description": "What Boardwalk has already delivered to your credit pool for this record, and whether this delivery was billed. GET /projects/sync returns these same four keys plus a change payload (what moved, and which new filing caused it). See the SyncDeliveryState schema.",
          "x-group": "delivery",
          "allOf": [
            {
              "$ref": "#/$defs/DeliveryState"
            }
          ]
        },
        "address": {
          "type": [
            "string",
            "null"
          ],
          "description": "The project's street address as stated in the public filing.",
          "x-group": "location",
          "x-csv-field": "address"
        },
        "city": {
          "type": [
            "string",
            "null"
          ],
          "description": "City the project is in.",
          "x-group": "location",
          "x-csv-field": "city"
        },
        "county": {
          "type": [
            "string",
            "null"
          ],
          "description": "County the project is in.",
          "x-group": "location",
          "x-csv-field": "county"
        },
        "state": {
          "type": [
            "string",
            "null"
          ],
          "description": "Two-letter state code.",
          "x-group": "location",
          "x-csv-field": "state"
        },
        "postalCode": {
          "type": [
            "string",
            "null"
          ],
          "description": "Postal code of the project's primary address.",
          "x-group": "location"
        },
        "latitude": {
          "type": [
            "number",
            "null"
          ],
          "description": "Latitude of the project's mapped location.",
          "x-group": "location"
        },
        "longitude": {
          "type": [
            "number",
            "null"
          ],
          "description": "Longitude of the project's mapped location.",
          "x-group": "location"
        },
        "locationPrecision": {
          "type": [
            "string",
            "null"
          ],
          "description": "How precisely this project is placed: address, parcel, location_description, city or county.",
          "x-group": "location"
        },
        "locationPrecisionLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of locationPrecision.",
          "x-group": "location"
        },
        "isApproximate": {
          "type": "boolean",
          "description": "True when the coordinates are inferred rather than taken from a street address.",
          "x-group": "location"
        },
        "parcelApn": {
          "type": "array",
          "description": "Assessor parcel numbers named in the filing.",
          "x-group": "location",
          "x-csv-field": "parcel_apn",
          "items": {
            "type": "string"
          }
        },
        "inOpportunityZone": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Whether the site is inside a federal Opportunity Zone (2018 designation). Null means membership has not been computed, never false.",
          "x-group": "location"
        },
        "inFemaFloodZone": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Whether the site is inside a FEMA Special Flood Hazard Area, the 1%-annual-chance regulatory flood zone. Null means membership has not been computed, never false.",
          "x-group": "location"
        },
        "propertyType": {
          "type": [
            "string",
            "null"
          ],
          "description": "Top-level land-use classification, e.g. residential.",
          "x-group": "classification",
          "x-csv-field": "property_type"
        },
        "propertyTypeLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of propertyType.",
          "x-group": "classification"
        },
        "propertySubtype": {
          "type": [
            "string",
            "null"
          ],
          "description": "Second-level land-use classification, e.g. multifamily.",
          "x-group": "classification",
          "x-csv-field": "property_subtype"
        },
        "propertySubtypeLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of propertySubtype.",
          "x-group": "classification"
        },
        "assetClass": {
          "type": [
            "string",
            "null"
          ],
          "description": "Third-level land-use classification for the project's headline use, e.g. apartments: the first one we know where that use stops short of this level. Blank means the project has no asset class recorded at all; see `landUses` for every use it does have. Never a duplicated parent value.",
          "x-group": "classification",
          "x-csv-field": "asset_class"
        },
        "assetClassLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of assetClass.",
          "x-group": "classification"
        },
        "leadType": {
          "type": [
            "string",
            "null"
          ],
          "description": "Boardwalk's read of the record as a lead: private (private development), public (roads, schools, utilities, public buildings), private_minor (a small private job: a single home, a tenant finish, a lot split) or public_minor. Search returns private by default; widen it with the leadTypes filter. Null while the record is awaiting review.",
          "x-group": "classification",
          "x-csv-field": "lead_type"
        },
        "leadTypeLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of leadType.",
          "x-group": "classification"
        },
        "stage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Where the project is in its life: concept_or_planning, entitlement, design, bidding, awarded, under_construction or complete. Independent of status, which is the latest hearing outcome. Null while the record is awaiting review, or when no stage applies to it.",
          "x-group": "classification",
          "x-csv-field": "stage"
        },
        "stageLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of stage.",
          "x-group": "classification"
        },
        "landUses": {
          "type": "array",
          "description": "Every land use on this project, to the deepest level we know for each, so a mixed-use development lists all of them. `assetClass` is null on an entry where the record only told us the type and subtype; we never copy a parent value down. One use is listed once: where the source describes the same use twice and one description stops short of the other, only the fuller one is listed. `matchedOn` names which taxonomy levels of that use satisfied your filter (`[\"subtype\"]`, `[\"subtype\",\"assetClass\"]`), so you can see why the project is in your results; it is an empty list on uses that did not match and on every use when you filtered on no taxonomy at all. Procedural items such as rezones are not land uses and appear as requestType instead.",
          "x-group": "classification",
          "items": {
            "$ref": "#/$defs/ProjectLandUse"
          }
        },
        "status": {
          "type": [
            "string",
            "null"
          ],
          "description": "Where this project stands, as a stable machine token. On a merged development whose meetingDate was reconciled to a newer family hearing, this (with statusLabel and decisionBody) describes that same newest hearing, matching the product map.",
          "x-group": "status",
          "x-csv-field": "current_status"
        },
        "statusLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of status; identical to the CSV's Current Status cell.",
          "x-group": "status",
          "x-csv-field": "current_status"
        },
        "statusSummary": {
          "type": [
            "string",
            "null"
          ],
          "description": "A sentence summarising where the project stands right now.",
          "x-group": "status",
          "x-csv-field": "status_detail"
        },
        "requestType": {
          "type": [
            "string",
            "null"
          ],
          "description": "What the applicant asked the jurisdiction for, as a stable machine token.",
          "x-group": "status",
          "x-csv-field": "request_type"
        },
        "requestTypeLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of requestType.",
          "x-group": "status",
          "x-csv-field": "request_type"
        },
        "decisionBody": {
          "type": [
            "string",
            "null"
          ],
          "description": "The body that heard or decided the request, e.g. Planning Commission.",
          "x-group": "status",
          "x-csv-field": "decision_body"
        },
        "caseNumbers": {
          "type": "array",
          "description": "Jurisdiction case numbers for this project.",
          "x-group": "status",
          "x-csv-field": "case_number",
          "items": {
            "type": "string"
          }
        },
        "acreage": {
          "type": [
            "number",
            "null"
          ],
          "description": "Total site area in acres.",
          "x-group": "site",
          "x-unit": "acres",
          "x-csv-field": "acreage"
        },
        "squareFootage": {
          "type": [
            "number",
            "null"
          ],
          "description": "Total gross building floor area explicitly stated across building or use rows.",
          "x-group": "site",
          "x-unit": "sqft"
        },
        "unitMix": {
          "type": "array",
          "description": "Dwelling or space counts by type. Entry N's count always describes entry N's type.",
          "x-group": "site",
          "x-unit": "count",
          "x-csv-field": "unit_count",
          "items": {
            "$ref": "#/$defs/UnitMixEntry"
          }
        },
        "totalUnitCount": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Total dwelling units across all unit types.",
          "x-group": "site",
          "x-unit": "count"
        },
        "bedroomCount": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Total bedrooms across the project.",
          "x-group": "site",
          "x-unit": "count"
        },
        "buildingStories": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Number of storeys.",
          "x-group": "site",
          "x-unit": "count"
        },
        "floorCount": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Highest stated above-grade story count among explicit building rows.",
          "x-group": "site",
          "x-unit": "count"
        },
        "buildingHeightFeet": {
          "type": [
            "number",
            "null"
          ],
          "description": "Building height in feet. Null where the filing stated a height whose unit we cannot resolve. We do not guess.",
          "x-group": "site",
          "x-unit": "feet"
        },
        "parkingSpaces": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Parking spaces proposed.",
          "x-group": "site",
          "x-unit": "count"
        },
        "existingZoning": {
          "type": [
            "string",
            "null"
          ],
          "description": "The site's zoning code before the request.",
          "x-group": "zoning",
          "x-csv-field": "existing_zoning"
        },
        "proposedZoning": {
          "type": [
            "string",
            "null"
          ],
          "description": "The zoning code being requested.",
          "x-group": "zoning",
          "x-csv-field": "proposed_zoning"
        },
        "isRezone": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "True when the request changes the site's zoning. Null means unknown, never false.",
          "x-group": "zoning",
          "x-csv-field": "is_rezone"
        },
        "constructionType": {
          "type": [
            "string",
            "null"
          ],
          "description": "The kind of construction work proposed, as a stable machine token.",
          "x-group": "construction",
          "x-csv-field": "construction_type"
        },
        "constructionTypeLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of constructionType.",
          "x-group": "construction",
          "x-csv-field": "construction_type"
        },
        "projectSize": {
          "type": [
            "string",
            "null"
          ],
          "description": "How large the construction is, in the product's own vocabulary: `large`, `medium` or `small`. Null when the size could not be judged.",
          "x-group": "construction"
        },
        "projectSizeLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of projectSize.",
          "x-group": "construction"
        },
        "developerCompany": {
          "type": [
            "string",
            "null"
          ],
          "description": "The external company developing or applying for this project. Government entities never appear here, even when the filing names one as the applicant.",
          "x-group": "contacts",
          "x-csv-field": "developer_company"
        },
        "developerCompanyRole": {
          "type": [
            "string",
            "null"
          ],
          "description": "How the developer company is named in the filing: developer, builder or applicant.",
          "x-group": "contacts",
          "x-csv-field": "developer_company_role"
        },
        "developerCompanyRoleLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of developerCompanyRole.",
          "x-group": "contacts",
          "x-csv-field": "developer_company_role"
        },
        "contacts": {
          "type": "array",
          "description": "External parties on this project: developer, applicant, architect, engineer, contractor, owner. Contact channels are included on paid plans; on a free trial they are null and contactsWithheldReason says why.",
          "x-group": "contacts",
          "items": {
            "$ref": "#/$defs/Contact"
          }
        },
        "contactEnrichment": {
          "type": "object",
          "description": "What happened when we tried to enrich this record's contacts. status is not_requested unless the request set include=contacts. Enrichment never changes what a record costs: every record is 1 credit whether enrichment found somebody, found nobody, or was never attempted, so a blank contact block always says which of those it was.",
          "x-group": "contacts",
          "required": [
            "status",
            "statusLabel",
            "attemptedAt",
            "contactsFound",
            "source"
          ],
          "additionalProperties": false,
          "properties": {
            "status": {
              "type": [
                "string",
                "null"
              ]
            },
            "statusLabel": {
              "type": [
                "string",
                "null"
              ]
            },
            "attemptedAt": {
              "type": [
                "string",
                "null"
              ]
            },
            "contactsFound": {
              "type": [
                "integer",
                "null"
              ]
            },
            "source": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "title": "Contact Enrichment"
        },
        "companyEnrichment": {
          "type": "array",
          "description": "Companies on this project resolved against Boardwalk's company registry: official name, website, LinkedIn page, archetype and main phone. Names and websites are included on every plan because they are corporate facts, not personal data. The remaining keys are null outside a paid plan, and the array is empty unless the request set include=contacts.",
          "x-group": "contacts",
          "items": {
            "$ref": "#/$defs/EnrichedCompany"
          }
        },
        "publicOfficials": {
          "type": "array",
          "description": "Government staff and elected officials named in the public record. Their names, roles and votes are public-record facts. Boardwalk never distributes their personal contact details, on any plan.",
          "x-group": "contacts",
          "items": {
            "$ref": "#/$defs/PublicOfficial"
          }
        },
        "contactSummary": {
          "description": "externalCount is the number of entries in contacts[]; governmentCount the number in publicOfficials[]; unclassifiedCount the parties (people or companies) the filing did not identify clearly enough for us to place in either, which are therefore in neither. withheldCount and withheldReason say how many contact channels were withheld and why. lowConfidenceWithheld counts contacts we hold but do not publish because the evidence for them is only pattern-inferred or uncorroborated. A blank there is a decision, not a gap in coverage.",
          "x-group": "contacts",
          "allOf": [
            {
              "$ref": "#/$defs/ContactSummary"
            }
          ]
        },
        "keyFacts": {
          "type": "array",
          "description": "Discrete facts extracted from the filing, each with the category it belongs to.",
          "x-group": "evidence",
          "x-csv-field": "key_facts",
          "items": {
            "$ref": "#/$defs/KeyFact"
          }
        },
        "evidence": {
          "type": [
            "string",
            "null"
          ],
          "description": "The passage of the public record that supports the current status.",
          "x-group": "evidence",
          "x-csv-field": "evidence"
        },
        "summary": {
          "type": [
            "string",
            "null"
          ],
          "description": "The project summary shown at the top of the product's project page: what is being built, by whom, and where the approval process stands.",
          "x-group": "evidence"
        },
        "alertMatch": {
          "nullable": true,
          "description": "Why this record matched the alert that delivered it. Absent on ordinary searches.",
          "x-group": "alertMatch",
          "allOf": [
            {
              "$ref": "#/$defs/AlertMatch"
            }
          ]
        },
        "aiMatch": {
          "nullable": true,
          "description": "Why the AI search matched this record, and how strongly. Absent on structured searches, which do not rank.",
          "x-group": "alertMatch",
          "allOf": [
            {
              "$ref": "#/$defs/AiMatch"
            }
          ]
        },
        "voteSummary": {
          "nullable": true,
          "description": "The tally of the most recent recorded vote on this project: yes, no, abstain, absent, total, and whether it was unanimous.",
          "x-group": "decisions",
          "allOf": [
            {
              "$ref": "#/$defs/VoteSummary"
            }
          ]
        },
        "sourceDocumentUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "Direct link to the original public meeting document (usually a PDF) this record's latest extraction came from, on the jurisdiction's own site.",
          "x-group": "documents"
        }
      }
    },
    "ProjectRecordCompact": {
      "type": "object",
      "description": "A land use project record at the `compact` representation. Every representation costs the same 1 credit per record. Where our current-generation extraction has not covered an attribute, the field is null rather than filled from an older, less accurate source.",
      "required": [
        "id",
        "recordType",
        "projectName",
        "boardwalkLink",
        "mergedFrom",
        "lastUpdated",
        "meetingDate",
        "delivery",
        "address",
        "city",
        "county",
        "state",
        "latitude",
        "longitude",
        "inOpportunityZone",
        "inFemaFloodZone",
        "propertyType",
        "propertyTypeLabel",
        "landUses",
        "status",
        "statusLabel"
      ],
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "integer",
          "description": "Boardwalk's stable identifier for this project.",
          "x-group": "identity",
          "x-csv-field": "project_id"
        },
        "recordType": {
          "type": "string",
          "description": "What kind of record this is. Always \"project\" today; reserved for future record types.",
          "x-group": "identity"
        },
        "projectName": {
          "type": "string",
          "description": "The project's display name.",
          "x-group": "identity",
          "x-csv-field": "project_name"
        },
        "boardwalkLink": {
          "type": "string",
          "format": "uri",
          "description": "Deep link to this project in the Boardwalk map.",
          "x-group": "identity",
          "x-csv-field": "boardwalk_link"
        },
        "mergedFrom": {
          "type": "array",
          "description": "The project ids folded into this record as duplicates of the same development, including its own. You are billed once for the record, not once per id.",
          "x-group": "identity",
          "items": {
            "type": "integer"
          }
        },
        "lastUpdated": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time",
          "description": "When this project record last changed, RFC 3339 UTC.",
          "x-group": "identity",
          "x-csv-field": "last_updated"
        },
        "meetingDate": {
          "type": [
            "string",
            "null"
          ],
          "format": "date",
          "description": "The date of the most recent public meeting this project appeared at. For a merged development this is reconciled across the whole family (the newest hearing of any merged record, never later than today or than your meetingDateTo bound), so it matches the product map and your date filters.",
          "x-group": "identity",
          "x-csv-field": "meeting_date"
        },
        "delivery": {
          "nullable": true,
          "description": "What Boardwalk has already delivered to your credit pool for this record, and whether this delivery was billed. GET /projects/sync returns these same four keys plus a change payload (what moved, and which new filing caused it). See the SyncDeliveryState schema.",
          "x-group": "delivery",
          "allOf": [
            {
              "$ref": "#/$defs/DeliveryState"
            }
          ]
        },
        "address": {
          "type": [
            "string",
            "null"
          ],
          "description": "The project's street address as stated in the public filing.",
          "x-group": "location",
          "x-csv-field": "address"
        },
        "city": {
          "type": [
            "string",
            "null"
          ],
          "description": "City the project is in.",
          "x-group": "location",
          "x-csv-field": "city"
        },
        "county": {
          "type": [
            "string",
            "null"
          ],
          "description": "County the project is in.",
          "x-group": "location",
          "x-csv-field": "county"
        },
        "state": {
          "type": [
            "string",
            "null"
          ],
          "description": "Two-letter state code.",
          "x-group": "location",
          "x-csv-field": "state"
        },
        "latitude": {
          "type": [
            "number",
            "null"
          ],
          "description": "Latitude of the project's mapped location.",
          "x-group": "location"
        },
        "longitude": {
          "type": [
            "number",
            "null"
          ],
          "description": "Longitude of the project's mapped location.",
          "x-group": "location"
        },
        "inOpportunityZone": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Whether the site is inside a federal Opportunity Zone (2018 designation). Null means membership has not been computed, never false.",
          "x-group": "location"
        },
        "inFemaFloodZone": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Whether the site is inside a FEMA Special Flood Hazard Area, the 1%-annual-chance regulatory flood zone. Null means membership has not been computed, never false.",
          "x-group": "location"
        },
        "propertyType": {
          "type": [
            "string",
            "null"
          ],
          "description": "Top-level land-use classification, e.g. residential.",
          "x-group": "classification",
          "x-csv-field": "property_type"
        },
        "propertyTypeLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of propertyType.",
          "x-group": "classification"
        },
        "landUses": {
          "type": "array",
          "description": "Every land use on this project, to the deepest level we know for each, so a mixed-use development lists all of them. `assetClass` is null on an entry where the record only told us the type and subtype; we never copy a parent value down. One use is listed once: where the source describes the same use twice and one description stops short of the other, only the fuller one is listed. `matchedOn` names which taxonomy levels of that use satisfied your filter (`[\"subtype\"]`, `[\"subtype\",\"assetClass\"]`), so you can see why the project is in your results; it is an empty list on uses that did not match and on every use when you filtered on no taxonomy at all. Procedural items such as rezones are not land uses and appear as requestType instead.",
          "x-group": "classification",
          "items": {
            "$ref": "#/$defs/ProjectLandUse"
          }
        },
        "status": {
          "type": [
            "string",
            "null"
          ],
          "description": "Where this project stands, as a stable machine token. On a merged development whose meetingDate was reconciled to a newer family hearing, this (with statusLabel and decisionBody) describes that same newest hearing, matching the product map.",
          "x-group": "status",
          "x-csv-field": "current_status"
        },
        "statusLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of status; identical to the CSV's Current Status cell.",
          "x-group": "status",
          "x-csv-field": "current_status"
        }
      }
    },
    "ProjectRecordFull": {
      "type": "object",
      "description": "A land use project record at the `full` representation. Every representation costs the same 1 credit per record. Where our current-generation extraction has not covered an attribute, the field is null rather than filled from an older, less accurate source.",
      "required": [
        "id",
        "recordType",
        "projectName",
        "projectHeadline",
        "boardwalkLink",
        "mergedFrom",
        "lastUpdated",
        "meetingDate",
        "delivery",
        "address",
        "city",
        "county",
        "state",
        "postalCode",
        "latitude",
        "longitude",
        "locationPrecision",
        "locationPrecisionLabel",
        "isApproximate",
        "parcelApn",
        "stateId",
        "countyId",
        "cityId",
        "additionalAddresses",
        "inOpportunityZone",
        "inFemaFloodZone",
        "propertyType",
        "propertyTypeLabel",
        "propertySubtype",
        "propertySubtypeLabel",
        "assetClass",
        "assetClassLabel",
        "leadType",
        "leadTypeLabel",
        "stage",
        "stageLabel",
        "landUses",
        "classifications",
        "tags",
        "status",
        "statusLabel",
        "statusSummary",
        "requestType",
        "requestTypeLabel",
        "decisionBody",
        "caseNumbers",
        "isAppeal",
        "nextHearingDate",
        "acreage",
        "squareFootage",
        "unitMix",
        "totalUnitCount",
        "affordableUnits",
        "bedroomCount",
        "lotCount",
        "buildingCount",
        "buildingStories",
        "floorCount",
        "buildingHeightFeet",
        "parkingSpaces",
        "amenities",
        "existingZoning",
        "proposedZoning",
        "isRezone",
        "variancesRequested",
        "constructionType",
        "constructionTypeLabel",
        "projectSize",
        "projectSizeLabel",
        "likelyTrades",
        "developerCompany",
        "developerCompanyRole",
        "developerCompanyRoleLabel",
        "contacts",
        "contactEnrichment",
        "companyEnrichment",
        "publicOfficials",
        "contactSummary",
        "keyFacts",
        "evidence",
        "conditionsOfApproval",
        "summary",
        "decisions",
        "voteSummary",
        "sourceDocumentUrl",
        "originalRawText",
        "originalRawTextTruncated"
      ],
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "integer",
          "description": "Boardwalk's stable identifier for this project.",
          "x-group": "identity",
          "x-csv-field": "project_id"
        },
        "recordType": {
          "type": "string",
          "description": "What kind of record this is. Always \"project\" today; reserved for future record types.",
          "x-group": "identity"
        },
        "projectName": {
          "type": "string",
          "description": "The project's display name.",
          "x-group": "identity",
          "x-csv-field": "project_name"
        },
        "projectHeadline": {
          "type": [
            "string",
            "null"
          ],
          "description": "A one-line description of the latest development on this project.",
          "x-group": "identity",
          "x-csv-field": "project_headline"
        },
        "boardwalkLink": {
          "type": "string",
          "format": "uri",
          "description": "Deep link to this project in the Boardwalk map.",
          "x-group": "identity",
          "x-csv-field": "boardwalk_link"
        },
        "mergedFrom": {
          "type": "array",
          "description": "The project ids folded into this record as duplicates of the same development, including its own. You are billed once for the record, not once per id.",
          "x-group": "identity",
          "items": {
            "type": "integer"
          }
        },
        "lastUpdated": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time",
          "description": "When this project record last changed, RFC 3339 UTC.",
          "x-group": "identity",
          "x-csv-field": "last_updated"
        },
        "meetingDate": {
          "type": [
            "string",
            "null"
          ],
          "format": "date",
          "description": "The date of the most recent public meeting this project appeared at. For a merged development this is reconciled across the whole family (the newest hearing of any merged record, never later than today or than your meetingDateTo bound), so it matches the product map and your date filters.",
          "x-group": "identity",
          "x-csv-field": "meeting_date"
        },
        "delivery": {
          "nullable": true,
          "description": "What Boardwalk has already delivered to your credit pool for this record, and whether this delivery was billed. GET /projects/sync returns these same four keys plus a change payload (what moved, and which new filing caused it). See the SyncDeliveryState schema.",
          "x-group": "delivery",
          "allOf": [
            {
              "$ref": "#/$defs/DeliveryState"
            }
          ]
        },
        "address": {
          "type": [
            "string",
            "null"
          ],
          "description": "The project's street address as stated in the public filing.",
          "x-group": "location",
          "x-csv-field": "address"
        },
        "city": {
          "type": [
            "string",
            "null"
          ],
          "description": "City the project is in.",
          "x-group": "location",
          "x-csv-field": "city"
        },
        "county": {
          "type": [
            "string",
            "null"
          ],
          "description": "County the project is in.",
          "x-group": "location",
          "x-csv-field": "county"
        },
        "state": {
          "type": [
            "string",
            "null"
          ],
          "description": "Two-letter state code.",
          "x-group": "location",
          "x-csv-field": "state"
        },
        "postalCode": {
          "type": [
            "string",
            "null"
          ],
          "description": "Postal code of the project's primary address.",
          "x-group": "location"
        },
        "latitude": {
          "type": [
            "number",
            "null"
          ],
          "description": "Latitude of the project's mapped location.",
          "x-group": "location"
        },
        "longitude": {
          "type": [
            "number",
            "null"
          ],
          "description": "Longitude of the project's mapped location.",
          "x-group": "location"
        },
        "locationPrecision": {
          "type": [
            "string",
            "null"
          ],
          "description": "How precisely this project is placed: address, parcel, location_description, city or county.",
          "x-group": "location"
        },
        "locationPrecisionLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of locationPrecision.",
          "x-group": "location"
        },
        "isApproximate": {
          "type": "boolean",
          "description": "True when the coordinates are inferred rather than taken from a street address.",
          "x-group": "location"
        },
        "parcelApn": {
          "type": "array",
          "description": "Assessor parcel numbers named in the filing.",
          "x-group": "location",
          "x-csv-field": "parcel_apn",
          "items": {
            "type": "string"
          }
        },
        "stateId": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Boardwalk id of the state, for use with /locations/*.",
          "x-group": "location"
        },
        "countyId": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Boardwalk id of the county, for use with /locations/*.",
          "x-group": "location"
        },
        "cityId": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Boardwalk id of the city, for use with /locations/*.",
          "x-group": "location"
        },
        "additionalAddresses": {
          "type": "array",
          "description": "Other addresses associated with this project.",
          "x-group": "location",
          "items": {
            "$ref": "#/$defs/ProjectAddress"
          }
        },
        "inOpportunityZone": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Whether the site is inside a federal Opportunity Zone (2018 designation). Null means membership has not been computed, never false.",
          "x-group": "location"
        },
        "inFemaFloodZone": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Whether the site is inside a FEMA Special Flood Hazard Area, the 1%-annual-chance regulatory flood zone. Null means membership has not been computed, never false.",
          "x-group": "location"
        },
        "propertyType": {
          "type": [
            "string",
            "null"
          ],
          "description": "Top-level land-use classification, e.g. residential.",
          "x-group": "classification",
          "x-csv-field": "property_type"
        },
        "propertyTypeLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of propertyType.",
          "x-group": "classification"
        },
        "propertySubtype": {
          "type": [
            "string",
            "null"
          ],
          "description": "Second-level land-use classification, e.g. multifamily.",
          "x-group": "classification",
          "x-csv-field": "property_subtype"
        },
        "propertySubtypeLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of propertySubtype.",
          "x-group": "classification"
        },
        "assetClass": {
          "type": [
            "string",
            "null"
          ],
          "description": "Third-level land-use classification for the project's headline use, e.g. apartments: the first one we know where that use stops short of this level. Blank means the project has no asset class recorded at all; see `landUses` for every use it does have. Never a duplicated parent value.",
          "x-group": "classification",
          "x-csv-field": "asset_class"
        },
        "assetClassLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of assetClass.",
          "x-group": "classification"
        },
        "leadType": {
          "type": [
            "string",
            "null"
          ],
          "description": "Boardwalk's read of the record as a lead: private (private development), public (roads, schools, utilities, public buildings), private_minor (a small private job: a single home, a tenant finish, a lot split) or public_minor. Search returns private by default; widen it with the leadTypes filter. Null while the record is awaiting review.",
          "x-group": "classification",
          "x-csv-field": "lead_type"
        },
        "leadTypeLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of leadType.",
          "x-group": "classification"
        },
        "stage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Where the project is in its life: concept_or_planning, entitlement, design, bidding, awarded, under_construction or complete. Independent of status, which is the latest hearing outcome. Null while the record is awaiting review, or when no stage applies to it.",
          "x-group": "classification",
          "x-csv-field": "stage"
        },
        "stageLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of stage.",
          "x-group": "classification"
        },
        "landUses": {
          "type": "array",
          "description": "Every land use on this project, to the deepest level we know for each, so a mixed-use development lists all of them. `assetClass` is null on an entry where the record only told us the type and subtype; we never copy a parent value down. One use is listed once: where the source describes the same use twice and one description stops short of the other, only the fuller one is listed. `matchedOn` names which taxonomy levels of that use satisfied your filter (`[\"subtype\"]`, `[\"subtype\",\"assetClass\"]`), so you can see why the project is in your results; it is an empty list on uses that did not match and on every use when you filtered on no taxonomy at all. Procedural items such as rezones are not land uses and appear as requestType instead.",
          "x-group": "classification",
          "items": {
            "$ref": "#/$defs/ProjectLandUse"
          }
        },
        "classifications": {
          "type": "array",
          "description": "Every land-use classification on this project, primary and secondary.",
          "x-group": "classification",
          "items": {
            "$ref": "#/$defs/ProjectClassification"
          }
        },
        "tags": {
          "type": "array",
          "description": "Free-form tags attached to the project.",
          "x-group": "classification",
          "items": {
            "type": "string"
          }
        },
        "status": {
          "type": [
            "string",
            "null"
          ],
          "description": "Where this project stands, as a stable machine token. On a merged development whose meetingDate was reconciled to a newer family hearing, this (with statusLabel and decisionBody) describes that same newest hearing, matching the product map.",
          "x-group": "status",
          "x-csv-field": "current_status"
        },
        "statusLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of status; identical to the CSV's Current Status cell.",
          "x-group": "status",
          "x-csv-field": "current_status"
        },
        "statusSummary": {
          "type": [
            "string",
            "null"
          ],
          "description": "A sentence summarising where the project stands right now.",
          "x-group": "status",
          "x-csv-field": "status_detail"
        },
        "requestType": {
          "type": [
            "string",
            "null"
          ],
          "description": "What the applicant asked the jurisdiction for, as a stable machine token.",
          "x-group": "status",
          "x-csv-field": "request_type"
        },
        "requestTypeLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of requestType.",
          "x-group": "status",
          "x-csv-field": "request_type"
        },
        "decisionBody": {
          "type": [
            "string",
            "null"
          ],
          "description": "The body that heard or decided the request, e.g. Planning Commission.",
          "x-group": "status",
          "x-csv-field": "decision_body"
        },
        "caseNumbers": {
          "type": "array",
          "description": "Jurisdiction case numbers for this project.",
          "x-group": "status",
          "x-csv-field": "case_number",
          "items": {
            "type": "string"
          }
        },
        "isAppeal": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "True when this proceeding is an appeal. Null means unknown, never false.",
          "x-group": "status"
        },
        "nextHearingDate": {
          "type": [
            "string",
            "null"
          ],
          "format": "date",
          "description": "The next scheduled hearing date, where one was stated.",
          "x-group": "status",
          "x-csv-field": "next_hearing_date"
        },
        "acreage": {
          "type": [
            "number",
            "null"
          ],
          "description": "Total site area in acres.",
          "x-group": "site",
          "x-unit": "acres",
          "x-csv-field": "acreage"
        },
        "squareFootage": {
          "type": [
            "number",
            "null"
          ],
          "description": "Total gross building floor area explicitly stated across building or use rows.",
          "x-group": "site",
          "x-unit": "sqft"
        },
        "unitMix": {
          "type": "array",
          "description": "Dwelling or space counts by type. Entry N's count always describes entry N's type.",
          "x-group": "site",
          "x-unit": "count",
          "x-csv-field": "unit_count",
          "items": {
            "$ref": "#/$defs/UnitMixEntry"
          }
        },
        "totalUnitCount": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Total dwelling units across all unit types.",
          "x-group": "site",
          "x-unit": "count"
        },
        "affordableUnits": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Units designated affordable.",
          "x-group": "site",
          "x-unit": "count"
        },
        "bedroomCount": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Total bedrooms across the project.",
          "x-group": "site",
          "x-unit": "count"
        },
        "lotCount": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Total lots in the subdivision or plat, summed across every stated lot group. Open-space and common-area rows are not lots and are not counted.",
          "x-group": "site",
          "x-unit": "count"
        },
        "buildingCount": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Number of buildings proposed.",
          "x-group": "site",
          "x-unit": "count"
        },
        "buildingStories": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Number of storeys.",
          "x-group": "site",
          "x-unit": "count"
        },
        "floorCount": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Highest stated above-grade story count among explicit building rows.",
          "x-group": "site",
          "x-unit": "count"
        },
        "buildingHeightFeet": {
          "type": [
            "number",
            "null"
          ],
          "description": "Building height in feet. Null where the filing stated a height whose unit we cannot resolve. We do not guess.",
          "x-group": "site",
          "x-unit": "feet"
        },
        "parkingSpaces": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Parking spaces proposed.",
          "x-group": "site",
          "x-unit": "count"
        },
        "amenities": {
          "type": "array",
          "description": "Amenities named in the filing.",
          "x-group": "site",
          "items": {
            "type": "string"
          }
        },
        "existingZoning": {
          "type": [
            "string",
            "null"
          ],
          "description": "The site's zoning code before the request.",
          "x-group": "zoning",
          "x-csv-field": "existing_zoning"
        },
        "proposedZoning": {
          "type": [
            "string",
            "null"
          ],
          "description": "The zoning code being requested.",
          "x-group": "zoning",
          "x-csv-field": "proposed_zoning"
        },
        "isRezone": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "True when the request changes the site's zoning. Null means unknown, never false.",
          "x-group": "zoning",
          "x-csv-field": "is_rezone"
        },
        "variancesRequested": {
          "type": "array",
          "description": "Variances or deviations the applicant asked for.",
          "x-group": "zoning",
          "x-csv-field": "variances_requested",
          "items": {
            "type": "string"
          }
        },
        "constructionType": {
          "type": [
            "string",
            "null"
          ],
          "description": "The kind of construction work proposed, as a stable machine token.",
          "x-group": "construction",
          "x-csv-field": "construction_type"
        },
        "constructionTypeLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of constructionType.",
          "x-group": "construction",
          "x-csv-field": "construction_type"
        },
        "projectSize": {
          "type": [
            "string",
            "null"
          ],
          "description": "How large the construction is, in the product's own vocabulary: `large`, `medium` or `small`. Null when the size could not be judged.",
          "x-group": "construction"
        },
        "projectSizeLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of projectSize.",
          "x-group": "construction"
        },
        "likelyTrades": {
          "type": "array",
          "description": "Trades this project is likely to need, with the evidence for each.",
          "x-group": "construction",
          "x-csv-field": "likely_trades",
          "items": {
            "$ref": "#/$defs/LikelyTrade"
          }
        },
        "developerCompany": {
          "type": [
            "string",
            "null"
          ],
          "description": "The external company developing or applying for this project. Government entities never appear here, even when the filing names one as the applicant.",
          "x-group": "contacts",
          "x-csv-field": "developer_company"
        },
        "developerCompanyRole": {
          "type": [
            "string",
            "null"
          ],
          "description": "How the developer company is named in the filing: developer, builder or applicant.",
          "x-group": "contacts",
          "x-csv-field": "developer_company_role"
        },
        "developerCompanyRoleLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable form of developerCompanyRole.",
          "x-group": "contacts",
          "x-csv-field": "developer_company_role"
        },
        "contacts": {
          "type": "array",
          "description": "External parties on this project: developer, applicant, architect, engineer, contractor, owner. Contact channels are included on paid plans; on a free trial they are null and contactsWithheldReason says why.",
          "x-group": "contacts",
          "items": {
            "$ref": "#/$defs/Contact"
          }
        },
        "contactEnrichment": {
          "type": "object",
          "description": "What happened when we tried to enrich this record's contacts. status is not_requested unless the request set include=contacts. Enrichment never changes what a record costs: every record is 1 credit whether enrichment found somebody, found nobody, or was never attempted, so a blank contact block always says which of those it was.",
          "x-group": "contacts",
          "required": [
            "status",
            "statusLabel",
            "attemptedAt",
            "contactsFound",
            "source"
          ],
          "additionalProperties": false,
          "properties": {
            "status": {
              "type": [
                "string",
                "null"
              ]
            },
            "statusLabel": {
              "type": [
                "string",
                "null"
              ]
            },
            "attemptedAt": {
              "type": [
                "string",
                "null"
              ]
            },
            "contactsFound": {
              "type": [
                "integer",
                "null"
              ]
            },
            "source": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "title": "Contact Enrichment"
        },
        "companyEnrichment": {
          "type": "array",
          "description": "Companies on this project resolved against Boardwalk's company registry: official name, website, LinkedIn page, archetype and main phone. Names and websites are included on every plan because they are corporate facts, not personal data. The remaining keys are null outside a paid plan, and the array is empty unless the request set include=contacts.",
          "x-group": "contacts",
          "items": {
            "$ref": "#/$defs/EnrichedCompany"
          }
        },
        "publicOfficials": {
          "type": "array",
          "description": "Government staff and elected officials named in the public record. Their names, roles and votes are public-record facts. Boardwalk never distributes their personal contact details, on any plan.",
          "x-group": "contacts",
          "items": {
            "$ref": "#/$defs/PublicOfficial"
          }
        },
        "contactSummary": {
          "description": "externalCount is the number of entries in contacts[]; governmentCount the number in publicOfficials[]; unclassifiedCount the parties (people or companies) the filing did not identify clearly enough for us to place in either, which are therefore in neither. withheldCount and withheldReason say how many contact channels were withheld and why. lowConfidenceWithheld counts contacts we hold but do not publish because the evidence for them is only pattern-inferred or uncorroborated. A blank there is a decision, not a gap in coverage.",
          "x-group": "contacts",
          "allOf": [
            {
              "$ref": "#/$defs/ContactSummary"
            }
          ]
        },
        "keyFacts": {
          "type": "array",
          "description": "Discrete facts extracted from the filing, each with the category it belongs to.",
          "x-group": "evidence",
          "x-csv-field": "key_facts",
          "items": {
            "$ref": "#/$defs/KeyFact"
          }
        },
        "evidence": {
          "type": [
            "string",
            "null"
          ],
          "description": "The passage of the public record that supports the current status.",
          "x-group": "evidence",
          "x-csv-field": "evidence"
        },
        "conditionsOfApproval": {
          "type": "array",
          "description": "Verbatim conditions attached to an approval.",
          "x-group": "evidence",
          "items": {
            "type": "string"
          }
        },
        "summary": {
          "type": [
            "string",
            "null"
          ],
          "description": "The project summary shown at the top of the product's project page: what is being built, by whom, and where the approval process stands.",
          "x-group": "evidence"
        },
        "alertMatch": {
          "nullable": true,
          "description": "Why this record matched the alert that delivered it. Absent on ordinary searches.",
          "x-group": "alertMatch",
          "allOf": [
            {
              "$ref": "#/$defs/AlertMatch"
            }
          ]
        },
        "aiMatch": {
          "nullable": true,
          "description": "Why the AI search matched this record, and how strongly. Absent on structured searches, which do not rank.",
          "x-group": "alertMatch",
          "allOf": [
            {
              "$ref": "#/$defs/AiMatch"
            }
          ]
        },
        "decisions": {
          "type": "array",
          "description": "Every recorded decision on this project, newest meeting first, with the named votes cast and a derived tally.",
          "x-group": "decisions",
          "items": {
            "$ref": "#/$defs/ProjectDecision"
          }
        },
        "voteSummary": {
          "nullable": true,
          "description": "The tally of the most recent recorded vote on this project: yes, no, abstain, absent, total, and whether it was unanimous.",
          "x-group": "decisions",
          "allOf": [
            {
              "$ref": "#/$defs/VoteSummary"
            }
          ]
        },
        "sourceDocumentUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "Direct link to the original public meeting document (usually a PDF) this record's latest extraction came from, on the jurisdiction's own site.",
          "x-group": "documents"
        },
        "originalRawText": {
          "type": [
            "string",
            "null"
          ],
          "description": "The transcribed text of the portion of the public record this project was extracted from: the project's own agenda-item slice where the document covers many items, otherwise the full document text.",
          "x-group": "documents"
        },
        "originalRawTextTruncated": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "True when originalRawText was cut at the per-record character cap.",
          "x-group": "documents"
        }
      }
    },
    "PublicOfficial": {
      "type": "object",
      "title": "Public Officials",
      "required": [
        "name",
        "title",
        "role",
        "roleLabel",
        "partyClass",
        "organization"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": [
            "string",
            "null"
          ]
        },
        "title": {
          "type": [
            "string",
            "null"
          ]
        },
        "role": {
          "type": [
            "string",
            "null"
          ]
        },
        "roleLabel": {
          "type": [
            "string",
            "null"
          ]
        },
        "partyClass": {
          "type": [
            "string",
            "null"
          ]
        },
        "organization": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "TrialTruncation": {
      "type": [
        "object",
        "null"
      ],
      "description": "**Free trial only.** Non-null when this page was cut short because the trial's record credits ran out mid-request; `null` on every other response, including every response to a paid key. A paid page is delivered whole or refused whole, never trimmed: a page the balance cannot cover is refused with `402 insufficient_credits` and returns no records at all. Use this field to tell \"your trial ran out\" apart from \"that is all that matched\".",
      "properties": {
        "reason": {
          "type": "string",
          "enum": [
            "trial_credit_balance_reached"
          ],
          "description": "The only reason a response is ever short of what was asked for."
        },
        "deliveredCount": {
          "type": "integer",
          "description": "Records actually returned and charged."
        },
        "requestedCount": {
          "type": "integer",
          "description": "Records that would have been returned with a sufficient balance."
        },
        "creditsRemaining": {
          "type": "integer",
          "description": "Trial credits left after this request."
        },
        "message": {
          "type": "string",
          "description": "Human-readable explanation, safe to surface to an end user."
        }
      }
    },
    "UnitMixEntry": {
      "type": "object",
      "title": "Unit Mix",
      "required": [
        "count",
        "type",
        "typeLabel"
      ],
      "additionalProperties": false,
      "properties": {
        "count": {
          "type": [
            "number",
            "null"
          ]
        },
        "type": {
          "type": [
            "string",
            "null"
          ]
        },
        "typeLabel": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "Vote": {
      "type": "object",
      "title": "Vote",
      "required": [
        "name",
        "role",
        "vote",
        "voteLabel"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": [
            "string",
            "null"
          ]
        },
        "role": {
          "type": [
            "string",
            "null"
          ]
        },
        "vote": {
          "type": [
            "string",
            "null"
          ]
        },
        "voteLabel": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "VoteSummary": {
      "type": "object",
      "title": "Vote Summary",
      "required": [
        "yes",
        "no",
        "abstain",
        "absent",
        "total",
        "isUnanimous",
        "meetingDate"
      ],
      "additionalProperties": false,
      "properties": {
        "yes": {
          "type": [
            "integer",
            "null"
          ]
        },
        "no": {
          "type": [
            "integer",
            "null"
          ]
        },
        "abstain": {
          "type": [
            "integer",
            "null"
          ]
        },
        "absent": {
          "type": [
            "integer",
            "null"
          ]
        },
        "total": {
          "type": [
            "integer",
            "null"
          ]
        },
        "isUnanimous": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "meetingDate": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "VoteTally": {
      "type": "object",
      "title": "VoteTally",
      "required": [
        "yes",
        "no",
        "abstain",
        "absent",
        "total",
        "isUnanimous"
      ],
      "additionalProperties": false,
      "properties": {
        "yes": {
          "type": [
            "integer",
            "null"
          ]
        },
        "no": {
          "type": [
            "integer",
            "null"
          ]
        },
        "abstain": {
          "type": [
            "integer",
            "null"
          ]
        },
        "absent": {
          "type": [
            "integer",
            "null"
          ]
        },
        "total": {
          "type": [
            "integer",
            "null"
          ]
        },
        "isUnanimous": {
          "type": [
            "boolean",
            "null"
          ]
        }
      }
    }
  }
}