Sign In
๋ฉ€ํ‹ฐํด๋ž˜์Šค ๊ด€๋ฆฌ
๊ทธ๋ผ์šด๋“œ ์š”๊ธˆ์ œ ๋ฐ ๋ฌธ์˜
๊ทธ๋ผ์šด๋“œ ์†Œ์‚ฌ์ด์–ดํ‹ฐ ๊ฒฝ์ œ ์ •์ฑ… ์„ค๊ณ„ ๊ฐ€์ด๋“œ
Subscribe

๐ŸŒฝ ๊ทธ๋ผ์šด๋“œ ํ•™๊ธ‰ ๋ฏธ์…˜ ์กฐํšŒ API ๊ฐ€์ด๋“œ

๐Ÿ‘‰๐Ÿป ๊ทธ๋ผ์šด๋“œ์—์„œ ํ•™๊ธ‰ ์ด ํฌ์ธํŠธ์™€ ํ•™๊ธ‰ ๋ฏธ์…˜ ํ˜„ํ™ฉ์„ ์กฐํšŒํ•˜๋Š” API ๊ธฐ๋Šฅ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋ชฉ์ฐจ

์‹œ์ž‘ํ•˜๊ธฐ

๊ทธ๋ผ์šด๋“œ ํ•™๊ธ‰ ๋ฏธ์…˜ ์กฐํšŒ API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹ค์Œ ์ •๋ณด๋ฅผ ํ•œ ๋ฒˆ์— ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
ํ•ด๋‹น ํ•™๊ธ‰์˜ ์ด ๋ˆ„์  ํฌ์ธํŠธ
โ€ข
ํ•ด๋‹น ํ•™๊ธ‰์˜ ๋ฏธ์…˜ ๋ชฉ๋ก
โ€ข
๋ฏธ์…˜ ๋‹ฌ์„ฑ ์ˆ˜, ๋‹ฌ์„ฑ๋ฅ , ๋‹ค์Œ ๋ฏธ์…˜

๊ธฐ๋ณธ ์ •๋ณด

โ€ข
Base URL: https://growndcard.com
โ€ข
ํ”„๋กœํ† ์ฝœ: HTTPS
โ€ข
์ธ์ฆ ๋ฐฉ์‹: API Key (X-API-Key ํ—ค๋”)
โ€ข
๊ถŒ์žฅ ๊ถŒํ•œ: readClassMissions
์ฐธ๊ณ : ๊ธฐ์กด์— ๋ฐœ๊ธ‰๋œ ์ผ๋ถ€ API ํ‚ค๋Š” readStudents ๊ถŒํ•œ์œผ๋กœ๋„ ํ•™๊ธ‰ ๋ฏธ์…˜ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ ๊ทœ ํ‚ค๋Š” readClassMissions ๊ถŒํ•œ์„ ๋ณ„๋„๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

API ํ‚ค ๋ฐœ๊ธ‰

1. ๊ทธ๋ผ์šด๋“œ์— ๋กœ๊ทธ์ธ

๊ต์‚ฌ ๊ณ„์ •์œผ๋กœ ๊ทธ๋ผ์šด๋“œ์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.

2. ๋‚ด ์ •๋ณด ํŽ˜์ด์ง€ ์ด๋™

์šฐ์ธก ์ƒ๋‹จ ํ”„๋กœํ•„ โ†’ ๋‚ด ์ •๋ณด ํด๋ฆญ

3. API ํ‚ค ๊ด€๋ฆฌ ํƒญ

API ํ‚ค ๊ด€๋ฆฌ ํƒญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

4. ์ƒˆ API ํ‚ค ์ƒ์„ฑ

1.
"์ƒˆ API ํ‚ค ์ƒ์„ฑ" ๋ฒ„ํŠผ ํด๋ฆญ
2.
๋‹ค์Œ ์ •๋ณด ์ž…๋ ฅ
โ€ข
API ํ‚ค ์ด๋ฆ„: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„
โ€ข
๋งŒ๋ฃŒ ๊ธฐ๊ฐ„: ๋ฌด์ œํ•œ ๋˜๋Š” 30์ผ, 90์ผ, 180์ผ, 1๋…„
โ€ข
๊ถŒํ•œ ์„ค์ •:
โ—ฆ
โœ… readClassMissions ๊ถŒํ•œ ๊ถŒ์žฅ
โ€ข
ํ˜ธ์ถœ ์ œํ•œ: ๊ธฐ๋ณธ๊ฐ’ ๋ถ„๋‹น 60ํšŒ, ์ผ์ผ 500ํšŒ
1.
"API ํ‚ค ์ƒ์„ฑ" ํด๋ฆญ

