API 문서
숫자, 메시지, 수입을 앱에서 직접 확인하세요.
하나의 요청으로 시작하세요
대시보드에 API 키를 생성하고, 숫자를 얻은 후 20 초마다 메시지를 확인하세요. 코드가 포함된 SMS가 도착할 때 지불이 처리됩니다; 그 코드를 다시 읽는 것은 귀하의 잔액에 영향을 주지 않습니다.
https://smscash.org/api/v1https://smscash.org/stubs/handler_api.phpcurl -X POST 'https://smscash.org/api/v1/activations' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: request-unique-001' \
-d '{"service":"go","country":86}'대체 호환 인터페이스 주소: /handler_api.php. 기존 REST 통합은 계속 작동합니다.
요청 생성기
Idempotency-Key: UUID · POST · 8–128
자동 선택: 최근 1시간, 다음으로 24시간의 코드 수가 많은 사업자를 우선합니다. 번호가 없으면 다음 사업자로 이동합니다.
curl --max-time 15 --fail-with-body -X POST 'https://smscash.org/api/v1/activations' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: request-unique-001' \
--data '{"service":"go","country":86}'package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
"time"
)
func main() {
payload := []byte("{\"service\":\"go\",\"country\":86}")
req, err := http.NewRequest("POST", "https://smscash.org/api/v1/activations", bytes.NewReader(payload))
if err != nil { panic(err) }
req.Header.Set("Authorization", "Bearer " + os.Getenv("SMSCASH_API_KEY"))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Idempotency-Key", "request-unique-001")
client := &http.Client{Timeout: 15 * time.Second, CheckRedirect: func(_ *http.Request, _ []*http.Request) error { return http.ErrUseLastResponse }}
res, err := client.Do(req)
if err != nil { panic(err) } // Keep the same operation key after a network error.
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil { panic(err) }
if res.StatusCode >= 300 {
fmt.Fprintf(os.Stderr, "HTTP %d, request_id=%s\n%s\n", res.StatusCode, res.Header.Get("X-Request-ID"), body)
os.Exit(1)
}
fmt.Println(string(body))
}// Node.js 18+: set SMSCASH_API_KEY in your environment.
const response = await fetch("https://smscash.org/api/v1/activations", {
method: "POST",
headers: {
Authorization: 'Bearer ' + process.env.SMSCASH_API_KEY,
'Content-Type': 'application/json',
'Idempotency-Key': "request-unique-001",
},
body: JSON.stringify({
"service": "go",
"country": 86
}),
signal: AbortSignal.timeout(15000),
redirect: 'error',
});
const result = await response.json();
if (!response.ok) {
const error = result.error || {};
console.error(response.status, error.code, error.hint, error.request_id);
throw new Error(error.message || 'API error');
}
console.log(result);
// SMS codes are strings: keep leading zeros. Never retry writes automatically.import json
import os
import urllib.error
import urllib.request
class NoRedirect(urllib.request.HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {
'Authorization': 'Bearer ' + os.environ['SMSCASH_API_KEY'],
'Content-Type': 'application/json',
'Idempotency-Key': "request-unique-001",
}
request = urllib.request.Request(
"https://smscash.org/api/v1/activations",
headers=headers,
data="{\"service\":\"go\",\"country\":86}".encode('utf-8'),
method="POST",
)
try:
with urllib.request.build_opener(NoRedirect).open(request, timeout=15) as response:
result = json.load(response)
print(result)
except urllib.error.HTTPError as error:
details = json.load(error).get('error', {})
print(error.code, details.get('code'), details.get('hint'), details.get('request_id'))
raise
# No automatic retries; SMS codes remain strings.키는 저장되지 않습니다. 이 확인은 번호를 발급하지 않습니다.
새로운 통합을 위한 REST
서비스 및 국가
서비스와 국가를 선택하세요. SMS당 보수는 국가에 따라 달라집니다.
GET /api/v1/catalog?service=go&country=86&page=1&page_size=100
Authorization: Bearer YOUR_API_KEY{
"rows": [
{
"offer_id": 42,
"service": "go",
"service_name": "Google",
"country_id": 86,
"country_name": "Italy",
"provider_id": 1,
"operator": 1,
"provider_name": "Operator 1",
"reward": "0.00300000",
"currency": "USD",
"accounting_precision": 8,
"earnings_hold_days": 45
}
],
"page": 1,
"page_size": 100,
"total": 1,
"pages": 1,
"has_more": false,
"accounting_precision": 8
}service · country · operator · q · page · page_size (1–100)
전화번호 받기
POST /api/v1/activations
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Idempotency-Key: request-unique-001
{
"service": "go",
"country": 86
}자동 선택: 최근 1시간, 다음으로 24시간의 코드 수가 많은 사업자를 우선합니다. 번호가 없으면 다음 사업자로 이동합니다.
201: new session · 200: replay of the same operation
service + country OR offer_id · duration_minutes: 20
ref: software owner code (optional)
operator: public ID (e.g. 1 for Operator 1), optional · any/0: automatic
country: integer · service: string · SMS code: string전화번호는 20분 동안 유효합니다. SMS를 20초마다 확인합니다. 즉시 취소할 수 있습니다.
여러 번호 확인
GET /api/v1/activations/batch?ids=42,43
Authorization: Bearer YOUR_API_KEY{
"rows": [
{
"id": 42,
"found": true,
"phone": "12025550123",
"status": "received",
"service": "go",
"country_id": 86,
"provider_id": 1,
"operator": 1,
"expires_at": "2026-10-10T12:15:00Z",
"sms_count": 1,
"code": "001234",
"last_sms": {
"id": 101,
"code": "001234",
"sender": "Service",
"text": "Code: 001234",
"received_at": "2026-10-10T12:01:00Z"
}
},
{
"id": 43,
"found": false,
"error": {
"code": "NO_ACTIVATION",
"message": "Session not found."
}
}
],
"as_of": "2026-10-10T12:01:00Z",
"poll_interval_seconds": 20
}ids: 1–100 positive session IDs, separated by commas
Input order preserved · duplicates removed
Foreign, unavailable or out-of-scope IDs: found=false
Read only · no supplier requests · last_sms is the latest message잔액 · 보류 중
GET /api/v1/balance
Authorization: Bearer YOUR_API_KEY{
"currency": "USD",
"accounting_precision": 8,
"balance": "12.00000000",
"held_balance": "34.50000001",
"balance_minor": "1200000000",
"held_minor": "3450000001",
"as_of": "2026-10-12T20:00:00Z",
"next_release_at": "2026-11-26T20:00:00Z"
}balance — 가능; held_balance — 보류 중. USD · 8
보류 기간이 끝난 자금만 출금할 수 있습니다.
바로 사용 가능한 클라이언트
import {SmScash, SmScashError} from './smscash.mjs';
import {randomUUID} from 'node:crypto';
const api = new SmScash(process.env.SMSCASH_API_KEY);
const catalog = await api.catalog({service: 'go', country: 86});
console.log(catalog.rows);
// Save this key before sending; keep it for retries of this operation.
const requestKey = randomUUID();
const session = await api.createNumber({service: 'go', country: 86}, requestKey);
// After 20 seconds:
const messages = await api.sms(session.id, {afterId: 0});
console.log(messages.sms);
const statuses = await api.batch([session.id]);
const held = await api.holdBalance();
console.log(held); // Exact USD stringimport os
import uuid
from smscash import SmScash, SmScashError
api = SmScash(os.environ['SMSCASH_API_KEY'])
catalog = api.catalog(service='go', country=86)
print(catalog['rows'])
# Save this key before sending; keep it for retries of this operation.
request_key = str(uuid.uuid4())
session = api.create_number({'service': 'go', 'country': 86}, request_key)
# After 20 seconds:
messages = api.sms(session['id'], after_id=0)
print(messages['sms'])
statuses = api.batch([session['id']])
held = api.hold_balance()
print(held) # Exact USD stringme() · balance() · holdBalance()/hold_balance() · catalog() · activation() · sms() · batch()
createNumber(parameters, requestKey) / create_number(parameters, request_key)
setStatus(id, "cancel") / set_status(id, "cancel")
setStatus(id, "retry", requestKey) / set_status(id, "retry", request_key)
Timeout: 15 s · no dependencies · no automatic retries
Error: code · status · hint · requestId/request_id · retryable
ALLOCATION_UNCERTAIN: contact support with request_id; never retry automatically.SMS-Activate / HeroSMS
https://smscash.org/sms-activate/stubs/handler_api.phphttps://smscash.org/hero-sms/stubs/handler_api.php사용자의 개인 API 키입니다.
서비스와 국가를 선택하세요. SMS당 보수는 국가에 따라 달라집니다.
| 코드 | 설명 |
|---|---|
getNumber / getNumberV2 | 전화번호 받기 |
getStatus / getStatusV2 | 최신 코드 받기 |
setStatus / finishActivation / cancelActivation | 세션 관리 |
getPrices / getNumbersStatus | 이용 가능 여부 확인 |
getRewards (SMScash) | SMS에 대한 보상 |
getServicesList / getServices | 서비스 |
getCountries / getOperators | 서비스 및 국가 |
getActiveActivations | 세션 |
getBalance | 사용자 잔액 |
getHoldBalance (SMScash) | 보류 중 |
cost = 0 USD · activationCost = 0 USDreward — SMS에 대한 보상
curl --get 'https://smscash.org/hero-sms/stubs/handler_api.php' \
--data-urlencode 'api_key=YOUR_API_KEY' \
--data-urlencode 'action=getNumberV2' \
--data-urlencode 'service=go' \
--data-urlencode 'country=86' \
-H 'Idempotency-Key: request-unique-001'{
"activationId": "42",
"phoneNumber": "393331234567",
"activationCost": 0,
"currency": 840,
"countryCode": 86,
"canGetAnotherSms": true,
"activationTime": "2026-10-11T12:00:00Z",
"activationEndTime": "2026-10-11T12:15:00Z",
"reward": "0.00300000"
}GET or POST application/x-www-form-urlencoded
api_key · action · service · country · ref (optional)
setStatus: 1 → ACCESS_READY · 3 → ACCESS_RETRY_GET
6 → ACCESS_ACTIVATION · 8 → ACCESS_CANCEL
getStatus: STATUS_WAIT_CODE · STATUS_OK:001234 · STATUS_CANCEL
getStatusV2: {"verificationType":1,"sms":null,"call":null}
getServicesList: {"status":"success","services":[{"code":"go","name":"Google"}]}
getCountries: {"86":{"id":86,"eng":"Italy","visible":1,"retry":1,"rent":0}}
getPrices: {"86":{"go":{"cost":0,"count":12,"reward":"0.00300000","currency":"USD"}}}
getRewards: {"59":{"vi":{"1":"0.01000000"}}}
getRewards filters: country · service · operator (optional); any/0: all permitted providers
getActiveActivations: start=0 · limit=1–100 · activeActivations / data
Business/key errors: HTTP 200 + plain text · server errors: HTTP 500
Availability: actual supplier pool, shared cache up to 20 s; not a reservation
No automatic retries after a transport error or ALLOCATION_UNCERTAIN.
Keep the original Idempotency-Key and parameters.
Unsupported: rent · calls · forwarding · multiple services per number · prolong
Unsupported options return BAD_REQUEST; unsupported actions return BAD_ACTION.
SMScash keys and country/service codes; configure this base URL in your software.전화번호는 20분 동안 유효합니다. SMS를 20초마다 확인합니다. 즉시 취소할 수 있습니다.
인증 및 재시도
REST: 헤더 Authorization: Bearer YOUR_API_KEY. 호환 인터페이스: 매개변수 api_key 그리고 action. HTTPS를 사용하세요.
API 키를 관리하려면 계정을 입력하세요.
API 요청 빈도와 전화번호 수에는 제한이 없습니다. 일일 또는 시간당 할당 한도도 없습니다.
전화번호는 20분 동안 유효합니다. SMS를 20초마다 확인합니다. 즉시 취소할 수 있습니다.
REST에서는 독특한 Idempotency-Key 번호 할당, 반복 할당, retry 및 지불 요청에 필요합니다. 선택 사항이지만 handler_api.php에서는 권장됩니다. 네트워크 요청을 재시도할 때 키를 재사용하세요. 새로운 작업에는 새 키를 사용하세요.
API 키 접근 범위
키를 특정 서비스, 국가 및 공급자에 연결할 수 있습니다. 목록을 비워 두면 사용 가능한 모든 옵션이 허용됩니다.
{
"label": "내 소프트웨어",
"policy": {
"services": [
"go"
],
"countries": [
86
],
"providers": [
1
]
}
}PATCH /api/v1/keys/{id} 이름과 policy를 완전히 변경합니다. 비밀은 생성된 경우에만 표시됩니다.
총 10%. 소프트웨어 코드 포함 5% + 5%.
번호발급시 꼭 기재해주세요 ref 소프트웨어의 소유자. 요청은 사용자의 키에 의해 승인됩니다. 코드는 '추천' 섹션과 GET /api/v1/referrals → software_ref.
| 요청 | 추천인 | 소프트웨어 |
|---|---|---|
| ref 없이 | 10% | — |
| ref 사용 | 5% | 5% |
| ref를 사용하면 리퍼러가 없습니다. | — | 5% |
플랫폼은 근로자의 수입을 줄이지 않고 보너스를 지급합니다. 소프트웨어 소유자와 추천자는 동일인일 수 있습니다. 사용자는 자신의 코드를 사용할 수 없습니다.
세션을 생성할 때 조건이 고정됩니다; SMS 및 retry을 읽어도 변경되지 않습니다. 새로운 반복 세션을 위해 ref를 다시 전달하세요. 요금 계산에서 USD 0.003의 사용자 보상은 소프트웨어 소유자와 참조자에게 각각 USD 0.00015가 주어집니다. 총 보너스는 USD 0.00030입니다.
API 명령
11가지 XVBC 스타일 분석법과 SMScash 저울.
GETgetNumber전화번호 받기+
세션을 생성하고 사용 가능한 전화번호를 사용자에게 할당합니다. 보상 단가와 추천 보상 수령인은 발급 시 확정되며, 코드가 포함된 SMS를 받으면 보상이 적립됩니다.
매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
api_key* | string | 사용자의 개인 API 키입니다. |
service* | string | 사용 가능한 서비스 코드. 대답은 API 키 영역으로 제한됩니다. |
country* | integer | getCountries에서 ID를 가져옵니다. |
operator | string | operators/getOperators (API)에서 ID를 가져옵니다. operator=1 · any/0 |
session_duration | integer | 세션은 20분 동안 지속됩니다. 20을 통과하거나 이 매개변수를 생략하세요. |
with_operator | integer | 1은 응답에 운영자 ID를 추가하며, 0 또는 생략 시 세 부분을 반환합니다. |
ref | string | 소프트웨어 소유자의 공개 코드: 소유자에게는 5%, 초대자에게는 5%. ref가 없는 경우 - 초대자에게 10%. |
* 필수 매개변수입니다. 모든 요청에서는 action=getNumber도 전달합니다.
예시 요청
curl 'https://smscash.org/stubs/handler_api.php?action=getNumber&api_key=YOUR_API_KEY&service=go&country=86&with_operator=1' \
-H 'Idempotency-Key: request-unique-001'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getNumber&api_key=YOUR_API_KEY&service=go&country=86&with_operator=1", nil)
if err != nil { panic(err) }
req.Header.Set("Idempotency-Key", "request-unique-001")
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getNumber&api_key=YOUR_API_KEY&service=go&country=86&with_operator=1", {
headers: {"Idempotency-Key": "request-unique-001"}
});
const result = await response.text();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getNumber&api_key=YOUR_API_KEY&service=go&country=86&with_operator=1",
headers={"Idempotency-Key": "request-unique-001"},
timeout=15,
)
print(response.status_code, response.text)응답
ACCESS_NUMBER:42:380670000000:1EMPTY_POOL- 자동 선택: 최근 1시간, 다음으로 24시간의 코드 수가 많은 사업자를 우선합니다. 번호가 없으면 다음 사업자로 이동합니다.
- Idempotency-Key 전달: 동일한 키를 사용하는 동일한 요청이 이전 세션을 반환합니다. 매개변수를 변경하면 IDEMPOTENCY_CONFLICT가 호출됩니다.
- 풀이 없는 숫자 국가는 EMPTY_POOL를 제공합니다. 잘못된 국가 형식은 BAD_COUNTRY입니다.
- 삭제된 세션의 키는 계속 사용됩니다: 그 키로 재생할 때 할당된 값은 SESSION_CLOSED이 되고 다른 숫자는 발급되지 않습니다.
- 할당 결과가 확인되지 않았습니다. 두 번째 번호가 할당되지 않도록 자동 재시도가 비활성화되었습니다.
GETgetNumbersStatus이용 가능 여부 확인+
서비스 및 국가별 사용 가능한 전화번호 수.
매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
api_key* | string | 사용자의 개인 API 키입니다. |
country* | integer | getCountries에서 ID를 가져옵니다. |
* 필수 매개변수입니다. 모든 요청에서는 action=getNumbersStatus도 전달합니다.
예시 요청
curl 'https://smscash.org/stubs/handler_api.php?action=getNumbersStatus&api_key=YOUR_API_KEY&country=86'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getNumbersStatus&api_key=YOUR_API_KEY&country=86", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getNumbersStatus&api_key=YOUR_API_KEY&country=86");
const result = await response.json();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getNumbersStatus&api_key=YOUR_API_KEY&country=86",
timeout=15,
)
print(response.status_code, response.json())응답
{
"go_0": 0
}- _0 접미사는 특정 연산자가 없는 선택을 의미합니다.
- 재고는 공급업체의 전체 번호 풀을 나타냅니다. 선택한 채널의 가용성은 번호를 할당할 때 확인됩니다.
GETgetStatus최신 코드 받기+
세션 상태 및 마지막 SMS 코드를 쉽게 요청할 수 있습니다. 코드의 선행 0은 유지됩니다.
매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
api_key* | string | 사용자의 개인 API 키입니다. |
id* | integer | 번호가 발급되었을 때 받은 세션의 ID입니다. |
* 필수 매개변수입니다. 모든 요청에서는 action=getStatus도 전달합니다.
예시 요청
curl 'https://smscash.org/stubs/handler_api.php?action=getStatus&api_key=YOUR_API_KEY&id=42'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getStatus&api_key=YOUR_API_KEY&id=42", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getStatus&api_key=YOUR_API_KEY&id=42");
const result = await response.text();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getStatus&api_key=YOUR_API_KEY&id=42",
timeout=15,
)
print(response.status_code, response.text)응답
STATUS_WAIT_CODESTATUS_OK:001234STATUS_CANCELNO_ACTIVATION- 20초마다 한 번씩 설문을 실행합니다. 메시지를 다시 읽는 것은 추가 결제를 생성하지 않습니다.
- retry 이후에는 이전 코드가 반환되지 않습니다. getStatus는 다음 SMS를 기다립니다.
- SMS이 없는 숫자가 삭제된 후, getStatus과 getSms는 STATUS_CANCEL으로 돌아가고, getSmsFull는 닫힌 상태, 빈 전화기, 그리고 빈 SMS 목록을 가집니다. REST, /activations/{id}, /sms은 404 NO_ACTIVATION으로 돌아갑니다.
GETsetStatus세션 관리+
완료, 취소 또는 재시작 대기 중인 SMS. 세션 만료는 동일하게 유지됩니다.
매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
api_key* | string | 사용자의 개인 API 키입니다. |
id* | integer | 번호가 발급되었을 때 받은 세션의 ID입니다. |
status* | integer | 3 — 세션을 연장하지 않고 다음 코드를 기다리세요; 6 — SMS 이후에 완료하세요; 8 — 즉시 취소하세요. |
* 필수 매개변수입니다. 모든 요청에서는 action=setStatus도 전달합니다.
예시 요청
curl 'https://smscash.org/stubs/handler_api.php?action=setStatus&api_key=YOUR_API_KEY&id=42&status=3' \
-H 'Idempotency-Key: request-unique-001'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=setStatus&api_key=YOUR_API_KEY&id=42&status=3", nil)
if err != nil { panic(err) }
req.Header.Set("Idempotency-Key", "request-unique-001")
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=setStatus&api_key=YOUR_API_KEY&id=42&status=3", {
headers: {"Idempotency-Key": "request-unique-001"}
});
const result = await response.text();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=setStatus&api_key=YOUR_API_KEY&id=42&status=3",
headers={"Idempotency-Key": "request-unique-001"},
timeout=15,
)
print(response.status_code, response.text)응답
ACCESS_RETRY_GETACCESS_ACTIVATIONACCESS_CANCEL- 다음 코드가 20분 내에 다시 시도되도록 기다립니다. 문제 및 만료 시간은 변하지 않습니다.
- 상태=3인 경우 Idempotency-Key를 사용하세요. 요청을 반복해도 이미 받은 새 코드는 재설정되지 않습니다. SMS의 기록은 계속 사용 가능합니다.
- 취소해도 이미 적립된 보상은 차감되지 않습니다.
- SMS 코드가 있는 숫자만 역사에 저장됩니다. 코드가 없는 취소된 및 만료된 숫자는 삭제됩니다.
GETgetRepeatNumber같은 번호를 다시 발급해주세요+
기록의 특정 번호로 새 세션을 엽니다. 동일한 국가에서 이용 가능한 다른 서비스를 선택할 수 있습니다.
매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
api_key* | string | 사용자의 개인 API 키입니다. |
number* | string | 당신의 이전 번호. 숫자와 선택적 선행 +만 허용됩니다. |
service* | string | 사용 가능한 서비스 코드. 대답은 API 키 영역으로 제한됩니다. |
session_duration | integer | 세션은 20분 동안 지속됩니다. 20을 통과하거나 이 매개변수를 생략하세요. |
with_operator | integer | 1은 응답에 운영자 ID를 추가하며, 0 또는 생략 시 세 부분을 반환합니다. |
ref | string | 소프트웨어 소유자의 공개 코드: 소유자에게는 5%, 초대자에게는 5%. ref가 없는 경우 - 초대자에게 10%. |
operator | string | operators/getOperators (API)에서 ID를 가져옵니다. operator=1 · any/0 |
* 필수 매개변수입니다. 모든 요청에서는 action=getRepeatNumber도 전달합니다.
예시 요청
curl 'https://smscash.org/stubs/handler_api.php?action=getRepeatNumber&api_key=YOUR_API_KEY&number=380670000000&service=go' \
-H 'Idempotency-Key: request-unique-001'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getRepeatNumber&api_key=YOUR_API_KEY&number=380670000000&service=go", nil)
if err != nil { panic(err) }
req.Header.Set("Idempotency-Key", "request-unique-001")
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getRepeatNumber&api_key=YOUR_API_KEY&number=380670000000&service=go", {
headers: {"Idempotency-Key": "request-unique-001"}
});
const result = await response.text();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getRepeatNumber&api_key=YOUR_API_KEY&number=380670000000&service=go",
headers={"Idempotency-Key": "request-unique-001"},
timeout=15,
)
print(response.status_code, response.text)응답
ACCESS_NUMBER:43:380670000000NUMBER_IN_USE- 먼저 현재 세션을 종료하거나 취소하세요. 통화중일 경우 재발급이 되지 않습니다.
- 새 세션은 새로운 ID와 현재 관세를 받습니다. 이전 SMS는 복사되지 않습니다. ref가 다시 설정됩니다.
- SMScash에서는 이 계정 기록의 숫자만 반복할 수 있습니다. 국가는 숫자로 식별됩니다.
- 삭제된 세션의 키는 계속 사용됩니다: 그 키로 재생할 때 할당된 값은 SESSION_CLOSED이 되고 다른 숫자는 발급되지 않습니다.
GETgetSmsFullSMS를 JSON로 가져오기+
ID, 보낸 사람, 코드, 텍스트 및 국가, 서비스 및 공급업체 데이터가 포함된 모든 메시지의 구조화된 기록입니다.
매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
api_key* | string | 사용자의 개인 API 키입니다. |
id* | integer | 번호가 발급되었을 때 받은 세션의 ID입니다. |
* 필수 매개변수입니다. 모든 요청에서는 action=getSmsFull도 전달합니다.
예시 요청
curl 'https://smscash.org/stubs/handler_api.php?action=getSmsFull&api_key=YOUR_API_KEY&id=42'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getSmsFull&api_key=YOUR_API_KEY&id=42", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getSmsFull&api_key=YOUR_API_KEY&id=42");
const result = await response.json();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getSmsFull&api_key=YOUR_API_KEY&id=42",
timeout=15,
)
print(response.status_code, response.json())응답
{
"success": true,
"session_id": 42,
"phone": "380670000000",
"status": 1,
"status_name": "received",
"sms_count": 1,
"sms": [
{
"id": 101,
"external_id": "message-101",
"sender": "Service",
"code": "001234",
"text": "Код подтверждения: 001234",
"received_at": "2026-10-09T12:00:00Z",
"country": {
"id": 86,
"name": "Italy"
},
"service": {
"code": "go",
"name": "Google"
},
"provider": {
"id": 1,
"name": "Оператор 1"
}
}
],
"expires_at": "2026-10-09T12:20:00Z"
}- 통합에 선호되는 형식입니다. 새 메시지만 처리하려면 sms[].id를 기억하세요.
- 숫자 상태 SMScash: 1 - 활성, 6 - 완료, 8 - 취소 또는 만료. status_name는 대기, 수신, 완료, 취소, 만료를 구별합니다.
- 세션이 종료된 후에도 받은 코드는 사용 가능합니다. 대량의 데이터의 경우 after_id를 사용하여 REST /activations/{id}/sms을 이용하세요.
- SMS이 없는 숫자가 삭제된 후, getStatus과 getSms는 STATUS_CANCEL으로 돌아가고, getSmsFull는 닫힌 상태, 빈 전화기, 그리고 빈 SMS 목록을 가집니다. REST, /activations/{id}, /sms은 404 NO_ACTIVATION으로 돌아갑니다.
GETgetSmsSMS를 텍스트 문자열로 가져오기+
기존 클라이언트에 대한 전체 SMS 기록을 문자열 형식으로 반환합니다.
매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
api_key* | string | 사용자의 개인 API 키입니다. |
id* | integer | 번호가 발급되었을 때 받은 세션의 ID입니다. |
* 필수 매개변수입니다. 모든 요청에서는 action=getSms도 전달합니다.
예시 요청
curl 'https://smscash.org/stubs/handler_api.php?action=getSms&api_key=YOUR_API_KEY&id=42'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getSms&api_key=YOUR_API_KEY&id=42", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getSms&api_key=YOUR_API_KEY&id=42");
const result = await response.text();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getSms&api_key=YOUR_API_KEY&id=42",
timeout=15,
)
print(response.status_code, response.text)응답
STATUS_OK:2026-10-09T12:00:00Z|001234|Код подтверждения: 001234STATUS_WAIT_CODESTATUS_CANCEL- 메시지 형식: 시간|코드|텍스트. 여러 메시지는 콜론으로 구분됩니다.
- SMS 텍스트 자체에는 콜론과 수직 막대가 포함될 수 있습니다. 안정적인 구문 분석을 위해서는 getSmsFull를 사용하세요.
GETgetServices서비스+
사용 가능한 서비스 코드. 대답은 API 키 영역으로 제한됩니다.
매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
api_key* | string | 사용자의 개인 API 키입니다. |
country | integer | getCountries에서 ID를 가져옵니다. |
* 필수 매개변수입니다. 모든 요청에서는 action=getServices도 전달합니다.
예시 요청
curl 'https://smscash.org/stubs/handler_api.php?action=getServices&api_key=YOUR_API_KEY'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getServices&api_key=YOUR_API_KEY", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getServices&api_key=YOUR_API_KEY");
const result = await response.json();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getServices&api_key=YOUR_API_KEY",
timeout=15,
)
print(response.status_code, response.json())응답
{
"go": {
"name": "Google",
"code": "go"
}
}- 서비스 디렉터리는 공급업체들 사이에 공유됩니다. 수량 가용성은 별도로 확인됩니다.
GETgetCountries국가+
선택된 채널에 있는 국가들의 ID, 이름 및 전화 코드.
매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
api_key* | string | 사용자의 개인 API 키입니다. |
* 필수 매개변수입니다. 모든 요청에서는 action=getCountries도 전달합니다.
예시 요청
curl 'https://smscash.org/stubs/handler_api.php?action=getCountries&api_key=YOUR_API_KEY'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getCountries&api_key=YOUR_API_KEY", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getCountries&api_key=YOUR_API_KEY");
const result = await response.json();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getCountries&api_key=YOUR_API_KEY",
timeout=15,
)
print(response.status_code, response.json())응답
{
"86": {
"id": 86,
"name": "Italy",
"phone_code": "39"
}
}GETgetOperators연산자+
사용 가능한 운영자: API ID, 이름 및 보상 보류 기간.
매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
api_key* | string | 사용자의 개인 API 키입니다. |
country | integer | getCountries에서 ID를 가져옵니다. |
operator | string | operators/getOperators (API)에서 ID를 가져옵니다. operator=1 · any/0 |
* 필수 매개변수입니다. 모든 요청에서는 action=getOperators도 전달합니다.
예시 요청
curl 'https://smscash.org/stubs/handler_api.php?action=getOperators&api_key=YOUR_API_KEY'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getOperators&api_key=YOUR_API_KEY", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getOperators&api_key=YOUR_API_KEY");
const result = await response.json();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getOperators&api_key=YOUR_API_KEY",
timeout=15,
)
print(response.status_code, response.json())응답
{
"1": {
"id": 1,
"provider_id": 1,
"operator": 1,
"name": "Оператор 1",
"earnings_hold_days": 45
}
}- operators/getOperators (API)에서 ID를 가져옵니다.
GETgetRewardsSMS에 대한 보상+
수준은 국가에 따라 달라집니다. 모든 표의 금액은 지불된 SMS 기준입니다.
매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
api_key* | string | 사용자의 개인 API 키입니다. |
country | integer | getCountries에서 ID를 가져옵니다. |
service | string | 사용 가능한 서비스 코드. 대답은 API 키 영역으로 제한됩니다. |
operator | string | operators/getOperators (API)에서 ID를 가져옵니다. operator=1 · any/0 |
* 필수 매개변수입니다. 모든 요청에서는 action=getRewards도 전달합니다.
예시 요청
curl 'https://smscash.org/stubs/handler_api.php?action=getRewards&api_key=YOUR_API_KEY&country=59&service=vi'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getRewards&api_key=YOUR_API_KEY&country=59&service=vi", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getRewards&api_key=YOUR_API_KEY&country=59&service=vi");
const result = await response.json();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getRewards&api_key=YOUR_API_KEY&country=59&service=vi",
timeout=15,
)
print(response.status_code, response.json())응답
{
"59": {
"vi": {
"1": "0.01000000",
"3": "0.00500000"
}
}
}{}- USD 요금액은 8 자리의 소수점 이하 숫자로 정확한 소수점 표기법으로 반환됩니다:
- 키에 사용할 수 있는 공급자가 활성화되었습니다.
- country ID → service code → operator ID → reward (USD)
GETgetBalance사용자 잔액+
추가 SMScash: 적립, 추천 보너스 및 지불 요청을 고려하여 사용 가능한 잔액.
매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
api_key* | string | 사용자의 개인 API 키입니다. |
* 필수 매개변수입니다. 모든 요청에서는 action=getBalance도 전달합니다.
예시 요청
curl 'https://smscash.org/stubs/handler_api.php?action=getBalance&api_key=YOUR_API_KEY'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getBalance&api_key=YOUR_API_KEY", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getBalance&api_key=YOUR_API_KEY");
const result = await response.text();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getBalance&api_key=YOUR_API_KEY",
timeout=15,
)
print(response.status_code, response.text)응답
ACCESS_BALANCE:0.00- getBalance는 사용 가능한 USD 잔액을 소수점 아래 최대 8자리로 반환합니다.
- 보류 기간이 끝난 자금만 출금할 수 있습니다.
GETgetHoldBalance보류 중+
SMS를 받으면 수익은 공급자가 정한 기간 동안 보류됩니다. 지정된 날짜가 되면 금액이 자동으로 출금 가능해집니다.
매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
api_key* | string | 사용자의 개인 API 키입니다. |
* 필수 매개변수입니다. 모든 요청에서는 action=getHoldBalance도 전달합니다.
예시 요청
curl 'https://smscash.org/stubs/handler_api.php?action=getHoldBalance&api_key=YOUR_API_KEY'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getHoldBalance&api_key=YOUR_API_KEY", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getHoldBalance&api_key=YOUR_API_KEY");
const result = await response.text();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getHoldBalance&api_key=YOUR_API_KEY",
timeout=15,
)
print(response.status_code, response.text)응답
ACCESS_HOLD_BALANCE:34.50000001- SMScash · getHoldBalance · USD · 8
- 보류 기간이 끝난 자금만 출금할 수 있습니다.
응답 코드 및 반복 요청
handler_api.php에서 비즈니스 결과는 일반적으로 HTTP 200과 함께 제공됩니다. 본문 텍스트를 확인하세요. 디렉터리 및 getSmsFull는 성공하면 JSON를 반환합니다. 오류는 항상 텍스트입니다.
| 코드 | HTTP | 원인과 다음 단계 |
|---|---|---|
TARIFF_NOT_CONFIGURED | 200 | 수수료는 아직 정해지지 않았습니다SMS 보상이 설정되면 숫자 할당이 시작됩니다. |
COUNTRY_BLOCKED | 200 | 이 국가의 숫자 할당이 차단되었습니다.다른 국가를 선택하세요. |
BAD_SERVICE | 200 | 이 서비스의 전화번호 할당은 차단됩니다.다른 서비스를 선택하세요. |
PROVIDER_NOT_READY | 200 | 번호 할당이 일시적으로 이용 불가능합니다API 카탈로그를 새로 고칩니다. |
BAD_KEY | 400 | api_key가 없거나 형식이 잘못되었습니다.요청에서 키를 확인하세요. |
INVALID_API_KEY | 401 | 키를 알 수 없거나 취소되었거나 계정이 비활성화되었습니다.유효한 API 키를 생성하세요. |
BAD_COUNTRY | 400 | 국가가 누락되었거나 양수가 아닙니다.getCountries에서 ID를 가져옵니다. |
BAD_SESSION_DURATION | 400 | 전화번호는 정확히 20분 동안 발급됩니다.session_duration를 수정하세요. |
BAD_REQUEST | 400 | 잘못된 매개변수 또는 Idempotency-Key.요청을 수정하세요. |
BAD_SERVICE / BAD_OPERATOR / INVALID_PROVIDER | 200 | 알 수 없거나 비활성화된 디렉터리 항목입니다.API 카탈로그를 새로 고칩니다. |
BAD_NUMBER | 200 | 잘못된 숫자 형식입니다.숫자를 숫자로 입력하세요. |
BAD_ACTION / BAD_STATUS | 200 | 알 수 없는 명령, ID 또는 작업.설정을 확인하세요. |
EMPTY_POOL | 200 | 현재 일치하는 전화번호가 없습니다.10~30초 후에 반복하거나 필터를 교체하세요. |
NUMBER_IN_USE | 200 | 활성 세션이 특정 숫자를 차지합니다.세션을 종료하거나 다른 번호를 선택하세요. |
NO_ACTIVATION | 200 | 세션 또는 이전 번호는 귀하의 계정에 속하지 않습니다.ID와 키를 확인하세요. |
SESSION_CLOSED / SMS_REQUIRED | 200 | 현재 상태 전환을 사용할 수 없습니다.SMS의 상태와 가용성을 확인하세요. |
SCOPE_BLOCKED | 200 | 서비스, 국가 또는 공급업체가 키에 대해 승인되지 않았습니다.API 키의 범위를 업데이트합니다. |
IDEMPOTENCY_CONFLICT | 200 | 이 쿼리 키는 이미 다른 매개변수와 연결되어 있습니다.새 작업의 경우 다른 Idempotency-Key를 만듭니다. |
BAD_REF / SELF_REF | 400 | 소프트웨어 코드가 알 수 없거나 비활성화되어 있거나 사용자 자신의 것입니다.소프트웨어 소유자의 코드를 전달합니다. |
INTERNAL_ERROR | 500 | 일시적인 서버 또는 공급업체 오류입니다.지연과 동일한 Idempotency-Key를 사용하여 반복합니다. |
ALLOCATION_PENDING | 200 | 번호 요청이 이미 처리 중입니다. 같은 Idempotency-Key로 다시 시도하세요.번호 요청이 이미 처리 중입니다. 같은 Idempotency-Key로 다시 시도하세요. |
ALLOCATION_UNCERTAIN | 200 | 할당 결과가 확인되지 않았습니다. 두 번째 번호가 할당되지 않도록 자동 재시도가 비활성화되었습니다.할당 결과가 확인되지 않았습니다. 두 번째 번호가 할당되지 않도록 자동 재시도가 비활성화되었습니다. |
REST는 객체를 반환합니다 {"error":{"code":"…","message":"…"}} 일반 HTTP 상태 400/401/403/404/409/503.
{
"error": {
"code": "BAD_REQUEST",
"message": "요청 필드를 확인하세요.",
"request_id": "req_…",
"hint": "Use the documented JSON type; numbers must not be quoted.",
"retryable": false,
"details": {
"field": "country",
"expected": "integer"
}
}
}X-Request-ID: included in every API response
405: Allow lists the supported HTTP methods
ALLOCATION_PENDING: retryable=true · Retry-After=3 · same operation key
ALLOCATION_UNCERTAIN: retryable=false · contact support
Transport errors: check the operation before another write; keep the original key.새로운 통합을 위한 REST
USD 요금액은 8 자리의 소수점 이하 숫자로 정확한 소수점 표기법으로 반환됩니다: 0.00300000 USD.
잔액의 통화는 USD입니다. 요청 및 응답 스키마: OpenAPI.
/api/v1/catalog서비스 및 국가/api/v1/tariffsSMS 국가별 보상율/api/v1/offers요금 및 보상/api/v1/services디렉토리/api/v1/countries디렉토리/api/v1/operators디렉토리/api/v1/availability?country=1번호 가용성/api/v1/activations새 세션/api/v1/activations/batch?ids=42,43여러 번호 확인/api/v1/activations최신 200 세션: scope=history, 대기 중 또는 전체/api/v1/activations/{id}세션 및 메시지/api/v1/activations/{id}/sms?after_id=0&limit=100커서가 있는 새로운 SMS/api/v1/activations/{id}/retrySMS를 기다리는 중/api/v1/activations/{id}/finish완료/api/v1/activations/{id}/cancel취소/api/v1/activations/repeat번호 재발급/api/v1/keysAPI 키/api/v1/keys키 만들기/api/v1/keys/{id}이름 변경 또는 policy/api/v1/keys/{id}키 취소/api/v1/referrals추천 코드 및 수입/api/v1/summary잔액 및 요약/api/v1/balance보류 중/api/v1/ledger수익원장/api/v1/withdrawals지급 요청/api/v1/withdrawals요청 만들기/api/v1/statistics전체 통계/api/v1/earnings/holds수익 보류새 SMS만 받음
GET /api/v1/activations/42/sms?after_id=0&limit=100
Authorization: Bearer YOUR_API_KEY{
"session_id": 42,
"sms": [
{
"id": 101,
"code": "001234",
"text": "코드: 001234",
"sender": "Service",
"received_at": "2026-10-09T12:00:00Z"
}
],
"next_cursor": 101,
"has_more": false
}next_cursor를 저장하고 after_id로 전달합니다. has_more=true이면 다음 페이지를 즉시 읽을 수 있습니다. limit: 1–200. 세션 및 SMS는 소유자만 사용할 수 있습니다.