API¶
NOTE: This document and linked sections may be out of date.
Junction provides API to access information about the conference, schedule, and feedback. The API is for mobile clients to assist conference attendees. All the request and response format is application/json.
Demo site:
http://junctiondemo.herokuapp.com/
Conference - List¶
Endpoint:
/api/v1/conferences/Allowed Method:
GET.Returns all conferences. There is no pagination.
Sample Response:
[ { "id": 5, "name": "PyCon India 2016", "slug": "2016", "description": "...", "start_date": "2016-09-23", "end_date": "2016-09-25", "status": "Proposal submission closed", "venue": "http://in.pycon.org/cfp/api/v1/venues/2/" },]
venuekey holds URL of the venue details.
Venue - List¶
Endpoint:
/api/v1/venues/Allowed Methods:
GETList all the venues.
Sample Response:
[ { "id": 1, "name": "Nihmans", "address": " Hosur Road, Lakkasandra, Behind Bus Stop, Bengaluru, Karnataka 560030", "latitude": "12.943112200000000", "longitudes": "77.5968643000000000" }, ]
Venue - Detail¶
Endpoint:
/api/v1/venues/<id>/Allowed Method:
GETReturn specific venue details.
Sample Response:
{ "id": 1, "name": "Nihmans", "address": " Hosur Road, Lakkasandra, Behind Bus Stop, Bengaluru, Karnataka 560030", "latitude": "12.943112200000000", "longitudes": "77.5968643000000000" }
Room - List¶
Endpoint:
/api/v1/rooms/Allowed Method:
GETList all rooms of all venues..
Sample Response:
[ { "id": 4, "name": "Buffet Area", "venue": "http://in.pycon.org/cfp/api/v1/venues/1/", "note": "Left end of the ground floor" },..]
Room - Venue specific¶
Endpoint:
/api/v1/rooms/?venue=<id>Display list of rooms in the venue.
Allowed Method:
GETSample Response:
[ { "id": 4, "name": "Buffet Area", "venue": "http://in.pycon.org/cfp/api/v1/venues/1/", "note": "Left end of the ground floor" }, { "id": 3, "name": "Room 3", "venue": "http://in.pycon.org/cfp/api/v1/venues/1/", "note": "Ground Floor" }, { "id": 2, "name": "Room 2", "venue": "http://in.pycon.org/cfp/api/v1/venues/1/", "note": "Ground Floor" }, { "id": 1, "name": "Room 1", "venue": "http://in.pycon.org/cfp/api/v1/venues/1/", "note": "Ground Floor" } ]
Schedule: List¶
Endpoint:
/api/v1/schedules/Allowed Methods:
GETAll the schedule items of all conferences.
Sample Response:
{ "2015-10-04": { "08:30:00 - 09:15:00": [ { "conference": "http://in.pycon.org/cfp/api/v1/conferences/1/", "session": { "description": "" }, "room_id": 4, "end_time": "09:15:00", "event_date": "2015-10-04", "start_time": "08:30:00", "type": "Break", "id": 37, "name": "Registration & Breakfast" } ], "09:30:00 - 10:15:00": [ { "conference": "http://in.pycon.org/cfp/api/v1/conferences/1/", "session": { "description": "" }, "room_id": 1, "end_time": "10:15:00", "event_date": "2015-10-04", "start_time": "09:30:00", "type": "Talk", "id": 38, "name": "Keynote - Nicholas H.Tollervey" } ],
Response data keys are conference day date and its schedule grouped by time.
2015-10-04- Conference day date.08:30:00 - 09:15:00- Start of the session - End of the session.sessiondictionary contains details about the session.type: Type of the session likebreak, lunch, talk, workshopetc …room_id: Place of the session. The Client should use API or cached data to fetch room name.
Schedule: List of sessions for the conference¶
Endpoint:
/api/v1/schedules/?conference=<conference_id>Allowed Methods:
GETAll the schedule items of the conference.
Sample Response:
{ "2015-10-04": { "08:30:00 - 09:15:00": [ { "conference": "http://in.pycon.org/cfp/api/v1/conferences/1/", "session": { "description": "" }, "room_id": 4, "end_time": "09:15:00", "event_date": "2015-10-04", "start_time": "08:30:00", "type": "Break", "id": 37, "name": "Registration & Breakfast" } ], "09:30:00 - 10:15:00": [ { "conference": "http://in.pycon.org/cfp/api/v1/conferences/1/", "session": { "description": "" }, "room_id": 1, "end_time": "10:15:00", "event_date": "2015-10-04", "start_time": "09:30:00", "type": "Talk", "id": 38, "name": "Keynote - Nicholas H.Tollervey" } ],}
Device - Register¶
Endpoint:
/api/v1/devices/Allowed Method:
POSTJunction accepts feedback via API. We support anonymous feedback, but the device registration is mandatory. Registered device can only submit the feedback.
Payload:
{'uuid': 'uuid-1'}.Response: If UUID exists status code is
400else the status code is201with data.
Feedback Questions - List¶
Endpoint:
/api/v1/feedback_questions/?conference_id=<id>Allowed Method:
GETFetch all feedback questions for the conference.
Sample Response:
{ "Workshop": { "text": [ { "schedule_item_type": "Workshop", "is_required": false, "type": "text", "id": 2, "title": "Any other feedback for workshop ?" } ], "choice": [ { "title": "Does the speaker have experience on the subject?", "schedule_item_type": "Workshop", "allowed_choices": [ { "id": 15, "value": 2, "title": "Good" }, { "id": 14, "value": 1, "title": "Ok" }, { "id": 13, "value": 0, "title": "Bad" } ], "is_required": true, "type": "choice", "id": 5 }, { "title": "How hands on was the workshop ?", "schedule_item_type": "Workshop", "allowed_choices": [ { "id": 6, "value": 2, "title": "Good" }, { "id": 5, "value": 1, "title": "Ok" }, { "id": 4, "value": 0, "title": "Bad" } ], "is_required": true, "type": "choice", "id": 2 }, { "title": "How was the content ?", "schedule_item_type": "Workshop", "allowed_choices": [ { "id": 3, "value": 2, "title": "Good" }, { "id": 2, "value": 1, "title": "Ok" }, { "id": 1, "value": 0, "title": "Bad" } ], "is_required": true, "type": "choice", "id": 1 } ] }, "Talk": { "text": [ { "schedule_item_type": "Talk", "is_required": false, "type": "text", "id": 1, "title": "Any other feedback for the talk ?" } ], "choice": [ { "title": "Does the speaker have experience on the subject?", "schedule_item_type": "Talk", "allowed_choices": [ { "id": 18, "value": 2, "title": "Good" }, { "id": 17, "value": 1, "title": "Ok" }, { "id": 16, "value": 0, "title": "Bad" } ], "is_required": true, "type": "choice", "id": 6 }, { "title": "How was the presentation ?", "schedule_item_type": "Talk", "allowed_choices": [ { "id": 12, "value": 2, "title": "Good" }, { "id": 11, "value": 1, "title": "Ok" }, { "id": 10, "value": 0, "title": "Bad" } ], "is_required": true, "type": "choice", "id": 4 }, { "title": "How was the content ?", "schedule_item_type": "Talk", "allowed_choices": [ { "id": 9, "value": 2, "title": "Good" }, { "id": 8, "value": 1, "title": "Ok" }, { "id": 7, "value": 0, "title": "Bad" } ], "is_required": true, "type": "choice", "id": 3 } ] } }
Response data keys are session types.
WorkshopandTalksession type questions are values of the respective key. Each of the session types contains two keys,textandchoice.textdictionary contains text type questions andchoicedictionary contains choice based questions. Both the question type has some common fields.idis the unique identifier of the question.titleis the displayable text of the question.is_requiredis the boolean field,truemeans feedback should have an answer for the item.choicequestions haveallowed_choices, which contains allowed values. Each item is a dictionary containingid,title,value. Usetitleto display the answer.
Feedback submission¶
Endpoint:
/api/v1/feedbackAllowed Methods:
POST.Header: ‘Token: <registered_device_uuid>`.
Sample Payload:
{'text': [{'text': 'Ok', 'id': 1}], 'schedule_item_id': 1, 'choices': [{'id': 1, 'value_id': 1}]}
schedule_item_idis theidof the session accepting feedback. The payload containstextandchoicesanswers.When request succeeds, the status code is
200and when the request fails, the status code is400or403. When the input data is incorrect code is400and403when device token is missing.Sample success response: 201
{'text': [{'text': 'Ok', 'id': 1}], 'schedule_item_id': 1, 'choices': [{'id': 1, 'value_id': 1}]}
Sample failure response: 400
{'choices': [{u'non_field_errors': [u"The multiple choice value isn't associated with question"]}]}
Sample failure response: 403
{u'detail': u'Authentication credentials were not provided.'}