개발자 접근 활성화
설정 → 개발자에서 접근을 활성화한 후 API 키 및 선택적 웹후크 엔드포인트를 생성하세요.
- 키는 귀하의 판매자 계정에 범위가 지정되며 언제든지 취소할 수 있습니다.
- 오픈 API 트래픽은 모든 판매자에 대해 분당 300 요청으로 속도 제한됩니다.
- GET /api/v1은 사용 가능한 리소스에 대한 검색 메타데이터를 반환합니다.
API 인증 및 호출
실시간 비밀 키와 함께 Authorization: Bearer를 전송하세요. HTTPS만 선호합니다. 공개 클라이언트에 키를 포함하지 마세요.
- offers:read: 오퍼 목록 조회 및 가져오기.
- offers:write: 오퍼 생성, 업데이트, 게시 및 삭제.
- orders:read: 판매자 주문 목록 조회 및 가져오기.
- orders:write: 주문을 배송 완료로 표시.
최근 주문 목록
curl -H "Authorization: Bearer rmt_sk_live_…" https://rmt.gg/api/v1/orders
키 회전
키가 유출되면 개발자 설정에서 취소하고 새 키를 생성하세요. 라이브 중이라면 취소하기 전에 자동화를 업데이트하세요.
Open API 엔드포인트 맵
기본 경로는 /api/v1입니다. 성공적인 응답에는 X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset이 포함됩니다. GET /api/v1은 이 문서와 일치하는 기계 판독 가능한 작업 카탈로그를 반환합니다.
- GET /api/v1: 검색 (유효한 키).
- GET /api/v1/offers: 오퍼 목록 조회 (offers:read).
- POST /api/v1/offers: 초안 생성 (offers:write).
- GET /api/v1/offers/:urlOrId: 오퍼 가져오기 (offers:read).
- PATCH /api/v1/offers/:urlOrId: 오퍼 필드 업데이트 (offers:write).
- DELETE /api/v1/offers/:urlOrId: 삭제 또는 아카이브 (offers:write).
- POST /api/v1/offers/:urlOrId/publish: 게시 (offers:write).
- GET /api/v1/orders: 판매 목록 조회 (orders:read).
- GET /api/v1/orders/:uid: 주문 가져오기 (orders:read).
- POST /api/v1/orders/:uid/deliver: 배송 완료로 표시 (orders:write).
실시간 작업 카탈로그 인쇄
curl -s -H "Authorization: Bearer rmt_sk_live_…" https://rmt.gg/api/v1 | jq ".operations"
오퍼 API
오퍼 식별자는 공개 URL 슬러그 또는 숫자 ID를 수락합니다. 응답에는 내부 ID와 sellerId가 생략됩니다. 재고 행, 옵션 가격, 미디어 및 속성은 판매자 편집기(또는 향후 엔드포인트)에서 관리되며, 아직 PATCH를 통해 관리되지 않습니다.
활성 오퍼 목록 조회
curl -H "Authorization: Bearer rmt_sk_live_…" "https://rmt.gg/api/v1/offers?archive=active"
초안 오퍼 생성
curl -X POST -H "Authorization: Bearer rmt_sk_live_…" https://rmt.gg/api/v1/offers
관계가 있는 오퍼 하나 가져오기
curl -H "Authorization: Bearer rmt_sk_live_…" https://rmt.gg/api/v1/offers/YOUR_OFFER_URL
허용된 필드 업데이트
curl -X PATCH -H "Authorization: Bearer rmt_sk_live_…" -H "Content-Type: application/json" https://rmt.gg/api/v1/offers/YOUR_OFFER_URL -d @body.json
허용된 PATCH 본문 필드
{
"title": "업데이트된 제목",
"description": "구매자용 설명",
"visibility": "PUBLIC",
"categoryId": 12,
"offeringId": 34,
"thumbnail": "https://…",
"offerType": "ACCOUNT",
"listingMode": "STANDARD"
}게시 (기본 PUBLIC)
curl -X POST -H "Authorization: Bearer rmt_sk_live_…" -H "Content-Type: application/json" https://rmt.gg/api/v1/offers/YOUR_OFFER_URL/publish -d '{"visibility":"PUBLIC"}'삭제 또는 아카이브
curl -X DELETE -H "Authorization: Bearer rmt_sk_live_…" https://rmt.gg/api/v1/offers/YOUR_OFFER_URL
게시 요구 사항
필수 목록 필드가 불완전할 경우 게시가 400으로 실패합니다 (오퍼 편집기와 동일한 검증). 성공적인 업데이트는 offer.updated 웹후크를 발생시킬 수 있습니다.
주문 API
주문은 귀하의 판매자 계정에 국한됩니다. 구매자 청구 세부정보는 삭제될 수 있습니다. 가져오기 및 배송을 위해 공개 주문 uid(불투명 참조만 사용하지 않음)를 사용하십시오.
최근 유료 판매 목록 조회
curl -H "Authorization: Bearer rmt_sk_live_…" "https://rmt.gg/api/v1/orders?status=PAID&limit=20&sort=newest"
라인 항목이 있는 주문 하나 가져오기
curl -H "Authorization: Bearer rmt_sk_live_…" https://rmt.gg/api/v1/orders/ORDER_UID
배송 완료로 표시
curl -X POST -H "Authorization: Bearer rmt_sk_live_…" -H "Content-Type: application/json" https://rmt.gg/api/v1/orders/ORDER_UID/deliver -d @evidence.json
선택적 증거 본문
{
"evidence": [
"https://cdn.example.com/proof-1.png"
]
}오류 및 속도 제한
오류는 JSON { error, code? }를 반환합니다. 속도 제한은 API 키당 분당 300 요청입니다.
- 401 API_KEY_REQUIRED 또는 API_KEY_INVALID.
- 403 SCOPE_MISSING: 키에 엔드포인트 범위가 부족합니다.
- 404: 소유하지 않은 오퍼 또는 주문을 찾을 수 없음 (어느 쪽이든 동일한 메시지).
- 429 RATE_LIMITED: Retry-After 및 X-RateLimit-* 헤더가 포함됩니다.
- 400: 검증 실패 (게시 불완전, 배송 불가, 빈 PATCH).
429 처리
Retry-After 초를 사용하여 대기하십시오. 제한을 우회하기 위해 키를 회전하지 마십시오; 제한은 키당 적용되며 모든 판매자에게 동일합니다.
아웃바운드 주문 웹후크
order.paid, order.delivered, order.completed, order.refunded 및 order.disputed에 구독하세요. 서버 또는 Discord 채널 임베드를 위해 JSON을 선택하세요. 선택적 서명은 X-RMT-Timestamp 및 X-RMT-Signature를 사용합니다.
- Discord 형식 게시물은 주문 링크 및 제공 이름이 포함된 풍부한 임베드를 게시합니다.
- JSON 형식 게시물은 제공 이름 및 항목을 포함하는 구조화된 본문을 게시합니다.
- 비밀을 설정한 경우, timestamp.body의 HMAC-SHA256이 v1= 서명 16진수와 일치하는지 확인하세요.
- 배송 이력은 각 엔드포인트 아래에 나타나므로 실패를 재시도할 수 있습니다.
예시 서명 헤더
{
"X-RMT-Event": "order.paid",
"X-RMT-Timestamp": "1710000000",
"X-RMT-Signature": "v1=abc123…"
}서명 확인
timestamp + "." + rawBody 문자열에 대해 HMAC-SHA256을 계산하세요. v1= 이후의 16진수와 비교하세요.
Node.js 스케치
import crypto from "crypto";
const expected = crypto
.createHmac("sha256", secret)
.update(`${timestamp}.${rawBody}`)
.digest("hex");
const ok = expected === signature.replace(/^v1=/, "");