5. API ํ‚ค ์ €์žฅ

โš ๏ธ API ํ‚ค๋Š” ํ•œ ๋ฒˆ๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p2
๋ฐ˜๋“œ์‹œ ์•ˆ์ „ํ•œ ๊ณณ์— ๋ณต์‚ฌํ•˜์—ฌ ๋ณด๊ด€ํ•˜์„ธ์š”.

์ธ์ฆ ๋ฐฉ์‹

๋ชจ๋“  API ์š”์ฒญ์—๋Š” X-API-Key ํ—ค๋”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
X-API-Key: sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p2

ํ•™๊ธ‰ ๋ฏธ์…˜ ์กฐํšŒ API

์—”๋“œํฌ์ธํŠธ

GET /api/v1/classes/{classId}/missions

URL ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ
ํƒ€์ž…
์„ค๋ช…
์˜ˆ์‹œ
classId
string
ํด๋ž˜์Šค ID
NP0hetJ3wyQKFtRnFeftmPiy8Dl2_2
๐Ÿ’ก classId ํ™•์ธ ๋ฐฉ๋ฒ•: ๊ทธ๋ผ์šด๋“œ โ†’ ํด๋ž˜์Šค ๊ด€๋ฆฌ โ†’ ํด๋ž˜์Šค ์นด๋“œ์—์„œ "ID" ํ™•์ธ

์š”์ฒญ ํ—ค๋”

ํ—ค๋”
๊ฐ’
ํ•„์ˆ˜
X-API-Key
๋ฐœ๊ธ‰๋ฐ›์€ API ํ‚ค
โœ…

๋™์ž‘ ๋ฐฉ์‹

โ€ข
ํ•™๊ธ‰์˜ ๋ชจ๋“  ํ•™์ƒ totalPoints๋ฅผ ํ•ฉ์‚ฐํ•ด classTotalPoints๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
โ€ข
missions ์„œ๋ธŒ์ปฌ๋ ‰์…˜์˜ ๋ฏธ์…˜์„ targetPoint ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
โ€ข
ํ˜„์žฌ ์ด์  ์ด์ƒ์— ๋„๋‹ฌํ•œ ๋ฏธ๋‹ฌ์„ฑ ๋ฏธ์…˜์€ ์ž๋™์œผ๋กœ ๋‹ฌ์„ฑ ์ฒ˜๋ฆฌํ•œ ๋’ค ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์„ฑ๊ณต ์‘๋‹ต ์˜ˆ์‹œ

{ "success": true, "data": { "classId": "NP0hetJ3wyQKFtRnFeftmPiy8Dl2_2", "classTotalPoints": 1820, "missionSummary": { "totalMissions": 4, "achievedMissions": 2, "pendingMissions": 2, "achievementRate": 50, "status": "in_progress", "nextMission": { "missionId": "mission_003", "targetPoint": 2000, "reward": "์˜ํ™” ๋ณด๊ธฐ", "remainingPoints": 180 } }, "missions": [ { "missionId": "mission_001", "targetPoint": 500, "reward": "๊ฐ„์‹ ๋ฐ์ด", "achieved": true, "achievedAt": "2026-03-20T02:10:00.000Z", "createdAt": "2026-03-01T01:00:00.000Z", "updatedAt": "2026-03-20T02:10:00.000Z" }, { "missionId": "mission_002", "targetPoint": 1000, "reward": "์ž์œจ ๋†€์ด ์‹œ๊ฐ„", "achieved": true, "achievedAt": "2026-03-25T02:10:00.000Z", "createdAt": "2026-03-05T01:00:00.000Z", "updatedAt": "2026-03-25T02:10:00.000Z" }, { "missionId": "mission_003", "targetPoint": 2000, "reward": "์˜ํ™” ๋ณด๊ธฐ", "achieved": false, "achievedAt": null, "createdAt": "2026-03-10T01:00:00.000Z", "updatedAt": null } ] }, "message": "ํ•™๊ธ‰ ๋ฏธ์…˜ ํ˜„ํ™ฉ ์กฐํšŒ์— ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค." }

