# ODK API Portal

import { Card, CardHeader, CardTitle, CardDescription, CardContent } from "zudoku/ui/Card";

ODK Media 서비스들의 API 문서입니다. 서비스를 고르고, 환경을 고르고, 문서에서 바로 호출해 볼 수 있습니다.

## 처음이라면

<Stepper>

1. **서비스를 고른다**

   아래 카드에서 자기 일과 관련 있는 API를 찾습니다. 어느 앱이 쓰는지, 누구를 위한 것인지 적혀 있습니다.

1. **환경을 고른다**

   문서 오른쪽 위 선택기에서 환경을 바꿉니다. prod 는 실제 서비스, staging 은 배포 전 확인용입니다. staging 문서에는 prod 와 다른 지점이 표시됩니다.

1. **바로 호출해 본다**

   엔드포인트의 **Test** 버튼을 누르면 헤더와 파라미터가 미리 채워진 요청 화면이 열립니다. **Send** 를 누르면 실제 응답이 옵니다.

</Stepper>

## MediaIO

<div className="grid gap-4 md:grid-cols-2 not-prose">

<Card>
  <CardHeader>
    <CardTitle>
      <Link to="/mediaio-odx-v4">{"MediaIO ODX API v4"}</Link>
    </CardTitle>
    <CardDescription>{"Amasian·LG Channel Vietnam 앱이 쓰는 콘텐츠 API. 카테고리·시리즈·콘텐츠·재생·즐겨찾기."}</CardDescription>
  </CardHeader>
  <CardContent>
      <p>{"대상: 클라이언트(앱·웹) 개발자, 외부 연동사"}</p>
      <p>{"환경: prod"}</p>
      <p>{"엔드포인트 60개"}</p>
  </CardContent>
</Card>

<Card>
  <CardHeader>
    <CardTitle>
      <Link to="/mediaio-odx-v3">{"MediaIO ODX API v3"}</Link>
    </CardTitle>
    <CardDescription>{"ODK·ODC 앱이 쓰는 콘텐츠·회원 API. 로그인, 프로필, 결제, 편성표, 검색."}</CardDescription>
  </CardHeader>
  <CardContent>
      <p>{"대상: ODK·ODC 클라이언트 개발자"}</p>
      <p>{"환경: prod"}</p>
      <p>{"엔드포인트 146개"}</p>
  </CardContent>
</Card>

<Card>
  <CardHeader>
    <CardTitle>
      <Link to="/mediaio-odk-v1">{"MediaIO ODK API v1"}</Link>
    </CardTitle>
    <CardDescription>{"Kooli 연동용 회원 동기화 엔드포인트 하나."}</CardDescription>
  </CardHeader>
  <CardContent>
      <p>{"대상: Kooli 연동"}</p>
      <p>{"환경: prod"}</p>
      <p>{"엔드포인트 1개"}</p>
  </CardContent>
</Card>

</div>

## Continue Watching

<div className="grid gap-4 md:grid-cols-2 not-prose">

<Card>
  <CardHeader>
    <CardTitle>
      <Link to="/continue-watching-v3">{"Continue Watching API v3"}</Link>
    </CardTitle>
    <CardDescription>{"시청 이어보기(이어서 볼 위치) 저장과 조회."}</CardDescription>
  </CardHeader>
  <CardContent>
      <p>{"대상: 플레이어·클라이언트 개발자"}</p>
      <p>{"환경: prod"}</p>
      <p>{"엔드포인트 8개"}</p>
  </CardContent>
</Card>

<Card>
  <CardHeader>
    <CardTitle>
      <Link to="/continue-watching-v2">{"Continue Watching API v2"}</Link><span className="ml-2 text-xs font-medium text-muted-foreground">{"이전 버전"}</span>
    </CardTitle>
    <CardDescription>{"시청 이어보기 이전 버전. v3 로 옮겨가는 중이다."}</CardDescription>
  </CardHeader>
  <CardContent>
      <p>{"대상: 아직 v2 를 쓰는 팀"}</p>
      <p>{"환경: prod"}</p>
      <p>{"엔드포인트 8개"}</p>
  </CardContent>
</Card>

</div>

## Player Event

<div className="grid gap-4 md:grid-cols-2 not-prose">

<Card>
  <CardHeader>
    <CardTitle>
      <Link to="/player-event-v2">{"Player Event API v2"}</Link>
    </CardTitle>
    <CardDescription>{"플레이어와 클라이언트가 보내는 재생 이벤트·텔레메트리를 수집한다."}</CardDescription>
  </CardHeader>
  <CardContent>
      <p>{"대상: 플레이어 개발자, 데이터팀"}</p>
      <p>{"환경: prod"}</p>
      <p>{"엔드포인트 7개"}</p>
  </CardContent>
</Card>

</div>

## 지원 종료

<div className="grid gap-4 md:grid-cols-2 not-prose">

<Card>
  <CardHeader>
    <CardTitle>
      <Link to="/mediaio-odx-v2">{"MediaIO ODX API v2"}</Link><span className="ml-2 text-xs font-medium text-muted-foreground">{"지원 종료"}</span>
    </CardTitle>
    <CardDescription>{"v3 이전 세대 API. 기존 연동을 유지하기 위해서만 남겨둔다."}</CardDescription>
  </CardHeader>
  <CardContent>
      <p>{"대상: 아직 v2 를 쓰는 팀"}</p>
      <p>{"환경: prod"}</p>
      <p>{"엔드포인트 73개"}</p>
  </CardContent>
</Card>

</div>

## 문서 위 배지가 뜻하는 것

:::note

- **손으로 쓴 스펙입니다** — 서비스 코드에서 생성한 것이 아니라 사람이 관리하는 문서입니다. 실제 동작과 다를 수 있습니다.
- **더 이상 권장하지 않는 버전입니다** — 새 연동에는 쓰지 마십시오. 기존 연동을 위해 남겨둔 문서입니다.
- **prod 와 다릅니다 / 아직 prod 에 없습니다** — staging 문서에서 prod 와 갈라진 지점입니다.

:::

## 용어

| 용어 | 뜻 |
|---|---|
| prod | 실제 사용자가 쓰는 서비스 환경 |
| staging | 배포 전 확인용 환경. 서비스마다 하나 이상 있을 수 있습니다 |
| `Service-Name` | v4 요청 헤더. `amasian` 또는 `lg-channel-vietnam`. 어느 서비스의 콘텐츠를 받을지 정합니다 |
| `did` | 기기 식별자 헤더. 즐겨찾기·이어보기처럼 기기별 응답에 필요합니다 |
| 이전 버전 / 지원 종료 | 더 새 버전이 있음 / 기존 연동 유지용으로만 남김 |

대부분의 스펙은 서비스 코드에서 자동 수집됩니다. 어긋난 부분이 보이면 해당 서비스의 코드(`extend_schema`)를 고쳐야 합니다. 일부 스펙은 odx-api-docs 에서 옮겨온 손으로 쓴 문서이고, 코드 생성으로 옮겨가기 전까지 배지로 표시됩니다.

- 스냅샷과 변경 이력: [github.com/odkmedia/api-portal/tree/main/snapshots](https://github.com/odkmedia/api-portal/tree/main/snapshots)
- 문제 신고: #backend-api
