인증
인증 방식
씨미 OpenAPI는 두 가지 인증 방식을 지원합니다.
| 인증 방식 | 사용 헤더 | 용도 |
|---|---|---|
| Client ID/Secret | Client-Id, Client-Secret |
공개 정보 조회 (채널 정보, 라이브 목록 등) |
| Access Token (Bearer) | Authorization: Bearer {token} |
사용자 권한 API (팔로워, 채팅 전송 등) |
Client ID/Secret 사용 예시
GET /api/openapi/open/v1/channels?channelIds=12345
Client-Id: {clientId}
Client-Secret: {clientSecret}
Access Token 사용 예시
GET /api/openapi/open/v1/users/me
Authorization: Bearer {accessToken}
애플리케이션 등록
API를 사용하려면 먼저 개발자 포탈에서 애플리케이션을 등록해야 합니다.
- 개발자 포탈(/applications)에 로그인합니다.
- + 새 애플리케이션 버튼을 눌러 애플리케이션을 생성합니다.
- 생성된 Client ID와 Client Secret을 안전하게 보관합니다.
- OAuth 인증에 사용할 Redirect URI를 설정합니다.
Client Secret은 외부에 노출되지 않도록 주의하세요. 서버 사이드 코드에서만 사용하는 것을 권장합니다.
애플리케이션 이름 규칙
| 항목 | 제한 |
|---|---|
| 길이 | 2~20자 |
| 허용 문자 | 한글, 영문, 숫자, 밑줄(_), 공백 |
OAuth 2.0 Authorization Code Flow
사용자 권한이 필요한 API를 호출하려면 OAuth 2.0 Authorization Code Flow를 통해 Access Token을 발급받아야 합니다.
전체 흐름
1. 사용자를 씨미 인증 페이지로 리디렉트
→ https://ci.me/auth/openapi/account-interlock
?clientId={clientId}
&redirectUri={redirectUri}
&state={state}
2. 사용자가 권한 승인
3. 씨미가 Redirect URI로 Authorization Code 전달
→ https://your-app.com/callback?code={authorizationCode}&state={state}
4. Authorization Code로 Access Token 발급
POST /api/openapi/auth/v1/token
{
"grantType": "authorization_code",
"clientId": "{clientId}",
"clientSecret": "{clientSecret}",
"code": "{authorizationCode}"
}
5. Access Token으로 API 호출
Authorization: Bearer {accessToken}
6. 토큰 만료 시 Refresh Token으로 갱신
POST /api/openapi/auth/v1/token
{
"grantType": "refresh_token",
"clientId": "{clientId}",
"clientSecret": "{clientSecret}",
"refreshToken": "{refreshToken}"
}
토큰 유효 시간
| 토큰 | 유효 시간 | 비고 |
|---|---|---|
| Authorization Code | 10분 | 발급 후 10분 이내에 Access Token으로 교환해야 합니다 |
| Access Token | 1시간 (3,600초) | 만료 시 Refresh Token으로 갱신할 수 있습니다 |
| Refresh Token | 무제한 | 사용하지 않거나 명시적으로 취소하기 전까지 유효합니다 |
토큰 발급 API
POST /api/openapi/auth/v1/token
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
grantType |
string | O | "authorization_code" 또는 "refresh_token" |
clientId |
string | O | 애플리케이션 Client ID |
clientSecret |
string | O | 애플리케이션 Client Secret |
code |
string | 조건부 | grantType이 "authorization_code"일 때 필수 |
refreshToken |
string | 조건부 | grantType이 "refresh_token"일 때 필수 |
응답:
{
"code": 200,
"message": null,
"content": {
"accessToken": "eyJhbGciOiJ...",
"refreshToken": "dGhpcyBpc...",
"tokenType": "Bearer",
"expiresIn": "3600",
"scope": "READ:USER READ:CHANNEL"
}
}
토큰 취소 API
POST /api/openapi/auth/v1/token/revoke
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
clientId |
string | O | 애플리케이션 Client ID |
clientSecret |
string | O | 애플리케이션 Client Secret |
token |
string | O | 취소할 토큰 |
tokenTypeHint |
string | O | "access_token" 또는 "refresh_token" |
Scope 레퍼런스
Scope는 Access Token이 접근할 수 있는 API 범위를 정의합니다.
| Scope | 설명 | 관련 API |
|---|---|---|
READ:USER |
사용자 정보 조회 | 현재 사용자 정보 |
READ:CHANNEL |
채널 정보 조회 | 팔로워 목록, 관리자 목록 |
READ:SUBSCRIPTION |
구독 정보 조회 | 구독자 목록, 구독 이벤트 |
READ:LIVE_STREAM_KEY |
스트림 키 조회 | 스트림 키 조회 |
READ:LIVE_STREAM_SETTINGS |
라이브 설정 조회 | 라이브 설정 조회 |
WRITE:LIVE_STREAM_SETTINGS |
라이브 설정 변경 | 라이브 설정 변경 |
READ:LIVE_CHAT |
채팅 이벤트 조회 | 채팅 이벤트 구독 |
WRITE:LIVE_CHAT |
채팅 메시지 전송 | 채팅 메시지 전송 |
WRITE:LIVE_CHAT_NOTICE |
채팅 공지 등록 | 채팅 공지 등록 |
READ:LIVE_CHAT_SETTINGS |
채팅 설정 조회 | 채팅 설정 조회 |
WRITE:LIVE_CHAT_SETTINGS |
채팅 설정 변경 | 채팅 설정 변경 |
WRITE:USER_BLOCK |
사용자 추방/해제 | 사용자 추방, 추방 해제 |
READ:USER_BLOCK |
추방 사용자 조회 | 추방 사용자 목록 |
READ:DONATION |
후원 정보 조회 | 후원 이벤트 구독 |