{
  "info": {
    "name": "SmartChat API",
    "description": "Collection of the SmartChat API (version 2026-10-25). Set the variable api_key to your API key. Generated from the same source as the OpenAPI file.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{api_key}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://api.smartchat.marketing/v1",
      "type": "string"
    },
    {
      "key": "api_key",
      "value": "",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "account",
      "description": "The account overview.",
      "item": [
        {
          "name": "Get opt-in status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/optin-status",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "optin-status"
              ]
            },
            "description": "Returns how many contacts are confirmed, pending, never asked or unsubscribed. Counts only, no personal data. Read-only.\n\nPermission: contacts:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/optin-status",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "optin-status"
                  ]
                },
                "description": "Returns how many contacts are confirmed, pending, never asked or unsubscribed. Counts only, no personal data. Read-only.\n\nPermission: contacts:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"optin_status\",\n  \"total\": 340,\n  \"confirmed\": 250,\n  \"pending\": 10,\n  \"none\": 70,\n  \"opted_out\": 10,\n  \"confirmation_messages_waiting\": 0\n}"
            }
          ]
        },
        {
          "name": "Get account overview",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/account/overview?include=setup%2Ccredits",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "account",
                "overview"
              ],
              "query": [
                {
                  "key": "include",
                  "value": "setup,credits"
                }
              ]
            },
            "description": "Returns the account with parts chosen by include: setup, credits, optin and stats. Without include you get setup and credits. optin needs contacts:read and stats needs stats:read; plan and invoices are not included.\n\nPermission: account:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/account/overview?include=setup%2Ccredits",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "account",
                    "overview"
                  ],
                  "query": [
                    {
                      "key": "include",
                      "value": "setup,credits"
                    }
                  ]
                },
                "description": "Returns the account with parts chosen by include: setup, credits, optin and stats. Without include you get setup and credits. optin needs contacts:read and stats needs stats:read; plan and invoices are not included.\n\nPermission: account:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"account_overview\",\n  \"id\": \"acc_6f7a8b9c0d1e42f3a4b5c6d7e8f90123\",\n  \"name\": \"Casa Olivo\",\n  \"language\": \"en\",\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"setup\": {\n    \"whatsapp_connected\": true,\n    \"whatsapp_display_number\": \"+39 06 1234 5678\",\n    \"test_phone_set\": true,\n    \"business_profile_present\": true\n  },\n  \"credits\": {\n    \"balance\": 2400\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "ai_reply",
      "description": "Settings and learned answers of the SmartChat AI reply.",
      "item": [
        {
          "name": "Get AI reply settings",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/ai-reply-settings",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "ai-reply-settings"
              ]
            },
            "description": "Returns the settings of the automatic AI reply: on or off, display name, instructions and the fixed questions and answers. Read-only; the notice that marks AI replies is always on. Use update_ai_reply_settings to change them.\n\nPermission: ai:settings_read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ai-reply-settings",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ai-reply-settings"
                  ]
                },
                "description": "Returns the settings of the automatic AI reply: on or off, display name, instructions and the fixed questions and answers. Read-only; the notice that marks AI replies is always on. Use update_ai_reply_settings to change them.\n\nPermission: ai:settings_read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"ai_reply_settings\",\n  \"id\": \"acc_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"enabled\": true,\n  \"ai_name\": \"Olivia\",\n  \"disclosure_enabled\": true,\n  \"agent_do\": \"Answer questions about opening hours and the menu. Offer to book a table.\",\n  \"agent_never\": \"Never promise discounts.\",\n  \"agent_memory\": \"Open Tuesday to Sunday, 11:30 to 22:00.\",\n  \"style_approved\": false,\n  \"faq\": [\n    {\n      \"question\": \"Where can I park?\",\n      \"answer\": \"There is a free car park behind the house.\"\n    }\n  ],\n  \"updated_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Update AI reply settings",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/ai-reply-settings",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "ai-reply-settings"
              ]
            },
            "description": "Changes the given settings of the automatic AI reply; all other settings stay as they are. Turning it on needs a plan that includes it and lets SmartChat answer your customers on its own; turning it off also cancels replies that are waiting to be sent. Returns all settings.\n\nPermission: ai:settings. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"enabled\": true,\n  \"agent_memory\": \"Open Tuesday to Sunday, 11:30 to 22:00.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ai-reply-settings",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ai-reply-settings"
                  ]
                },
                "description": "Changes the given settings of the automatic AI reply; all other settings stay as they are. Turning it on needs a plan that includes it and lets SmartChat answer your customers on its own; turning it off also cancels replies that are waiting to be sent. Returns all settings.\n\nPermission: ai:settings. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"enabled\": true,\n  \"agent_memory\": \"Open Tuesday to Sunday, 11:30 to 22:00.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"ai_reply_settings\",\n  \"id\": \"acc_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"enabled\": true,\n  \"ai_name\": \"Olivia\",\n  \"disclosure_enabled\": true,\n  \"agent_do\": \"Answer questions about opening hours and the menu. Offer to book a table.\",\n  \"agent_never\": \"Never promise discounts.\",\n  \"agent_memory\": \"Open Tuesday to Sunday, 11:30 to 22:00.\",\n  \"style_approved\": false,\n  \"faq\": [\n    {\n      \"question\": \"Where can I park?\",\n      \"answer\": \"There is a free car park behind the house.\"\n    }\n  ],\n  \"updated_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "List learned answers",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/learned-answers?limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "learned-answers"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            },
            "description": "Lists the latest 500 learned answers of the AI reply, newest first (older ones are not listed), with role, age and freshness. Read-only; switched-off answers are left out unless include_disabled is true. Use save_learned_answer to add or correct one.\n\nPermission: ai:settings_read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/learned-answers?limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "learned-answers"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "description": "Lists the latest 500 learned answers of the AI reply, newest first (older ones are not listed), with role, age and freshness. Read-only; switched-off answers are left out unless include_disabled is true. Use save_learned_answer to add or correct one.\n\nPermission: ai:settings_read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"learned_answer\",\n      \"id\": \"ans_5d2c8e0f1a4b4c3d9e6f7a8b9c0d1e2f\",\n      \"question\": \"Do you have a vegan menu?\",\n      \"answer\": \"Yes, we have a vegan menu every day. Ask us for the daily dishes.\",\n      \"role\": \"rule\",\n      \"disabled\": false,\n      \"freshness\": \"fresh\",\n      \"age_days\": 3,\n      \"created_at\": \"2026-10-25T09:41:07Z\",\n      \"updated_at\": null,\n      \"last_confirmed_at\": \"2026-10-25T09:41:07Z\"\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/learned-answers\"\n}"
            }
          ]
        },
        {
          "name": "Create learned answer",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/learned-answers",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "learned-answers"
              ]
            },
            "description": "Adds a question and the answer the AI should give. With role 'rule' (default) it changes the AI replies; with 'note' it is only stored, and the same pair twice only confirms the first one. Returns the answer.\n\nPermission: ai:settings. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"question\": \"Do you have a vegan menu?\",\n  \"answer\": \"Yes, we have a vegan menu every day. Ask us for the daily dishes.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/learned-answers",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "learned-answers"
                  ]
                },
                "description": "Adds a question and the answer the AI should give. With role 'rule' (default) it changes the AI replies; with 'note' it is only stored, and the same pair twice only confirms the first one. Returns the answer.\n\nPermission: ai:settings. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"question\": \"Do you have a vegan menu?\",\n  \"answer\": \"Yes, we have a vegan menu every day. Ask us for the daily dishes.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"learned_answer\",\n  \"id\": \"ans_5d2c8e0f1a4b4c3d9e6f7a8b9c0d1e2f\",\n  \"question\": \"Do you have a vegan menu?\",\n  \"answer\": \"Yes, we have a vegan menu every day. Ask us for the daily dishes.\",\n  \"role\": \"rule\",\n  \"disabled\": false,\n  \"freshness\": \"fresh\",\n  \"age_days\": 3,\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"updated_at\": null,\n  \"last_confirmed_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Update learned answer",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/learned-answers/ans_5d2c8e0f1a4b4c3d9e6f7a8b9c0d1e2f",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "learned-answers",
                "ans_5d2c8e0f1a4b4c3d9e6f7a8b9c0d1e2f"
              ]
            },
            "description": "Corrects, confirms or switches off a learned answer, or changes its role. Correcting the answer also confirms it, and there is no delete through the API: set disabled to true instead. Returns the answer.\n\nPermission: ai:settings. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"disabled\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/learned-answers/ans_5d2c8e0f1a4b4c3d9e6f7a8b9c0d1e2f",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "learned-answers",
                    "ans_5d2c8e0f1a4b4c3d9e6f7a8b9c0d1e2f"
                  ]
                },
                "description": "Corrects, confirms or switches off a learned answer, or changes its role. Correcting the answer also confirms it, and there is no delete through the API: set disabled to true instead. Returns the answer.\n\nPermission: ai:settings. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"disabled\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"learned_answer\",\n  \"id\": \"ans_5d2c8e0f1a4b4c3d9e6f7a8b9c0d1e2f\",\n  \"question\": \"Do you have a vegan menu?\",\n  \"answer\": \"Yes, we have a vegan menu every day. Ask us for the daily dishes.\",\n  \"role\": \"rule\",\n  \"disabled\": true,\n  \"freshness\": \"fresh\",\n  \"age_days\": 3,\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"updated_at\": null,\n  \"last_confirmed_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "automations",
      "description": "Automations, their catalog and their runs.",
      "item": [
        {
          "name": "Get automation catalog",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/automation-catalog",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "automation-catalog"
              ]
            },
            "description": "Returns every trigger and step type an automation can use, with fields, limits and rules. Read it before create_automation. The catalog only lists what runs today.\n\nPermission: automations:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/automation-catalog",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "automation-catalog"
                  ]
                },
                "description": "Returns every trigger and step type an automation can use, with fields, limits and rules. Read it before create_automation. The catalog only lists what runs today.\n\nPermission: automations:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"automation_catalog\",\n  \"version\": \"2d26379cee484580\",\n  \"triggers\": [\n    {\n      \"type\": \"signup\",\n      \"group\": \"contact\",\n      \"description\": \"Starts when a contact signs up.\",\n      \"fields\": [],\n      \"allowed_as_further_trigger\": true\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "List automations",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/automations?status=draft&limit=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "automations"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "draft"
                },
                {
                  "key": "limit",
                  "value": "1"
                }
              ]
            },
            "description": "Lists the automations of the account, newest first. Filter by status or trigger. Use get_automation for the steps and the latest runs.\n\nPermission: automations:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/automations?status=draft&limit=1",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "automations"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "draft"
                    },
                    {
                      "key": "limit",
                      "value": "1"
                    }
                  ]
                },
                "description": "Lists the automations of the account, newest first. Filter by status or trigger. Use get_automation for the steps and the latest runs.\n\nPermission: automations:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"automation\",\n      \"id\": \"aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n      \"name\": \"Welcome after signup\",\n      \"status\": \"draft\",\n      \"draft\": true,\n      \"trigger\": {\n        \"type\": \"signup\"\n      },\n      \"steps\": [\n        {\n          \"type\": \"send_message\",\n          \"id\": \"s_1\",\n          \"text\": \"Hello {{name}}, nice to have you with us.\",\n          \"template\": {\n            \"id\": null,\n            \"status\": \"draft\"\n          }\n        },\n        {\n          \"type\": \"wait\",\n          \"id\": \"s_2\",\n          \"minutes\": 1440\n        },\n        {\n          \"type\": \"add_tag\",\n          \"id\": \"s_3\",\n          \"tag\": \"welcomed\"\n        }\n      ],\n      \"rules\": {\n        \"max_per_contact\": null,\n        \"excluded_names\": []\n      },\n      \"has_inbound_webhook\": false,\n      \"notices\": [],\n      \"run_count\": 0,\n      \"last_run_at\": null,\n      \"created_at\": \"2026-10-30T09:41:07Z\",\n      \"updated_at\": \"2026-10-30T09:41:07Z\"\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/automations\"\n}"
            }
          ]
        },
        {
          "name": "Get automation",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/automations/aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "automations",
                "aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
              ]
            },
            "description": "Returns one automation with trigger, steps, rules and hints. Add include=runs for the latest runs. Webhook addresses and header values show as *** unless the key has hooks:read_secret.\n\nPermission: automations:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/automations/aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "automations",
                    "aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
                  ]
                },
                "description": "Returns one automation with trigger, steps, rules and hints. Add include=runs for the latest runs. Webhook addresses and header values show as *** unless the key has hooks:read_secret.\n\nPermission: automations:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"automation\",\n  \"id\": \"aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"name\": \"Welcome after signup\",\n  \"status\": \"draft\",\n  \"draft\": true,\n  \"trigger\": {\n    \"type\": \"signup\"\n  },\n  \"steps\": [\n    {\n      \"type\": \"send_message\",\n      \"id\": \"s_1\",\n      \"text\": \"Hello {{name}}, nice to have you with us.\",\n      \"template\": {\n        \"id\": null,\n        \"status\": \"draft\"\n      }\n    },\n    {\n      \"type\": \"wait\",\n      \"id\": \"s_2\",\n      \"minutes\": 1440\n    },\n    {\n      \"type\": \"add_tag\",\n      \"id\": \"s_3\",\n      \"tag\": \"welcomed\"\n    }\n  ],\n  \"rules\": {\n    \"max_per_contact\": null,\n    \"excluded_names\": []\n  },\n  \"has_inbound_webhook\": false,\n  \"notices\": [],\n  \"run_count\": 0,\n  \"last_run_at\": null,\n  \"created_at\": \"2026-10-30T09:41:07Z\",\n  \"updated_at\": \"2026-10-30T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Create automation",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/automations",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "automations"
              ]
            },
            "description": "Creates an automation. Without status it is a draft and never runs; status active runs it at once and needs the permission automations:run. Steps that call an address need webhooks:write, steps in connected apps need connections:run.\n\nPermission: automations:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Welcome after signup\",\n  \"trigger\": {\n    \"type\": \"signup\"\n  },\n  \"steps\": [\n    {\n      \"type\": \"send_message\",\n      \"text\": \"Hello {{name}}, nice to have you with us.\"\n    },\n    {\n      \"type\": \"wait\",\n      \"minutes\": 1440\n    },\n    {\n      \"type\": \"add_tag\",\n      \"tag\": \"welcomed\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/automations",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "automations"
                  ]
                },
                "description": "Creates an automation. Without status it is a draft and never runs; status active runs it at once and needs the permission automations:run. Steps that call an address need webhooks:write, steps in connected apps need connections:run.\n\nPermission: automations:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Welcome after signup\",\n  \"trigger\": {\n    \"type\": \"signup\"\n  },\n  \"steps\": [\n    {\n      \"type\": \"send_message\",\n      \"text\": \"Hello {{name}}, nice to have you with us.\"\n    },\n    {\n      \"type\": \"wait\",\n      \"minutes\": 1440\n    },\n    {\n      \"type\": \"add_tag\",\n      \"tag\": \"welcomed\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"automation\",\n  \"id\": \"aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"name\": \"Welcome after signup\",\n  \"status\": \"draft\",\n  \"draft\": true,\n  \"trigger\": {\n    \"type\": \"signup\"\n  },\n  \"steps\": [\n    {\n      \"type\": \"send_message\",\n      \"id\": \"s_1\",\n      \"text\": \"Hello {{name}}, nice to have you with us.\",\n      \"template\": {\n        \"id\": null,\n        \"status\": \"draft\"\n      }\n    },\n    {\n      \"type\": \"wait\",\n      \"id\": \"s_2\",\n      \"minutes\": 1440\n    },\n    {\n      \"type\": \"add_tag\",\n      \"id\": \"s_3\",\n      \"tag\": \"welcomed\"\n    }\n  ],\n  \"rules\": {\n    \"max_per_contact\": null,\n    \"excluded_names\": []\n  },\n  \"has_inbound_webhook\": false,\n  \"notices\": [],\n  \"run_count\": 0,\n  \"last_run_at\": null,\n  \"created_at\": \"2026-10-30T09:41:07Z\",\n  \"updated_at\": \"2026-10-30T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Update automation",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/automations/aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "automations",
                "aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
              ]
            },
            "description": "Changes name, trigger, steps or rules of an automation. Send only what changes; a list of steps replaces the whole list (keep the step ids). On an active automation this needs automations:run.\n\nPermission: automations:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Welcome message\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/automations/aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "automations",
                    "aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
                  ]
                },
                "description": "Changes name, trigger, steps or rules of an automation. Send only what changes; a list of steps replaces the whole list (keep the step ids). On an active automation this needs automations:run.\n\nPermission: automations:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Welcome message\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"automation\",\n  \"id\": \"aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"name\": \"Welcome message\",\n  \"status\": \"draft\",\n  \"draft\": true,\n  \"trigger\": {\n    \"type\": \"signup\"\n  },\n  \"steps\": [\n    {\n      \"type\": \"send_message\",\n      \"id\": \"s_1\",\n      \"text\": \"Hello {{name}}, nice to have you with us.\",\n      \"template\": {\n        \"id\": null,\n        \"status\": \"draft\"\n      }\n    },\n    {\n      \"type\": \"wait\",\n      \"id\": \"s_2\",\n      \"minutes\": 1440\n    },\n    {\n      \"type\": \"add_tag\",\n      \"id\": \"s_3\",\n      \"tag\": \"welcomed\"\n    }\n  ],\n  \"rules\": {\n    \"max_per_contact\": null,\n    \"excluded_names\": []\n  },\n  \"has_inbound_webhook\": false,\n  \"notices\": [],\n  \"run_count\": 0,\n  \"last_run_at\": null,\n  \"created_at\": \"2026-10-30T09:41:07Z\",\n  \"updated_at\": \"2026-10-30T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Set automation status",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/automations/aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/status",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "automations",
                "aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                "status"
              ]
            },
            "description": "Sets the status to draft, active or paused. Active needs automations:run; draft is refused once the automation was active, because it would remove waiting messages (use paused). Templates not approved yet are listed in notices.\n\nPermission: automations:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"active\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/automations/aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/status",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "automations",
                    "aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                    "status"
                  ]
                },
                "description": "Sets the status to draft, active or paused. Active needs automations:run; draft is refused once the automation was active, because it would remove waiting messages (use paused). Templates not approved yet are listed in notices.\n\nPermission: automations:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"active\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"automation\",\n  \"id\": \"aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"name\": \"Welcome after signup\",\n  \"status\": \"active\",\n  \"draft\": false,\n  \"trigger\": {\n    \"type\": \"signup\"\n  },\n  \"steps\": [\n    {\n      \"type\": \"send_message\",\n      \"id\": \"s_1\",\n      \"text\": \"Hello {{name}}, nice to have you with us.\",\n      \"template\": {\n        \"id\": null,\n        \"status\": \"draft\"\n      }\n    },\n    {\n      \"type\": \"wait\",\n      \"id\": \"s_2\",\n      \"minutes\": 1440\n    },\n    {\n      \"type\": \"add_tag\",\n      \"id\": \"s_3\",\n      \"tag\": \"welcomed\"\n    }\n  ],\n  \"rules\": {\n    \"max_per_contact\": null,\n    \"excluded_names\": []\n  },\n  \"has_inbound_webhook\": false,\n  \"notices\": [],\n  \"run_count\": 0,\n  \"last_run_at\": null,\n  \"created_at\": \"2026-10-30T09:41:07Z\",\n  \"updated_at\": \"2026-10-30T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "List automation runs",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/automations/aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/runs?limit=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "automations",
                "aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                "runs"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "1"
                }
              ]
            },
            "description": "Lists the runs of one automation, newest first. Filter by status. Each run says whether the event matched, the flow was started, a rule skipped it or it failed.\n\nPermission: automations:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/automations/aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/runs?limit=1",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "automations",
                    "aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                    "runs"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "1"
                    }
                  ]
                },
                "description": "Lists the runs of one automation, newest first. Filter by status. Each run says whether the event matched, the flow was started, a rule skipped it or it failed.\n\nPermission: automations:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"automation_run\",\n      \"id\": \"run_1a2b3c4d5e6f40718293a4b5c6d7e8f9\",\n      \"automation_id\": \"aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n      \"status\": \"executed\",\n      \"created_at\": \"2026-10-30T09:41:07Z\"\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/automations/aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/runs\"\n}"
            }
          ]
        },
        {
          "name": "Start automation run",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/automations/aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/runs",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "automations",
                "aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                "runs"
              ]
            },
            "description": "Starts an active automation of the trigger type api_call for one contact. Call it without plan_id for the preview, then with the plan_id and a different Idempotency-Key. If the start fails, the plan stays valid.\n\nPermission: automations:run. Risk: send.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contact\": {\n    \"phone\": \"+4915112345678\",\n    \"name\": \"Mia\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/automations/aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/runs",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "automations",
                    "aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                    "runs"
                  ]
                },
                "description": "Starts an active automation of the trigger type api_call for one contact. Call it without plan_id for the preview, then with the plan_id and a different Idempotency-Key. If the start fails, the plan stays valid.\n\nPermission: automations:run. Risk: send.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact\": {\n    \"phone\": \"+4915112345678\",\n    \"name\": \"Mia\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"automation_run_plan\",\n  \"plan_id\": \"pln_9f8e7d6c5b4a43210fedcba987654321\",\n  \"expires_at\": \"2026-10-30T09:51:07Z\",\n  \"automation_id\": \"aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"trigger\": \"api_call\",\n  \"contact\": {\n    \"phone\": \"+4915112345678\"\n  },\n  \"new_contact\": true,\n  \"steps\": 3\n}"
            }
          ]
        },
        {
          "name": "Get inbound webhook",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/automations/aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/inbound-webhook",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "automations",
                "aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                "inbound-webhook"
              ]
            },
            "description": "Returns the secret inbound address of an automation that starts from outside, and its filters. Anyone with the address can start the automation, so it needs the permission hooks:read_secret.\n\nPermission: hooks:read_secret. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/automations/aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/inbound-webhook",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "automations",
                    "aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                    "inbound-webhook"
                  ]
                },
                "description": "Returns the secret inbound address of an automation that starts from outside, and its filters. Anyone with the address can start the automation, so it needs the permission hooks:read_secret.\n\nPermission: hooks:read_secret. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"inbound_webhook\",\n  \"automation_id\": \"aut_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"url\": \"https://api.example.invalid/public/automations/hook/EXAMPLE_TOKEN\",\n  \"method\": \"POST\",\n  \"trigger\": \"inbound_webhook\",\n  \"filters\": []\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "billing",
      "description": "Plan, invoices and credit history (read only).",
      "item": [
        {
          "name": "Get billing overview",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/billing",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "billing"
              ]
            },
            "description": "Returns the current plan, the subscription state, the credit balance and whether a payment is open. Read-only. Changing the plan or paying is only possible in the app.\n\nPermission: billing:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/billing",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "billing"
                  ]
                },
                "description": "Returns the current plan, the subscription state, the credit balance and whether a payment is open. Read-only. Changing the plan or paying is only possible in the app.\n\nPermission: billing:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"billing\",\n  \"plan\": {\n    \"id\": \"starter_299\",\n    \"name\": \"Starter\",\n    \"price_eur\": 299,\n    \"credits_per_period\": 3000\n  },\n  \"subscription\": {\n    \"status\": \"active\",\n    \"current_period_end\": \"2026-11-25T09:41:07Z\",\n    \"cancel_at\": null,\n    \"term_months\": 1\n  },\n  \"credits\": {\n    \"balance\": 2810\n  },\n  \"payment\": {\n    \"failed\": false,\n    \"grace_until\": null\n  }\n}"
            }
          ]
        },
        {
          "name": "List invoices",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/billing/invoices?limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "billing",
                "invoices"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            },
            "description": "Lists the stored invoices of the account, newest first, with number, amount, currency and status. Read-only. The PDF files can only be downloaded in the app.\n\nPermission: billing:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/billing/invoices?limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "billing",
                    "invoices"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "description": "Lists the stored invoices of the account, newest first, with number, amount, currency and status. Read-only. The PDF files can only be downloaded in the app.\n\nPermission: billing:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"invoice\",\n      \"id\": \"inv_4e6a8c0d2f1b43a5b7c9d1e3f5a7b9c1\",\n      \"number\": \"INV-1042\",\n      \"description\": \"Starter, October 2026\",\n      \"amount\": 299,\n      \"currency\": \"EUR\",\n      \"status\": \"paid\",\n      \"issued_at\": \"2026-10-25T00:00:00Z\",\n      \"pdf_available\": true\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/billing/invoices\"\n}"
            }
          ]
        },
        {
          "name": "List credit history",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/billing/credit-history?limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "billing",
                "credit-history"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            },
            "description": "Lists the latest 200 credit bookings of the account, newest first (older bookings are not listed), with the kind of booking and the time. Read-only. It shows no amounts; the balance is in get_billing.\n\nPermission: billing:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/billing/credit-history?limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "billing",
                    "credit-history"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "description": "Lists the latest 200 credit bookings of the account, newest first (older bookings are not listed), with the kind of booking and the time. Read-only. It shows no amounts; the balance is in get_billing.\n\nPermission: billing:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"credit_entry\",\n      \"id\": \"cre_2a4c6e8f0b1d43a5b7c9d1e3f5a7b9c1\",\n      \"type\": \"usage\",\n      \"created_at\": \"2026-10-25T09:41:07Z\"\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/billing/credit-history\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "business_profile",
      "description": "The business profile.",
      "item": [
        {
          "name": "Get business profile",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/business-profile",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "business-profile"
              ]
            },
            "description": "Returns the business profile of the account: name, description, address, websites, brand, test number, template style, content rules and the legal page addresses. Read-only. Use update_business_profile to change it.\n\nPermission: settings:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/business-profile",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "business-profile"
                  ]
                },
                "description": "Returns the business profile of the account: name, description, address, websites, brand, test number, template style, content rules and the legal page addresses. Read-only. Use update_business_profile to change it.\n\nPermission: settings:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"business_profile\",\n  \"id\": \"acc_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"name\": \"Casa Olivo\",\n  \"ui_language\": \"en\",\n  \"about\": \"Family run restaurant with a terrace.\",\n  \"whatsapp_about\": \"Table bookings and daily specials.\",\n  \"address\": \"Via Roma 12, 39100 Bolzano\",\n  \"websites\": [\n    \"https://casa-olivo.example\"\n  ],\n  \"industry\": \"restaurant\",\n  \"brand\": {\n    \"color\": \"#ff7a00\",\n    \"tonality\": \"warm and short\",\n    \"logo_url\": \"https://casa-olivo.example/logo.png\"\n  },\n  \"test_phone\": \"+4915112345678\",\n  \"template_style\": {\n    \"emojis\": \"sparing\"\n  },\n  \"content_rules\": [\n    {\n      \"kind\": \"topic\",\n      \"value\": \"politics\"\n    }\n  ],\n  \"legal\": {\n    \"imprint_url\": \"https://casa-olivo.example/imprint\",\n    \"privacy_url\": \"https://casa-olivo.example/privacy\"\n  },\n  \"avatar_media_id\": null,\n  \"updated_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Update business profile",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/business-profile",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "business-profile"
              ]
            },
            "description": "Changes the given fields of the business profile; all other fields stay as they are. Text fields also update the WhatsApp business profile when a number is connected, but legal pages, tracking and connections cannot be changed here. Returns the whole profile.\n\nPermission: settings:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"about\": \"Family run restaurant with a terrace.\",\n  \"brand\": {\n    \"color\": \"#ff7a00\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/business-profile",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "business-profile"
                  ]
                },
                "description": "Changes the given fields of the business profile; all other fields stay as they are. Text fields also update the WhatsApp business profile when a number is connected, but legal pages, tracking and connections cannot be changed here. Returns the whole profile.\n\nPermission: settings:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"about\": \"Family run restaurant with a terrace.\",\n  \"brand\": {\n    \"color\": \"#ff7a00\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"business_profile\",\n  \"id\": \"acc_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"name\": \"Casa Olivo\",\n  \"ui_language\": \"en\",\n  \"about\": \"Family run restaurant with a terrace.\",\n  \"whatsapp_about\": \"Table bookings and daily specials.\",\n  \"address\": \"Via Roma 12, 39100 Bolzano\",\n  \"websites\": [\n    \"https://casa-olivo.example\"\n  ],\n  \"industry\": \"restaurant\",\n  \"brand\": {\n    \"color\": \"#ff7a00\",\n    \"tonality\": \"warm and short\",\n    \"logo_url\": \"https://casa-olivo.example/logo.png\"\n  },\n  \"test_phone\": \"+4915112345678\",\n  \"template_style\": {\n    \"emojis\": \"sparing\"\n  },\n  \"content_rules\": [\n    {\n      \"kind\": \"topic\",\n      \"value\": \"politics\"\n    }\n  ],\n  \"legal\": {\n    \"imprint_url\": \"https://casa-olivo.example/imprint\",\n    \"privacy_url\": \"https://casa-olivo.example/privacy\"\n  },\n  \"avatar_media_id\": null,\n  \"updated_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "contacts",
      "description": "People you can message: contacts, tags, opt-in state.",
      "item": [
        {
          "name": "Search contacts",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/contacts?query=mia&limit=2",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts"
              ],
              "query": [
                {
                  "key": "query",
                  "value": "mia"
                },
                {
                  "key": "limit",
                  "value": "2"
                }
              ]
            },
            "description": "Finds contacts by name, phone number or email (partial match), and filters by tag, opt-in status or creation time. Returns one page, newest first, with a cursor for the next page. Use get_contact for one contact.\n\nPermission: contacts:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/contacts?query=mia&limit=2",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "contacts"
                  ],
                  "query": [
                    {
                      "key": "query",
                      "value": "mia"
                    },
                    {
                      "key": "limit",
                      "value": "2"
                    }
                  ]
                },
                "description": "Finds contacts by name, phone number or email (partial match), and filters by tag, opt-in status or creation time. Returns one page, newest first, with a cursor for the next page. Use get_contact for one contact.\n\nPermission: contacts:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"contact\",\n      \"id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n      \"name\": \"Mia Muster\",\n      \"phone\": \"+4915112345678\",\n      \"email\": \"mia@example.com\",\n      \"language\": \"en\",\n      \"status\": \"unconfirmed\",\n      \"optin_whatsapp\": \"none\",\n      \"optin_whatsapp_at\": null,\n      \"purpose\": \"marketing\",\n      \"source\": \"api\",\n      \"tags\": [\n        \"regular customer\"\n      ],\n      \"tag_details\": [\n        {\n          \"name\": \"regular customer\",\n          \"origin\": \"manual\",\n          \"added_at\": \"2026-10-25T09:41:07Z\"\n        }\n      ],\n      \"created_at\": \"2026-10-25T09:41:07Z\"\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/contacts\"\n}"
            }
          ]
        },
        {
          "name": "Get contact",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/contacts/con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
              ]
            },
            "description": "Returns one contact with its tags, opt-in status and creation time. Use search_contacts to find the contact ID first. Read-only.\n\nPermission: contacts:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/contacts/con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "contacts",
                    "con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
                  ]
                },
                "description": "Returns one contact with its tags, opt-in status and creation time. Use search_contacts to find the contact ID first. Read-only.\n\nPermission: contacts:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"contact\",\n  \"id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"name\": \"Mia Muster\",\n  \"phone\": \"+4915112345678\",\n  \"email\": \"mia@example.com\",\n  \"language\": \"en\",\n  \"status\": \"unconfirmed\",\n  \"optin_whatsapp\": \"none\",\n  \"optin_whatsapp_at\": null,\n  \"purpose\": \"marketing\",\n  \"source\": \"api\",\n  \"tags\": [\n    \"regular customer\"\n  ],\n  \"tag_details\": [\n    {\n      \"name\": \"regular customer\",\n      \"origin\": \"manual\",\n      \"added_at\": \"2026-10-25T09:41:07Z\"\n    }\n  ],\n  \"created_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Create contact",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/contacts",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts"
              ]
            },
            "description": "Creates a contact from a phone number or an email; the opt-in status starts as none and only the contact can confirm it. Needs an Idempotency-Key header. Returns the contact or contact_already_exists with existing_id.\n\nPermission: contacts:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Mia Muster\",\n  \"phone\": \"+4915112345678\",\n  \"email\": \"mia@example.com\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/contacts",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "contacts"
                  ]
                },
                "description": "Creates a contact from a phone number or an email; the opt-in status starts as none and only the contact can confirm it. Needs an Idempotency-Key header. Returns the contact or contact_already_exists with existing_id.\n\nPermission: contacts:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Mia Muster\",\n  \"phone\": \"+4915112345678\",\n  \"email\": \"mia@example.com\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"contact\",\n  \"id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"name\": \"Mia Muster\",\n  \"phone\": \"+4915112345678\",\n  \"email\": \"mia@example.com\",\n  \"language\": \"en\",\n  \"status\": \"unconfirmed\",\n  \"optin_whatsapp\": \"none\",\n  \"optin_whatsapp_at\": null,\n  \"purpose\": \"marketing\",\n  \"source\": \"api\",\n  \"tags\": [\n    \"regular customer\"\n  ],\n  \"tag_details\": [\n    {\n      \"name\": \"regular customer\",\n      \"origin\": \"manual\",\n      \"added_at\": \"2026-10-25T09:41:07Z\"\n    }\n  ],\n  \"created_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Update contact",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/contacts/con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
              ]
            },
            "description": "Changes the name, phone number or email of a contact and sends no message. A new phone number resets the opt-in status to none, because the old consent does not apply to it. Returns the contact.\n\nPermission: contacts:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Mia Beispiel\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/contacts/con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "contacts",
                    "con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
                  ]
                },
                "description": "Changes the name, phone number or email of a contact and sends no message. A new phone number resets the opt-in status to none, because the old consent does not apply to it. Returns the contact.\n\nPermission: contacts:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Mia Beispiel\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"contact\",\n  \"id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"name\": \"Mia Beispiel\",\n  \"phone\": \"+4915112345678\",\n  \"email\": \"mia@example.com\",\n  \"language\": \"en\",\n  \"status\": \"unconfirmed\",\n  \"optin_whatsapp\": \"none\",\n  \"optin_whatsapp_at\": null,\n  \"purpose\": \"marketing\",\n  \"source\": \"api\",\n  \"tags\": [\n    \"regular customer\"\n  ],\n  \"tag_details\": [\n    {\n      \"name\": \"regular customer\",\n      \"origin\": \"manual\",\n      \"added_at\": \"2026-10-25T09:41:07Z\"\n    }\n  ],\n  \"created_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "List tags",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/tags?limit=2",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "tags"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "2"
                }
              ]
            },
            "description": "Lists all tags in the account with the number of contacts for each, sorted by name. Use the names as filter in search_contacts or in tag_contacts. Read-only.\n\nPermission: contacts:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/tags?limit=2",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "tags"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "2"
                    }
                  ]
                },
                "description": "Lists all tags in the account with the number of contacts for each, sorted by name. Use the names as filter in search_contacts or in tag_contacts. Read-only.\n\nPermission: contacts:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"tag\",\n      \"id\": \"regular customer\",\n      \"name\": \"regular customer\",\n      \"origin\": \"manual\",\n      \"contact_count\": 12\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/tags\"\n}"
            }
          ]
        },
        {
          "name": "Tag contacts",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/contacts/tags",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "tags"
              ]
            },
            "description": "Adds tags to up to 100 contacts and removes tags from them; removing a tag never deletes the contact. System tags cannot be set or removed. Needs an Idempotency-Key header; returns one result per distinct contact ID, and one failed contact does not stop the others.\n\nPermission: contacts:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contact_ids\": [\n    \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\"\n  ],\n  \"add_tags\": [\n    \"vip\"\n  ],\n  \"remove_tags\": [\n    \"lead\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/contacts/tags",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "contacts",
                    "tags"
                  ]
                },
                "description": "Adds tags to up to 100 contacts and removes tags from them; removing a tag never deletes the contact. System tags cannot be set or removed. Needs an Idempotency-Key header; returns one result per distinct contact ID, and one failed contact does not stop the others.\n\nPermission: contacts:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_ids\": [\n    \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\"\n  ],\n  \"add_tags\": [\n    \"vip\"\n  ],\n  \"remove_tags\": [\n    \"lead\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"contact_tags_update\",\n  \"updated\": 1,\n  \"unchanged\": 0,\n  \"not_found\": 0,\n  \"failed\": 0,\n  \"results\": [\n    {\n      \"contact_id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n      \"status\": \"updated\",\n      \"tags\": [\n        \"vip\"\n      ],\n      \"error_code\": null\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Unsubscribe contact",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              }
            ],
            "url": {
              "raw": "{{base_url}}/contacts/con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/unsubscribe",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                "con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                "unsubscribe"
              ]
            },
            "description": "Unsubscribes a contact with a confirmed opt-in from all marketing messages and sends no message. It cannot be undone through the API; only the contact can sign up again. Needs an Idempotency-Key header and returns the contact.\n\nPermission: contacts:unsubscribe. Risk: write."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/contacts/con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/unsubscribe",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "contacts",
                    "con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                    "unsubscribe"
                  ]
                },
                "description": "Unsubscribes a contact with a confirmed opt-in from all marketing messages and sends no message. It cannot be undone through the API; only the contact can sign up again. Needs an Idempotency-Key header and returns the contact.\n\nPermission: contacts:unsubscribe. Risk: write."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"contact\",\n  \"id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"name\": \"Mia Muster\",\n  \"phone\": \"+4915112345678\",\n  \"email\": \"mia@example.com\",\n  \"language\": \"en\",\n  \"status\": \"opted_out\",\n  \"optin_whatsapp\": \"opted_out\",\n  \"optin_whatsapp_at\": \"2026-10-25T09:41:07Z\",\n  \"purpose\": \"marketing\",\n  \"source\": \"api\",\n  \"tags\": [\n    \"regular customer\"\n  ],\n  \"tag_details\": [\n    {\n      \"name\": \"regular customer\",\n      \"origin\": \"manual\",\n      \"added_at\": \"2026-10-25T09:41:07Z\"\n    }\n  ],\n  \"created_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Create contact export",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/contact-exports",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contact-exports"
              ]
            },
            "description": "Stores a copy of the contacts that match the filters (names, numbers, emails) for 24 hours, ready when the call returns; read the rows with get_contact_export. Sends nothing and changes no contact. Needs an Idempotency-Key header.\n\nPermission: contacts:read. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"tag\": \"vip\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/contact-exports",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "contact-exports"
                  ]
                },
                "description": "Stores a copy of the contacts that match the filters (names, numbers, emails) for 24 hours, ready when the call returns; read the rows with get_contact_export. Sends nothing and changes no contact. Needs an Idempotency-Key header.\n\nPermission: contacts:read. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tag\": \"vip\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"contact_export\",\n  \"id\": \"exp_4d5e6f7a8b9c40d1e2f3a4b5c6d7e8f9\",\n  \"status\": \"completed\",\n  \"row_count\": 1,\n  \"truncated\": false,\n  \"columns\": [\n    \"id\",\n    \"name\",\n    \"phone\",\n    \"email\",\n    \"status\",\n    \"tags\",\n    \"created_at\"\n  ],\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"expires_at\": \"2026-10-26T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Get contact export",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/contact-exports/exp_4d5e6f7a8b9c40d1e2f3a4b5c6d7e8f9?limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contact-exports",
                "exp_4d5e6f7a8b9c40d1e2f3a4b5c6d7e8f9"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            },
            "description": "Returns a contact export with one page of its rows; use cursor for the next page. Exports are removed 24 hours after creation. Read-only.\n\nPermission: contacts:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/contact-exports/exp_4d5e6f7a8b9c40d1e2f3a4b5c6d7e8f9?limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "contact-exports",
                    "exp_4d5e6f7a8b9c40d1e2f3a4b5c6d7e8f9"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "description": "Returns a contact export with one page of its rows; use cursor for the next page. Exports are removed 24 hours after creation. Read-only.\n\nPermission: contacts:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"contact_export\",\n  \"id\": \"exp_4d5e6f7a8b9c40d1e2f3a4b5c6d7e8f9\",\n  \"status\": \"completed\",\n  \"row_count\": 1,\n  \"truncated\": false,\n  \"columns\": [\n    \"id\",\n    \"name\",\n    \"phone\",\n    \"email\",\n    \"status\",\n    \"tags\",\n    \"created_at\"\n  ],\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"expires_at\": \"2026-10-26T09:41:07Z\",\n  \"data\": [\n    {\n      \"id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n      \"name\": \"Mia Muster\",\n      \"phone\": \"+4915112345678\",\n      \"email\": \"mia@example.com\",\n      \"status\": \"unconfirmed\",\n      \"tags\": [\n        \"vip\"\n      ],\n      \"created_at\": \"2026-10-25T09:41:07Z\"\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null\n}"
            }
          ]
        },
        {
          "name": "Create opt-in confirmations",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/optin-confirmations",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "optin-confirmations"
              ]
            },
            "description": "Sends the opt-in confirmation message by WhatsApp to chosen contacts who have not confirmed yet. Call without plan_id for a preview, then again with the plan_id and a new Idempotency-Key. Returns the preview or the queued count.\n\nPermission: sends:create. Risk: send.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contact_ids\": [\n    \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/optin-confirmations",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "optin-confirmations"
                  ]
                },
                "description": "Sends the opt-in confirmation message by WhatsApp to chosen contacts who have not confirmed yet. Call without plan_id for a preview, then again with the plan_id and a new Idempotency-Key. Returns the preview or the queued count.\n\nPermission: sends:create. Risk: send.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_ids\": [\n    \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"optin_confirmation_plan\",\n  \"plan_id\": \"pln_5e6f7a8b9c0d41e2f3a4b5c6d7e8f901\",\n  \"expires_at\": \"2026-10-25T09:51:07Z\",\n  \"recipients\": 1,\n  \"days\": 1,\n  \"daily_limit\": 250,\n  \"can_start\": true,\n  \"template_state\": \"sendable\",\n  \"truncated\": false\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "conversations",
      "description": "Conversations and messages in the inbox.",
      "item": [
        {
          "name": "List conversations",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/conversations?unread=true&limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations"
              ],
              "query": [
                {
                  "key": "unread",
                  "value": "true"
                },
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            },
            "description": "Lists the inbox conversations, newest message first, with the last message and the unread count. Filters by contact, unread state and a search word. Use get_conversation for the messages of one conversation.\n\nPermission: inbox:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/conversations?unread=true&limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "conversations"
                  ],
                  "query": [
                    {
                      "key": "unread",
                      "value": "true"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "description": "Lists the inbox conversations, newest message first, with the last message and the unread count. Filters by contact, unread state and a search word. Use get_conversation for the messages of one conversation.\n\nPermission: inbox:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"conversation\",\n      \"id\": \"cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6\",\n      \"contact\": {\n        \"id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n        \"name\": \"Mia Muster\",\n        \"phone\": \"+4915112345678\"\n      },\n      \"last_message\": \"Is a table free on Friday?\",\n      \"last_message_at\": \"2026-10-25T09:41:07Z\",\n      \"last_direction\": \"inbound\",\n      \"unread_count\": 1,\n      \"window_open\": true,\n      \"window_expires_at\": \"2026-10-26T09:41:07Z\",\n      \"origin\": \"direct\",\n      \"created_at\": \"2026-10-25T09:41:07Z\"\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/conversations\"\n}"
            }
          ]
        },
        {
          "name": "Get conversation",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/conversations/cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6?include=messages",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6"
              ],
              "query": [
                {
                  "key": "include",
                  "value": "messages"
                }
              ]
            },
            "description": "Returns one conversation and, with include=messages, its last 20 messages in time order. Use list_messages with conversation_id for older messages. Read-only.\n\nPermission: inbox:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/conversations/cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6?include=messages",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "conversations",
                    "cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6"
                  ],
                  "query": [
                    {
                      "key": "include",
                      "value": "messages"
                    }
                  ]
                },
                "description": "Returns one conversation and, with include=messages, its last 20 messages in time order. Use list_messages with conversation_id for older messages. Read-only.\n\nPermission: inbox:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"conversation\",\n  \"id\": \"cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6\",\n  \"contact\": {\n    \"id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n    \"name\": \"Mia Muster\",\n    \"phone\": \"+4915112345678\"\n  },\n  \"last_message\": \"Is a table free on Friday?\",\n  \"last_message_at\": \"2026-10-25T09:41:07Z\",\n  \"last_direction\": \"inbound\",\n  \"unread_count\": 1,\n  \"window_open\": true,\n  \"window_expires_at\": \"2026-10-26T09:41:07Z\",\n  \"origin\": \"direct\",\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"messages\": [\n    {\n      \"object\": \"message\",\n      \"id\": \"msg_7a8b9c0d1e2f4a3b8c4d5e6f7a8b9c0d\",\n      \"conversation_id\": \"cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6\",\n      \"contact_id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n      \"direction\": \"inbound\",\n      \"type\": \"text\",\n      \"text\": \"Is a table free on Friday?\",\n      \"media_url\": null,\n      \"media_mime\": null,\n      \"sent_by_ai\": false,\n      \"status\": null,\n      \"created_at\": \"2026-10-25T09:41:07Z\"\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "List messages",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/messages?direction=inbound&limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "messages"
              ],
              "query": [
                {
                  "key": "direction",
                  "value": "inbound"
                },
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            },
            "description": "Lists messages across the account or of one conversation, newest first. Filters by direction and time. Use it to poll for new inbound messages.\n\nPermission: inbox:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/messages?direction=inbound&limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "messages"
                  ],
                  "query": [
                    {
                      "key": "direction",
                      "value": "inbound"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "description": "Lists messages across the account or of one conversation, newest first. Filters by direction and time. Use it to poll for new inbound messages.\n\nPermission: inbox:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"message\",\n      \"id\": \"msg_7a8b9c0d1e2f4a3b8c4d5e6f7a8b9c0d\",\n      \"conversation_id\": \"cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6\",\n      \"contact_id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n      \"direction\": \"inbound\",\n      \"type\": \"text\",\n      \"text\": \"Is a table free on Friday?\",\n      \"media_url\": null,\n      \"media_mime\": null,\n      \"sent_by_ai\": false,\n      \"status\": null,\n      \"created_at\": \"2026-10-25T09:41:07Z\"\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/messages\"\n}"
            }
          ]
        },
        {
          "name": "Update conversation",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/conversations/cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6"
              ]
            },
            "description": "Marks a conversation as read by setting its unread count to zero. Sends nothing and changes no message. Returns the conversation.\n\nPermission: inbox:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"mark_read\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/conversations/cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "conversations",
                    "cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6"
                  ]
                },
                "description": "Marks a conversation as read by setting its unread count to zero. Sends nothing and changes no message. Returns the conversation.\n\nPermission: inbox:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"mark_read\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"conversation\",\n  \"id\": \"cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6\",\n  \"contact\": {\n    \"id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n    \"name\": \"Mia Muster\",\n    \"phone\": \"+4915112345678\"\n  },\n  \"last_message\": \"Is a table free on Friday?\",\n  \"last_message_at\": \"2026-10-25T09:41:07Z\",\n  \"last_direction\": \"inbound\",\n  \"unread_count\": 0,\n  \"window_open\": true,\n  \"window_expires_at\": \"2026-10-26T09:41:07Z\",\n  \"origin\": \"direct\",\n  \"created_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Create conversation note",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/conversations/cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6/notes",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "conversations",
                "cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6",
                "notes"
              ]
            },
            "description": "Adds a line with date and time to the internal note of the contact of this conversation; the old text stays and the contact never sees the note. Needs an Idempotency-Key header.\n\nPermission: inbox:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"text\": \"Prefers a table by the window.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/conversations/cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6/notes",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "conversations",
                    "cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6",
                    "notes"
                  ]
                },
                "description": "Adds a line with date and time to the internal note of the contact of this conversation; the old text stays and the contact never sees the note. Needs an Idempotency-Key header.\n\nPermission: inbox:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"text\": \"Prefers a table by the window.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"conversation_note\",\n  \"id\": \"cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6\",\n  \"conversation_id\": \"cnv_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6\",\n  \"contact_id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"text\": \"Prefers a table by the window.\",\n  \"created_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "followups",
      "description": "Follow-up sequences and their steps.",
      "item": [
        {
          "name": "List follow-up sequences",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/followup-sequences?limit=2",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "followup-sequences"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "2"
                }
              ]
            },
            "description": "Lists the follow-up sequences of the account with their steps. A sequence sends messages after a contact confirmed the opt-in. Returns sequences, oldest first; use get_followup_sequence for one.\n\nPermission: followups:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/followup-sequences?limit=2",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "followup-sequences"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "2"
                    }
                  ]
                },
                "description": "Lists the follow-up sequences of the account with their steps. A sequence sends messages after a contact confirmed the opt-in. Returns sequences, oldest first; use get_followup_sequence for one.\n\nPermission: followups:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"followup_sequence\",\n      \"id\": \"fup_7b1d3f5a9c2e4a6b8d0f1e3c5a7b9d2f\",\n      \"name\": \"Welcome series\",\n      \"trigger\": \"signup\",\n      \"status\": \"draft\",\n      \"steps\": [\n        {\n          \"object\": \"followup_step\",\n          \"id\": \"stp_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6\",\n          \"position\": 1,\n          \"delay_minutes\": 1440,\n          \"text\": \"Hi {{first_name}}, thanks for joining. Here is what to expect from us.\",\n          \"template_id\": null,\n          \"template_status\": null,\n          \"send_time\": null\n        },\n        {\n          \"object\": \"followup_step\",\n          \"id\": \"stp_6f5e4d3c2b1a4f9e8d7c6b5a4f3e2d1c\",\n          \"position\": 2,\n          \"delay_minutes\": 4320,\n          \"text\": \"Hi {{first_name}}, a quick tip for you this week.\",\n          \"template_id\": null,\n          \"template_status\": null,\n          \"send_time\": null\n        }\n      ],\n      \"created_at\": \"2026-10-25T09:41:07Z\"\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/followup-sequences\"\n}"
            }
          ]
        },
        {
          "name": "Get follow-up sequence",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/followup-sequences/fup_7b1d3f5a9c2e4a6b8d0f1e3c5a7b9d2f",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "followup-sequences",
                "fup_7b1d3f5a9c2e4a6b8d0f1e3c5a7b9d2f"
              ]
            },
            "description": "Returns one follow-up sequence with all its steps, their wait times and the approval state of each step template. Use it after list_followup_sequences. Read-only.\n\nPermission: followups:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/followup-sequences/fup_7b1d3f5a9c2e4a6b8d0f1e3c5a7b9d2f",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "followup-sequences",
                    "fup_7b1d3f5a9c2e4a6b8d0f1e3c5a7b9d2f"
                  ]
                },
                "description": "Returns one follow-up sequence with all its steps, their wait times and the approval state of each step template. Use it after list_followup_sequences. Read-only.\n\nPermission: followups:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"followup_sequence\",\n  \"id\": \"fup_7b1d3f5a9c2e4a6b8d0f1e3c5a7b9d2f\",\n  \"name\": \"Welcome series\",\n  \"trigger\": \"signup\",\n  \"status\": \"draft\",\n  \"steps\": [\n    {\n      \"object\": \"followup_step\",\n      \"id\": \"stp_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6\",\n      \"position\": 1,\n      \"delay_minutes\": 1440,\n      \"text\": \"Hi {{first_name}}, thanks for joining. Here is what to expect from us.\",\n      \"template_id\": null,\n      \"template_status\": null,\n      \"send_time\": null\n    },\n    {\n      \"object\": \"followup_step\",\n      \"id\": \"stp_6f5e4d3c2b1a4f9e8d7c6b5a4f3e2d1c\",\n      \"position\": 2,\n      \"delay_minutes\": 4320,\n      \"text\": \"Hi {{first_name}}, a quick tip for you this week.\",\n      \"template_id\": null,\n      \"template_status\": null,\n      \"send_time\": null\n    }\n  ],\n  \"created_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Create follow-up sequence",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/followup-sequences",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "followup-sequences"
              ]
            },
            "description": "Creates a follow-up sequence with 1 to 10 steps as a draft that sends nothing. Each step gets a draft template; submit them with create_template_submissions, then activate with update_followup_sequence. Needs an idempotency key.\n\nPermission: followups:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Welcome series\",\n  \"steps\": [\n    {\n      \"text\": \"Hi {{first_name}}, thanks for joining. Here is what to expect from us.\",\n      \"delay_minutes\": 1440\n    },\n    {\n      \"text\": \"Hi {{first_name}}, a quick tip for you this week.\",\n      \"delay_minutes\": 4320\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/followup-sequences",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "followup-sequences"
                  ]
                },
                "description": "Creates a follow-up sequence with 1 to 10 steps as a draft that sends nothing. Each step gets a draft template; submit them with create_template_submissions, then activate with update_followup_sequence. Needs an idempotency key.\n\nPermission: followups:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Welcome series\",\n  \"steps\": [\n    {\n      \"text\": \"Hi {{first_name}}, thanks for joining. Here is what to expect from us.\",\n      \"delay_minutes\": 1440\n    },\n    {\n      \"text\": \"Hi {{first_name}}, a quick tip for you this week.\",\n      \"delay_minutes\": 4320\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"followup_sequence\",\n  \"id\": \"fup_7b1d3f5a9c2e4a6b8d0f1e3c5a7b9d2f\",\n  \"name\": \"Welcome series\",\n  \"trigger\": \"signup\",\n  \"status\": \"draft\",\n  \"steps\": [\n    {\n      \"object\": \"followup_step\",\n      \"id\": \"stp_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6\",\n      \"position\": 1,\n      \"delay_minutes\": 1440,\n      \"text\": \"Hi {{first_name}}, thanks for joining. Here is what to expect from us.\",\n      \"template_id\": null,\n      \"template_status\": null,\n      \"send_time\": null\n    },\n    {\n      \"object\": \"followup_step\",\n      \"id\": \"stp_6f5e4d3c2b1a4f9e8d7c6b5a4f3e2d1c\",\n      \"position\": 2,\n      \"delay_minutes\": 4320,\n      \"text\": \"Hi {{first_name}}, a quick tip for you this week.\",\n      \"template_id\": null,\n      \"template_status\": null,\n      \"send_time\": null\n    }\n  ],\n  \"created_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Update follow-up sequence",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/followup-sequences/fup_7b1d3f5a9c2e4a6b8d0f1e3c5a7b9d2f",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "followup-sequences",
                "fup_7b1d3f5a9c2e4a6b8d0f1e3c5a7b9d2f"
              ]
            },
            "description": "Changes the name or status of a follow-up sequence, and the text or wait time of its steps. Setting active also schedules contacts who already confirmed. A changed text needs a new approval before it goes out.\n\nPermission: followups:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"active\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/followup-sequences/fup_7b1d3f5a9c2e4a6b8d0f1e3c5a7b9d2f",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "followup-sequences",
                    "fup_7b1d3f5a9c2e4a6b8d0f1e3c5a7b9d2f"
                  ]
                },
                "description": "Changes the name or status of a follow-up sequence, and the text or wait time of its steps. Setting active also schedules contacts who already confirmed. A changed text needs a new approval before it goes out.\n\nPermission: followups:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"active\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"followup_sequence\",\n  \"id\": \"fup_7b1d3f5a9c2e4a6b8d0f1e3c5a7b9d2f\",\n  \"name\": \"Welcome series\",\n  \"trigger\": \"signup\",\n  \"status\": \"active\",\n  \"steps\": [\n    {\n      \"object\": \"followup_step\",\n      \"id\": \"stp_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6\",\n      \"position\": 1,\n      \"delay_minutes\": 1440,\n      \"text\": \"Hi {{first_name}}, thanks for joining. Here is what to expect from us.\",\n      \"template_id\": null,\n      \"template_status\": null,\n      \"send_time\": null\n    },\n    {\n      \"object\": \"followup_step\",\n      \"id\": \"stp_6f5e4d3c2b1a4f9e8d7c6b5a4f3e2d1c\",\n      \"position\": 2,\n      \"delay_minutes\": 4320,\n      \"text\": \"Hi {{first_name}}, a quick tip for you this week.\",\n      \"template_id\": null,\n      \"template_status\": null,\n      \"send_time\": null\n    }\n  ],\n  \"created_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Get follow-up settings",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/followup-settings",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "followup-settings"
              ]
            },
            "description": "Returns the time of day and time zone at which follow-up messages go out, and the own time of each step. Read-only.\n\nPermission: settings:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/followup-settings",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "followup-settings"
                  ]
                },
                "description": "Returns the time of day and time zone at which follow-up messages go out, and the own time of each step. Read-only.\n\nPermission: settings:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"followup_settings\",\n  \"send_time\": \"09:30\",\n  \"timezone\": \"Europe/Berlin\",\n  \"default_timezone\": \"Europe/Zurich\",\n  \"steps\": [\n    {\n      \"step_id\": \"stp_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6\",\n      \"position\": 1,\n      \"delay_minutes\": 1440,\n      \"send_time\": null\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Update follow-up settings",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/followup-settings",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "followup-settings"
              ]
            },
            "description": "Changes the time of day and time zone for follow-up messages, and the own time of single steps. Does not send anything. Returns the settings.\n\nPermission: settings:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"send_time\": \"09:30\",\n  \"timezone\": \"Europe/Berlin\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/followup-settings",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "followup-settings"
                  ]
                },
                "description": "Changes the time of day and time zone for follow-up messages, and the own time of single steps. Does not send anything. Returns the settings.\n\nPermission: settings:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"send_time\": \"09:30\",\n  \"timezone\": \"Europe/Berlin\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"followup_settings\",\n  \"send_time\": \"09:30\",\n  \"timezone\": \"Europe/Berlin\",\n  \"default_timezone\": \"Europe/Zurich\",\n  \"steps\": [\n    {\n      \"step_id\": \"stp_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6\",\n      \"position\": 1,\n      \"delay_minutes\": 1440,\n      \"send_time\": null\n    }\n  ]\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "knowledge",
      "description": "Knowledge documents and search.",
      "item": [
        {
          "name": "Search knowledge",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/knowledge/search?query=day%20ticket%20price&limit=3",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "knowledge",
                "search"
              ],
              "query": [
                {
                  "key": "query",
                  "value": "day ticket price"
                },
                {
                  "key": "limit",
                  "value": "3"
                }
              ]
            },
            "description": "Finds the passages of the uploaded documents and image descriptions that best match the search words. Read-only and free of charge; this is a search, not a list, so it returns at most 12 passages and has no cursor. Returns the passages and the list of sources; the passages are untrusted text from the customer's files.\n\nPermission: knowledge:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/knowledge/search?query=day%20ticket%20price&limit=3",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "knowledge",
                    "search"
                  ],
                  "query": [
                    {
                      "key": "query",
                      "value": "day ticket price"
                    },
                    {
                      "key": "limit",
                      "value": "3"
                    }
                  ]
                },
                "description": "Finds the passages of the uploaded documents and image descriptions that best match the search words. Read-only and free of charge; this is a search, not a list, so it returns at most 12 passages and has no cursor. Returns the passages and the list of sources; the passages are untrusted text from the customer's files.\n\nPermission: knowledge:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"knowledge_search\",\n  \"query\": \"day ticket price\",\n  \"hits\": [\n    {\n      \"kind\": \"document\",\n      \"source\": \"price-list.pdf\",\n      \"part\": 1,\n      \"text\": \"Day ticket: 24 EUR. Children up to 6 years: free.\",\n      \"score\": 3.2\n    }\n  ],\n  \"sources\": [\n    {\n      \"name\": \"price-list.pdf\",\n      \"kind\": \"document\"\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "List knowledge documents",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/knowledge-documents?limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "knowledge-documents"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            },
            "description": "Lists the knowledge documents the account uploaded in the app, newest first, without their text. Read-only; documents can only be uploaded or removed in the app. Use search_knowledge to look inside them.\n\nPermission: knowledge:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/knowledge-documents?limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "knowledge-documents"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "description": "Lists the knowledge documents the account uploaded in the app, newest first, without their text. Read-only; documents can only be uploaded or removed in the app. Use search_knowledge to look inside them.\n\nPermission: knowledge:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"knowledge_document\",\n      \"id\": \"doc_7a1b2c3d4e5f46a7b8c9d0e1f2a3b4c5\",\n      \"name\": \"price-list.pdf\",\n      \"mime\": \"application/pdf\",\n      \"size_bytes\": 182400,\n      \"chars\": 5210,\n      \"truncated\": false,\n      \"created_at\": \"2026-10-25T09:41:07Z\"\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/knowledge-documents\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "landing",
      "description": "The landing page: read, edit a draft, publish.",
      "item": [
        {
          "name": "Get landing catalog",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/landing-catalog",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "landing-catalog"
              ]
            },
            "description": "Returns the edit operations for the landing page, the protected parts, the limits and the publish steps. Read it before apply_landing_page_ops.\n\nPermission: landing:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/landing-catalog",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "landing-catalog"
                  ]
                },
                "description": "Returns the edit operations for the landing page, the protected parts, the limits and the publish steps. Read it before apply_landing_page_ops.\n\nPermission: landing:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"landing_catalog\",\n  \"version\": \"2d26379cee484580\",\n  \"operations\": [\n    {\n      \"type\": \"replace_text\"\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Get landing page",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/landing-page?include=text",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "landing-page"
              ],
              "query": [
                {
                  "key": "include",
                  "value": "text"
                }
              ]
            },
            "description": "Returns the landing page: address, status, whether a draft and a previous version exist, and the protected parts. Add include=text for the visible texts or include=design for the design values of a free page, or include=sections for the sections, style and settings of a page in the page model.\n\nPermission: landing:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/landing-page?include=text",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "landing-page"
                  ],
                  "query": [
                    {
                      "key": "include",
                      "value": "text"
                    }
                  ]
                },
                "description": "Returns the landing page: address, status, whether a draft and a previous version exist, and the protected parts. Add include=text for the visible texts or include=design for the design values of a free page, or include=sections for the sections, style and settings of a page in the page model.\n\nPermission: landing:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"landing_page\",\n  \"status\": \"live\",\n  \"url\": \"https://example-shop.smartchat.marketing\",\n  \"structure\": \"free\",\n  \"language\": \"en\",\n  \"title\": \"Example Shop\",\n  \"description\": \"Fresh bread every morning.\",\n  \"has_draft\": true,\n  \"draft_changed_at\": \"2026-10-30T09:41:07Z\",\n  \"previous_version_available\": true,\n  \"previous_version_saved_at\": \"2026-10-29T18:00:00Z\",\n  \"never_offline\": true,\n  \"protected_parts\": [\n    \"signup\",\n    \"footer\",\n    \"cookie_banner\"\n  ],\n  \"updated_at\": \"2026-10-29T18:00:00Z\",\n  \"text_blocks\": [\n    {\n      \"index\": 0,\n      \"text\": \"Fresh bread every morning\"\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Edit landing page draft",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/landing-page/operations",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "landing-page",
                "operations"
              ]
            },
            "description": "Applies edit operations to the draft of the landing page, never to the live page. Free pages and pages in the page model take different operations: see get_landing_catalog. If one operation is rejected nothing changes.\n\nPermission: landing:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"operations\": [\n    {\n      \"type\": \"replace_text\",\n      \"find\": \"Fresh bread every morning\",\n      \"replace\": \"Fresh bread from 6 o'clock\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/landing-page/operations",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "landing-page",
                    "operations"
                  ]
                },
                "description": "Applies edit operations to the draft of the landing page, never to the live page. Free pages and pages in the page model take different operations: see get_landing_catalog. If one operation is rejected nothing changes.\n\nPermission: landing:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"operations\": [\n    {\n      \"type\": \"replace_text\",\n      \"find\": \"Fresh bread every morning\",\n      \"replace\": \"Fresh bread from 6 o'clock\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"landing_page_operations\",\n  \"applied\": 1,\n  \"dry_run\": false,\n  \"diff\": [\n    {\n      \"operation\": 0,\n      \"field\": \"text\",\n      \"before\": \"Fresh bread every morning\",\n      \"after\": \"Fresh bread from 6 o'clock\"\n    }\n  ],\n  \"has_draft\": true\n}"
            }
          ]
        },
        {
          "name": "Publish landing page",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/landing-page/publication",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "landing-page",
                "publication"
              ]
            },
            "description": "Makes the draft the live landing page. Call it without plan_id for the preview and the checks, then again with the plan_id. The page is never offline; the old version can be restored.\n\nPermission: landing:publish. Risk: send.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/landing-page/publication",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "landing-page",
                    "publication"
                  ]
                },
                "description": "Makes the draft the live landing page. Call it without plan_id for the preview and the checks, then again with the plan_id. The page is never offline; the old version can be restored.\n\nPermission: landing:publish. Risk: send.",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"landing_publish_plan\",\n  \"plan_id\": \"pln_9f8e7d6c5b4a43210fedcba987654321\",\n  \"expires_at\": \"2026-10-30T09:51:07Z\",\n  \"changed_fields\": 2,\n  \"issues\": []\n}"
            }
          ]
        },
        {
          "name": "Restore previous landing page",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/landing-page/restorations",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "landing-page",
                "restorations"
              ]
            },
            "description": "Puts the version from before the last publication into the draft. The live page does not change until you publish. An unpublished draft is replaced for good, so it needs discard_draft true.\n\nPermission: landing:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/landing-page/restorations",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "landing-page",
                    "restorations"
                  ]
                },
                "description": "Puts the version from before the last publication into the draft. The live page does not change until you publish. An unpublished draft is replaced for good, so it needs discard_draft true.\n\nPermission: landing:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"landing_page\",\n  \"status\": \"live\",\n  \"url\": \"https://example-shop.smartchat.marketing\",\n  \"structure\": \"free\",\n  \"language\": \"en\",\n  \"title\": \"Example Shop\",\n  \"description\": \"Fresh bread every morning.\",\n  \"has_draft\": true,\n  \"draft_changed_at\": \"2026-10-30T09:41:07Z\",\n  \"previous_version_available\": true,\n  \"previous_version_saved_at\": \"2026-10-29T18:00:00Z\",\n  \"never_offline\": true,\n  \"protected_parts\": [\n    \"signup\",\n    \"footer\",\n    \"cookie_banner\"\n  ],\n  \"updated_at\": \"2026-10-29T18:00:00Z\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "media",
      "description": "The media library.",
      "item": [
        {
          "name": "List media",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/media?kind=image&limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "media"
              ],
              "query": [
                {
                  "key": "kind",
                  "value": "image"
                },
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            },
            "description": "Lists the files in the media library, newest first, without chat attachments, proof documents and knowledge files. Read-only. Use upload_file to add a file.\n\nPermission: media:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/media?kind=image&limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "media"
                  ],
                  "query": [
                    {
                      "key": "kind",
                      "value": "image"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "description": "Lists the files in the media library, newest first, without chat attachments, proof documents and knowledge files. Read-only. Use upload_file to add a file.\n\nPermission: media:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"media\",\n      \"id\": \"med_9c8b7a6d5e4f43a2b1c0d9e8f7a6b5c4\",\n      \"kind\": \"image\",\n      \"usage\": \"generic\",\n      \"url\": \"https://media.smartchat.example/acc/terrace.webp\",\n      \"mime\": \"image/webp\",\n      \"size_bytes\": 214800,\n      \"width\": 1600,\n      \"height\": 1067,\n      \"original_name\": \"terrace.jpg\",\n      \"created_at\": \"2026-10-25T09:41:07Z\"\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/media\"\n}"
            }
          ]
        },
        {
          "name": "Upload media file",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              }
            ],
            "url": {
              "raw": "{{base_url}}/media",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "media"
              ]
            },
            "description": "Adds a file to the media library from multipart field 'file', from an address ('url') or from base64 data, with the same checks as in the app. Uses no credits. Returns the media object; an identical image that already exists is returned instead.\n\nPermission: media:write. Risk: write.",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "url",
                  "type": "text",
                  "value": "https://example.com/terrace.jpg"
                },
                {
                  "key": "usage",
                  "type": "text",
                  "value": "generic"
                }
              ]
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/media",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "media"
                  ]
                },
                "description": "Adds a file to the media library from multipart field 'file', from an address ('url') or from base64 data, with the same checks as in the app. Uses no credits. Returns the media object; an identical image that already exists is returned instead.\n\nPermission: media:write. Risk: write.",
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "key": "url",
                      "type": "text",
                      "value": "https://example.com/terrace.jpg"
                    },
                    {
                      "key": "usage",
                      "type": "text",
                      "value": "generic"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"media\",\n  \"id\": \"med_9c8b7a6d5e4f43a2b1c0d9e8f7a6b5c4\",\n  \"kind\": \"image\",\n  \"usage\": \"generic\",\n  \"url\": \"https://media.smartchat.example/acc/terrace.webp\",\n  \"mime\": \"image/webp\",\n  \"size_bytes\": 214800,\n  \"width\": 1600,\n  \"height\": 1067,\n  \"original_name\": \"terrace.jpg\",\n  \"created_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "meta",
      "description": "Connection check and connected apps.",
      "item": [
        {
          "name": "Get current connection",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/me",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "me"
              ]
            },
            "description": "Returns the account, the API key or connection and the permissions used for this call. Use it to test a connection or to see which permissions a key has. Read-only; no side effects.\n\nPermission: none. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/me",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "me"
                  ]
                },
                "description": "Returns the account, the API key or connection and the permissions used for this call. Use it to test a connection or to see which permissions a key has. Read-only; no side effects.\n\nPermission: none. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"me\",\n  \"id\": \"acc_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"account\": {\n    \"object\": \"account\",\n    \"id\": \"acc_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n    \"name\": \"Casa Olivo\"\n  },\n  \"key\": {\n    \"object\": \"api_key\",\n    \"id\": \"key_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6\",\n    \"name\": \"Zapier\",\n    \"prefix\": \"sc_live_ab12\"\n  },\n  \"auth_type\": \"api_key\",\n  \"environment\": \"live\",\n  \"scopes\": [\n    \"contacts:read\",\n    \"templates:read\"\n  ],\n  \"rate_limits\": {\n    \"read\": 120,\n    \"write\": 120,\n    \"send\": 120,\n    \"bulk\": 120,\n    \"upload\": 120\n  },\n  \"api_version\": \"2026-10-25\"\n}"
            }
          ]
        },
        {
          "name": "List events",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/events?type=message.failed&limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "events"
              ],
              "query": [
                {
                  "key": "type",
                  "value": "message.failed"
                },
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            },
            "description": "Lists past events of one type, newest first, so a tool can poll for new ones. Needs inbox:read, and also contacts:read for contact.opted_out. Read-only; webhooks push the same events without polling.\n\nPermission: inbox:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/events?type=message.failed&limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "events"
                  ],
                  "query": [
                    {
                      "key": "type",
                      "value": "message.failed"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "description": "Lists past events of one type, newest first, so a tool can poll for new ones. Needs inbox:read, and also contacts:read for contact.opted_out. Read-only; webhooks push the same events without polling.\n\nPermission: inbox:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"event\",\n      \"id\": \"evt_6f1e2d3c4b5a49788796a5b4c3d2e1f0\",\n      \"type\": \"message.failed\",\n      \"created_at\": \"2026-10-25T09:41:07.412Z\",\n      \"data\": {\n        \"contact_id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n        \"channel\": \"whatsapp\"\n      }\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/events\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "newsletters",
      "description": "Newsletters: drafts, previews, sending and tests.",
      "item": [
        {
          "name": "List newsletters",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/newsletters?status=draft&limit=2",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "newsletters"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "draft"
                },
                {
                  "key": "limit",
                  "value": "2"
                }
              ]
            },
            "description": "Lists the newsletters of the account, newest first. Use it to find a newsletter ID and its state. Returns newsletters with status, audience, template state and whether they are ready to send.\n\nPermission: newsletters:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/newsletters?status=draft&limit=2",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "newsletters"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "draft"
                    },
                    {
                      "key": "limit",
                      "value": "2"
                    }
                  ]
                },
                "description": "Lists the newsletters of the account, newest first. Use it to find a newsletter ID and its state. Returns newsletters with status, audience, template state and whether they are ready to send.\n\nPermission: newsletters:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"newsletter\",\n      \"id\": \"nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b\",\n      \"title\": \"Autumn menu\",\n      \"text\": \"Hi {{first_name}}, our autumn menu is here. Book a table for this week.\",\n      \"language\": \"en\",\n      \"button\": {\n        \"type\": \"url\",\n        \"text\": \"See the menu\",\n        \"url\": \"https://example.com/menu\"\n      },\n      \"audience\": {\n        \"tags\": [\n          \"regular customer\"\n        ],\n        \"mode\": \"any\",\n        \"sources\": []\n      },\n      \"status\": \"draft\",\n      \"template_id\": \"tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n      \"template_status\": \"approved\",\n      \"ready_to_send\": true,\n      \"not_ready_reason\": null,\n      \"recipients\": 412,\n      \"scheduled_at\": null,\n      \"sent_at\": null,\n      \"created_at\": \"2026-10-25T09:41:07Z\",\n      \"updated_at\": \"2026-10-25T09:41:07Z\"\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/newsletters\"\n}"
            }
          ]
        },
        {
          "name": "Get newsletter",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/newsletters/nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "newsletters",
                "nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b"
              ]
            },
            "description": "Returns one newsletter with its text, audience, template state and send state. Use it to follow a send: the status moves from sending to completed. Read-only.\n\nPermission: newsletters:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/newsletters/nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "newsletters",
                    "nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b"
                  ]
                },
                "description": "Returns one newsletter with its text, audience, template state and send state. Use it to follow a send: the status moves from sending to completed. Read-only.\n\nPermission: newsletters:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"newsletter\",\n  \"id\": \"nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b\",\n  \"title\": \"Autumn menu\",\n  \"text\": \"Hi {{first_name}}, our autumn menu is here. Book a table for this week.\",\n  \"language\": \"en\",\n  \"button\": {\n    \"type\": \"url\",\n    \"text\": \"See the menu\",\n    \"url\": \"https://example.com/menu\"\n  },\n  \"audience\": {\n    \"tags\": [\n      \"regular customer\"\n    ],\n    \"mode\": \"any\",\n    \"sources\": []\n  },\n  \"status\": \"draft\",\n  \"template_id\": \"tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"template_status\": \"approved\",\n  \"ready_to_send\": true,\n  \"not_ready_reason\": null,\n  \"recipients\": 412,\n  \"scheduled_at\": null,\n  \"sent_at\": null,\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"updated_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Create newsletter",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/newsletters",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "newsletters"
              ]
            },
            "description": "Creates a newsletter as a draft with its own template. Nothing is sent: submit the template with create_template_submissions, then call send_newsletter. Needs an idempotency key and returns the newsletter.\n\nPermission: newsletters:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"Autumn menu\",\n  \"text\": \"Hi {{first_name}}, our autumn menu is here. Book a table for this week.\",\n  \"audience\": {\n    \"tags\": [\n      \"regular customer\"\n    ]\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/newsletters",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "newsletters"
                  ]
                },
                "description": "Creates a newsletter as a draft with its own template. Nothing is sent: submit the template with create_template_submissions, then call send_newsletter. Needs an idempotency key and returns the newsletter.\n\nPermission: newsletters:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"Autumn menu\",\n  \"text\": \"Hi {{first_name}}, our autumn menu is here. Book a table for this week.\",\n  \"audience\": {\n    \"tags\": [\n      \"regular customer\"\n    ]\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"newsletter\",\n  \"id\": \"nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b\",\n  \"title\": \"Autumn menu\",\n  \"text\": \"Hi {{first_name}}, our autumn menu is here. Book a table for this week.\",\n  \"language\": \"en\",\n  \"button\": {\n    \"type\": \"url\",\n    \"text\": \"See the menu\",\n    \"url\": \"https://example.com/menu\"\n  },\n  \"audience\": {\n    \"tags\": [\n      \"regular customer\"\n    ],\n    \"mode\": \"any\",\n    \"sources\": []\n  },\n  \"status\": \"draft\",\n  \"template_id\": \"tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"template_status\": \"draft\",\n  \"ready_to_send\": false,\n  \"not_ready_reason\": \"template_not_approved\",\n  \"recipients\": 412,\n  \"scheduled_at\": null,\n  \"sent_at\": null,\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"updated_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Update newsletter",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/newsletters/nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "newsletters",
                "nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b"
              ]
            },
            "description": "Changes the title, text, language, button or audience of a newsletter draft. Scheduled or sent newsletters are locked: cancel the schedule first with control_newsletter. Changing the text creates a new template version that needs approval.\n\nPermission: newsletters:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"audience\": {\n    \"tags\": [\n      \"regular customer\"\n    ],\n    \"mode\": \"any\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/newsletters/nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "newsletters",
                    "nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b"
                  ]
                },
                "description": "Changes the title, text, language, button or audience of a newsletter draft. Scheduled or sent newsletters are locked: cancel the schedule first with control_newsletter. Changing the text creates a new template version that needs approval.\n\nPermission: newsletters:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"audience\": {\n    \"tags\": [\n      \"regular customer\"\n    ],\n    \"mode\": \"any\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"newsletter\",\n  \"id\": \"nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b\",\n  \"title\": \"Autumn menu\",\n  \"text\": \"Hi {{first_name}}, our autumn menu is here. Book a table for this week.\",\n  \"language\": \"en\",\n  \"button\": {\n    \"type\": \"url\",\n    \"text\": \"See the menu\",\n    \"url\": \"https://example.com/menu\"\n  },\n  \"audience\": {\n    \"tags\": [\n      \"regular customer\"\n    ],\n    \"mode\": \"any\",\n    \"sources\": []\n  },\n  \"status\": \"draft\",\n  \"template_id\": \"tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"template_status\": \"approved\",\n  \"ready_to_send\": true,\n  \"not_ready_reason\": null,\n  \"recipients\": 412,\n  \"scheduled_at\": null,\n  \"sent_at\": null,\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"updated_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Preview newsletter send",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/newsletters/nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b/send-preview?when=now",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "newsletters",
                "nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b",
                "send-preview"
              ],
              "query": [
                {
                  "key": "when",
                  "value": "now"
                }
              ]
            },
            "description": "Calculates who would receive a newsletter, now or at a given time, and whether sending would be accepted. Nothing is sent and nothing is saved. Use it before send_newsletter.\n\nPermission: newsletters:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/newsletters/nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b/send-preview?when=now",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "newsletters",
                    "nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b",
                    "send-preview"
                  ],
                  "query": [
                    {
                      "key": "when",
                      "value": "now"
                    }
                  ]
                },
                "description": "Calculates who would receive a newsletter, now or at a given time, and whether sending would be accepted. Nothing is sent and nothing is saved. Use it before send_newsletter.\n\nPermission: newsletters:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"newsletter_send_preview\",\n  \"newsletter_id\": \"nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b\",\n  \"when\": \"now\",\n  \"can_send\": true,\n  \"blocked_by\": [],\n  \"recipients\": 412,\n  \"audience_total\": 938,\n  \"excluded\": {\n    \"opted_out\": 12,\n    \"not_confirmed\": 30,\n    \"suppressed\": 2,\n    \"no_phone\": 3,\n    \"outside_audience\": 524\n  },\n  \"estimated_days\": 1,\n  \"daily_limit\": 1000,\n  \"text\": \"Hi {{first_name}}, our autumn menu is here. Book a table for this week.\"\n}"
            }
          ]
        },
        {
          "name": "Send newsletter",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/newsletters/nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b/send",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "newsletters",
                "nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b",
                "send"
              ]
            },
            "description": "Sends a newsletter now, or schedules it, to every contact with a confirmed opt-in inside its audience; unsubscribed contacts never receive it. Needs an approved template and an idempotency key. Sending cannot be undone once started.\n\nPermission: newsletters:send. Risk: send.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"when\": \"now\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/newsletters/nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b/send",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "newsletters",
                    "nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b",
                    "send"
                  ]
                },
                "description": "Sends a newsletter now, or schedules it, to every contact with a confirmed opt-in inside its audience; unsubscribed contacts never receive it. Needs an approved template and an idempotency key. Sending cannot be undone once started.\n\nPermission: newsletters:send. Risk: send.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"when\": \"now\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"newsletter_send\",\n  \"id\": \"nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b\",\n  \"newsletter_id\": \"nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b\",\n  \"status\": \"sending\",\n  \"recipients\": 412,\n  \"scheduled_at\": null\n}"
            }
          ]
        },
        {
          "name": "Control newsletter send",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/newsletters/nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b/control",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "newsletters",
                "nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b",
                "control"
              ]
            },
            "description": "Cancels a scheduled newsletter, pauses a running one or resumes a paused or failed one. Messages already delivered stay delivered, and resuming reaches only contacts who did not get it yet. Needs an idempotency key.\n\nPermission: newsletters:send. Risk: send.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"action\": \"cancel\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/newsletters/nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b/control",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "newsletters",
                    "nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b",
                    "control"
                  ]
                },
                "description": "Cancels a scheduled newsletter, pauses a running one or resumes a paused or failed one. Messages already delivered stay delivered, and resuming reaches only contacts who did not get it yet. Needs an idempotency key.\n\nPermission: newsletters:send. Risk: send.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"action\": \"cancel\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"newsletter\",\n  \"id\": \"nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b\",\n  \"title\": \"Autumn menu\",\n  \"text\": \"Hi {{first_name}}, our autumn menu is here. Book a table for this week.\",\n  \"language\": \"en\",\n  \"button\": {\n    \"type\": \"url\",\n    \"text\": \"See the menu\",\n    \"url\": \"https://example.com/menu\"\n  },\n  \"audience\": {\n    \"tags\": [\n      \"regular customer\"\n    ],\n    \"mode\": \"any\",\n    \"sources\": []\n  },\n  \"status\": \"draft\",\n  \"template_id\": \"tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"template_status\": \"approved\",\n  \"ready_to_send\": true,\n  \"not_ready_reason\": null,\n  \"recipients\": 412,\n  \"scheduled_at\": null,\n  \"sent_at\": null,\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"updated_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Send test newsletter",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/newsletters/nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b/test-send",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "newsletters",
                "nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b",
                "test-send"
              ]
            },
            "description": "Sends one test message of a newsletter to a single phone number, never to a contact who unsubscribed. Needs an approved template and an idempotency key. Leave out 'to' to use the test number of the account.\n\nPermission: newsletters:test. Risk: send.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"to\": \"+4915112345678\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/newsletters/nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b/test-send",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "newsletters",
                    "nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b",
                    "test-send"
                  ]
                },
                "description": "Sends one test message of a newsletter to a single phone number, never to a contact who unsubscribed. Needs an approved template and an idempotency key. Leave out 'to' to use the test number of the account.\n\nPermission: newsletters:test. Risk: send.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"to\": \"+4915112345678\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"newsletter_test_send\",\n  \"newsletter_id\": \"nwl_3c9e1f7a5b2d4e8f9a0b1c2d3e4f5a6b\",\n  \"to\": \"+4915112345678\",\n  \"status\": \"handed_to_whatsapp\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "sends",
      "description": "Single messages (free text inside the 24-hour window, or approved templates) and their status.",
      "item": [
        {
          "name": "Send text message",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/sends",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "sends"
              ]
            },
            "description": "Sends a free text message to one contact by WhatsApp as a reply. It only works while the 24-hour window of the contact is open; otherwise it fails with window_closed and a template must be used. Needs an Idempotency-Key header.\n\nPermission: sends:create. Risk: send.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"text\",\n  \"contact_id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"text\": \"Yes, a table is free on Friday at 7 pm.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/sends",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "sends"
                  ]
                },
                "description": "Sends a free text message to one contact by WhatsApp as a reply. It only works while the 24-hour window of the contact is open; otherwise it fails with window_closed and a template must be used. Needs an Idempotency-Key header.\n\nPermission: sends:create. Risk: send.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"text\",\n  \"contact_id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"text\": \"Yes, a table is free on Friday at 7 pm.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"send\",\n  \"id\": \"snd_3c4d5e6f7a8b49c0d1e2f3a4b5c6d7e8\",\n  \"type\": \"text\",\n  \"status\": \"sent\",\n  \"contact_id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"template_id\": null,\n  \"provider_message_id\": \"wamid.HBgLNDkxNTExMjM0NTY3OA\",\n  \"text\": \"Yes, a table is free on Friday at 7 pm.\",\n  \"failure_reason\": null,\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"sent_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Send template message",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/sends",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "sends"
              ]
            },
            "description": "Sends an approved template to one contact with a confirmed opt-in by WhatsApp, also outside the 24-hour window. Fills the template variables from the contact and from variables. Needs an Idempotency-Key header.\n\nPermission: sends:create. Risk: send.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"template\",\n  \"contact_id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"template_id\": \"tpl_2b3c4d5e6f7a48b9c0d1e2f3a4b5c6d7\",\n  \"variables\": {\n    \"weekday\": \"Friday\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/sends",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "sends"
                  ]
                },
                "description": "Sends an approved template to one contact with a confirmed opt-in by WhatsApp, also outside the 24-hour window. Fills the template variables from the contact and from variables. Needs an Idempotency-Key header.\n\nPermission: sends:create. Risk: send.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"template\",\n  \"contact_id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"template_id\": \"tpl_2b3c4d5e6f7a48b9c0d1e2f3a4b5c6d7\",\n  \"variables\": {\n    \"weekday\": \"Friday\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"send\",\n  \"id\": \"snd_3c4d5e6f7a8b49c0d1e2f3a4b5c6d7e8\",\n  \"type\": \"template\",\n  \"status\": \"queued\",\n  \"contact_id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"template_id\": \"tpl_2b3c4d5e6f7a48b9c0d1e2f3a4b5c6d7\",\n  \"provider_message_id\": null,\n  \"text\": \"Hi Mia, your table is booked for Friday at 7 pm.\",\n  \"failure_reason\": null,\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"sent_at\": null\n}"
            }
          ]
        },
        {
          "name": "Get send",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/sends/snd_3c4d5e6f7a8b49c0d1e2f3a4b5c6d7e8",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "sends",
                "snd_3c4d5e6f7a8b49c0d1e2f3a4b5c6d7e8"
              ]
            },
            "description": "Returns the state of one single send: queued, sent, delivered, read, failed or skipped, with the reason if it failed. Use the id from send_text_message or send_template_message. Read-only.\n\nPermission: sends:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/sends/snd_3c4d5e6f7a8b49c0d1e2f3a4b5c6d7e8",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "sends",
                    "snd_3c4d5e6f7a8b49c0d1e2f3a4b5c6d7e8"
                  ]
                },
                "description": "Returns the state of one single send: queued, sent, delivered, read, failed or skipped, with the reason if it failed. Use the id from send_text_message or send_template_message. Read-only.\n\nPermission: sends:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"send\",\n  \"id\": \"snd_3c4d5e6f7a8b49c0d1e2f3a4b5c6d7e8\",\n  \"type\": \"template\",\n  \"status\": \"delivered\",\n  \"contact_id\": \"con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"template_id\": \"tpl_2b3c4d5e6f7a48b9c0d1e2f3a4b5c6d7\",\n  \"provider_message_id\": \"wamid.HBgLNDkxNTExMjM0NTY3OA\",\n  \"text\": \"Hi Mia, your table is booked for Friday at 7 pm.\",\n  \"failure_reason\": null,\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"sent_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "stats",
      "description": "Statistics without personal data.",
      "item": [
        {
          "name": "Get statistics",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/stats?range=7d",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "stats"
              ],
              "query": [
                {
                  "key": "range",
                  "value": "7d"
                }
              ]
            },
            "description": "Returns send, delivery and read numbers, new contacts and the top sends for 7, 30 or 90 days. Contains no personal data. Read-only.\n\nPermission: stats:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/stats?range=7d",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "stats"
                  ],
                  "query": [
                    {
                      "key": "range",
                      "value": "7d"
                    }
                  ]
                },
                "description": "Returns send, delivery and read numbers, new contacts and the top sends for 7, 30 or 90 days. Contains no personal data. Read-only.\n\nPermission: stats:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"stats\",\n  \"range\": \"7d\",\n  \"kpis\": {\n    \"sent\": 120,\n    \"delivered\": 118,\n    \"read_rate\": 62,\n    \"click_rate\": 8,\n    \"clicked\": 9,\n    \"clicks_measurable\": true,\n    \"contacts_total\": 340,\n    \"contacts_new\": 12,\n    \"unread_inbound\": 2\n  },\n  \"timeline\": [\n    {\n      \"date\": \"2026-10-24\",\n      \"sent\": 20,\n      \"delivered\": 20\n    }\n  ],\n  \"status_donut\": {\n    \"delivered\": 44,\n    \"read\": 74,\n    \"pending\": 2,\n    \"failed\": 0\n  },\n  \"top_sends\": [\n    {\n      \"id\": \"nwl_8a1b2c3d4e5f46a7b8c9d0e1f2a3b4c5\",\n      \"name\": \"October news\",\n      \"channel\": \"whatsapp\",\n      \"sent\": 80,\n      \"delivered\": 79,\n      \"read\": 50\n    }\n  ]\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "team",
      "description": "Team members (read only).",
      "item": [
        {
          "name": "List team members",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/team-members?limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "team-members"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            },
            "description": "Lists the members of the team of the account with name, role and status, oldest first. Read-only. Inviting people, changing roles and removing members are only possible in the app.\n\nPermission: team:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/team-members?limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "team-members"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "description": "Lists the members of the team of the account with name, role and status, oldest first. Read-only. Inviting people, changing roles and removing members are only possible in the app.\n\nPermission: team:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"team_member\",\n      \"id\": \"mem_3b9a7c1d5e2f48a6b0c4d8e2f6a0b4c8\",\n      \"name\": \"Mia Muster\",\n      \"role\": \"admin\",\n      \"status\": \"active\",\n      \"joined_at\": \"2026-10-01T08:00:00Z\"\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/team-members\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "templates",
      "description": "WhatsApp message templates.",
      "item": [
        {
          "name": "List templates",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/templates?status=approved&limit=2",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "templates"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "approved"
                },
                {
                  "key": "limit",
                  "value": "2"
                }
              ]
            },
            "description": "Lists the WhatsApp message templates of the account, newest first. Use it to find a template ID and to see which templates WhatsApp has approved. Returns templates with status, variables and whether they can be sent.\n\nPermission: templates:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/templates?status=approved&limit=2",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "templates"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "approved"
                    },
                    {
                      "key": "limit",
                      "value": "2"
                    }
                  ]
                },
                "description": "Lists the WhatsApp message templates of the account, newest first. Use it to find a template ID and to see which templates WhatsApp has approved. Returns templates with status, variables and whether they can be sent.\n\nPermission: templates:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"template\",\n      \"id\": \"tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n      \"name\": \"Autumn menu\",\n      \"channel\": \"whatsapp\",\n      \"purpose\": \"marketing\",\n      \"language\": \"en\",\n      \"text\": \"Hi {{first_name}}, our autumn menu is here. Book a table for this week.\",\n      \"footer\": \"Reply STOP to unsubscribe\",\n      \"buttons\": [\n        {\n          \"type\": \"quick_reply\",\n          \"text\": \"Book a table\",\n          \"url\": null\n        }\n      ],\n      \"status\": \"approved\",\n      \"sendable\": true,\n      \"variables\": [\n        \"first_name\"\n      ],\n      \"settable_variables\": [],\n      \"submittable\": false,\n      \"issues\": [],\n      \"rejection_reason\": null,\n      \"created_at\": \"2026-10-25T09:41:07Z\",\n      \"updated_at\": \"2026-10-25T09:41:07Z\"\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/templates\"\n}"
            }
          ]
        },
        {
          "name": "Get template",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/templates/tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "templates",
                "tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
              ]
            },
            "description": "Returns one WhatsApp message template with its text, buttons, approval state and the rule violations that block a submission. Use it after list_templates. Read-only.\n\nPermission: templates:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/templates/tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "templates",
                    "tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
                  ]
                },
                "description": "Returns one WhatsApp message template with its text, buttons, approval state and the rule violations that block a submission. Use it after list_templates. Read-only.\n\nPermission: templates:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"template\",\n  \"id\": \"tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"name\": \"Autumn menu\",\n  \"channel\": \"whatsapp\",\n  \"purpose\": \"marketing\",\n  \"language\": \"en\",\n  \"text\": \"Hi {{first_name}}, our autumn menu is here. Book a table for this week.\",\n  \"footer\": \"Reply STOP to unsubscribe\",\n  \"buttons\": [\n    {\n      \"type\": \"quick_reply\",\n      \"text\": \"Book a table\",\n      \"url\": null\n    }\n  ],\n  \"status\": \"draft\",\n  \"sendable\": false,\n  \"variables\": [\n    \"first_name\"\n  ],\n  \"settable_variables\": [],\n  \"submittable\": true,\n  \"issues\": [],\n  \"rejection_reason\": null,\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"updated_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Create template",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/templates",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "templates"
              ]
            },
            "description": "Creates a WhatsApp message template as a draft. Nothing goes to WhatsApp until you submit it with create_template_submissions. Needs an idempotency key and returns the template.\n\nPermission: templates:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Autumn menu\",\n  \"text\": \"Hi {{first_name}}, our autumn menu is here. Book a table for this week.\",\n  \"language\": \"en\",\n  \"buttons\": [\n    {\n      \"type\": \"quick_reply\",\n      \"text\": \"Book a table\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/templates",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "templates"
                  ]
                },
                "description": "Creates a WhatsApp message template as a draft. Nothing goes to WhatsApp until you submit it with create_template_submissions. Needs an idempotency key and returns the template.\n\nPermission: templates:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Autumn menu\",\n  \"text\": \"Hi {{first_name}}, our autumn menu is here. Book a table for this week.\",\n  \"language\": \"en\",\n  \"buttons\": [\n    {\n      \"type\": \"quick_reply\",\n      \"text\": \"Book a table\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"template\",\n  \"id\": \"tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"name\": \"Autumn menu\",\n  \"channel\": \"whatsapp\",\n  \"purpose\": \"marketing\",\n  \"language\": \"en\",\n  \"text\": \"Hi {{first_name}}, our autumn menu is here. Book a table for this week.\",\n  \"footer\": \"Reply STOP to unsubscribe\",\n  \"buttons\": [\n    {\n      \"type\": \"quick_reply\",\n      \"text\": \"Book a table\",\n      \"url\": null\n    }\n  ],\n  \"status\": \"draft\",\n  \"sendable\": false,\n  \"variables\": [\n    \"first_name\"\n  ],\n  \"settable_variables\": [],\n  \"submittable\": true,\n  \"issues\": [],\n  \"rejection_reason\": null,\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"updated_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Update template",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/templates/tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "templates",
                "tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
              ]
            },
            "description": "Changes the text, language, footer or buttons of a template. An approved template keeps sending its approved version until the new version is submitted and approved. Returns the template.\n\nPermission: templates:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"footer\": \"Reply STOP to unsubscribe\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/templates/tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "templates",
                    "tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
                  ]
                },
                "description": "Changes the text, language, footer or buttons of a template. An approved template keeps sending its approved version until the new version is submitted and approved. Returns the template.\n\nPermission: templates:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"footer\": \"Reply STOP to unsubscribe\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"template\",\n  \"id\": \"tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"name\": \"Autumn menu\",\n  \"channel\": \"whatsapp\",\n  \"purpose\": \"marketing\",\n  \"language\": \"en\",\n  \"text\": \"Hi {{first_name}}, our autumn menu is here. Book a table for this week.\",\n  \"footer\": \"Reply STOP to unsubscribe\",\n  \"buttons\": [\n    {\n      \"type\": \"quick_reply\",\n      \"text\": \"Book a table\",\n      \"url\": null\n    }\n  ],\n  \"status\": \"draft\",\n  \"sendable\": false,\n  \"variables\": [\n    \"first_name\"\n  ],\n  \"settable_variables\": [],\n  \"submittable\": true,\n  \"issues\": [],\n  \"rejection_reason\": null,\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"updated_at\": \"2026-10-25T09:41:07Z\"\n}"
            }
          ]
        },
        {
          "name": "Submit templates",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/template-submissions",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "template-submissions"
              ]
            },
            "description": "Submits template drafts to WhatsApp for approval. Call without plan_id for a preview of what would be submitted, then again with the plan_id. Sends nothing to contacts; WhatsApp decides within a few minutes to 24 hours.\n\nPermission: templates:submit. Risk: send.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"template_ids\": [\n    \"tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n    \"tpl_5d2e9b7c1a3f4e6d8c0b2a4f6e8d1c3b\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/template-submissions",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "template-submissions"
                  ]
                },
                "description": "Submits template drafts to WhatsApp for approval. Call without plan_id for a preview of what would be submitted, then again with the plan_id. Sends nothing to contacts; WhatsApp decides within a few minutes to 24 hours.\n\nPermission: templates:submit. Risk: send.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"template_ids\": [\n    \"tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n    \"tpl_5d2e9b7c1a3f4e6d8c0b2a4f6e8d1c3b\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"template_submission_plan\",\n  \"plan_id\": \"pln_9a8b7c6d5e4f43a2b1c0d9e8f7a6b5c4\",\n  \"expires_at\": \"2026-10-25T09:51:07Z\",\n  \"templates\": [\n    {\n      \"template_id\": \"tpl_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n      \"name\": \"Autumn menu\",\n      \"status\": \"draft\",\n      \"outcome\": \"would_submit\",\n      \"issues\": [],\n      \"error_code\": null\n    },\n    {\n      \"template_id\": \"tpl_5d2e9b7c1a3f4e6d8c0b2a4f6e8d1c3b\",\n      \"name\": \"Weekend offer\",\n      \"status\": \"draft\",\n      \"outcome\": \"blocked\",\n      \"issues\": [\n        \"The text must not end with a placeholder. Add something after it, e.g. a punctuation mark.\"\n      ],\n      \"error_code\": null\n    }\n  ],\n  \"submitted_at\": null\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "webhooks",
      "description": "Outgoing webhook endpoints, deliveries and tests.",
      "item": [
        {
          "name": "Create webhook endpoint",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/webhook-endpoints",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhook-endpoints"
              ]
            },
            "description": "Creates an outgoing webhook endpoint that receives the chosen events at an HTTPS address. Sends no messages to contacts. Returns the endpoint with its signing secret, shown only once; use it to verify every delivery.\n\nPermission: webhooks:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com/hooks/smartchat\",\n  \"description\": \"Quickstart\",\n  \"enabled_events\": [\n    \"webhook.test\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/webhook-endpoints",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "webhook-endpoints"
                  ]
                },
                "description": "Creates an outgoing webhook endpoint that receives the chosen events at an HTTPS address. Sends no messages to contacts. Returns the endpoint with its signing secret, shown only once; use it to verify every delivery.\n\nPermission: webhooks:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"url\": \"https://example.com/hooks/smartchat\",\n  \"description\": \"Quickstart\",\n  \"enabled_events\": [\n    \"webhook.test\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"webhook_endpoint\",\n  \"id\": \"whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"url\": \"https://example.com/hooks/smartchat\",\n  \"description\": \"Quickstart\",\n  \"enabled_events\": [\n    \"webhook.test\"\n  ],\n  \"status\": \"active\",\n  \"disabled_reason\": null,\n  \"secret_hint\": \"whsec_...x9Qa\",\n  \"consecutive_failures\": 0,\n  \"last_success_at\": \"2026-10-25T09:45:00Z\",\n  \"last_failure_at\": null,\n  \"secret_previous_expires_at\": null,\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"updated_at\": \"2026-10-25T09:45:00Z\",\n  \"secret\": \"whsec_3Zk0sQ1mYv9bT7cWl2nR8xJdE4fGhUaPoIyKtVq5LwM\"\n}"
            }
          ]
        },
        {
          "name": "List webhook endpoints",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/webhook-endpoints?limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhook-endpoints"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            },
            "description": "Lists the outgoing webhook endpoints of the account, newest first. Does not show signing secrets, only the last 4 characters. Use get_webhook_endpoint for one endpoint or list_webhook_deliveries for its log.\n\nPermission: webhooks:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/webhook-endpoints?limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "webhook-endpoints"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "description": "Lists the outgoing webhook endpoints of the account, newest first. Does not show signing secrets, only the last 4 characters. Use get_webhook_endpoint for one endpoint or list_webhook_deliveries for its log.\n\nPermission: webhooks:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"webhook_endpoint\",\n      \"id\": \"whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n      \"url\": \"https://example.com/hooks/smartchat\",\n      \"description\": \"Order system\",\n      \"enabled_events\": [\n        \"contact.created\",\n        \"message.received\"\n      ],\n      \"status\": \"active\",\n      \"disabled_reason\": null,\n      \"secret_hint\": \"whsec_...x9Qa\",\n      \"consecutive_failures\": 0,\n      \"last_success_at\": \"2026-10-25T09:45:00Z\",\n      \"last_failure_at\": null,\n      \"secret_previous_expires_at\": null,\n      \"created_at\": \"2026-10-25T09:41:07Z\",\n      \"updated_at\": \"2026-10-25T09:45:00Z\"\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/webhook-endpoints\"\n}"
            }
          ]
        },
        {
          "name": "Get webhook endpoint",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhook-endpoints",
                "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
              ]
            },
            "description": "Reads one outgoing webhook endpoint with its status and failure counter. Does not show the signing secret. Use list_webhook_deliveries to see single deliveries.\n\nPermission: webhooks:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "webhook-endpoints",
                    "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
                  ]
                },
                "description": "Reads one outgoing webhook endpoint with its status and failure counter. Does not show the signing secret. Use list_webhook_deliveries to see single deliveries.\n\nPermission: webhooks:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"webhook_endpoint\",\n  \"id\": \"whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"url\": \"https://example.com/hooks/smartchat\",\n  \"description\": \"Order system\",\n  \"enabled_events\": [\n    \"contact.created\",\n    \"message.received\"\n  ],\n  \"status\": \"active\",\n  \"disabled_reason\": null,\n  \"secret_hint\": \"whsec_...x9Qa\",\n  \"consecutive_failures\": 0,\n  \"last_success_at\": \"2026-10-25T09:45:00Z\",\n  \"last_failure_at\": null,\n  \"secret_previous_expires_at\": null,\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"updated_at\": \"2026-10-25T09:45:00Z\"\n}"
            }
          ]
        },
        {
          "name": "Update webhook endpoint",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhook-endpoints",
                "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
              ]
            },
            "description": "Changes the address, the note or the subscribed events of a webhook endpoint. Sends no messages and keeps the signing secret. Send only the fields that change.\n\nPermission: webhooks:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"description\": \"Order system (new)\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "webhook-endpoints",
                    "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
                  ]
                },
                "description": "Changes the address, the note or the subscribed events of a webhook endpoint. Sends no messages and keeps the signing secret. Send only the fields that change.\n\nPermission: webhooks:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"description\": \"Order system (new)\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"webhook_endpoint\",\n  \"id\": \"whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"url\": \"https://example.com/hooks/smartchat\",\n  \"description\": \"Order system (new)\",\n  \"enabled_events\": [\n    \"contact.created\",\n    \"message.received\"\n  ],\n  \"status\": \"active\",\n  \"disabled_reason\": null,\n  \"secret_hint\": \"whsec_...x9Qa\",\n  \"consecutive_failures\": 0,\n  \"last_success_at\": \"2026-10-25T09:45:00Z\",\n  \"last_failure_at\": null,\n  \"secret_previous_expires_at\": null,\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"updated_at\": \"2026-10-25T09:45:00Z\"\n}"
            }
          ]
        },
        {
          "name": "Unsubscribe webhook endpoint",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhook-endpoints",
                "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
              ]
            },
            "description": "Removes a webhook endpoint and its delivery log, so no more events are sent to it. This is the only deletion allowed with an API key in this area. Sends no messages to contacts.\n\nPermission: webhooks:write. Risk: write."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "webhook-endpoints",
                    "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234"
                  ]
                },
                "description": "Removes a webhook endpoint and its delivery log, so no more events are sent to it. This is the only deletion allowed with an API key in this area. Sends no messages to contacts.\n\nPermission: webhooks:write. Risk: write."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"webhook_endpoint\",\n  \"id\": \"whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"deleted\": true\n}"
            }
          ]
        },
        {
          "name": "Rotate webhook secret",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/rotate-secret",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhook-endpoints",
                "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                "rotate-secret"
              ]
            },
            "description": "Creates a new signing secret for an endpoint. During grace_hours (0 to 72, default 24) every delivery carries two signatures, so you can switch without losing events. Returns the new secret, shown only once.\n\nPermission: webhooks:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"grace_hours\": 24\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/rotate-secret",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "webhook-endpoints",
                    "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                    "rotate-secret"
                  ]
                },
                "description": "Creates a new signing secret for an endpoint. During grace_hours (0 to 72, default 24) every delivery carries two signatures, so you can switch without losing events. Returns the new secret, shown only once.\n\nPermission: webhooks:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"grace_hours\": 24\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"webhook_endpoint\",\n  \"id\": \"whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"url\": \"https://example.com/hooks/smartchat\",\n  \"description\": \"Order system\",\n  \"enabled_events\": [\n    \"contact.created\",\n    \"message.received\"\n  ],\n  \"status\": \"active\",\n  \"disabled_reason\": null,\n  \"secret_hint\": \"whsec_...Lm4Z\",\n  \"consecutive_failures\": 0,\n  \"last_success_at\": \"2026-10-25T09:45:00Z\",\n  \"last_failure_at\": null,\n  \"secret_previous_expires_at\": \"2026-10-26T09:50:00Z\",\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"updated_at\": \"2026-10-25T09:45:00Z\",\n  \"secret\": \"whsec_Qe7Rt2YuI9oP0aSdFgHjKlZxCvBnM3wE5rT8yUiO1pA\"\n}"
            }
          ]
        },
        {
          "name": "Enable webhook endpoint",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/enable",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhook-endpoints",
                "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                "enable"
              ]
            },
            "description": "Switches a paused or disabled webhook endpoint back to active and resets its failure counter. With replay_since it also queues the events of that time again (up to 7 days). Sends no messages.\n\nPermission: webhooks:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"replay_since\": \"2026-10-24T00:00:00Z\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/enable",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "webhook-endpoints",
                    "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                    "enable"
                  ]
                },
                "description": "Switches a paused or disabled webhook endpoint back to active and resets its failure counter. With replay_since it also queues the events of that time again (up to 7 days). Sends no messages.\n\nPermission: webhooks:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"replay_since\": \"2026-10-24T00:00:00Z\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"webhook_endpoint\",\n  \"id\": \"whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"url\": \"https://example.com/hooks/smartchat\",\n  \"description\": \"Order system\",\n  \"enabled_events\": [\n    \"contact.created\",\n    \"message.received\"\n  ],\n  \"status\": \"active\",\n  \"disabled_reason\": null,\n  \"secret_hint\": \"whsec_...x9Qa\",\n  \"consecutive_failures\": 0,\n  \"last_success_at\": \"2026-10-25T09:45:00Z\",\n  \"last_failure_at\": null,\n  \"secret_previous_expires_at\": null,\n  \"created_at\": \"2026-10-25T09:41:07Z\",\n  \"updated_at\": \"2026-10-25T09:45:00Z\",\n  \"replay\": {\n    \"queued\": 12,\n    \"truncated\": false\n  }\n}"
            }
          ]
        },
        {
          "name": "Test webhook endpoint",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/test",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhook-endpoints",
                "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                "test"
              ]
            },
            "description": "Sends one signed webhook.test event to the endpoint and waits for the answer. Sends no messages to contacts and does not change the endpoint health. Returns the HTTP status and the duration.\n\nPermission: webhooks:write. Risk: write."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/test",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "webhook-endpoints",
                    "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                    "test"
                  ]
                },
                "description": "Sends one signed webhook.test event to the endpoint and waits for the answer. Sends no messages to contacts and does not change the endpoint health. Returns the HTTP status and the duration.\n\nPermission: webhooks:write. Risk: write."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"webhook_test_result\",\n  \"endpoint_id\": \"whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"delivery_id\": \"whd_7a1b2c3d4e5f40718293a4b5c6d7e8f9\",\n  \"delivered\": true,\n  \"http_status\": 200,\n  \"duration_ms\": 182,\n  \"error\": null\n}"
            }
          ]
        },
        {
          "name": "Replay webhook events",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Unique key for this operation."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/replay",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhook-endpoints",
                "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                "replay"
              ]
            },
            "description": "Queues the events since a given time (at most 7 days back, at most 10000 events) for delivery to this endpoint again. Only events the endpoint subscribes to are queued. Requires an Idempotency-Key and sends no messages to contacts.\n\nPermission: webhooks:write. Risk: write.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"since\": \"2026-10-24T00:00:00Z\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "description": "Unique key for this operation."
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/replay",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "webhook-endpoints",
                    "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                    "replay"
                  ]
                },
                "description": "Queues the events since a given time (at most 7 days back, at most 10000 events) for delivery to this endpoint again. Only events the endpoint subscribes to are queued. Requires an Idempotency-Key and sends no messages to contacts.\n\nPermission: webhooks:write. Risk: write.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"since\": \"2026-10-24T00:00:00Z\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"webhook_replay\",\n  \"endpoint_id\": \"whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"since\": \"2026-10-24T00:00:00Z\",\n  \"queued\": 12,\n  \"truncated\": false\n}"
            }
          ]
        },
        {
          "name": "List webhook deliveries",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/deliveries?status=failed&limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhook-endpoints",
                "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                "deliveries"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "failed"
                },
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            },
            "description": "Lists the deliveries of one endpoint, newest first, kept for 30 days. Each entry shows the attempt count, status, HTTP status and a short error. Filter by status to find failures.\n\nPermission: webhooks:read. Risk: read."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/deliveries?status=failed&limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "webhook-endpoints",
                    "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
                    "deliveries"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "failed"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "description": "Lists the deliveries of one endpoint, newest first, kept for 30 days. Each entry shows the attempt count, status, HTTP status and a short error. Filter by status to find failures.\n\nPermission: webhooks:read. Risk: read."
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"list\",\n  \"data\": [\n    {\n      \"object\": \"webhook_delivery\",\n      \"id\": \"whd_7a1b2c3d4e5f40718293a4b5c6d7e8f9\",\n      \"endpoint_id\": \"whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n      \"event_id\": \"evt_0f8c1a2e4b7d4c3e9a5b6d7e8f905678\",\n      \"type\": \"contact.created\",\n      \"attempt\": 1,\n      \"status\": \"delivered\",\n      \"http_status\": 200,\n      \"error\": null,\n      \"duration_ms\": 182,\n      \"next_attempt_at\": null,\n      \"created_at\": \"2026-10-25T09:44:59Z\",\n      \"finished_at\": \"2026-10-25T09:45:00Z\"\n    }\n  ],\n  \"has_more\": false,\n  \"next_cursor\": null,\n  \"url\": \"/v1/webhook-endpoints/whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234/deliveries\"\n}"
            }
          ]
        },
        {
          "name": "Redeliver webhook delivery",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/webhook-deliveries/whd_7a1b2c3d4e5f40718293a4b5c6d7e8f9/redeliver",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "webhook-deliveries",
                "whd_7a1b2c3d4e5f40718293a4b5c6d7e8f9",
                "redeliver"
              ]
            },
            "description": "Queues the event of an earlier delivery for another delivery to the same endpoint, while the event is in the 30 day log and the endpoint is active. Sends no messages to contacts. Returns the new delivery.\n\nPermission: webhooks:write. Risk: write."
          },
          "response": [
            {
              "name": "Example response",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/webhook-deliveries/whd_7a1b2c3d4e5f40718293a4b5c6d7e8f9/redeliver",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "webhook-deliveries",
                    "whd_7a1b2c3d4e5f40718293a4b5c6d7e8f9",
                    "redeliver"
                  ]
                },
                "description": "Queues the event of an earlier delivery for another delivery to the same endpoint, while the event is in the 30 day log and the endpoint is active. Sends no messages to contacts. Returns the new delivery.\n\nPermission: webhooks:write. Risk: write."
              },
              "status": "OK",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"object\": \"webhook_delivery\",\n  \"id\": \"whd_9b8a7c6d5e4f43218293a4b5c6d7e8f0\",\n  \"endpoint_id\": \"whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234\",\n  \"event_id\": \"evt_0f8c1a2e4b7d4c3e9a5b6d7e8f905678\",\n  \"type\": \"contact.created\",\n  \"attempt\": 0,\n  \"status\": \"pending\",\n  \"http_status\": null,\n  \"error\": null,\n  \"duration_ms\": null,\n  \"next_attempt_at\": \"2026-10-25T09:50:00Z\",\n  \"created_at\": \"2026-10-25T09:44:59Z\",\n  \"finished_at\": null\n}"
            }
          ]
        }
      ]
    }
  ]
}
