관리 API 키
키를 코드로 발급·폐기하기
키는 두 종류이고 서로 역할이 겹치지 않습니다.
| 종류 | 접두사 | 할 수 있는 것 | 할 수 없는 것 |
|---|---|---|---|
| 추론 키 | sk-mo-v1- | /chat/completions, /completions, /generation, /key, /credits 호출 | 키 발급·폐기 |
| 관리 키 | sk-mo-mgmt-v1- | 추론 키 발급·조회·수정·폐기 | 추론 호출 |
추론 키를 /api/v1/keys 에 보내거나 관리 키를 /chat/completions 에 보내면 401 invalid_api_key 입니다. 분리는 의도적입니다 — 돈을 쓸 수 있으면서 새 키까지 찍어낼 수 있는 키는 유출됐을 때 피해가 훨씬 큽니다.
관리 키 발급받기
대시보드 설정 → API 키(/settings/keys) 에서 만듭니다. 평문은 발급 시 한 번만 보여주고 다시는 볼 수 없습니다 — 서버에는 SHA-256 해시만 남습니다.
export MYIP_MGMT_KEY="sk-mo-mgmt-v1-..."키를 지목하는 값: hash
키는 hash 로 지목합니다. 평문 키 전체의 SHA-256 을 16진수 64자로 쓴 값입니다. 평문을 저장하지 않으므로 이 해시가 존재하는 유일한 손잡이입니다. 발급·목록 응답에서 얻을 수 있습니다.
엔드포인트
전부 Authorization: Bearer $MYIP_MGMT_KEY 가 필요합니다.
| 메서드 | 경로 | 용도 |
|---|---|---|
GET | /api/v1/keys | 추론 키 목록 |
POST | /api/v1/keys | 추론 키 발급 |
GET | /api/v1/keys/{hash} | 키 1건 조회 |
PATCH | /api/v1/keys/{hash} | 이름·비활성·한도 변경 |
DELETE | /api/v1/keys/{hash} | 영구 폐기 |
목록에는 추론 키만 나오고 폐기된 키는 빠집니다. 관리 키 자신은 목록에 나오지 않습니다.
키 발급
namestring필수사람이 읽는 이름. 필수이며 비어 있으면 안 됩니다.
limitnumber이 키의 사용 한도(원). null 이거나 생략하면 무제한입니다.
limit_resetstringnever, daily, weekly, monthly 중 하나. 한도가 적용되는 기간을 정합니다. 일·주·월 경계는 Asia/Seoul 기준입니다.
curl -X POST https://openrouter.myip.co.kr/api/v1/keys \
-H "Authorization: Bearer $MYIP_MGMT_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "batch-worker", "limit": 50000, "limit_reset": "monthly" }'응답:
{
"data": {
"created_at": "2026-09-04T02:11:43.201Z",
"updated_at": null,
"hash": "9f2c…c41a",
"label": "sk-mo-v1-au7…890",
"name": "batch-worker",
"disabled": false,
"limit": 50000,
"usage": 0
},
"key": "sk-mo-v1-au7c2f…c890"
}keystring평문 키. 여기서 한 번만 돌려줍니다. 연결을 닫기 전에 저장하세요.
data.hashstring평문의 SHA-256 16진수. GET·PATCH·DELETE 에서 쓰는 손잡이입니다.
data.labelstring마스킹된 키. 화면에 띄우거나 로그에 남겨도 안전합니다.
data.usagenumber현재 limit_reset 기간 동안 이 키가 쓴 금액(원). limit_reset 이 없으면 전체 기간 누적입니다.
키 목록
curl https://openrouter.myip.co.kr/api/v1/keys \
-H "Authorization: Bearer $MYIP_MGMT_KEY"{ "data": [ { "hash": "9f2c…c41a", "name": "batch-worker", "disabled": false, "limit": 50000, "usage": 1234.5 } ] }키 수정
PATCH 는 name, disabled, limit 을 받습니다. 생략한 필드는 그대로 두고, "limit": null 은 한도를 없앱니다.
# 키를 없애지 않고 잠시 멈춘다
curl -X PATCH https://openrouter.myip.co.kr/api/v1/keys/9f2c…c41a \
-H "Authorization: Bearer $MYIP_MGMT_KEY" \
-H "Content-Type: application/json" \
-d '{ "disabled": true }'limit_reset 은 발급 시점에 고정됩니다. 기간을 바꾸려면 새 키를 만드세요.
키 폐기
curl -X DELETE https://openrouter.myip.co.kr/api/v1/keys/9f2c…c41a \
-H "Authorization: Bearer $MYIP_MGMT_KEY"{ "data": { "success": true } }지금 쓰는 키 자체를 확인하기
추론 키는 자기 자신을 조회할 수 있습니다. 관리 키가 필요 없습니다.
curl https://openrouter.myip.co.kr/api/v1/key \
-H "Authorization: Bearer $MYIP_API_KEY"GET /api/v1/auth/key 는 같은 응답의 별칭입니다. limit, usage, limit_remaining, limit_reset, 기간별 사용액, 그리고 관리 키 여부를 돌려줍니다. 금액은 전부 원화입니다.
형상 호환을 위해서만 존재하는 필드는 값이 고정입니다. is_free_tier 는 언제나 false, byok_* 카운터는 BYOK 를 지원하지 않으므로 언제나 0, rate_limit 은 무시해도 되는 deprecated 필드입니다.
오류
| 상태 | error_type | 원인 |
|---|---|---|
| 400 | invalid_request | name 누락, JSON 형식 오류, 잘못된 limit_reset 값 |
| 401 | invalid_api_key | 관리 키가 아니거나, 없는·폐기된 키 |
| 403 | key_suspended | 관리자가 정지한 키 |
| 404 | not_supported | 본인 소유 키 중에 그 해시가 없음. 남의 해시도 똑같이 404 라 키 존재 여부를 탐색할 수 없습니다 |
대시보드가 다른 API 를 쓰는 이유
/api/v1/* 는 Bearer 토큰만 받습니다. 브라우저 대시보드는 세션 쿠키로 인증하며, 내부적으로 같은 키 로직을 쓰는 별도 엔드포인트를 호출합니다. SDK 표면에 쿠키 인증을 섞으면 편해지는 것 없이 CSRF 표면만 열리므로 그렇게 하지 않습니다.
마지막 수정 2026. 9. 5.