Complied Client Portal — NYC API Data Dictionary
Scope: this is the FIELD-LEVEL reference only. For current ingest architecture and which feeds the rebuilt orchestrator actually runs, see
compliance-ingestion-layers.mdanddomain/CUTOVER.md. There is noCOMPLIANCE-COVERAGE-MATRIX.mdin this repo. The "verified live" / "Action" table below is a 2026-06-08 snapshot of the pre-rebuild app's syncs (function names likesync-hpd-violations) and is not today's orchestrator status. Trust this doc for Socrata fields and dataset IDs; distrust it for what's flowing.
The full field-level reference for building the Complied client portal to match (and beat) Jack Jaffa. For every Jaffa module, this lists the exact NYC Open Data API, how to query it, and every field it returns.
⭐ VERIFIED LIVE STATUS (probed against live Socrata 2026-06-08)
Independent count(*) probe of every dataset ID vs. what the pre-rebuild edge functions pointed at on 2026-06-08. Not the source of truth for what to fix/build today — the rebuilt sync-orchestrator feed list is in docs/domain/CUTOVER.md. The body below remains the field reference.
| Module | Dataset ID | Live rows | Complied today | Action |
|---|---|---|---|---|
| HPD Violations | wvxf-dwi5 | (live) | ✅ sync-hpd-violations | none |
| DOB Violations | 3h2n-5cm9 | (live) | ✅ sync-dob-data | none (parse YYYYMMDD dates) |
| ECB / OATH | 6bgk-3dad | (live) | ✅ sync-ecb-violations | none |
| DOB Complaints | eabe-havv | (live) | ✅ in use | none |
| DOB Permits | ipu4-2q9a | 3,988,698 | ✅ in use | none (field gotchas bin__/job__) |
| HPD Registration (MDR) | tesw-yqqr | 203,236 | ✅ in use | none |
| HPD Bedbug | wz6d-d3jb | 701,628 | ✅ in use | none |
| Elevator | e5aq-a4j2 | (live) | ✅ sync-periodic-inspections | none (correct) |
| Façade (FISP/LL11) | xubg-57si | (live) | ✅ sync-periodic-inspections | none (correct) |
| Boiler | 52dp-yji6 | 861,721 | ❌ points at yb3y-jj3p = 404 GONE | RE-POINT (filter bin_number) |
| Cooling Tower | y4fw-iqfr | 5,943 | ❌ points at n4u3-jp7s = 404 GONE | RE-POINT (filter bin) |
| HPD Litigation | 59kj-x8nc | 238,755 | ❌ not synced | BUILD new sync |
| LL84 Benchmarking + LL33/LL97 | 5zyy-y8am | 103,259 | ❌ not synced | BUILD new sync |
| HPD Complaints | uwyv-629c (+ a2nx-4u46) | auth-restricted on probe | ⚠️ points at ygpa-z7cr = dead/blank | VERIFY dataset + repoint |
| FDNY | qphi-jjz4 = 404 GONE; hc8x-tcnd = "Firehouse Listing" (wrong) | — | ❌ sync-fdny-data broken | RESEARCH — no clean per-building FDNY violations feed found on Open Data; likely an obligation/derived track |
Confirmed dead IDs to stop using: yb3y-jj3p (boiler), n4u3-jp7s (cooling), qphi-jjz4 (FDNY), ygpa-z7cr (HPD complaints — returned blank). hc8x-tcnd is the FDNY Firehouse Listing (219 rows), not violations.
How these APIs work (applies to all)
Every dataset below is a Socrata endpoint:
https://data.cityofnewyork.us/resource/<DATASET_ID>.json?<SoQL params>
- Filter to one building with the BIN or BBL field (named in each section). e.g.
?bin=1018266. Never fetch unfiltered. - Auth/limits: send header
X-App-Token: <NYC_OPEN_DATA_TOKEN>(or$$app_token=param) for higher rate limits. - Paginate:
$limit=50000&$offset=N&$order=<stable_id>. Loop until a page returns < limit. - Filter/sort:
$where=,$order=,$select=. Dates are ISO strings; some legacy DOB dates areYYYYMMDDstrings. - Response is a JSON array of flat objects. The keys below are the literal API field names you query and read.
Mapping target: every record lands in Complied's canonical public_events table, so each section notes the agency / event_category to tag it.
PART 1 — Core enforcement (Complied already syncs these — fields for the portal UI)
1. HPD Violations — Housing Maintenance Code ★ the main one
- Dataset:
wvxf-dwi5· filter:bin· agency: HPD · category: violation · cadence: daily - This is the HMC violations feed (§27-2005 etc.). Backs Jaffa's HPD → Violations.
Fields: violationid, buildingid, registrationid, boroid, boro, housenumber, lowhousenumber, highhousenumber, streetname, streetcode, zip, apartment, story, block, lot, bbl, class (A/B/C/I — severity), inspectiondate, approveddate, originalcertifybydate, originalcorrectbydate, newcertifybydate, newcorrectbydate, certifieddate, ordernumber (lead/RPO order code), novid, novdescription, novissueddate, currentstatusid (status code — drives open/closed), currentstatus, currentstatusdate, novtype, violationstatus (Open/Close), rentimpairing (Y/N), latitude, longitude, nta.
Portal use: Class drives severity color; new/originalcorrectbydate + certifybydate feed the deadline engine; ordernumber flags lead (LL31). Open = currentstatusid not in {19 closed, 9 dismissed}.
2. DOB Violations
- Dataset:
3h2n-5cm9· filter:bin· agency: DOB · category: violation
Fields: isn_dob_bis_viol, bin, boro, block, lot, issue_date (YYYYMMDD), violation_type_code, violation_number, house_number, street, disposition_date, disposition_comments, device_number, description, number, violation_category (e.g. "V-DOB VIOLATION - ACTIVE"), violation_type (e.g. "E-ELEVATOR"), ecb_number.
Portal use: violation_category = open/active vs resolved; violation_type groups by trade (elevator, boiler, construction…); "without permit" items live here by type code.
3. ECB / OATH Violations
- Dataset:
6bgk-3dad· filter:bin· agency: ECB · category: violation
Fields: isn_dob_bis_extract, ecb_violation_number, ecb_violation_status (ACTIVE/RESOLVE), dob_violation_number, bin, boro, block, lot, hearing_date, hearing_time, served_date, issue_date, severity (CLASS-1/2/3), violation_type, respondent_name, respondent_house_number, respondent_street, respondent_city, respondent_zip, violation_description, penality_imposed (penalty $), amount_paid, balance_due, infraction_code1, section_law_description1, aggravated_level, hearing_status, certification_status.
Portal use: This is your money + hearings feed — penality_imposed/amount_paid/balance_due power the penalty ledger; hearing_date/hearing_status power the hearings calendar; severity (Class-1) is a headline KPI. Backs Jaffa's ECB tabs (viols/correct/due/savings) — all one object here.
4. DOB Complaints
- Dataset:
eabe-havv· filter:bin· agency: DOB · category: complaint
Fields: complaint_number, status, date_entered, house_number, house_street, zip_code, bin, community_board, complaint_category (code), unit, disposition_date, disposition_code, inspection_date, dobrundate.
Portal use: Join complaint_category to your dob_complaint_categories lookup for priority/description (you already have that table). Backs Jaffa DOB → Complaints + SWO (SWO = category codes).
5. HPD Complaints + Complaint Problems (two linked datasets)
- Complaints:
uwyv-629c· filterbin→complaintid,buildingid,boroughid,borough,housenumber,streetname,zip,block,lot,apartment,communityboard,receiveddate,statusid,status,statusdate. - Complaint Problems:
a2nx-4u46· join oncomplaintid→problemid,complaintid,unittypeid,unittype,spacetypeid,spacetype,typeid,type,majorcategoryid,majorcategory,minorcategoryid,minorcategory,codeid,code,statusid,status,statusdate,statusdescription.
Portal use: Complaint = the case; Problems = the line items (the "Top 5 HPD Complaint Types" chart comes from majorcategory/minorcategory). (⚠️ Both returned "must be logged in" on the live probe, and Complied's current ygpa-z7cr returned blank — confirm the correct public dataset ID + field names before wiring.)
PART 2 — The gap datasets to ADD (full fields)
6. HPD Litigation (Jaffa: HPD → Litigation) — ✅ VERIFIED LIVE 238,755 rows
- Dataset:
59kj-x8nc· filter:bin(alsobbl) · agency: HPD · category: litigation
Fields: litigationid, buildingid, boroid, housenumber, streetname, zip, block, lot, bbl, bin, casetype (e.g. "Heat and Hot Water", "Comprehensive"), caseopendate, casestatus (OPEN/CLOSED), casejudgement (YES/NO), respondent, community_district, council_district, census_tract, nta, latitude, longitude.
Portal use: Housing-court cases per building; casejudgement=YES and harassment findings are high-risk flags for the Health Score.
7. HPD Multiple Dwelling Registration (Jaffa: Registration / MDR)
- Dataset:
tesw-yqqr· filter:bin· agency: HPD · category: registration → also write an obligation withnext_due = registrationenddate
Fields: registrationid, buildingid, boroid, boro, housenumber, lowhousenumber, highhousenumber, streetname, streetcode, zip, block, lot, bin, communityboard, lastregistrationdate, registrationenddate.
Portal use: registrationenddate → annual renewal reminder; lapsed registration blocks the owner from certifying HPD violations (a real consequence to surface).
8. HPD Bedbug Filings (Jaffa: Bed Bug Filing)
- Dataset:
wz6d-d3jb· filter:bin(alsobbl) · agency: HPD · category: bedbug_filing → annual obligation
Fields: building_id, registration_id, borough, house_number, street_name, postcode, of_dwelling_units, infested_dwelling_unit_count, eradicated_unit_count, re_infested_dwelling_unit, filing_date, filing_period_start_date, filling_period_end_date (sic — note the typo in the API), bin, bbl, community_board, city_council_district, census_tract_2010, nta, latitude, longitude.
Portal use: Annual filing due each cycle (filing_period_*); infestation counts feed unit-level risk.
9. LL84 Energy & Water Benchmarking (Jaffa: LL84 + LL33 grade) — ✅ VERIFIED LIVE 103,259 rows
- Dataset:
5zyy-y8am(2023–present) · filter:nyc_building_identification(BIN) ornyc_borough_block_and_lot(BBL) · agency: ENERGY · category: benchmarking → annual obligation (due ~May 1) - ~200 columns; the ones that matter for the portal:
Key fields: report_year, property_id, property_name, nyc_borough_block_and_lot (BBL), nyc_building_identification (BIN), address_1, postal_code, primary_property_type, year_built, occupancy, property_gfa_calculated (sq ft), energy_star_score (1–100), national_median_energy_star, site_eui_kbtu_ft, weather_normalized_site_eui, source_eui_kbtu_ft, total_location_based_ghg (tons CO2e), direct_ghg_emissions_metric, net_emissions_metric_tons, water_use_all_water_sources, report_submission_date, borough, latitude, longitude.
Portal use: energy_star_score → the LL33 energy-efficiency letter grade (A ≥85, B 70–84, C 55–69, D <55, F = didn't file) — compute and display. total_location_based_ghg is the input to LL97 emissions-limit checks. Submission present/absent for the year = LL84 compliance status.
10. DOB Permits (general — covers LAA, marquee, electrical sub-types) (Jaffa: Permits / Open / LAA / Marquee)
- Dataset:
ipu4-2q9a· filter:bin__(note the trailing underscores) · agency: DOB · category: permit
Fields: borough, bin__, house__, street_name, job__, job_doc___, job_type, self_cert, block, lot, community_board, zip_code, bldg_type, residential, work_type, permit_status, filing_status, permit_type, permit_sequence__, permit_subtype, site_fill, filing_date, issuance_date, expiration_date, job_start_date, permittee_s_first_name, permittee_s_last_name, permittee_s_business_name, permittee_s_phone__, permittee_s_license_type, permittee_s_license__, owner_s_business_type, owner_s_business_name, owner_s_first_name, owner_s_last_name, permit_si_no, gis_latitude, gis_longitude, gis_council_district, gis_census_tract, gis_nta_name, dobrundate.
Portal use: Split Jaffa's Permit sub-tabs by permit_type/work_type/permit_subtype (electrical = EW; LAA, marquee = subtypes) instead of separate feeds. expiration_date → permit-expiry reminders. For open-job filings/EUP, also consider DOB Job Application Filings ic3t-wcy2 (BIS) and DOB NOW Build w9ak-ipjd.
PART 3 — Periodic inspections / certs (corrected dataset IDs)
⚠️ Live finding (CONFIRMED 2026-06-08): Complied's
sync-periodic-inspectionspoints atyb3y-jj3p(boiler) andn4u3-jp7s(cooling tower) — both now return HTTP 404 (dataset gone). Re-point to the live datasets below. Façadexubg-57siand elevatore5aq-a4j2are correct.
11. DOB NOW Safety — Boiler (Jaffa: Boiler / Boiler Annual) — ✅ VERIFIED LIVE 861,721 rows
- Dataset:
52dp-yji6(replacesyb3y-jj3p) · filter:bin_number· annual obligation
Fields: tracking_number, boiler_id, report_type (Initial/Subsequent), pressure_type (Low/High), inspection_date, defects_exist (Yes/No), lff_45_days, lff_180_days, filing_fee, total_amount_paid, report_status (Accepted/…), bin_number.
Portal use: inspection_date + annual cycle → next-due; defects_exist=Yes and unpaid lff_* (late-filing fees) are action items.
12. Cooling Tower Registrations (Jaffa: Cooling Tower) — ✅ VERIFIED LIVE 5,943 rows
- Dataset:
y4fw-iqfr(replacesn4u3-jp7s) · filter:bin(alsobbl) · annual obligation
Fields: bin, system_id, date_registered, number, street, borough, zip, sampledates (comma list of required sample dates), activeequipment (count), bbl, latitude, longitude, council_district, census_tract, ntacode.
Portal use: sampledates drives the quarterly sampling reminders; registration presence = compliant.
13. DOB NOW Safety — Elevator
- Dataset:
e5aq-a4j2(correct) · filter:bin· 1-yr + 5-yr cycles
Fields: device_number, device_type, device_status (Active/…), status_date, bin, borough, block, lot. (Compliance-filing dataset; pair with periodic inspection cycle to compute due dates.)
14. DOB NOW Safety — Façade (FISP / LL11)
- Dataset:
xubg-57si(correct) · filter:bin· 5-yr cycle
Fields: tr6_no, control_no, filing_type, cycle, bin, house_no, street_name, borough, block, lot, sequence_no, current_status (e.g. SWARMP = Safe With A Repair And Maintenance Program), filing_status (No Report Filed/…), late_filing_amt, failure_to_file_amt, failure_to_correct_amt.
Portal use: current_status (Safe / SWARMP / Unsafe) is the headline; the *_amt fields are penalty exposure.
15. Still to verify / may not be on Open Data
Parapet (LL126/2021), Gas piping (LL152), Parking garage (LL126), Retaining wall (LL37), DEP Backflow, DEC Oil Tank/PBS (NY State — data.ny.gov), Water Tank. Confirm each via https://api.us.socrata.com/api/catalog/v1?domains=data.cityofnewyork.us&q=<name>; where none exists, build the obligation track (manual/derived) rather than a fetch.
FDNY (CONFIRMED PROBLEM): the dictionary's Part 4 assumed an "existing sync-fdny-data," but on probe qphi-jjz4 is 404 and hc8x-tcnd is the FDNY Firehouse Listing (not violations). A catalog search surfaced only incident/response/vacate datasets — no clean per-building FDNY violations feed exists on Open Data. Treat FDNY as a research item / obligation track, not a straight sync.
PART 4 — Jaffa module → API map (what feeds what)
| Jaffa / Complied portal section | API dataset(s) | agency/category |
|---|---|---|
| HPD Violations (HMC) | wvxf-dwi5 | HPD / violation |
| HPD Complaints | uwyv-629c + a2nx-4u46 | HPD / complaint |
| HPD Litigation | 59kj-x8nc | HPD / litigation |
| HPD Registration (MDR) | tesw-yqqr | HPD / registration |
| HPD Bedbug | wz6d-d3jb | HPD / bedbug_filing |
| HPD Lead / RPO | wvxf-dwi5 (ordernumber 616–626) | HPD / lead |
| DOB Violations / Work-w/o-permit | 3h2n-5cm9 | DOB / violation |
| DOB Complaints / SWO | eabe-havv | DOB / complaint |
| ECB / Hearings / Penalties / Savings | 6bgk-3dad | ECB / violation |
| FDNY | research / obligation (no live per-building feed) | FDNY / obligation |
| Permits / Electrical / LAA / Marquee / Open | ipu4-2q9a (+ ic3t-wcy2, w9ak-ipjd) | DOB / permit |
| Boiler | 52dp-yji6 | DOB / obligation |
| Elevator | e5aq-a4j2 | DOB / obligation |
| Façade / Parapet | xubg-57si (parapet TBD) | DOB / obligation |
| Cooling Tower | y4fw-iqfr | DOH / obligation |
| LL84 Benchmarking + LL33 grade | 5zyy-y8am | ENERGY / benchmarking |
| LL97 emissions | derived from 5zyy-y8am GHG (+ dataset TBD) | ENERGY / obligation |
| Insurance | internal (not NYC API) | — |
| Inspections (XRF/lead/etc.) | internal (Complied-generated) | — |
PART 5 — Fixes to existing Complied syncs (found during this pass)
sync-periodic-inspections: re-point boileryb3y-jj3p → 52dp-yji6and cooling towern4u3-jp7s → y4fw-iqfr(current IDs are 404 GONE — confirmed). Field names differ: boiler filters onbin_number, cooling tower onbin(vs the elevator/façade datasets'bin).sync-hpd-complaints: currentygpa-z7crreturns blank — verify and re-point to the correct public HPD Complaints dataset (uwyv-629c/a2nx-4u46were auth-restricted on anon probe; check with the app token).sync-fdny-data:qphi-jjz4is 404 andhc8x-tcndis the Firehouse Listing — there is no clean per-building FDNY violations dataset. Decide: research an alternate source or convert to an obligation track.sync-doh-data: still disabled (restaurant43nn-pn8j). Re-purpose for cooling tower + water tank, or retire.- DOB date formats:
3h2n-5cm9usesYYYYMMDDstrings — parse, don't assume ISO. - Field-name gotchas: permits use
bin__/job__(trailing underscores); bedbug hasfilling_period_end_date(misspelled); LL84 keys onnyc_building_identificationnotbin.