# Connect 23 Telecom to Xtremepush

> Send SMS from Xtremepush campaigns and Journey Builder with a self-service webhook to 23 Telecom — the exact UI path, personalization mapping, a sandbox test, and where delivery reports live.
> Source: https://docs.23telecom.co.uk/integrations/xtremepush/
> Activation: Managed activation

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

| | |
| --- | --- |
| **Setup type** | Webhook · self-service |
| **Setup time** | About 15 minutes |
| **Sends SMS** | Yes |
| **Delivery status in Xtremepush** | No — check 23 Telecom |
| **Who can configure** | Xtremepush user with the Webhook channel enabled |

  23 Telecom supports Xtremepush through campaign and Journey Builder webhooks.
  Start with the sandbox recipe below; when you're ready to launch, your account
  manager enables live sending and completes a short configuration check for
  response handling and campaign retries. On the current batch endpoint, confirm
  `results[0].status` is `"accepted"` with a non-empty
  `results[0].message_id`.

## What this connection does

Xtremepush calls the 23 Telecom API from a campaign or a Journey Builder step to
send an SMS. Xtremepush shows the HTTP response (whether 23 Telecom **accepted**
the request); carrier delivery reports stay in 23 Telecom.

## Before you start

- Xtremepush with the **Webhook** channel available on your plan.
- An [active workspace](https://docs.23telecom.co.uk/account/workspaces), an
  [approved sender ID](https://docs.23telecom.co.uk/sms/sender-id) and an E.164 test number, e.g.
  `+447911123456`.
- A restricted 23 Telecom [API key](https://docs.23telecom.co.uk/api-keys) with only `sms.send` — start with
  a sandbox `sk_test_` key ([Sandbox & test mode](https://docs.23telecom.co.uk/sandbox)).

`POST /api/v1/sms/send-individual` (permission: `sms.send`)

## Connect 23 Telecom

1. Enable the channel under **Settings → Channels → Manage Channels → Webhook**.

2. Create the message: **Campaigns → Create Campaign → Single-stage →
   Time-based**, then choose **Webhook** on the **Setup** tab. In Journey Builder
   2.0, add a **Webhook** channel from the Engagement panel instead.

3. On the **Content** tab set the URL, headers and JSON body (below).

4. For the recipient, pick the mobile-number **personalization token** from the
   picker — do not type an unverified token by hand.

5. Send to a test user, then open **Campaigns → Existing campaigns → Options →
   Notifications log** to read the response.

6. Save the verified configuration as a **reusable template**.

### Request body

```json title="Content → body"
{
  "messages": [
    { "to": "+447911123456", "message": "Your message", "sender_id": "YourBrand" }
  ]
}
```

Replace `to` and `message` with your personalization tokens.

### Field mapping

| Xtremepush field | Value |
| --- | --- |
| Method | `POST` |
| URL | `https://restlink23telecom.com/api/v1/sms/send-individual` |
| `Content-Type` | `application/json` |
| `X-API-Key` | your restricted 23 Telecom key (sandbox first) |
| `Idempotency-Key` | a per-execution personalization value (see below) |
| `messages[0].to` | selected mobile-number token (E.164) |
| `messages[0].message` | campaign content |
| `messages[0].sender_id` | your approved sender ID |

## Send a test

1. Use your `sk_test_` key, set `Idempotency-Key` to a fixed value such as
   `xtremepush-sandbox-001`, and send to one test user whose number is your E.164
   test number.

2. In the Notifications log, confirm the response body — not just the status.

  A `200` only means the request was received. Treat the message as queued **only**
  when `results[0].status` is `"accepted"` **and** `results[0].message_id` is
  present. `blocked_country` is not queued. Missing local pricing is different:
  valid live API traffic is accepted fail-open, and the delivery report supplies
  the final status and cost. If the body is not an acceptance, do not auto-retry
  until the 23 Telecom message log confirms that no message was accepted.

  The `Idempotency-Key` header must be a value that is **unique per send and
  stable if the campaign retries**. If your campaign has no such per-execution
  value, treat this as a basic send path only: **do not use manual re-send** until
  you have confirmed in the 23 Telecom [message log](https://docs.23telecom.co.uk/sms/messages) that the
  message was not already accepted. For production, 23 Telecom activates the
  retry-safe integration path and confirms how campaign retries map to
  idempotency during the launch check.

## Production activation

Live traffic uses managed activation because Xtremepush campaigns branch on the
HTTP status. Your 23 Telecom team confirms a retry-safe path using the strict
integration endpoint, where a `2xx` guarantees acceptance, or an adapter that
validates the response body, and verifies how campaign retries map to idempotency.

The activation package includes the approved production URL or adapter mapping,
the restricted key and a one-message launch check. Apply that configuration to
the reusable template — rather than changing only the API key on the sandbox
batch template — and then publish it.

## Verify the result

**Accepted** means queued, not delivered. Read carrier delivery in
[Message status](https://docs.23telecom.co.uk/sms/status) or [Statistics](https://docs.23telecom.co.uk/sms/statistics), or add a live
[delivery webhook](https://docs.23telecom.co.uk/webhooks/delivery).

## Troubleshooting

| Response | Cause & fix |
| --- | --- |
| `400 IDEMPOTENCY_KEY_REQUIRED` | Add the `Idempotency-Key` header |
| `401 INVALID_API_KEY` | Wrong or disabled key in the secret header |
| `403 NO_SMS_ACCESS` | SMS not enabled — contact 23 Telecom |
| `429 RATE_LIMIT_EXCEEDED` | Sending faster than your budget — slow the audience |

## Need help?

- **Webhook, campaign or personalization** — Xtremepush support.
- **API key, sender ID, accepted-but-not-delivered** — your 23 Telecom account
  manager, or the [contact form](https://23telecom.co.uk/contact).

## Official platform documentation

- [Webhooks quick start](https://docs.xtremepush.com/docs/quick-start-webhooks)
- [Webhook content](https://docs.xtremepush.com/docs/campaign-webhooks)
- [Journey Builder webhook channel](https://docs.xtremepush.com/docs/journey-builder-20-webhook-channel)

*Last verified: 16 July 2026.*