{
    "info": {
        "name": "Threadwire API",
        "description": "Send and receive WhatsApp messages from your own system, through a WhatsApp number you link by QR code. Using the API means you agree to our [Terms of Service](https://threadwire.net/terms) and [Acceptable Use Policy](https://threadwire.net/acceptable-use).\n\nAn **instance** is one WhatsApp number linked to Threadwire. Requests name it by its ID: `instance_id` in a body or query, `{id}` in a path.\n\n## Send your first message\n\n**0. Open an account** at [/app/register](https://threadwire.net/app/register): a 7-day free trial, no card needed.\n\n**1. Link a number and get your key.** In your panel, click \"Add instance\" and scan the QR code with WhatsApp on the phone (Settings → Linked devices). Then make a key under **Developers → API keys → New key** (admins only), and copy the **Instance ID** from the instance's page. To link through the API instead, see [Linking an instance](https://threadwire.net/docs/guides/instances).\n\n**2. Send yourself a message.** First write \"hi\" to the instance from your own WhatsApp on another phone: its `chat_link` (\"Chat link\" on the Instances page) opens the chat. Then send to that phone. (Only one phone? Use the instance's own number as `to`.)\n\n```sh\ncurl https://threadwire.net/api/v1/messages \\\n  -H \"Authorization: Bearer YOUR_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"instance_id\": \"YOUR_INSTANCE_ID\", \"to\": \"YOUR_PHONE\", \"text\": \"Hello from Threadwire\"}'\n```\n\n`YOUR_PHONE` is that phone's number in international format, like `201012345678`: country code, no `+` needed, no leading 0. The answer comes at once:\n\n```json\n202 {\"data\": {\"id\": \"01K…\", \"status\": \"queued\", \"phone\": \"201012345678\", \"body\": \"Hello from Threadwire\", \"…\": \"…\"}}\n```\n\nYou wrote first, so this is a reply, and it arrives in seconds. A first message to someone who never wrote is the slowest kind: it waits its turn, is held from 22:00 to 08:00 in the instance's time, and uses one of a new instance's 10 new people a day. A wait there is normal: see [Waiting, errors and retries](https://threadwire.net/docs/guides/waiting).\n\nThe `status` moves to `sent`, `delivered` and `read`, or `failed` with the reason in `error`. Check it with `GET /v1/messages/{id}`, or get it by webhook.\n\n**3. Receive replies.** Under **Developers → Webhooks** (admins only), set your endpoint's URL. Every reply and status change is posted there as JSON:\n\n```json\n{\"id\": \"evt_01K…\", \"type\": \"message.received\", \"created_at\": \"2026-10-01T10:00:00+00:00\",\n \"data\": {\"id\": \"01K…\", \"instance_id\": \"01K…\", \"phone\": \"201012345678\", \"body\": \"Hi!\", \"…\": \"…\"}}\n```\n\nAnswer with any `2xx`. Every event is signed: [Webhooks and events](https://threadwire.net/docs/guides/webhooks) has a whole endpoint to copy. No public URL? Fetch the same events with `GET /v1/events`.\n\nFiles, voice notes, polls and the rest are fields on the same `POST /v1/messages`: see [Sending messages](https://threadwire.net/docs/guides/sending).\n\n## Authentication\n\nSend your API key as a bearer token on every request:\n\n```\nAuthorization: Bearer YOUR_API_KEY\n```\n\nMake one key per system, so each can be revoked on its own. A key can be full access, send-and-read or read-only, for one instance, and locked to your IP addresses: see [API keys](https://threadwire.net/docs/guides/instances#api-keys).\n\n## Answers and errors\n\nAnswers are JSON, with the result under `data`: `200` or `201` when done, `202` when a message is queued. An error has a `message` in plain words and a stable `code` for your program:\n\n```json\n422 {\"message\": \"The number must be in international format with its country code, like 201012345678.\",\n     \"code\": \"validation_failed\", \"errors\": {\"to\": [\"…\"]}}\n```\n\n| Status | `code` | What to do |\n|---|---|---|\n| `401` | `unauthenticated` | Check the `Authorization` header |\n| `403` | `key_not_allowed`, `ip_not_allowed`, `account_suspended`, `plan_limit`, `feature_not_included` | Read `message` |\n| `404` | `instance_not_found`, `message_not_found`, `chat_not_found`, `group_not_found`, `channel_not_found`, `broadcast_not_found`, `otp_not_found`, `status_not_found`, `not_found` | Check the id |\n| `409` | `not_connected`, `link_refused`, `whatsapp_restricted`, `new_chats_paused`, `whatsapp_refused`, `in_progress`, `conflict` | Read `message`; retry after `Retry-After` when present |\n| `422` | `validation_failed`, `wrong_code`, `no_attempts_left` | `errors` names each field |\n| `429` | `rate_limited`, `limit_reached`, `plan_limit`, `backlog_full`, `file_budget_used`, `busy` | Wait for `Retry-After`. 600 requests a minute per account |\n| `502`, `503` | `whatsapp_unavailable`, `unavailable`, `person_unknown` | Retry, after `Retry-After` if present |\n| Other | `bad_request`, `server_error` | |\n\n[The API's error codes](https://threadwire.net/docs/guides/waiting#the-apis-error-codes) says what each one means.\n\nA message that cannot go is not an error: it is answered `202` and later becomes `failed`, with the reason in `error`.\n\n**Retries are safe** with an `Idempotency-Key` header (any unique string, like an order id): a retry returns the first message instead of sending a second. See [what to retry](https://threadwire.net/docs/guides/waiting#what-your-code-should-retry).\n\n## Pagination\n\n| List | Getting the next page |\n|---|---|\n| `GET /v1/messages` | A cursor: follow `links.next` until it is null. `limit` up to 100 (50 by default) |\n| `GET /v1/chats`, `/v1/instances`, `/v1/broadcasts` | `page`: follow `links.next` until it is null (50, 15 and 20 a page) |\n| `GET /v1/events` | `after`: pass the last answer's `next_after`, at once while `has_more` is true. Oldest first |\n| An instance's `groups` and `contacts`, a chat's `history` | `limit` and `offset`, until a page comes back empty |\n\nThe other lists (channels, labels, statuses) come whole. Messages, chats, instances and broadcasts are newest first.\n\n## A message's values\n\n- `direction`: `in` (they wrote) or `out` (the instance sent it).\n- `status`: `scheduled`, `queued`, `sent`, `delivered`, `read` or `failed` for a message going out; always `received` for one coming in.\n- `type`: `text`, `image`, `video`, `audio`, `document`, `sticker`, `location`, `contact` or `poll`; a message coming in may also be an `order` or a `product`.\n\n## The one rule to know\n\nWhatsApp bans numbers that behave like bots, so Threadwire sends the way a person would. **Replies go within seconds:** anything to someone who wrote to the instance in the last 24 hours. **Messages to people who never wrote are limited:** spaced out, capped per day, and not sent at night. So let people write first: every instance has a `chat_link` for your site and receipts. See [How sending protects your number](https://threadwire.net/docs/guides/protection).\n\n## Guides\n\n- [Linking an instance](https://threadwire.net/docs/guides/instances): by QR code or a code, its settings, API keys, plans and limits.\n- [Sending messages](https://threadwire.net/docs/guides/sending): every kind of message, scheduling, edits, deletions and reactions.\n- [Waiting, errors and retries](https://threadwire.net/docs/guides/waiting): what holds or fails a message, the pace, and what to retry.\n- [Broadcasts](https://threadwire.net/docs/guides/broadcasts): one message to many people who wrote to you. Never loop `POST /v1/messages` over a list instead.\n- [How sending protects your number](https://threadwire.net/docs/guides/protection): the limits, warm-up, quiet hours, opt-outs and your own settings.\n- [Webhooks and events](https://threadwire.net/docs/guides/webhooks): a whole endpoint, every event, retries, and polling.\n- [WhatsApp OTP](https://threadwire.net/docs/guides/otp): confirm a phone number for a sign-up or a sign-in.\n- [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups): also history, labels, statuses and channels.\n- [The AI agent](https://threadwire.net/docs/guides/ai-agent): an instance answers people with your own Anthropic or OpenAI key.\n- [A menu of choices](https://threadwire.net/docs/guides/menu): \"1 for prices, 3 to talk to someone\".\n- [Tools and code samples](https://threadwire.net/docs/guides/tools): the [Postman collection](https://threadwire.net/docs/api.postman.json), a Laravel package, n8n, Make, WooCommerce, AI agents (MCP), and code samples.\n- [Official API or a linked number?](https://threadwire.net/docs/guides/official-or-linked): which one you need.\n- [Changelog](https://threadwire.net/docs/guides/changelog): what changed, and what `/v1` promises.\n",
        "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://threadwire.net/api",
            "type": "string",
            "description": "This API's address; leave as it is."
        },
        {
            "key": "api_key",
            "value": "",
            "type": "string",
            "description": "Your API key, from API keys in your panel."
        },
        {
            "key": "instance_id",
            "value": "",
            "type": "string",
            "description": "Your instance ID, shown on its page in your panel."
        },
        {
            "key": "phone",
            "value": "",
            "type": "string",
            "description": "A phone in international format, like 201012345678."
        },
        {
            "key": "instance_id_to_remove",
            "value": "",
            "type": "string",
            "description": "Only when you mean it: the instance to delete or unlink. It cannot be undone."
        },
        {
            "key": "message_id",
            "value": "",
            "type": "string",
            "description": "The message's id, from an earlier answer."
        },
        {
            "key": "group_id",
            "value": "",
            "type": "string",
            "description": "The group's id, from an earlier answer."
        },
        {
            "key": "message_id_to_remove",
            "value": "",
            "type": "string",
            "description": "Only when you mean it: the message to delete or unlink. It cannot be undone."
        },
        {
            "key": "otp_id",
            "value": "",
            "type": "string",
            "description": "The otp's id, from an earlier answer."
        },
        {
            "key": "otp_id_to_remove",
            "value": "",
            "type": "string",
            "description": "Only when you mean it: the otp to delete or unlink. It cannot be undone."
        },
        {
            "key": "broadcast_id",
            "value": "",
            "type": "string",
            "description": "The broadcast's id, from an earlier answer."
        },
        {
            "key": "broadcast_id_to_remove",
            "value": "",
            "type": "string",
            "description": "Only when you mean it: the broadcast to delete or unlink. It cannot be undone."
        },
        {
            "key": "label_id",
            "value": "",
            "type": "string",
            "description": "The label's id, from an earlier answer."
        },
        {
            "key": "label_id_to_remove",
            "value": "",
            "type": "string",
            "description": "Only when you mean it: the label to delete or unlink. It cannot be undone."
        },
        {
            "key": "status_id_to_remove",
            "value": "",
            "type": "string",
            "description": "Only when you mean it: the status to delete or unlink. It cannot be undone."
        },
        {
            "key": "chat_id",
            "value": "",
            "type": "string",
            "description": "The chat's id, from an earlier answer."
        },
        {
            "key": "channel_id",
            "value": "",
            "type": "string",
            "description": "The channel's id, from an earlier answer."
        },
        {
            "key": "channel_id_to_remove",
            "value": "",
            "type": "string",
            "description": "Only when you mean it: the channel to delete or unlink. It cannot be undone."
        }
    ],
    "item": [
        {
            "name": "Instances",
            "item": [
                {
                    "name": "List your instances",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances"
                            ],
                            "query": [
                                {
                                    "key": "external_ref",
                                    "value": "",
                                    "description": "Only the instance with this reference of yours.",
                                    "disabled": true
                                }
                            ]
                        },
                        "description": "Newest first, 15 to a page, each with its `status` and its\n`protection` today. See [Linking an instance](https://threadwire.net/docs/guides/instances)."
                    }
                },
                {
                    "name": "Add an instance",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances"
                            ],
                            "query": []
                        },
                        "description": "It starts unlinked: link it with its QR code or a pairing code.\n`external_ref` is your own id for it. Answers 201 with the instance.\nSee [Linking an instance](https://threadwire.net/docs/guides/instances).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"name\": \"\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Get an instance",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}"
                            ],
                            "query": []
                        },
                        "description": "Its `status`, and its `protection` today: how many new people it may\nmessage, its warm-up limits, whether new chats are paused, and its\n`safety` score. See [How sending protects your number](https://threadwire.net/docs/guides/protection)."
                    }
                },
                {
                    "name": "Remove an instance",
                    "request": {
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id_to_remove}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id_to_remove}}"
                            ],
                            "query": []
                        },
                        "description": "WhatsApp is logged out on the phone, and the instance's messages and\nfiles are deleted. Answers 204, or 409 while WhatsApp restricts the\ninstance. See [Linking an instance](https://threadwire.net/docs/guides/instances)."
                    }
                },
                {
                    "name": "Change an instance's settings",
                    "request": {
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}"
                            ],
                            "query": []
                        },
                        "description": "Its `name`, `reject_calls` (decline WhatsApp calls at once) and\n`protection_settings` (your own protection, within safe limits). Send\nonly what changes; `null` puts a setting back to the recommended\nvalue, and one past its safe limit is refused (422). The keys and\ntheir limits are in\n[How sending protects your number](https://threadwire.net/docs/guides/protection#your-own-settings).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"name\": \"\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Get an instance's QR code",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/qr",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "qr"
                            ],
                            "query": []
                        },
                        "description": "Scan it from WhatsApp → Linked devices to link the instance. It\nchanges every few seconds, so poll this while showing it. Answers 409\nwith the reason while the instance's `link_refused` is set (the phone\nscanned belongs to another instance); `POST /v1/instances/{id}/logout`\nclears that and starts a new link. See\n[Linking an instance](https://threadwire.net/docs/guides/instances)."
                    }
                },
                {
                    "name": "Decline a call",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/calls/reject",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "calls",
                                "reject"
                            ],
                            "query": []
                        },
                        "description": "A WhatsApp call ringing on the instance now, by the `id` and `from` of\nits call.received webhook. Answers 204. See\n[Linking an instance](https://threadwire.net/docs/guides/instances).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"call_id\": \"\",\n    \"from\": \"\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Restart an instance",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/restart",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "restart"
                            ],
                            "query": []
                        },
                        "description": "For one that seems stuck: it reconnects within seconds and stays\nlinked. Answers 202 with the instance. See [Linking an instance](https://threadwire.net/docs/guides/instances)."
                    }
                },
                {
                    "name": "Stop an instance",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/stop",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "stop"
                            ],
                            "query": []
                        },
                        "description": "Takes it offline on purpose: nothing is sent or received until it is\nstarted again. It stays linked. Answers 202 with the instance. See\n[Linking an instance](https://threadwire.net/docs/guides/instances)."
                    }
                },
                {
                    "name": "Start an instance",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/start",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "start"
                            ],
                            "query": []
                        },
                        "description": "After a stop or a disconnection: it connects again, or, if WhatsApp\nlogged it out, waits for a new QR code. Answers 202 with the instance.\nSee [Linking an instance](https://threadwire.net/docs/guides/instances)."
                    }
                },
                {
                    "name": "Unlink WhatsApp",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id_to_remove}}/logout",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id_to_remove}}",
                                "logout"
                            ],
                            "query": []
                        },
                        "description": "Logs the phone out, as removing a linked device in WhatsApp: the\ninstance then waits for a new QR code scan. Its id, settings, keys and\nmessages stay. For an instance whose link was refused (`link_refused`)\nit clears the refusal and starts a new link. Answers 202 with the\ninstance. See [Linking an instance](https://threadwire.net/docs/guides/instances)."
                    }
                },
                {
                    "name": "Get a pairing code",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/pairing-code",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "pairing-code"
                            ],
                            "query": []
                        },
                        "description": "The alternative to the QR code: an 8-character code for the `phone`\nbeing linked, which its owner types into WhatsApp → Linked devices →\nLink with phone number instead. See [Linking an instance](https://threadwire.net/docs/guides/instances).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"phone\": \"{{phone}}\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Check whether a phone number is on WhatsApp",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/check",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "check"
                            ],
                            "query": []
                        },
                        "description": "Asked through this instance, which must be connected. Answers\n`on_whatsapp`, and `checks_left_today`: checks are limited, as many\nlookups look like scraping to WhatsApp. See\n[Is a phone on WhatsApp?](https://threadwire.net/docs/guides/sending#is-a-phone-on-whatsapp).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"phone\": \"{{phone}}\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Get an instance's AI agent",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/ai-agent",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "ai-agent"
                            ],
                            "query": []
                        },
                        "description": "Its settings and state. The API key is never returned, only its last 4\ncharacters. See [The AI agent](https://threadwire.net/docs/guides/ai-agent)."
                    }
                },
                {
                    "name": "Change an instance's AI agent",
                    "request": {
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/ai-agent",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "ai-agent"
                            ],
                            "query": []
                        },
                        "description": "Send only what changes. `api_key` is write-only. Turning it on needs a\nkey; a key for the other provider, or a model not listed, is refused\n(422). See [The AI agent](https://threadwire.net/docs/guides/ai-agent).",
                        "body": {
                            "mode": "raw",
                            "raw": "{}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Get an instance's menu",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/menu",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "menu"
                            ],
                            "query": []
                        },
                        "description": "The whole menu as one document, the same one `PUT` takes. An instance\nwith no menu yet returns an empty one, turned off. See\n[A menu of choices](https://threadwire.net/docs/guides/menu)."
                    }
                },
                {
                    "name": "Replace an instance's menu",
                    "request": {
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/menu",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "menu"
                            ],
                            "query": []
                        },
                        "description": "Send the whole menu: it replaces the one before. What would not work\nis refused (422) and nothing changes. See\n[A menu of choices](https://threadwire.net/docs/guides/menu#the-api).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"choices\": [\n        {\n            \"label\": \"\",\n            \"outcome\": \"answer\"\n        }\n    ],\n    \"enabled\": false,\n    \"greeting\": \"\",\n    \"handover_message\": \"\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Get an instance's profile",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/profile",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "profile"
                            ],
                            "query": []
                        },
                        "description": "Its `name` and `picture_url` as WhatsApp shows them. See\n[Linking an instance](https://threadwire.net/docs/guides/instances)."
                    }
                },
                {
                    "name": "Change an instance's profile",
                    "request": {
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/profile",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "profile"
                            ],
                            "query": []
                        },
                        "description": "Any of `name` (up to 25 characters), `about` (up to 139) and `picture`\n(a JPEG or PNG by `url`, or base64 `data`; null removes it). See\n[Linking an instance](https://threadwire.net/docs/guides/instances).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"name\": \"\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "Messages",
            "item": [
                {
                    "name": "List messages",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages"
                            ],
                            "query": [
                                {
                                    "key": "instance_id",
                                    "value": "{{instance_id}}",
                                    "description": null,
                                    "disabled": true
                                },
                                {
                                    "key": "phone",
                                    "value": "{{phone}}",
                                    "description": "The person's number in international format, like 201012345678.",
                                    "disabled": true
                                },
                                {
                                    "key": "direction",
                                    "value": "in",
                                    "description": null,
                                    "disabled": true
                                },
                                {
                                    "key": "limit",
                                    "value": "1",
                                    "description": null,
                                    "disabled": true
                                },
                                {
                                    "key": "cursor",
                                    "value": "",
                                    "description": "Where the next page starts: the `cursor` of `links.next`, as it is.",
                                    "disabled": true
                                }
                            ]
                        },
                        "description": "Newest first, 50 a page (up to 100 with `limit`); follow `links.next`\nfor older ones. Filter by `instance_id`, the person's `phone`, or\n`direction` (`in` or `out`). `written_at` is WhatsApp's own time for a\nmessage received or typed on the phone. Messages are kept 30 days.\nSee [Sending messages](https://threadwire.net/docs/guides/sending)."
                    }
                },
                {
                    "name": "Send a message",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours, up to 255 characters, such as your own message id; case counts. A retry with the same key on the same instance returns the first message instead of sending a second, with the header `Idempotent-Replayed: true`. The first request wins, whatever the retry's body.",
                                "disabled": true
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages"
                            ],
                            "query": []
                        },
                        "description": "Send `text`, a file in `media`, a `location`, a `contact` card, a\n`sticker` or a `poll`, to `to` or a group's or channel's `chat_id`\n(or the `chat_id` of someone who wrote without a phone).\nAnswers 202 with status \"queued\" (or \"scheduled\" with `send_at`);\nupdates arrive as message.status webhooks. A retry with an\n`Idempotency-Key` answers 200 with the first message and the header\n`Idempotent-Replayed: true`. See [Sending messages](https://threadwire.net/docs/guides/sending).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"instance_id\": \"{{instance_id}}\",\n    \"to\": \"{{phone}}\",\n    \"text\": \"Hello from Threadwire\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Send an image with a caption",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours, up to 255 characters, such as your own message id; case counts. A retry with the same key on the same instance returns the first message instead of sending a second, with the header `Idempotent-Replayed: true`. The first request wins, whatever the retry's body.",
                                "disabled": true
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages"
                            ],
                            "query": []
                        },
                        "description": "Send a message, with this kind of content. Every field is explained in the sending guide: https://threadwire.net/docs/guides/sending",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"instance_id\": \"{{instance_id}}\",\n    \"to\": \"{{phone}}\",\n    \"text\": \"Here is the picture you asked for.\",\n    \"media\": {\n        \"url\": \"https://threadwire.net/samples/image.jpg\",\n        \"mimetype\": \"image/jpeg\",\n        \"filename\": \"image.jpg\"\n    }\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Send a file (PDF)",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours, up to 255 characters, such as your own message id; case counts. A retry with the same key on the same instance returns the first message instead of sending a second, with the header `Idempotent-Replayed: true`. The first request wins, whatever the retry's body.",
                                "disabled": true
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages"
                            ],
                            "query": []
                        },
                        "description": "Send a message, with this kind of content. Every field is explained in the sending guide: https://threadwire.net/docs/guides/sending",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"instance_id\": \"{{instance_id}}\",\n    \"to\": \"{{phone}}\",\n    \"text\": \"Your document is attached.\",\n    \"media\": {\n        \"url\": \"https://threadwire.net/samples/document.pdf\",\n        \"mimetype\": \"application/pdf\",\n        \"filename\": \"document.pdf\"\n    }\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Send a voice note",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours, up to 255 characters, such as your own message id; case counts. A retry with the same key on the same instance returns the first message instead of sending a second, with the header `Idempotent-Replayed: true`. The first request wins, whatever the retry's body.",
                                "disabled": true
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages"
                            ],
                            "query": []
                        },
                        "description": "Send a message, with this kind of content. Every field is explained in the sending guide: https://threadwire.net/docs/guides/sending",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"instance_id\": \"{{instance_id}}\",\n    \"to\": \"{{phone}}\",\n    \"media\": {\n        \"url\": \"https://threadwire.net/samples/voice.m4a\",\n        \"mimetype\": \"audio/mp4\",\n        \"filename\": \"voice.m4a\"\n    }\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Send a file as base64 (not at a public address)",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours, up to 255 characters, such as your own message id; case counts. A retry with the same key on the same instance returns the first message instead of sending a second, with the header `Idempotent-Replayed: true`. The first request wins, whatever the retry's body.",
                                "disabled": true
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages"
                            ],
                            "query": []
                        },
                        "description": "Send a message, with this kind of content. Every field is explained in the sending guide: https://threadwire.net/docs/guides/sending",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"instance_id\": \"{{instance_id}}\",\n    \"to\": \"{{phone}}\",\n    \"text\": \"A file sent inline.\",\n    \"media\": {\n        \"data\": \"SGVsbG8gZnJvbSBUaHJlYWR3aXJlLgo=\",\n        \"mimetype\": \"text/plain\",\n        \"filename\": \"hello.txt\"\n    }\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Send a link with its preview",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours, up to 255 characters, such as your own message id; case counts. A retry with the same key on the same instance returns the first message instead of sending a second, with the header `Idempotent-Replayed: true`. The first request wins, whatever the retry's body.",
                                "disabled": true
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages"
                            ],
                            "query": []
                        },
                        "description": "Send a message, with this kind of content. Every field is explained in the sending guide: https://threadwire.net/docs/guides/sending",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"instance_id\": \"{{instance_id}}\",\n    \"to\": \"{{phone}}\",\n    \"text\": \"How we keep your number safe: https://threadwire.net/safety\",\n    \"link_preview\": true\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Send a link without a preview",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours, up to 255 characters, such as your own message id; case counts. A retry with the same key on the same instance returns the first message instead of sending a second, with the header `Idempotent-Replayed: true`. The first request wins, whatever the retry's body.",
                                "disabled": true
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages"
                            ],
                            "query": []
                        },
                        "description": "Send a message, with this kind of content. Every field is explained in the sending guide: https://threadwire.net/docs/guides/sending",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"instance_id\": \"{{instance_id}}\",\n    \"to\": \"{{phone}}\",\n    \"text\": \"How we keep your number safe: https://threadwire.net/safety\",\n    \"link_preview\": false\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Send a location",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours, up to 255 characters, such as your own message id; case counts. A retry with the same key on the same instance returns the first message instead of sending a second, with the header `Idempotent-Replayed: true`. The first request wins, whatever the retry's body.",
                                "disabled": true
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages"
                            ],
                            "query": []
                        },
                        "description": "Send a message, with this kind of content. Every field is explained in the sending guide: https://threadwire.net/docs/guides/sending",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"instance_id\": \"{{instance_id}}\",\n    \"to\": \"{{phone}}\",\n    \"location\": {\n        \"latitude\": 30.0444,\n        \"longitude\": 31.2357,\n        \"title\": \"Our office\"\n    }\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Send a contact card",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours, up to 255 characters, such as your own message id; case counts. A retry with the same key on the same instance returns the first message instead of sending a second, with the header `Idempotent-Replayed: true`. The first request wins, whatever the retry's body.",
                                "disabled": true
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages"
                            ],
                            "query": []
                        },
                        "description": "Send a message, with this kind of content. Every field is explained in the sending guide: https://threadwire.net/docs/guides/sending",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"instance_id\": \"{{instance_id}}\",\n    \"to\": \"{{phone}}\",\n    \"contact\": {\n        \"name\": \"Support\",\n        \"phone\": \"{{phone}}\",\n        \"organization\": \"Your company\"\n    }\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Send a poll",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours, up to 255 characters, such as your own message id; case counts. A retry with the same key on the same instance returns the first message instead of sending a second, with the header `Idempotent-Replayed: true`. The first request wins, whatever the retry's body.",
                                "disabled": true
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages"
                            ],
                            "query": []
                        },
                        "description": "Send a message, with this kind of content. Every field is explained in the sending guide: https://threadwire.net/docs/guides/sending",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"instance_id\": \"{{instance_id}}\",\n    \"to\": \"{{phone}}\",\n    \"poll\": {\n        \"name\": \"Which day suits you?\",\n        \"options\": [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\"\n        ],\n        \"multiple_answers\": false\n    }\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Send a sticker",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours, up to 255 characters, such as your own message id; case counts. A retry with the same key on the same instance returns the first message instead of sending a second, with the header `Idempotent-Replayed: true`. The first request wins, whatever the retry's body.",
                                "disabled": true
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages"
                            ],
                            "query": []
                        },
                        "description": "Send a message, with this kind of content. Every field is explained in the sending guide: https://threadwire.net/docs/guides/sending",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"instance_id\": \"{{instance_id}}\",\n    \"to\": \"{{phone}}\",\n    \"sticker\": {\n        \"url\": \"https://threadwire.net/samples/sticker.webp\"\n    }\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Reply to a message (quote it)",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours, up to 255 characters, such as your own message id; case counts. A retry with the same key on the same instance returns the first message instead of sending a second, with the header `Idempotent-Replayed: true`. The first request wins, whatever the retry's body.",
                                "disabled": true
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages"
                            ],
                            "query": []
                        },
                        "description": "Send a message, with this kind of content. Every field is explained in the sending guide: https://threadwire.net/docs/guides/sending",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"instance_id\": \"{{instance_id}}\",\n    \"to\": \"{{phone}}\",\n    \"text\": \"Yes, that works for us.\",\n    \"reply_to\": \"{{message_id}}\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Schedule a message for later",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours, up to 255 characters, such as your own message id; case counts. A retry with the same key on the same instance returns the first message instead of sending a second, with the header `Idempotent-Replayed: true`. The first request wins, whatever the retry's body.",
                                "disabled": true
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages"
                            ],
                            "query": []
                        },
                        "description": "Send a message, with this kind of content. Every field is explained in the sending guide: https://threadwire.net/docs/guides/sending",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"instance_id\": \"{{instance_id}}\",\n    \"to\": \"{{phone}}\",\n    \"text\": \"A reminder: your appointment is tomorrow.\",\n    \"send_at\": \"{{send_at}}\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    },
                    "event": [
                        {
                            "listen": "prerequest",
                            "script": {
                                "type": "text/javascript",
                                "exec": [
                                    "pm.variables.set('send_at', new Date(Date.now() + 60 * 60 * 1000).toISOString());"
                                ]
                            }
                        }
                    ]
                },
                {
                    "name": "Send to a group",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours, up to 255 characters, such as your own message id; case counts. A retry with the same key on the same instance returns the first message instead of sending a second, with the header `Idempotent-Replayed: true`. The first request wins, whatever the retry's body.",
                                "disabled": true
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages"
                            ],
                            "query": []
                        },
                        "description": "Send a message, with this kind of content. Every field is explained in the sending guide: https://threadwire.net/docs/guides/sending",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"instance_id\": \"{{instance_id}}\",\n    \"chat_id\": \"{{group_id}}\",\n    \"text\": \"Hello everyone.\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Get a message",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages/{{message_id}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages",
                                "{{message_id}}"
                            ],
                            "query": []
                        },
                        "description": "One you sent or received, with its `status`. A failed message says why\nin `error`. See [Sending messages](https://threadwire.net/docs/guides/sending)."
                    }
                },
                {
                    "name": "Cancel or delete a message",
                    "request": {
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages/{{message_id_to_remove}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages",
                                "{{message_id_to_remove}}"
                            ],
                            "query": []
                        },
                        "description": "A message not sent yet is cancelled: a scheduled one is removed (204),\na queued one becomes `failed` (200). A sent one is deleted for everyone\nin the chat, within 48 hours (202). See [Sending messages](https://threadwire.net/docs/guides/sending)."
                    }
                },
                {
                    "name": "Edit a message",
                    "request": {
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages/{{message_id}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages",
                                "{{message_id}}"
                            ],
                            "query": []
                        },
                        "description": "Changes the `text` of a text message the instance sent, within 15\nminutes, as WhatsApp allows. Answers 202; a message.edited webhook\nfollows. See [Sending messages](https://threadwire.net/docs/guides/sending).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"text\": \"Hello from Threadwire\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "React to a message",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages/{{message_id}}/reaction",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages",
                                "{{message_id}}",
                                "reaction"
                            ],
                            "query": []
                        },
                        "description": "Puts an `emoji` on a message someone sent you, as in the app; an empty\none takes the reaction back. Answers 202. See\n[Sending messages](https://threadwire.net/docs/guides/sending).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"emoji\": \"\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Mark a chat as read",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/messages/{{message_id}}/read",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "messages",
                                "{{message_id}}",
                                "read"
                            ],
                            "query": []
                        },
                        "description": "Marks the chat of a message someone sent you as read on WhatsApp:\nthey see blue ticks. Answers 202. See [Sending messages](https://threadwire.net/docs/guides/sending)."
                    }
                }
            ]
        },
        {
            "name": "Chats and contacts",
            "item": [
                {
                    "name": "List your chats",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/chats",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "chats"
                            ],
                            "query": [
                                {
                                    "key": "page",
                                    "value": "1",
                                    "description": null,
                                    "disabled": true
                                },
                                {
                                    "key": "instance_id",
                                    "value": "{{instance_id}}",
                                    "description": "Only this instance's chats.",
                                    "disabled": true
                                },
                                {
                                    "key": "waiting",
                                    "value": "false",
                                    "description": "Only chats waiting for your reply.",
                                    "disabled": true
                                }
                            ]
                        },
                        "description": "One per person per instance, newest first, with the latest message and\n`waiting_for_reply`. 50 a page; follow `links.next`. See\n[Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "List an instance's contacts",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/contacts",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "contacts"
                            ],
                            "query": [
                                {
                                    "key": "limit",
                                    "value": "1",
                                    "description": "How many, up to 500.",
                                    "disabled": true
                                },
                                {
                                    "key": "offset",
                                    "value": "1",
                                    "description": "How many to skip.",
                                    "disabled": true
                                }
                            ]
                        },
                        "description": "The WhatsApp contacts on the linked phone, 100 a page (`offset` for\nmore), each with `phone`, `name` and `push_name`. See\n[Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "Get a contact",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/contacts/{{phone}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "contacts",
                                "{{phone}}"
                            ],
                            "query": []
                        },
                        "description": "Someone the instance knows (a contact on the phone, or someone it has\na chat with): `name`, `push_name` and `picture_url`. Anyone else is\n404. See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "Archive a chat",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/chats/{{phone}}/archive",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "chats",
                                "{{phone}}",
                                "archive"
                            ],
                            "query": []
                        },
                        "description": "As in the app: it moves to Archived on the phone. Answers 204. See\n[Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "Unarchive a chat",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/chats/{{phone}}/unarchive",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "chats",
                                "{{phone}}",
                                "unarchive"
                            ],
                            "query": []
                        },
                        "description": "As in the app. Answers 204. See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "Mark a chat unread",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/chats/{{phone}}/unread",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "chats",
                                "{{phone}}",
                                "unread"
                            ],
                            "query": []
                        },
                        "description": "As in the app, so your team sees it again on the phone. Answers 204.\nSee [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "Get a chat's history",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/chats/{{phone}}/history",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "chats",
                                "{{phone}}",
                                "history"
                            ],
                            "query": [
                                {
                                    "key": "limit",
                                    "value": "1",
                                    "description": "How many, 1 to 100 (50 by default).",
                                    "disabled": true
                                },
                                {
                                    "key": "offset",
                                    "value": "1",
                                    "description": "How many of the newest to skip, for older ones.",
                                    "disabled": true
                                }
                            ]
                        },
                        "description": "The messages WhatsApp keeps for this one-to-one chat on the linked\nphone, those typed on the phone included. Newest first, `limit` a page\n(`offset` for older ones); files are not included. See\n[Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                }
            ]
        },
        {
            "name": "WhatsApp OTP",
            "item": [
                {
                    "name": "Start an OTP",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours, up to 255 characters; case counts. A retry with the same key on the same instance returns the first OTP, without its code, instead of starting a second, with the header `Idempotent-Replayed: true`. The first request wins, whatever the retry's body.",
                                "disabled": true
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/otps",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "otps"
                            ],
                            "query": []
                        },
                        "description": "Proves that a person holds a WhatsApp number. With `channel: \"link\"`\n(recommended) they send a code to your instance: answers 201 with the\n`code`, a `link` and a `qr`. With `channel: \"code\"` your instance\nsends `phone` a code to check (202). See [WhatsApp OTP](https://threadwire.net/docs/guides/otp).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"instance_id\": \"{{instance_id}}\",\n    \"channel\": \"link\",\n    \"phone\": \"{{phone}}\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Get an OTP",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/otps/{{otp_id}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "otps",
                                "{{otp_id}}"
                            ],
                            "query": []
                        },
                        "description": "Its `status` (`pending`, `verified`, `failed`, `expired` or\n`cancelled`), `verified_phone` once verified, your `reference` and\n`attempts_left`. Never the code. See [WhatsApp OTP](https://threadwire.net/docs/guides/otp)."
                    }
                },
                {
                    "name": "Cancel an OTP",
                    "request": {
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/otps/{{otp_id_to_remove}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "otps",
                                "{{otp_id_to_remove}}"
                            ],
                            "query": []
                        },
                        "description": "While pending: it becomes `cancelled`, and a code not sent yet is not\nsent. Otherwise 409. See [WhatsApp OTP](https://threadwire.net/docs/guides/otp)."
                    }
                },
                {
                    "name": "Check a code",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/otps/{{otp_id}}/check",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "otps",
                                "{{otp_id}}",
                                "check"
                            ],
                            "query": []
                        },
                        "description": "For `channel: \"code\"`: the `code` the person typed. Right: 200 with\n`status: \"verified\"`. Wrong: 422 with `attempts_left`. See\n[WhatsApp OTP](https://threadwire.net/docs/guides/otp).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"code\": \"\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Send a new code",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/otps/{{otp_id}}/resend",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "otps",
                                "{{otp_id}}",
                                "resend"
                            ],
                            "query": []
                        },
                        "description": "For `channel: \"code\"`, while pending: a new code goes, the earlier one\nstops working, and the OTP lives `expires_in` minutes from\nnow. Answers 202. See [WhatsApp OTP](https://threadwire.net/docs/guides/otp)."
                    }
                }
            ]
        },
        {
            "name": "Broadcasts",
            "item": [
                {
                    "name": "List broadcasts",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/broadcasts",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "broadcasts"
                            ],
                            "query": [
                                {
                                    "key": "instance_id",
                                    "value": "{{instance_id}}",
                                    "description": "Only this instance's broadcasts.",
                                    "disabled": true
                                },
                                {
                                    "key": "status",
                                    "value": "",
                                    "description": "Only broadcasts in this status: draft, scheduled, running, paused, completed or cancelled.",
                                    "disabled": true
                                }
                            ]
                        },
                        "description": "Newest first, 20 a page, each with its `progress`. Filter by\n`instance_id` or `status`. See [Broadcasts](https://threadwire.net/docs/guides/broadcasts)."
                    }
                },
                {
                    "name": "Start a broadcast",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours, up to 255 characters; case counts. A retry with the same key on the same instance returns the first broadcast instead of starting a second, with the header `Idempotent-Replayed: true`. The first request wins, whatever the retry's body.",
                                "disabled": true
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/broadcasts",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "broadcasts"
                            ],
                            "query": []
                        },
                        "description": "Sends `text` to everyone in an `audience` who opted in: people who\nwrote to the instance (`recent`, or a chat `label`), or a list of\n`recipients` filtered to them. Each gets their own message, one at a\ntime, `interval_seconds` apart, in daytime, with an opt-out line, and\nit pauses itself if the instance is at risk. Answers 201; a retry with\nits `Idempotency-Key` answers 200 with the first broadcast and the\nheader `Idempotent-Replayed: true`. See [Broadcasts](https://threadwire.net/docs/guides/broadcasts).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"instance_id\": \"{{instance_id}}\",\n    \"name\": \"\",\n    \"text\": \"Hello from Threadwire\",\n    \"audience\": \"recent\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Get a broadcast",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/broadcasts/{{broadcast_id}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "broadcasts",
                                "{{broadcast_id}}"
                            ],
                            "query": []
                        },
                        "description": "Its `status`, the `reason` when paused, and its `progress`: people\nstill to go, passed over, and how their messages went. See\n[Broadcasts](https://threadwire.net/docs/guides/broadcasts)."
                    }
                },
                {
                    "name": "Cancel a broadcast",
                    "request": {
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/broadcasts/{{broadcast_id_to_remove}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "broadcasts",
                                "{{broadcast_id_to_remove}}"
                            ],
                            "query": []
                        },
                        "description": "Nobody else gets it; a message still waiting is cancelled too. What\nwent stays sent. See [Broadcasts](https://threadwire.net/docs/guides/broadcasts)."
                    }
                },
                {
                    "name": "Pause a broadcast",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/broadcasts/{{broadcast_id}}/pause",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "broadcasts",
                                "{{broadcast_id}}",
                                "pause"
                            ],
                            "query": []
                        },
                        "description": "Nothing more goes until it is resumed. A message already on its way\nis held back and goes again on resume. See [Broadcasts](https://threadwire.net/docs/guides/broadcasts)."
                    }
                },
                {
                    "name": "Resume a broadcast",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/broadcasts/{{broadcast_id}}/resume",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "broadcasts",
                                "{{broadcast_id}}",
                                "resume"
                            ],
                            "query": []
                        },
                        "description": "Only once the reason it paused has cleared: otherwise 409 with what\nstill stops it. See [Broadcasts](https://threadwire.net/docs/guides/broadcasts)."
                    }
                }
            ]
        },
        {
            "name": "Labels",
            "item": [
                {
                    "name": "List an instance's labels",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/labels",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "labels"
                            ],
                            "query": []
                        },
                        "description": "Each with its `id`, `name`, `color` (0 to 19, WhatsApp's palette) and\n`color_hex`. Labels need the WhatsApp Business app. See\n[Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "Create a label",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/labels",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "labels"
                            ],
                            "query": []
                        },
                        "description": "With a `name` and a `color` (0 to 19). Answers 201 with the label. See\n[Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"name\": \"\",\n    \"color\": 0\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Rename or recolour a label",
                    "request": {
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/labels/{{label_id}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "labels",
                                "{{label_id}}"
                            ],
                            "query": []
                        },
                        "description": "Send its `name` and `color`. See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"name\": \"\",\n    \"color\": 0\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Delete a label",
                    "request": {
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/labels/{{label_id_to_remove}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "labels",
                                "{{label_id_to_remove}}"
                            ],
                            "query": []
                        },
                        "description": "It comes off every chat. Answers 204. See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "List chats with a label",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/labels/{{label_id}}/chats",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "labels",
                                "{{label_id}}",
                                "chats"
                            ],
                            "query": []
                        },
                        "description": "Each by its `chat_id`, with its `name`. See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "Get a chat's labels",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/chats/{{phone}}/labels",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "chats",
                                "{{phone}}",
                                "labels"
                            ],
                            "query": []
                        },
                        "description": "By the person's phone or the chat's `chat_id`. See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "Set a chat's labels",
                    "request": {
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/chats/{{phone}}/labels",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "chats",
                                "{{phone}}",
                                "labels"
                            ],
                            "query": []
                        },
                        "description": "The whole list, by `id`: labels left out come off the chat, and an\nempty list removes them all. Answers 204. See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"labels\": [\n        \"\"\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "Statuses",
            "item": [
                {
                    "name": "List an instance's statuses",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/statuses",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "statuses"
                            ],
                            "query": []
                        },
                        "description": "Newest first, from the last 30 days, each with `views` and the\n`viewers`' phones. See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "Post a status",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/statuses",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "statuses"
                            ],
                            "query": []
                        },
                        "description": "A `text`, or a file in `image`, `video` or `voice` (by `url` or base64\n`data`). `audience`, a list of phones, limits who sees it; each must\nknow the instance. Answers 202 with status \"queued\". See\n[Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"text\": \"Hello from Threadwire\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Delete a status",
                    "request": {
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/statuses/{{status_id_to_remove}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "statuses",
                                "{{status_id_to_remove}}"
                            ],
                            "query": []
                        },
                        "description": "It disappears for everyone who could see it. Answers 204. See\n[Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                }
            ]
        },
        {
            "name": "Contact fields",
            "item": [
                {
                    "name": "List contact fields",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/contact-fields",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "contact-fields"
                            ],
                            "query": []
                        },
                        "description": "The fields your team keeps about people who write to you, made on the\nChats page: each with its `key`, `name`, `kind` (text, number, date or\nlist) and a list's `options`. See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups#contact-fields)."
                    }
                },
                {
                    "name": "Get a person's contact fields",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/chats/{{chat_id}}/contact-fields",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "chats",
                                "{{chat_id}}",
                                "contact-fields"
                            ],
                            "query": []
                        },
                        "description": "What your fields say about someone who wrote to one of your instances,\nby their phone or the `chat_id` from a webhook: every field's key,\nwith null where nothing is kept. Anyone who never wrote is 404. See\n[Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups#contact-fields)."
                    }
                },
                {
                    "name": "Set a person's contact fields",
                    "request": {
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/chats/{{chat_id}}/contact-fields",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "chats",
                                "{{chat_id}}",
                                "contact-fields"
                            ],
                            "query": []
                        },
                        "description": "Send `fields` as key and value pairs: a key left out stays as it is,\nand null or an empty value clears it. Only for someone who wrote to\none of your instances (anyone else is 404), and only with a\nfull-access key. See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups#contact-fields).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"fields\": {}\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "Groups",
            "item": [
                {
                    "name": "List an instance's groups",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/groups",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "groups"
                            ],
                            "query": [
                                {
                                    "key": "limit",
                                    "value": "1",
                                    "description": null,
                                    "disabled": true
                                },
                                {
                                    "key": "offset",
                                    "value": "0",
                                    "description": null,
                                    "disabled": true
                                }
                            ]
                        },
                        "description": "Each with its `chat_id` (for sending), `subject`, `description` and\n`size` (how many people are in it). See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "Create a group",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/groups",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "groups"
                            ],
                            "query": []
                        },
                        "description": "With a `subject` and the `participants` (phones) to add, who must know\nthe instance. Answers 201 with the group. See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"subject\": \"\",\n    \"participants\": [\n        \"{{phone}}\"\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Join a group",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/groups/join",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "groups",
                                "join"
                            ],
                            "query": []
                        },
                        "description": "By its invite link or code, in `invite`. Answers 204. See\n[Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"invite\": \"\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Get a group",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/groups/{{group_id}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "groups",
                                "{{group_id}}"
                            ],
                            "query": []
                        },
                        "description": "With its `participants`, and which of them are admins. See\n[Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "Change a group",
                    "request": {
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/groups/{{group_id}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "groups",
                                "{{group_id}}"
                            ],
                            "query": []
                        },
                        "description": "Any of `subject`, `description`, `messages_admin_only` and\n`info_admin_only`. The instance must be an admin. Answers 204. See\n[Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups).",
                        "body": {
                            "mode": "raw",
                            "raw": "{}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Add, remove, promote or demote people",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/groups/{{group_id}}/participants",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "groups",
                                "{{group_id}}",
                                "participants"
                            ],
                            "query": []
                        },
                        "description": "`action` (`add`, `remove`, `promote` or `demote`) with the\n`participants` (phones). Only people who know the instance can be\nadded, and the instance must be an admin. Answers 204. See\n[Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"action\": \"add\",\n    \"participants\": [\n        \"{{phone}}\"\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Get a group's invite link",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/groups/{{group_id}}/invite",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "groups",
                                "{{group_id}}",
                                "invite"
                            ],
                            "query": []
                        },
                        "description": "The way to bring in people who never wrote to the instance: they join\nwhen they choose to. See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "Reset a group's invite link",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/groups/{{group_id}}/invite/revoke",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "groups",
                                "{{group_id}}",
                                "invite",
                                "revoke"
                            ],
                            "query": []
                        },
                        "description": "Answers a new invite link; the old one stops working. See\n[Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "Leave a group",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/groups/{{group_id}}/leave",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "groups",
                                "{{group_id}}",
                                "leave"
                            ],
                            "query": []
                        },
                        "description": "Answers 204. See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                }
            ]
        },
        {
            "name": "Channels",
            "item": [
                {
                    "name": "List an instance's channels",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/channels",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "channels"
                            ],
                            "query": [
                                {
                                    "key": "role",
                                    "value": "owner",
                                    "description": null,
                                    "disabled": true
                                }
                            ]
                        },
                        "description": "Each with its `chat_id` (for posting), `name`, `description`,\n`followers`, `invite_link` and `role`; filter by `role` (owner, admin\nor subscriber). See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "Create a channel",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/channels",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "channels"
                            ],
                            "query": []
                        },
                        "description": "One the instance runs, with a `name` and a `description`. Answers 201\nwith the channel. See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups).",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"name\": \"\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Get a channel",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/channels/{{channel_id}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "channels",
                                "{{channel_id}}"
                            ],
                            "query": []
                        },
                        "description": "By its `chat_id` or invite code. See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                },
                {
                    "name": "Delete a channel",
                    "request": {
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/channels/{{channel_id_to_remove}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "channels",
                                "{{channel_id_to_remove}}"
                            ],
                            "query": []
                        },
                        "description": "One the instance owns. Answers 204. See [Chats, contacts and groups](https://threadwire.net/docs/guides/chats-and-groups)."
                    }
                }
            ]
        },
        {
            "name": "Events",
            "item": [
                {
                    "name": "Poll for events",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/events",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "events"
                            ],
                            "query": [
                                {
                                    "key": "types[]",
                                    "value": "message.received",
                                    "description": "Only these event types, as in `types[]=message.received&types[]=message.status`.",
                                    "disabled": true
                                },
                                {
                                    "key": "after",
                                    "value": "",
                                    "description": "The id of the last event you handled (evt_…): only later ones come back.",
                                    "disabled": true
                                },
                                {
                                    "key": "limit",
                                    "value": "1",
                                    "description": "How many, 1 to 100 (50 by default).",
                                    "disabled": true
                                },
                                {
                                    "key": "instance_id",
                                    "value": "{{instance_id}}",
                                    "description": "Only this instance's events.",
                                    "disabled": true
                                }
                            ]
                        },
                        "description": "The same events your webhook gets, oldest first, kept 30 days. Pass\nthe `id` of the last one you handled as `after`; each answer has\n`next_after`, to pass next time, and `has_more`. See\n[Webhooks and events](https://threadwire.net/docs/guides/webhooks)."
                    }
                }
            ]
        },
        {
            "name": "Webhooks",
            "item": [
                {
                    "name": "Get the account's webhook",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/webhook",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "webhook"
                            ],
                            "query": []
                        },
                        "description": "Its `url`, the `events` sent, the name of its `auth_header`, and\nwhether it is `paused` and why. Never the signing secret. See\n[Webhooks and events](https://threadwire.net/docs/guides/webhooks#by-api)."
                    }
                },
                {
                    "name": "Change the account's webhook",
                    "request": {
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/webhook",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "webhook"
                            ],
                            "query": []
                        },
                        "description": "Send only what changes: `url` (null stops sending), `events` and\n`auth_header` (null removes it). A `url` on another host removes the\nheader. The answer carries a signing `secret` only when this request\nmade the webhook's first one. At most 6 changes a minute. See\n[Webhooks and events](https://threadwire.net/docs/guides/webhooks#by-api).",
                        "body": {
                            "mode": "raw",
                            "raw": "{}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Replace the account's signing secret",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours. A retry with the same key, while the old secret still signs, answers as the first request did, without the secret.",
                                "disabled": true
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/webhook/secret",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "webhook",
                                "secret"
                            ],
                            "query": []
                        },
                        "description": "Answers with the new `secret`, this once. Events are signed with it at\nonce, and with the old one too until `previous_valid_until`; until\nthen a second replacement answers 409. A retry with the same\n`Idempotency-Key` answers as the first did, without the secret. See\n[Webhooks and events](https://threadwire.net/docs/guides/webhooks#by-api)."
                    }
                },
                {
                    "name": "Send a test event",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/webhook/test",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "webhook",
                                "test"
                            ],
                            "query": []
                        },
                        "description": "A `webhook.test` event to the account's `url`, signed like any other.\nAnswers 202; 429 within a minute of the last one, and 409 while there\nis no `url` or the webhook is paused. See\n[Webhooks and events](https://threadwire.net/docs/guides/webhooks#by-api)."
                    }
                },
                {
                    "name": "Try a paused webhook now",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/webhook/try",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "webhook",
                                "try"
                            ],
                            "query": []
                        },
                        "description": "One try of the account's paused webhook, without waiting for the\nhourly one: if it answers, the events kept go out, oldest first.\nAnswers 202; 429 within a minute of the last try, 409 when it is not\npaused. See [Webhooks and events](https://threadwire.net/docs/guides/webhooks#by-api)."
                    }
                },
                {
                    "name": "Get an instance's own webhook",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/webhook",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "webhook"
                            ],
                            "query": []
                        },
                        "description": "As the account's; a null `url` means its events go to the account's\nwebhook. A key made for this one instance may read it too. See\n[Webhooks and events](https://threadwire.net/docs/guides/webhooks#one-url-per-instance)."
                    }
                },
                {
                    "name": "Change an instance's own webhook",
                    "request": {
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/webhook",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "webhook"
                            ],
                            "query": []
                        },
                        "description": "Its `url` (its events then go there, not to the account's; null hands\nthem back) and its own `auth_header`. The answer carries its own\nsigning `secret` only when this request made its first one. `events`\nare the account's to choose. Needs an account key. See\n[Webhooks and events](https://threadwire.net/docs/guides/webhooks#one-url-per-instance).",
                        "body": {
                            "mode": "raw",
                            "raw": "{}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Replace an instance's own signing secret",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}",
                                "description": "Any unique string of yours. A retry with the same key, while the old secret still signs, answers as the first request did, without the secret.",
                                "disabled": true
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/webhook/secret",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "webhook",
                                "secret"
                            ],
                            "query": []
                        },
                        "description": "As the account's, for the instance's own `url`. Needs an account key.\nSee [Webhooks and events](https://threadwire.net/docs/guides/webhooks#by-api)."
                    }
                },
                {
                    "name": "Send a test event to an instance's own webhook",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/webhook/test",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "webhook",
                                "test"
                            ],
                            "query": []
                        },
                        "description": "As the account's, to the instance's own `url`. See\n[Webhooks and events](https://threadwire.net/docs/guides/webhooks#by-api)."
                    }
                },
                {
                    "name": "Try an instance's paused webhook now",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/v1/instances/{{instance_id}}/webhook/try",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "v1",
                                "instances",
                                "{{instance_id}}",
                                "webhook",
                                "try"
                            ],
                            "query": []
                        },
                        "description": "As the account's, for the instance's own `url`. See\n[Webhooks and events](https://threadwire.net/docs/guides/webhooks#by-api)."
                    }
                }
            ]
        }
    ]
}