| ################## |
| # ADMIN REST API # |
| ################## |
| |
| ========================== |
| Setting up a new election: |
| ========================== |
| |
| /steve/admin/setup/$electionid |
| POST |
| input: |
| title: Title of the election |
| owner: uid of election owner |
| monitors: email addresses of monitors |
| starts: UNIX timestamp of start (optional) |
| ends: UNIX timestamp when it closes (optional) |
| open: If set to 'true', allows for an open (public) election |
| output: |
| HTTP 201 Created on success |
| HTTP 400 Bad request if params missing or invalid or already exists |
| HTTP 500 on error |
| response payload: |
| JSON formatted |
| { |
| "message": "created" |
| } |
| |
| ============================== |
| Editing an existing election: |
| ============================== |
| |
| /steve/admin/edit/$electionid |
| POST |
| input: |
| title: Title of the election (optional) |
| owner: uid of election owner (optional) |
| monitors: email addresses of monitors (optional) |
| starts: UNIX timestamp of start (optional) |
| ends: UNIX timestamp when it closes (optional) |
| output: |
| HTTP 200 Saved on success |
| HTTP 404 Not Found if no such election |
| HTTP 500 on error |
| response payload: |
| JSON formatted |
| { |
| "message": "Changes saved" |
| } |
| |
| |
| |
| ================================= |
| Creating an issue in an election: |
| ================================= |
| |
| /steve/admin/create/$electionid/$issueid |
| POST |
| input: |
| title: Title of the issue |
| description: (optional) Description of the issue |
| type: type of issue (yna, stv[1-9]) |
| candidates: (if stv[1-9]) \n separated list of candidate names or JSON array |
| statements: (if stv[1-9]) \n separated list of statements or JSON array |
| nominatedby: (if YNA) Person to nominate this issue |
| seconds: (if YNA) \n separated list of seconds for the issue |
| |
| output: |
| HTTP 201 Created on success |
| HTTP 400 Bad request if params missing or invalid or already exists |
| HTTP 500 on error |
| response payload: |
| JSON formatted |
| { |
| "message": "created" |
| } |
| |
| |
| ================================ |
| Editing an issue in an election: |
| ================================ |
| |
| /steve/admin/edit/$electionid/$issueid |
| POST |
| input: |
| title: Title of the issue (optional) |
| description: (optional) Description of the issue (optional) |
| type: type of issue (yna, stv[1-9]) (optional) |
| candidates: (if stv[1-9]) \n separated list of candidate names or JSON array |
| statements: (if stv[1-9]) \n separated list of statements or JSON array |
| nominatedby: (if YNA) Person to nominate this issue (optional) |
| seconds: (if YNA) \n separated list of seconds for the issue (optional) |
| |
| output: |
| HTTP 200 Saved on success |
| HTTP 404 Not Found if no such issue or election |
| HTTP 500 on error |
| response payload: |
| JSON formatted |
| { |
| "message": "Changes saved" |
| } |
| |
| |
| ================================== |
| Adding a statement to a candidate: |
| ================================== |
| |
| /steve/admin/statement/$electionid/$issueid |
| POST |
| input: |
| candidate: Candidate to set statement for |
| statement: Statement to set/add |
| |
| output: |
| HTTP 200 Saved on success |
| HTTP 400 Bad request if params missing |
| HTTP 404 Not Found if candidate is not on the ballot |
| HTTP 500 on error |
| response payload: |
| JSON formatted |
| { |
| "message": "Changes saved" |
| } |
| |
| |
| ================================ |
| Adding a candidate to the issue: |
| ================================ |
| |
| /steve/admin/addcandidate/$electionid/$issueid |
| POST |
| input: |
| candidate: Candidate to set add |
| statement: Statement to set/add (optional) |
| |
| output: |
| HTTP 200 Saved on success |
| HTTP 400 Bad request if params missing |
| HTTP 404 Not Found if no such issue/election |
| HTTP 500 on error |
| response payload: |
| JSON formatted |
| { |
| "message": "Changes saved" |
| } |
| |
| |
| =================================== |
| Deleting a candidate to the issue: |
| =================================== |
| |
| /steve/admin/delcandidate/$electionid/$issueid |
| POST |
| input: |
| candidate: Candidate to delete |
| |
| output: |
| HTTP 200 Saved on success |
| HTTP 400 Bad request if params missing |
| HTTP 404 Not Found if candidate is not on the ballot |
| HTTP 500 on error |
| response payload: |
| JSON formatted |
| { |
| "message": "Changes saved" |
| } |
| |
| ================================= |
| Obtaining a voter ID for peeking: |
| ================================= |
| |
| /steve/admin/temp/$electionid |
| POST |
| input: |
| none |
| |
| output: |
| HTTP 200 Voter ID issued |
| HTTP 403 Not enough karma |
| HTTP 404 Not Found if no such election |
| HTTP 500 on error |
| response payload: |
| JSON formatted |
| { |
| "id": "oigwhhsgoih8ewr8gye58or" |
| } |
| |
| =============== |
| Tallying votes: |
| =============== |
| |
| /steve/admin/tally/$electionid/$issueid |
| POST |
| input: |
| none |
| |
| output: |
| HTTP 200 Results ready |
| HTTP 404 Not Found if no such election |
| HTTP 500 on error |
| response payload: |
| JSON formatted |
| { |
| "yes": 10, |
| "no": 5, |
| "abstain": 2 |
| } |
| |
| |
| |
| |
| ################## |
| # VOTER REST API # |
| ################## |
| |
| ============================ |
| Viewing election and issues: |
| ============================ |
| |
| /steve/voter/view/$electionid |
| GET |
| input: |
| uid: Voter hash |
| output: |
| HTTP 200 Okay if election exists |
| HTTP 403 Forbidden if voter hash missing or invalid |
| HTTP 404 Not Found if no such election |
| response payload: |
| JSON formatted |
| { |
| "base_data": { |
| "owner": "humbedooh", |
| "starts": null, |
| "ends": null, |
| "monitors": [ |
| "humbedooh@humbedooh.com" |
| ], |
| "title": "Foo Elections, 2015" |
| }, |
| "baseurl": "https://stv.website/steve/election?foo", |
| "issues": [ |
| { |
| "description": null, |
| "title": "Test Board Election", |
| "APIURL": "https://stv.website/steve/voter/view/foo/baz", |
| "prettyURL": "https://stv.website/steve/ballot?foo/baz", |
| "candidates": [ |
| { |
| "name": "Just One Guy" |
| }, |
| { |
| "name": "John Doe", |
| "statement": "Vote for me!" |
| }, |
| { |
| "name": "Kate Smurf", |
| "statement": "Vote for me too!" |
| } |
| ], |
| "type": "stv6", |
| "id": "baz" |
| }, |
| { |
| "description": "This is to nominate WALL-E for ASF membership", |
| "title": "Membership for WALL-E", |
| "seconds": "humbedooh", |
| "APIURL": "https://stv.website/steve/voter/view/foo/member-wall-e", |
| "prettyURL": "https://stv.website/steve/ballot?foo/member-wall-e", |
| "candidates": [], |
| "nominatedby": "mattman", |
| "type": "yna", |
| "id": "member-wall-e" |
| } |
| ] |
| } |
| |
| |
| ======================= |
| Viewing a single issue: |
| ======================= |
| /steve/voter/view/$electionid/$issueid |
| GET |
| input: |
| uid: Voter hash |
| output: |
| HTTP 200 Okay if issue exists |
| HTTP 404 Not Found if no such election/issue |
| HTTP 403 Forbidden if voter hash missing or invalid |
| response payload: |
| JSON formatted |
| { |
| "issue": { |
| "description": null, |
| "title": "Test Board Election", |
| "APIURL": "https://stv.website/steve/voter/view/foo/baz", |
| "prettyURL": "https://stv.website/steve/ballot?foo/baz", |
| "candidates": [ |
| { |
| "name": "Just One Guy" |
| }, |
| { |
| "name": "John Doe", |
| "statement": "Vote for me!" |
| }, |
| { |
| "name": "Kate Smurf", |
| "statement": "Vote for me too!" |
| } |
| ], |
| "type": "stv6", |
| "id": "baz" |
| } |
| } |
| |
| |
| ======================= |
| Requesting a vote link: |
| ======================= |
| /steve/voter/request/$electionid |
| GET |
| input: |
| email: the email to send voter link to |
| output: |
| HTTP 200 Okay if voter link issued |
| HTTP 400 if invalid or no email address specified |
| HTTP 404 Not Found if no such election/issue |
| HTTP 403 Forbidden if issue is not public |
| response payload: |
| JSON formatted |
| { |
| "message": "voter link sent to foo@bar" |
| } |
| |
| |
| |
| MORE TO COME! |