OneGov Election Day API
Upload Formats
Download Format
Embedding
The web app containts different views which allows easy embedding of election and vote results on a different site:
{path_to_ballot}/map
: The vote result map.{path_to_election}/candidates-chart
: The candidates bar chart.{path_to_election}/lists-chart
: The lists bar chart.{path_to_election}/connections-chart
: The connections sankey chart.{path_to_election}/panachage-chart
: The panachage sankey chart.{path_to_election}/party-strengths-chart
: The party results bar chart.
Make sure you serve the files with the embedding code with a web server!
The views include the https://github.com/davidjbradshaw/iframe-resizer.
Headerless Mode
The web app can be called in a headerless mode by browsing
{root_path}?headerless
. In headerless mode, both the header and footer are
hidden. The headerless setting is stored in the browser session after the
initial call which means that browsing all further links are in headerless mode
as well. End the headerless mode with {root_path}?headerful
.
To set the language, set the a cookie either by browsing to
{root_path}/locale/xx
or directly (locale: xxx
). Valid options are de_CH
,
fr_CH
, it_CH
or rm_CH
The views include the https://github.com/davidjbradshaw/iframe-resizer.
REST Interface
The web app allows to upload results in the onegov format using a
multipart-POST-request to [base_url]/upload
containing the following fields:
type
: The type of upload. This is eithervote
,election
,parties
orxml
.id
: The ID or external ID of the election compound, election or vote. Iftype
iselection
orparties
an election compound is searched for first, and then an election if none is found. Not needed fortype = 'xml'
.results
: The results. See the format_descriptions
A token must be provided using the passwort part of HTTP basic authentication.
An invalid authentication returns a HTTP 401 Unauthorized
. The token can be
generated using the web interface.
Valid requests return a HTTP 200 OK
together with the JSON body:
{
"status": "success",
"errors": {}
}
Invalid requests return a HTTP 400 Bad Request
together with a JSON body
containing a list of errors (note that filename
and line
might be missing):
{
"status": "error",
"errors": {
"1": [{
"line": 2,
"filename": null,
"message": "1 is unknown"
}]
}
}
It is possible to set the language used for the error messages by setting the
Accept-Language
header, possible values are: de_CH
, fr_CH
, it_CH
and
rm_CH
.
cURL Examples
curl https://[base_url]/upload \
--user :[token] \
--header "Accept-Language: de_CH" \
--form "type=election" \
--form "id=test-election" \
--form "results=@staenderatswahl-2015.csv"
curl https://[base_url]/upload \
--user :[token] \
--header "Accept-Language: de_CH" \
--form "type=xml" \
--form "results=@delivery.xml"
WabstiCExport
The web app allows to upload results directly from the Wabsti export program. First add the election/vote(s), then a datasource (the token hereby generated is used for authentication later) and connect the election/votes using the parameters used in Wabsti.
The files can then be uploaded by using a multipart-POST-request to
[base_url]/upload-wabsti-vote
for votes with the fieldssg_gemeinden
(SG_Gemeinden.csv)sg_geschaefte
(SG_Geschaefte.csv)sgstatic_gemeinden
(SGStatic_Gemeinden.csv)sgstatic_geschaefte
(SGStatic_Geschaefte.csv)
[base_url]/upload-wabsti-majorz
for majorz elections with the fieldswm_gemeinden
(WM_Gemeinden.csv)wm_kandidaten
(WM_Kandidaten.csv)wm_kandidatengde
(WM_KandidatenGde.csv)wm_wahl
(WM_Wahl.csv)wmstatic_gemeinden
(WMStatic_Gemeinden.csv)
[base_url]/upload-wabsti-proporz
for proporz elections with the fieldswp_gemeinden
(WP_Gemeinden.csv)wp_kandidaten
(WP_Kandidaten.csv)wp_kandidatengde
(WP_KandidatenGde.csv)wp_listen
(WP_Listen.csv)wp_listengde
(WP_ListenGde.csv)wp_wahl
(WP_Wahl.csv)wpstatic_gemeinden
(WPStatic_Gemeinden.csv)wpstatic_kandidaten
(WPStatic_Kandidaten.csv)
The token must be provided using the passwort part of HTTP basic authentication.
An invalid authentication returns a HTTP 403 Forbidden
, all other requests
return a HTTP 200 OK
together with a JSON body containing a status and a list
of errors, for example:
{
"status": "success",
"errors": {}
}
or
{
"status": "error",
"errors": {
"1": [{
"line": 2,
"filename": null,
"message": "1 is unknown"
}]
}
}
It is possible to set the language used for the error messages by setting the
Accept-Language
header, possible values are: de_CH
, fr_CH
, it_CH
, rm_CH
.
cURL Examples
curl https://[base_url]/upload-wabsti-vote \
--user :[token] \
--header "Accept-Language: de_CH" \
--form "sg_gemeinden=@SG_Gemeinden.csv" \
--form "sg_geschaefte=@SG_Geschaefte.csv" \
--form "sgstatic_gemeinden=@SGStatic_Gemeinden.csv" \
--form "sgstatic_geschaefte=@SGStatic_Geschaefte.csv"
curl https://[base_url]/upload-wabsti-majorz \
--user :[token] \
--header "Accept-Language: de_CH" \
--form "wm_gemeinden=@WM_Gemeinden.csv" \
--form "wm_kandidaten=@WM_Kandidaten.csv" \
--form "wm_kandidatengde=@WM_KandidatenGde.csv" \
--form "wm_wahl=@WM_Wahl.csv" \
--form "wmstatic_gemeinden=@WMStatic_Gemeinden.csv"
curl https://[base_url]/upload-wabsti-proporz \
--user :[token] \
--header "Accept-Language: de_CH" \
--form "wp_gemeinden=@WP_Gemeinden.csv" \
--form "wp_kandidaten=@WP_Kandidaten.csv" \
--form "wp_kandidatengde=@WP_KandidatenGde.csv" \
--form "wp_listen=@WP_Listen.csv" \
--form "wp_listengde=@WP_ListenGde.csv" \
--form "wp_wahl=@WP_Wahl.csv" \
--form "wpstatic_gemeinden=@WPStatic_Gemeinden.csv" \
--form "wpstatic_kandidaten=@WPStatic_Kandidaten.csv"