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

๐Ÿ“ฆ ๊ทธ๋ผ์šด๋“œ ์—ญ๋Ÿ‰ ์นด๋“œ API ๊ฐ€์ด๋“œ

๐Ÿ‘‰๐Ÿป ๊ทธ๋ผ์šด๋“œ์—์„œ ํ•™์ƒ์—๊ฒŒ ์—ญ๋Ÿ‰ ์นด๋“œ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ์—ญ๋Ÿ‰์นด๋“œ API ๊ธฐ๋Šฅ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ต์‚ฌ๊ฐ€ ๋“ฑ๋กํ•œ ์—ญ๋Ÿ‰ ์นด๋“œ(์นญ์ฐฌ/๋…ธ๋ ฅ ์นด๋“œ) ๋ชฉ๋ก์„ ์กฐํšŒํ•˜๊ณ , ํ•ด๋‹น ์นด๋“œ๋ฅผ ํ†ตํ•ด ํ•™์ƒ์—๊ฒŒ ํ•™๊ธ‰ ํ™”ํ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” API์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ •๋ณด

โ€ข
Base URL: https://growndcard.com
โ€ข
์ธ์ฆ: X-API-Key ํ—ค๋”
โ€ข
ํ•„์š” ๊ถŒํ•œ: awardPoints (API ์„ค์ •์—์„œ ํ•™๊ธ‰ ํ™”ํ/์—ญ๋Ÿ‰์นด๋“œ ๋ถ€์—ฌ ๊ถŒํ•œ ์ฒดํฌ)

1. ์—ญ๋Ÿ‰ ์นด๋“œ ๋ชฉ๋ก ์กฐํšŒ

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

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

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

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

์„ฑ๊ณต ์‘๋‹ต (200 OK)

{
  "success": true,
  "data": {
    "cards": [
      {
        "templateId": "abc123",
        "type": "reward",
        "points": 5,
        "description": "์ˆ˜์—… ์ ๊ทน ์ฐธ์—ฌ",
        "categoryId": "cat_collab",
        "categoryName": "ํ˜‘์—…"
      }
    ]
  },
  "message": "์—ญ๋Ÿ‰ ์นด๋“œ ๋ชฉ๋ก ์กฐํšŒ์— ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค."
}
ํ•„๋“œ
์„ค๋ช…
templateId
์นด๋“œ ๋ถ€์—ฌ ์‹œ ์‚ฌ์šฉํ•˜๋Š” ์นด๋“œ ID
type
reward(์นญ์ฐฌ) / penalty(๋…ธ๋ ฅ)
points
์นด๋“œ์— ์„ค์ •๋œ ์ ์ˆ˜
description
์นด๋“œ ์„ค๋ช…
categoryId / categoryName
์—ฐ๊ฒฐ๋œ ์—ญ๋Ÿ‰ ์นดํ…Œ๊ณ ๋ฆฌ (์—†์œผ๋ฉด null)

2. ์—ญ๋Ÿ‰ ์นด๋“œ ๋ถ€์—ฌ

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

POST /api/v1/classes/{classId}/students/{studentCode}/cards

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

ํŒŒ๋ผ๋ฏธํ„ฐ
ํƒ€์ž…
์„ค๋ช…
classId
string
ํด๋ž˜์Šค ID
studentCode
number
ํ•™์ƒ ๋ฒˆํ˜ธ(์ถœ์„๋ฒˆํ˜ธ)

์š”์ฒญ ๋ณธ๋ฌธ (JSON)

ํ•„๋“œ
ํƒ€์ž…
ํ•„์ˆ˜
์„ค๋ช…
templateId
string
โœ…
๋ถ€์—ฌํ•  ์—ญ๋Ÿ‰ ์นด๋“œ ID (๋ชฉ๋ก ์กฐํšŒ๋กœ ํš๋“)
source
string
โŒ
์ถœ์ฒ˜ ์‹๋ณ„์ž (๊ธฐ๋ณธ๊ฐ’ "cardTemplate")
metadata
object
โŒ
์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ
์ ์ˆ˜ยท์„ค๋ช…ยท์นดํ…Œ๊ณ ๋ฆฌ๋Š” ๋ณธ๋ฌธ์œผ๋กœ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ญ์ƒ ์นด๋“œ ํ…œํ”Œ๋ฆฟ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์š”์ฒญ ์˜ˆ์‹œ

curl -X POST \
  "https://growndcard.com/api/v1/classes/CLASS_ID/students/2/cards" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: sk_live_xxx" \
  -d '{ "templateId": "abc123", "source": "QuizApp" }'

์„ฑ๊ณต ์‘๋‹ต (200 OK)

{
  "success": true,
  "data": {
    "recordId": "rec_xyz",
    "studentId": "stu_abc",
    "studentCode": 2,
    "type": "reward",
    "pointsAwarded": 5,
    "bonusApplied": 1,
    "totalPoints": 155,
    "currentLevel": 5,
    "leveledUp": false,
    "createdAt": "2026-06-15T01:23:45.000Z",
    "templateId": "abc123",
    "categoryId": "cat_collab"
  },
  "message": "์—ญ๋Ÿ‰ ์นด๋“œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋ถ€์—ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."
}

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

์ƒํƒœ
์ฝ”๋“œ
์„ค๋ช…
400
invalid_student_code
ํ•™์ƒ ๋ฒˆํ˜ธ ๋ˆ„๋ฝ
400
invalid_template_id
templateId ๋ˆ„๋ฝ ๋˜๋Š” ํ˜•์‹ ์˜ค๋ฅ˜
401
unauthorized
API ํ‚ค ๋ˆ„๋ฝ/๋ฌดํšจ
403
insufficient_permissions
awardPoints ๊ถŒํ•œ ์—†์Œ
403
forbidden
ํ•ด๋‹น ํด๋ž˜์Šค ์ ‘๊ทผ ๊ถŒํ•œ ์—†์Œ
404
card_not_found
ํ•ด๋‹น ์—ญ๋Ÿ‰ ์นด๋“œ ์—†์Œ
404
student_not_found
ํ•™์ƒ์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ
429
rate_limit_exceeded
ํ˜ธ์ถœ ์ œํ•œ ์ดˆ๊ณผ
500
invalid_card_template
์นด๋“œ ํ…œํ”Œ๋ฆฟ ๋ฐ์ดํ„ฐ ์†์ƒ(type/points ์ด์ƒ)
500
internal_error
์„œ๋ฒ„ ๋‚ด๋ถ€ ์˜ค๋ฅ˜

๊ด€๋ จ ๋ฌธ์„œ

API ๋ฒ„์ „: v1