카탈로그 작성자 API
모드, 모드팩, 맵, 팩을 위한 mca_live_ 작성자 키를 알아보세요: 초안, 버전 업로드, 페이지, 가격, 판매 통계. API 엔드포인트, 키 권한, 요청 예시, 오류, 한도.
업데이트 2026년 10월 13일
작성자가 사이트에서 자료로 하는 모든 작업은 자신의 스크립트나 빌드 파이프라인에서 처리할 수 있어요. 초안 생성, 새 버전 업로드, 페이지 편집, 가격 변경, 판매 조회까지 모두 가능해요. 이를 위해서는 작성자 키가 필요해요. mca_live_… 형태의 문자열이에요.
키는 자신의 자료, 즉 자신이 작성자인 자료에만 작동해요. 주소를 알고 있더라도 다른 사람의 작업은 건드릴 수 없어요.
키
키는 프로필의 작성자 섹션에서 발급해요. 키 이름을 정하고 스코프를 선택하세요. 키는 한 번만 표시되니 파이프라인 시크릿에 저장하세요. 분실했다면 폐기하고 새로 발급하면 돼요. 활성 키는 최대 10개까지 가질 수 있어요. 비밀번호나 이메일을 변경하면 계정의 모든 키가 폐기되니 이후에 새로 발급하세요.
| 스코프 | 부여하는 권한 |
|---|---|
items:write | 초안 생성, 작성자 확인, 자료 검수 제출 |
versions:write | 업로드 URL 발급 및 버전 등록 |
page:write | 이미지, 페이지 초안, 검수 제출 |
pricing:write | 자료 가격 |
stats:read | 다운로드, 플레이어, 판매 |
파이프라인에는 필요한 것만 부여하세요. 빌드 키는 보통 versions:write와 stats:read로 충분해요.
모든 엔드포인트는 https://api.millida.net/v2 아래에 있으며, 키는 헤더에 넣어요.
Authorization: Bearer mca_live_…
내 자료
GET /catalog/author-api/items
[
{
"slug": "my-pack",
"type": "MODPACK",
"title": "My modpack",
"status": "PUBLISHED",
"moderationStatus": "PUBLISHED",
"pricing": "ONE_TIME",
"priceKopecks": 49900,
"versionsCount": 12,
"downloads": 5310,
"publicUrl": "/modpacks/my-pack"
}
]
새 자료
POST /catalog/author-api/items
{ "type": "MOD", "title": "My mod", "summary": "Briefly about the mod" }
자료는 초안으로 나타나요. 주소(slug)는 이름에서 가져오며, 이미 사용 중인 주소는 사용 가능한 주소 제안과 함께 409를 반환해요. 생성 시 가격(pricing, priceKopecks)은 pricing:write 스코프가 있는 키로만 전달할 수 있고, 그렇지 않으면 403 MISSING_SCOPE 응답이 와요.
새 버전
1. 업로드 URL:
POST /catalog/author-api/items/my-pack/upload-url
{ "version": "1.4.0", "fileName": "my-pack-1.4.0.zip", "size": 734003200 }
{ "uploadUrl": "https://…", "storageKey": "catalog/packs/my-pack/…", "expiresIn": 3600 }
2. 파일 업로드 — uploadUrl로 PUT 요청을 보내 스토리지에 직접 업로드해요. 저희를 거치지 않아요.
curl -X PUT --upload-file my-pack-1.4.0.zip "$UPLOAD_URL"
3. 버전 등록:
POST /catalog/author-api/items/my-pack/versions
{
"version": "1.4.0",
"storageKey": "catalog/packs/my-pack/…",
"gameVersions": ["1.20.1"],
"loaders": ["fabric"],
"loaderVersion": "0.16.0",
"changelog": "New quests"
}
버전은 자동 검수로 넘어가고, 검수 후 플레이어에게 표시돼요. 각 업로드는 새 파일이에요. 이미 게시된 버전은 덮어쓸 수 없어요.
검수 제출
새 자료는 검수 담당자를 거쳐 카탈로그에 들어가요. 버전이 하나 이상 있으면 작업이 본인 것이고 라이선스를 직접 선택했음을 확인하세요. 이는 별도의 요청이에요. 검수 제출이 대신 처리해 주지 않아요.
POST /catalog/author-api/items/my-pack/authorship
{ "ok": true }
그다음 자료를 제출하세요.
POST /catalog/author-api/items/my-pack/submit
{ "ok": true, "status": "PENDING" }
확인 없이는 400 “Confirm that the modpack is yours and the license was chosen by you” 응답이, 버전이 없으면 400 “Upload the modpack file first” 응답이 와요.
페이지
PUT /catalog/author-api/items/my-pack/page
{ "title": "My modpack", "summary": "…", "descriptionMd": "## What's inside\n…" }
이것은 초안이에요. 새 페이지가 검수를 통과할 때까지 플레이어는 이전 페이지를 봐요. 설명의 이미지는 반드시 저희에게만 업로드해야 하고, 링크는 Millida 페이지로만 연결해야 해요. 아이콘(iconUrl), 스크린샷(gallery), 설명 이미지를 먼저 업로드하세요.
curl -H "Authorization: Bearer $MCA_KEY" -F "file=@icon.png" https://api.millida.net/v2/catalog/author-api/images
{ "url": "https://…/uploads/…/icon.png" }
PNG, JPG, WebP, AVIF를 최대 15 MB까지 지원하며 GIF는 지원하지 않아요. 업로드에는 page:write 스코프가 필요하고, 응답에는 페이지에 넣을 수 있는 주소가 포함돼요. 검수 제출:
POST /catalog/author-api/items/my-pack/page/submit
가격
PUT /catalog/author-api/items/my-pack/pricing
{ "pricing": "ONE_TIME", "priceKopecks": 49900 }
pricing | 의미 |
|---|---|
FREE | 무료 |
ONE_TIME | 1회 구매, 영구 이용 |
SUBSCRIPTION | 구독, 매월 1회 청구 |
- 금액은 코펙 단위예요. 유료 자료의 최소 가격은 300 ₽(
30000), 스킨과 망토는 50 ₽(5000)이며, 최대는 100,000 ₽(10000000)예요. - 플랫폼은 각 판매에서 **30%**를 가져가고, 나머지는 Millida 지갑으로 들어가요.
- 판매 대금은 Millida 안에서 즉시 사용할 수 있지만, 출금은 구매 후 7일 뒤에 가능해요.
- 유료 자료의 파일은 접근 권한이 있는 사람만 다운로드할 수 있어요. 작성자인 본인은 항상 접근할 수 있어요.
통계
GET /catalog/author-api/items/my-pack/stats
{
"versions": [{ "version": "1.4.0", "downloads": 312, "reviewStatus": "APPROVED" }],
"players": { "players": 1204, "playersRecent": 380, "days": [{ "day": "2026-09-24", "players": 41 }] },
"sales": {
"totalKopecks": 998000,
"netKopecks": 698600,
"count": 20,
"refundedCount": 0,
"holdDays": 7,
"last30d": [{ "day": "2026-09-24", "count": 3, "netKopecks": 104790 }]
}
}
모든 자료의 판매를 한 번에:
GET /catalog/author-api/sales
오류
오류 응답에는 항상 message가 포함되며, 사람에게 그대로 보여줄 수 있어요. 또한 code가 포함되는 경우가 많은데, 스크립트에서 분기 처리하기 편해요.
| 상태 | code | 발생한 일 |
|---|---|---|
| 401 | INVALID_KEY | 키가 없거나, 형식이 잘못되었거나, 찾을 수 없음 |
| 401 | REVOKED, EXPIRED | 키가 폐기되었거나 만료됨 |
| 401 | OWNER_UNAVAILABLE | 키 소유자의 계정이 차단됨 |
| 403 | MISSING_SCOPE | 키에 필요한 스코프가 없음. 목록은 scopes에 있음 |
| 404 | — | 자료가 없거나 본인 것이 아님 |
| 400 | PRICE_TOO_LOW, PRICE_TOO_HIGH, INVALID_PRICING | 가격이 규칙을 벗어남. 범위는 minKopecks와 maxKopecks에 있음 |
| 409 | UNDER_REVIEW | 자료가 검수 담당자의 검수 중임 — 새 파일은 검수 응답 이후에 |
| 429 | — | 요청이 너무 많음. 나중에 다시 시도하세요 |
제한
- 키당 분당 120회 요청.
- 새 자료 — 시간당 10개, 업로드 URL과 버전 — 각각 시간당 30개, 페이지 편집 — 시간당 120회, 이미지 — 시간당 60회, 가격 변경 — 시간당 60회.