Quagga APIリファレンス
初めて使う場合は、先にQuagga API概要を読んでください。
概要
APIエンドポイント
https://quagga.studio/api/v1
以降に出てくるパスは、このエンドポイントに続けて指定します。
例: GET /programs/1/result/total は https://quagga.studio/api/v1/programs/1/result/total に送ります。
データ形式
JSON
アクセストークン
全てのAPIリクエストに、Authorizationリクエストヘッダでアクセストークンを付与してください。 アクセストークンは、プロフィールの「アクセストークン」に記載されています。
Authorization: Bearer QuAGGa2023APitoKeNSAMPle
上記はサンプルです。実際には、ご自身のアクセストークンを指定してください。
対象イベントの管理者のアカウントのアクセストークンのみ利用できます。
管理者ではない場合は 401 が返却されます。
アクセストークンは他の人に知られないように管理してください。
イベントID
特定のイベントの情報を取得する場合は、イベントIDが必要です。
イベントIDは回答/管理画面のURLから取得することができます。
例 (以下では、「1」がイベントIDになります)
https://quagga.studio/programs/1/quiz
https://quagga.studio/programs/1/admin
リクエスト例
イベントID 1 の暫定総合成績を取得する例です。
curl -H "Authorization: Bearer QuAGGa2023APitoKeNSAMPle" https://quagga.studio/api/v1/programs/1/result/total
ステータスコード
下記のコードを返却します。
| ステータスコード | 説明 |
|---|---|
| 200 | リクエスト成功 |
| 201 | 登録成功 |
| 204 | リクエストに成功したが返却するbodyが存在しない |
| 400 | 不正なリクエストパラメータを指定している |
| 401 | APIアクセストークンが不正、または権限不正(イベントの管理者ではない場合、利用停止中のアカウントの場合を含む) |
| 404 | 存在しないURLにアクセス、またはイベントや問題が見つからない、まだ集計された問題がない |
| 429 | リクエスト制限を超えている |
| 500 | 不明なエラー |
エラーレスポンス
400 401 404 500 の場合、次の形式で原因が返却されます。
{
"error": {
"message": "認証できませんでした。"
}
}
message には、エラーの内容が日本語で入ります。
利用制限
ユーザ毎に1分間に30リクエストまで受け付けます。
決められた制限を超える場合は、429 Too Many Requests が返却されます。
API
| API | パス | 内容 |
|---|---|---|
| 問題情報一覧 | GET /programs/{event_id}/questions | イベントの全問題を取得する |
| 問題詳細 | GET /programs/{event_id}/questions/{question_id} | 1問の情報と、その回答一覧を取得する |
| 直近に集計された問題情報 | GET /programs/{event_id}/questions/last_aggregate | 直前に集計した問題の情報と回答一覧を取得する |
| 特定のピリオドのチャンピオン情報 | GET /programs/{event_id}/periods/{period}/champion | ピリオドのチャンピオンを取得する |
| 特定のピリオドの成績 | GET /programs/{event_id}/result/period | ピリオドの成績(ランキング)を取得する |
| 暫定総合成績 | GET /programs/{event_id}/result/total | リクエスト時点の総合成績を取得する |
レスポンスに含まれる question answer member user result の各項目は、このページ末尾の「レスポンスの項目」にまとめています。
問題情報一覧
イベントに登録されている問題を、すべて取得します。
GET /programs/{event_id}/questions
Request
| パラメータ | 内容 | 必須 |
|---|---|---|
| event_id | イベントID | Yes |
Response
| 項目 | 内容 |
|---|---|
| questions | question の配列 |
{
"questions": [
{
"id": "40255a8a-944d-461a-9e01-ec3585b1bbee",
"period": 1,
"description": "絵画を発表された順に並べて",
"q_format": "bonus",
"answer": "2,4,1,3",
"point": 3,
"time": 15,
"choice_number": 4,
"answer_number": 4,
"choices": [],
"is_enquete": false,
"money": 250000,
"payment_type_name": "split"
}
]
}
問題詳細
1問の情報と、その問題への回答一覧を取得します。 回答は、回答タイムの早い順に並びます。
GET /programs/{event_id}/questions/{question_id}
Request
| パラメータ | 内容 | 必須 |
|---|---|---|
| event_id | イベントID | Yes |
| question_id | 問題ID(IDは問題一覧から取得してください) | Yes |
Response
| 項目 | 内容 |
|---|---|
| question | question |
| answers | answer の配列 |
{
"question": {
"id": "40255a8a-944d-461a-9e01-ec3585b1bbee",
"period": 1,
"description": "絵画を発表された順に並べて",
"q_format": "bonus",
"answer": "2,4,1,3",
"point": 3,
"time": 15,
"choice_number": 4,
"answer_number": 4,
"choices": [],
"is_enquete": false,
"money": 250000,
"payment_type_name": "split"
},
"answers": [
{
"id": 1,
"answer": "1,2,3,4",
"correct": false,
"point": 4,
"time": "5.63",
"money": "0.0",
"member": {
"id": 1,
"admin": false,
"user": {
"id": 1,
"name": "クアッガ",
"name_gana": "くあっが"
}
},
"question_id": "40255a8a-944d-461a-9e01-ec3585b1bbee"
}
]
}
直近に集計された問題情報
直前に集計した問題の情報と、その問題への回答一覧を取得します。
回答は、回答タイムの早い順に並びます。
まだ1問も集計していない場合は 404 が返却されます。
GET /programs/{event_id}/questions/last_aggregate
Request
| パラメータ | 内容 | 必須 |
|---|---|---|
| event_id | イベントID | Yes |
Response
レスポンスの形式は「問題詳細」と同じです。
| 項目 | 内容 |
|---|---|
| question | question |
| answers | answer の配列 |
{
"question": {
"id": "40255a8a-944d-461a-9e01-ec3585b1bbee",
"period": 1,
"description": "絵画を発表された順に並べて",
"q_format": "bonus",
"answer": "2,4,1,3",
"point": 3,
"time": 15,
"choice_number": 4,
"answer_number": 4,
"choices": [],
"is_enquete": false,
"money": 250000,
"payment_type_name": "split"
},
"answers": [
{
"id": 1,
"answer": "1,2,3,4",
"correct": false,
"point": 4,
"time": "5.63",
"money": "0.0",
"member": {
"id": 1,
"admin": false,
"user": {
"id": 1,
"name": "クアッガ",
"name_gana": "くあっが"
}
},
"question_id": "40255a8a-944d-461a-9e01-ec3585b1bbee"
}
]
}
特定のピリオドのチャンピオン情報
指定したピリオドのチャンピオンを取得します。
GET /programs/{event_id}/periods/{period}/champion
Request
| パラメータ | 内容 | 必須 | デフォルト値 | 備考 |
|---|---|---|---|---|
| event_id | イベントID | Yes | - | - |
| period | ピリオド | Yes | - | 直近集計された問題のピリオドを使用したい場合はlast_aggregate を指定してください |
例: 直近に集計された問題のピリオドのチャンピオンを取得する
GET /programs/1/periods/last_aggregate/champion
Response
| 項目 | 内容 |
|---|---|
| champion | member。チャンピオンが確定していない場合は null |
{
"champion": {
"id": 1,
"admin": false,
"user": {
"id": 1,
"name": "クアッガ",
"name_gana": "くあっが"
}
}
}
特定のピリオドの成績
指定したピリオドの成績(ランキング)を取得します。
まだ1問も集計していない場合は 404 が返却されます。
GET /programs/{event_id}/result/period
Request
period はパスではなく、クエリパラメータで指定します。
| パラメータ | 内容 | 必須 | デフォルト値 |
|---|---|---|---|
| event_id | イベントID | Yes | - |
| period | ピリオド | No | 直近集計された問題のピリオド |
例: ピリオド2の成績を取得する
GET /programs/1/result/period?period=2
Response
| 項目 | 内容 |
|---|---|
| results | result の配列 |
{
"results": [
{
"rank": 1,
"point": 123,
"time": "404.3",
"money": "123456.0",
"member": {
"id": 1,
"admin": false,
"user": {
"id": 1,
"name": "クアッガ",
"name_gana": "くあっが"
}
}
}
]
}
暫定総合成績
リクエスト時点での総合成績(ランキング)を取得します。
GET /programs/{event_id}/result/total
Request
| パラメータ | 内容 | 必須 | デフォルト値 |
|---|---|---|---|
| event_id | イベントID | Yes | - |
Response
レスポンスの形式は「特定のピリオドの成績」と同じです。
| 項目 | 内容 |
|---|---|
| results | result の配列 |
{
"results": [
{
"rank": 1,
"point": 123,
"time": "404.3",
"money": "123456.0",
"member": {
"id": 1,
"admin": false,
"user": {
"id": 1,
"name": "クアッガ",
"name_gana": "くあっが"
}
}
}
]
}
レスポンスの項目
question
問題の情報です。
| 項目 | 型 | 内容 |
|---|---|---|
| id | 文字列 | 問題ID |
| period | 数値 | ピリオド |
| description | 文字列 | 概要 |
| q_format | 文字列 | 出題形式 択一: alternative複数選択: multiple文字入力: input並び替え: sort解数秘匿: secretリスト選択: list複数正解択一: any_ofボーナス: bonus |
| answer | 文字列 | 答え 答えが複数ある場合は「,」で区切り、文字入力・リスト選択の場合は入力・選択された文字列そのまま 複数正解択一の場合は、正解とする選択肢番号を「,」で区切って設定(例: 1,3)。いずれか1つを選べば正解で、正解がない場合は空文字 |
| point | 数値 | 正解時配当ポイント |
| time | 数値 | 回答制限時間(秒) |
| choice_number | 数値 | 選択肢数 |
| answer_number | 数値 | 答えの数 |
| choices | 文字列の配列 | リスト選択の選択肢 リスト選択以外は空の配列 |
| is_enquete | 真偽値 | アンケートか(true: アンケート、false: アンケートではない) |
| money | 数値 | 正解時配当額 |
| payment_type_name | 文字列 | 配当方式 山分け: split(正解者で配当額を山分けする)満額: full(正解者全員が配当額を受け取る) |
answer
参加者1人分の回答です。
| 項目 | 型 | 内容 |
|---|---|---|
| id | 数値 | 回答ID |
| answer | 文字列 | 回答 答えが複数ある場合は「,」で区切り、文字入力・リスト選択の場合は入力・選択された文字列そのまま |
| correct | 真偽値 | 集計の結果、正解しているか(true: 正解、false: 不正解) |
| point | 数値 | 配当ポイント |
| time | 文字列 | 回答タイム |
| money | 文字列 | 配当金額 |
| member | オブジェクト | member |
| question_id | 文字列 | 問題ID |
time と money は、数値ではなく文字列(例: "5.63")で返却されます。
result
参加者1人分の成績です。
| 項目 | 型 | 内容 |
|---|---|---|
| rank | 数値 | 順位 |
| point | 数値 | 獲得ポイント |
| time | 文字列 | 合計回答時間 |
| money | 文字列 | 獲得金額 |
| member | オブジェクト | member |
time と money は、数値ではなく文字列(例: "404.3")で返却されます。
member
イベントの参加者の情報です。
| 項目 | 型 | 内容 |
|---|---|---|
| id | 数値 | 参加者ID |
| admin | 真偽値 | 管理者権限の有無 |
| user | オブジェクト | user |
user
ユーザーの情報です。
| 項目 | 型 | 内容 |
|---|---|---|
| id | 数値 | ユーザーID |
| name | 文字列 | 名前 |
| name_gana | 文字列 | 名前(ひらがな) |