[{"data":1,"prerenderedAt":694},["ShallowReactive",2],{"guide:postman":3},{"id":4,"title":5,"body":6,"date":682,"description":683,"extension":684,"meta":685,"navigation":472,"path":686,"seo":687,"stem":688,"tags":689,"updated":692,"__hash__":693},"guides\u002Fdocs\u002Fpostman.md","Postman Collection",{"type":7,"value":8,"toc":674},"minimark",[9,24,29,61,68,72,187,198,202,237,241,274,278,286,293,560,564,573,589,605,620,642,656,670],[10,11,12,13,17,18,23],"p",{},"There is no hand-maintained Postman collection to download, and that is deliberate: the Wapito\nAPI is described by one OpenAPI 3.1 document, ",[14,15,16],"code",{},"https:\u002F\u002Fwapito.com\u002Fopenapi.yaml",", and it is the\nsame document that generates the ",[19,20,22],"a",{"href":21},"\u002Fdocs\u002Fapi\u002F","API reference",", the code snippets on every page and\nthe contract test the API itself is held to. Postman, Insomnia and Bruno all import OpenAPI\ndirectly, so the collection you get is complete, current, and never a version behind the API.\nThis page shows the import in each tool, the two values you set once, and a few habits that keep\na shared collection from leaking a token.",[25,26,28],"h2",{"id":27},"what-you-will-need","What you will need",[30,31,32,50],"ul",{},[33,34,35,36,39,40,44,45,49],"li",{},"A channel token (",[14,37,38],{},"wpt_…",") from the channel's ",[41,42,43],"strong",{},"API"," tab. If you do not have one yet,\n",[19,46,48],{"href":47},"\u002Fdocs\u002Fgetting-started\u002F","getting started"," takes about five minutes.",[33,51,52,53,56,57,60],{},"The base URL, which is the same for every plan: ",[14,54,55],{},"https:\u002F\u002Fapi.wapito.com\u002Fv1",". The OpenAPI\ndocument carries it in its ",[14,58,59],{},"servers"," block, so every importer below picks it up as a variable.",[10,62,63,64,67],{},"Nothing else. The document declares one security scheme, ",[14,65,66],{},"bearerAuth",", and every operation uses\nit, which is why a single collection-level authorization setting covers all of them.",[25,69,71],{"id":70},"postman","Postman",[73,74,75,89,120,137,163],"ol",{},[33,76,77,78,81,82,84,85,88],{},"In a workspace, choose ",[41,79,80],{},"Import",", then paste ",[14,83,16],{}," into the\nlink\u002FURL field (or download the file and drop it in). Postman recognises it as OpenAPI 3.1 and\noffers to import it as a ",[41,86,87],{},"Postman collection","; accept the defaults.",[33,90,91,92,95,96,100,101,100,104,107,108,111,112,115,116,119],{},"Open the new ",[41,93,94],{},"Wapito API"," collection. Its requests are grouped into folders by tag —\n",[97,98,99],"em",{},"messages",", ",[97,102,103],{},"groups",[97,105,106],{},"webhooks"," and so on — and each carries the example body from the\nreference, so a ",[14,109,110],{},"POST \u002Fmessages\u002Ftext"," already has a ",[14,113,114],{},"to"," and a ",[14,117,118],{},"body"," to edit.",[33,121,122,123,126,127,130,131,133,134,136],{},"Open the collection's ",[41,124,125],{},"Variables"," tab. The import created ",[14,128,129],{},"baseUrl"," from the ",[14,132,59],{},"\nblock; confirm it reads ",[14,135,55],{},".",[33,138,122,139,142,143,146,147,150,151,154,155,158,159,162],{},[41,140,141],{},"Authorization"," tab, set the type to ",[41,144,145],{},"Bearer Token"," and the token\nto ",[14,148,149],{},"{{wapitoToken}}",". Then add ",[14,152,153],{},"wapitoToken"," as a variable — in a Postman ",[97,156,157],{},"environment"," rather\nthan on the collection, and in its ",[41,160,161],{},"current value"," only (see the note on sharing below).",[33,164,165,166,169,170,173,174,177,178,181,182,186],{},"Select the environment and send ",[14,167,168],{},"GET \u002Fchannel",". A ",[14,171,172],{},"200"," with your channel's name and\n",[14,175,176],{},"\"status\": \"connected\""," means the token and the base URL are right; a ",[14,179,180],{},"401"," means one of them\nis not — the ",[19,183,185],{"href":184},"\u002Fdocs\u002Fauthentication\u002F","authentication guide"," lists the three codes.",[10,188,189,190,193,194,197],{},"Postman shows the OpenAPI examples for each response as well, so you can read what a ",[14,191,192],{},"429"," or a\n",[14,195,196],{},"409"," looks like before you ever get one.",[25,199,201],{"id":200},"insomnia","Insomnia",[10,203,204,205,207,208,211,212,214,215,218,219,222,223,226,227,229,230,233,234,236],{},"Choose ",[41,206,80],{}," from the workspace menu, pick ",[41,209,210],{},"URL"," and paste\n",[14,213,16],{},". Insomnia creates a collection with the same tag folders and a\nbase environment holding ",[14,216,217],{},"base_url",". Open the collection's environment, add ",[14,220,221],{},"token",", and set the\ncollection's ",[41,224,225],{},"Auth"," to ",[97,228,145],{}," with ",[14,231,232],{},"{{ _.token }}",". Requests inherit it. Send\n",[14,235,168],{}," to check.",[25,238,240],{"id":239},"bruno","Bruno",[10,242,243,244,247,248,251,252,226,254,229,256,259,260,262,263,265,266,269,270,273],{},"Bruno keeps collections as plain files, which suits a repository. Download the document first\n(",[14,245,246],{},"curl -O https:\u002F\u002Fwapito.com\u002Fopenapi.yaml","), then choose ",[41,249,250],{},"Import Collection → OpenAPI V3 File","\nand pick it. In the collection settings, set ",[41,253,225],{},[97,255,145],{},[14,257,258],{},"{{token}}",", create\nan environment with ",[14,261,129],{}," and ",[14,264,221],{},", and commit the collection folder to your repo with the\nenvironment file listed in ",[14,267,268],{},".gitignore",". Bruno's ",[14,271,272],{},".bru"," files diff cleanly, so a re-import after\nan API change shows exactly which requests moved.",[25,275,277],{"id":276},"the-same-thing-without-a-desktop-app","The same thing without a desktop app",[10,279,280,281,285],{},"The ",[19,282,284],{"href":283},"\u002Fdocs\u002Freference\u002F","interactive reference"," is the same OpenAPI document rendered in the\nbrowser with a request runner: paste a token into its authentication field — it stays in your\nbrowser — pick an operation, and send. It is the fastest way to try one call, and the reference\npages beside it show the same request in twelve languages.",[10,287,288,289,292],{},"And for anything you will run twice, ",[14,290,291],{},"curl"," with the token in the environment beats every GUI:",[294,295,296,347,445],"code-group",{},[297,298,303],"pre",{"className":299,"code":300,"filename":291,"language":301,"meta":302,"style":302},"language-bash shiki shiki-themes github-light-default github-dark-default","export WAPITO_TOKEN=\"wpt_…\"\ncurl https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fchannel -H \"Authorization: Bearer $WAPITO_TOKEN\"\n","bash","",[14,304,305,325],{"__ignoreMap":302},[306,307,310,314,318,321],"span",{"class":308,"line":309},"line",1,[306,311,313],{"class":312},"sjeE4","export",[306,315,317],{"class":316},"s4rv2"," WAPITO_TOKEN",[306,319,320],{"class":312},"=",[306,322,324],{"class":323},"sSVrQ","\"wpt_…\"\n",[306,326,328,331,334,338,341,344],{"class":308,"line":327},2,[306,329,291],{"class":330},"sTDnQ",[306,332,333],{"class":323}," https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fchannel",[306,335,337],{"class":336},"sHrmB"," -H",[306,339,340],{"class":323}," \"Authorization: Bearer ",[306,342,343],{"class":316},"$WAPITO_TOKEN",[306,345,346],{"class":323},"\"\n",[297,348,353],{"className":349,"code":350,"filename":351,"language":352,"meta":302,"style":302},"language-javascript shiki shiki-themes github-light-default github-dark-default","\u002F\u002F The generated snippet on every reference page is exactly this shape.\nconst res = await fetch('https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fchannel', {\n  headers: { Authorization: `Bearer ${process.env.WAPITO_TOKEN}` },\n});\nconsole.log(await res.json());\n","Node","javascript",[14,354,355,361,388,416,422],{"__ignoreMap":302},[306,356,357],{"class":308,"line":309},[306,358,360],{"class":359},"sU953","\u002F\u002F The generated snippet on every reference page is exactly this shape.\n",[306,362,363,366,369,372,375,379,382,385],{"class":308,"line":327},[306,364,365],{"class":312},"const",[306,367,368],{"class":336}," res",[306,370,371],{"class":312}," =",[306,373,374],{"class":312}," await",[306,376,378],{"class":377},"sbjLL"," fetch",[306,380,381],{"class":316},"(",[306,383,384],{"class":323},"'https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fchannel'",[306,386,387],{"class":316},", {\n",[306,389,391,394,397,400,402,405,407,410,413],{"class":308,"line":390},3,[306,392,393],{"class":316},"  headers: { Authorization: ",[306,395,396],{"class":323},"`Bearer ${",[306,398,399],{"class":316},"process",[306,401,136],{"class":323},[306,403,404],{"class":316},"env",[306,406,136],{"class":323},[306,408,409],{"class":336},"WAPITO_TOKEN",[306,411,412],{"class":323},"}`",[306,414,415],{"class":316}," },\n",[306,417,419],{"class":308,"line":418},4,[306,420,421],{"class":316},"});\n",[306,423,425,428,431,433,436,439,442],{"class":308,"line":424},5,[306,426,427],{"class":316},"console.",[306,429,430],{"class":377},"log",[306,432,381],{"class":316},[306,434,435],{"class":312},"await",[306,437,438],{"class":316}," res.",[306,440,441],{"class":377},"json",[306,443,444],{"class":316},"());\n",[297,446,451],{"className":447,"code":448,"filename":449,"language":450,"meta":302,"style":302},"language-python shiki shiki-themes github-light-default github-dark-default","import os\nimport requests\n\nprint(requests.get(\n    \"https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fchannel\",\n    headers={\"Authorization\": f\"Bearer {os.environ['WAPITO_TOKEN']}\"},\n    timeout=(5, 30),\n).json())\n","Python","python",[14,452,453,461,468,474,482,490,533,554],{"__ignoreMap":302},[306,454,455,458],{"class":308,"line":309},[306,456,457],{"class":312},"import",[306,459,460],{"class":316}," os\n",[306,462,463,465],{"class":308,"line":327},[306,464,457],{"class":312},[306,466,467],{"class":316}," requests\n",[306,469,470],{"class":308,"line":390},[306,471,473],{"emptyLinePlaceholder":472},true,"\n",[306,475,476,479],{"class":308,"line":418},[306,477,478],{"class":336},"print",[306,480,481],{"class":316},"(requests.get(\n",[306,483,484,487],{"class":308,"line":424},[306,485,486],{"class":323},"    \"https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fchannel\"",[306,488,489],{"class":316},",\n",[306,491,493,496,498,501,504,507,510,513,515,518,521,524,527,530],{"class":308,"line":492},6,[306,494,495],{"class":330},"    headers",[306,497,320],{"class":312},[306,499,500],{"class":316},"{",[306,502,503],{"class":323},"\"Authorization\"",[306,505,506],{"class":316},": ",[306,508,509],{"class":312},"f",[306,511,512],{"class":323},"\"Bearer ",[306,514,500],{"class":312},[306,516,517],{"class":316},"os.environ[",[306,519,520],{"class":323},"'WAPITO_TOKEN'",[306,522,523],{"class":316},"]",[306,525,526],{"class":312},"}",[306,528,529],{"class":323},"\"",[306,531,532],{"class":316},"},\n",[306,534,536,539,541,543,546,548,551],{"class":308,"line":535},7,[306,537,538],{"class":330},"    timeout",[306,540,320],{"class":312},[306,542,381],{"class":316},[306,544,545],{"class":336},"5",[306,547,100],{"class":316},[306,549,550],{"class":336},"30",[306,552,553],{"class":316},"),\n",[306,555,557],{"class":308,"line":556},8,[306,558,559],{"class":316},").json())\n",[25,561,563],{"id":562},"working-with-the-collection","Working with the collection",[10,565,566,569,570,572],{},[41,567,568],{},"Sends are real."," A ",[14,571,110],{}," from Postman sends a WhatsApp message from your\nlinked number and counts against the daily quota exactly like one from production. Point the\ncollection at a sandbox channel linked to a number of your own, and message yourself.",[10,574,575,569,578,581,582,585,586,588],{},[41,576,577],{},"Use one environment per channel.",[14,579,580],{},"sandbox"," environment and a ",[14,583,584],{},"production"," one, each with\nits own ",[14,587,153],{},", is the cheapest way to make sure a test never leaves the wrong number.\nSwitching channels is switching environments; nothing in the requests changes, because the token\nis the only thing that names a channel.",[10,590,591,594,595,598,599,601,602,604],{},[41,592,593],{},"Keep tokens out of synced workspaces."," In a team workspace Postman syncs collection variables\nand environments' ",[97,596,597],{},"initial values"," to its cloud; only the ",[97,600,161],{}," stays on your machine.\nPut ",[14,603,153],{}," in the current value and leave the initial value empty, or the token is a\nshared secret the moment you press save. Insomnia and Bruno keep environments local unless you\nopt into sync; check before you enable it.",[10,606,607,610,611,614,615,619],{},[41,608,609],{},"Re-import after a changelog entry."," The document's ",[14,612,613],{},"info.version"," moves when the API changes,\nand the ",[19,616,618],{"href":617},"\u002Fchangelog\u002F","changelog"," says what changed. Re-importing replaces the collection's\nrequests but keeps your variables, so it is safe to do often. Breaking changes are announced\nbefore they ship, never after.",[10,621,622,625,626,629,630,633,634,637,638,641],{},[41,623,624],{},"Expect some 501s."," Around thirty operations are published for contract stability — the\ncommunities and business-catalog endpoints, interactive and carousel messages, story listing\nand a few more — and answer ",[14,627,628],{},"501 feature_not_available"," today. They are marked ",[14,631,632],{},"x-phase: 2"," in\nthe document and shown as planned in the reference. A ",[14,635,636],{},"501 engine_unsupported_feature",", by contrast, means the\noperation exists but not on the engine this channel runs; its ",[14,639,640],{},"details.hint"," says which engine to\nswitch to.",[10,643,644,647,648,652,653,655],{},[41,645,646],{},"Read the errors tab."," Every operation in the document lists the error codes it can return, and\neach code links to a page under ",[19,649,651],{"href":650},"\u002Fdocs\u002Ferrors\u002F","error codes"," with its cause and fix. When a\nrequest in Postman comes back red, the ",[14,654,14],{}," in the body is the thing to search for.",[657,658,661],"callout",{"title":659,"type":660},"Which document is the source of truth?","info",[10,662,663,665,666,136],{},[14,664,16],{}," is served from the same build as this documentation and is\nidentical to the file the API's contract test runs against. If Postman and the reference pages\never disagree, the document wins — and it is a bug we want to hear about at\n",[19,667,669],{"href":668},"mailto:support@wapito.com","support@wapito.com",[671,672,673],"style",{},"html pre.shiki code .sjeE4, html code.shiki .sjeE4{--shiki-default:#CF222E;--shiki-dark:#FF7B72}html pre.shiki code .s4rv2, html code.shiki .s4rv2{--shiki-default:#1F2328;--shiki-dark:#E6EDF3}html pre.shiki code .sSVrQ, html code.shiki .sSVrQ{--shiki-default:#0A3069;--shiki-dark:#A5D6FF}html pre.shiki code .sTDnQ, html code.shiki .sTDnQ{--shiki-default:#953800;--shiki-dark:#FFA657}html pre.shiki code .sHrmB, html code.shiki .sHrmB{--shiki-default:#0550AE;--shiki-dark:#79C0FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sU953, html code.shiki .sU953{--shiki-default:#6E7781;--shiki-dark:#8B949E}html pre.shiki code .sbjLL, html code.shiki .sbjLL{--shiki-default:#8250DF;--shiki-dark:#D2A8FF}",{"title":302,"searchDepth":327,"depth":327,"links":675},[676,677,678,679,680,681],{"id":27,"depth":327,"text":28},{"id":70,"depth":327,"text":71},{"id":200,"depth":327,"text":201},{"id":239,"depth":327,"text":240},{"id":276,"depth":327,"text":277},{"id":562,"depth":327,"text":563},"2026-09-15","Import the Wapito OpenAPI document into Postman, set the Bearer token and base URL once, and run every endpoint against your own channel.","md",{},"\u002Fdocs\u002Fpostman",{"title":5,"description":683},"docs\u002Fpostman",[70,690,691],"openapi","tooling",null,"Sed2j2BIjtWhZ_PlSDcCYkI3v-llfY0AJiAZxllbVUY",1790464894220]