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不正なリクエストパラメータを指定している
401APIアクセストークンが不正、または権限不正(イベントの管理者ではない場合、利用停止中のアカウントの場合を含む)
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イベントIDYes

Response

項目内容
questionsquestion の配列
{
  "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イベントIDYes
question_id問題ID(IDは問題一覧から取得してください)Yes

Response

項目内容
questionquestion
answersanswer の配列
{
  "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イベントIDYes

Response

レスポンスの形式は「問題詳細」と同じです。

項目内容
questionquestion
answersanswer の配列
{
  "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イベントIDYes--
periodピリオドYes-直近集計された問題のピリオドを使用したい場合は
last_aggregate を指定してください

例: 直近に集計された問題のピリオドのチャンピオンを取得する

GET /programs/1/periods/last_aggregate/champion

Response

項目内容
championmember。チャンピオンが確定していない場合は null
{
  "champion": {
    "id": 1,
    "admin": false,
    "user": {
      "id": 1,
      "name": "クアッガ",
      "name_gana": "くあっが"
    }
  }
}

特定のピリオドの成績

指定したピリオドの成績(ランキング)を取得します。 まだ1問も集計していない場合は 404 が返却されます。

GET /programs/{event_id}/result/period

Request

period はパスではなく、クエリパラメータで指定します。

パラメータ内容必須デフォルト値
event_idイベントIDYes-
periodピリオドNo直近集計された問題のピリオド

例: ピリオド2の成績を取得する

GET /programs/1/result/period?period=2

Response

項目内容
resultsresult の配列
{
  "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イベントIDYes-

Response

レスポンスの形式は「特定のピリオドの成績」と同じです。

項目内容
resultsresult の配列
{
  "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文字列名前(ひらがな)