์‘๋‹ต ๋ฐ์ดํ„ฐ ์ƒ์„ธ

์ตœ์ƒ์œ„ ๋ฐ์ดํ„ฐ

ํ•„๋“œ
ํƒ€์ž…
์„ค๋ช…
classId
string
ํด๋ž˜์Šค ID
classTotalPoints
number
ํ•™๊ธ‰ ์ „์ฒด ํ•™์ƒ์˜ ์ด ํฌ์ธํŠธ ํ•ฉ๊ณ„
missionSummary
object
๋ฏธ์…˜ ์š”์•ฝ ์ •๋ณด
missions
array
๋ฏธ์…˜ ๋ชฉ๋ก

missionSummary

ํ•„๋“œ
ํƒ€์ž…
์„ค๋ช…
totalMissions
number
์ „์ฒด ๋ฏธ์…˜ ๊ฐœ์ˆ˜
achievedMissions
number
๋‹ฌ์„ฑํ•œ ๋ฏธ์…˜ ๊ฐœ์ˆ˜
pendingMissions
number
๋‚จ์€ ๋ฏธ์…˜ ๊ฐœ์ˆ˜
achievementRate
number
๋‹ฌ์„ฑ๋ฅ  (0~100)
status
string
empty, in_progress, completed
nextMission
object or null
๋‹ค์Œ ๋ชฉํ‘œ ๋ฏธ์…˜ ์ •๋ณด

nextMission

ํ•„๋“œ
ํƒ€์ž…
์„ค๋ช…
missionId
string
๋‹ค์Œ ๋ฏธ์…˜ ID
targetPoint
number
๋ชฉํ‘œ ํฌ์ธํŠธ
reward
string
๋‹ฌ์„ฑ ๋ณด์ƒ ์„ค๋ช…
remainingPoints
number
๋‹ค์Œ ๋ชฉํ‘œ๊นŒ์ง€ ๋‚จ์€ ํฌ์ธํŠธ

missions ๋ฐฐ์—ด ๊ฐ ํ•ญ๋ชฉ

ํ•„๋“œ
ํƒ€์ž…
์„ค๋ช…
missionId
string
๋ฏธ์…˜ ๋ฌธ์„œ ID
targetPoint
number
๋ชฉํ‘œ ํฌ์ธํŠธ
reward
string
๋‹ฌ์„ฑ ๋ณด์ƒ
achieved
boolean
๋‹ฌ์„ฑ ์—ฌ๋ถ€
achievedAt
string or null
๋‹ฌ์„ฑ ์‹œ๊ฐ
createdAt
string or null
์ƒ์„ฑ ์‹œ๊ฐ
updatedAt
string or null
์ˆ˜์ • ์‹œ๊ฐ

์—๋Ÿฌ ์ฒ˜๋ฆฌ

์—๋Ÿฌ ์‘๋‹ต ํ˜•์‹

{ "success": false, "error": { "code": "error_code", "message": "์—๋Ÿฌ ๋ฉ”์‹œ์ง€", "details": {} } }

์—๋Ÿฌ ์ฝ”๋“œ

์ƒํƒœ ์ฝ”๋“œ
์—๋Ÿฌ ์ฝ”๋“œ
์„ค๋ช…
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
400
invalid_class_id
ํด๋ž˜์Šค ID๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์Œ
classId ํ™•์ธ
401
unauthorized
API ํ‚ค๊ฐ€ ์—†๊ฑฐ๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์Œ
API ํ‚ค์™€ ํ—ค๋” ํ™•์ธ
403
forbidden
ํ•ด๋‹น ํด๋ž˜์Šค ์ ‘๊ทผ ๊ถŒํ•œ ์—†์Œ
classId ๊ถŒํ•œ ํ™•์ธ
403
insufficient_permissions
ํ•™๊ธ‰ ๋ฏธ์…˜ ์กฐํšŒ ๊ถŒํ•œ์ด ์—†์Œ
readClassMissions ๊ถŒํ•œ ํ™•์ธ
404
class_not_found
ํด๋ž˜์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ
classId ํ™•์ธ
429
rate_limit_exceeded
ํ˜ธ์ถœ ์ œํ•œ ์ดˆ๊ณผ
์ž ์‹œ ํ›„ ์žฌ์‹œ๋„
500
internal_error
์„œ๋ฒ„ ๋‚ด๋ถ€ ์˜ค๋ฅ˜
์ž ์‹œ ํ›„ ์žฌ์‹œ๋„

