> ## Documentation Index
> Fetch the complete documentation index at: https://omni.fireflo.au/llms.txt
> Use this file to discover all available pages before exploring further.

# GET /v1/channels/sms/templates

> Your DLT templates as registered at the gateway, with their status.

Your DLT templates as registered at the gateway, with their status. Where the gateway enforces them, an SMS's text must fill one in.

<Note>Needs the `sms.templates:read` scope.</Note>

## Query parameters

| Field | Type | Required | Notes |
| :- | :- | :- | :- |
| `status` | string | No | `approved`, `pending`, `rejected` or `withdrawn`. |

`status` is `approved`, `pending`, `rejected` or `withdrawn`; `reason` explains a decision. `enforcement` says how strictly the gateway holds sends to what is registered: `enforce` (anything else is refused), `report` (sent, and reported) or `off`. On FireFlo's shared gateway you see your own requests and FireFlo's own registrations, never another account's.

## Request

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.fireflo.au/v1/channels/sms/templates \
    -H "Authorization: Bearer $OMNI_API_KEY"
  ```

  ```python Python theme={null}
  import os

  import requests

  response = requests.get(
      "https://api.fireflo.au/v1/channels/sms/templates",
      headers={"Authorization": f"Bearer {os.environ['OMNI_API_KEY']}"},
  )
  print(response.status_code, response.json())
  ```

  ```javascript Node theme={null}
  const response = await fetch("https://api.fireflo.au/v1/channels/sms/templates", {
    headers: {
      Authorization: `Bearer ${process.env.OMNI_API_KEY}`,
    },
  });
  console.log(response.status, await response.json());
  ```
</CodeGroup>

## Response

`200 OK`

```json theme={null}
{
  "data": [
    {
      "id": "5207",
      "status": "approved",
      "note": "",
      "requested_tlvs": "",
      "reason": "",
      "updated_at": "2026-09-22T07:40:13Z",
      "name": "Order shipped",
      "body": "Hi {#var#}, your order {#alp#} has shipped. - Acme"
    }
  ],
  "enforcement": "enforce"
}
```

## Errors

Every refusal is `{"error": {"code", "message", "field"}}`; `field` is there when one input is at fault.

| Status | Error code | When |
| :- | :- | :- |
| 400 | `invalid_request` | `status` isn't one of its values (`field` is `status`). |
| 404 | `channel_off` | The account doesn't have SMS on. |
| 409 | `provider_refused` | The SMS gateway refused it or couldn't be asked; the message says why. |
| 403 | `scope_missing` | The key doesn't have the `sms.templates:read` scope. |

Any request can also be refused for its key, its account or its rate (`key_required`, `invalid_key`, `account_suspended`, `plan_excludes_api`, `address_not_allowed`, `rate_limited`); see [the overview](/api-reference/overview).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.