Skip to main content
CivicGate

← API

API reference

246 queries · 84 mutations · generated from the live schema

POST https://api.civicgate.org/graphql · read-only, no key required for public data. Credentials, rate limits and error handling: API guide. Hover any type to see its fields, or browse the full type catalog.

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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
id ID! —

relatedBills : [SimilarBill!]!

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).

ArgumentTypeDefault
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.

ArgumentTypeDefault
committeeCode ID! —

stateBill : StateBill

A single state bill (M03) with its sponsors + action timeline, by OpenStates ocd-bill id.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
id ID! —

candidateCount : Int!

Count of candidates matching the filters (pairs with candidates for pagination).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
id ID! —

governorCount : Int!

Count of governors matching the filters (pairs with governors for pagination).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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).

ArgumentTypeDefault
level String —

judgeCount : Int!

M20 — total judges matching the same filters (for /judges pagination).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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).

ArgumentTypeDefault
level String —

official : OfficialProfile

One federal official profile (M02) — person + every term of that office + background facts. Accepts id or slug.

ArgumentTypeDefault
id ID! —

officialCount : Int!

Count of federal officials matching the filters (pairs with officials for pagination).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
id ID! —

personHearings : PersonHearings!

A person's committee activity and congressional testimony (M26), for /people/:id. Membership and testimony are deliberately separate relationships.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
id ID! —

politician : Politician

A member of Congress with votes, money, and an E18 comparison vector. Requires auth. Accepts bioguide id OR slug.

ArgumentTypeDefault
bioguideId ID! —

president : PresidentProfile

One president by slug/id — profile + terms + background facts + stats + recent actions.

ArgumentTypeDefault
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.

ArgumentTypeDefault
presidentId ID! —
type String —
search String —
overridden Boolean —
limit Int —
offset Int —

presidentActionsCount : Int!

Total actions for a president matching the filters (for pagination).

ArgumentTypeDefault
presidentId ID! —
type String —
search String —
overridden Boolean —

presidentActionTypes : [String!]!

Distinct action types present for a president (for the action-type filter chips).

ArgumentTypeDefault
presidentId ID! —

presidents : [President!]!

Presidents directory — all US presidents, optional name search + current-only. Ordered by presidency number (newest first).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
id ID! —

committeeFinanceSignals : [FinanceSignal!]!

Finance signals for one committee (M05) — for the /pac/:id page.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
signalType String —
entityType String —
sort String —
limit Int —
offset Int —

financeSignalsCount : Int!

Count of finance signals matching the filters (M05).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
state String! —
fiscalYear Int —

fundingByState : [StateFundingPoint!]!

Federal funding per state for a fiscal year (M06 map) — total outlays landing in each state.

ArgumentTypeDefault
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).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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).

ArgumentTypeDefault
code ID! —
fiscalYear Int —

fundingSummary : FundingSummary!

Government funding (M04 CivicLedger) — topline summary for a fiscal year (+ the years we have).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
cycle Int —

lobbying : Lobbying

Federal lobbying (M04 F04.3 / M05 F05.5) — reported spend by firm/client/issue/target for a year, from LDA.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

Accountability & conflicts 10

accountability : [AccountabilityRow!]!

Member vote-participation index (M09 F09.1/F09.2) — coverage-honest roll-call participation per current member. Neutral framing (participation, not ranking). chamber = house|senate (both when omitted); congress defaults to the latest computed; sort = participation|missed|recorded|name; limit caps the list. Public.

ArgumentTypeDefault
chamber String —
congress Int —
sort String —
limit Int —

accountabilityRecord : AccountabilityRecord

Track record (M09) — a coverage-honest ASSEMBLY of ONE member's verifiable, sourced accountability facts (roll-call participation, bills sponsored vs. enacted, party-unity / cross-party voting, documented issue positions, committee assignments, disclosed stock trades, documented relationships). NUMBERS + SOURCES ONLY — never a computed score, grade, or ranking-by-virtue; it gathers already-scattered public-record facts into one honest panel. personId = any of the member's slugs / bioguide. Non-members (or members with no record yet) resolve to isMember:false + an honest note, never a fabricated metric. Each fact is independently coverage-honest (available:false → the fact renders as "—", not a guessed number). Public.

ArgumentTypeDefault
personId ID! —

conflictSectors : [String!]!

