본문으로 건너뛰기
1PANEL PLUS

SMM 패널 API 사용법: 리셀러를 위한 API v2 연결 안내

작성 1PANEL PLUS10분 읽기 유튜브마지막 업데이트


핵심 요약

표준 SMM 패널 API v2의 요청 방식과 6가지 action, 응답 예시, 오류 메시지, 요청 제한을 리셀러 기준으로 정리했어요.

SMM 패널 API는 다른 패널이나 직접 만든 프로그램에서 주문을 자동으로 넣고 상태를 확인하는 연결 방식이에요. 1PANEL PLUS는 표준 SMM 패널 API v2를 써서, 이미 다른 패널과 연결해 둔 코드가 있다면 주소와 키만 바꿔 바로 연결할 수 있어요. API와 웹사이트는 같은 서비스, 같은 1,000개당 가격, 같은 잔액을 써요.

SMM 패널 API는 누가 쓰나요?

  • 리셀러: 자기 패널에 서비스를 올려 두고 손님 주문을 자동으로 넘겨요
  • 에이전시: 여러 채널의 주문을 정해진 시간에 한 번에 넣어요
  • 개발자: 방송 시작이나 새 영상 업로드에 맞춰 주문하는 스크립트를 만들어요
  • 운영자: 잔액과 주문 상태를 자기 관리 화면에 모아 보여요

API 키는 어떻게 받나요?

첫 충전이 반영된 뒤 대시보드의 API 키 화면에서 만들어요. 키는 만든 순간 한 번만 보여 드리니 바로 복사해 안전한 곳에 보관해 주세요. 새 키를 만들면 이전 키는 바로 쓸 수 없게 돼서, 키가 노출되었다고 생각되면 새 키를 만들어 바꾸면 돼요.

API 요청은 어떻게 보내나요?

모든 요청은 https://1panelplus.com/api/v2 주소 하나로 POST로 보내요. 폼 필드(application/x-www-form-urlencoded 또는 multipart) 또는 JSON 본문(Content-Type: application/json) 가운데 편한 방식을 쓰고, 모든 요청에 key와 action을 함께 넣어요. 응답은 모두 JSON이에요.

요청 예시(폼 필드): key=내API키&action=balance

요청 예시(JSON): {"key": "내API키", "action": "balance"}

action
services
함께 보내는 값
없음
돌려받는 값
서비스 목록
action
add
함께 보내는 값
service, link, quantity 또는 comments
돌려받는 값
order(주문 번호)
action
status
함께 보내는 값
order 하나 또는 orders(쉼표로 100개까지)
돌려받는 값
charge, start_count, status, remains, currency
action
refill
함께 보내는 값
order
돌려받는 값
refill(리필 번호)
action
refill_status
함께 보내는 값
refill
돌려받는 값
status
action
balance
함께 보내는 값
없음
돌려받는 값
balance, currency

services로 서비스 목록은 어떻게 받나요?

action=services를 보내면 판매 중인 서비스 전체가 배열로 와요. 서비스마다 service(서비스 번호), name, type, category, rate, min, max, refill, cancel이 들어 있어요. rate는 1,000개당 가격(USD)이고, type이 Package면 패키지 1개 가격이에요. refill은 리필 기간이 있는 서비스면 true이고, cancel은 항상 false예요. category는 플랫폼 이름과 분류가 함께 적혀 있어서 자기 패널의 분류를 그대로 만들 수 있어요.

응답 예시: [{"service": 서비스번호, "name": "서비스 이름", "type": "Default", "category": "YouTube - 분류 이름", "rate": "1,000개당 가격", "min": "최소 수량", "max": "최대 수량", "refill": true, "cancel": false}]

가격과 서비스는 바뀔 수 있으니, 리셀러라면 정해진 간격으로 services를 다시 받아 자기 패널의 가격과 최소·최대 수량을 맞춰 두면 좋아요.

add로 주문은 어떻게 넣나요?

action=add에 service(서비스 번호), link(공개 링크), quantity(수량)를 함께 보내면 주문이 접수되고 금액이 잔액에서 바로 빠져요. 응답의 order가 주문 번호라서, 이 번호를 저장해 두고 status와 refill에 써요. 주문은 첫 충전이 반영된 계정에서 넣을 수 있어요.

  • 일반 서비스: service, link, quantity를 보내요
  • Custom Comments 서비스: quantity 대신 comments를 보내요. 한 줄에 댓글 하나씩, 줄마다 500자까지이고 줄 수가 곧 수량이에요
  • Package 서비스: 수량을 보내지 않아도 돼요. 패키지 하나로 주문돼요

요청 예시: key=내API키&action=add&service=서비스번호&link=https://www.youtube.com/watch?v=영상ID&quantity=1000

응답 예시: {"order": 주문번호}

status로 주문 상태는 어떻게 확인하나요?

action=status에 order(주문 번호 하나)를 보내면 그 주문의 상태가 오고, orders에 주문 번호를 쉼표로 이어 보내면 한 번에 100개까지 조회할 수 있어요. 여러 주문을 관리한다면 orders로 묶어 조회하면 요청 수를 크게 아낄 수 있어요.

응답 예시(하나): {"charge": "결제 금액", "start_count": "시작 수치", "status": "In progress", "remains": "남은 수량", "currency": "USD"}

