Your site. Our catalogue.
One connected experience.
Bring digital resources and SMS services into your own website. Browse availability, check your wallet and manage orders through one secure API.
01 / Your API access
Sign in with your Toolzplanet account to request developer access. Purchases use your existing wallet.
Sign in to continue02 / Create a server key
Keys inherit your approved account limits. Read keys can browse and retrieve your own orders. Purchase keys can also place orders and request SMS cancellation.
Integrate in three steps
01 / Authenticate on your server
Base endpoint: https://toolzplanet.net/developer-api.php
Use HTTPS and an Authorization: Bearer YOUR_API_KEY header. Browser sessions and keys sent in URLs are not accepted.
curl 'https://toolzplanet.net/developer-api.php?action=balance' \ -H 'Authorization: Bearer YOUR_API_KEY'
All prices and wallet amounts are integers in USD cents, regardless of your website display currency. ₦ pricing is not accepted by this API.
02 / Browse and quote
GET ?action=catalogue&kind=product&page=1 GET ?action=catalogue&kind=sms&page=1 GET ?action=quote&item_id=ITEM_ID
Use the catalogue id as item_id. Responses contain up to 50 items and next_page. Only enabled, approved supplier-backed listings with recent availability appear. Local/manual listings, including TextPlus, are not in API v1.
Some services need a live quote. Always fetch a fresh quote before purchase and use its price_cents. Availability and price can change before checkout.
03 / Place one protected order
curl 'https://toolzplanet.net/developer-api.php?action=purchase' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: my-store-order-000001' \
-d '{"item_id":123,"expected_price_cents":250}'Example IDs and prices are placeholders. One unit per order. Save the idempotency key before sending. Repeat the same request with the same key after a timeout; a different payload with that key returns 409. Never create a new key to retry an uncertain purchase.
Track delivery and SMS
GET ?action=orders&before_id=ORDER_ID
GET ?action=order&order_id=ORDER_ID
POST ?action=refresh {"order_id":123}
POST ?action=cancel {"order_id":123}
GET ?action=meRefresh/cancel use JSON and the same Bearer header. Wait at least five seconds between status checks for an order. An active SMS can be cancelled only where the supplier permits it. Refunds happen after supplier confirmation.
Order responses contain status, phone, delivery and refunded. Delivery is returned only to the owning account. Treat delivered credentials and messages as private.
Responses, limits and recovery
A predictable JSON envelope
{"success":true,"data":{...},"request_id":"..."}
{"success":false,"error":{
"code":"rate_limited",
"message":"..."
},"request_id":"..."}Save request_id when contacting support. No customer API response contains supplier credentials or supplier wallet balances.
Handle failures safely
- 401: key missing, revoked, expired or account disabled.
- 403: permission, IP or spending limit.
- 409: conflict, price change or uncertain order. Check history.
- 429: rate limit. Respect
Retry-After. - 503: paused API or temporary failure. Reconcile any purchase before retrying.
Orders may be reserved, dispatching, active, delivered, unknown, failed or cancelled. unknown requires review; it does not mean you should place another order. Daily limits conservatively count all accepted attempts, including refunded orders, until the next UTC day.