Skip to content

An assembled app: announced doors only, with its own sign-in on every path.

appRunning the shop6 operationsid svi

How it sits

An app is already assembled from parts, with a face of its own. The counts and the links below are from the platform's spec and the other services' own descriptions.

Among the partsfrom the spec
Operations6 GET 4 · POST 2
Resources3
Leaned on byno other service names it
Leans onnone named
In recipesnone yet

What it can do

6 operations in 3 resources, as the spec declares them. Each row is one call; paths are relative to the part.

rulings

MethodPathDoes
GET/api/rulingsDecisions asked of this app's owner — open first. A service caller holds Save VI.rulings.ask; a person must be an answerer (canRule).
POST/api/rulingsAsk the owner a question (question, options 2–6 or none for free text, context, asked_by, issue_url). The answerers are nudged by mesh DM. A service caller hold
GET/api/rulings/{id}One decision: the question, its options, and the answer when there is one.
POST/api/rulings/{id}/withdrawWithdraw an open question — the asker (same asked_by), or an in-house person.
4 operations

rollup

MethodPathDoes
GET/api/rollupSave VI's campaign rollup: the funnel (voters, claimed, attempted, reached, do-not-contact), outcome classes, the precinct table, prospect counts, and reps by d
1 operation

smsqueue

MethodPathDoes
GET/api/smsqueue/pendingThe SMS PRE-RESTART CHECK: the count of canvasser SMS submissions matched to a proposed voter that have NOT yet been asked to confirm (`awaiting_confirm` with n
1 operation

All the partsRunning the shopThe platform's own id for this service is cbsvi.

forge-catalog.json, generated Oct 30, 2026

Anti-cloud. Host local, think global.

Terminal
/terminal