POST /v1/actions/list-templates
List all templates in your tenant, optionally filtered by Meta approval status.
Returns every template in your tenant. Filter by Meta approval status to find sendable ones.
POST /api/v1/actions/list-templates
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
status |
string | no | One of APPROVED, PENDING, REJECTED |
curl -X POST https://www.qyvo.io/api/v1/actions/list-templates \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-H "Content-Type: application/json" \
-d '{"status": "APPROVED"}'
const templates = await fetch('https://www.qyvo.io/api/v1/actions/list-templates', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.QYVO_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ status: 'APPROVED' }),
}).then((r) => r.json());
$templates = Http::withToken(env('QYVO_TOKEN'))
->post('https://www.qyvo.io/api/v1/actions/list-templates', [
'status' => 'APPROVED',
])
->json();
import os, httpx
templates = httpx.post(
'https://www.qyvo.io/api/v1/actions/list-templates',
headers={'Authorization': f"Bearer {os.environ['QYVO_TOKEN']}"},
json={'status': 'APPROVED'},
).json()
Response — 200 OK
[
{
"id": "01J0AB...",
"name": "order_confirmation",
"category": "UTILITY",
"status": "APPROVED",
"languages": ["en", "fr", "es"],
"created_at": "2026-04-15T10:32:00+00:00"
}
]
| Field | Notes |
|---|---|
name |
Meta template name (snake_case, unique per tenant) |
category |
UTILITY, MARKETING, AUTHENTICATION — drives Meta pricing tier |
status |
Tenant-level state. A template might be APPROVED overall but only some translations approved — see get-template. |
languages |
All translation language codes attached to the template |
Pricing note
Templates are billed per category by Meta — UTILITY is cheap, MARKETING is the expensive bucket. Free-form text inside the 24h window is free. See the Qyvo pricing page for the full breakdown.
