Skip to content

The API is a clean REST + JSON interface, so it works from any language with an HTTP client — no SDK required. Every endpoint page in these docs includes ready-to-paste examples in eight languages:

LanguageHTTP client used in examples
cURL
Node.jsBuilt-in fetch (Node 18+)
Pythonrequests
PHPcurl extension
Rubynet/http (stdlib)
Javajava.net.http.HttpClient (Java 11+)
Gonet/http (stdlib)
.NETHttpClient (C#)

Pick your language once in any code block — the choice follows you across the entire site.

Send a message:

Terminal window
curl -X POST https://restlink23telecom.com/api/v1/sms/send \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": [
"+14155551234"
],
"message": "Your verification code is 847291",
"sender_id": "MyApp"
}'

Check its status:

Terminal window
curl https://restlink23telecom.com/api/v1/sms/status/api_42_1743667200123456789_a3f8b2c1d9e45f67 \
-H "X-API-Key: $API_KEY"

For webhook receivers in Python, Node.js and PHP, see the delivery webhook examples.

Official TypeScript, Python and PHP SDK packages are not publicly distributed yet. Do not install similarly named third-party packages and assume they are maintained by 23 Telecom.

Today, use the eight-language examples above or generate a typed client from the OpenAPI 3.1 specification. Both routes call the same documented REST contract and work with free sandbox keys.

Integration tips that save support tickets

Section titled “Integration tips that save support tickets”
  • Store the key in an environment variable like the examples do — rotating keys then never touches code.
  • Treat messages[].message_id as your join key between send responses, status polls and webhook events.
  • Handle 429 with backoff (rate limits) and monitor credit_blocked before large sends (balance).
  • Make webhook handlers idempotent — retries deliver duplicates by design.