SMS 수신 API
JSON API로 번호를 구매하고 인증 코드를 읽으십시오. 신원 확인은 없으며 결제는 암호화폐로 합니다.
API는 어떻게 구성되어 있나요?
- 계정을 만들고 반환된 문구를 보관하십시오. 그것이 유일한 접속 수단이며 재설정할 수 없습니다.
- 충전을 만들고 암호화폐를 보낸 뒤 반영을 기다리십시오.
- 원하는 서비스와 국가로 번호를 구매하십시오. 잔액이 즉시 차감됩니다.
- 코드가 담긴 SMS를 조회하십시오. 주문이 만료될 때까지 코드가 오지 않으면 금액은 자동으로 환불됩니다.
한 번 충전하고 여러 번 구매하십시오. 한 번의 충전이 잔액이 허락하는 만큼의 번호를 감당하므로, 승인을 기다리는 것은 첫 구매뿐입니다.
인증
계정의 문구를 bearer 토큰으로 보내십시오. 별도의 API 키도, 로그인 호출도 없습니다. 문구가 곧 자격 증명입니다.
Authorization: Bearer YOUR-SEED-PHRASE
카탈로그 엔드포인트는 인증을 요구하지 않으므로, 계정을 만들기 전에도 서비스와 국가와 가격을 볼 수 있습니다. 돈과 주문에 관련된 모든 것에는 이 헤더가 필요합니다.
기본 주소
모든 엔드포인트는 다음을 기준으로 합니다:
https://www.otpdrop.com/api/v1
응답은 JSON입니다. POST 본문은 application/json 또는
application/x-www-form-urlencoded로 받습니다.
오류
실패하면 2xx가 아닌 상태 코드와 함께 오류 객체 하나가 반환됩니다.
{
"error": {
"code": "invalid_request",
"message": "unknown service: \"whatsap\""
}
}
| 상태 | 의미 |
|---|---|
200 | 성공 |
201 | 생성됨 — 계정, 충전 또는 주문이 만들어졌습니다 |
401 | Authorization 헤더에 문구가 없거나 잘못되었습니다 |
422 | 요청은 이해했으나 수행할 수 없습니다 |
500 | 저희 쪽의 장애 |
422에서 자주 보이는 메시지:
| 메시지 | 원인 |
|---|---|
insufficient_funds | 잔액이 가격보다 적습니다 — 먼저 충전을 만드십시오 |
unknown service | 그런 서비스 코드가 없습니다. 서비스 목록을 보십시오 |
unknown country | 그런 국가 코드가 없습니다. 국가 목록을 보십시오 |
unknown coin | 지원하지 않는 통화입니다. 충전 엔드포인트를 보십시오 |
amount_usd must be between… | 충전은 $25–$1000로 제한됩니다 |
호출 한도가 있나요?
공개된 할당량은 없고 조일 API 키도 없습니다. 다만 엔드포인트를 쉬지 않고 호출하는 것이 공짜는 아닙니다. 그중 둘은 반복 조회를 전제로 만들어졌으므로 특히 주의가 필요합니다.
| 엔드포인트 | 적절한 간격 | 이유 |
|---|---|---|
| 카탈로그와 가격 계산 | 직접 캐시하십시오 | 가격은 자주 바뀌지 않습니다. 요청할 때마다 카탈로그를 다시 받는 것은 소용이 없습니다. |
/topups/{id} | 10~15초마다 | 네트워크 승인은 밀리초가 아니라 몇 분이 걸립니다. 더 자주 물어도 더 일찍 알 수는 없습니다. |
/orders/{id}/sms | 3~5초마다 | 코드는 보통 몇 초 안에 도착합니다. 더 촘촘한 반복은 부하만 더합니다. |
| 구매 | 필요할 때 | 구매할 때마다 실제 돈이 나가므로, 제동 없는 반복은 저희보다 고객님께 더 비쌉니다. |
공격처럼 보이는 트래픽은 정중한 429 없이 앞단에서 차단됩니다. 더 자주 조회할 정당한
사유가 있으시면 문의 페이지로 먼저 알려 주십시오.
서비스 목록 조회
GET/api/v1/services
모든 서비스를 코드, 분류, 최저 가격과 함께 반환합니다. 인증이 필요하지 않습니다.
요청
curl -s https://www.otpdrop.com/api/v1/services
응답
{
"services": [
{
"code": "binance",
"name": "Binance",
"category": "Finance",
"from_price_cents": 85,
"color": "#F0B90B",
"icon": "binance"
}
],
"count": 133
}
국가 목록 조회
GET/api/v1/countries
Every country with its dial code and how many services are available there. No authentication required.
요청
curl -s https://www.otpdrop.com/api/v1/countries
응답
{
"countries": [
{
"code": "us",
"name": "United States",
"dial_code": "+1",
"service_count": 133
}
],
"count": 197
}
가격 매트릭스
GET/api/v1/catalog
The most useful service and country combinations with their prices, cheapest first. No authentication required.
매개변수
| 이름 | 자료형 | 설명 | |
|---|---|---|---|
limit | integer | 선택 | How many rows to return, 1 to 500. Defaults to 12. |
요청
curl -s 'https://www.otpdrop.com/api/v1/catalog?limit=2'
응답
{
"items": [
{
"service": "badoo",
"country": "us",
"price_cents": 35
}
],
"count": 2
}
가격 계산
GET/api/v1/quote
The exact price for one service and country before you commit to buying. No authentication required.
매개변수
| 이름 | 자료형 | 설명 | |
|---|---|---|---|
service | string | 필수 | Service code, e.g. telegram |
country | string | 필수 | Country code, e.g. us |
요청
curl -s 'https://www.otpdrop.com/api/v1/quote?service=telegram&country=us'
응답
{
"service": "telegram",
"country": "us",
"price_cents": 111,
"price_usd": "1.11",
"currency": "USD",
"purchasable": true
}
계정 생성
POST/api/v1/accounts
Generates an account and returns its seed. This is the only time the seed is ever shown. No authentication required.
요청
curl -s -X POST https://www.otpdrop.com/api/v1/accounts
응답
{
"public_id": "acc_7f3c1a92",
"seed": "PABh-ZbRt-9xKm-Lq4V",
"seed_prefix": "PABh",
"balance_cents": 0,
"warning": "This seed is shown exactly once, right now..."
}
충전 생성
POST/api/v1/topups
Claims a deposit address and returns the exact amount to send, as coin_amount, at the rate in rate_usd. Each top-up gets its own address, and it expires at expires_at. Send only the named coin, on the named network, before then.
매개변수
| 이름 | 자료형 | 설명 | |
|---|---|---|---|
amount_usd | number | 필수 | How much to add to the balance, in USD. Minimum 25, maximum 1000. |
coin | string | 필수 | BTC, LTC, ETH, XMR, SOL, TRX, BNB, USDT, USDC and more |
요청
curl -s -X POST https://www.otpdrop.com/api/v1/topups \
-H 'Authorization: Bearer YOUR-SEED' \
-H 'content-type: application/json' \
-d '{"amount_usd": 25, "coin": "XMR"}'
응답
{
"topup_id": "top_019195919c80fc8f",
"status": "awaiting_payment",
"coin": "XMR",
"address": "89Rm4XN39m9PCr8Sr3yAFnXvLRRWQVEE...",
"amount_cents": 2500,
"amount_usd": "25.00",
"coin_amount": "0.1337",
"rate_usd": 187.02,
"bonus_cents": 0,
"credited_total_cents": 2500,
"expires_at": 1788532810
}
충전 상태
GET/api/v1/topups/{id}
Whether a deposit has been credited. Confirmation is not instant — poll this rather than assuming the funds arrived.
매개변수
| 이름 | 자료형 | 설명 | |
|---|---|---|---|
id | string | 필수 | The top-up id, in the path |
요청
curl -s https://www.otpdrop.com/api/v1/topups/top_019195919c80fc8f \ -H 'Authorization: Bearer YOUR-SEED'
응답
{
"topup_id": "top_019195919c80fc8f",
"status": "credited",
"coin": "XMR",
"amount_usd": "25.00",
"coin_amount": "0.1337",
"credited_total_cents": 2500,
"expires_at": 1788532810
}
번호 구매
POST/api/v1/orders
Debits the balance and issues a number immediately. There is no per-purchase address and no second wait. Fails with insufficient_funds if the balance is short.
매개변수
| 이름 | 자료형 | 설명 | |
|---|---|---|---|
service | string | 필수 | Service code, e.g. telegram |
country | string | 필수 | Country code, e.g. us |
요청
curl -s -X POST https://www.otpdrop.com/api/v1/orders \
-H 'Authorization: Bearer YOUR-SEED' \
-H 'content-type: application/json' \
-d '{"service": "telegram", "country": "us"}'
응답
{
"order_id": "ord_1ad450bf7a42519c",
"service": "telegram",
"country": "us",
"phone": "+15558329008",
"status": "paid",
"price_usd": "1.11"
}
주문 목록 조회
GET/api/v1/orders
Every order on the account, newest first, with status, number and price. Useful for reconciling state after a restart rather than for polling.
요청
curl -s https://www.otpdrop.com/api/v1/orders \ -H 'Authorization: Bearer YOUR-SEED'
응답
{
"orders": [
{
"order_id": "ord_1ad450bf7a42519c",
"service": "telegram",
"country": "us",
"phone": "+15558329008",
"status": "paid",
"price_usd": "1.11"
}
],
"count": 1
}
주문 조회
GET/api/v1/orders/{id}
The current state of one order: its number, status and price.
매개변수
| 이름 | 자료형 | 설명 | |
|---|---|---|---|
id | string | 필수 | The order id, in the path |
요청
curl -s https://www.otpdrop.com/api/v1/orders/ord_1ad450bf7a42519c \ -H 'Authorization: Bearer YOUR-SEED'
응답
{
"order_id": "ord_1ad450bf7a42519c",
"service": "telegram",
"country": "us",
"phone": "+15558329008",
"status": "paid",
"price_usd": "1.11"
}
코드가 담긴 SMS 조회
GET/api/v1/orders/{id}/sms
Poll this until arrived turns true. If the order expires with nothing delivered, the price returns to your balance automatically.
매개변수
| 이름 | 자료형 | 설명 | |
|---|---|---|---|
id | string | 필수 | The order id, in the path |
요청
curl -s https://www.otpdrop.com/api/v1/orders/ord_1ad450bf7a42519c/sms \ -H 'Authorization: Bearer YOUR-SEED'
응답
{
"order_id": "ord_1ad450bf7a42519c",
"status": "paid",
"arrived": false,
"code": null
}
전체 연동은 어떤 모습인가요?
계정에서 코드까지 여섯 번의 호출입니다. 아래는 모두 실제로 동작합니다. 붙여 넣고 실행해 보십시오.
# 1. 계정을 만들고 문구를 보관합니다
SEED=$(curl -s -X POST https://www.otpdrop.com/api/v1/accounts | jq -r .seed)
# 2. 충전 — 반환된 주소로 coin_amount를 보냅니다
curl -s -X POST https://www.otpdrop.com/api/v1/topups \
-H "Authorization: Bearer \$SEED" \
-H 'content-type: application/json' \
-d '{"amount_usd": 25, "coin": "USDT"}'
# 3. 충전이 반영될 때까지 조회합니다
curl -s https://www.otpdrop.com/api/v1/topups/TOPUP_ID \
-H "Authorization: Bearer \$SEED" | jq .status
# 4. 구매 전에 가격을 확인합니다
curl -s 'https://www.otpdrop.com/api/v1/quote?service=telegram&country=us'
# 5. 구매 — 잔액이 차감되고 번호가 즉시 발급됩니다
ORDER=$(curl -s -X POST https://www.otpdrop.com/api/v1/orders \
-H "Authorization: Bearer \$SEED" \
-H 'content-type: application/json' \
-d '{"service": "telegram", "country": "us"}' | jq -r .order_id)
# 6. 코드를 조회합니다
until curl -s https://www.otpdrop.com/api/v1/orders/\$ORDER/sms \
-H "Authorization: Bearer \$SEED" | jq -e .code; do sleep 4; done
셸 없이 같은 순서를 Python으로:
import time, requests
API = "https://www.otpdrop.com/api/v1"
seed = requests.post(f"{API}/accounts").json()["seed"]
auth = {"Authorization": f"Bearer {seed}"}
topup = requests.post(f"{API}/topups", headers=auth,
json={"amount_usd": 25, "coin": "USDT"}).json()
print("send", topup["coin_amount"], topup["coin"], "to", topup["address"])
while requests.get(f"{API}/topups/{topup['topup_id']}",
headers=auth).json()["status"] != "credited":
time.sleep(15)
order = requests.post(f"{API}/orders", headers=auth,
json={"service": "telegram", "country": "us"}).json()
print("number:", order["phone"])
while True:
sms = requests.get(f"{API}/orders/{order['order_id']}/sms",
headers=auth).json()
if sms["arrived"]:
print("code:", sms["code"])
break
time.sleep(4)
MCP 서버
같은 작업을 https://www.otpdrop.com/mcp에서 Model Context Protocol로도 이용할 수 있으며, 열한 개의
도구로 제공됩니다. Claude Code에 추가하시려면:
claude mcp add --transport http otpdrop https://www.otpdrop.com/mcp
설정 방법과 전체 도구 목록은 에이전트 페이지에 있습니다.
발견용 파일
기계가 읽을 수 있는 서비스 설명이며, 모두 인증 없이 제공됩니다.
| 파일 | 내용 |
|---|---|
/openapi.json | 완전한 OpenAPI 3.1 스키마 |
/.well-known/agent.json | 기능, 인증 방식, 운영 규칙 |
/llms.txt | 언어 모델을 위한 짧은 안내 |
/llms-full.txt | 같은 내용에 전체 카탈로그 포함 |
자주 묻는 질문
OTPDrop API에 키가 필요한가요?
아닙니다. 신청할 것도 승인 절차도 없습니다. 자격 증명은 계정의 문구이며 bearer 토큰으로 보냅니다. 카탈로그 엔드포인트는 그것조차 필요 없습니다.
OTPDrop API는 얼마인가요?
번호 값 외에는 없습니다. 구독도, 호출당 과금도, 최소 사용량도 없으며 가격은 사이트에 표시된 그대로입니다.
API는 어떤 프로그래밍 언어에서 쓸 수 있나요?
HTTPS 요청을 보낼 수 있는 모든 언어입니다. bearer 헤더가 붙은 평범한 HTTP 위의 JSON이므로, 설치할 SDK도 없고 저희 버전에 맞춰 갱신할 것도 없습니다.
SMS가 오지 않으면 어떻게 되나요?
주문이 만료되면 금액이 스스로 잔액에 환불되며, 사이트에서 더 일찍 취소하실 수도 있습니다. 도착한 코드에 대해 지불하시고 시도에 대해서는 지불하지 않습니다.
REST API와 MCP 서버는 같은 것인가요?
예, 의도적으로 그렇습니다. 모든 REST 엔드포인트는 MCP 도구 호출을 그대로 옮긴 것이므로 서로 어긋날 수 없습니다. 한쪽을 바꾸면 다른 쪽도 바뀝니다. 클라이언트에 더 잘 맞는 쪽을 고르십시오.
돈을 쓰지 않고 API를 시험해 볼 수 있나요?
카탈로그, 가격 계산, 계정 생성은 무료입니다. 따라서 연동의 대부분은 충전 전에 작성하고 확인할 수 있습니다. 돈이 드는 것은 구매뿐입니다.