Distinct sectors present among conflict signals (M05) — powers the /conflicts sector facet.

conflictSignals : [ConflictSignal!]!

Documented-relationships registry (M05 → M09) — the /conflicts directory. Every materialized conflict signal, each with the member it concerns. Filter by signalType/sector/state; sort = amount (default) | trades | recent | name. Neutral registry, NOT a leaderboard: a documented relationship is not evidence of wrongdoing, and data-blocked signal types are simply absent (not hidden failures). Public.

ArgumentTypeDefault
signalType String —
sector String —
state String —
sort String —
limit Int —
offset Int —

conflictSignalsCount : Int!

Count of conflict signals matching the filters (M05) — pairs with conflictSignals for server-side pagination.

ArgumentTypeDefault
signalType String —
sector String —
state String —

participationCongresses : [Int!]!

Distinct Congress numbers with a cached participation rate (S4/M09) — the /participation congress facet, newest first. Empty until the accountability ingest has run.

participationLeaderboard : [ParticipationRow!]!

Roll-call participation LEADERBOARD (S4, M09 Attendance Tracker) — current members ranked by the share of roll calls they cast a vote on, computed from CivicGate's own ingested votes (the SAME cached participationPct shown in the /people tables). chamber = house|senate (both when omitted); congress defaults to the latest computed; party = D|R restricts to one party; order = participation_desc (voted most, default) | participation_asc (voted fewest first); limit caps the list. Only members with a meaningful denominator (recorded roll calls) and adequate chamber coverage appear (coverage-honest). Neutral-administrator posture: descriptive rates ("voted in 96% of roll calls"), never "absentee"/"slacker". Every row carries its Congress.gov source Ref. Public.

ArgumentTypeDefault
chamber String —
congress Int —
party String —
order String —
limit Int —

revolvingDoor : [RevolvingDoorEntry!]!

Revolving-door registry (M05) — former U.S. government officials now registered as federal lobbyists, per the Lobbying Disclosure Act. A lobbyist appears when their LDA filings disclose a prior covered government position. sort = filings (default, most active first) | name (A–Z) | recent (latest filing year first). search filters by lobbyist name or covered position; year restricts to officials with a filing that year; limit/offset paginate. Neutral factual registry, not an accusation. Public.

ArgumentTypeDefault
limit Int —
offset Int —
search String —
year Int —
sort String —

revolvingDoorCount : Int!

Count of distinct former officials matching the revolving-door filters (M05) — pairs with revolvingDoor for server-side pagination.

ArgumentTypeDefault
search String —
year Int —

revolvingDoorYears : [Int!]!

Distinct filing years present among revolving-door (covered-position) filings (M05) — powers the year facet.

Courts & opinions 1
A judge's recent opinions
{ judges(limit: 3, sort: "opinions") { name court opinionCount } }

opinion : OpinionPage

A single court-opinion case page by CourtListener opinion id (M20) — full text, AI summary, cited authorities, and the authoring judge. Null if unknown.

ArgumentTypeDefault
id ID! —
Elections 13
Upcoming elections
{ elections(upcoming: true, limit: 5) { name date jurisdiction } }

ballot : Ballot!

The ballot for a place (M08/E19). Give either place (a place key like us-pa-d03) or the resolved pieces (state / countyFips / district). Returns elections, their contests and the candidates on them, PLUS a coverage block stating what is and is not included — CivicGate holds federal races only today, so a rendered ballot without that block would be a confident wrong answer. includePast: true returns the history view (past elections, newest first).

ArgumentTypeDefault
place String —
state String —
countyFips String —
district String —
level String —
includePast Boolean —
withinDays Int —
limit Int —

districtByZip : ZipDistrict

Resolve a 5-digit US ZIP to its state + U.S. House district (M02/M06) — for the /reps zip lookup. Uses the ZIP centroid, so a ZIP that spans multiple districts resolves to the one containing its centroid. Null if the ZIP is unknown or has no district.

ArgumentTypeDefault
zip String! —

election : ElectionPage

A single election with its contests + candidates. Accepts id or slug.

ArgumentTypeDefault
id ID! —

electionAlertStatus : ElectionAlertStatus!

M08/M15 — is the signed-in user registered for election reminders for this place, and what would they receive? Answers for signed-out visitors too (registered:false) so the offer can be concrete.

