CivorenRequest access

Sync layer

Bulk export

Data LiveAPI Planned

Full-graph snapshots as CSV or Parquet for warehouse loads and offline analysis, requested on demand or delivered on a schedule.

Requesting an export

POST /v1/exports
{
  "format": "parquet",
  "tables": ["candidacies", "contests", "offices", "provenance"],
  "filters": { "states": ["AZ", "KS", "MO"], "min_confidence": 0.6 }
}
202 Accepted
{ "id": "exp_01K2Q8…", "status": "building", "poll": "/v1/exports/exp_01K2Q8…" }

Poll until the status reads ready, then download from the signed URLs, which last an hour and can be reissued at any time. Parquet output is compressed and carries the statistics that let a reader skip whole blocks it does not need, and geometry ships in both a binary spatial column and a GeoJSON column for tools without a spatial type.

Tables

TableGrain
candidaciesOne row per person per contest
peopleOne row per person, deduplicated across cycles
officesOne row per elected position
contestsOne row per office per election
regionsOne row per jurisdiction, with geometry
authoritiesOne row per governing or administering body
resultsOne row per candidacy per contest
aliasesAlternate names and identifiers, for joining
provenanceOne row per asserted field value, with its source
edgesTyped relationships, for rebuilding the graph locally

Contact columns appear only when your key carries the contact entitlement.

Snapshots are reproducible. Every export records the graph version it was cut from and each file carries a checksum, so requesting that version again later returns byte-identical files, which matters when reconciling a model trained on last quarter's data.