{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"6c5882c1-edf7-41df-a539-7525aad6b876","name":"Official Texter API V2","description":"# About Texter\n\n###### **TexterChat** (טקסטר) is a unified messaging platform designed to help businesses manage customer conversations - especially on WhatsApp. Our service enables you to:\n\n- Centralize all chats (WhatsApp, Messenger, Instagram, etc.) in a single inbox\n    \n- Use smart bots for lead qualification, business hours, and routing\n    \n- Integrate with your CRM and view customer data in real time\n    \n- Send styled template messages in bulk (images, buttons, video)\n    \n- Manage conversation essentials like labels, quick replies, notes, departments etc.\n    \n- And much more!\n    \n\nWe serve a wide range of clients, from higher education institutions, insurance agencies, retailers, medical clinics and government entities like the IDF, to SMBs looking for fast, professional WhatsApp communication. TexterChat was founded by two tech entrepreneurs and operates in both Israel and the U.S., headquartered in Tel Aviv. You can learn more at [texterchat.com](https://texterchat.com).\n\n# Texter API V2\n\n###### The **Texter API** enables your developers to control every aspect of this platform programmatically:\n\n- Manage and send your template messages\n    \n- Retrieve chats by ID or by various filters\n    \n- Assign and resolve conversations\n    \n- Send session messages into active chats\n    \n- Manage labels\n    \n- Monitor and resolve channel health issues\n    \n- Manage quick replies (coming soon)\n    \n\nAnd more...\n\nFor any questions please contact [Texter Support](https://wa.me/972586640430)\n\n# Authentication\n\n###### All requests require a **Bearer Token**.\n\n###### When creating a new token in Texter, you will need to assign it specific scopes, which define which parts of your inbox the token can access.\n\n###### Each folder in this documentation lists the required scopes for its endpoints.\n\n###### For example, to use the **Labels** routes, generate a token with the scopes **\"Manage Labels\"** and **\"Manage All Chats\"**, then store it in Postman under the environment variable `labelsApiToken`.\n\nTo create a new token go to your Texter environment-\n\n<img src=\"https://content.pstmn.io/fff87c90-f92a-4f06-9320-50ed2dde239a/aW1hZ2UucG5n\" alt=\"Gear%20icon%20>>%20Developers%20>>%20API%20Tokens\" width=\"352\" height=\"440\">\n\n<img src=\"https://content.pstmn.io/65c539e8-60ec-448b-87ef-932b73d324af/aW1hZ2UucG5n\" alt=\"Plus%20icon%20>>%20Give%20the%20token%20a%20name%20>>%20Choose%20the%20relevant%20scopes%20>>%20Save%20changes\" width=\"700\" height=\"324\">\n\n<img src=\"https://content.pstmn.io/eadf6063-aaab-482f-abf7-9329414501bd/aW1hZ2UucG5n\" alt=\"Click%20on%20the%20link%20icon%20to%20copy%20the%20token\" width=\"376\" height=\"135\">\n\n# Base URL\n\n###### All requests use your unique project subdomain:\n\n[https://projectID.texterchat.com/server/api/v2](https://projectID.texterchat.com/server/api/v2)\n\nFor example, if your environments URL is [https://demo.texterchat.com,](https://demo.texterchat.com,) then your projectID is **demo**.\n\nIn your environment, replace **`projectID`** with your actual project ID from Texter.\n\n# Quick Start\n\n###### To test the API:\n\n1. Set your environment values:\n    \n    - **`projectID`**: Your Texter project ID\n        \n    - **`templatesApiToken`**: Generate a token for Template routes, include the scopes -  \n        \\- Send Template Messages  \n        \\- View Template Messages  \n        \\- Manage All Chats  \n        \\- List All Chats\n        \n2. Try the [List All Templates](https://apidocs.texterchat.com/#a159ef1b-3376-48ea-978d-782dd987e2d2) request to confirm your connection.\n    \n\nYou're ready to go!\n\n---\n\n---\n\n# Entities\n\nThis section describes the core entities that appear across multiple API endpoints.\n\nEach entity represents a recurring object type - such as templates, chats, messages etc.  \nWith a standardized structure and attributes common to multiple endpoints.\n\n---\n\n# ↳ Template Object\n\nRepresents a WhatsApp template in Texter, including internal behavior (chat routing rules, departments, defaults) and provider state (WhatsApp approval status, localized content, quality score).\n\n### 1\\. Top-Level Fields\n\n| **Field** | **Type** | **Description** | **Allowed / Examples** | **Notes** |\n| --- | --- | --- | --- | --- |\n| `_id` | string | Unique identifier of the template in Texter | `\"6891bb93481ccea320113a91\"` |  |\n| `name` | string | Internal template name (also used as the template ID in API calls) | `\"bulk_marketing_272\"` |  |\n| `title` | string | Human-readable title shown in Texter’s UI | `\"OTP with resend\"`, `\"Template 1\"`, `\"הודעה שיווקית ווצאפ ביזנס וטקטר\"` |  |\n| `usage` | string | How this template is intended to be sent | `inbox` (1-to-1), `bulk` (broadcast/mass messaging) |  |\n| `chatStatus` | number | What status the chat should move to after the recipient replies to this template | `0 = BOT`,  <br>`1 = PENDING`,  <br>`2 = TAKEN`,  <br>`3 = RESOLVED`,  <br>`4 = BULK` |  |\n| `created` | number (ms timestamp) | When the template was created (epoch ms) | `1761559633632` |  |\n| `updatedAt` | string (ISO 8601) | Last time this template was updated | `\"2025-10-27T11:09:01.156Z\"` |  |\n| `departments` | string\\[\\] | List of department IDs allowed to use this template | `[\"customer_service\",\"financial\",\"waiting_for_customer_reply\", ...]` | Can be an empty array `[]` |\n| `isDefault` | boolean | Whether this is the default template for the account | `true`, `false` |  |\n| `setBotNode` | string | Bot node to trigger after reply, if chatStatus routes to bot | `\"marketing_template_wa_business_app\"` | Only appears on templates that define post-reply bot flow |\n| `channelInfo` | object | Channel that this template belongs to | see table below |  |\n| `provider_template` | object | WhatsApp-facing template metadata (category, approval status, localizations) | see table below |  |\n| `defaults` | object | Default variable values and default header media to prefill when sending | see table below |  |\n| `localizationDrafts` | object | Unsubmitted localization definitions (work-in-progress version of the template text/components before approval) | see table below |  |\n\n### 2\\. `channelInfo`\n\n| **Field** | **Type** | **Description** | **Allowed / Examples** | **Notes** |\n| --- | --- | --- | --- | --- |\n| `channelInfo.name` | string | Channel type for this template | `\"whatsapp\"` |  |\n| `channelInfo.accountId` | string | Channel account identifier in Texter. For WhatsApp this is the connected phone number | `\"972586640430\"` |  |\n\n### 3\\. `provider_template`\n\n`provider_template` contains what WhatsApp “knows” about the template.\n\n| **Field** | **Type** | **Description** | **Allowed / Examples** | **Notes** |\n| --- | --- | --- | --- | --- |\n| `provider_template.name` | string | Template name as registered with WhatsApp. Typically matches `name` | `\"bulk_marketing_272\"` |  |\n| `provider_template.category` | string | WhatsApp template category (WhatsApp may change this on approval) | `MARKETING`,  <br>`UTILITY` |  |\n| `provider_template.localizations` | array | All approved localizations for this template | array of Localization objects (see next table) |  |\n| `provider_template.metadata` | object | Extra provider metadata | `{}` |  |\n\nNotes:\n\n- If `provider_template.localizations` is empty and you see data under `localizationDrafts`, that means the template exists in Texter but was not yet approved by WhatsApp.\n    \n- Some localizations include `expiresAt` for temporary/limited-time templates.\n    \n\n### 4\\. `provider_template.localizatios[]`\n\nEach item in `provider_template.localizations` describes one approved localization (language variant) of the template as seen by WhatsApp.\n\n| **Field** | **Type** | **Description** | **Allowed / Examples** | **Notes** |\n| --- | --- | --- | --- | --- |\n| `status` | string | Approval status of this localization | `APPROVED`,  <br>`PENDING`,  <br>`REJECTED`, `REQUESTED`,  <br>`NEW`, `DELETED`,  <br>`SUBMIT_FAILED` |  |\n| `rejectionReason` | string | Reason for rejection | `\"NONE\"` |  |\n| `language` | string | Language code (IETF / WhatsApp locale code) | `\"he\"`,  <br>`\"en\"` |  |\n| `components` | array | Body / header / footer / buttons that make up the template in this language | see Components table below |  |\n| `createdAt` | string (ISO 8601) | When this localization was created | `\"2025-08-05T08:26:51.159492Z\"` |  |\n| `lastUpdated` | string (ISO 8601) | When this localization was last modified | `\"2025-10-08T13:11:20.994582Z\"` |  |\n| `expiresAt` | string (ISO 8601) | When this localization stops being valid | `\"2025-09-04T08:38:01.348019Z\"` |  |\n| `qualityScore` | object | WhatsApp quality rating for this template in this language | see below |  |\n| `qualityScore.score` | string | Quality tier as reported by WhatsApp | `UNKNOWN`,  <br>`GREEN`,  <br>`YELLOS`,  <br>`RED` |  |\n| `qualityScore.reasons` | string\\[\\] | Reasons affecting the quality score | `[\"High block rate\"]` |  |\n\n#### Components inside `localizatios[].components[]`\n\nA localization's components array is a list of WhatsApp template components such as:\n\n- `HEADER` (may include `format` and `example.header_handle`)\n    \n- `BODY` (always includes `text`, may include `example.body_text` with variable examples)\n    \n- `FOOTER` (always includes `text`)\n    \n- `BUTTONS` (includes `buttons[]`)\n    \n\nComponent-level structure:\n\n| **Field** | **Type** | **Description** | **Allowed / Examples** | **Notes** |\n| --- | --- | --- | --- | --- |\n| `type` | string | Component type | `HEADER`,  <br>`BODY`,  <br>`FOOTER`,  <br>`BUTTONS` |  |\n| `text` | string | Text content for BODY or FOOTER | `\"שלום {{1}} יום נעים\"` |  |\n| `format` | string | Media type for HEADER | `IMAGE`,  <br>`VIDEO`,  <br>`DOCUMENT` | Only relevant to `HEADER` |\n| `example.header_handle` | string\\[\\] | Example media URL(s) used in the template header | `[\"https://storage.googleapis.com/photo123.jpg\"]` | Only relevant to `HEADER` |\n| `example.body_text` | string\\[\\]\\[\\] | Example values for `{{1}}`, `{{2}}`, etc in BODY | `[[\"אלינור\", \"יוסי\"]]` | Only relevant if `BODY` has variables |\n| `buttons` | array | Button definitions for BUTTONS | see below | Only relevant to `BUTTONS` |\n| `buttons[].type` | string | Button type | `QUICK_REPLY`,  <br>`URL`,  <br>`PHONE_NUMBER` | Only in `BUTTONS` |\n| `buttons[].text` | string | Button label shown to the recipient | `\"מעניין אותי!\"`, `\"לאתר\"` | Only in `BUTTONS` |\n| `buttons[].url` | string | URL for `type: \"URL\"` buttons (may include variables like `{{1}}`) | `\"https://texterchat.com/{{1}}\"` | Only for `URL` buttons |\n| `buttons[].phone_number` | string | Phone number for `type: \"PHONE_NUMBER\"` buttons | `\"+972521234567\"` | Only for `PHONE_NUMBER` buttons |\n| `buttons[].example.url` | string | Example value for a URL containing variables | `\"blog\"` | Optional |\n\n### 5\\. `defaults`\n\n`defaults` is where Texter stores prefill values that will be used when sending the template (especially via the Send Template Message endpoint) if the caller doesn’t explicitly send overrides.\n\n| **Field** | **Type** | **Description** | **Allowed / Examples** | **Notes** |\n| --- | --- | --- | --- | --- |\n| `defaults` | object | Default values by language code | `{ \"he\": { ... } }` |  |\n| `defaults.LANG.body` | string\\[\\] | Default BODY variable values to autofill | `\"body\": [\"אלינור\"]` |  |\n| `defaults.LANG.header` | object | Default header media to use when sending | `{ \"type\": \"video\", \"url\": \"https://ninja.texterchat.com/server/files/shared/...\" }` |  |\n| `defaults.LANG.header.type` | string | Default header media type | `image`,  <br>`video`,  <br>`document` | Only if header is present |\n| `defaults.LANG.header.url` | string | Default header media URL (public or signed) | `\"https://ninja.texterchat.com/server/files/shared/...` | Only if header is present |\n\n### 6\\. `localizationDrafts`\n\n`localizationDrafts` appears when a template exists in Texter but hasn’t been fully submitted/approved by WhatsApp yet.\n\n| **Field** | **Type** | **Description** | **Allowed / Examples** | **Notes** |\n| --- | --- | --- | --- | --- |\n| `localizationDrafts` | object | Map of language code → draft localization definition | `\"he\": { \"language\": \"he\", \"components\": [...] }` |  |\n| `localizationDrafts.LANG.language` | string | Language code for this draft localization | `\"he\"` |  |\n| `localizationDrafts.LANG.components` | array | Draft components for this localization (BODY, FOOTER, BUTTONS, etc) | same structure as approved `components` |  |\n| `localizationDrafts.LANG.components[].text` | string | Draft text that has not yet been approved | `\"Hey {{1}} Thanks\"` |  |\n| `localizationDrafts.LANG.components[].example` | object | Example variable values for placeholders like `{{1}}` | `\"example\": { \"body_text\":[[\"Joe\"]] }` |  |\n\n---\n\n# ↳ Chat Object\n\n| **Field** | **Type** | **Description** | **Examples / Allowed Values** | **Notes** |\n| --- | --- | --- | --- | --- |\n| `_id` | string | Unique identifier of the chat in Texter | `\"64de3b15398a8e09c47a9f62\"` |  |\n| `title` | string | Name of the customer as set in their WhatsApp account settings | `\"גיא לוין\"`, `\"Julia\"` |  |\n| `displayName` | string | Custom name that was modified in Texter | `\"גיא\"` | If it doesn't appear, the displayName was never modified |\n| `channelInfo.name` | string | Channel type | `\"whatsapp\"` |  |\n| `channelInfo.accountId` | string | The business WhatsApp account / phone number connected to Texter | `\"972586640430\"` |  |\n| `channelInfo.id` | string | The customer’s WhatsApp number | `\"972521234567\"` |  |\n| `agent.uid` | string | Internal Texter user ID of the assigned agent | `\"rShazWqr8iTDocIqkOp4GY0c0j32\"`, `null` |  |\n| `agent.displayName` | string | Name of the assigned agent | `\"גיל\"`, `\"ניב\"` |  |\n| `departmentId` | string | Department responsible for the chat | `\"customer_service\"`, `null` |  |\n| `status` | number | Current state of the chat | `0 = WITH BOT`,  <br>`1 = PENDING`,  <br>`2 = TAKEN`,  <br>`3 = SOLVED`,  <br>`4 = BULK` |  |\n| `unreadCount` | number | Number of unread incoming messages |  |  |\n| `important` | boolean | Whether the chat is marked as important | `true`, `false` |  |\n| `labels` | string\\[\\] | List of label IDs applied to the chat | `[\"urgent\", \"billing\"]` |  |\n| `lastMessage.type` | string | Type of the last message (`text`, `media`, `special`) | `\"text\"` |  |\n| `lastMessage.text` | string | Text content of the last message, if applicable | `\"תודה\"` |  |\n| `lastMessage.media` | array | List of media files attached to the last message | `[ { \"mediaType\": \"document\", \"filename\": \"invoice.pdf\", \"fileId\": \"2494ndgwg24ndg\" } ]` |  |\n| `last_message_timestamp` | number (ms) | Timestamp of the last message sent or received | `1761858108753` |  |\n| `lastIncomingMessageTimestamp` | number (ms) | Timestamp of the last incoming (customer) message | `1762011142000` |  |\n| `created` | string (ISO 8601) | When the chat was created | `\"2025-02-26T13:02:58.353Z\"` |  |\n| `updatedAt` | string (ISO 8601) | Last time the chat was updated | `\"2025-10-30T21:01:48.989Z\"` |  |\n| `pendingMessageTime` | number | Timestamp of the last incoming (customer) message after the chat was set to PENDING | `1761858108` |  |\n| `pendingUpdateTime` | number | Timestamp of the last update into pending state | `1761858108` |  |\n| `resolvedUpdateTime` | number | Timestamp of the last time the chat was marked as RESOLVED | `1761664598` |  |\n| `replyAction.chatStatus` | number | Status to apply when the customer replies to a template | `0 = WITH BOT`,  <br>`1 = PENDING`,  <br>`2 = TAKEN`,  <br>`3 = SOLVED` |  |\n| `replyAction.setBotNode` | string | Bot node to trigger after reply | `\"marketing_template_wa_business_app\"` |  |\n| `replyAction.expirationTime` | number | How long (in seconds) the reply action remains valid | `259200` |  |\n| `sendingBulkAgent` | string | ID of the agent who initiated the bulk template message | `\"rShazWqr8iTDocIqkOp4GY0c0j32\"` |  |\n| `botState` | object | Data about the active or most recent bot session (see Bot State table below) | `{ \"flowVersion\": {...}, \"node\": \"handoff\" }` |  |\n| `previousBotSession` | object | Data about the the second-to-last bot session (see Bot State table below) | Same as `botState` |  |\n| `crmData` | object | Custom CRM metadata associated with the chat; structure varies by integration (Powerlink, Monday, etc.) | `{ \"fullname\": \"John Doe\", \"deepLink\": \"https://...\" }` |  |\n| `crmDeepLink` | string | Personalized link to the customers record in the inegrated business CRM |  |  |\n| `crmLastTicketId` | string | Reference to the most recent CRM record linked to the chat | `\"97337f16-e717-4ac9-b2dd-8552909b9252\"` |  |\n| `lastMessageStoredInCRMTimestamp` | string | Timestamp (in ms) of the last message stored in CRM | `1761858108753` |  |\n| `externalBot` | boolean | Whether an external bot (outside Texter) is currently active | `true`, `false` | When changed, triggers an event - used to enable or disable external bots. |\n| `unsubscribed.date` | string | When the chat unsubscribed from receiving template messages | `\"2025-10-30T21:01:48.989Z\"` |  |\n| `unsubscribed.bulkSendId` | string | Latest bulk send ID that this user was included before unsubscribed | `\"97337f16-e717-4ac9-b2dd-8552909b9252\"` |  |\n| `blockedChat.blocked` | boolean | Whether chat is marked as blocked | `true`, `false` |  |\n| `blockedChat.agent` | string | ID of the agent who blocked the chat | `\"333aed7a-b3ea-4e5c-acbc-d8499be509c3\"` |  |\n| `hasMessageError` | boolean | Whether the chat contains failed outgoing messages | `true`, `false` |  |\n| `language` | string | The chat perferred language |  | Reserved for future functionallity |\n| `channel` | string | Channel type | `\"whatsapp\"` | 🛑 **Deprecated**  <br>use `channelInfo.name` instead |\n| `clientPhone` | string | Customer phone number in international format | `\"+972521234567\"` | 🛑 **Deprecated**  <br>use `channelInfo.id` instead |\n| `clientPhoneE164` | string | Customer phone number in E.164 format | `\"+972521234567\"` | 🛑 **Deprecated**  <br>use `channelInfo.id` instead |\n| `entityPhone` | string | Business WhatsApp number used for this chat | `\"+972586640430\"` | 🛑 **Deprecated**  <br>use `channelInfo.accountId` instead |\n| `lastText` | string | Text preview of the last message | `\"תודה\"` | 🛑 **Deprecated**  <br>use `lastMessage.text` instead |\n| `unsubscribedTime` | number | Timestamp of when the user unsubscribed from template messages | `1761664598` | 🛑 **Deprecated**  <br>use `unsubscribed.date` instead |\n| `blockedTemplates` | boolean | Wether the recipient unsubscribed from receiving template messages | `true`, `false` | 🛑 **Deprecated**  <br>use `unsubscrubed` property instead |\n\n### Bot State\n\n| **Field** | **Type** | **Description** | **Examples / Allowed Values** | **Notes** |\n| --- | --- | --- | --- | --- |\n| `id` | string | Internal ID of the bot session | `\"3084c088c0902ac2b8b438acc34a2e...\"` |  |\n| `flowVersion.identifier` | string | Identifier of the active or previous bot | `\"onboarding-bot\"` |  |\n| `flowVersion.version` | number | Version number of the bot flow | `203` |  |\n| `userState` | object | Key-value memory of collected variables or answers from different bot nodes | `{ \"priority\": \"high\", \"menu_choice\": 2 }` |  |\n| `store` | object | Key-value memory of collected variables or answers during the session | `{ \"firstName\": \"Joe\", \"email\": \"joeDoe@gmail.com\" }` |  |\n| `latestAgentUid` | string | ID of the last human agent involved in the session | `\"876bb262-86f5-4583-a054-0a3cba7be1ba\"` |  |\n| `latestAgentName` | string | Display name of the last human agent involved | `\"מור\"`, `\"דן\"` |  |\n\n---\n\n# ↳ Message Object\n\n| **Field** | **Type** | **Description** | **Allowed / Examples** | **Notes** |\n| --- | --- | --- | --- | --- |\n| `_id` | string | Unique message ID in Texter | `\"69062b15962e17ab3033f886\"` |  |\n| `systemMessage` | boolean | Marks a system/control message instead of a normal chat bubble | `true`, `false` | `true` messages describe routing / assignment / status changes |\n| `type` | string | The content type of the message | `\"text\"`, `\"media\"`, `\"contacts\"`, `\"location\"`, `\"buttons\"`, `\"list\"`, `\"postback\"`, `\"special\"` |  |\n| `text` | string | Human-readable body text of the message | `\"ברוכים הבאים לתמיכה...\"`, `\"איך אפשר עוד לעזור?\"`, `\"היי\"` | Present on most `\"text\"`, `\"buttons\"`, `\"list\"`, and `\"special\"` messages |\n| `buttons` | Array<{ title: string; payload: string; }> | Interactive reply buttons that were sent to the user | `[{\"title\":\"נציג אנושי\",\"payload\":\"2\"}, {\"title\":\"סגירת פנייה\",\"payload\":\"3\"}]` | Only appears when `type: \"buttons\"` |\n| `list` | { button: string; sections: Array<{ title: string; rows: Array<{ title: string; payload: string; description?: string; }>}> } | WhatsApp \"list picker\" that was sent to the user | `\"button\": \"בחרו כאן\"`, rows like `{ \"title\": \"בעיה טכנית\", \"payload\": \"1\" }` | Only appears when `type: \"list\"` |\n| `postback` | { payload: string; title?: string; description?: string } | Which list item / button the user chose | `{ \"payload\": \"3\", \"title\": \"סגירת פנייה\" }` | Only appears when `type: \"postback\"` (incoming) |\n| `media` | media\\[\\] | Array of media items (files) in this message | See `media[] Object` table below | Only appears when `type: \"media\"` |\n| `location` | { latitude: number; longitude: number; name?: string; address?: string; url?: string } | Shared location data | `{ \"latitude\": 32.07, \"longitude\": 34.79, \"name\": \"Head Office\" }` | Only appears when `type: \"location\"` |\n| `contacts` | ContactCard\\[\\] | Shared contact cards (vCard-style info) | `{ name: { formatted_name: \"John Doe\" }, phones: [{ phone: \"123\", type: \"MOBILE\" }] }` | Only appears when `type: \"contacts\"` |\n| `special` | object | Structured provider/template data or other special content | `special.whatsappTyntec.template.templateId = \"bulk_marketing_272\"` | Used for outgoing WhatsApp templates, broadcasts, etc. Only for `type: \"special\"` |\n| `metadata` | object | Extra metadata about this message | `{ \"triggeredBot\": true }`, `{ \"botMsgInfo\": { ... } }` | May include bot info, template info, campaign info, flags |\n| `metadata.botMsgInfo` | { identifier: string; version: number; nodeName: string; hideSummary: boolean; } | Which bot node generated this outgoing message | `{ \"identifier\": \"smart-resolve\", \"version\": 210, \"nodeName\": \"priority\", \"hideSummary\": false }` | Lets you attribute messages to a bot flow/node |\n| `metadata.triggeredBot` | boolean | Whether this incoming message triggered automation/bot logic | `true`, `false` | Mainly on incoming user messages (including postbacks) |\n| `chatChannelInfo` | { name: string; id: string; accountId: string } | Which WhatsApp line/account this message belongs to | `{ \"name\": \"whatsapp\", \"id\": \"972527760989\", \"accountId\": \"972586640430\" }` | `name` will be `\"whatsapp\"` for WhatsApp messages |\n| `channelInfo` | { id: string; metadata?: object } | Provider-side message identifier | `\"id\": \"wamid.HBgMOTcyNTI3NzYwOTg5FQIAERgS...\"` | Use this to correlate with the WhatsApp provider / Meta logs |\n| `direction` | string | Logical direction of the message | `\"incoming\"` or `\"outgoing\"` |  |\n| `status` | number | Delivery state of the message | `0` = Sent, `1` = Accepted, `2` = Delivered, `3` = Seen, `4` = Failed, `5` = Channel Failed, `6` = Deleted |  |\n| `statusHistory` | Array<{ status: number; timestamp: number; }> | Timeline of delivery/read states for this message | `[{\"status\":0,\"timestamp\":1761574714328},{\"status\":3,\"timestamp\":1761574716050}]` |  |\n| `timestamp` | number (ms timestamp) | When the message was created (epoch ms) | `1761574722000` |  |\n| `updatedAt` | string (ISO 8601) | Last time this message was updated | `\"2025-10-27T14:18:39.153Z\"` | Updates happen e.g. when delivery status changes from Sent → Seen |\n| `parent_chat` | string | The Chat ID this message belongs to | `\"67d29e10d0c2473c648f3c9e\"` |  |\n| `agent` | string | Which agent or bot “sent” this message | `\"Bot\"`, or agent UID like `\"333aed7a-b3ea-4e5c-acbc-d8499be509c3\"` |  |\n| `assignedToAgent` | string | Which agent the chat was assigned to at this moment | `\"333aed7a-b3ea-4e5c-acbc-d8499be509c3\"`, `\"Bot\"` | Only appears on `systemMessage: true` messages that describe routing/assignment |\n| `assignedToDepartment` | string | Which department the chat was assigned to | `\"waiting_for_customer_reply\"`, `\"Zg18sAOfUA7pKNUQDnGc\"` | Only on some `systemMessage: true` |\n| `newChatStatus` | number | New chat status after this routing/system event | `0 = WITH BOT`,  <br>`1 = PENDING`,  <br>`2 = TAKEN`,  <br>`3 = RESOLVED`,  <br>`4 = BULK` | Only on `systemMessage: true` |\n| `botSessionId` | string | Bot session / flow instance ID tied to this message | `\"34c7c30a56278d74dc08d68194722ccc...\"` |  |\n| `hideSummary` | boolean | Should this message be hidden/suppressed from summaries | `true`, `false` | Also exists inside `metadata.botMsgInfo.hideSummary` |\n| `tmpSendId` | string | number | Client-generated ID to match “send request” → “stored message” | `\"9929b94d-d824-431e-aac9-b532279022ac\"`, `1761030858` |\n| `errorReason` | string | Reason the send failed (provider error, throttling, 24h window, etc.) | `\"reengagement window closed\"` | Only present if delivery actually failed |\n| `context` | object | Snapshot of the interactive message that this message is replying to / selecting from | Copies keys like `_id`, `text`, `buttons`/`list`, etc. from the original message |  |\n| `forwarded` | boolean | Whether WhatsApp marked the message as forwarded | `true`, `false` |  |\n| `sensitive` | boolean | Whether the content is marked sensitive and should be redacted in some views | `true`, `false` |  |\n| `bulkSendId` | string | Bulk / campaign batch ID for this message | `\"6900c1ebe946b426d31ce905\"` |  |\n\n#### 🛑 Deprecated / Legacy (these may still be returned, but don't build new code on them)\n\n| **Field** | **Type** | **Description** | **Allowed / Examples** | **Notes** |\n| --- | --- | --- | --- | --- |\n| `incoming` | boolean | Legacy mirror of `direction` | `true`, `false` | 🛑 **Deprecated** Use `direction` instead |\n| `outgoing` | boolean | Legacy mirror of `direction` | `true`, `false` | 🛑 **Deprecated**  <br>Use `direction` instead |\n| `received` | number (ms timestamp) | Legacy timestamp, originally \"when we received it\" | `1761574713761` | 🛑 **Deprecated**  <br>Use `timestamp` instead |\n| `botMsgInfo` | { identifier: string; version: number; nodeName: string; hideSummary: boolean } | Legacy top-level copy of bot info | `{ \"identifier\": \"smart-resolve\", \"version\": 210, \"nodeName\": \"priority\", \"hideSummary\": false }` | 🛑 **Deprecated**  <br>Use `metadata.botMsgInfo` instead |\n| `bulkSendId` | string | Legacy copy of campaign/bulk send ID | `\"6900c1ebe946b426d31ce905\"` | 🛑 **Deprecated**  <br>Use `metadata.bulkSendId` instead |\n| `providerMessageId` | string | Old provider message ID before | `\"3743ed63-6ace-480c-af7e-7b5d0cf11883\"` | 🛑 **Deprecated**  <br>Use `channelInfo.id` instead |\n| `messageId` | string | Older internal message ID field | `\"abc123\"` | 🛑 **Deprecated**  <br>Use `_id` instead |\n| `templateId` | string | WhatsApp template name/ID used for this outbound | `\"inbox_marketing_247\"`, `\"bulk_marketing_272\"` | 🛑 **Deprecated**  <br>Replaced by structured template info under `special.whatsappTyntec` / `metadata.whatsappTemplate` |\n| `templateMessage` | boolean | Was this message sent using a template? | `true` | 🛑 **Deprecated**  <br>New flows rely on richer template metadata |\n| `templateMessageData` | { id: string; header?: any; body: { text: string }; footer?: any; buttons?: any } | Legacy snapshot of the actual WhatsApp template body/variables/buttons that were sent | `{ \"id\": \"bulk_marketing_272\", \"body\": { \"text\": \"🔈חדש - מהיום...\" } }` | 🛑 **Deprecated**  <br>New code should inspect `special.whatsappTyntec.template` (or `metadata.whatsappTemplate` if exposed) |\n| `parameters` / `templateParameters` | string\\[\\] | Legacy placeholder values injected into that template | `[\"ddd\"]`, `[]` | 🛑 **Deprecated**  <br>Parameters now live in structured template data instead of a flat string array |\n| `tmpSendId` inside nested content (`MessageContentsBase.tmpSendId`) | string | Per-content copy of tmpSendId | `\"1761030842\"` | 🛑 **Deprecated**  <br>duplication. Use root-level `tmpSendId` |\n| `url` (inside `media[]`) | string | Direct download URL for the file | `\"https://ninja.texterchat.com/server/files/shared/6900c1ea...\"` | 🛑 **Deprecated**  <br>Use `fileId` instead |\n| `scanned` | boolean | Whether the file was scanned for threats | `true`, `false` | 🛑 **Deprecated** |\n\n### `media[]` Object\n\n(Used in messages where `type: \"media\"`)\n\n| **Field** | **Type** | **Description** | **Allowed / Examples** | **Notes** |\n| --- | --- | --- | --- | --- |\n| `mediaType` | string | The kind of file sent in this media item | `\"image\"`, `\"document\"`, `\"audio\"`, `\"video\"`, `\"sticker\"` |  |\n| `fileId` | string | Internal file ID in Texter storage | `\"6900c1eac29d42708adac92f\"` |  |\n| `previewId` | string | Internal preview/thumbnail file ID | `\"6900c1eac29d42708adac92f_preview\"` |  |\n| `filename` | string | Original filename from the sender device | `\"offer_october_2025.pdf\"`, `\"IMG-20251027-WA0001.jpg\"` |  |\n| `contentType` | string | MIME type | `\"application/pdf\"`, `\"image/jpeg\"`, `\"video/mp4\"`, `\"audio/ogg\"` |  |\n| `caption` | string | Optional caption text the sender attached to the media | `\"אנא תראו את ההצעה המצורפת\"`, `\"בדיקה\"` | Relevant for when mediaType is `image` or `video` |\n| `metadata` | object | Channel / provider metadata for this attachment | `{ \"frequentlyForwarded\": false }` |  |\n| `scanned` | boolean | Whether the file went through AV / safety scan | `true`, `false` | **🛑 Deprecated** |\n| `url` | string | Direct media URL | `\"https://ninja.texterchat.com/server/files/shared/6900c1ea...\"` | **🛑 Deprecated**  <br>Use `fileId` download flow instead |\n\n---\n\n# ↳ Probelm Object\n\n| **Field** | **Type** | **Description** | **Allowed / Examples** | **Notes** |\n| --- | --- | --- | --- | --- |\n| `_id` | string | Unique ID of this problem record in Texter | `\"68cc1241bafffd81d455e788\"` |  |\n| `channel` | string | Which messaging channel this problem refers to | `whatsapp`,  <br>`messenger`,  <br>`instagram`,  <br>`website_chat`,  <br>`email` |  |\n| `accountId` | string | The account ID in Texter affected by this issue | `\"972586503100\"`, `\"972523817473\"`, `\"380939933826\"` | This is the same ID you see under `chatChannelInfo.accountId` in messages |\n| `name` | string | Machine-readable problem code (stable identifier for the issue type) | `\"whatsapp_app_id_error\"`, `\"whatsapp_business_has_limited_messaging_availability\"` |  |\n| `caseId` | string | Provider / Meta case reference if available for this specific issue | `\"123456789012345\"` | Optional. If two problems share same `name` + same `caseId`, they’re considered the same ongoing incident |\n| `severity` | string | How bad the issue is | `\"error\"` or `\"warning\"` |  |\n| `impairedFunctionality` | object | Which abilities are impacted for this account | `{ \"send\": true, \"receive\": false }`, `{ \"send\": false, \"receive\": false }`, `{ \"send\": true, \"receive\": true }` | Keys map to channel capabilities. For WhatsApp you mainly see `send` and `receive`. `true` = that capability is impacted |\n| `message` | string | Human-readable explanation of the issue | `\"WhatsApp app ID is not set\"`, `\"The Business has not passed business verification.\"` |  |\n| `instruction` | string | Recommended remediation / what the user should do next | `\"Visit business settings and start or resolve the business verification request.\"`, `\"Contact support to resolve this issue.\"` | Optional. Not present on all problems |\n| `createdAt` | number (ms timestamp) | When this problem record was created (epoch ms) | `1758204481268` |  |\n| `startedAt` | number (ms timestamp) | When this issue actually started affecting the account, if known | `1758204400000` | Optional. Can be earlier than `createdAt` if was discovered later |\n| `resolvedAt` | number (ms timestamp) | When the issue was resolved | `1758208900000` | Optional. If missing, the problem is still ongoing/active |\n\n---","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"9650533","team":3546113,"collectionId":"6c5882c1-edf7-41df-a539-7525aad6b876","publishedId":"2sB3Wny34L","public":true,"publicUrl":"https://apidocs.texterchat.com","privateUrl":"https://go.postman.co/documentation/9650533-6c5882c1-edf7-41df-a539-7525aad6b876","customColor":{"top-bar":"ebebeb","right-sidebar":"303030","highlight":"014489"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":"The Texter API enables your developers to control every aspect of this platform programmatically such as managing and sending template messages, retrieve and assign chats, manage labels, monitor channel health issues and much more!"},{"name":"title","value":"TexterChat API"}],"appearance":{"default":"light","themes":[{"name":"dark","logo":"https://content.pstmn.io/e23c07a8-752d-4948-a447-a6cec5e55f89/dGV4dGVyLWxvZ28tc3F1YXJlMi0xOTJ4MTkyLnBuZw==","colors":{"top-bar":"353333","right-sidebar":"303030","highlight":"637ef5"}},{"name":"light","logo":"https://content.pstmn.io/e23c07a8-752d-4948-a447-a6cec5e55f89/dGV4dGVyLWxvZ28tc3F1YXJlMi0xOTJ4MTkyLnBuZw==","colors":{"top-bar":"ebebeb","right-sidebar":"303030","highlight":"014489"}}]}},"version":"8.10.1","publishDate":"2025-11-02T12:01:55.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"TexterChat API","description":"The Texter API enables your developers to control every aspect of this platform programmatically such as managing and sending template messages, retrieve and assign chats, manage labels, monitor channel health issues and much more!"},"logos":{"logoLight":"https://content.pstmn.io/e23c07a8-752d-4948-a447-a6cec5e55f89/dGV4dGVyLWxvZ28tc3F1YXJlMi0xOTJ4MTkyLnBuZw==","logoDark":"https://content.pstmn.io/e23c07a8-752d-4948-a447-a6cec5e55f89/dGV4dGVyLWxvZ28tc3F1YXJlMi0xOTJ4MTkyLnBuZw=="}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/9f89839929fddf852f0d63982295d511aa78e34ebce4df378b507b60f93ea8c7","favicon":"https://texterchat.com/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://apidocs.texterchat.com/view/metadata/2sB3Wny34L"}