Skip to content
Linq Copy agent prompt

List templates

GET/v1/templates

Lists the templates registered for this key’s account, newest first, with the parameter schema each one takes.

This is the read a 422 outside_customer_window points you at: outside a customer’s service window only an approved template part sends, and this is where the sendable ones and their variables are. It is also the read to hand an agent — parameters is a JSON Schema shaped to be used verbatim as a tool definition.

Templates in every status are listed, including ones that are not sendable, so a pause or a rejection is visible rather than looking like a template that vanished. Filter on status == "approved" for the sendable set.

Query ParametersExpand Collapse
cursor: optional string

A next_cursor from a previous page. Omit for the first page.

limit: optional number

How many templates to return, 1–100. Defaults to 100. A value outside the range is refused rather than clamped.

formatint32
maximum100
minimum1
ReturnsExpand Collapse
TemplatePage object { data, has_more, next_cursor }

One page of templates, newest first.

data: array of Template { category, created_at, language, 9 more }
category: string

utility, marketing or authentication — the category the channel ASSIGNED, which may not be the one that was requested: a template that reads as marketing is recategorised on review, and the category is what a send is priced at. Values grow additively.

created_at: string
formatdate-time
language: string

The locale this variant is written in, such as en_US.

maxLength32
name: string

Lowercase letters, digits and underscores. Permanent once submitted.

maxLength512
parameters: unknown

The variables this template takes, as a JSON Schema (2020-12) object — ready to hand to a model verbatim as a tool schema. Every property is a string and every one is required: the channel substitutes all of them.

Each property publishes minLength, maxLength and pattern alongside its example, so a model sees the same value rules the send path enforces: values are 1–1024 characters, not whitespace-only, and contain no line break, tab or run of four spaces.

An empty properties object means the template takes no variables. null means something different and specific: this template’s variables cannot be addressed by name over this API (they are positional, or they live in a part of the template this API does not read yet). A template part naming such a template cannot supply its variables.

quality: string

The channel’s quality signal for this template, when it has one. null until it does. Free text; treat an unknown value as no signal.

rejected_reason: string

Why the template was refused or held, when the channel said. Free text for a human; the wording is not stable and must not be branched on. null when there is nothing to say.

send_schema: unknown

The complete schema for the template part that sends this exact template, including its fixed identity, named parameters, media header, and carousel values. null means this template cannot be addressed safely through this API.

status: string

Where this template stands. Only approved may be sent.

draft — a submission attempt has not produced a registered template. Consult retry_allowed; draft status alone never permits resubmission. pending — under review. Review is an unbounded queue; an hour or more is ordinary for a first submission. approved — sendable. rejected — refused; rejected_reason may say why. paused — was approved and is currently held, usually for quality. Not terminal: it can become approved again without you doing anything. disabled — no longer usable.

Values grow additively, and anything you do not recognise is not sendable.

updated_at: string
formatdate-time
content: optional object { body, buttons, carousel, 2 more }

Human-readable copy and fixed actions in a registered template.

body: optional string
buttons: optional array of object { type, phone_number, text, url }
type: string

The action kind; values grow additively.

phone_number: optional string

A fixed telephone destination baked into the template, when present.

text: optional string

The label shown to the recipient, when the channel supplies one.

url: optional string

A fixed destination baked into the template, when present.

header: optional object { kind, text }

A media or text header as it will appear to the recipient.

kind: string

text, image, video, or document; values grow additively.

text: optional string

Fixed header copy. Omitted for media headers.

retry_allowed: optional boolean

Whether another submission using this draft’s name and language is currently allowed. A corrected definition may be required. Present on all responses from current servers. Clients must not offer retry unless this is explicitly true.

has_more: boolean

True when another page follows.

next_cursor: optional string

Pass as cursor to read the next page. Present only when has_more is true.

List templates

curl https://whatsapp.messages.api.linqapp.com/v1/templates \
    -H "Authorization: Bearer $LINQ_WHATSAPP_API_KEY"
{
  "data": [
    {
      "category": "category",
      "created_at": "2019-12-27T18:11:19.117Z",
      "language": "language",
      "name": "name",
      "parameters": {},
      "quality": "quality",
      "rejected_reason": "rejected_reason",
      "send_schema": {},
      "status": "status",
      "updated_at": "2019-12-27T18:11:19.117Z",
      "content": {
        "body": "body",
        "buttons": [
          {
            "type": "type",
            "phone_number": "phone_number",
            "text": "text",
            "url": "url"
          }
        ],
        "carousel": [
          {
            "body": "body",
            "buttons": [
              {
                "type": "type",
                "phone_number": "phone_number",
                "text": "text",
                "url": "url"
              }
            ],
            "header": {
              "kind": "kind",
              "text": "text"
            }
          }
        ],
        "footer": "footer",
        "header": {
          "kind": "kind",
          "text": "text"
        }
      },
      "retry_allowed": true
    }
  ],
  "has_more": true,
  "next_cursor": "next_cursor"
}
Returns Examples
{
  "data": [
    {
      "category": "category",
      "created_at": "2019-12-27T18:11:19.117Z",
      "language": "language",
      "name": "name",
      "parameters": {},
      "quality": "quality",
      "rejected_reason": "rejected_reason",
      "send_schema": {},
      "status": "status",
      "updated_at": "2019-12-27T18:11:19.117Z",
      "content": {
        "body": "body",
        "buttons": [
          {
            "type": "type",
            "phone_number": "phone_number",
            "text": "text",
            "url": "url"
          }
        ],
        "carousel": [
          {
            "body": "body",
            "buttons": [
              {
                "type": "type",
                "phone_number": "phone_number",
                "text": "text",
                "url": "url"
              }
            ],
            "header": {
              "kind": "kind",
              "text": "text"
            }
          }
        ],
        "footer": "footer",
        "header": {
          "kind": "kind",
          "text": "text"
        }
      },
      "retry_allowed": true
    }
  ],
  "has_more": true,
  "next_cursor": "next_cursor"
}