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

# Template Status

> Check live from WhatsApp whether a message template is approved, still in review, rejected or paused, along with its quality rating and the rejection reason, using the ChatSyncs API. Use when a developer asks how to tell when a newly created template is ready to send, why a template was rejected, or how to read a template's quality score.

Asks WhatsApp where a message template is in review. The answer is **live** — fetched from WhatsApp on every call — so this is
the way to find out when a template you made with [Create Template](/developer-api/whatsapp/create-template) is ready to send.

It takes both `GET` and `POST`.

## Example Request

```bash theme={null}
curl --request GET \
  --url 'https://platform.chatsyncs.com/api/v1/whatsapp/template/status?apiToken=API-KEY&phone_number_id=PHONE-NUMBER-ID&template_id=129847192847198'
```

Or as a `POST` with a JSON body:

```bash theme={null}
curl --request POST \
  --url 'https://platform.chatsyncs.com/api/v1/whatsapp/template/status' \
  --header 'Authorization: Bearer API-KEY' \
  --header 'Content-Type: application/json' \
  --data '{ "phone_number_id": "PHONE-NUMBER-ID", "template_id": "129847192847198" }'
```

<Note>
  `template_id` here is **WhatsApp's long number** (about 15 digits): the `template_id` that
  [Create Template](/developer-api/whatsapp/create-template) returns and [Bot Template Get](/developer-api/whatsapp/get-template-list) lists.
  It is **not** ChatSyncs' short `id`. The short one is answered with *Object with ID … does not exist*.
</Note>

## The response

```json theme={null}
{
  "status": "1",
  "message": "Template status fetched successfully.",
  "data": {
    "template_id": "1699518467799904",
    "template_name": "appointment_followup",
    "status": "APPROVED",
    "category": "UTILITY",
    "language": "en_US",
    "quality_score": { "score": "UNKNOWN", "date": 1788801570 },
    "rejected_reason": "NONE"
  }
}
```

### `status`

| `status` | Meaning | What to do |
| - | - | - |
| `PENDING` | Still with WhatsApp for review. Usually minutes, up to 24 hours (carousels often longer) | Check again later. Do not recreate it |
| `APPROVED` | Approved | It can be sent |
| `REJECTED` | WhatsApp refused it. `rejected_reason` says why | It cannot be sent. Create a corrected copy under a new name |
| `PAUSED` | Paused for low quality after customers blocked or reported it | Not sendable until the pause ends |
| `DISABLED` | Disabled after repeated low quality | Create a new template |
| `FLAGGED` | Flagged for low quality. It still sends | Reword it, or WhatsApp will pause it |
| `IN_APPEAL` | An appeal is with WhatsApp | Check again later |
| `PENDING_DELETION`, `DELETED` | Deleted, or being deleted | It cannot be sent |

### `quality_score`

WhatsApp rates a template by how customers react to it. `score` is `GREEN` (high), `YELLOW` (medium), `RED` (low) or
`UNKNOWN`. A **new template is `UNKNOWN`** until enough messages have gone out. A falling rating is the warning before a pause.
`date` is when the rating was set, as a Unix timestamp.

### `rejected_reason`

A reason code from WhatsApp, such as `INVALID_FORMAT`, when the template was rejected. For every template that was **not**
rejected it is the string **`NONE`** — not `null` — so test for `"NONE"`, not for an empty value.

<Warning>
  **Approved here does not always mean sendable through ChatSyncs.** [Bot Template Get](/developer-api/whatsapp/get-template-list) shows
  ChatSyncs' own copy of the status. A template can be `APPROVED` here and still read **Not Mapped** there: WhatsApp has approved it, but its
  variables are not mapped to contact fields in ChatSyncs yet, so [Send Template Message](/developer-api/whatsapp/send-template-message)
  cannot send it. Carousels and templates with a media header have the same limit.
</Warning>

## Errors

