138๋ง+ (๋ชฉํ 1,000๋ง) ํ๊ตญ ๊ฐ์ ์๋ ํ์ ๋ฐ์ดํฐ๋ฅผ REST์ MCP(Model Context Protocol)๋ก ์ ๊ณตํฉ๋๋ค.
PII๋ ๊ธฐ๋ณธ ๋ง์คํน๋๋ฉฐ, unmask=true ์ฌ์ฉ ์ Bearer ํ ํฐ์ด ํ์ํฉ๋๋ค.
Authorization: Bearer <SEEDKIT_API_TOKEN> # ๊ณต๊ฐ REST X-API-KEY: <EXTERNAL_API_KEY> # ์ธ๋ถ ํธ๋ฆฌ๊ฑฐ ยท ํฌ์ค ยท ๋ด๋ถ ํฌ๋ก # MCP๋ ๋ณ๋ โ OAuth 2.1 (์๋ MCP ์น์ ์ฐธ๊ณ )
ํ ํฐ์ ํ๋ก์ ํธ ์ํฌ๋ฆฟ SEEDKIT_API_TOKEN / EXTERNAL_API_KEY ๋ก ๊ด๋ฆฌ๋ฉ๋๋ค.
๋ฆฌํฌํธ HTML์ ์ ํ ํฐ ๋์ ?t= HMAC ๋ฆฌํฌํธ ํ ํฐ, ์์ ์ JWT, ๊ณต๊ฐ ์ผ์ผ์ด์ค ์ฌ๋ถ๋ก ์ ๊ทผ ์ ์ดํฉ๋๋ค.
| Method | Path | Auth | ์ค๋ช |
|---|---|---|---|
| GET | /api/public/v1/stats/summary | โ | ์ด ํ์์ยท๋ฐฐ์นยท์ง์ญ ๋ถํฌ |
| GET | /api/public/v1/members | Bearer ํ ํฐ | ํ์ ํ์ด์ง๋ค์ด์ (limitยทcursorยทregionยทgenderยทoccupationยทqยทunmask) |
| GET | /api/public/v1/members/{id} | Bearer ํ ํฐ | ํ์ ๋จ๊ฑด |
| GET | /api/public/v1/occupations | โ | ์ง์ ๋ชฉ๋ก (tierยทemployment_typeยทinclude_legacy) |
| GET | /api/public/v1/occupations/{id} | โ | ์ง์ ๋จ๊ฑด |
| GET | /api/public/v1/occupations/tier/{tier} | โ | ํฐ์ด๋ณ ์ง์ ๋ชฉ๋ก (T1~T6) |
| Method | Path | Auth | ์ค๋ช |
|---|---|---|---|
| POST | /api/public/v1/generate | Bearer ํ ํฐ | ํํฐ ์กฐ๊ฑด์ผ๋ก ์ฆ์ ์์ฑ (count โค 10,000) |
| POST | /api/public/webhooks/n8n/generate | Bearer ํ ํฐ | n8n ๋จ์ผ ๋ ธ๋์ฉ ยท ์๋ฃ ์ callback POST |
| GET | /api/public/v1/batches | โ | ๋ฐฐ์น ๋ชฉ๋ก |
| GET | /api/public/v1/batches/{id} | โ | ๋ฐฐ์น ๋จ๊ฑด |
| GET | /api/public/v1/batches/{id}/stats | โ | ๋ฐฐ์น ์์ฝ ํต๊ณ (์ฑ๋ณยท์์ ์ฃผ๊ธฐยทํฐ์ดยท์์ ์ง์ญ/์ง์ ) |
| POST | /api/public/v1/batches | Bearer ํ ํฐ | ๋ฐฐ์น ์์ฑ |
| POST | /api/public/v1/batches/{id}/generate | Bearer ํ ํฐ | ์ฒญํฌ ์์ฑ (5,000๊ฑด) |
| DELETE | /api/public/v1/batches/{id} | Bearer ํ ํฐ | ๋ฐฐ์น + ํ์ ์ญ์ |
| Method | Path | Auth | ์ค๋ช |
|---|---|---|---|
| GET | /api/public/v1/simulation-report/{id} | ๋ฆฌํฌํธ ํ ํฐ / ์์ ์ | ์๋ฎฌ๋ ์ด์ ๋ฆฌํฌํธ HTML (PDF ์ธ์์ฉ) |
| GET | /api/public/v1/showcase-report/{id} | ๋ฆฌํฌํธ ํ ํฐ / ์์ ์ | ๊ณต๊ฐ ์ผ์ผ์ด์ค ๋ฆฌํฌํธ HTML |
| GET | /api/public/v1/competitor-report/{id} | ๋ฆฌํฌํธ ํ ํฐ / ์์ ์ | ๊ฒฝ์์ฌ ๋น๊ต ๋ฆฌํฌํธ HTML |
| GET | /api/public/v1/complete-package/{id} | ๋ฆฌํฌํธ ํ ํฐ / ์์ ์ | ๋ฆฌํฌํธ+ํ๊ธฐ+FGI ํตํฉ HTML |
| POST | /api/public/v1/external-simulate-trigger | X-API-KEY | ์ธ๋ถ ์ํ ๋ฑ๋ก โ ์กฐ์ฌ ํธ๋ฆฌ๊ฑฐ, ์๋ฃ ์ callback |
| GET | /api/public/v1/admin-health | X-API-KEY | ์ ์ฒด ํ์ดํ๋ผ์ธ ๊ฐ์ |
| GET | /api/public/v1/openapi | โ | OpenAPI 3.1 ์คํ (๊ธฐ๊ณ์ฉ JSON) |
๋ด๋ถ ์ ์ฉ(์ด์ยทํฌ๋ก ): /cron-cleanup-stuck, /admin-cleanup-stuck, /retry-rejected-personas, /simulation-demo โ ์คํ์ x-internal: true ๋ก ํ์๋๋ฉฐ ์ธ๋ถ ํํธ๋ ๋์์ด ์๋๋๋ค.
์ฌ๋์ด ์ฝ๋ ๊ฐ์ยท๊ณผ๊ธยท์ฐ๋ ์์ ์๋ด๋ /developers ์ ์์ต๋๋ค.
curl https://bokput.io/api/public/v1/stats/summary
curl -H "Authorization: Bearer $TOKEN" \
"https://bokput.io/api/public/v1/members?limit=10®ion=11"
curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"label":"api-batch","targetCount":1000}' \
https://bokput.io/api/public/v1/batches
# ๋ฆฌํฌํธ HTML (HMAC ๋ฆฌํฌํธ ํ ํฐ)
curl "https://bokput.io/api/public/v1/simulation-report/<id>?t=<report_token>"
curl "https://bokput.io/api/public/v1/complete-package/<id>?t=<report_token>"
# ์ธ๋ถ ์ํ ๋ฑ๋ก โ ์กฐ์ฌ ํธ๋ฆฌ๊ฑฐ (์๋ฃ ์ callback_url ๋ก POST)
curl -X POST https://bokput.io/api/public/v1/external-simulate-trigger \
-H "X-API-KEY: $EXTERNAL_API_KEY" -H "Content-Type: application/json" \
-d '{"product_name":"์๋ถ ํฌ๋ฆผ","category":"beauty",
"external_source":"partner-shop","external_ref_id":"SKU-1001",
"callback_url":"https://partner.example.com/hooks/bokput","panel_size":100}'
# ํด ๋ชฉ๋ก
curl -X POST https://bokput.io/mcp \
-H "authorization: Bearer <OAUTH_ACCESS_TOKEN>" \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# ์ข์ ๋ฐฐ์
{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"lease_seats_allocate",
"arguments":{"count":50,"category_code":"beauty","gender":"female","age_min":25,"age_max":39}}}
# ๋๊ธ ์์ฑ (1ํ 20๊ฑด, ์ด๊ณผ๋ถ์ ์์ฝ)
{"jsonrpc":"2.0","id":3,"method":"tools/call",
"params":{"name":"community_comments_generate","arguments":{"post_id":"<uuid>","count":20}}}
MCP ํด๋ผ์ด์ธํธ(Claude, Cursor ๋ฑ)์์ ๋ค์ URL์ ๋ฑ๋กํ์ธ์:
https://bokput.io/mcp Accept: application/json, text/event-stream
์ธ์ฆ์ OAuth 2.1(๋์ ํด๋ผ์ด์ธํธ ๋ฑ๋ก)์
๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์๋ ๋ฑ๋ก๋๊ณ
๋ธ๋ผ์ฐ์ ๋์ ํ๋ฉด์์ ๋ก๊ทธ์ธํ๋ฉด ํด๋น ๊ณ์ ๊ถํ์ผ๋ก ํด์ด ์คํ๋ฉ๋๋ค.
REST ์ ์ฉ SEEDKIT_API_TOKEN ์ MCP์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
๋ฑ๋ก๋ tools๋ 29์ข
์ด๋ฉฐ 4๊ฐ๋๋ก ๋๋ฉ๋๋ค. ์ ์ฒด ์ธ์ยท๊ถํ์
tools/list ์๋ต ์คํค๋ง๊ฐ ์ ๋ณธ์
๋๋ค.
generate_personas โ ํ๋ฅด์๋ ๋ฐฐ์น ์์ฑget_occupation_list โ ์ง์
๋ชฉ๋ก ์กฐํ (์ฝ๊ธฐ ์ ์ฉ)get_batch_stats โ ๋ฐฐ์น ํต๊ณ (์ฝ๊ธฐ ์ ์ฉ)export_personas โ ํ๋ฅด์๋ ๋ด๋ณด๋ด๊ธฐ (์ฝ๊ธฐ ์ ์ฉ)seedkit_stats_summary โ ์๋ ํ์ ํต๊ณ ์์ฝ (์ฝ๊ธฐ ์ ์ฉ)seedkit_members_search โ ์๋ ํ์ ๊ฒ์ (์ฝ๊ธฐ ์ ์ฉ)seedkit_members_get โ ์๋ ํ์ ์์ธ (์ฝ๊ธฐ ์ ์ฉ)seedkit_batches_list โ ์๋ ๋ฐฐ์น ๋ชฉ๋ก (์ฝ๊ธฐ ์ ์ฉ)seedkit_batches_create โ ์๋ ๋ฐฐ์น ์์ฑseedkit_batches_generate_chunk โ ์๋ ๋ฐฐ์น ์ฒญํฌ ์์ฑlease_tenant_get โ ์๋ ํ
๋ํธ ์กฐํ (์ฝ๊ธฐ ์ ์ฉ)lease_status โ ์๋ ์ํยท์ฟผํฐ ์กฐํ (์ฝ๊ธฐ ์ ์ฉ)lease_alerts_list โ ์คํจยท์คํต ์๋ฆผ ์กฐํ (์ฝ๊ธฐ ์ ์ฉ)lease_personas_list โ ์๋ ํ๋ฅด์๋ ๋ชฉ๋ก (์ฝ๊ธฐ ์ ์ฉ)lease_persona_get โ ์๋ ํ๋ฅด์๋ ์์ธ (์ฝ๊ธฐ ์ ์ฉ)lease_seats_allocate โ ์ข์ ๋ฐฐ์ lease_seats_release โ ์ข์ ํด์ community_post_create โ ์ปค๋ฎค๋ํฐ ๊ธ ๋ฑ๋กcommunity_post_update โ ์ปค๋ฎค๋ํฐ ๊ธ ์์ ยท์จ๊นcommunity_posts_list โ ์ปค๋ฎค๋ํฐ ๊ธ ๋ชฉ๋ก (์ฝ๊ธฐ ์ ์ฉ)community_comments_generate โ ํ๋ฅด์๋ ๋๊ธยทํํ ์์ฑcommunity_comments_list โ ๋๊ธ ๋ชฉ๋ก (์ฝ๊ธฐ ์ ์ฉ)community_comment_moderate โ ๋๊ธ ์จ๊นยท๋ณต๊ตฌcommunity_sentiment_summary โ ๋ฐ์ ์์ฝ (์ฝ๊ธฐ ์ ์ฉ)community_embed_config โ ์๋ฒ ๋ ์ค์ ์กฐํ (์ฝ๊ธฐ ์ ์ฉ)generate_narratives โ ํ๋ฅด์๋ ์์ฌ ์์ฑget_narratives โ ์์ฑ๋ ์์ฌ ์กฐํ (์ฝ๊ธฐ ์ ์ฉ)synthesize_speech โ ์์ฑํฉ์ฑ (TTS)list_synth_voices โ ์์ฑํฉ์ฑ ๋ณด์ด์ค ๋ชฉ๋ก (์ฝ๊ธฐ ์ ์ฉ)