본문으로 건너뛰기

Penta 백엔드 API 문서

개요

Penta는 디즈니 아동 도서 서비스로, Django REST Framework 기반의 REST API를 제공한다.

  • 프레임워크: Django 4.2+ / Django REST Framework
  • 인증: JWT (Access Token 1일, Refresh Token 7일)
  • 다국어: django-parler (ko, en, ja/jp, es)
  • 데이터베이스: PostgreSQL (운영), SQLite (개발)

Base URL

개발: http://localhost:8080/api
운영: https://api.pentadisney.com/api

지원 언어

코드언어
ko한국어
en영어
ja (jp)일본어
es스페인어

언어 선택 우선순위: Accept-Language 헤더 > 사용자 프로필 app_language 설정 > 기본값(en)


1. 인증 (Authentication)

JWT 인증 시스템

  • Access Token: 유효기간 1일 (24시간)
  • Refresh Token: 유효기간 7일
  • 모든 인증 필요 API에 Authorization: Bearer <access_token> 헤더를 포함한다.

1.1 회원가입

POST /api/users/register/

소셜 로그인 기반 회원가입. social_providersocial_id로 사용자를 생성한다.

  • Auth: 불필요
  • Rate Limit: 9/hr (register)

1.2 소셜 로그인

POST /api/users/social-auth/

소셜 로그인 인증. 지원 제공자: Google, Apple, Kakao, LINE, Facebook. 기존 계정이면 로그인, 없으면 자동 생성한다.

  • Auth: 불필요
  • Rate Limit: 15/min (login)
  • 응답: access, refresh 토큰 + 사용자 정보

1.3 토큰 갱신

POST /api/users/token/refresh/

Refresh Token으로 새 Access Token과 Refresh Token을 발급받는다.

  • Auth: 불필요
  • 파라미터: refresh (string, 필수)

1.4 로그아웃

POST /api/users/logout/

현재 토큰을 무효화한다.

  • Auth: 필요

1.5 관리자 Google 로그인

POST /api/users/admin-google-login/

관리자 전용 Google OAuth 로그인.

  • Auth: 불필요

2. 사용자 (Users)

2.1 프로필 조회/수정

GET  /api/users/profile/
PATCH /api/users/profile/

현재 사용자의 프로필 정보를 조회하거나 수정한다.

  • Auth: 필요
  • 수정 가능 필드: nickname, language, country, birth_year, marketing_consent 등

2.2 프로필 요약

GET /api/users/profile-summary/

사용자 프로필 + 읽기 통계 요약 정보.

  • Auth: 필요

2.3 설정

GET  /api/users/settings/
PATCH /api/users/settings/

앱 설정 관리 (app_language, viewer_languages, push_notification_enabled, notification_marketing, notification_bookmark).

  • Auth: 필요

2.4 기기 관리

POST /api/users/devices/register/
GET /api/users/devices/

기기 등록 (FCM 토큰 포함) 및 등록된 기기 목록 조회.

  • Auth: 필요
  • 파라미터: device_id, device_type (ios/android), device_model, app_version, fcm_token

2.5 로그인 이력

GET /api/users/login-history/

로그인 이력 조회.

  • Auth: 필요

2.6 계정 삭제

POST /api/users/delete-account/

계정 탈퇴 (소프트 삭제). deletion_reason 포함 가능.

  • Auth: 필요

2.7 북마크

GET    /api/users/bookmarks/
POST /api/users/bookmarks/
DELETE /api/users/bookmarks/<book_id>/
GET /api/users/bookmarks/status/<book_id>/

북마크 목록 조회, 추가, 삭제, 특정 도서 북마크 상태 확인.

  • Auth: 필요

2.8 읽기 이력

GET /api/users/reading-history/

읽기 이력 조회 (에피소드 단위 진행률 포함).

  • Auth: 필요

2.9 녹음

GET    /api/users/recordings/
DELETE /api/users/recordings/<pk>/

사용자 녹음 목록 조회 및 삭제.

  • Auth: 필요

2.10 도서 상태별 조회

GET /api/users/recent-books/
GET /api/users/books-in-progress/
GET /api/users/completed-books/

최근 읽은 도서, 진행중 도서, 완독 도서를 각각 조회한다.

  • Auth: 필요

2.11 리뷰 요청

GET  /api/users/review-eligibility/
POST /api/users/review-requested/