ArgumentTypeDefault
state String —

electionExplorer : ElectionExplorer!

State + district election explorer (M08). year defaults to the latest we hold; state optional (null → just years + the states with races that year). Returns the states/districts available for the dropdowns + map.

ArgumentTypeDefault
year Int —
state String —

electionIcs : ElectionIcs

An iCalendar file for one election, including an alarm per configured reminder offset. Public — an election date is a public fact and the file contains nothing about the user.

ArgumentTypeDefault
id ID! —

electionOfficial : ElectionOfficial

One election official by id (underscore slug, M08/E19). Null if unknown.

ArgumentTypeDefault
id String! —

electionOfficials : [ElectionOfficial!]!

Election officials (M08/E19) — WHO runs elections. scope = state (chief election official + state election director, built fully) | county | municipal (local scaffolding; no rows until licensed local data lands). state = 2-letter code; role = chief_election_official|state_election_director|local_election_official; search matches name/office/jurisdiction. Coverage-honest: a sourced office with an unknown current holder still returns (name null). Public.

ArgumentTypeDefault
scope String —
state String —
role String —
search String —
limit Int —
offset Int —

electionOfficialStates : [String!]!

Distinct 2-letter states present in election_officials (M08/E19) — the /elections/officials state facet. Name-sorted. Empty until ingested.

elections : [Election!]!

Upcoming elections (M08), each with its jurisdiction — grouped by level in the UI.

electionWatch : ElectionWatch!

Election Watch (E19) — a neutral cycle-at-a-glance summary: factual counts of what is on the ballot plus notable races surfaced ONLY by neutral factual signals (open seat, contested primary, money raised). No ratings or predictions. cycle defaults to the latest even year with data. Coverage-honest: empty summary when no candidate data is ingested.

ArgumentTypeDefault
cycle Int —

electionYears : [Int!]!

Distinct election years we hold data for (newest first) — powers the /elections year dropdown (M08).

senateRace : [Contest!]!

Statewide U.S. Senate race(s) for a state + year (M08), if any (general + primary contests).

ArgumentTypeDefault
year Int! —
state String! —
Hearings & committees 12

committeeDisbursements : [Disbursement!]!

Top disclosed disbursements (FEC Schedule B) for a committee (M04) — who it PAID, largest first. For /pac/:id vendor transparency.

ArgumentTypeDefault
committeeId ID! —
limit Int —

committeeHearings : CommitteeHearings!

A committee's proceedings (M26) for /committees/:id — upcoming, recent, and an HONEST statement of what that chamber publishes about committee votes.

ArgumentTypeDefault
systemCode ID! —
limit Int —

committees : [CommitteeListItem!]!

All congressional committees (M03) for the /committees index — grouped by chamber in the UI.

congressToday : CongressToday!

M26 homepage widget — today, upcoming and recent committee meetings across both chambers. Returns a note rather than an empty box on a quiet day.

ArgumentTypeDefault
days Int —
limit Int —

hearing : HearingPage

One proceeding (M26): participants, witnesses, motions with per-member votes, extracted topics, documents and video. Coverage-honest — see coverageNote.

ArgumentTypeDefault
id ID! —

hearingFacets : HearingFacets!

Facet lists for the /hearings toolbar — bounded to what is actually ingested, never a fabricated option.

hearingParseQueue : [HearingParseIssue!]!

Admin queue (M26 §5.2): committee vote descriptions no parser strategy claimed, plus motions whose vote PDF could not be read. Admin-only.

ArgumentTypeDefault
limit Int —

hearings : HearingsPage!

M26 Congressional Proceedings — a filtered page of committee hearings, markups and business meetings. Filters: chamber, committee (matches subcommittees too), type (hearing|markup|business_meeting), status (scheduled|held), congress, date range, hasVotes/hasVideo/hasTranscript, issue, policyArea. Search matches the title AND extracted topic labels. sort = recent (default) | oldest | votes.

ArgumentTypeDefault
chamber String —
committee String —
type String —
status String —
search String —
congress Int —
from String —
to String —
hasVotes Boolean —
hasVideo Boolean —
hasTranscript Boolean —
issue String —
policyArea String —
sort String —
limit Int —
offset Int —

hearingsStatus : JSON!

