API Reference · 영어 퀴즈
퀴즈 답안 제출
문항의 답을 제출하고 서버 채점 결과를 받습니다. 문항은 순서대로만 풀 수 있고, 틀리면 같은 문항을 다시 제출합니다. 마지막 문항을 맞히면 서버가 슬롯 완료 포인트와 월 출석 보너스를 판정해 결과를 함께 반환합니다. claim: deferred 면 지급은 사용자가 보상을 받을 때(수령 API)로 미룹니다.
POST
/api/v1/contents/{content_id}/quiz/slots/{slot_key}/answers요청 파라미터
content_id(path, uuid, required) — 퀴즈 콘텐츠 ID.slot_key(path, string, required) — 시작한 슬롯 키.item_id(body, uuid, required) — 답할 문항.answer_index(body, int, required) — 선택한 보기의answers배열 인덱스(0부터). 보기 순서는 서버가 고정하므로 받은 순서 그대로 표시하세요.claim(body, string, optional) —"deferred"면 지연 지급. 이 요청이 슬롯을 완료하면 판정(검증·한도·이벤트 기록)까지만 하고, 지급(포스트백/내부 적립)은 세트 보상 받기·출석 보너스 받기 때 합니다. 생략하면 완료 시점에 바로 지급합니다. 다른 값은400.
요청예시
shell
curl -X POST -H "Authorization: Bearer sess_prod_0193a1b2-3c4d-7e6f-8890-abcdef012345" \
-H "Content-Type: application/json" \
-d '{"item_id":"01a0f522-0000-7000-8000-000000000004","answer_index":0}' \
"https://added.blomics.net/api/v1/contents/0193a1b2-3c4d-5e6f-7890-abcdef012345/quiz/slots/20261001-2/answers"응답 필드
correct(boolean) — 정답 여부. 오답이어도 정답은 알려주지 않습니다.already_solved(boolean) — 이미 맞힌 문항의 재전송. 상태만 돌려주며 중복 지급되지 않습니다.solved_count(int 0~3) — 지금까지 맞힌 문항 수.slot_completed(boolean) — 슬롯 완료 여부.reward(object, nullable) — 슬롯 완료 보상 결과(완료 시).summary{ matched, granted, rejected, skipped }와legs(캠페인별 지급 결과:outcomegranted/rejected,point,reject_reason). 형식은 이벤트 저장 응답과 같습니다. 지연 지급이면 지급을 미룬 승인 leg 에payout: "pending"(이때postback_id·delivery없음)이 붙고, 받을 것이 있으면reward.claim_status: "unclaimed"가 붙습니다.attendance(object, nullable) — 슬롯이 완료된 응답에만(마지막 답 재전송 포함). 오늘의 퀴즈 조회의attendance(단계별outcome·point·granted_at·reward포함)에 더해:granted_now(int[]) — 이 요청이 판정한 보너스 단계(기준 일수). 재전송이면 빈 배열.rewards(array) —granted_now단계별 지급 결과.days,granted_at,outcome(granted/rejected/error),point(지급된 포인트 합, 거절·오류면 0),summary·legs(reward와 같은 형식). 지연 지급이면claim_status: "unclaimed"가 붙습니다(tiers[]도 같음).
응답예시 — 오답
json
{ "correct": false, "already_solved": false, "solved_count": 2, "slot_completed": false, "reward": null, "attendance": null }응답예시 — 마지막 문항 정답(슬롯 완료)
json
{
"correct": true,
"already_solved": false,
"solved_count": 3,
"slot_completed": true,
"reward": {
"summary": { "matched": 1, "granted": 1, "rejected": 0, "skipped": 0 },
"legs": [
{ "campaign_id": "0193…", "campaign_type": "always_on", "parent_campaign_id": null,
"event_id": "0193…", "event_type": "quiz_slot_completed",
"outcome": "granted", "event_log_id": "0193…", "point": 10, "postback_id": "0193…" }
]
},
"attendance": {
"month": "2026-10", "attended_days": 20,
"tiers": [{ "days": 20, "granted": true, "granted_at": "2026-10-20T03:12:09.000Z",
"outcome": "granted", "point": 5, "reward": { "summary": { … }, "legs": [ … ] } }],
"granted_now": [20],
"rewards": [{
"days": 20, "granted_at": "2026-10-20T03:12:09.000Z", "outcome": "granted", "point": 5,
"summary": { "matched": 1, "granted": 1, "rejected": 0, "skipped": 0 },
"legs": [{ "campaign_id": "0193…", "event_type": "quiz_attendance_bonus",
"outcome": "granted", "event_log_id": "0193…", "point": 5, "postback_id": "0193…" }]
}]
}
}출석 보너스 안내 문구 분기
안내 금액은
rewards[].point(또는 tiers[].point)를 쓰세요. 캠페인이 여러 개면 합산된 값이라 legs[].point 를 직접 더할 필요가 없습니다. outcome 이 granted 면 지급 안내, rejected 면 지급 한도 등으로 지급되지 않음(사유는 legs[].reject_reason), error 면 처리 지연 안내로 분기합니다. 출석 보너스 이벤트가 캠페인에 아직 없으면 단계가 판정되지 않고(granted_now 에 없음) 등록 후 다음 슬롯 완료 때 지급됩니다.재시도·중복 제출
네트워크 오류로 마지막 답 응답을 못 받았다면 같은 요청을 다시 보내세요. 이미 완료된 슬롯이면
already_solved: true 와 함께 처음 지급 결과(reward)와 그달 출석 결과(attendance.tiers, 이때 granted_now·rewards 는 빈 배열)를 돌려줍니다. 같은 슬롯 보상은 세션을 바꿔도 사용자당 1회만 지급됩니다.에러처리
400INVALID_PARAM—slot_key·item_id형식 오류,answer_index범위 밖,claim이"deferred"가 아님.401UNAUTHORIZED/SESSION_EXPIRED— 세션 인증 실패·만료.404NOT_FOUND— 퀴즈 콘텐츠 아님, 이 슬롯에 없는 문항.499QUIZ_SLOT_NOT_STARTED— start 없이 제출.499QUIZ_ITEM_OUT_OF_ORDER— 앞 문항을 맞히기 전 다음 문항 제출.data.expected_position포함.499QUIZ_SLOT_NOT_OPEN— 완료 마감(answer_deadline) 경과.500INTERNAL_ERROR— 서버 오류.