์—๋Ÿฌ ์‘๋‹ต ์˜ˆ์‹œ

{ "success": false, "error": { "code": "insufficient_permissions", "message": "ํ•™๊ธ‰ ๋ฏธ์…˜ ์กฐํšŒ ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.", "details": { "requiredPermission": "readClassMissions" } } }

์ฝ”๋“œ ์˜ˆ์ œ

cURL

curl -X GET \ "https://growndcard.com/api/v1/classes/NP0hetJ3wyQKFtRnFeftmPiy8Dl2_2/missions" \ -H "X-API-Key: sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p2"

JavaScript (Node.js)

const fetch = require('node-fetch'); const API_KEY = 'sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p2'; const BASE_URL = 'https://growndcard.com'; const CLASS_ID = 'NP0hetJ3wyQKFtRnFeftmPiy8Dl2_2'; async function getClassMissionStatus() { const response = await fetch( `${BASE_URL}/api/v1/classes/${CLASS_ID}/missions`, { method: 'GET', headers: { 'X-API-Key': API_KEY } } ); const data = await response.json(); if (!response.ok) { throw new Error(data.error?.message || 'API ํ˜ธ์ถœ ์‹คํŒจ'); } return data.data; } getClassMissionStatus() .then(result => { console.log('ํ•™๊ธ‰ ์ด ํฌ์ธํŠธ:', result.classTotalPoints); console.log('๋‹ฌ์„ฑ๋ฅ :', result.missionSummary.achievementRate); console.log('๋‹ค์Œ ๋ฏธ์…˜:', result.missionSummary.nextMission); }) .catch(error => console.error('์—๋Ÿฌ:', error));

Python

import requests API_KEY = 'sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p2' BASE_URL = 'https://growndcard.com' CLASS_ID = 'NP0hetJ3wyQKFtRnFeftmPiy8Dl2_2' def get_class_mission_status(): response = requests.get( f'{BASE_URL}/api/v1/classes/{CLASS_ID}/missions', headers={ 'X-API-Key': API_KEY } ) response.raise_for_status() return response.json()['data'] result = get_class_mission_status() print('ํ•™๊ธ‰ ์ด ํฌ์ธํŠธ:', result['classTotalPoints']) print('๋ฏธ์…˜ ๋‹ฌ์„ฑ๋ฅ :', result['missionSummary']['achievementRate'])

์ œํ•œ ์‚ฌํ•ญ

โ€ข
๊ต์‚ฌ ๊ณ„์ •๋‹น API ํ‚ค ์ตœ๋Œ€ 3๊ฐœ ์ƒ์„ฑ ๊ฐ€๋Šฅ
โ€ข
๋ถ„๋‹น ์ตœ๋Œ€ 60ํšŒ, ์ผ์ผ ์ตœ๋Œ€ 500ํšŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
โ€ข
API ํ‚ค๋Š” ์ƒ์„ฑ ์‹œ ํ•œ ๋ฒˆ๋งŒ ํ‘œ์‹œ๋จ
โ€ข
ํ•™๊ธ‰ ์ ‘๊ทผ ๊ถŒํ•œ์ด ์žˆ๋Š” ํด๋ž˜์Šค๋งŒ ์กฐํšŒ ๊ฐ€๋Šฅ
๐Ÿ‘‰๐Ÿป ๊ทธ๋ผ์šด๋“œ์—์„œ ํ•™๊ธ‰ ์ด ํฌ์ธํŠธ์™€ ํ•™๊ธ‰ ๋ฏธ์…˜ ํ˜„ํ™ฉ์„ ์กฐํšŒํ•˜๋Š” API ๊ธฐ๋Šฅ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋ชฉ์ฐจ

์‹œ์ž‘ํ•˜๊ธฐ