M26 ingestion + AI-enrichment state, for /admin. Answers what is waiting on the broker, in one row.

hearingTranscript : HearingTranscript

A proceeding's transcript text, fetched separately because it can run to hundreds of thousands of characters. source selects between the preliminary, official and auto-transcribed readings.

ArgumentTypeDefault
id ID! —
source String —

orgTestimony : [OrgTestimony!]!

Appearances before Congress by people representing an organisation (M26), for /org/:id.

ArgumentTypeDefault
organizationId ID! —
limit Int —

publicCommittee : CommitteePage

A committee page (public) — details + recent bills referred to it. Accepts systemCode or slug.

ArgumentTypeDefault
id ID! —
Issues & citizen reports 11

issue : Issue

M23 — one issue + its documented stances. Accepts id or slug.

ArgumentTypeDefault
slug ID! —

issueHearings : [HearingListItem!]!

Proceedings tagged to an issue (M23/M26), for /issue/:slug.

ArgumentTypeDefault
slug ID! —
limit Int —

issueMedia : [IssueMediaItem!]!

An issue's attachments, oldest first. Public. Includes pending uploads so a reader sees files that are still arriving rather than a silently short list.

ArgumentTypeDefault
issueId ID! —

issueReport : IssueReport

One citizen-filed issue report by id. Null when unknown or removed.

ArgumentTypeDefault
id ID! —

issueReportEvents : [IssueEvent!]!

The status history of one issue report, oldest first — who changed it to what, and when.

ArgumentTypeDefault
id ID! —

issueReportsForPlace : IssueReportList!

Issues reported for a place, newest first. Public. The city argument is a NAME (sent with state) and expands to that city's ZIPs — a city spans many, so it is not a ZIP match.

ArgumentTypeDefault
level String —
state String —
countyFips String —
placeGeoid String —
districtKind String —
district String —
zip String —
city String —
status String —
limit Int —
offset Int —

issues : [Issue!]!

M23 — the curated issue catalog (abortion, healthcare, immigration, …).

issueUploadLimits : IssueUploadLimits!

Server-enforced attachment limits, so a client can validate before the round trip instead of duplicating the numbers.

petition : Petition

A single petition by slug (public sees published; admin sees any).

ArgumentTypeDefault
slug ID! —

petitions : [Petition!]!

Petitions (E02.7/E02.8) — the public sees PUBLISHED petitions; an admin may pass status = draft | closed to review others. Newest first.

ArgumentTypeDefault
status String —
limit Int —
offset Int —

similarIssueReports : [IssueMatch!]!

Has this already been reported nearby? Place-scoped, then ranked lexically.

ArgumentTypeDefault
q String! —
level String —
state String —
countyFips String —
placeGeoid String —
districtKind String —
district String —
zip String —
city String —
limit Int —
Comparison & networks 4

comparePeople : [PersonIssueProfile!]!

E18 (M23) — compare up to ~6 people's issue positions in one call (one PersonIssueProfile per resolvable id).

ArgumentTypeDefault
ids [ID!]! —

compareStates : [StateCompareRow!]!

Compare U.S. states side by side (E18/F11 cross-jurisdictional lens) — federal funding + congressional delegation, normalized per state. codes = 2-letter state codes (2–6). Coverage-honest; raw totals (population differs, so read as scale not ranking).

ArgumentTypeDefault
codes [String!]! —

congressCollabGraph : CongressCollabGraph!

Congress co-sponsorship COLLABORATION GRAPH (M09/E18, "who helps whom") — a PRECOMPUTED network of the members who most often sponsor/cosponsor EACH OTHER'S bills, clustered into collaboration communities (Louvain) and laid out spatially (force-directed) so collaborators sit close. Computed ENTIRELY OFFLINE from CivicGate's own sponsorship data (bill_sponsors + bills) by ingest:congress-collab-graph; the gateway serves the stored graph. congress defaults to the latest computed; chamber = house|senate filters to that chamber's members (both when omitted); minWeight filters edges to ties of at least that many bills of mutual help (server-side, for live thresholding). Neutral-administrator posture: these are collaboration clusters from public sponsorship data, NOT official caucuses. Empty (nodes:[], edges:[], meta:null) until the ingest has run. Public.

ArgumentTypeDefault
congress Int —
chamber String —
minWeight Int —

cosponsorNetwork : [CosponsorLink!]!

