API

General info

We maintain an sms-activate compatible API. Every number is one-time-use only — there are no long-term rentals.

You may have 60 active numbers at a time. Once you get the code or cancel, you can request another.

All calls require your API key as api_key in the URL. Generate or regenerate it on your Profile page.

Getting your balance

curl "https://daisysms.app/stubs/handler_api.php?api_key=$APIKEY&action=getBalance"

                
# Response: ACCESS_BALANCE:50.30
# Invalid key: BAD_KEY

Getting a number

You need the service's shortcode (visible on the dashboard, or via getPrices below).

Optionally pass max_price (or maxPrice) — the request fails with MAX_PRICE_EXCEEDED if the current price is higher.

curl "https://daisysms.app/stubs/handler_api.php?api_key=$APIKEY&action=getNumber&service=tg&max_price=1.50"

                
# Success: ACCESS_NUMBER:308:13476711222
# Price too high: MAX_PRICE_EXCEEDED
# Unknown/inactive service: BAD_SERVICE
# Too many active numbers: TOO_MANY_ACTIVE_RENTALS
# Not enough balance: NO_MONEY
# None available right now: NO_NUMBERS

Getting the code

Use the ID from the getNumber response. Poll every 3+ seconds.

We check our own database first — most calls resolve instantly. If the code hasn't arrived yet, we check with our upstream provider on your behalf before responding.

curl "https://daisysms.app/stubs/handler_api.php?api_key=$APIKEY&action=getStatus&id=308"

                
# Got code: STATUS_OK:12345
# Waiting: STATUS_WAIT_CODE
# Cancelled/expired: STATUS_CANCEL
# Unknown ID: NO_ACTIVATION

Marking a number as done

Once you're finished with a number, mark it done so it no longer counts toward your active-number limit.

curl "https://daisysms.app/stubs/handler_api.php?api_key=$APIKEY&action=setStatus&id=308&status=6"

                
# Success: ACCESS_ACTIVATION
# Unknown ID: NO_ACTIVATION

Cancelling a number

Cancel a waiting number to get your balance refunded immediately.

curl "https://daisysms.app/stubs/handler_api.php?api_key=$APIKEY&action=setStatus&id=308&status=8"

                
# Success: ACCESS_CANCEL
# Already finalized: ACCESS_READY
# Unknown ID: NO_ACTIVATION

Getting current prices

Two nesting orders are available. Counts of 100 indicate ample availability (exact live counts are checked automatically at purchase time).

# country => service => data
curl "https://daisysms.app/stubs/handler_api.php?api_key=$APIKEY&action=getPrices"

                
# service => country => data
curl "https://daisysms.app/stubs/handler_api.php?api_key=$APIKEY&action=getPricesVerification"

Webhooks

Set a webhook URL on your Profile page to receive a POST as soon as a code arrives — no polling required. If your endpoint doesn't respond quickly, we simply move on; the getStatus polling above always remains the reliable source of truth.

{
    "activationId": 308,
    "service": "tg",
    "text": "Your code is 12345",
    "code": "12345",
    "country": 0,
    "receivedAt": "2026-08-27 12:30:57"
}

(Timestamp is UTC.)