REST API 레퍼런스
MCP 도구와 동일한 기능을 코드에서 직접 호출할 수 있는 REST API입니다.
Base URL · 인증
https://moonpd.ai/api/v1
curl -H "Authorization: Bearer mpd_xxxxxxxxxxxxxxxxxxxx" https://moonpd.ai/api/v1/me
# 또는
curl -H "X-API-Key: mpd_xxxxxxxxxxxxxxxxxxxx" https://moonpd.ai/api/v1/me
응답 형식
// 성공
{ "success": true, "data": { ... }, "meta": { "page": 1, "size": 20, "total": 134 } }
// 실패
{ "success": false, "error": { "code": "INVALID_INPUT", "message": "title required", "field": "title" } }
이북 발행·관리
| 메서드 | 경로 | 설명 |
|---|---|---|
| POST | /ebooks/upload | multipart 파일 첨부 |
| POST | /ebooks/upload-session | 브라우저 업로드 페이지 발급 |
| POST | /ebooks/convert-url | URL에서 변환 |
| GET | /ebooks/conversion/{jobId} | 변환 상태 |
| POST | /ebooks/{id}/publish | 게시 |
| GET | /ebooks | 내 이북 목록 |
| GET | /ebooks/{id} | 상세 |
| PATCH | /ebooks/{id} | 메타 수정 |
| PUT | /ebooks/{id}/visibility | 공개 범위 |
| DELETE | /ebooks/{id} | 삭제 |
홍보·통계·계정
| 메서드 | 경로 | 설명 |
|---|---|---|
| GET | /ebooks/{id}/share-assets | 공유 자산 |
| GET | /ebooks/{id}/promo-brief | 홍보 브리프 |
| GET | /ebooks/{id}/qr | QR PNG |
| GET | /ebooks/{id}/social-card | 소셜 카드 PNG |
| GET | /ebooks/{id}/stats | 통계 |
| GET | /ebooks/{id}/traffic-sources | 유입 분석 |
| GET | /me | 계정·채널 |
| GET | /me/dashboard/kpi | 대시보드 KPI |
| GET | /channels/{id} | 채널 상세 |
| PATCH | /channels/{id} | 채널 수정 |
단축 URL (mpd.zip/M{6})
긴 URL 을 mpd.zip/M{6자} 형식으로 단축합니다. 클릭 시 GA4 UTM 파라미터가 보존된 302 리다이렉트. 차단 도메인은 발급 거부.
| 메서드 | 경로 | 설명 |
|---|---|---|
| POST | /short-urls | 발급 (UTM 자동 부착 옵션) |
| GET | /short-urls | 내 발급 목록 (페이징) |
| GET | /short-urls/{cd} | 상세 + 클릭수 |
| DELETE | /short-urls/{cd} | 비활성화 (soft delete) |
예제 — UTM 부착해 단축 URL 발급
curl -X POST https://moonpd.ai/api/v1/short-urls \
-H "Authorization: Bearer $MPD_KEY" -H "Content-Type: application/json" \
-d '{
"url": "https://moonpd.ai/Home/H50000/H50400/boardView?board_key=1702&page=1",
"tag": "spring_promo_2026",
"utm_source": "moonpd_sms",
"utm_medium": "sms",
"utm_campaign": "ebook_promo_20260602",
"utm_content": "S1_A"
}'
# 응답: { "success": true, "data": {
# "short_cd": "ab12CD",
# "short_url": "https://mpd.zip/Mab12CD",
# "long_url": "...&utm_source=moonpd_sms&...",
# "click_count": 0, "tag": "spring_promo_2026", "source": "MCP" } }
발급 출처 prefix — 한눈에 발급 경로 구분:
/G{6}— 이북 공유 자동 발급 (기존)/M{6}— API 키 발급 (본 엔드포인트)/A{6}— 관리자 직접 발급
scope: shorturl:write (발급·삭제), shorturl:read (조회·목록)
차단 도메인 응답: { "code": "URL_BLOCKED", "message": "...", "field": "url" } (HTTP 422)
예제 — 이북 발행 흐름
# 1) 업로드
curl -X POST https://moonpd.ai/api/v1/ebooks/upload \
-H "Authorization: Bearer $MPD_KEY" \
-F "file=@report.pdf" -F "title=2026Q1 환경 보고서"
# → { "success": true, "data": { "job_id": "eb_1234", "status": "processing" } }
# 2) 진행 상태
curl https://moonpd.ai/api/v1/ebooks/conversion/eb_1234 -H "Authorization: Bearer $MPD_KEY"
# 3) 게시
curl -X POST https://moonpd.ai/api/v1/ebooks/eb_1234/publish \
-H "Authorization: Bearer $MPD_KEY" -H "Content-Type: application/json" \
-d '{"channel_id":"ch_42","category":"REPORT","tags":["환경","보고서"]}'
Node.js
const res = await fetch('https://moonpd.ai/api/v1/me', {
headers: { Authorization: `Bearer ${process.env.MPD_KEY}` }
});
const { data } = await res.json();
console.log(data.user.name, data.channels);
Python
import requests, os
r = requests.get('https://moonpd.ai/api/v1/me',
headers={'Authorization': f'Bearer {os.environ["MPD_KEY"]}'})
print(r.json()['data'])