A member's most frequent co-sponsorship partners (M03) — their legislative coalition, ranked by shared bills.

ArgumentTypeDefault
bioguideId ID! —
limit Int —
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).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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).

ArgumentTypeDefault
state String! —

county : County

County / FIPS lookup (M02/M06). One 5-digit GEOID; a de-zeroed form like 1001 is accepted too.

ArgumentTypeDefault
geoid ID! —

countyForZip : County

The county containing a ZIP, read from the geocode cache — never spends a geocode of its own.

ArgumentTypeDefault
zip String! —

countyPage : CountyPage

A county page: the county, the ZIPs resolved into it so far, and its siblings in the same state.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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).

ArgumentTypeDefault
state String! —
News 8
Recent coverage, with the entities each article mentions
{ news(limit: 3) { title url internalUrl source { name bias } refs { type label } } }

mediaCommentCounts : [MediaCommentCount!]!

M17/E03 — comment count (comments + their replies) for every attachment of a post.

ArgumentTypeDefault
postId ID! —

mediaComments : [UserPost!]!

M17/E03 — top-level comments on ONE attachment of a post, oldest first. Each is a UserPost; its own replies load with postReplies. Gated by the parent post's visibility and by blocks.

ArgumentTypeDefault
mediaId ID! —
limit Int —

mediaOutlet : MediaOutletDetail

One media outlet's profile (M12): the outlet + its recent de-duplicated stories. Null when the slug is unknown.

ArgumentTypeDefault
slug ID! —
limit Int —

mediaOutlets : [MediaOutlet!]!

Media-outlet directory (M12) — every ingested outlet with its disclosed lean + article count, for the per-outlet profile pages. sort = "name" (default, A→Z) | "count".

ArgumentTypeDefault
sort String —

news : [NewsStory!]!

News aggregation (M12) — recent stories (one per de-duplicated cluster) with entity refs + optional AI analysis. Optional title search + entity filter.

ArgumentTypeDefault
search String —
entityType String —
entityId ID —
limit Int —

newsArticle : NewsStory

One article by slug OR raw id, for its standalone CivicGate page. Null when unknown.

ArgumentTypeDefault
id ID! —

newsPage : NewsPage!

Paginated + filtered news (M12): server search + bias/source/mention filters, with a total for pagination.

ArgumentTypeDefault
search String —
entityType String —
entityId ID —
bias String —
sources [String!] —
limit Int —
offset Int —

newsSources : [NewsSourceInfo!]!

The outlets CivicGate pulls from (with primary-story counts) — powers the source multi-select filter.

Global & international 2

countryProfile : CountryProfile

E17 — one country's civic snapshot across all ingested World Bank indicators, each with its value, observation year, and rank among countries. code = ISO alpha-3 (e.g. "USA"). Null when the country has no ingested rows (coverage-honest).

ArgumentTypeDefault
code ID! —

worldIndicators : WorldIndicatorReport!

E17 Global & International Layer — a modest, HONEST comparative STARTER. Ranks countries for ONE World Bank indicator (default = Voice & Accountability), the US flagged, plus the list of available indicators for the selector. Sourced from the World Bank Indicators API (CC-BY). GATED + coverage-honest: available=false with an honest note until ingest:world-indicators has run; a country with no reported value is simply absent, never fabricated. indicator = a World Bank indicator code (e.g. "GOV_WGI_RL.EST", "SP.POP.TOTL"); limit caps the ranked rows.

ArgumentTypeDefault
indicator String —
limit Int —
Community & civic roles 13

civicActivity : CivicActivity!

E03/E06/E12 — the signed-in user's OWN civic-activity summary: counts of verified actions, an honest activity streak / "active since", and factual participation milestones. PRIVATE + NON-COMPETITIVE — never ranked against other users, never a points economy; every figure is a real count of the user's own recorded rows, never fabricated. Requires auth.

civicMatches : CivicMatches

E16 — a personalized, coverage-honest digest MATCHING the signed-in user to the civic world from data they already generate (followed issues + saved location + reps): bills tied to issues they follow, their reps' documented positions on those issues, upcoming elections in their state, and concrete next actions. Requires auth. Every section is independently coverage-honest — thin data yields an empty section + an honest note, never a fabricated match.

civicProfile : CivicProfile