앱 리뷰 요청 대상 여부 확인 및 리뷰 요청 노출 기록.

  • Auth: 필요

3. 도서 (Books)

3.1 도서 목록

GET /api/books/

도서 목록 조회. 언어별 출판된 도서만 반환.

  • Auth: 불필요 (인증 시 북마크/진행률 포함)
  • 파라미터: lang, page, page_size, brand, series, character

3.2 전체 도서 데이터

GET /api/books/all/

전체 도서 데이터를 한번에 반환 (캐싱 최적화).

  • Auth: 불필요

3.3 도서 카탈로그

GET /api/books/catalog/

도서 카탈로그 조회 (필터, 정렬 지원).

  • Auth: 불필요

3.4 도서 상세

GET /api/books/<pk>/

도서 상세 정보 (에피소드 목록, 캐릭터, 시리즈, 스티커 정보 포함).

  • Auth: 불필요 (인증 시 북마크/진행률 포함)

3.5 도서 추천

GET /api/books/<book_id>/recommendations/

특정 도서 기반 추천 도서 목록.

  • Auth: 불필요

3.6 도서 읽기 진행률

GET  /api/books/<book_id>/reading-progress/
POST /api/books/<book_id>/reading-progress/

도서의 읽기 진행률 조회 및 업데이트.

  • Auth: 필요

3.7 에피소드 상세

GET /api/books/<book_id>/episodes/<pk>/

에피소드 상세 정보 (페이지 URL 목록 포함). 구독 필요 콘텐츠는 인증/구독 필수.

  • Auth: 필요 (프리미엄 콘텐츠)
  • Rate Limit: 300/min (book_content)

3.8 에피소드 녹음

GET  /api/books/<book_id>/episodes/<episode_id>/recordings/
POST /api/books/<book_id>/episodes/<episode_id>/recordings/

에피소드별 녹음 목록 조회 및 녹음 업로드.

  • Auth: 필요

3.9 에피소드 읽기 진행률

GET  /api/books/<book_id>/episodes/<episode_id>/reading-progress/
POST /api/books/<book_id>/episodes/<episode_id>/reading-progress/

에피소드별 읽기 진행률 조회 및 업데이트.

  • Auth: 필요

3.10 검색

GET /api/books/search/

도서 검색. 제목, 저자, 시놉시스를 대상으로 검색한다.

  • Auth: 불필요
  • Rate Limit: 90/min (search)
  • 파라미터: q (검색어), lang

3.11 캐릭터

GET /api/books/characters/
GET /api/books/characters/<pk>/

캐릭터 목록 및 상세 조회.

  • Auth: 불필요

3.12 일러스트레이터

GET /api/books/illustrators/
GET /api/books/illustrators/<pk>/

일러스트레이터 목록 및 상세 조회.

  • Auth: 불필요

4. 홈 (Home)

4.1 종합 홈 데이터

GET /api/home/

홈 화면에 필요한 종합 데이터를 한번에 반환한다. 배너, 큐레이션, 랭킹, 캐릭터, 필터 등을 포함한다.

  • Auth: 불필요 (인증 시 개인화 데이터 포함)

4.2 필터

GET /api/home/filters/

홈 화면 필터 옵션 목록 (tab, series, reading_level).

  • Auth: 불필요

4.3 캐릭터 친구들

GET /api/home/characters/

홈 화면 캐릭터 목록.

  • Auth: 불필요

4.4 랭킹

GET /api/home/rankings/

실시간 랭킹 TOP 10 (국가별).

  • Auth: 불필요
  • 파라미터: country (기본: 사용자 국가 또는 KR)

4.5 배너

GET /api/home/banners/

활성 배너 목록 (시간 기반 필터링).

  • Auth: 불필요

4.6 큐레이션 상세

GET /api/home/curations/<curation_id>/

특정 큐레이션의 도서 목록.

  • Auth: 불필요

5. 결제 (Payments)

5.1 구독

POST /api/payments/subscribe/

구독 생성 (Google Play / Apple App Store 결제 후 호출).

  • Auth: 필요

5.2 구독 조회

GET /api/payments/subscription/

현재 구독 상태 조회.

  • Auth: 필요

5.3 구독 취소

POST /api/payments/subscription/cancel/

구독 취소 (자동갱신 중지, 만료일까지 유효).

  • Auth: 필요

5.4 프로모 코드 적용 (결제)

POST /api/payments/promo/apply/

