Skip to main content

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.md and domain/CUTOVER.md. There is no COMPLIANCE-COVERAGE-MATRIX.md in this repo. The "verified live" / "Action" table below is a 2026-06-08 snapshot of the pre-rebuild app's syncs (function names like sync-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.

ModuleDataset IDLive rowsComplied todayAction
HPD Violationswvxf-dwi5(live)sync-hpd-violationsnone
DOB Violations3h2n-5cm9(live)sync-dob-datanone (parse YYYYMMDD dates)
ECB / OATH6bgk-3dad(live)sync-ecb-violationsnone
DOB Complaintseabe-havv(live)✅ in usenone
DOB Permitsipu4-2q9a3,988,698✅ in usenone (field gotchas bin__/job__)
HPD Registration (MDR)tesw-yqqr203,236✅ in usenone
HPD Bedbugwz6d-d3jb701,628✅ in usenone
Elevatore5aq-a4j2(live)sync-periodic-inspectionsnone (correct)
Façade (FISP/LL11)xubg-57si(live)sync-periodic-inspectionsnone (correct)
Boiler52dp-yji6861,721❌ points at yb3y-jj3p = 404 GONERE-POINT (filter bin_number)
Cooling Towery4fw-iqfr5,943❌ points at n4u3-jp7s = 404 GONERE-POINT (filter bin)
HPD Litigation59kj-x8nc238,755❌ not syncedBUILD new sync
LL84 Benchmarking + LL33/LL975zyy-y8am103,259❌ not syncedBUILD new sync
HPD Complaintsuwyv-629c (+ a2nx-4u46)auth-restricted on probe⚠️ points at ygpa-z7cr = dead/blankVERIFY dataset + repoint
FDNYqphi-jjz4 = 404 GONE; hc8x-tcnd = "Firehouse Listing" (wrong)sync-fdny-data brokenRESEARCH — 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 are YYYYMMDD strings.
  • 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 · filter bincomplaintid, buildingid, boroughid, borough, housenumber, streetname, zip, block, lot, apartment, communityboard, receiveddate, statusid, status, statusdate.
  • Complaint Problems: a2nx-4u46 · join on complaintidproblemid, 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 (also bbl) · 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 with next_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 (also bbl) · 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) or nyc_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-inspections points at yb3y-jj3p (boiler) and n4u3-jp7s (cooling tower) — both now return HTTP 404 (dataset gone). Re-point to the live datasets below. Façade xubg-57si and elevator e5aq-a4j2 are correct.

11. DOB NOW Safety — Boiler (Jaffa: Boiler / Boiler Annual) — ✅ VERIFIED LIVE 861,721 rows

  • Dataset: 52dp-yji6 (replaces yb3y-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 (replaces n4u3-jp7s) · filter: bin (also bbl) · 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 sectionAPI dataset(s)agency/category
HPD Violations (HMC)wvxf-dwi5HPD / violation
HPD Complaintsuwyv-629c + a2nx-4u46HPD / complaint
HPD Litigation59kj-x8ncHPD / litigation
HPD Registration (MDR)tesw-yqqrHPD / registration
HPD Bedbugwz6d-d3jbHPD / bedbug_filing
HPD Lead / RPOwvxf-dwi5 (ordernumber 616–626)HPD / lead
DOB Violations / Work-w/o-permit3h2n-5cm9DOB / violation
DOB Complaints / SWOeabe-havvDOB / complaint
ECB / Hearings / Penalties / Savings6bgk-3dadECB / violation
FDNYresearch / obligation (no live per-building feed)FDNY / obligation
Permits / Electrical / LAA / Marquee / Openipu4-2q9a (+ ic3t-wcy2, w9ak-ipjd)DOB / permit
Boiler52dp-yji6DOB / obligation
Elevatore5aq-a4j2DOB / obligation
Façade / Parapetxubg-57si (parapet TBD)DOB / obligation
Cooling Towery4fw-iqfrDOH / obligation
LL84 Benchmarking + LL33 grade5zyy-y8amENERGY / benchmarking
LL97 emissionsderived from 5zyy-y8am GHG (+ dataset TBD)ENERGY / obligation
Insuranceinternal (not NYC API)
Inspections (XRF/lead/etc.)internal (Complied-generated)

PART 5 — Fixes to existing Complied syncs (found during this pass)

  1. sync-periodic-inspections: re-point boiler yb3y-jj3p → 52dp-yji6 and cooling tower n4u3-jp7s → y4fw-iqfr (current IDs are 404 GONE — confirmed). Field names differ: boiler filters on bin_number, cooling tower on bin (vs the elevator/façade datasets' bin).
  2. sync-hpd-complaints: current ygpa-z7cr returns blank — verify and re-point to the correct public HPD Complaints dataset (uwyv-629c/a2nx-4u46 were auth-restricted on anon probe; check with the app token).
  3. sync-fdny-data: qphi-jjz4 is 404 and hc8x-tcnd is the Firehouse Listing — there is no clean per-building FDNY violations dataset. Decide: research an alternate source or convert to an obligation track.
  4. sync-doh-data: still disabled (restaurant 43nn-pn8j). Re-purpose for cooling tower + water tank, or retire.
  5. DOB date formats: 3h2n-5cm9 uses YYYYMMDD strings — parse, don't assume ISO.
  6. Field-name gotchas: permits use bin__/job__ (trailing underscores); bedbug has filling_period_end_date (misspelled); LL84 keys on nyc_building_identification not bin.