M16 — the EXTENDED civic profile, for CivicGate-as-identity-provider. Same privacy gating as the profile page: a relying party sees what an anonymous visitor would, plus whatever the member has opened wider. Null for an unknown handle or a blocked pair.

ArgumentTypeDefault
handle String! —

civicRolesCovering : [CivicRoleCoverage!]!

Every role whose jurisdiction covers this ZIP, grouped by level, most specific first.

ArgumentTypeDefault
zip String! —

civicRoleSearch : CivicRoleSearch!

Admin: find users by place and/or role. Searches BOTH assigned civic roles and self-declared profile location.

ArgumentTypeDefault
zip String —
state String —
districtKind String —
district String —
placeGeoid String —
roles [String!] —
levels [String!] —
q String —
limit Int —
offset Int —

civicRolesForUser : [CivicRole!]!

Admin: one user's active grants.

ArgumentTypeDefault
userId String! —

civicRoleUser : CivicRoleUser

Admin: one user's profile place plus their active grants, keyed on the auth user id. Null only when the id is unknown to BOTH sources.

ArgumentTypeDefault
userId String! —

communityActivity : CommunityActivity!

E03 Layer B — CivicGate's COLLECTIVE, ANONYMIZED civic momentum over a time window (this_week | this_month | all_time; default this_week). Public (no auth) — powers the indexable /community page. Every number is a real aggregate over real rows; NO user is named, individually ranked, or compared. Anti-gaming counting rules are documented on the CommunityActivity/CommunityMetrics types.

ArgumentTypeDefault
window String —

communityTemplates : [ContactTemplate!]!

E08 — community-shared contact templates (scope=general | bill | issue), most-recent first. Merged with the built-in templates on the contact panel. Public; only published (unhidden) rows.

ArgumentTypeDefault
scope String —
billId ID —
issueId ID —

connectionState : ConnectionState!

My relationship to another member — drives the Connect / Blocked affordances on their profile.

ArgumentTypeDefault
userId ID! —

contactTemplates : [ContactTemplate!]!

E11 — compose-assist message templates for 'contact your rep'. Returns active templates matching the category (general|bill|vote|issue) plus any pinned to billId. Public; read-only in Phase 1.

ArgumentTypeDefault
category String —
billId ID —

myActions : [UserAction!]!

E02/E11 — the signed-in user's civic-action history for the account "My actions" surface. Requires auth; newest first.

ArgumentTypeDefault
limit Int —

myReps : MyReps

E02/E11 — the signed-in user's own representatives, from their saved location or a passed ZIP. Requires sign-in unless a valid zip is given. Coverage-honest (resolvedFrom=none + a note when it can't resolve).

ArgumentTypeDefault
zip 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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
q String —
limit Int —
cursor String —

myConnectionRequests : [ConnectionRequest!]!

Connection requests awaiting MY response (incoming) or awaiting theirs (outgoing).

ArgumentTypeDefault
direction String —

myConnections : ConnectionPage!

My accepted connections. q searches name/handle; sort = name|recent.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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).

ArgumentTypeDefault
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.

ArgumentTypeDefault
limit Int —
unreadOnly Boolean —

myPosts : [UserPost!]!

M17 — the signed-in user's own posts, newest first (their wall as they authored it).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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).

ArgumentTypeDefault
username String! —

userProfile : PublicUserProfile

A world-readable user profile (M16/E04). handle = username (case-insensitive) OR userId. Null if none.

ArgumentTypeDefault
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).

ArgumentTypeDefault
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.

ArgumentTypeDefault
handle String! —
tab String! —
limit Int —
Admin & operations 12

adminBackfillTasks : [AdminTask!]!

Admin: recent rows from the backfill worklist (optionally filtered by status).

ArgumentTypeDefault
status String —
limit Int —

adminGatewayMemory : GatewayMemory!

M16 — the gateway process's own memory and cache occupancy. This is the panel that makes a heap leak visible BEFORE it aborts the process.

adminJobRuns : [JobRun!]!

M16 — recent recorded runs for one job, newest first. The resource history behind the Jobs page.

ArgumentTypeDefault
key String! —
limit Int —

adminJobs : [AdminJob!]!

Admin: scheduled ingest jobs (systemd --user timers) with live state + schedule.

adminPersonFacts : [AdminPersonFact!]!