๊ทธ๋ผ์šด๋“œ ํ•™๊ธ‰ ๋ฏธ์…˜ ์กฐํšŒ API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹ค์Œ ์ •๋ณด๋ฅผ ํ•œ ๋ฒˆ์— ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
ํ•ด๋‹น ํ•™๊ธ‰์˜ ์ด ๋ˆ„์  ํฌ์ธํŠธ
โ€ข
ํ•ด๋‹น ํ•™๊ธ‰์˜ ๋ฏธ์…˜ ๋ชฉ๋ก
โ€ข
๋ฏธ์…˜ ๋‹ฌ์„ฑ ์ˆ˜, ๋‹ฌ์„ฑ๋ฅ , ๋‹ค์Œ ๋ฏธ์…˜

๊ธฐ๋ณธ ์ •๋ณด

โ€ข
Base URL: https://growndcard.com
โ€ข
ํ”„๋กœํ† ์ฝœ: HTTPS
โ€ข
์ธ์ฆ ๋ฐฉ์‹: API Key (X-API-Key ํ—ค๋”)
โ€ข
๊ถŒ์žฅ ๊ถŒํ•œ: readClassMissions
์ฐธ๊ณ : ๊ธฐ์กด์— ๋ฐœ๊ธ‰๋œ ์ผ๋ถ€ API ํ‚ค๋Š” readStudents ๊ถŒํ•œ์œผ๋กœ๋„ ํ•™๊ธ‰ ๋ฏธ์…˜ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ ๊ทœ ํ‚ค๋Š” readClassMissions ๊ถŒํ•œ์„ ๋ณ„๋„๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

API ํ‚ค ๋ฐœ๊ธ‰

1. ๊ทธ๋ผ์šด๋“œ์— ๋กœ๊ทธ์ธ

๊ต์‚ฌ ๊ณ„์ •์œผ๋กœ ๊ทธ๋ผ์šด๋“œ์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.

2. ๋‚ด ์ •๋ณด ํŽ˜์ด์ง€ ์ด๋™

์šฐ์ธก ์ƒ๋‹จ ํ”„๋กœํ•„ โ†’ ๋‚ด ์ •๋ณด ํด๋ฆญ

3. API ํ‚ค ๊ด€๋ฆฌ ํƒญ

API ํ‚ค ๊ด€๋ฆฌ ํƒญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

4. ์ƒˆ API ํ‚ค ์ƒ์„ฑ

1.
"์ƒˆ API ํ‚ค ์ƒ์„ฑ" ๋ฒ„ํŠผ ํด๋ฆญ
2.
๋‹ค์Œ ์ •๋ณด ์ž…๋ ฅ
โ€ข
API ํ‚ค ์ด๋ฆ„: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„
โ€ข
๋งŒ๋ฃŒ ๊ธฐ๊ฐ„: ๋ฌด์ œํ•œ ๋˜๋Š” 30์ผ, 90์ผ, 180์ผ, 1๋…„
โ€ข
๊ถŒํ•œ ์„ค์ •:
โ—ฆ
โœ… readClassMissions ๊ถŒํ•œ ๊ถŒ์žฅ
โ€ข
ํ˜ธ์ถœ ์ œํ•œ: ๊ธฐ๋ณธ๊ฐ’ ๋ถ„๋‹น 60ํšŒ, ์ผ์ผ 500ํšŒ
1.
"API ํ‚ค ์ƒ์„ฑ" ํด๋ฆญ

5. API ํ‚ค ์ €์žฅ

โš ๏ธ API ํ‚ค๋Š” ํ•œ ๋ฒˆ๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p2
๋ฐ˜๋“œ์‹œ ์•ˆ์ „ํ•œ ๊ณณ์— ๋ณต์‚ฌํ•˜์—ฌ ๋ณด๊ด€ํ•˜์„ธ์š”.

์ธ์ฆ ๋ฐฉ์‹

๋ชจ๋“  API ์š”์ฒญ์—๋Š” X-API-Key ํ—ค๋”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
X-API-Key: sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p2

ํ•™๊ธ‰ ๋ฏธ์…˜ ์กฐํšŒ API

์—”๋“œํฌ์ธํŠธ

GET /api/v1/classes/{classId}/missions

