Bills & legislation 17
Three recent bills with their status { billsPage(limit: 3) { total bills { number title status } } }
billCommitteeAction : BillCommitteeAction!
Committee action on a bill (M26), for /bill/:id — the markups where it was considered and how each motion fared.
| Argument | Type | Default | |
billId | ID! | — | |
limit | Int | — | |
bills : [BillSummary!]!
All registered bills (M03) with a vote summary, for the /bills index.
billsLastUpdated : String
When CivicGate last pulled recent bills from Congress.gov (ISO) — powers the /bills 'last updated' display. Null until the first sync.
billsPage : BillsPage!
Server-paginated + searched slice of the bills index (M03). Search matches bill number ("HR 22", "hr22") and title, case-insensitively. Multiple terms are comma-separated and combined per searchMode ("and" default | "or"); wrap a term in double quotes to keep its commas / match an exact phrase, e.g. "health care, reform", tax. Filter by status/chamber; sort recent|number|votes|title. Backed by an in-memory index (no per-keystroke DB hit). sponsor scopes the list to the bills one member introduced as PRIMARY sponsor (accepts a person slug or a bioguide id); an id that resolves to nobody returns an empty list, never the unfiltered index.
| Argument | Type | Default | |
limit | Int | — | |
offset | Int | — | |
search | String | — | |
searchMode | String | — | |
status | String | — | |
chamber | String | — | |
committee | String | — | |
policyArea | String | — | |
subject | String | — | |
hasText | Boolean | — | |
sponsor | String | — | |
sort | String | — | |
billSubjects : [BillSubjectListItem!]!
Congress.gov legislative subjects (the ~1,000-term taxonomy, MANY per bill — distinct from policyAreas) with live bill counts (M03) — for the /bills subject facet. Bounded to subjects actually ingested.
billTextDiff : BillTextDiff
A readable line diff (M03) between two of a bill's text versions (by version code). Added/removed lines with a few lines of context; coverage-honest (null when either version's text isn't stored).
| Argument | Type | Default | |
id | ID! | — | |
from | String! | — | |
to | String! | — | |
billTextVersions : [BillTextVersion!]!
A bill's stored text VERSIONS (M03), newest first — the successive published texts (Introduced → Reported → Engrossed → Enrolled …). Each cites its Congress.gov/govinfo source. Empty until captured.
| Argument | Type | Default | |
id | ID! | — | |
policyAreas : [PolicyAreaListItem!]!
Congress.gov policy areas (one per bill) with live bill counts (M03) — for the bills filter + interests.
publicBill : BillPage
A single bill's page (public) — number, dates, sponsors, full text, and source references.
| Argument | Type | Default | |
id | ID! | — | |
S1 Bill Similarity — OTHER bills most semantically similar to this one (M03), by cosine over the stored local bill embeddings (assistant_embeddings, kind=bill). Surfaces related + reintroduced ("reincarnated") legislation across congresses. Empty when this bill has no embedding yet (many bills lack a summary), or when pgvector/embeddings are absent. similarity = 1 - cosine distance (1.0 = identical text).
| Argument | Type | Default | |
id | String! | — | |
limit | Int | — | |
senateVoteCoverage : VoteCoverage
What a Senate committee publishes about its votes (M26 §2.1). The Senate publishes no committee vote records, so this supplies the sentence that says so instead of an empty list implying no vote happened.
| Argument | Type | Default | |
committeeCode | ID! | — | |
stateBill : StateBill
A single state bill (M03) with its sponsors + action timeline, by OpenStates ocd-bill id.
| Argument | Type | Default | |
id | ID! | — | |
stateBillCursors : [StateBillCursor!]!
Per-state state-bill ingest cursors (admin-only) — round-robin scheduler progress for the Jobs tab.
stateBills : StateBillsPage!
State legislation (M03, state tier) — a server-paginated + searched slice of the state_bills index, kept COMPLETELY SEPARATE from the federal billsPage. Search matches the identifier ("AB 2114", "ab2114") and title, accent-insensitively; multiple terms are comma-separated (searchMode and|or), a "quoted" term is exact. Filter by state/session/status; sort updated|introduced|number|title.
| Argument | Type | Default | |
state | String | — | |
session | String | — | |
status | String | — | |
search | String | — | |
searchMode | String | — | |
sort | String | — | |
limit | Int | — | |
offset | Int | — | |
stateBillStates : [StateBillCoverage!]!
Per-state coverage of the state-bills index (M03) — count + last-synced, so the UI is coverage-honest about which states are ingested.
voteAlignmentCongresses : [Int!]!
Distinct Congress numbers scored in the vote-alignment tables (D1) — the /alignment congress facet, newest first. Empty until the vote-alignment ingest has run.
voteAlignmentLeaderboard : [VoteAlignmentRow!]!
Vote-alignment / party-unity LEADERBOARD (D1, E18/M03) — members ranked by how often they vote with their party's majority, computed ENTIRELY from CivicGate's ingested roll-call votes. chamber = house|senate (both when omitted); congress defaults to the latest computed; party = D|R restricts to one party; order = party_unity_desc (most party-line, default) | party_unity_asc | cross_party_desc (most cross-party first); limit caps the list. Only members with enough party-line votes are included (coverage-honest). Neutral-administrator posture: descriptive rates ("votes with party 96%"), never a loyalty verdict. Public.
| Argument | Type | Default | |
chamber | String | — | |
congress | Int | — | |
order | String | — | |
party | String | — | |
limit | Int | — | |
People & officials 30
A member, with their party and state { person(id: "james_e_clyburn") { name party state chamber } }
candidate : CandidatePage
A candidate page (M08) — accepts id or slug. Incumbents embed their politician record.
| Argument | Type | Default | |
id | ID! | — | |
candidateCount : Int!
Count of candidates matching the filters (pairs with candidates for pagination).
| Argument | Type | Default | |
search | String | — | |
state | String | — | |
party | String | — | |
candidates : [CandidateListItem!]!
Candidates directory (M08/M04) for the /people Candidates tab. search filters by name; state = 2-letter; party single-letter. sort = raised (default) | cash | name | party | state | office | status. dir = asc | desc (defaults: money keys desc, text keys asc). Paginated.
| Argument | Type | Default | |
search | String | — | |
state | String | — | |
party | String | — | |
sort | String | — | |
dir | String | — | |
limit | Int | — | |
offset | Int | — | |
governor : GovernorProfile
One governor profile (M02) — person + every term + background facts. Accepts id or slug.
| Argument | Type | Default | |
id | ID! | — | |
governorCount : Int!
Count of governors matching the filters (pairs with governors for pagination).
| Argument | Type | Default | |
search | String | — | |
state | String | — | |
current | Boolean | — | |
governors : [Governor!]!
U.S. state governors (M02) as a first-class person type. search filters by name; state = 2-letter; current = sitting only. sort = term (default, most-recent first) | name | state | party. Paginated.
| Argument | Type | Default | |
search | String | — | |
state | String | — | |
current | Boolean | — | |
sort | String | — | |
limit | Int | — | |
offset | Int | — | |
judge : JudgeProfile
A single judge/justice by CourtListener slug or id (M20) — profile + judicial tenure (positions) + recent authored opinions (decision records). Null if unknown.
| Argument | Type | Default | |
id | ID! | — | |
judgeAppointers : [JudgeAppointer!]!
M20 — presidents who appointed judges in our data (for the /judges Appointed-by dropdown), optionally scoped to a court level. Each carries the count of distinct judges appointed. id is the president slug (use it as appointedBy).
| Argument | Type | Default | |
level | String | — | |
judgeCount : Int!
M20 — total judges matching the same filters (for /judges pagination).
| Argument | Type | Default | |
court | String | — | |
level | String | — | |
current | Boolean | — | |
search | String | — | |
state | String | — | |
appointedBy | ID | — | |
judges : [Judge!]!
M20 Judicial directory — filter by court slug, court level (supreme|appellate|district|state), state (2-letter, for district/state courts), current-only, and a name search; paginated (limit+offset). sort = name|level|tenure|opinions|appointer (default level); dir = asc|desc. Default ordering: supreme→state, current first, then name.
| Argument | Type | Default | |
court | String | — | |
level | String | — | |
current | Boolean | — | |
search | String | — | |
state | String | — | |
appointedBy | ID | — | |
sort | String | — | |
dir | String | — | |
limit | Int | — | |
offset | Int | — | |
judgeStates : [String!]!
M20 — distinct US states present at a court level (for the /judges state-filter dropdown). Empty for supreme/appellate (national/multi-state).
| Argument | Type | Default | |
level | String | — | |
official : OfficialProfile
One federal official profile (M02) — person + every term of that office + background facts. Accepts id or slug.
| Argument | Type | Default | |
id | ID! | — | |
officialCount : Int!
Count of federal officials matching the filters (pairs with officials for pagination).
| Argument | Type | Default | |
search | String | — | |
roleType | String | — | |
current | Boolean | — | |
officials : [Official!]!
Federal appointees / officials (M02) as a first-class person type — Cabinet, sub-cabinet, agency heads, White House staff, intelligence chiefs, and other prominent positions (from Wikidata). search filters by name; roleType = cabinet | agency | white_house | intelligence | other; current = sitting only. sort = term (default, most-recent first) | name | role | party. dir = asc | desc. Paginated.
| Argument | Type | Default | |
search | String | — | |
roleType | String | — | |
current | Boolean | — | |
sort | String | — | |
dir | String | — | |
limit | Int | — | |
offset | Int | — | |
people : [Person!]!
Unified people directory (M02 People Index) — members, governors + candidates, deduped per person. refresh:true busts the 60s cache.
| Argument | Type | Default | |
refresh | Boolean | — | |
peoplePage : PeoplePage!
Server-filtered/sorted PAGE of the people directory (M02) — for the /people feed tabs (all/congress). tab = all | congress; role (congress only) = senator | representative; sort = money|name|roles|party|state|district|bills|years|participation; dir = asc|desc. Returns the page + total + facet lists so the client never holds the whole roster.
| Argument | Type | Default | |
tab | String | — | |
party | String | — | |
state | String | — | |
role | String | — | |
search | String | — | |
congress | Int | — | |
sort | String | — | |
dir | String | — | |
limit | Int | — | |
offset | Int | — | |
person : PersonProfile
A unified person profile (M02) — combines a human's politician record, candidacies, and governorship. Accepts any of their slugs/ids.
| Argument | Type | Default | |
id | ID! | — | |
donationYear | Int | — | |
personFacts : [PersonFact!]!
Background cliffnotes (M02/M10) for a person — short, neutral, SOURCED facts (achievements/roles/notable events) distilled from their Wikipedia intro. Accepts any of the person's slugs/ids (resolved like the person query). Empty when none are ingested.
| Argument | Type | Default | |
id | ID! | — | |
personHearings : PersonHearings!
A person's committee activity and congressional testimony (M26), for /people/:id. Membership and testimony are deliberately separate relationships.
| Argument | Type | Default | |
slug | ID! | — | |
bioguideId | String | — | |
limit | Int | — | |
personIdentity : PersonIdentity
M02 — the unified person identity + role timeline. Resolves ANY id we have ever used for someone (canonical slug, retired slug, bioguide, wikidata, a source-row id) to one person.
| Argument | Type | Default | |
id | ID! | — | |
personIssueProfile : PersonIssueProfile
E18 (M23) — one person's stance on EVERY issue in the catalog (unknown when no signal). Accepts a person id/slug.
| Argument | Type | Default | |
id | ID! | — | |
politician : Politician
A member of Congress with votes, money, and an E18 comparison vector. Requires auth. Accepts bioguide id OR slug.
| Argument | Type | Default | |
bioguideId | ID! | — | |
president : PresidentProfile
One president by slug/id — profile + terms + background facts + stats + recent actions.
| Argument | Type | Default | |
id | ID! | — | |
presidentActions : [PresidentAction!]!
A president's actions (executive orders, vetoes, etc.), filterable by type + name search, paginated. type is a president_actions action_type.
| Argument | Type | Default | |
presidentId | ID! | — | |
type | String | — | |
search | String | — | |
overridden | Boolean | — | |
limit | Int | — | |
offset | Int | — | |
presidentActionsCount : Int!
Total actions for a president matching the filters (for pagination).
| Argument | Type | Default | |
presidentId | ID! | — | |
type | String | — | |
search | String | — | |
overridden | Boolean | — | |
presidentActionTypes : [String!]!
Distinct action types present for a president (for the action-type filter chips).
| Argument | Type | Default | |
presidentId | ID! | — | |
presidents : [President!]!
Presidents directory — all US presidents, optional name search + current-only. Ordered by presidency number (newest first).
| Argument | Type | Default | |
search | String | — | |
current | Boolean | — | |
limit | Int | — | |
publicPolitician : Politician
Same profile, public (civic data is world-readable) — used by the SSR web + embed widget. Accepts bioguide id OR slug.
| Argument | Type | Default | |
bioguideId | ID! | — | |
rosterVerifiedStates : [String!]!
M20 — 2-letter states whose judges have been verified against an official judiciary roster (drives the coverage-honest note on the /judges state tab). Empty until the roster scraper runs.
stateLegislator : StateLegislatorProfile
A state legislator's public profile (M03/M07) — identity, party, contact target, and their sponsored + cosponsored state bills, by OpenStates ocd-person id. Null when the id isn't in our roster.
| Argument | Type | Default | |
id | ID! | — | |
Money & influence 39
Top PACs by receipts this cycle { pacs(limit: 5) { name receiptsCents cycle } }
agencies : [AgencyListRow!]!
Federal agencies that have ingested award data (F7) — for the /agencies index, largest total first.
| Argument | Type | Default | |
limit | Int | — | |
agency : AgencyProfile
A federal agency's award profile (F7 / M04) — what it spends over time plus its TOP awards (a bounded 'top awards' sample, not the full universe), top recipients, and states. id = the agency slug (e.g. "agency-097"). Null if unknown.
| Argument | Type | Default | |
id | ID! | — | |
committeeFinanceSignals : [FinanceSignal!]!
Finance signals for one committee (M05) — for the /pac/:id page.
| Argument | Type | Default | |
committeeId | ID! | — | |
defenseContractors : DefenseContractors
Top defense prime contractors (M24) by federal money received — USAspending recipient rows (national place-level) name-filtered to the major primes (Lockheed Martin, RTX, Boeing, General Dynamics, Northrop Grumman, …). Each row links to its recipient profile. Null when recipient data is not ingested.
| Argument | Type | Default | |
fiscalYear | Int | — | |
limit | Int | — | |
defenseLobbying : Lobbying
Defense-scoped federal lobbying (M24) — the same LDA aggregates as lobbying, restricted to filings whose activities carry the DEF (defense) issue code. Top defense clients + firms by reported spend, plus revolving-door lobbyists. Same shape as lobbying.
| Argument | Type | Default | |
fiscalYear | Int | — | |
drugSpending : DrugSpending
CMS drug spending (M21) — top drugs by total program spend for a year, with manufacturer and year-over-year change. program = part_d (Medicare Part D) or medicaid. Source: CMS Spending by Drug (public, annual). Medicaid figures are state-administered and partial. Null when nothing is ingested.
| Argument | Type | Default | |
program | String | — | |
year | Int | — | |
limit | Int | — | |
financeSignals : [FinanceSignal!]!
Campaign-finance integrity signals (M05) — the /finance-signals registry. Neutral 'worth a look' signals over DISCLOSED FEC toplines for committees + 2026 candidates (scam-PAC efficiency, leadership-PAC share, self-funding). legalTag separates reportable-if-unexplained from legal/context. NOT a leaderboard; a signal is not evidence of wrongdoing. Filter by signalType (pac_low_efficiency|leadership_pac_share|self_funding_share) / entityType (committee|candidate); sort = amount (default) | pct | recent. Public.
| Argument | Type | Default | |
signalType | String | — | |
entityType | String | — | |
sort | String | — | |
limit | Int | — | |
offset | Int | — | |
financeSignalsCount : Int!
Count of finance signals matching the filters (M05).
| Argument | Type | Default | |
signalType | String | — | |
entityType | String | — | |
funding : [FundingRow!]!
Government funding breakout rows (by agency / budget function / state / recipient) for a fiscal year. placeCode filters recipients to a state's place of performance.
| Argument | Type | Default | |
category | String | — | |
fiscalYear | Int | — | |
placeCode | String | — | |
sort | String | — | |
limit | Int | — | |
fundingByDistrict : [DistrictFundingPoint!]!
Federal funding per congressional district WITHIN one state, for a fiscal year (M06/F15 in-state choropleth). Empty when that state has no ingested CD-level funding.
| Argument | Type | Default | |
state | String! | — | |
fiscalYear | Int | — | |
fundingByState : [StateFundingPoint!]!
Federal funding per state for a fiscal year (M06 map) — total outlays landing in each state.
| Argument | Type | Default | |
fiscalYear | Int | — | |
fundingCategories : [FundingCategory!]!
The funding breakdowns available (data-driven category selector) — kind='breakdown'.
fundingCountry : FundingCountry
A country's US foreign-aid profile — disbursements vs obligations over time, rank, and share (M04, P2).
| Argument | Type | Default | |
code | ID! | — | |
fiscalYear | Int | — | |
fundingDebtSeries : [FundingSeriesPoint!]!
National debt (total public debt outstanding) at each fiscal-year end — for the debt-over-time chart.
fundingSeries : [FundingSeries!]!
Government funding time series for the chart. With no ids, returns all entities of the category (largest first, capped by limit) so the legend can offer them all.
| Argument | Type | Default | |
category | String | — | |
ids | [ID!] | — | |
fromYear | Int | — | |
toYear | Int | — | |
limit | Int | — | |
fundingState : FundingState
A state's federal funding profile — total + top recipients in that state (M04).
| Argument | Type | Default | |
code | ID! | — | |
fiscalYear | Int | — | |
fundingSummary : FundingSummary!
Government funding (M04 CivicLedger) — topline summary for a fiscal year (+ the years we have).
| Argument | Type | Default | |
fiscalYear | Int | — | |
fundingToplineSeries : [FundingSeries!]!
Receipts / outlays / deficit as annual time series (the national overview chart).
health : String!
Liveness — no auth required.
healthLobbying : Lobbying
Health-scoped federal lobbying (M21) — the same LDA aggregates as lobbying, but restricted to filings whose activities carry a health issue code (HCR health issues, MMM Medicare/Medicaid, MED medical/disease research, PHA pharmacy). Top health clients + firms by reported spend, plus the health issue mix. Same shape as lobbying.
| Argument | Type | Default | |
fiscalYear | Int | — | |
independentExpenditureCycles : [Int!]!
Distinct election cycles present in member_independent_expenditures (M04/M05) — the /outside-money cycle facet, newest first. Empty until the FEC IE-by-candidate ingest has run.
independentExpenditureLeaderboard : [IndependentExpenditureLeaderboardRow!]!
Independent-expenditure LEADERBOARD (M04/M05) — members ranked by OUTSIDE money (FEC Schedule E independent expenditures) spent FOR / AGAINST them in a cycle, computed from member_independent_expenditures. cycle defaults to the latest ingested; chamber = house|senate (both when omitted); party = D|R restricts to one party; order = total_desc (support+oppose, default) | support_desc | oppose_desc; limit caps the list. Neutral money-flow signal: independent expenditures are spent WITHOUT coordinating with the candidate — a documented public ledger, not an accusation ("$X supporting, $Y opposing"). Coverage-honest: only members with reported IE appear; every row carries its FEC source Ref. Public.
| Argument | Type | Default | |
cycle | Int | — | |
order | String | — | |
chamber | String | — | |
party | String | — | |
limit | Int | — | |
industries : IndustryBreakdown!
Industries roll-up (M04) — committee money aggregated by APPROXIMATE keyword sector for a cycle. Coverage-honest: only committees whose name confidently matches a sector are counted; the large unclassified remainder is reported separately. When OpenSecrets data is ingested, the same object ALSO carries canonical CRP industries (crpIndustries / crpAvailable); until then those are empty and the keyword sectors are the honest FEC-only floor.
| Argument | Type | Default | |
cycle | Int | — | |
lobbying : Lobbying
Federal lobbying (M04 F04.3 / M05 F05.5) — reported spend by firm/client/issue/target for a year, from LDA.
| Argument | Type | Default | |
fiscalYear | Int | — | |
openPayments : [OpenPaymentsRow!]!
CMS Open Payments (M21) — Sunshine Act industry payment rollups for a program year. dimension = manufacturer | state | recipient (omit for all). Summary rows only.
| Argument | Type | Default | |
programYear | Int | — | |
dimension | String | — | |
limit | Int | — | |
organization : OrgProfile
An organization's federal footprint (M02) — its reported lobbying (from LDA) plus any federal money it received (USAspending), unified by name. slug is derived from the org name. Null if unknown.
| Argument | Type | Default | |
slug | ID! | — | |
organizations : [OrgListItem!]!
Top organizations by reported federal lobbying spend (M02). sort = lobbying (default) | funding | name | filings | country (HQ country) | state (recipient US state, nulls last) | years (by LAST active year, then first). dir = asc | desc (defaults per sort key); missing values always sort last. kind (client|firm|recipient) filters to orgs carrying that role. state (US 2-letter) filters recipients to their primary place-of-performance state.
| Argument | Type | Default | |
sort | String | — | |
dir | String | — | |
limit | Int | — | |
offset | Int | — | |
search | String | — | |
country | String | — | |
kind | String | — | |
state | String | — | |
organizationStates : [String!]!
Distinct US states present as a recipient's primary place of performance (M04) — the facet that populates the /orgs/recipients state filter. kind defaults to recipient. Name-sorted 2-letter codes.
| Argument | Type | Default | |
kind | String | — | |
outsideSpending : OutsideSpendingReport!
Outside / dark-money spending (M04) — independent-expenditure committees spending for/against candidates, from FEC Schedule E. GATED: available=false with an honest note until the FEC outside-spending ingest has run for a cycle; never fabricated. Groups are the top reported IE spenders, rolled up per committee into support vs. oppose.
| Argument | Type | Default | |
cycle | Int | — | |
limit | Int | — | |
outsideSpendingCycles : [Int!]!
Election cycles present in outside_spending (newest first) — the /dark-money cycle selector. Empty until the FEC outside-spending ingest has run.
pacCommittee : PacCommitteeProfile
One FEC committee's profile (M04) — every ingested cycle of its topline financials, plus the current members of Congress it contributed to (from pac_contributions). id = FEC committee id.
| Argument | Type | Default | |
id | ID! | — | |
pacCommitteeCycles : [Int!]!
Election cycles present in pac_committees (newest first) — the /pacs cycle selector.
pacCommittees : [PacCommittee!]!
FEC committees (M04) — PACs, super PACs, hybrid, leadership, and party committees, per election cycle. sort = receipts (default) | disbursements | toCandidates | independent | cash | name. dir = asc|desc. cycle defaults to the latest ingested. kind (pac|super_pac|hybrid|leadership|party) + state (2-letter) + sector (defense|finance|health|energy|tech|telecom) filter; search matches name.
| Argument | Type | Default | |
sort | String | — | |
dir | String | — | |
limit | Int | — | |
offset | Int | — | |
search | String | — | |
cycle | Int | — | |
kind | String | — | |
state | String | — | |
sector | String | — | |
pacCommitteeStates : [String!]!
Distinct home states present in pac_committees — the /pacs state facet. Name-sorted 2-letter codes.
recentStockTrades : [StockTrade!]!
Most-recent disclosed trades across all members (the /trades feed). year filters by transaction year.
| Argument | Type | Default | |
limit | Int | — | |
year | Int | — | |
recipient : RecipientProfile
A federal-money recipient's profile (M04) — total received, by fiscal year, and the states where it lands. id = recipient_id. Null if unknown.
| Argument | Type | Default | |
id | ID! | — | |
stockTradeLeaderboard : [StockTraderRow!]!
Members ranked by trade count + flagged trades (the heatmap/leaderboard). year filters by transaction year; sector restricts to a mapped market sector (e.g. health).
| Argument | Type | Default | |
limit | Int | — | |
year | Int | — | |
sector | String | — | |
stockTrades : StockTradesPage!
Congressional stock trades (STOCK Act, M04/M05). Filter by member/ticker/sector/flagged; sort recent|amount. sector filters to a mapped market sector (e.g. health) for the /healthcare Trades tab.
| Argument | Type | Default | |
bioguideId | ID | — | |
ticker | String | — | |
sector | String | — | |
type | String | — | |
year | Int | — | |
flaggedOnly | Boolean | — | |
sort | String | — | |
limit | Int | — | |
offset | Int | — | |
stockTradeYears : [Int!]!
Distinct transaction years we hold stock trades for (newest first) — powers the /trades year dropdown.
Feed & subscriptions 14
A subject's public wall — no credential needed { subjectFeed(subjectType: "person", subjectId: "james_e_clyburn", limit: 5) { events { title url occurredAt } } }
civicFeed : CivicFeed!
E01 Live Civic Theater — a PUBLIC, site-wide, reverse-chronological feed of recent civic activity across CivicGate, grounded entirely in already-ingested data (new bills, bill actions, roll-call votes, new bill text, state bills, election contests, judicial opinions). NOT personalized (that is the auth-gated /dashboard + /notifications) — this is the neutral public pulse. Coverage-honest: a quiet signal simply contributes nothing (never a fabricated event); one missing table cannot blank the feed. kinds (optional) restricts to a subset of signal kinds; cursor is an opaque ISO timestamp for paging OLDER items (pass the previous page's nextCursor).
| Argument | Type | Default | |
limit | Int | — | |
kinds | [String!] | — | |
cursor | String | — | |
mix | Boolean | — | |
entityEngagement : EntityEngagement!
Like/favorite/subscribe state for ONE entity of ANY type (person of any kind, federal or state bill, issue, committee, …). Public — likeCount always resolves; the viewer flags are false when signed out. One call powers the whole engagement button row.
| Argument | Type | Default | |
entityType | String! | — | |
entityId | ID! | — | |
entityEngagements : [EntityEngagement!]!
Engagement for MANY entities in one round trip — a feed page or a reply thread renders one bar per card, and asking per card is a request each. Order is preserved; unknown keys come back with zeroed counts rather than being dropped, so callers can index positionally.
| Argument | Type | Default | |
keys | [EntityKeyInput!]! | — | |
feed : FeedPage!
M17 Feed — the signed-in user's WALL: every update from every subject they subscribe to, newest first. Fan-in at read time over a per-SUBJECT cache, so ten thousand followers of the same bill share one cached event list. Filterable by subject group (people | bills | users | civic), concrete subject type, and event type; cursor-paged (pass the previous page's nextCursor back verbatim). Requires an identity — a session bearer OR an X-API-Key header (M16). Empty, never an error, when the user subscribes to nothing.
| Argument | Type | Default | |
filter | FeedFilterInput | — | |
feedCatalog : FeedCatalog!
M17 — the self-describing filter catalog: every subject type you can subscribe to and every event type that can happen to it. Static and public; the widget and the SDK build their filter UIs from this instead of hard-coding strings.
mySubscriptions : [FeedSubscription!]!
M17 — everything the signed-in user SUBSCRIBES to (distinct from favorites: a favorite also subscribes, but a subscription can exist without the star). Optionally filtered to one subject type. Each row carries the resolved display label + internal URL so the management UI needs no second query. Unbounded by default; mySubscriptionsPage is the paged, searchable view.
| Argument | Type | Default | |
subjectType | String | — | |
group | String | — | |
types | [String!] | — | |
search | String | — | |
limit | Int | — | |
offset | Int | — | |
mySubscriptionsPage : SubscriptionPage!
M17 — ONE PAGE of the signed-in user's subscriptions, same contract as myFavoritesPage (default page size 25, server-side search over the resolved label, per-type counts). group narrows to a filter family (people | bills | users | civic) BEFORE the type counts are taken, so the chips describe what is in the current group.
| Argument | Type | Default | |
subjectType | String | — | |
group | String | — | |
types | [String!] | — | |
search | String | — | |
limit | Int | — | |
offset | Int | — | |
notificationChannels : NotificationChannels!
Which delivery channels this server can actually use. The settings UI hides what it cannot honour — a channel with no provider is a switch wired to nothing.
notificationTypes : [NotificationTypeInfo!]!
The catalog of every trackable CHANGE TYPE (M15) — one entry per kind of change CivicGate can alert on, with the follow subjects it fires for and the prefs category it belongs to. Drives per-type subscription in the UI. Public (it is a static catalog, not user data).
post : UserPost
M17/E03 — one post with its media and replies. Public: a post has its own shareable page.
| Argument | Type | Default | |
id | ID! | — | |
postReplies : [UserPost!]!
Replies to a post, oldest first. Excludes comments on the post's individual attachments (see mediaComments). Gated by the post's visibility.
| Argument | Type | Default | |
id | ID! | — | |
limit | Int | — | |
posts : [UserPost!]!
M17/E03 — MANY posts in one round trip, for a feed page that renders several. Unknown or deleted ids are omitted, so the result may be shorter than the input.
| Argument | Type | Default | |
ids | [ID!]! | — | |
subjectFeed : FeedPage!
M17 — the PUBLIC wall of ONE subject (a person, a bill, a user). No auth and no subscription needed: this is the same event stream the personal feed fans in, scoped to a single subject. Powers /user/:handle, entity-page activity strips, and the embeddable feed widget.
| Argument | Type | Default | |
subjectType | String! | — | |
subjectId | ID! | — | |
limit | Int | — | |
cursor | String | — | |
unreadNotificationCount : Int!
M15 — count of the signed-in user's unread notifications (for the header bell). 0 when signed out.
Places & geography 23
Who represents a ZIP code { districtByZip(zip: "19104") { state district county } }
countiesAvailable : Boolean!
Is the county table loaded? False means county lookups honestly return null rather than guessing.
countiesForState : [County!]!
Every county in a state, name-ordered. Takes a postal code (PA) or a state FIPS (42).
| Argument | Type | Default | |
state | String! | — | |
county : County
County / FIPS lookup (M02/M06). One 5-digit GEOID; a de-zeroed form like 1001 is accepted too.
| Argument | Type | Default | |
geoid | ID! | — | |
countyForZip : County
The county containing a ZIP, read from the geocode cache — never spends a geocode of its own.
| Argument | Type | Default | |
zip | String! | — | |
countyPage : CountyPage
A county page: the county, the ZIPs resolved into it so far, and its siblings in the same state.
| Argument | Type | Default | |
geoid | ID! | — | |
district : DistrictProfile
A congressional-district hub (M02/M06/M08) — the state's two senators + the House member, federal money to the district, and upcoming elections, composed from EXISTING data (no new tables). Public. state = 2-letter code (case-insensitive); number = House district number. Null for an unknown/malformed state.
| Argument | Type | Default | |
state | String! | — | |
number | Int! | — | |
districtRace : DistrictRace
One House district's race(s) (general + primary) for an election year, plus the district's federal funding (M08). state = 2-letter code; district = House number.
| Argument | Type | Default | |
year | Int! | — | |
state | String! | — | |
district | Int! | — | |
districtsForState : [Int!]!
M02/M06 — the congressional district numbers a state actually has, ascending. 0 = at-large. Powers the place picker's district dropdown, so it can only ever offer districts that exist.
| Argument | Type | Default | |
state | String! | — | |
geocodeAddress : ResolvedPlace!
M02/M06 — address text to coordinates, for keeping a map in step with a typed (rather than picked) address. Call it debounced; it is billed per request.
| Argument | Type | Default | |
query | String! | — | |
placeAutocomplete : [PlaceSuggestion!]!
M02/M06 — address suggestions for what the user has typed. kind: address (default, street addresses) | city (localities). Pass a stable sessionToken for the whole address-entry interaction and the SAME token to placeDetails — that bills the keystrokes as one session instead of one each. Requires a session; empty list when no provider key is configured.
| Argument | Type | Default | |
input | String! | — | |
kind | String | — | |
sessionToken | String | — | |
placeDetails : ResolvedPlace!
M02/M06 — resolve a suggestion into fillable address fields + coordinates. Pass the sessionToken used for the autocomplete calls.
| Argument | Type | Default | |
placeId | ID! | — | |
sessionToken | String | — | |
placeFeed : PlaceFeedPage!
M17 x M02/M06 — a PLACE's wall: everything happening in a district, county, state or nationally. Public; no auth and no subscription. Fans in the place's representatives (their votes, sponsorships, news) with events indexed to the place itself (state bills, national actions), newest first. The level argument is CLAMPED to what the place actually resolved and the clamped value is returned, so a district request against a state-only place cannot silently answer with state events.
| Argument | Type | Default | |
state | String | — | |
countyFips | String | — | |
district | Int | — | |
level | String | — | |
limit | Int | — | |
cursor | String | — | |
subjectTypes | [String!] | — | |
subjectGroups | [String!] | — | |
eventTypes | [String!] | — | |
placeFeedSubjects : [PlaceSubject!]!
M17 x M02/M06 — WHO is in a place's wall: the representative subjects the fan-in covers, each with a label, its role and a link to its own page. Public. Answers the subject count the wall reports with the actual list.
| Argument | Type | Default | |
state | String | — | |
district | Int | — | |
level | String | — | |
placeProfile : PlaceProfile
Place / Jurisdiction Profile (M06) — a geographic front door: pass a 5-digit US ZIP (works signed-out) and get a coverage-honest, sourced profile of THAT PLACE: who governs here (federal + state officeholders + geographic units), where federal money flows here (statewide + congressional-district totals from USAspending), and the state laws that touch here (recent state bills). Reuses resolveZipDistrict for the geography, then pure composition of existing data — no new source. Always returns a bundle: an unresolvable ZIP yields resolvedFrom=none with an honest note (never a fabricated value).
| Argument | Type | Default | |
zip | String! | — | |
placeUpdates : PlaceUpdates!
"My Place" updates (M06/M07/E15) — a time-ordered feed of what's happening in ONE place, at TWO tiers: STATE-wide (that state's own bills, federal bills introduced by its delegation, elections on its ballot) and LOCAL (county + congressional-district federal money). Pass a 5-digit zip (resolved to state/county/district) OR a bare 2-letter state. Assembled by the source-pluggable place-updates module and CACHED per place (10-min TTL) since it's on the signed-in homepage hot path. Coverage-honest: city/county records aren't in CivicGate yet, so the local tier carries money only and says so in coverageNote — never a fabricated local event.
| Argument | Type | Default | |
zip | String | — | |
state | String | — | |
limit | Int | — | |
publicAssets : [PublicAsset!]!
Public Asset Locator (M06) — federal buildings the government OWNS or LEASES, from the GSA Inventory of Owned and Leased Properties (IOLP; public-domain / CC0). We LOCATE, we don't assess. Filter by state (2-letter), zip (5-digit), district ("CA-12" form — decoded to the raw IOLP code internally), ownedOrLeased (owned|leased), and assetType (BUILDING|LAND|…). Bounded (limit ≤ 200, default 100), largest-square-footage first. Table-optional: an empty list until the ingest has run — never a fabricated entry. Every row carries its GSA source Ref.
| Argument | Type | Default | |
state | String | — | |
zip | String | — | |
district | String | — | |
ownedOrLeased | String | — | |
assetType | String | — | |
limit | Int | — | |
publicAssetStates : [PublicAssetStateFacet!]!
State facet for the Public Asset Locator (M06) — the states present in public_assets and their asset counts (A→Z). Empty until the GSA IOLP ingest has run.
publicAssetSummary : PublicAssetSummary!
Compact public-asset counts for a scope (M06) — total / owned / leased / total square footage — for section headers on /district and /place. Same optional filters (state | zip | district) as publicAssets. Coverage-honest zeroes until the ingest has run.
| Argument | Type | Default | |
state | String | — | |
zip | String | — | |
district | String | — | |
reverseGeocode : ResolvedPlace!
M02/M06 — coordinates to an address. Backs the Find-me button: the browser supplies the fix, this names it.
| Argument | Type | Default | |
lat | Float! | — | |
lng | Float! | — | |
stateCampaignFinance : StateCampaignFinanceReport!
State-tier campaign finance (M04) from FollowTheMoney (NIMP) — top state candidates by money raised for a state + cycle. GATED: available=false with an honest note until FTM_API_KEY is set + data ingested; never fabricated.
| Argument | Type | Default | |
state | String! | — | |
cycle | Int | — | |
limit | Int | — | |
stateCampaignFinanceCycles : [Int!]!
Election cycles present in state_campaign_finance for a state (newest first). Empty until FollowTheMoney is wired.
| Argument | Type | Default | |
state | String! | — | |
stateHub : StateHub
Per-state civic hub (M06/M07) — a coverage-honest aggregation of everything CivicGate already holds about ONE U.S. state: its U.S. congressional delegation, sitting governor, state-legislature summary, recent state bills, elections, and a federal-money rollup. Pure composition of existing data — no new source. code = 2-letter state (case-insensitive). Null for an unknown code.
| Argument | Type | Default | |
code | String! | — | |
stateLegislature : [StateLegislator!]!
A state's own legislature (M07) — its state Senate (chamber=upper) + House/Assembly (lower) members, from OpenStates. Ordered by chamber then district. state = 2-letter code (case-insensitive).
| Argument | Type | Default | |
state | String! | — | |
Account & platform 28
me : MeProfile
The signed-in user's profile (M16/E04) — null when unauthenticated.
memberStockSummary : StockTradeSummary!
A member's stock-trade summary (count + flagged) — for the person page.
| Argument | Type | Default | |
bioguideId | ID! | — | |
myApiKeys : [ApiKey!]!
M16 — the signed-in user's API keys. NEVER returns a secret: only the display prefix, usage stats, and status. Requires a real session (an API key cannot enumerate keys).
myBlocks : [BlockedUser!]!
People I have blocked.
| Argument | Type | Default | |
q | String | — | |
limit | Int | — | |
cursor | String | — | |
myConnectionRequests : [ConnectionRequest!]!
Connection requests awaiting MY response (incoming) or awaiting theirs (outgoing).
| Argument | Type | Default | |
direction | String | — | |
myConnections : ConnectionPage!
My accepted connections. q searches name/handle; sort = name|recent.
| Argument | Type | Default | |
q | String | — | |
sort | String | — | |
limit | Int | — | |
cursor | String | — | |
myFavorites : [Favorite!]!
The signed-in user's FAVOURITED (starred) entities, optionally filtered to one type. Excludes subscribe-only follows — see EntityEngagement.subscribed. UNBOUNDED by default (to an internal scan cap) because the star marks on entity pages need the whole set to know what to mark; use myFavoritesPage for the paged, searchable management view. types/search behave exactly as on myFavoritesPage.
| Argument | Type | Default | |
entityType | String | — | |
types | [String!] | — | |
search | String | — | |
limit | Int | — | |
offset | Int | — | |
myFavoritesPage : FavoritePage!
M16/E04 — ONE PAGE of the signed-in user's starred entities, newest first, each with its resolved label + internal URL. Default page size 25. search matches the RESOLVED label (and the raw id) and types filters by entity type — both SERVER-side, so they cover the whole list rather than only the loaded page. total is the count matching the current filter, so a load-more can be honest about what is left. Empty, never an error, when signed out.
| Argument | Type | Default | |
types | [String!] | — | |
search | String | — | |
limit | Int | — | |
offset | Int | — | |
myMatches : [PersonMatch!]!
E16 (M23) — members/candidates whose positions best align with the signed-in user's declared positions, ranked by agreement. Requires auth + at least 2 declared positions (else empty).
| Argument | Type | Default | |
limit | Int | — | |
myNotificationPrefs : NotificationPrefs
M15 delivery — the signed-in user's notification channel/frequency preferences + email-digest state. Requires auth; returns sensible defaults when the user has no saved row yet.
myNotifications : [Notification!]!
M15 — the signed-in user's notifications, newest first. unreadOnly filters to unread. Requires auth.
| Argument | Type | Default | |
limit | Int | — | |
unreadOnly | Boolean | — | |
myPosts : [UserPost!]!
M17 — the signed-in user's own posts, newest first (their wall as they authored it).
| Argument | Type | Default | |
limit | Int | — | |
myPrivacy : PrivacySettings!
M16/E04 — my privacy settings plus the self-describing facet catalog (like feedCatalog).
myPushDevices : [PushDevice!]!
The signed-in user's registered push devices.
myStances : [MyStance!]!
E16 (M23) — the signed-in user's own declared issue positions (for compare-to-me + matching). Requires auth; empty when none declared.
mySubscribers : SubscriberPage!
People who follow me.
| Argument | Type | Default | |
q | String | — | |
sort | String | — | |
limit | Int | — | |
cursor | String | — | |
myUploads : [PostMedia!]!
M17/E03 — the signed-in user's uploads across all their posts, newest first. Filter by kind (image|video|audio|document) and search filenames + captions. Backs a personal media library.
| Argument | Type | Default | |
kind | String | — | |
search | String | — | |
limit | Int | — | |
offset | Int | — | |
myUpvotes : [Upvote!]!
The site entities the signed-in user has upvoted, across ALL entity types, newest first. Distinct from favorites and from forum votes. Empty when signed out. Unbounded by default; myUpvotesPage is the paged, searchable view.
| Argument | Type | Default | |
types | [String!] | — | |
search | String | — | |
limit | Int | — | |
offset | Int | — | |
myUpvotesPage : UpvotePage!
M16/E04 — ONE PAGE of the signed-in user's upvotes, same contract as myFavoritesPage (default page size 25, server-side search over the resolved label, per-type counts of the whole list).
| Argument | Type | Default | |
types | [String!] | — | |
search | String | — | |
limit | Int | — | |
offset | Int | — | |
myVirtualVote : MyVirtualVote
VIRTUAL VOTING (E19/M08) - the signed-in reader's own straw-poll answer in one contest, or null when they have not answered. Returns null rather than erroring when signed out, so a client can ask unconditionally.
| Argument | Type | Default | |
contestId | ID! | — | |
pushConfig : PushConfig!
M15 — whether web push is configured on this server, plus the VAPID public key a browser needs to subscribe. Public: the key is public by design.
reminderPrefs : ReminderPrefs
M15 — the signed-in user's reminder schedule for a target type (default: election). Generic over targetType so the same UI serves any future dated thing.
| Argument | Type | Default | |
targetType | String | — | |
uploadLimits : UploadLimits!
M16 — the server-enforced upload limits, so the composer can validate before uploading rather than after.
userFollowsPage : FavoritePage!
M16/E04 — ONE PAGE of a member's favorites (kind: favorites) or subscriptions (kind: subscribed) for their public profile. Same contract as myFavoritesPage (search, types filter, per-type counts, load-more). Gated by the owner's privacy facet for that list and by blocks — an unviewable list is an empty page.
| Argument | Type | Default | |
handle | String! | — | |
kind | String! | — | |
types | [String!] | — | |
search | String | — | |
limit | Int | — | |
offset | Int | — | |
usernameAvailable : Boolean!
True if the username is unused OR already owned by the caller; false if taken by another user or malformed (M16/E04).
| Argument | Type | Default | |
username | String! | — | |
userProfile : PublicUserProfile
A world-readable user profile (M16/E04). handle = username (case-insensitive) OR userId. Null if none.
| Argument | Type | Default | |
handle | String! | — | |
userProfileDetails : ProfileDetails
M16/E04 — the facet-gated extras for /user/:handle. Every field respects the OWNER's privacy settings and the VIEWER's clearance; null/empty when not visible. Safe for anonymous callers (they get the public tier).
| Argument | Type | Default | |
handle | String! | — | |
userProfileList : [ProfileListItem!]!
M16/E04 — one profile tab's rows (posts|actions|favorites|subscribed|connections). Empty unless that facet is visible to the viewer.
| Argument | Type | Default | |
handle | String! | — | |
tab | String! | — | |
limit | Int | — | |
Mutations 84
Mutations need a signed-in session or an authorised Application.
API keys are read-only, and the public api.civicgate.org endpoint
rejects mutations outright.
addIssueEvent : IssueReport!
Record a status change or official action on a report. Append-only.
| Argument | Type | Default | |
issueId | ID! | — | |
kind | String | — | |
status | String | — | |
note | String | — | |
sourceUrl | String | — | |
approvePetition : Petition!
E02.7 — admin approves a proposed/draft petition → published; emails the proposer (with an edit diff).
| Argument | Type | Default | |
id | ID! | — | |
askAssistant : AssistantAnswer!
M10 — grounded AI civic assistant. Answers a question ONLY from CivicGate's own data + /learn explainers, citing each fact as a [title](url) link; never fabricates. Anon-allowed, rate-limited by IP (signed-in users get a higher cap). No AI session attached → available:false with a graceful note. history is the prior turns (client-held) for follow-ups.
| Argument | Type | Default | |
question | String! | — | |
history | [AssistantTurnInput!] | — | |
attachIssueThread : IssueReport
Link a forum discussion to an issue after the forum created it.
| Argument | Type | Default | |
issueId | ID! | — | |
threadId | String! | — | |
backfill : BackfillJobRef!
Admin: enqueue a backfill job (runs async on the worker) and return its id. Gated to the trusted proxy.
| Argument | Type | Default | |
input | BackfillInput! | — | |
blockUser : ConnectionState!
Block a member: hides both of you from each other and severs follows + connections.
| Argument | Type | Default | |
userId | ID! | — | |
note | String | — | |
cancelBackfill : Boolean!
Admin: cancel a queued/running backfill job. Gated to the trusted proxy.
| Argument | Type | Default | |
id | ID! | — | |
castVirtualVote : VirtualVoteResult!
VIRTUAL VOTING (E19/M08) - cast or change your non-binding straw-poll answer in one contest.
One answer per person per CONTEST, not per election: a ballot holds many races, so answering
again REPLACES your previous choice in that race and never adds a second. Refused once the
election date has passed, and refused when the candidate is not standing in that contest.
Requires a real session.
| Argument | Type | Default | |
contestId | ID! | — | |
candidateId | ID! | — | |
clearVirtualVote : VirtualVoteResult!
VIRTUAL VOTING (E19/M08) - withdraw your straw-poll answer in one contest. A no-op when you had not answered. Refused after the election, when the count is final. Returns the fresh count.
| Argument | Type | Default | |
contestId | ID! | — | |
closePetition : Petition!
E02.7 — close a petition to new signatures (admin-only).
| Argument | Type | Default | |
id | ID! | — | |
createApiKey : CreateApiKeyResult!
M16 — mint an API key for widgets / the SDK. The full secret is returned ONCE in the result and never again. Requires a real session.
| Argument | Type | Default | |
name | String! | — | |
origins | [String!] | — | |
createPetition : Petition!
E02.7 — create a petition (admin-only; MVP is admin-seeded). Starts in 'draft'.
| Argument | Type | Default | |
input | PetitionInput! | — | |
createPost : UserPost!
M17/E03 — post to your own wall. Emits a feed event on subject_type='user' with your user id, so everyone subscribed to you sees it. kind: post | status | content | profile_update. Requires a real session (not an API key).
| Argument | Type | Default | |
input | PostInput! | — | |
deleteApiKey : Boolean!
M16 — permanently delete a key you created by mistake.
| Argument | Type | Default | |
id | ID! | — | |
M07/M13 — remove one attachment from the bucket, the CDN edge and the database. The edge purge matters: an R2 delete alone leaves the file publicly served for hours.
| Argument | Type | Default | |
mediaId | ID! | — | |
deleteIssueReport : IssueDeleteResult!
Delete a report AND its discussion. The thread is removed first: the issue holds the only pointer to it, so deleting the issue first would orphan the thread in the forum's separate database.
| Argument | Type | Default | |
issueId | ID! | — | |
deletePersonFact : Boolean!
Admin (M01/M11 wiki-edit): delete ONE person background fact by id (e.g. correcting a wrong Wikipedia-derived fact). Gated to admin.
| Argument | Type | Default | |
id | ID! | — | |
deletePetition : Boolean!
E02.7 — admin hard-deletes a petition (signatures cascade).
| Argument | Type | Default | |
id | ID! | — | |
deletePost : Boolean!
M17 — delete one of your own posts. Soft-deletes the post and removes its feed event.
| Argument | Type | Default | |
id | ID! | — | |
deletePostMedia : Boolean!
M17/E03 — remove an attachment from the post AND from object storage.
| Argument | Type | Default | |
mediaId | ID! | — | |
deletePushSubscription : PushUnsubscribeResult!
Remove one device (by endpoint) or every device (endpoint omitted). Removing the last one turns the master switch off.
| Argument | Type | Default | |
endpoint | String | — | |
deleteStance : Boolean!
Admin (M23): delete a stated stance by id. Gated to admin.
| Argument | Type | Default | |
id | ID! | — | |
denyPetition : Petition!
E02.7 — admin denies a proposed petition → denied (reason required); emails the proposer.
| Argument | Type | Default | |
id | ID! | — | |
reason | String! | — | |
fetchBill : FetchBillResult!
Admin: fetch + store a single bill by id (powers the bill stub page). Gated to the trusted proxy.
| Argument | Type | Default | |
id | ID! | — | |
finalizeIssueUpload : UploadResult!
M07/M13 — confirm one upload arrived. The server HEADs the object and DELETES it if it exceeds the size cap, because a presigned PUT cannot bind a content-length. An attachment is not real until this returns ok.
| Argument | Type | Default | |
mediaId | ID! | — | |
finalizeUpload : UploadResult!
M17/E03 — confirm an upload landed. HEADs the object and enforces the size cap for real (a presigned PUT cannot bind a size); an oversize object is deleted and the item marked failed.
| Argument | Type | Default | |
mediaId | ID! | — | |
grantCivicRole : CivicRole!
Grant a scoped civic role (a verified local official, editor or moderator) at a place level. Admin only.
| Argument | Type | Default | |
userId | String! | — | |
role | String! | — | |
level | String! | — | |
state | String | — | |
countyFips | String | — | |
placeGeoid | String | — | |
districtKind | String | — | |
district | String | — | |
zip | String | — | |
regionLabel | String | — | |
expiresAt | String | — | |
note | String | — | |
markAllNotificationsRead : Boolean!
M15 — mark all of the signed-in user's notifications read. Requires auth.
markNotificationRead : Boolean!
M15 — mark one notification read. Requires auth (own notifications only).
| Argument | Type | Default | |
id | ID! | — | |
E08 — admin: hide/show a community-shared template (status = published | hidden). Gated to admin.
| Argument | Type | Default | |
id | ID! | — | |
status | String! | — | |
openIssueDiscussion : IssueDiscussionResult!
Open (or find) the forum discussion for a report and link it. Idempotent: the issue id IS the entity id, so a retry links the existing thread rather than creating a second.
| Argument | Type | Default | |
issueId | ID! | — | |
categoryId | String | — | |
proposePetition : Petition!
E02.7 — any signed-in user proposes a petition for admin review. Starts in 'proposed'.
| Argument | Type | Default | |
input | PetitionInput! | — | |
publishPetition : Petition!
E02.7 — publish a draft petition so it's public + signable (admin-only).
| Argument | Type | Default | |
id | ID! | — | |
reactToAction : ActionSentiment!
Presidents: the signed-in user reacts to a presidential action (reaction = support | oppose | none to clear). Community sentiment, attributed to users. Requires auth.
| Argument | Type | Default | |
actionId | ID! | — | |
reaction | String! | — | |
refetchBillDetail : RefetchBillDetailResult!
Public: re-fetch a bill's sponsors/cosponsors/committees/actions/related + status (the bill page 'Update bill data' button). Default is a cheap actions-only refresh (basics don't change); full:true re-pulls everything. Token-efficient: skips work when upstream is unchanged.
| Argument | Type | Default | |
id | ID! | — | |
full | Boolean | — | |
refreshBills : RefreshBillsResult!
Public: pull recently-updated bills from Congress.gov (the /bills 'Check for new bill updates' button). Not admin-gated (transparency), but cooldown-throttled so it can't hammer Congress.gov.
refreshBillText : RefreshBillTextResult!
Admin: re-attempt full text + committees + issue tags for a bill already in CivicGate (the 'Check for full text' button). Gated to the trusted proxy.
| Argument | Type | Default | |
id | ID! | — | |
refreshCandidateFinance : RefreshFinanceResult!
Public: pull the latest FEC campaign-finance totals for a candidate (the 'Update finance' button). Not admin-gated (transparency), but throttled per-candidate.
| Argument | Type | Default | |
id | ID! | — | |
refreshStateBillText : RefreshBillTextResult!
M03 state tier — the state-bill page "Check for full text" button. Fetches + extracts the bill text from its OpenStates version documents on demand (admin-gated, mirrors refreshBillText).
| Argument | Type | Default | |
id | ID! | — | |
removeConnection : ConnectionState!
Remove an accepted connection (does not block, does not unsubscribe).
| Argument | Type | Default | |
userId | ID! | — | |
removeSubscriber : Boolean!
Remove a follower without blocking them.
| Argument | Type | Default | |
userId | ID! | — | |
reopenPetition : Petition!
E02.7 — re-open a closed petition back to Current/published (admin-only).
| Argument | Type | Default | |
id | ID! | — | |
replyToPost : UserPost!
M17/E03 — reply to a post. A reply IS a post with a parent, so it supports media, likes and subscriptions identically. mediaId makes it a comment on that attachment of the post; replies to such a comment inherit it. hasMedia allows an empty body when attachments follow. Requires being able to see the post.
| Argument | Type | Default | |
postId | ID! | — | |
body | String! | — | |
mediaId | ID | — | |
hasMedia | Boolean | — | |
reportIssue : IssueReport!
Report an issue. Anonymous is allowed and is a first-class case, not a degraded one.
| Argument | Type | Default | |
title | String! | — | |
body | String | — | |
level | String! | — | |
state | String | — | |
countyFips | String | — | |
placeGeoid | String | — | |
districtKind | String | — | |
district | String | — | |
zip | String | — | |
regionLabel | String | — | |
source | String | — | |
requestConnection : ConnectionState!
Ask to connect. Symmetric and consented: nothing is shared until they accept.
| Argument | Type | Default | |
userId | ID! | — | |
message | String | — | |
requestIssueUploads : [IssueUploadGrant!]!
M07/M13 — reserve attachment slots on a report and get a presigned PUT per file. Validates count, type and declared size BEFORE any row is written. Upload the bytes directly to the returned URL, then call finalizeIssueUpload for each. An authored report accepts attachments only from its author; an ANONYMOUS report accepts them only inside the window reported by issueUploadLimits.
| Argument | Type | Default | |
issueId | ID! | — | |
files | [IssueUploadFileInput!]! | — | |
requestPostUploads : [UploadGrant!]!
M17/E03 — reserve slots for attachments on YOUR post and get a presigned PUT per file. Validates count, type and declared size BEFORE any row is written. Upload the bytes directly to the returned URL, then call finalizeUpload for each.
| Argument | Type | Default | |
postId | ID! | — | |
files | [UploadFileInput!]! | — | |
respondToConnection : ConnectionState!
Accept or decline an incoming request. Accepting subscribes both ways by default.
| Argument | Type | Default | |
userId | ID! | — | |
accept | Boolean! | — | |
alsoFollow | Boolean | true | |
revokeApiKey : Boolean!
M16 — revoke a key (soft: the row stays auditable, the key stops authenticating).
| Argument | Type | Default | |
id | ID! | — | |
revokeCivicRole : Boolean!
Revoke a civic role by its id. Admin only. Returns false when the role was already absent.
| Argument | Type | Default | |
id | ID! | — | |
runJob : JobActionResult!
Admin: start a scheduled job's service now. Gated to the trusted proxy / admin role.
| Argument | Type | Default | |
key | String! | — | |
savePushSubscription : PushDevice!
Store (or refresh) one browser's push subscription. Also turns the master push switch on — the user has just completed a permission prompt, which is a stronger statement of intent than a checkbox.
| Argument | Type | Default | |
input | PushSubscriptionInput! | — | |
E11 → E02 — send or hand off a message to an elected official. State legislators with an email on file are SENT via CivicGate on the signed-in user's behalf (reply-to the user), returning status 'sent'; members of Congress have no public email, so the result is a compose-assist 'handoff' the client delivers. Real sends require sign-in. Optionally logs to the user's activity.
| Argument | Type | Default | |
input | ContactSendInput! | — | |
sendPetition : PetitionSendResult!
E02.8 — send the petition's aggregated message to its target official (admin-only). State legislators get a real send with the signature block appended; Congress → a handoff.
| Argument | Type | Default | |
id | ID! | — | |
setAppConfig : AppConfigEntry!
Admin: set one generic app-config key (JSON value). Allowlisted namespaces (state_bills.*, people.*, funding.*). Backs the admin Config tab; the ingest scheduler reads it live.
| Argument | Type | Default | |
key | String! | — | |
value | JSON! | — | |
setBillUpvote : BillUpvoteResult!
Upvote (upvoted:true) or remove an upvote (false) on a bill. Signed-in users only. Returns the fresh count + viewer state.
| Argument | Type | Default | |
billId | ID! | — | |
upvoted | Boolean! | — | |
setJobEnabled : JobActionResult!
ADMIN — pause (enabled:false) or resume (true) a job. Pausing records the state in job_controls AND stops the running unit + its timer: a paused job then refuses to run even when started by hand or via systemd-run, which stopping the timer alone does not prevent. Resuming re-enables the timer; every job is idempotent or cursor-driven, so it continues where it left off. Requires admin.
| Argument | Type | Default | |
key | String! | — | |
enabled | Boolean! | — | |
note | String | — | |
setJobPriority : JobActionResult!
M16 — set a job's scheduling priority (low | medium | high). Takes effect on its next run; no unit file or redeploy needed.
| Argument | Type | Default | |
key | String! | — | |
priority | String! | — | |
setJobSchedule : JobActionResult!
Admin: rewrite a timer's schedule (validated + applied via daemon-reload). Gated to the trusted proxy / admin role.
| Argument | Type | Default | |
key | String! | — | |
schedule | String! | — | |
setLike : LikeResult!
Like/upvote (liked:true) or un-like (false) ANY entity — people of every type, federal + state bills, etc. Supersedes the bill-only setBillUpvote (which still works and writes the same store).
| Argument | Type | Default | |
entityType | String! | — | |
entityId | ID! | — | |
liked | Boolean! | — | |
M17/E03 — set the caption on one of your attachments (max 500 chars).
| Argument | Type | Default | |
mediaId | ID! | — | |
note | String | — | |
setMyStance : Boolean!
E16 (M23): set or clear the signed-in user's OWN stance on an issue (stance="unknown" clears it). Requires auth. Self-declared — no source required.
| Argument | Type | Default | |
issueSlug | String! | — | |
stance | String! | — | |
setNotificationPrefs : NotificationPrefs!
M15 delivery — upsert the signed-in user's notification preferences (channels, per-category frequency, email-digest cadence). Requires auth. Returns the saved prefs.
| Argument | Type | Default | |
input | NotificationPrefsInput! | — | |
setNotificationTypeEnabled : Boolean!
Mute (enabled:false) or unmute a SINGLE notification type for the signed-in user. Finer-grained than the per-category prefs: muted types are suppressed at generation time, so you stop receiving them everywhere (in-app, instant email, digest).
| Argument | Type | Default | |
type | String! | — | |
enabled | Boolean! | — | |
setPostPreview : Boolean!
M17/E03 — set (or clear) the preview card on YOUR post. Pass preview:null, or kind:null, to remove it. Used after upload grants exist, when the chosen preview is one of the post's own attachments.
| Argument | Type | Default | |
postId | ID! | — | |
preview | PostPreviewInput | — | |
setPostVisibility : Boolean!
Set ONE post's audience, overriding the member's default for that post only.
| Argument | Type | Default | |
postId | ID! | — | |
tier | String! | — | |
setPrivacyFacet : PrivacySettings!
M16/E04 — set one facet's visibility tier (everyone|subscribers|connections|none).
| Argument | Type | Default | |
facet | String! | — | |
tier | String! | — | |
setReminderPrefs : ReminderPrefs!
Save the signed-in user's reminder schedule and REBUILD their materialised queue immediately — the queue holds absolute firing instants, so a changed offset or time makes every pending row wrong.
| Argument | Type | Default | |
input | ReminderPrefsInput! | — | |
setSubscribed : Boolean!
Subscribe (on:true) / unsubscribe (on:false) to an entity's updates WITHOUT starring it. The follow that drives notifications. Works for any entity type.
| Argument | Type | Default | |
entityType | String! | — | |
entityId | ID! | — | |
on | Boolean! | — | |
E08 — share a user-authored contact template with the community. Requires sign-in. Returns the shared template.
| Argument | Type | Default | |
input | ShareTemplateInput! | — | |
signPetition : Petition!
E02.8 — sign a published petition (requires sign-in). Idempotent per user. displayName/comment are optional and public.
| Argument | Type | Default | |
petitionId | ID! | — | |
displayName | String | — | |
comment | String | — | |
stopJob : JobActionResult!
Admin: stop a running job's service. Gated to the trusted proxy / admin role.
| Argument | Type | Default | |
key | String! | — | |
submitFeedback : Boolean!
Submit user feedback/suggestion — emails the CivicGate admin via the themed email system. type = feedback | bug | data | feature. email is an optional reply-to for signed-out users.
| Argument | Type | Default | |
type | String! | — | |
message | String! | — | |
email | String | — | |
pageUrl | String | — | |
subscribeElectionAlerts : ElectionAlertStatus!
Register the signed-in user for election reminders for a place. ALWAYS includes federal alongside the state — federal elections are the ones almost everyone votes in. Idempotent.
| Argument | Type | Default | |
state | String | — | |
subscribeToUser : String
M17 — subscribe to a USER by handle (username) or user id. Users are a first-class feed subject: their posts and profile updates flow to their subscribers exactly like a bill's actions do. Returns the resolved subject id.
| Argument | Type | Default | |
handle | String! | — | |
on | Boolean! | — | |
toggleFavorite : Boolean!
Add (on:true) or remove (on:false) a FAVORITE (star) on any entity type. Favoriting also SUBSCRIBES you to updates; un-favoriting leaves an existing subscription intact.
| Argument | Type | Default | |
entityType | String! | — | |
entityId | ID! | — | |
on | Boolean! | — | |
unblockUser : ConnectionState!
Lift a block. Does NOT restore the connection or the follows the block severed — those must be re-established deliberately.
| Argument | Type | Default | |
userId | ID! | — | |
unsignPetition : Petition!
E02.8 — remove the signed-in user's signature from a petition.
| Argument | Type | Default | |
petitionId | ID! | — | |
unsubscribeElectionAlerts : ElectionAlertStatus!
Stop election reminders for a place (and federal). Keeps the follow row; clears only the delivery flag.
| Argument | Type | Default | |
state | String | — | |
updateMyProfile : MeProfile!
Create/update the signed-in user's profile (M16/E04).
| Argument | Type | Default | |
input | ProfileInput! | — | |
updatePetition : Petition!
E02.7 — admin edits a petition's content (CRUD on Current + edit-before-approve on Proposed).
| Argument | Type | Default | |
id | ID! | — | |
input | PetitionInput! | — | |
updatePost : UserPost!
M17/E03 — edit YOUR own post's text. Attachments are changed with requestPostUploads / deletePostMedia and the card with setPostPreview, so this only carries the words.
| Argument | Type | Default | |
id | ID! | — | |
body | String! | — | |
title | String | — | |
upsertPersonFact : AdminPersonFact!
Admin (M01/M11 wiki-edit): create or update ONE curated background fact for a person (in-place, wiki-style). Stamped with editor provenance + source_label "CivicGate editor", and protected from the Wikipedia ingest. Gated to admin.
| Argument | Type | Default | |
input | PersonFactInput! | — | |
upsertStance : AdminStance!
Admin (M23): create or update a STATED issue stance for a person (the human-curated, sourced positions layer). Gated to admin.
| Argument | Type | Default | |
input | StanceInput! | — | |