결제 시 프로모 코드 적용.

  • Auth: 필요

5.5 구독 오퍼

GET /api/payments/subscription-offers/

사용 가능한 구독 오퍼 (프로모 코드 기반 할인 포함).

  • Auth: 필요

5.6 결제 이력

GET /api/payments/history/
GET /api/payments/subscription-history/

결제 거래 이력 및 구독 이력 조회.

  • Auth: 필요

5.7 결제 검증

POST /api/payments/verify/

Google Play / Apple App Store 영수증 검증 및 구독 활성화.

  • Auth: 필요
  • Rate Limit: 30/min (payment_verify)

5.8 환불

POST /api/payments/refund-request/
POST /api/payments/refund-process/

환불 요청 및 환불 처리 (관리자).

  • Auth: 필요

5.9 Google Play 관리

POST /api/payments/google-play/manage/

Google Play 구독 관리 (Acknowledge, Refund, Revoke).

  • Auth: 필요 (관리자)

5.10 웹훅

POST /api/payments/rtdn/pubsub/

Google Play 실시간 개발자 알림 (RTDN) 수신 엔드포인트. Google Pub/Sub에서 호출한다.

  • Auth: 불필요 (Google Pub/Sub 인증)
POST /api/payments/apple/notifications/

Apple Server Notifications V2 웹훅 수신 엔드포인트.

  • Auth: 불필요 (Apple JWS 서명 검증)

6. 프로모코드 (Promo Codes)

6.1 프로모 코드 적용

POST /api/promocodes/apply/
GET /api/promocodes/applied/
POST /api/promocodes/applied/clear/

프로모 코드 임시 적용 (IAP 결제 전), 적용된 프로모 조회, 적용 해제.

  • Auth: 필요

6.2 래퍼럴 코드

POST /api/promocodes/referral/create/
GET /api/promocodes/referral/my-stats/
GET /api/promocodes/referral/my-benefits/
GET /api/promocodes/referral/rewards/

래퍼럴 코드 생성, 내 추천 통계 조회, 내 래퍼럴 혜택 조회, 리워드 내역 조회.

  • Auth: 필요

6.3 친구 초대 링크

GET /api/promocodes/invite/<code>/
GET /api/promocodes/invite/<code>/info/

래퍼럴 웹 리다이렉트 (앱 딥링크) 및 초대 링크 정보 조회.

  • Auth: 불필요

별도 웹 URL도 제공:

  • GET /invite/<code>/ - 웹 초대 링크

6.4 파트너 분석

GET /api/promocodes/analytics/<partner_code>/

파트너 프로모션 분석 데이터 (관리자 전용).

  • Auth: 필요 (관리자)

별도 파트너 리다이렉트 URL:

  • GET /r/<code>/ - 파트너 프로모션 짧은 링크

7. 스티커 (Stickers)

7.1 내 스티커 목록

GET /api/stickers/

사용자가 수집한 스티커 목록.

  • Auth: 필요

7.2 스티커 통계

GET /api/stickers/stats/

스티커 수집 통계 (총 수집수, 일/주/월간 통계).

  • Auth: 필요

7.3 인기 스티커

GET /api/stickers/popular/

인기 스티커 목록 (기간별, 국가별).

  • Auth: 필요

7.4 미보유 스티커

GET /api/stickers/missing/

사용자가 아직 보유하지 않은 스티커 목록.

  • Auth: 필요

7.5 공개 예정 스티커

GET /api/stickers/upcoming/

공개 예정 스티커 목록.

  • Auth: 필요

7.6 스티커 위시리스트

GET    /api/stickers/wishlist/
POST /api/stickers/wishlist/
DELETE /api/stickers/wishlist/<sticker_id>/

스티커 위시리스트(찜) 조회, 추가, 삭제.

  • Auth: 필요

7.7 스티커 획득

POST /api/stickers/earn/<episode_id>/

에피소드 완독 시 스티커 획득.

  • Auth: 필요

8. 이벤트/뉴스 (Events & News)

8.1 이벤트 목록

GET /api/events-news/

이벤트 및 뉴스 목록. type 파라미터로 event/news 구분 가능.

  • Auth: 불필요
  • 파라미터: type (event/news), lang

8.2 이벤트 상세

GET /api/events-news/<pk>/

이벤트/뉴스 상세 정보.

  • Auth: 불필요

8.3 이벤트 참여

