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

# Send Whatsapp Template Message

#### Body

<ParamField body="to" type="string" required placeholder="Enter phone number">
  Specifies the recipient's phone number in international format (e.g.,
  "1xxxxxxxxxx").
</ParamField>

<ParamField body="phoneId" type="string" required placeholder="Enter phone ID (Not Phone Number)">
  This is the unique identifier associated with the sender's phone number given
  by WhatsApp. Find the Phone ID on the Zixflow WhatsApp Settings page next to
  the number. [Whatsapp
  Settings](https://app.zixflow.com/campaign/settings/whatsapp)
</ParamField>

<ParamField body="templateName" type="string" required placeholder="Enter template name">
  Refers to the name of the template to be used for the WhatsApp message. In
  this case, it is set to "hello\_world." You can obtain it from the template
  list screen.
</ParamField>

<ParamField body="language" type="string" required placeholder="Enter language code">
  Specifies the language of the message, with "en\_US" representing American
  English. You can get it from the template list screen.
</ParamField>

<ParamField body="variables" type="object" required placeholder="Enter JSON object">
  Custom variables used for the template. Please provide a JSON object with the
  required data.
</ParamField>

<ParamField body="source" type="string" placeholder="Enter Source Type" initialValue="API" default="API">
  If the "linkWithRecord" is set to true, the source from which the WhatsApp
  message is sent should be mentioned; otherwise, it defaults to API.
</ParamField>

<ParamField body="linkWithRecord" type="boolean" placeholder="Enter true or false">
  Specify whether to associate the current message with a record and display it
  in the inbox. Set it to "true" for linking with a record; otherwise, it
  defaults to "false."
</ParamField>

<ParamField body="reportURL" type="string" placeholder="Enter report URL">
  (Optional) Specify the URL where the user's report and deliveries should be
  delivered.
</ParamField>

<ParamField body="submissionStatus" type="boolean" placeholder="Enter true or false">
  Indicates whether to wait for the submission status. Set it to "true" if you
  want to wait for the submission status; otherwise, it defaults to "false."
</ParamField>

#### Response

<ResponseField name="status" type="boolean">
  Indicates whether the call was successful. true if successful, false if not.
</ResponseField>

<ResponseField name="message" type="string">
  success or error response message
</ResponseField>

#### Variables

To know all required variable and their keys for selected template, use above Get Template Variable API. It will return response as

```json theme={null}
{
  "status": true,
  "message": "Success",
  "data": [
    {
      "label": "Header Image",
      "keyName": "image",
      "type": "IMAGE_URL"
    },
    {
      "label": "Body 1",
      "keyName": "body_1",
      "type": "TEXT"
    }
  ]
}
```

| type          | sample value     |
| ------------- | ---------------- |
| IMAGE\_URL    | `<image-url>`    |
| VIDEO\_URL    | `<video-url>`    |
| DOCUMENT\_URL | `<document-url>` |
| TEXT          | `<text>`         |
| OTP           | `<otp>`          |

For above variable response the varibales value will be

```json theme={null}
{
    variables:{
        "image": "<image-url>",
        "body_1": "<variable-text>"

        ....

        [keyName]:"<variable-value>"
    }
}
```

<RequestExample>
  ```bash cUrl theme={null}
  curl --location --request POST 'https://api.zixflow.com/api/v1/campaign/whatsapp/send' \
  --header 'Authorization: Bearer {{zixflow_api_key}}' \
  --header 'Content-Type: application/json' \
  --data-raw '{
      "to": "13023895111",
      "phoneId": "104898309288724",
      "templateName": "marketing_sample_2",
      "language": "en",
      "variables": {
          "video":"http://techslides.com/demos/sample-videos/small.mp4"
      },
      "submissionStatus": true
  }'
  ```

  ```js Nodejs theme={null}
  var axios = require("axios");
  var data = JSON.stringify({
    to: "13023895111",
    phoneId: "104898309288724",
    templateName: "marketing_sample_2",
    language: "en",
    variables: {
      video: "http://techslides.com/demos/sample-videos/small.mp4",
    },
    submissionStatus: true,
  });

  var config = {
    method: "post",
    url: "https://api.zixflow.com/api/v1/campaign/whatsapp/send",
    headers: {
      Authorization: "Bearer {{zixflow_api_key}}",
      "Content-Type": "application/json",
    },
    data: data,
  };

  axios(config)
    .then(function (response) {
      console.log(JSON.stringify(response.data));
    })
    .catch(function (error) {
      console.log(error);
    });
  ```

  ```py Python theme={null}
  import requests
  import json

  url = "https://api.zixflow.com/api/v1/campaign/whatsapp/send"

  payload = json.dumps({
    "to": "13023895111",
    "phoneId": "104898309288724",
    "templateName": "marketing_sample_2",
    "language": "en",
    "variables": {
      "video": "http://techslides.com/demos/sample-videos/small.mp4"
    },
    "submissionStatus": True
  })
  headers = {
    'Authorization': 'Bearer {{zixflow_api_key}}',
    'Content-Type': 'application/json'
  }

  response = requests.request("POST", url, headers=headers, data=payload)

  print(response.text)

  ```

  ```java JAVA theme={null}
  OkHttpClient client = new OkHttpClient().newBuilder()
    .build();
  MediaType mediaType = MediaType.parse("application/json");
  RequestBody body = RequestBody.create(mediaType, "{\n    \"to\": \"13023895111\",\n    \"phoneId\": \"104898309288724\",\n    \"templateName\": \"marketing_sample_2\",\n    \"language\": \"en\",\n    \"variables\": {\n        \"video\":\"http://techslides.com/demos/sample-videos/small.mp4\"\n    },\n    \"submissionStatus\": true\n}");
  Request request = new Request.Builder()
    .url("https://api.zixflow.com/api/v1/campaign/whatsapp/send")
    .method("POST", body)
    .addHeader("Authorization", "Bearer {{zixflow_api_key}}")
    .addHeader("Content-Type", "application/json")
    .build();
  Response response = client.newCall(request).execute();
  ```

  ```dart DART theme={null}
  var headers = {
    'Authorization': 'Bearer {{zixflow_api_key}}',
    'Content-Type': 'application/json'
  };
  var request = http.Request('POST', Uri.parse('https://api.zixflow.com/api/v1/campaign/whatsapp/send'));
  request.body = json.encode({
    "to": "13023895111",
    "phoneId": "104898309288724",
    "templateName": "marketing_sample_2",
    "language": "en",
    "variables": {
      "video": "http://techslides.com/demos/sample-videos/small.mp4"
    },
    "submissionStatus": true
  });
  request.headers.addAll(headers);

  http.StreamedResponse response = await request.send();

  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }

  ```
</RequestExample>

<ResponseExample>
  ```json 200-Success theme={null}
  {
    "status": true,
    "message": "Message sent successfully"
  }
  ```

  ```json 400-Bad Request theme={null}
  {
    "status": false,
    "message": "Invalid data Provided"
  }
  ```

  ```json 401-Unauthorised theme={null}
  {
    "status": false,
    "message": "Unauthorised"
  }
  ```
</ResponseExample>
