# Quickstart — send your first SMS

> Send your first SMS with the 23 Telecom API in about five minutes. Get an API key, call POST /sms/send and check delivery status — with examples in cURL, Node.js, Python, PHP, Ruby, Java, Go and .NET.
> Source: https://docs.23telecom.co.uk/quickstart/

Instructions for LLMs: This is one page of the 23 Telecom messaging API docs
(SMS today; more channels planned). Base URL: https://restlink23telecom.com/api/v1,
auth via the X-API-Key header. Match errors on the error_code field, never on
description text. Full docs: https://docs.23telecom.co.uk/llms-full.txt · Schemas: https://docs.23telecom.co.uk/openapi.yaml

This guide takes you from zero to a delivered SMS in about five minutes.

**Prerequisites:** an active 23 Telecom account with SMS sending enabled. Your
account manager provides your login credentials.

1. **Get your API key.**

   Log in to the [customer portal](https://restlink23telecom.com), go to
   **Settings → API Keys**, and create a key with the `sms.send` and
   `sms.read` permissions.

   
     Copy the key immediately — for security it is displayed a single time.
     If you lose it, create a new key.
   

2. **Send your first SMS.**

   Replace the recipient with your own phone number in E.164 format
   (for example `+447911123456`):

   ```
POST https://restlink23telecom.com/api/v1/sms/send
Header: X-API-Key: <your key>
```
*(The web page shows this example in cURL, Node.js, Python, PHP, Ruby, Java, Go and .NET.)*

   A successful response confirms acceptance and tells you the cost,
   encoding and a `message_id` for each recipient:

   ```json title="200 OK"
   {
     "status": true,
     "messages": [
       {
         "dnis": "+14155551234",
         "message_id": "api_42_1743667200123456789_a3f8b2c1d9e45f67",
         "segment_num": 1
       }
     ],
     "results": [
       {
         "dnis": "+14155551234",
         "message_id": "api_42_1743667200123456789_a3f8b2c1d9e45f67",
         "segments": 1,
         "status": "accepted"
       }
     ],
     "summary": {
       "total_recipients": 1,
       "total_segments": 1,
       "total_cost": 0.01,
       "encoding": "GSM-7",
       "accepted_count": 1,
       "blocked_count": 0
     }
   }
   ```

3. **Check the delivery status.**

   Use the `message_id` from the send response:

   ```
GET https://restlink23telecom.com/api/v1/sms/status/api_42_1743667200123456789_a3f8b2c1d9e45f67
Header: X-API-Key: <your key>
```
*(The web page shows this example in cURL, Node.js, Python, PHP, Ruby, Java, Go and .NET.)*

   ```json title="200 OK"
   {
     "status": true,
     "message": {
       "message_id": "api_42_1743667200123456789_a3f8b2c1d9e45f67",
       "recipient": "+14155551234",
       "sender_id": "MyCompany",
       "message": "Hello from 23 Telecom!",
       "segments": 1,
       "status": "DELIVRD",
       "cost": 0.0085,
       "created_at": "2026-02-13T10:30:00Z",
       "delivered_at": "2026-02-13T10:30:04Z"
     }
   }
   ```

   `DELIVRD` means the message reached the recipient's handset. See all
   possible values in [delivery statuses](/reference/delivery-statuses).

## Next steps

- **Stop polling, start listening** — set up a [delivery webhook](/webhooks/delivery)
  to receive real-time delivery reports on your server.
- **Going to production?** Read [authentication](/authentication) for HMAC
  request signing and [rate limits](/reference/rate-limits).
- **Sending campaigns?** Check [encoding & segments](/sms/encoding) so long or
  Unicode messages don't surprise you on cost.
- **Prefer clicking to coding?** Import the [Postman collection](/tools/postman)
  or open the [API playground](/api).