| `message` | What to do |
| - | - |
| `The phone number id field is required., The template id field is required.` | Send both fields |
| `Unsupported get request. Object with ID '…' does not exist, cannot be loaded due to missing permissions, or does not support this operation.` | WhatsApp has no template with that ID on this number. Use the long `template_id`, and check the template belongs to this `phone_number_id` |
| `WhatsApp Bot access token not found.` | `phone_number_id` is not one of this account's numbers |
| `Unauthenticated.` | The API key is wrong |

## Frequently asked

<AccordionGroup>
  <Accordion title="How often should I poll?">
    A template usually settles within minutes, so every 30 to 60 seconds for the first few minutes, then every few minutes. If it is
    still `PENDING` after 24 hours, check it in Chatbot Manager → Message Templates.
  </Accordion>

  <Accordion title="Does this tell me about the template's variables?">
    No. It reports review state and quality only. [Bot Template Get](/developer-api/whatsapp/get-template-list) lists a template's body,
    buttons and `variable_map`.
  </Accordion>

  <Accordion title="Why is my template APPROVED here but Not Mapped in ChatSyncs?">
    The two answer different questions. WhatsApp decides whether the template may be sent at all. ChatSyncs decides whether it knows
    how to fill the template's variables. Map them in ChatSyncs, and the template becomes sendable.
  </Accordion>

  <Accordion title="Can an assistant check this for me?">
    Yes. The ChatSyncs [MCP server](/mcp/tools) has a `get_template_status` ability. Give it a template's name and it finds the right
    ID itself.
  </Accordion>
</AccordionGroup>


## OpenAPI

````yaml GET /whatsapp/template/status
openapi: 3.1.0
info:
  title: ChatSyncs Developer API
  version: 1.0.0
  description: >-
    REST API for sending WhatsApp messages and managing subscribers through
    ChatSyncs.


    **Authentication.** Send your key as the `apiToken` parameter, or as
    `Authorization: Bearer <key>` — both work on every endpoint **except Custom
    Fields List**, which only accepts the `apiToken` parameter (a Bearer header
    alone is answered with *The api token field is required.*). A wrong key
    returns HTTP 401 `{"status":"0","message":"Unauthenticated."}`; no key at
    all redirects to the login page.


    **Methods.** Every endpoint accepts both GET and POST with the same
    parameters, except Upload Media, which is POST-only. Use POST for anything
    that changes data.


    **Errors.** Failures usually come back as HTTP 200 with `"status":"0"` and
    the reason in `message`, so always check `status`. `status` is the string
    `"1"` or `"0"` on most endpoints and a boolean on a few.


    **Lists.** Endpoints that return rows put them in `message` as a list; there
    is no `data` field (Custom Fields List is the exception and uses `data`).
servers:
  - url: https://platform.chatsyncs.com/api/v1