응답 예시(여러 개): {"주문번호1": {"charge": "...", "start_count": "...", "status": "Completed", "remains": "0", "currency": "USD"}, "주문번호2": {"error": "Incorrect order ID"}}

status 값
Pending
뜻
접수되어 시작을 기다리거나 처리로 넘어가는 중
status 값
In progress
뜻
들어가는 중
status 값
Completed
뜻
모두 들어간 상태
status 값
Partial
뜻
일부가 들어가고 나머지 금액이 잔액으로 돌아온 상태
status 값
Canceled
뜻
처리되지 못하고 전액이 잔액으로 돌아온 상태

charge는 결제 금액에서 환불된 금액을 뺀 값이라서, 부분 완료나 취소 뒤에는 실제로 쓴 금액이 바로 보여요. 주문 상태는 약 1분마다 자동으로 갱신되니, status도 1분 안팎의 간격으로 조회하면 충분해요.

refill과 refill_status는 어떻게 쓰나요?

action=refill에 order를 보내면 리필이 요청되고 refill(리필 번호)이 와요. 리필 기간이 있는 서비스의 완료 또는 부분 완료 주문에서, 주문이 끝난 날부터 리필 기간 안에, 진행 중인 리필이 없고 마지막 요청 뒤 24시간이 지났을 때 받아요. action=refill_status에 refill을 보내면 Pending, In progress, Completed, Rejected 가운데 하나로 상태를 알려 드려요.

응답 예시: {"refill": 리필번호} 그리고 {"status": "Completed"}

리필 규칙은 웹사이트와 같아요. 자세한 조건은 리필 기간 알아보기에 정리했어요.

balance로 잔액은 어떻게 확인하나요?

action=balance를 보내면 지금 잔액과 통화(USD)가 와요. 리셀러라면 주문을 넘기기 전에 잔액을 확인해, 잔액이 일정 금액보다 적어지면 알림을 보내도록 만들어 두면 주문이 끊기지 않고 이어져요.

응답 예시: {"balance": "지금 잔액", "currency": "USD"}

API 오류 메시지는 어떤 뜻인가요?

오류는 error 칸에 영어 문장이 담긴 JSON으로 와요. 문장마다 원인이 정해져 있어서 프로그램에서 그대로 비교해 처리하면 돼요.

error 값
Invalid API key
뜻
키가 없거나 맞지 않아요
error 값
Too many requests
뜻
1분 요청 수를 넘었어요. 잠시 뒤 다시 보내요
error 값
Add funds first
뜻
첫 충전이 반영된 뒤 주문할 수 있어요
error 값
Incorrect service ID
뜻
판매 중인 서비스 번호가 아니에요
error 값
Incorrect link
뜻
링크 형식이 맞지 않아요
error 값
Quantity out of range
뜻
수량이 서비스의 최소·최대 범위 밖이에요
error 값
Incorrect comments
뜻
댓글 줄이 비었거나 한 줄이 500자를 넘어요
error 값
Not enough funds on balance
뜻
잔액이 주문 금액보다 적어요
error 값
Incorrect order ID
뜻
이 계정의 주문 번호가 아니에요
error 값
Incorrect refill ID
뜻
이 계정의 리필 번호가 아니에요
error 값
Incorrect action
뜻
action 값이 6가지 가운데 하나가 아니에요

리필 요청에는 Refill is not available for this service(리필 기간이 없는 서비스), Order is not finished yet(아직 끝나지 않은 주문), Refill period has ended(리필 기간이 지난 주문), Refill already requested, try again later(진행 중인 리필이 있거나 24시간이 지나지 않은 주문)가 올 수 있어요.

API 요청은 몇 번까지 보낼 수 있나요?

키 하나에 1분 300회까지 요청할 수 있어요. 상태 조회는 orders로 100개씩 묶고, 서비스 목록은 필요할 때만 다시 받으면 넉넉하게 쓸 수 있어요. 예를 들어 진행 중인 주문이 1,000개라면 1분에 한 번 10번의 요청으로 모두 조회할 수 있어요.

리셀러는 판매 가격을 어떻게 정하나요?

API로 받는 rate가 1PANEL PLUS의 1,000개당 가격이고, 자기 패널의 판매 가격은 리셀러가 직접 정해요. 예를 들어 rate가 $2.00인 서비스에 25%를 더해 판매하면 1,000개당 $2.50이 되고, 손님이 4,000개를 주문하면 판매 금액은 $10.00, 1PANEL PLUS에서 빠지는 금액은 $8.00이에요. 이 가격은 계산을 보여 드리기 위한 예시예요.

API 연결은 어떤 순서로 하면 좋을까요?

  1. 잔액을 충전하고 대시보드에서 API 키를 만들어요
  2. balance로 키와 연결을 확인해요
  3. services로 서비스 목록을 받아 자기 패널에 올려요
  4. 가장 작은 수량으로 add를 한 번 보내 주문 번호를 받아요
  5. status로 상태가 바뀌는지 확인한 뒤 자동 주문을 켜요

curl, PHP, Python, Node.js 예제와 전체 필드 설명은 API 문서에 있고, 다른 질문은 자주 묻는 질문의 API 묶음에서 볼 수 있어요.