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:

Language HTTP client used in examples
cURL —
Node.js Built-in fetch (Node 18+)
Python requests
PHP curl extension
Ruby net/http (stdlib)
Java java.net.http.HttpClient (Java 11+)
Go net/http (stdlib)
.NET HttpClient (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.