URL ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ
ํƒ€์ž…
์„ค๋ช…
์˜ˆ์‹œ
classId
string
ํด๋ž˜์Šค ID
NP0hetJ3wyQKFtRnFeftmPiy8Dl2_2
๐Ÿ’ก classId ํ™•์ธ ๋ฐฉ๋ฒ•: ๊ทธ๋ผ์šด๋“œ โ†’ ํด๋ž˜์Šค ๊ด€๋ฆฌ โ†’ ํด๋ž˜์Šค ์นด๋“œ์—์„œ "ID" ํ™•์ธ

์š”์ฒญ ํ—ค๋”

ํ—ค๋”
๊ฐ’
ํ•„์ˆ˜
X-API-Key
๋ฐœ๊ธ‰๋ฐ›์€ API ํ‚ค
โœ…

๋™์ž‘ ๋ฐฉ์‹

โ€ข
ํ•™๊ธ‰์˜ ๋ชจ๋“  ํ•™์ƒ totalPoints๋ฅผ ํ•ฉ์‚ฐํ•ด classTotalPoints๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
โ€ข
missions ์„œ๋ธŒ์ปฌ๋ ‰์…˜์˜ ๋ฏธ์…˜์„ targetPoint ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
โ€ข
ํ˜„์žฌ ์ด์  ์ด์ƒ์— ๋„๋‹ฌํ•œ ๋ฏธ๋‹ฌ์„ฑ ๋ฏธ์…˜์€ ์ž๋™์œผ๋กœ ๋‹ฌ์„ฑ ์ฒ˜๋ฆฌํ•œ ๋’ค ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์„ฑ๊ณต ์‘๋‹ต ์˜ˆ์‹œ

{ "success": true, "data": { "classId": "NP0hetJ3wyQKFtRnFeftmPiy8Dl2_2", "classTotalPoints": 1820, "missionSummary": { "totalMissions": 4, "achievedMissions": 2, "pendingMissions": 2, "achievementRate": 50, "status": "in_progress", "nextMission": { "missionId": "mission_003", "targetPoint": 2000, "reward": "์˜ํ™” ๋ณด๊ธฐ", "remainingPoints": 180 } }, "missions": [ { "missionId": "mission_001", "targetPoint": 500, "reward": "๊ฐ„์‹ ๋ฐ์ด", "achieved": true, "achievedAt": "2026-03-20T02:10:00.000Z", "createdAt": "2026-03-01T01:00:00.000Z", "updatedAt": "2026-03-20T02:10:00.000Z" }, { "missionId": "mission_002", "targetPoint": 1000, "reward": "์ž์œจ ๋†€์ด ์‹œ๊ฐ„", "achieved": true, "achievedAt": "2026-03-25T02:10:00.000Z", "createdAt": "2026-03-05T01:00:00.000Z", "updatedAt": "2026-03-25T02:10:00.000Z" }, { "missionId": "mission_003", "targetPoint": 2000, "reward": "์˜ํ™” ๋ณด๊ธฐ", "achieved": false, "achievedAt": null, "createdAt": "2026-03-10T01:00:00.000Z", "updatedAt": null } ] }, "message": "ํ•™๊ธ‰ ๋ฏธ์…˜ ํ˜„ํ™ฉ ์กฐํšŒ์— ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค." }

์‘๋‹ต ๋ฐ์ดํ„ฐ ์ƒ์„ธ

์ตœ์ƒ์œ„ ๋ฐ์ดํ„ฐ

ํ•„๋“œ
ํƒ€์ž…
์„ค๋ช…
classId
string
ํด๋ž˜์Šค ID
classTotalPoints
number
ํ•™๊ธ‰ ์ „์ฒด ํ•™์ƒ์˜ ์ด ํฌ์ธํŠธ ํ•ฉ๊ณ„
missionSummary
object
๋ฏธ์…˜ ์š”์•ฝ ์ •๋ณด
missions
array
๋ฏธ์…˜ ๋ชฉ๋ก

missionSummary

ํ•„๋“œ
ํƒ€์ž…
์„ค๋ช…
totalMissions
number
์ „์ฒด ๋ฏธ์…˜ ๊ฐœ์ˆ˜
achievedMissions
number
๋‹ฌ์„ฑํ•œ ๋ฏธ์…˜ ๊ฐœ์ˆ˜
pendingMissions
number
๋‚จ์€ ๋ฏธ์…˜ ๊ฐœ์ˆ˜
achievementRate
number
๋‹ฌ์„ฑ๋ฅ  (0~100)
status
string
empty, in_progress, completed