Admin (M01/M11 wiki-edit): the FULL background-fact rows for a person (with ids + curated/editor provenance) so the in-place editor can list/update/delete them. Admin-gated; resolves the person like personFacts.

ArgumentTypeDefault
id ID! —

adminServices : [AdminService!]!

Admin: long-running services (systemd --user daemons) with live state.

adminStances : [AdminStance!]!

Admin (M23): stated stances for curation — all, or filtered to one issue slug. Gated to admin.

ArgumentTypeDefault
issueSlug String —

adminTaskCounts : [AdminTaskCount!]!

Admin: kind × status counts over the backfill worklist.

apiBudgets : [ApiBudgetRow!]!

Rate-limited external API budget usage (M16 admin, T29) — Congress.gov (hourly), OpenStates + CourtListener (daily). Admin only.

appConfig : [AppConfigEntry!]!

Generic app config (admin-only) — namespaced key/JSON-value rows (state_bills.*, people.*, funding.*). Optional prefix filter. Backs the admin Config tab + the ingest scheduler's live config.

ArgumentTypeDefault
prefix String —

backfillJob : BackfillJob

Poll a backfill job's status by id.

ArgumentTypeDefault
id ID! —

serviceLogs : ServiceLog!

Admin: tail a service's journald logs.

ArgumentTypeDefault
service String! —
lines Int —
Other 3

brokerStatus : BrokerStatus!

Is the local AI broker accepting work (M10/M16)? A single master switch over every AI job — summaries, classification, the assistant. Readable by any signed-in ADMIN so the site can show a standing reminder that AI work is paused; it exposes no data, only the flag and who last set it.

executiveAction : PresidentialAction

ONE presidential action (M02/M09) by its whitehouse.gov slug — full text, summary and provenance. NULL when we do not hold it.

ArgumentTypeDefault
id ID! —

virtualVoteTally : VirtualVoteTally!

VIRTUAL VOTING (E19/M08) - the straw-poll count for one contest, as rendered beside that race on the ballot. PUBLIC: no sign-in needed, and still readable after the election so the count can be compared with what actually happened. Counts only, never who answered. An unknown contest returns an empty, labelled tally rather than an error.

ArgumentTypeDefault
contestId ID! —
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.

ArgumentTypeDefault
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).

ArgumentTypeDefault
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.

ArgumentTypeDefault
question String! —
history [AssistantTurnInput!] —

attachIssueThread : IssueReport

Link a forum discussion to an issue after the forum created it.

ArgumentTypeDefault
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.

ArgumentTypeDefault
input BackfillInput! —

blockUser : ConnectionState!

Block a member: hides both of you from each other and severs follows + connections.

ArgumentTypeDefault
userId ID! —
note String —

cancelBackfill : Boolean!

Admin: cancel a queued/running backfill job. Gated to the trusted proxy.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
contestId ID! —

closePetition : Petition!

E02.7 — close a petition to new signatures (admin-only).

ArgumentTypeDefault
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.

ArgumentTypeDefault
name String! —
origins [String!] —

createPetition : Petition!

E02.7 — create a petition (admin-only; MVP is admin-seeded). Starts in 'draft'.

ArgumentTypeDefault
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).

ArgumentTypeDefault
input PostInput! —

deleteApiKey : Boolean!

M16 — permanently delete a key you created by mistake.

ArgumentTypeDefault
id ID! —

deleteIssueMedia : Boolean!

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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
id ID! —

deletePetition : Boolean!

E02.7 — admin hard-deletes a petition (signatures cascade).

ArgumentTypeDefault
id ID! —

deletePost : Boolean!

M17 — delete one of your own posts. Soft-deletes the post and removes its feed event.

ArgumentTypeDefault
id ID! —

deletePostMedia : Boolean!

M17/E03 — remove an attachment from the post AND from object storage.

ArgumentTypeDefault
mediaId ID! —

deletePushSubscription : PushUnsubscribeResult!

Remove one device (by endpoint) or every device (endpoint omitted). Removing the last one turns the master switch off.

ArgumentTypeDefault
endpoint String —

deleteStance : Boolean!

Admin (M23): delete a stated stance by id. Gated to admin.

ArgumentTypeDefault
id ID! —

denyPetition : Petition!

E02.7 — admin denies a proposed petition → denied (reason required); emails the proposer.

