# Listar SMS (/es/api-reference/public-api/listSms)

`GET /v1/sms`

Base URL: `https://api.bitelio.com`

El historial de SMS del proyecto, del más reciente al más antiguo, paginado **por cursor** — la misma forma que `GET /v1/emails`, para que un cliente pagine los dos igual.

**Cada fila trae `segments` y `encoding`, y esa es la razón de ser del endpoint.** El SMS se factura por segmento: un mensaje GSM-7 se parte cada 160 caracteres; uno Unicode, cada 70. Un solo carácter acentuado en una plantilla pasa el mensaje entero a Unicode y puede duplicar su coste. Este es el único sitio donde ese número se puede leer después del envío.

El cuerpo no viene en el listado — está en `GET /v1/sms/{id}`.

## Query parameters

- `limit`: integer — Tamaño de página.
- `cursor`: string — El `nextCursor` de la página anterior. Opaco: devuélvelo tal cual.
- `status`: enum ("PENDING" | "QUEUED" | "SENT" | "DELIVERED" | "UNDELIVERED" | "FAILED") — Filtrar por estado de entrega.
- `to`: string — Destino en E.164, coincidencia exacta.
- `since`: string (date-time) — ISO 8601.
- `until`: string (date-time) — ISO 8601.

## Responses

### `200` — OK

- `data`: array<object>
  items:
    - `id`: string
    - `to`: string
    - `from`: string
    - `country`: string
    - `encoding`: enum ("GSM7" | "UCS2")
    - `segments`: integer
    - `status`: enum ("PENDING" | "QUEUED" | "SENT" | "DELIVERED" | "UNDELIVERED" | "FAILED")
    - `error`: string
- `nextCursor`: string

```json
{
  "data": [
    {
      "id": "string",
      "to": "string",
      "from": "string",
      "country": "string",
      "encoding": "GSM7",
      "segments": 0,
      "status": "PENDING",
      "error": "string"
    }
  ],
  "nextCursor": "string"
}
```

### `400` — limit, status o fecha inválidos

### `403` — La clave no tiene el permiso sms:view

## Example request

```bash
curl -X GET 'https://api.bitelio.com/v1/sms' \
  -H 'Authorization: Bearer YOUR_API_KEY'
```