security: []
paths:
  /whatsapp/template/status:
    get:
      tags:
        - WhatsApp API
      summary: Template Status
      description: >-
        Checks, live from WhatsApp, where a message template is in review: its
        **approval status**, its **quality rating**, and the **rejection
        reason** if it was rejected. Use it after [Create
        Template](/developer-api/whatsapp/create-template) to find out when a
        template is ready to send.


        The status is WhatsApp's own, fetched on every call. [Bot Template
        Get](/developer-api/whatsapp/get-template-list) shows ChatSyncs' stored
        copy, which can lag and uses its own words (`Approved`, `Not Mapped`). A
        template can be `APPROVED` here and still be `Not Mapped` there:
        WhatsApp has approved it, but its variables are not yet mapped to
        contact fields in ChatSyncs, so it cannot be sent through the API.
      operationId: templateStatus
      parameters:
        - name: apiToken
          in: query
          required: true
          description: >-
            Your ChatSyncs API key. Or send it as `Authorization: Bearer <key>`.
            [Where to find it](/developer-api/finding-ids#api-token-apitoken).
          schema:
            type: string
          example: API-KEY
        - name: phone_number_id
          in: query
          required: true
          description: >-
            The WhatsApp account's phone number ID. [Where to find
            it](/developer-api/finding-ids#phone-number-id-phone_number_id).
          schema:
            type: string
          example: PHONE-NUMBER-ID
        - name: template_id
          in: query
          required: true
          description: >-
            **WhatsApp's long template ID** — the `template_id` that Create
            Template returns and Bot Template Get lists (about 15 digits). Not
            ChatSyncs' short `id`: that one is answered with *Object with ID …
            does not exist*.
          schema:
            type: string
          example: '129847192847198'
      responses:
        '200':
          description: >-
            Standard ChatSyncs response. `status` is `"1"` when WhatsApp
            answered and `"0"` on failure.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    description: '`"1"` = success, `"0"` = failure.'
                  message:
                    type: string
                    description: Human-readable result, or the failure reason.
                  data:
                    type: object
                    description: WhatsApp's live view of the template. Present on success.
                    properties:
                      template_id:
                        type: string
                        description: WhatsApp's template ID.
                      template_name:
                        type: string
                      status:
                        type: string
                        description: >-
                          WhatsApp's review status, in capitals: `APPROVED`,
                          `PENDING`, `REJECTED`, `PAUSED`, `DISABLED`,
                          `IN_APPEAL`, `FLAGGED`, `PENDING_DELETION` or
                          `DELETED`.
                      category:
                        type: string
                        description: >-
                          The category WhatsApp holds the template under, which
                          can differ from the one you asked for.
                      language:
                        type: string
                      quality_score:
                        type: object
                        description: WhatsApp's quality rating.
                        properties:
                          score:
                            type: string
                            description: >-
                              `GREEN` (high), `YELLOW` (medium), `RED` (low) or
                              `UNKNOWN` (not rated yet — new templates start
                              here).
                          date:
                            type: integer
                            description: When the rating was set, as a Unix timestamp.
                      rejected_reason:
                        type: string
                        description: >-
                          Why WhatsApp rejected it — a reason code such as
                          `INVALID_FORMAT`. The string `NONE` when it was not
                          rejected (not `null`).
              examples:
                approved:
                  summary: Approved
                  value:
                    status: '1'
                    message: Template status fetched successfully.
                    data:
                      template_id: '1699518467799904'
                      template_name: appointment_followup
                      status: APPROVED
                      category: UTILITY
                      language: en_US
                      quality_score:
                        score: UNKNOWN
                        date: 1788801570
                      rejected_reason: NONE
                rejected:
                  summary: Rejected, with the reason
                  value:
                    status: '1'
                    message: Template status fetched successfully.
                    data:
                      template_id: '129847192847198'
                      template_name: summer_shoes_carousel
                      status: REJECTED
                      category: MARKETING
                      language: en_US
                      quality_score:
                        score: UNKNOWN
                      rejected_reason: INVALID_FORMAT
                unknown:
                  summary: >-
                    WhatsApp has no template with that ID (or it is a ChatSyncs
                    id, not WhatsApp's)
                  value:
                    status: '0'
                    message: >-
                      Unsupported get request. Object with ID '434978' does not
                      exist, cannot be loaded due to missing permissions, or
                      does not support this operation. Please read the Graph API
                      documentation at
                      https://developers.facebook.com/docs/graph-api
                missing:
                  summary: Required fields left out
                  value:
                    status: '0'
                    message: >-
                      The phone number id field is required., The template id
                      field is required.
                badNumber:
                  summary: The phone_number_id is not one of this account's numbers
                  value:
                    status: '0'
                    message: WhatsApp Bot access token not found.
        '401':
          description: >-
            `apiToken` is wrong or missing. Send `Accept: application/json` to
            get this JSON answer; without it the API redirects to the login page
            with HTTP 302 instead.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                unauthenticated:
                  summary: Wrong apiToken
                  value:
                    message: Unauthenticated.

````

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