ArgumentTypeDefault
id ID! —
reason String! —

fetchBill : FetchBillResult!

Admin: fetch + store a single bill by id (powers the bill stub page). Gated to the trusted proxy.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
mediaId ID! —

grantCivicRole : CivicRole!

Grant a scoped civic role (a verified local official, editor or moderator) at a place level. Admin only.

ArgumentTypeDefault
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).

ArgumentTypeDefault
id ID! —

moderateCommunityTemplate : Boolean!

E08 — admin: hide/show a community-shared template (status = published | hidden). Gated to admin.

ArgumentTypeDefault
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.

ArgumentTypeDefault
issueId ID! —
categoryId String —

proposePetition : Petition!

E02.7 — any signed-in user proposes a petition for admin review. Starts in 'proposed'.

ArgumentTypeDefault
input PetitionInput! —

publishPetition : Petition!

E02.7 — publish a draft petition so it's public + signable (admin-only).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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).

ArgumentTypeDefault
id ID! —

removeConnection : ConnectionState!

Remove an accepted connection (does not block, does not unsubscribe).

ArgumentTypeDefault
userId ID! —

removeSubscriber : Boolean!

Remove a follower without blocking them.

ArgumentTypeDefault
userId ID! —

reopenPetition : Petition!

E02.7 — re-open a closed petition back to Current/published (admin-only).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
postId ID! —
files [UploadFileInput!]! —

respondToConnection : ConnectionState!

Accept or decline an incoming request. Accepting subscribes both ways by default.

ArgumentTypeDefault
userId ID! —
accept Boolean! —
alsoFollow Boolean true

revokeApiKey : Boolean!

M16 — revoke a key (soft: the row stays auditable, the key stops authenticating).

ArgumentTypeDefault
id ID! —

revokeCivicRole : Boolean!

Revoke a civic role by its id. Admin only. Returns false when the role was already absent.

ArgumentTypeDefault
id ID! —

runJob : JobActionResult!

Admin: start a scheduled job's service now. Gated to the trusted proxy / admin role.

ArgumentTypeDefault
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.

ArgumentTypeDefault
input PushSubscriptionInput! —

sendContactMessage : ContactSendResult!

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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
key String! —
priority String! —

setJobSchedule : JobActionResult!

Admin: rewrite a timer's schedule (validated + applied via daemon-reload). Gated to the trusted proxy / admin role.

ArgumentTypeDefault
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).

ArgumentTypeDefault
entityType String! —
entityId ID! —
liked Boolean! —

setMediaNote : Boolean!

M17/E03 — set the caption on one of your attachments (max 500 chars).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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).

ArgumentTypeDefault
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.

ArgumentTypeDefault
postId ID! —
preview PostPreviewInput —

setPostVisibility : Boolean!

Set ONE post's audience, overriding the member's default for that post only.

ArgumentTypeDefault
postId ID! —
tier String! —

setPrivacyFacet : PrivacySettings!

M16/E04 — set one facet's visibility tier (everyone|subscribers|connections|none).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
entityType String! —
entityId ID! —
on Boolean! —

shareContactTemplate : ContactTemplate!

E08 — share a user-authored contact template with the community. Requires sign-in. Returns the shared template.

ArgumentTypeDefault
input ShareTemplateInput! —

signPetition : Petition!

E02.8 — sign a published petition (requires sign-in). Idempotent per user. displayName/comment are optional and public.

ArgumentTypeDefault
petitionId ID! —
displayName String —
comment String —

stopJob : JobActionResult!

Admin: stop a running job's service. Gated to the trusted proxy / admin role.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
userId ID! —

unsignPetition : Petition!

E02.8 — remove the signed-in user's signature from a petition.

ArgumentTypeDefault
petitionId ID! —

unsubscribeElectionAlerts : ElectionAlertStatus!

Stop election reminders for a place (and federal). Keeps the follow row; clears only the delivery flag.

ArgumentTypeDefault
state String —

updateMyProfile : MeProfile!

Create/update the signed-in user's profile (M16/E04).

ArgumentTypeDefault
input ProfileInput! —

updatePetition : Petition!

E02.7 — admin edits a petition's content (CRUD on Current + edit-before-approve on Proposed).

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
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.

ArgumentTypeDefault
input StanceInput! —