API

패널의 모든 기능은 서로 다른 두 개의 API로 사용할 수 있습니다. 둘 다 같은 계정, 같은 잔액, 같은 카탈로그를 사용하며 차이는 형식과 기능에 있습니다.

패널의 모든 기능은 서로 다른 두 개의 API로 사용할 수 있습니다. 둘 다 같은 계정, 같은 잔액, 같은 카탈로그를 사용하며 차이는 형식과 기능에 있습니다.

왜 API가 두 개인가요?

업계 전체가 쓰는 전통적인 리셀러 API(v2)는 단일 엔드포인트로 폼을 보내고 언제나 HTTP 200을 반환합니다. 기성 패널 소프트웨어가 기대하는 형식이 정확히 이것이므로 그대로 유지합니다. 반면 직접 시스템을 만드는 개발자는 이 형식의 한계에 계속 부딪혔습니다. 오류를 구분할 수 없었고, 카탈로그가 한 덩어리로 내려왔으며, 주문 상태를 알려면 끊임없이 조회해야 했습니다. v3는 이 필요를 위해 만들어졌습니다.

레거시 API는 종료되지 않습니다. 지원 종료일이 없으므로 이미 동작하는 연동을 바꿀 필요가 없습니다.

비교

항목레거시 (v2)새 API (v3)
형식단일 엔드포인트, 폼 전송, action 매개변수리소스 중심 REST, JSON 본문
HTTP 상태 코드실패해도 항상 200실제 코드 (400, 401, 402, 404, 409, 429, 502)
오류자유 형식 텍스트type + 고정된 code + 현지화된 메시지 + param + doc_url
주문 상태현지화된 텍스트만 제공고정된 기계 값과 별도의 표시용 라벨
서비스 설명없음10개 언어 설명, 평균 소요 시간, 플랫폼, 카테고리
주문 입력 항목타입 이름으로 추측서비스마다 자체 필드 스키마를 게시
가격 단위표시되지 않음 (패키지에서 1000배 오차의 원인)per_1000 또는 per_order로 명시
카탈로그한 번의 응답에 전체 서비스필터와 커서 페이지네이션
중복 주문 방지없음Idempotency-Key
상태 알림지속적인 폴링서명된 웹훅 또는 이벤트 스트림
스키마없음OpenAPI 3.1
언어영어와 터키어 (주소 분리)10개 언어 (헤더 또는 매개변수)

어느 쪽을 골라야 하나요?

레거시 (v2)

기성 패널 소프트웨어, 봇, 리셀러 패널을 쓰고 있다면 레거시 API를 고르십시오. 대부분은 API 주소와 키만 바꾸면 되고 몇 분 안에 동작합니다.

새 API (v3)

직접 애플리케이션, 스토어, 자동화를 만들고 있다면 v3를 고르십시오. 오류 처리, 중복 주문 방지, 알림 기반이 기본으로 제공되며 주문 폼을 서비스 스키마에서 그대로 생성할 수 있습니다.

시작하기

  1. 1키 탭에서 API 키를 하나 만듭니다.
  2. 2서비스 목록을 받아 사용할 서비스의 id와 필드 스키마를 확인합니다.
  3. 3주문을 먼저 preview로 검증한 다음 생성합니다.
  4. 4상태를 추적하려면 웹훅을 등록하거나 이벤트 스트림을 읽습니다.

오류 (48)

코드상태설명
missing_api_key401API 키가 전송되지 않았습니다. 'Authorization: Bearer <key>' 헤더로 보내세요.
invalid_api_key401제공한 API 키가 유효하지 않습니다.
revoked_api_key401이 API 키는 취소되어 더 이상 사용할 수 없습니다.
account_banned403이 계정은 차단되었습니다.
account_suspended403이 계정은 일시 정지되었습니다.
insufficient_scope403이 API 키에는 해당 엔드포인트에 대한 권한이 없습니다.
invalid_json400요청 본문이 유효한 JSON이 아닙니다.
unsupported_content_type415지원하지 않는 Content-Type입니다. application/json 또는 application/x-www-form-urlencoded를 사용하세요.
method_not_allowed405이 엔드포인트에서는 해당 HTTP 메서드를 사용할 수 없습니다.
payload_too_large413요청 본문이 너무 큽니다.
missing_parameter400필수 매개변수가 누락되었습니다.
invalid_parameter400매개변수 값이 유효하지 않습니다.
invalid_quantity400수량이 유효한 양의 정수가 아닙니다.
quantity_out_of_range400수량이 이 서비스에서 허용하는 범위를 벗어났습니다.
invalid_comments400댓글 필드가 비어 있거나 줄 수가 너무 많습니다.
invalid_username400이 서비스에서 사용할 수 없는 사용자 이름입니다.
invalid_subscription400구독 매개변수가 유효하지 않습니다.
invalid_runs400드립피드에 사용할 'runs' 값이 유효하지 않습니다.
invalid_interval400드립피드에 사용할 'interval' 값이 유효하지 않습니다.
dripfeed_not_supported400이 서비스는 드립피드를 지원하지 않습니다.
missing_required_field400이 서비스 유형에 필요한 필드가 누락되었거나 유효하지 않습니다.
service_inactive400이 서비스는 현재 주문할 수 없습니다.
invalid_cursor400페이지네이션 커서가 유효하지 않습니다.
invalid_limit400'limit' 매개변수가 허용 범위를 벗어났습니다.
invalid_webhook_url400웹훅 URL은 공개된 https:// 주소여야 합니다.
invalid_events400요청한 이벤트 유형 중 하나 이상을 알 수 없습니다.
batch_too_large400한 번의 일괄 요청에 항목이 너무 많습니다.
cancel_not_supported400이 서비스는 취소를 지원하지 않습니다.
refill_not_supported400이 서비스는 리필을 제공하지 않습니다.
unknown_endpoint404알 수 없는 엔드포인트입니다. 사용 가능한 경로는 API 레퍼런스를 확인하세요.
service_not_found404해당 id의 서비스가 없습니다.
order_not_found404계정에 해당 id의 주문이 없습니다.
refill_not_found404계정에 해당 id의 리필이 없습니다.
webhook_not_found404계정에 해당 id의 웹훅 엔드포인트가 없습니다.
order_not_cancelable409현재 상태 때문에 이 주문은 더 이상 취소할 수 없습니다.
cancel_rejected409공급자가 취소 요청을 거부했습니다.
order_not_completed409리필은 완료된 주문에만 요청할 수 있습니다.
idempotency_key_reuse409이 Idempotency-Key는 다른 요청 본문으로 이미 사용되었습니다.
idempotency_in_progress409이 Idempotency-Key로 보낸 요청이 아직 처리 중입니다. 잠시 후 다시 시도하세요.
webhook_limit_reached409웹훅 엔드포인트 최대 개수에 도달했습니다.
insufficient_balance402이 주문을 처리할 잔액이 부족합니다.
rate_limit_exceeded429요청 한도를 초과했습니다. Retry-After 응답 헤더를 확인하세요.
provider_error502공급자가 오류를 반환했습니다. 다시 시도하세요.
refill_failed502리필 요청이 공급자에게 거부되었습니다.
service_temporarily_unavailable503이 서비스는 일시적으로 사용할 수 없습니다. 나중에 다시 시도하세요.
internal_error500당사 측에서 예기치 않은 오류가 발생했습니다.