콘텐츠로 이동

공개 API 필드 이름과 호환성

신규 연동은 아래 공개 필드 이름을 사용합니다. 내부 모델/테이블 이름을 추측하거나 ID, id를 순서대로 대입하지 마세요. 스토어프론트 API와 서버용 API는 같은 리소스에 같은 ID 이름을 사용합니다. 인증, 응답의 전체 구조, 공개되는 정보는 API 용도에 따라 다릅니다.

ID는 대상별로 하나의 이름을 사용합니다

섹션 제목: “ID는 대상별로 하나의 이름을 사용합니다”
공개 필드의미사용 예
content_id판매 콘텐츠 자체. VOD 강의, 라이브, 오프라인, 디지털 콘텐츠콘텐츠 상세, 내 수강 콘텐츠 상세
option_id콘텐츠의 구매 옵션/일정/플랜장바구니, content_items
curriculum_id콘텐츠 안의 실제 회차/레슨재생할 영상 선택, 학습 진행률
chapter_id회차를 묶은 챕터chapters[].chapter_id
product_id실물 상품 자체상품 상세
variant_id상품의 구매 옵션 조합장바구니, product_items
board_id게시판게시판 상세, 게시글 필터
post_id게시글게시글 상세, 댓글 작성
comment_id댓글댓글 식별
order_id주문 전체주문 조회, 결제 초기화
line_item_id구매 후 액션 대상 주문 항목의 불투명 문자열열기, 구매확정, 환불. 분해하지 않고 그대로 전달
lookup_id수강 권한/학습 기록진행률/일시정지. 콘텐츠 ID가 아님
user_id, site_id, page_id사용자, 사이트, 페이지각 리소스 식별
category_id, tag_id, popup_id카테고리, 태그, 팝업필터/리소스 식별
input_option_id상품 구매자 입력 항목buyer_inputs의 key

예: content_id=6401인 강의의 구매 옵션이 option_id=55102, 첫 영상이 curriculum_id=91201일 수 있습니다. 세 값은 서로 바꿔 쓰지 않습니다. 게시글을 뜻할 때는 **항상 post_id**이며 판매 콘텐츠의 content_id와 관계없습니다.

경로의 {content_id}는 같은 응답 필드 content_id를 넣으라는 뜻입니다. 예전 문서의 {contentId}처럼 placeholder 표기가 달라도 실제 URL은 /contents/6401로 같습니다.

조회읽을 위치
GET /contentscontents.data[] → content_id, content_type
GET /contents/{content_id}content, content.options[], curriculums[], chapters[].items[]
GET /me/contents/{type}/{status}contents.data[] → content_id. 빈 결과도 동일
GET /me/content-counts/{type}content_counts[type][status]
GET /me/content-items/{content_id}content, curriculums[], chapters[].items[], watchable, hold_blocked
GET /productsproducts.data[] → product_id
GET /products/{product_id}product.product_id, product.variants[].variant_id
GET /cart, GET /guest-cartitems[] → 상품은 variant_id, 콘텐츠는 option_id
GET /me/ordersorders.data[] → order_id
GET /me/orders/{order_id}order
GET /postsposts.data[] → post_id
GET /posts/{post_id}post

콘텐츠 유형 필터는 GET /contents?content_type=vod처럼 사용합니다. 내 콘텐츠 목록 경로의 {type}은 all, live, offline, vod, digital_content, membership; {status}는 all, pending, processing, completed입니다. 상품 상태, 수강 상태, 주문 상태는 서로 다른 열거형이므로 재사용하지 마세요.

VOD 회차에서 media_url은 저장된 재생 소스, reference_url은 별도 관련 링크입니다. media_url이 비어 있으면 다른 필드에서 URL을 추측하거나 만들어내지 않습니다. 권한/만료/일시정지 상태도 함께 확인하세요.

{
"content_items": [{ "option_id": 55102 }],
"product_items": [{ "product_id": 12001, "variant_id": 88421 }],
"quantities": { "88421": 1 }
}

위는 주문 요청의 항목 부분만 나타낸 예입니다. 배송지/금액 등 전체 요청은 장바구니와 결제 시작을 참고하세요. 콘텐츠는 수량 구매가 아닙니다.

댓글 작성에는 { "post_id": 1184, "content": "댓글 본문" }을 보냅니다. content는 본문 텍스트이며 content_id와 다른 개념입니다.

서버용 콘텐츠 API의 chapters[].items[].curriculum_id도 동일한 회차 ID입니다. 기존 회차 수정 시 전달하고, 새 회차 생성 시 생략합니다.

이번 변경은 기존 필드를 삭제하지 않는 추가 방식입니다. 신규 예제/OpenAPI는 공개 필드만 안내하며, 기존 연동은 아래 호환 필드를 계속 사용할 수 있습니다. 같은 요청에서 공개 이름과 이전 이름을 함께 보내면 공개 이름이 우선합니다.

이전 이름/위치신규 연동에서 사용할 이름/위치
콘텐츠의 class_id, IDcontent_id
classes.data, class.defaultcontents.data, content
구매 옵션의 ID, all_optionsoption_id, content.options
회차의 ID, 서버 API 회차의 item_idcurriculum_id
구매 상세의 class[], parent_classcurriculums[], content
chapters[].curriculums_details[]chapters[].items[]
VOD 회차 data, vod_linkmedia_url, reference_url
watch_able, typeStatusCountswatchable, content_counts
댓글 요청의 content_idpost_id
board_contents, board_contentposts, post
상품 옵션의 id, 상품의 ID/idvariant_id, product_id
주문 생성의 old_data[].IDcontent_items[].option_id
주문 생성의 new_data[].id / variant.idproduct_items[].variant_id
미리보기 요청의 options_idsoption_ids
콘텐츠 목록 query typecontent_type
구매 상세 query activeTabactive_tab

serve.url 등 서버가 돌려주는 이동 URL, 결제사의 form fields, 페이지 편집기 설정은 불투명 값입니다. 내부에 이전 이름이 있더라도 클라이언트에서 바꾸거나 재조립하지 않고 그대로 사용합니다. 다형성 경로의 {item_id}는 각 endpoint가 정한 타입에 따라 option_id 또는 variant_id를 넣는 자리이며 새로운 콘텐츠 ID 종류가 아닙니다.

이 계약은 API 서버 변경과 함께 배포해야 합니다. 서버 배포 전에는 문서의 신규 필드가 아직 응답에 없을 수 있습니다.