# Tracker postbacks & conversions

> Send conversion events into 23 Telecom with tracker postbacks — X-Api-Token authentication, /track endpoint, URL placeholders like {phone} and {status} for affiliate tracker integrations.
> Source: https://docs.23telecom.co.uk/webhooks/postbacks/

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

Conversions close the loop between an SMS and a business result: a recipient
clicked your link, registered, deposited — and your tracker reports it back.

## Ingestion endpoints

Public action/conversion ingestion requires the `X-Api-Token` header on every
request:

| Endpoint | Notes |
| --- | --- |
| `GET /api/v1/track` | Primary tracker endpoint |
| `POST /api/v1/callback/action` | JSON callback variant |
| `GET /api/v1/action/track` | Deprecated |
| `POST /action` | Legacy |

Missing or invalid tokens return **HTTP 401 before any side effect** — no
postback, webhook or database write happens. Tokens are validated against your
current tracker token (and the unexpired previous one, so rotation is safe).

  Your tracker token is available in the portal. It is separate from API keys —
  scoped only to conversion ingestion.

## URL placeholders for outgoing postbacks

When 23 Telecom calls **your** tracker (conversion/delivery postbacks), you can
embed dynamic values in the configured URL:

```
https://tracker.example.com/postback?phone={phone}&status={status}&cost={cost}
```

Becomes:

```
https://tracker.example.com/postback?phone=%2B14155551234&status=DELIVRD&cost=0.0085
```

Available placeholders:

```
{message_id} {phone} {recipient} {sender_id} {cost}
{status} {status_code} {num_parts} {timestamp} {telecom_message_id}
```

The JSON body is still POSTed regardless of URL placeholders — placeholders
exist for trackers that only read query strings.

## Conversion webhooks

Recorded conversions also fire the `conversion` [webhook](/webhooks/overview)
to your `conversion_url`, with your selected `conversion_fields`. Use this to
mirror conversion data into your own analytics in real time.