POST /api/events-news/participate/

이벤트 참여 기록.

  • Auth: 필요
  • 파라미터: event_id

9. 알림 (Notifications)

9.1 알림 목록

GET /api/notifications/

사용자 알림 목록 (유저소식 + 팬타소식).

  • Auth: 필요

9.2 읽음 처리

POST /api/notifications/mark-read/
POST /api/notifications/mark-all-read/

특정 알림 읽음 처리 및 전체 읽음 처리.

  • Auth: 필요

9.3 미읽음 수

GET /api/notifications/unread-count/

미읽음 알림 개수 조회.

  • Auth: 필요

9.4 레드닷

GET /api/notifications/red-dot/

알림 레드닷 표시 여부 (새 알림이 있는지 빠르게 확인).

  • Auth: 필요

10. 지원 (Support)

10.1 FAQ

GET /api/support/faq/
GET /api/support/faq/<pk>/

FAQ 목록 및 상세 조회. 카테고리별 필터링 가능 (account, payment, content, technical, other).

  • Auth: 불필요

10.2 1:1 문의

GET  /api/support/inquiries/
POST /api/support/inquiries/
GET /api/support/inquiries/<pk>/

문의 목록 조회, 문의 등록, 문의 상세 조회.

  • Auth: 필요
  • 파라미터 (등록 시): type (bug/payment/content/account/suggestion/other), subject, message

10.3 공지사항

GET /api/support/announcements/
GET /api/support/announcements/<pk>/

공지사항 목록 및 상세 조회.

  • Auth: 불필요

11. 블로그 (Blog)

11.1 포스트

GET /api/blog/posts/
GET /api/blog/posts/<pk>/

블로그 포스트 목록 및 상세 조회. slug 기반 조회도 지원한다. 상세 조회 시 조회수가 자동 증가한다 (IP 기반 1시간 쿨다운).

  • Auth: 불필요

11.2 카테고리

GET /api/blog/categories/
GET /api/blog/categories/<pk>/

블로그 카테고리 목록 및 상세 조회.

  • Auth: 불필요

11.3 태그

GET /api/blog/tags/
GET /api/blog/tags/<pk>/

블로그 태그 목록 및 상세 조회.

  • Auth: 불필요

12. 업로드 및 CloudFront

12.1 파일 업로드

POST /api/upload/presigned-url/
POST /api/upload/confirm/

S3 Presigned URL 발급 (클라이언트에서 직접 S3 업로드) 및 업로드 완료 확인.

  • Auth: 필요

12.2 CloudFront

CloudFront 쿠키는 자동으로 관리된다. 별도 엔드포인트 없이 CDN 콘텐츠를 포함하는 API 응답에 쿠키가 자동으로 포함된다.

CDN 콘텐츠를 포함하는 API:

  • /api/home/ (배너, 캐릭터, 도서 표지)
  • /api/books/ (도서 표지)
  • /api/books/{id}/ (도서 상세)
  • /api/books/{id}/episodes/{id}/ (에피소드 페이지)
  • /api/stickers/ (스티커 이미지)
  • /api/events-news/ (이벤트 이미지)
  • /api/users/recent-books/, /api/users/books-in-progress/ (도서 표지)

Rate Limiting

대상제한설명
anon300/hr비인증 사용자
user3000/hr인증 사용자
login15/min로그인 시도
register9/hr회원가입
payment_verify30/min결제 검증
search90/min검색
book_content300/min도서 콘텐츠 접근
admin1500/hr관리자
sensitive90/min민감 작업

에러 응답 형식

HTTP 상태 코드

코드설명
200성공
201생성 성공
204성공 (응답 본문 없음)
400잘못된 요청
401인증 필요
403권한 없음 (구독 필요 포함)
404리소스 없음
429요청 한도 초과
500서버 오류

페이지네이션

표준 DRF 페이지네이션 형식:

{
"count": 100,
"next": "https://api.pentadisney.com/api/books/?page=2",
"previous": null,
"results": [...]
}
  • page: 페이지 번호 (기본: 1)
  • page_size: 페이지당 항목 수 (기본: 20, 최대: 100)

기타 엔드포인트

MethodURL설명
GET/health/ALB 헬스체크
GET/api/app/앱 설정 (최소 버전 등)
GET/.well-known/apple-app-site-associationApple Universal Links 설정
GET/privacy-policy/개인정보처리방침