[{"data":1,"prerenderedAt":1722},["ShallowReactive",2],{"doc:\u002Fv\u002F2026.3\u002Fbuild-with-ai\u002Fcall-workspace369-over-http-builder-api":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"section":10,"version":11,"lastUpdated":12,"body":13,"_type":1716,"_id":1717,"_source":1718,"_file":1719,"_stem":1720,"_extension":1721},"\u002Fv\u002F2026.3\u002Fbuild-with-ai\u002Fcall-workspace369-over-http-builder-api","build-with-ai",false,"","Call Workspace369 over HTTP (Builder API)","Call Workspace369 from apps built with Lovable, v0, Bolt or Replit over HTTPS and JSON, with a URL per resource, an OpenAPI spec and MCP permissions.","Build with AI","2026.3","2026-10-20",{"type":14,"children":15,"toc":1708},"root",[16,24,29,36,108,113,119,128,149,155,174,186,237,247,1040,1076,1121,1149,1155,1168,1179,1213,1226,1232,1244,1703],{"type":17,"tag":18,"props":19,"children":20},"element","p",{},[21],{"type":22,"value":23},"text","Apps built with Lovable, v0, Bolt or Replit can't connect to an MCP server while they run. They call HTTP. The Builder API gives them the same Workspace369 tools as the MCP server, over plain HTTPS and JSON.",{"type":17,"tag":18,"props":25,"children":26},{},[27],{"type":22,"value":28},"It runs the same tools as MCP, so it has the same permissions, approvals, audit log and usage. A call made through it is billed exactly like the same call made over MCP.",{"type":17,"tag":30,"props":31,"children":33},"h2",{"id":32},"who-can-use-it",[34],{"type":22,"value":35},"Who can use it",{"type":17,"tag":37,"props":38,"children":39},"ul",{},[40,63,68,81],{"type":17,"tag":41,"props":42,"children":43},"li",{},[44,46,53,55,61],{"type":22,"value":45},"The Specialist plan and up (Specialist, Commander, Enterprise). On any lower plan (Cadet, Voyager) calls return ",{"type":17,"tag":47,"props":48,"children":50},"code",{"className":49},[],[51],{"type":22,"value":52},"403",{"type":22,"value":54}," with ",{"type":17,"tag":47,"props":56,"children":58},{"className":57},[],[59],{"type":22,"value":60},"plan_required",{"type":22,"value":62},". MCP itself works on every plan.",{"type":17,"tag":41,"props":64,"children":65},{},[66],{"type":22,"value":67},"An admin must turn on AI connections for the workspace.",{"type":17,"tag":41,"props":69,"children":70},{},[71,73,79],{"type":22,"value":72},"You need a personal access token (it starts with ",{"type":17,"tag":47,"props":74,"children":76},{"className":75},[],[77],{"type":22,"value":78},"mcp_pat_",{"type":22,"value":80},"). Sign-in tokens from Claude or ChatGPT don't work here.",{"type":17,"tag":41,"props":82,"children":83},{},[84,86,91,92,98,100,106],{"type":22,"value":85},"The token's scopes decide what it can do. A call outside its scopes returns ",{"type":17,"tag":47,"props":87,"children":89},{"className":88},[],[90],{"type":22,"value":52},{"type":22,"value":54},{"type":17,"tag":47,"props":93,"children":95},{"className":94},[],[96],{"type":22,"value":97},"insufficient_scope",{"type":22,"value":99},", and ",{"type":17,"tag":47,"props":101,"children":103},{"className":102},[],[104],{"type":22,"value":105},"details.required_scope",{"type":22,"value":107}," names the scope it needs.",{"type":17,"tag":18,"props":109,"children":110},{},[111],{"type":22,"value":112},"Keep the token on your server. Never put it in browser code or a public repo.",{"type":17,"tag":30,"props":114,"children":116},{"id":115},"base-url",[117],{"type":22,"value":118},"Base URL",{"type":17,"tag":18,"props":120,"children":121},{},[122],{"type":17,"tag":47,"props":123,"children":125},{"className":124},[],[126],{"type":22,"value":127},"https:\u002F\u002Fmcp.workspace369.com\u002Fv1",{"type":17,"tag":18,"props":129,"children":130},{},[131,133,139,141,147],{"type":22,"value":132},"The full spec is public (no token needed) at ",{"type":17,"tag":47,"props":134,"children":136},{"className":135},[],[137],{"type":22,"value":138},"GET \u002Fv1\u002Fopenapi.json",{"type":22,"value":140},". Point your code generator at it. The spec lists paths only; set the base URL ",{"type":17,"tag":47,"props":142,"children":144},{"className":143},[],[145],{"type":22,"value":146},"https:\u002F\u002Fmcp.workspace369.com",{"type":22,"value":148}," in your generator.",{"type":17,"tag":30,"props":150,"children":152},{"id":151},"two-ways-to-call",[153],{"type":22,"value":154},"Two ways to call",{"type":17,"tag":18,"props":156,"children":157},{},[158,164,166,172],{"type":17,"tag":159,"props":160,"children":161},"strong",{},[162],{"type":22,"value":163},"Any tool by name:",{"type":22,"value":165}," ",{"type":17,"tag":47,"props":167,"children":169},{"className":168},[],[170],{"type":22,"value":171},"POST \u002Fv1\u002Ftools\u002F{name}",{"type":22,"value":173}," with the tool's input as the JSON body. The answer is the tool's output. Keys the tool doesn't know are ignored. The tool names are in the MCP tools reference.",{"type":17,"tag":175,"props":176,"children":181},"pre",{"className":177,"code":179,"language":180,"meta":7},[178],"language-bash","curl -s https:\u002F\u002Fmcp.workspace369.com\u002Fv1\u002Ftools\u002Fclients_search \\\n  -H \"Authorization: Bearer $W369_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"query\":\"acme\"}'\n","bash",[182],{"type":17,"tag":47,"props":183,"children":184},{"__ignoreMap":7},[185],{"type":22,"value":179},{"type":17,"tag":18,"props":187,"children":188},{},[189,191,197,199,205,207,213,214,220,222,228,229,235],{"type":22,"value":190},"Some tools run only inside the app and can't be called here (",{"type":17,"tag":47,"props":192,"children":194},{"className":193},[],[195],{"type":22,"value":196},"batch_apply",{"type":22,"value":198},", and the workflow tools ",{"type":17,"tag":47,"props":200,"children":202},{"className":201},[],[203],{"type":22,"value":204},"automations_create_draft",{"type":22,"value":206},", ",{"type":17,"tag":47,"props":208,"children":210},{"className":209},[],[211],{"type":22,"value":212},"automations_activate",{"type":22,"value":206},{"type":17,"tag":47,"props":215,"children":217},{"className":216},[],[218],{"type":22,"value":219},"automations_retry",{"type":22,"value":221},"). They return ",{"type":17,"tag":47,"props":223,"children":225},{"className":224},[],[226],{"type":22,"value":227},"404",{"type":22,"value":54},{"type":17,"tag":47,"props":230,"children":232},{"className":231},[],[233],{"type":22,"value":234},"tool_not_found",{"type":22,"value":236},".",{"type":17,"tag":18,"props":238,"children":239},{},[240,245],{"type":17,"tag":159,"props":241,"children":242},{},[243],{"type":22,"value":244},"Resource paths:",{"type":22,"value":246}," shortcuts onto the same tools.",{"type":17,"tag":248,"props":249,"children":250},"table",{},[251,275],{"type":17,"tag":252,"props":253,"children":254},"thead",{},[255],{"type":17,"tag":256,"props":257,"children":258},"tr",{},[259,265,270],{"type":17,"tag":260,"props":261,"children":262},"th",{},[263],{"type":22,"value":264},"Method and path",{"type":17,"tag":260,"props":266,"children":267},{},[268],{"type":22,"value":269},"Tool",{"type":17,"tag":260,"props":271,"children":272},{},[273],{"type":22,"value":274},"Scope",{"type":17,"tag":276,"props":277,"children":278},"tbody",{},[279,324,368,412,456,485,529,573,602,646,676,706,750,794,848,892,936,966,996],{"type":17,"tag":256,"props":280,"children":281},{},[282,299,315],{"type":17,"tag":283,"props":284,"children":285},"td",{},[286,292,293],{"type":17,"tag":47,"props":287,"children":289},{"className":288},[],[290],{"type":22,"value":291},"GET \u002Fv1\u002Fclients",{"type":22,"value":206},{"type":17,"tag":47,"props":294,"children":296},{"className":295},[],[297],{"type":22,"value":298},"GET \u002Fv1\u002Fclients\u002F{id}",{"type":17,"tag":283,"props":300,"children":301},{},[302,308,309],{"type":17,"tag":47,"props":303,"children":305},{"className":304},[],[306],{"type":22,"value":307},"clients_search",{"type":22,"value":206},{"type":17,"tag":47,"props":310,"children":312},{"className":311},[],[313],{"type":22,"value":314},"clients_get",{"type":17,"tag":283,"props":316,"children":317},{},[318],{"type":17,"tag":47,"props":319,"children":321},{"className":320},[],[322],{"type":22,"value":323},"clients:read",{"type":17,"tag":256,"props":325,"children":326},{},[327,343,359],{"type":17,"tag":283,"props":328,"children":329},{},[330,336,337],{"type":17,"tag":47,"props":331,"children":333},{"className":332},[],[334],{"type":22,"value":335},"POST \u002Fv1\u002Fclients",{"type":22,"value":206},{"type":17,"tag":47,"props":338,"children":340},{"className":339},[],[341],{"type":22,"value":342},"PATCH \u002Fv1\u002Fclients\u002F{id}",{"type":17,"tag":283,"props":344,"children":345},{},[346,352,353],{"type":17,"tag":47,"props":347,"children":349},{"className":348},[],[350],{"type":22,"value":351},"clients_create",{"type":22,"value":206},{"type":17,"tag":47,"props":354,"children":356},{"className":355},[],[357],{"type":22,"value":358},"clients_update",{"type":17,"tag":283,"props":360,"children":361},{},[362],{"type":17,"tag":47,"props":363,"children":365},{"className":364},[],[366],{"type":22,"value":367},"clients:write",{"type":17,"tag":256,"props":369,"children":370},{},[371,387,403],{"type":17,"tag":283,"props":372,"children":373},{},[374,380,381],{"type":17,"tag":47,"props":375,"children":377},{"className":376},[],[378],{"type":22,"value":379},"GET \u002Fv1\u002Fproposals",{"type":22,"value":206},{"type":17,"tag":47,"props":382,"children":384},{"className":383},[],[385],{"type":22,"value":386},"GET \u002Fv1\u002Fproposals\u002F{id}",{"type":17,"tag":283,"props":388,"children":389},{},[390,396,397],{"type":17,"tag":47,"props":391,"children":393},{"className":392},[],[394],{"type":22,"value":395},"proposals_search",{"type":22,"value":206},{"type":17,"tag":47,"props":398,"children":400},{"className":399},[],[401],{"type":22,"value":402},"proposals_get",{"type":17,"tag":283,"props":404,"children":405},{},[406],{"type":17,"tag":47,"props":407,"children":409},{"className":408},[],[410],{"type":22,"value":411},"proposals:read",{"type":17,"tag":256,"props":413,"children":414},{},[415,431,447],{"type":17,"tag":283,"props":416,"children":417},{},[418,424,425],{"type":17,"tag":47,"props":419,"children":421},{"className":420},[],[422],{"type":22,"value":423},"POST \u002Fv1\u002Fproposals",{"type":22,"value":206},{"type":17,"tag":47,"props":426,"children":428},{"className":427},[],[429],{"type":22,"value":430},"PATCH \u002Fv1\u002Fproposals\u002F{id}",{"type":17,"tag":283,"props":432,"children":433},{},[434,440,441],{"type":17,"tag":47,"props":435,"children":437},{"className":436},[],[438],{"type":22,"value":439},"proposals_create_draft",{"type":22,"value":206},{"type":17,"tag":47,"props":442,"children":444},{"className":443},[],[445],{"type":22,"value":446},"proposals_update_draft",{"type":17,"tag":283,"props":448,"children":449},{},[450],{"type":17,"tag":47,"props":451,"children":453},{"className":452},[],[454],{"type":22,"value":455},"proposals:write",{"type":17,"tag":256,"props":457,"children":458},{},[459,468,477],{"type":17,"tag":283,"props":460,"children":461},{},[462],{"type":17,"tag":47,"props":463,"children":465},{"className":464},[],[466],{"type":22,"value":467},"POST \u002Fv1\u002Fproposals\u002F{id}\u002Fsend",{"type":17,"tag":283,"props":469,"children":470},{},[471],{"type":17,"tag":47,"props":472,"children":474},{"className":473},[],[475],{"type":22,"value":476},"proposals_send",{"type":17,"tag":283,"props":478,"children":479},{},[480],{"type":17,"tag":47,"props":481,"children":483},{"className":482},[],[484],{"type":22,"value":455},{"type":17,"tag":256,"props":486,"children":487},{},[488,504,520],{"type":17,"tag":283,"props":489,"children":490},{},[491,497,498],{"type":17,"tag":47,"props":492,"children":494},{"className":493},[],[495],{"type":22,"value":496},"GET \u002Fv1\u002Finvoices",{"type":22,"value":206},{"type":17,"tag":47,"props":499,"children":501},{"className":500},[],[502],{"type":22,"value":503},"GET \u002Fv1\u002Finvoices\u002F{id}",{"type":17,"tag":283,"props":505,"children":506},{},[507,513,514],{"type":17,"tag":47,"props":508,"children":510},{"className":509},[],[511],{"type":22,"value":512},"invoices_search",{"type":22,"value":206},{"type":17,"tag":47,"props":515,"children":517},{"className":516},[],[518],{"type":22,"value":519},"invoices_get",{"type":17,"tag":283,"props":521,"children":522},{},[523],{"type":17,"tag":47,"props":524,"children":526},{"className":525},[],[527],{"type":22,"value":528},"invoices:read",{"type":17,"tag":256,"props":530,"children":531},{},[532,548,564],{"type":17,"tag":283,"props":533,"children":534},{},[535,541,542],{"type":17,"tag":47,"props":536,"children":538},{"className":537},[],[539],{"type":22,"value":540},"POST \u002Fv1\u002Finvoices",{"type":22,"value":206},{"type":17,"tag":47,"props":543,"children":545},{"className":544},[],[546],{"type":22,"value":547},"PATCH \u002Fv1\u002Finvoices\u002F{id}",{"type":17,"tag":283,"props":549,"children":550},{},[551,557,558],{"type":17,"tag":47,"props":552,"children":554},{"className":553},[],[555],{"type":22,"value":556},"invoices_create_draft",{"type":22,"value":206},{"type":17,"tag":47,"props":559,"children":561},{"className":560},[],[562],{"type":22,"value":563},"invoices_update_draft",{"type":17,"tag":283,"props":565,"children":566},{},[567],{"type":17,"tag":47,"props":568,"children":570},{"className":569},[],[571],{"type":22,"value":572},"invoices:write",{"type":17,"tag":256,"props":574,"children":575},{},[576,585,594],{"type":17,"tag":283,"props":577,"children":578},{},[579],{"type":17,"tag":47,"props":580,"children":582},{"className":581},[],[583],{"type":22,"value":584},"POST \u002Fv1\u002Finvoices\u002F{id}\u002Fsend",{"type":17,"tag":283,"props":586,"children":587},{},[588],{"type":17,"tag":47,"props":589,"children":591},{"className":590},[],[592],{"type":22,"value":593},"invoices_send",{"type":17,"tag":283,"props":595,"children":596},{},[597],{"type":17,"tag":47,"props":598,"children":600},{"className":599},[],[601],{"type":22,"value":572},{"type":17,"tag":256,"props":603,"children":604},{},[605,621,637],{"type":17,"tag":283,"props":606,"children":607},{},[608,614,615],{"type":17,"tag":47,"props":609,"children":611},{"className":610},[],[612],{"type":22,"value":613},"GET \u002Fv1\u002Fcontracts",{"type":22,"value":206},{"type":17,"tag":47,"props":616,"children":618},{"className":617},[],[619],{"type":22,"value":620},"GET \u002Fv1\u002Fcontracts\u002F{id}",{"type":17,"tag":283,"props":622,"children":623},{},[624,630,631],{"type":17,"tag":47,"props":625,"children":627},{"className":626},[],[628],{"type":22,"value":629},"contracts_search",{"type":22,"value":206},{"type":17,"tag":47,"props":632,"children":634},{"className":633},[],[635],{"type":22,"value":636},"contracts_get",{"type":17,"tag":283,"props":638,"children":639},{},[640],{"type":17,"tag":47,"props":641,"children":643},{"className":642},[],[644],{"type":22,"value":645},"contracts:read",{"type":17,"tag":256,"props":647,"children":648},{},[649,658,667],{"type":17,"tag":283,"props":650,"children":651},{},[652],{"type":17,"tag":47,"props":653,"children":655},{"className":654},[],[656],{"type":22,"value":657},"POST \u002Fv1\u002Fcontracts",{"type":17,"tag":283,"props":659,"children":660},{},[661],{"type":17,"tag":47,"props":662,"children":664},{"className":663},[],[665],{"type":22,"value":666},"contracts_create_draft",{"type":17,"tag":283,"props":668,"children":669},{},[670],{"type":17,"tag":47,"props":671,"children":673},{"className":672},[],[674],{"type":22,"value":675},"contracts:write",{"type":17,"tag":256,"props":677,"children":678},{},[679,688,697],{"type":17,"tag":283,"props":680,"children":681},{},[682],{"type":17,"tag":47,"props":683,"children":685},{"className":684},[],[686],{"type":22,"value":687},"POST \u002Fv1\u002Fcontracts\u002F{id}\u002Fsend",{"type":17,"tag":283,"props":689,"children":690},{},[691],{"type":17,"tag":47,"props":692,"children":694},{"className":693},[],[695],{"type":22,"value":696},"contracts_send",{"type":17,"tag":283,"props":698,"children":699},{},[700],{"type":17,"tag":47,"props":701,"children":703},{"className":702},[],[704],{"type":22,"value":705},"contracts:send",{"type":17,"tag":256,"props":707,"children":708},{},[709,725,741],{"type":17,"tag":283,"props":710,"children":711},{},[712,718,719],{"type":17,"tag":47,"props":713,"children":715},{"className":714},[],[716],{"type":22,"value":717},"GET \u002Fv1\u002Fprojects",{"type":22,"value":206},{"type":17,"tag":47,"props":720,"children":722},{"className":721},[],[723],{"type":22,"value":724},"GET \u002Fv1\u002Fprojects\u002F{id}",{"type":17,"tag":283,"props":726,"children":727},{},[728,734,735],{"type":17,"tag":47,"props":729,"children":731},{"className":730},[],[732],{"type":22,"value":733},"projects_search",{"type":22,"value":206},{"type":17,"tag":47,"props":736,"children":738},{"className":737},[],[739],{"type":22,"value":740},"projects_get",{"type":17,"tag":283,"props":742,"children":743},{},[744],{"type":17,"tag":47,"props":745,"children":747},{"className":746},[],[748],{"type":22,"value":749},"projects:read",{"type":17,"tag":256,"props":751,"children":752},{},[753,769,785],{"type":17,"tag":283,"props":754,"children":755},{},[756,762,763],{"type":17,"tag":47,"props":757,"children":759},{"className":758},[],[760],{"type":22,"value":761},"POST \u002Fv1\u002Fprojects",{"type":22,"value":206},{"type":17,"tag":47,"props":764,"children":766},{"className":765},[],[767],{"type":22,"value":768},"PATCH \u002Fv1\u002Fprojects\u002F{id}",{"type":17,"tag":283,"props":770,"children":771},{},[772,778,779],{"type":17,"tag":47,"props":773,"children":775},{"className":774},[],[776],{"type":22,"value":777},"projects_create",{"type":22,"value":206},{"type":17,"tag":47,"props":780,"children":782},{"className":781},[],[783],{"type":22,"value":784},"projects_update",{"type":17,"tag":283,"props":786,"children":787},{},[788],{"type":17,"tag":47,"props":789,"children":791},{"className":790},[],[792],{"type":22,"value":793},"projects:write",{"type":17,"tag":256,"props":795,"children":796},{},[797,813,839],{"type":17,"tag":283,"props":798,"children":799},{},[800,806,807],{"type":17,"tag":47,"props":801,"children":803},{"className":802},[],[804],{"type":22,"value":805},"GET \u002Fv1\u002Ftasks",{"type":22,"value":206},{"type":17,"tag":47,"props":808,"children":810},{"className":809},[],[811],{"type":22,"value":812},"GET \u002Fv1\u002Ftasks\u002F{id}",{"type":17,"tag":283,"props":814,"children":815},{},[816,822,823,829,831,837],{"type":17,"tag":47,"props":817,"children":819},{"className":818},[],[820],{"type":22,"value":821},"tasks_search",{"type":22,"value":206},{"type":17,"tag":47,"props":824,"children":826},{"className":825},[],[827],{"type":22,"value":828},"tasks_get",{"type":22,"value":830}," (also needs ",{"type":17,"tag":47,"props":832,"children":834},{"className":833},[],[835],{"type":22,"value":836},"?board_id=",{"type":22,"value":838},")",{"type":17,"tag":283,"props":840,"children":841},{},[842],{"type":17,"tag":47,"props":843,"children":845},{"className":844},[],[846],{"type":22,"value":847},"tasks:read",{"type":17,"tag":256,"props":849,"children":850},{},[851,867,883],{"type":17,"tag":283,"props":852,"children":853},{},[854,860,861],{"type":17,"tag":47,"props":855,"children":857},{"className":856},[],[858],{"type":22,"value":859},"POST \u002Fv1\u002Ftasks",{"type":22,"value":206},{"type":17,"tag":47,"props":862,"children":864},{"className":863},[],[865],{"type":22,"value":866},"PATCH \u002Fv1\u002Ftasks\u002F{id}",{"type":17,"tag":283,"props":868,"children":869},{},[870,876,877],{"type":17,"tag":47,"props":871,"children":873},{"className":872},[],[874],{"type":22,"value":875},"tasks_create",{"type":22,"value":206},{"type":17,"tag":47,"props":878,"children":880},{"className":879},[],[881],{"type":22,"value":882},"tasks_update",{"type":17,"tag":283,"props":884,"children":885},{},[886],{"type":17,"tag":47,"props":887,"children":889},{"className":888},[],[890],{"type":22,"value":891},"tasks:write",{"type":17,"tag":256,"props":893,"children":894},{},[895,911,927],{"type":17,"tag":283,"props":896,"children":897},{},[898,904,905],{"type":17,"tag":47,"props":899,"children":901},{"className":900},[],[902],{"type":22,"value":903},"GET \u002Fv1\u002Frequests",{"type":22,"value":206},{"type":17,"tag":47,"props":906,"children":908},{"className":907},[],[909],{"type":22,"value":910},"GET \u002Fv1\u002Frequests\u002F{id}",{"type":17,"tag":283,"props":912,"children":913},{},[914,920,921],{"type":17,"tag":47,"props":915,"children":917},{"className":916},[],[918],{"type":22,"value":919},"requests_search",{"type":22,"value":206},{"type":17,"tag":47,"props":922,"children":924},{"className":923},[],[925],{"type":22,"value":926},"requests_get",{"type":17,"tag":283,"props":928,"children":929},{},[930],{"type":17,"tag":47,"props":931,"children":933},{"className":932},[],[934],{"type":22,"value":935},"requests:read",{"type":17,"tag":256,"props":937,"children":938},{},[939,948,957],{"type":17,"tag":283,"props":940,"children":941},{},[942],{"type":17,"tag":47,"props":943,"children":945},{"className":944},[],[946],{"type":22,"value":947},"PATCH \u002Fv1\u002Frequests\u002F{id}",{"type":17,"tag":283,"props":949,"children":950},{},[951],{"type":17,"tag":47,"props":952,"children":954},{"className":953},[],[955],{"type":22,"value":956},"requests_update_status",{"type":17,"tag":283,"props":958,"children":959},{},[960],{"type":17,"tag":47,"props":961,"children":963},{"className":962},[],[964],{"type":22,"value":965},"requests:write",{"type":17,"tag":256,"props":967,"children":968},{},[969,978,987],{"type":17,"tag":283,"props":970,"children":971},{},[972],{"type":17,"tag":47,"props":973,"children":975},{"className":974},[],[976],{"type":22,"value":977},"GET \u002Fv1\u002Fcalendar\u002Fevents",{"type":17,"tag":283,"props":979,"children":980},{},[981],{"type":17,"tag":47,"props":982,"children":984},{"className":983},[],[985],{"type":22,"value":986},"calendar_list_events",{"type":17,"tag":283,"props":988,"children":989},{},[990],{"type":17,"tag":47,"props":991,"children":993},{"className":992},[],[994],{"type":22,"value":995},"calendar:read",{"type":17,"tag":256,"props":997,"children":998},{},[999,1015,1031],{"type":17,"tag":283,"props":1000,"children":1001},{},[1002,1008,1009],{"type":17,"tag":47,"props":1003,"children":1005},{"className":1004},[],[1006],{"type":22,"value":1007},"POST \u002Fv1\u002Fcalendar\u002Fevents",{"type":22,"value":206},{"type":17,"tag":47,"props":1010,"children":1012},{"className":1011},[],[1013],{"type":22,"value":1014},"PATCH \u002Fv1\u002Fcalendar\u002Fevents\u002F{id}",{"type":17,"tag":283,"props":1016,"children":1017},{},[1018,1024,1025],{"type":17,"tag":47,"props":1019,"children":1021},{"className":1020},[],[1022],{"type":22,"value":1023},"calendar_create_event",{"type":22,"value":206},{"type":17,"tag":47,"props":1026,"children":1028},{"className":1027},[],[1029],{"type":22,"value":1030},"calendar_update_event",{"type":17,"tag":283,"props":1032,"children":1033},{},[1034],{"type":17,"tag":47,"props":1035,"children":1037},{"className":1036},[],[1038],{"type":22,"value":1039},"calendar:write",{"type":17,"tag":18,"props":1041,"children":1042},{},[1043,1045,1051,1053,1059,1061,1067,1069,1074],{"type":22,"value":1044},"There is no ",{"type":17,"tag":47,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":22,"value":1050},"PATCH",{"type":22,"value":1052}," for contracts, no ",{"type":17,"tag":47,"props":1054,"children":1056},{"className":1055},[],[1057],{"type":22,"value":1058},"POST",{"type":22,"value":1060}," for requests, and no ",{"type":17,"tag":47,"props":1062,"children":1064},{"className":1063},[],[1065],{"type":22,"value":1066},"DELETE",{"type":22,"value":1068}," anywhere. Use ",{"type":17,"tag":47,"props":1070,"children":1072},{"className":1071},[],[1073],{"type":22,"value":171},{"type":22,"value":1075}," for any tool without a shortcut.",{"type":17,"tag":18,"props":1077,"children":1078},{},[1079,1081,1087,1089,1095,1097,1103,1105,1111,1113,1119],{"type":22,"value":1080},"On ",{"type":17,"tag":47,"props":1082,"children":1084},{"className":1083},[],[1085],{"type":22,"value":1086},"GET",{"type":22,"value":1088},", put the tool's arguments in the query string. Numbers and ",{"type":17,"tag":47,"props":1090,"children":1092},{"className":1091},[],[1093],{"type":22,"value":1094},"true",{"type":22,"value":1096},"\u002F",{"type":17,"tag":47,"props":1098,"children":1100},{"className":1099},[],[1101],{"type":22,"value":1102},"false",{"type":22,"value":1104}," are read as such, and a list is comma-separated. The ",{"type":17,"tag":47,"props":1106,"children":1108},{"className":1107},[],[1109],{"type":22,"value":1110},"{id}",{"type":22,"value":1112}," in the path always wins over an ",{"type":17,"tag":47,"props":1114,"children":1116},{"className":1115},[],[1117],{"type":22,"value":1118},"id",{"type":22,"value":1120}," in the body or query.",{"type":17,"tag":18,"props":1122,"children":1123},{},[1124,1126,1132,1134,1139,1141,1147],{"type":22,"value":1125},"A successful call returns ",{"type":17,"tag":47,"props":1127,"children":1129},{"className":1128},[],[1130],{"type":22,"value":1131},"200",{"type":22,"value":1133}," with the tool's output as JSON. A get for an id that doesn't exist also returns ",{"type":17,"tag":47,"props":1135,"children":1137},{"className":1136},[],[1138],{"type":22,"value":1131},{"type":22,"value":1140},", with the record as ",{"type":17,"tag":47,"props":1142,"children":1144},{"className":1143},[],[1145],{"type":22,"value":1146},"null",{"type":22,"value":1148},", so check for it.",{"type":17,"tag":30,"props":1150,"children":1152},{"id":1151},"sends-wait-for-approval",[1153],{"type":22,"value":1154},"Sends wait for approval",{"type":17,"tag":18,"props":1156,"children":1157},{},[1158,1160,1166],{"type":22,"value":1159},"Sending a proposal, contract, invoice or message returns ",{"type":17,"tag":47,"props":1161,"children":1163},{"className":1162},[],[1164],{"type":22,"value":1165},"202",{"type":22,"value":1167}," with the approval details. Nothing goes out until a person approves it in the app. A few other actions that reach a customer are held the same way (bulk messages, contract reminders and voids, replying to a request, pay links).",{"type":17,"tag":175,"props":1169,"children":1174},{"className":1170,"code":1172,"language":1173,"meta":7},[1171],"language-json","{\n  \"held_for_approval\": true,\n  \"approval_id\": \"2b89220a51485f343f1ae00407384707\",\n  \"approval_url\": \"https:\u002F\u002Fapp.workspace369.com\u002Fsettings\u002Fapprovals\u002F2b89220a...\",\n  \"approval_expires_at\": \"2026-10-21T06:24:27.070Z\"\n}\n","json",[1175],{"type":17,"tag":47,"props":1176,"children":1177},{"__ignoreMap":7},[1178],{"type":22,"value":1172},{"type":17,"tag":18,"props":1180,"children":1181},{},[1182,1184,1189,1191,1197,1199,1205,1207,1212],{"type":22,"value":1183},"Show \"awaiting approval\" in your app for a ",{"type":17,"tag":47,"props":1185,"children":1187},{"className":1186},[],[1188],{"type":22,"value":1165},{"type":22,"value":1190},". To check the result later, call the ",{"type":17,"tag":47,"props":1192,"children":1194},{"className":1193},[],[1195],{"type":22,"value":1196},"approvals_get",{"type":22,"value":1198}," tool with the ",{"type":17,"tag":47,"props":1200,"children":1202},{"className":1201},[],[1203],{"type":22,"value":1204},"approval_id",{"type":22,"value":1206},". If the person who connected turned on \"send without asking\", the send runs at once and you get ",{"type":17,"tag":47,"props":1208,"children":1210},{"className":1209},[],[1211],{"type":22,"value":1131},{"type":22,"value":236},{"type":17,"tag":18,"props":1214,"children":1215},{},[1216,1218,1224],{"type":22,"value":1217},"Pass a stable ",{"type":17,"tag":47,"props":1219,"children":1221},{"className":1220},[],[1222],{"type":22,"value":1223},"idempotency_key",{"type":22,"value":1225}," on sends so a retry doesn't send twice.",{"type":17,"tag":30,"props":1227,"children":1229},{"id":1228},"errors",[1230],{"type":22,"value":1231},"Errors",{"type":17,"tag":18,"props":1233,"children":1234},{},[1235,1237,1243],{"type":22,"value":1236},"Every error has the same shape: ",{"type":17,"tag":47,"props":1238,"children":1240},{"className":1239},[],[1241],{"type":22,"value":1242},"{\"error\":{\"code\",\"message\",\"details\"}}",{"type":22,"value":236},{"type":17,"tag":248,"props":1245,"children":1246},{},[1247,1268],{"type":17,"tag":252,"props":1248,"children":1249},{},[1250],{"type":17,"tag":256,"props":1251,"children":1252},{},[1253,1258,1263],{"type":17,"tag":260,"props":1254,"children":1255},{},[1256],{"type":22,"value":1257},"Status",{"type":17,"tag":260,"props":1259,"children":1260},{},[1261],{"type":22,"value":1262},"Code",{"type":17,"tag":260,"props":1264,"children":1265},{},[1266],{"type":22,"value":1267},"Meaning",{"type":17,"tag":276,"props":1269,"children":1270},{},[1271,1301,1323,1345,1372,1422,1442,1484,1504,1526,1548,1578,1607,1645,1667],{"type":17,"tag":256,"props":1272,"children":1273},{},[1274,1279,1288],{"type":17,"tag":283,"props":1275,"children":1276},{},[1277],{"type":22,"value":1278},"400",{"type":17,"tag":283,"props":1280,"children":1281},{},[1282],{"type":17,"tag":47,"props":1283,"children":1285},{"className":1284},[],[1286],{"type":22,"value":1287},"invalid_json",{"type":17,"tag":283,"props":1289,"children":1290},{},[1291,1293,1299],{"type":22,"value":1292},"The body isn't valid JSON. Some malformed bodies are rejected before they reach the API and get a plain ",{"type":17,"tag":47,"props":1294,"children":1296},{"className":1295},[],[1297],{"type":22,"value":1298},"400 Bad Request",{"type":22,"value":1300}," with no JSON body, so treat any 400 as \"fix the request\".",{"type":17,"tag":256,"props":1302,"children":1303},{},[1304,1309,1318],{"type":17,"tag":283,"props":1305,"children":1306},{},[1307],{"type":22,"value":1308},"401",{"type":17,"tag":283,"props":1310,"children":1311},{},[1312],{"type":17,"tag":47,"props":1313,"children":1315},{"className":1314},[],[1316],{"type":22,"value":1317},"unauthorized",{"type":17,"tag":283,"props":1319,"children":1320},{},[1321],{"type":22,"value":1322},"Missing or invalid token.",{"type":17,"tag":256,"props":1324,"children":1325},{},[1326,1331,1340],{"type":17,"tag":283,"props":1327,"children":1328},{},[1329],{"type":22,"value":1330},"402",{"type":17,"tag":283,"props":1332,"children":1333},{},[1334],{"type":17,"tag":47,"props":1335,"children":1337},{"className":1336},[],[1338],{"type":22,"value":1339},"usage_exhausted",{"type":17,"tag":283,"props":1341,"children":1342},{},[1343],{"type":22,"value":1344},"The workspace is out of Tokens.",{"type":17,"tag":256,"props":1346,"children":1347},{},[1348,1352,1360],{"type":17,"tag":283,"props":1349,"children":1350},{},[1351],{"type":22,"value":52},{"type":17,"tag":283,"props":1353,"children":1354},{},[1355],{"type":17,"tag":47,"props":1356,"children":1358},{"className":1357},[],[1359],{"type":22,"value":97},{"type":17,"tag":283,"props":1361,"children":1362},{},[1363,1365,1370],{"type":22,"value":1364},"The token lacks a scope; ",{"type":17,"tag":47,"props":1366,"children":1368},{"className":1367},[],[1369],{"type":22,"value":105},{"type":22,"value":1371}," names it.",{"type":17,"tag":256,"props":1373,"children":1374},{},[1375,1379,1388],{"type":17,"tag":283,"props":1376,"children":1377},{},[1378],{"type":22,"value":52},{"type":17,"tag":283,"props":1380,"children":1381},{},[1382],{"type":17,"tag":47,"props":1383,"children":1385},{"className":1384},[],[1386],{"type":22,"value":1387},"forbidden",{"type":17,"tag":283,"props":1389,"children":1390},{},[1391,1397,1399,1405,1407,1413,1415,1421],{"type":17,"tag":47,"props":1392,"children":1394},{"className":1393},[],[1395],{"type":22,"value":1396},"details.reason",{"type":22,"value":1398}," is ",{"type":17,"tag":47,"props":1400,"children":1402},{"className":1401},[],[1403],{"type":22,"value":1404},"permission_denied",{"type":22,"value":1406}," (the person lacks the permission), ",{"type":17,"tag":47,"props":1408,"children":1410},{"className":1409},[],[1411],{"type":22,"value":1412},"mcp_not_enabled",{"type":22,"value":1414}," (AI connections are off) or ",{"type":17,"tag":47,"props":1416,"children":1418},{"className":1417},[],[1419],{"type":22,"value":1420},"app_not_approved",{"type":22,"value":236},{"type":17,"tag":256,"props":1423,"children":1424},{},[1425,1429,1437],{"type":17,"tag":283,"props":1426,"children":1427},{},[1428],{"type":22,"value":52},{"type":17,"tag":283,"props":1430,"children":1431},{},[1432],{"type":17,"tag":47,"props":1433,"children":1435},{"className":1434},[],[1436],{"type":22,"value":60},{"type":17,"tag":283,"props":1438,"children":1439},{},[1440],{"type":22,"value":1441},"The workspace is below the Specialist plan.",{"type":17,"tag":256,"props":1443,"children":1444},{},[1445,1449,1458],{"type":17,"tag":283,"props":1446,"children":1447},{},[1448],{"type":22,"value":227},{"type":17,"tag":283,"props":1450,"children":1451},{},[1452],{"type":17,"tag":47,"props":1453,"children":1455},{"className":1454},[],[1456],{"type":22,"value":1457},"not_found",{"type":17,"tag":283,"props":1459,"children":1460},{},[1461,1463,1468,1469,1474,1476,1482],{"type":22,"value":1462},"No such path. A record that doesn't exist is not an error: a get returns ",{"type":17,"tag":47,"props":1464,"children":1466},{"className":1465},[],[1467],{"type":22,"value":1131},{"type":22,"value":54},{"type":17,"tag":47,"props":1470,"children":1472},{"className":1471},[],[1473],{"type":22,"value":1146},{"type":22,"value":1475}," (for example ",{"type":17,"tag":47,"props":1477,"children":1479},{"className":1478},[],[1480],{"type":22,"value":1481},"{\"client\":null}",{"type":22,"value":1483},").",{"type":17,"tag":256,"props":1485,"children":1486},{},[1487,1491,1499],{"type":17,"tag":283,"props":1488,"children":1489},{},[1490],{"type":22,"value":227},{"type":17,"tag":283,"props":1492,"children":1493},{},[1494],{"type":17,"tag":47,"props":1495,"children":1497},{"className":1496},[],[1498],{"type":22,"value":234},{"type":17,"tag":283,"props":1500,"children":1501},{},[1502],{"type":22,"value":1503},"No such tool, or one that only runs inside the app.",{"type":17,"tag":256,"props":1505,"children":1506},{},[1507,1512,1521],{"type":17,"tag":283,"props":1508,"children":1509},{},[1510],{"type":22,"value":1511},"409",{"type":17,"tag":283,"props":1513,"children":1514},{},[1515],{"type":17,"tag":47,"props":1516,"children":1518},{"className":1517},[],[1519],{"type":22,"value":1520},"conflict",{"type":17,"tag":283,"props":1522,"children":1523},{},[1524],{"type":22,"value":1525},"The record isn't in a state this call can act on.",{"type":17,"tag":256,"props":1527,"children":1528},{},[1529,1534,1543],{"type":17,"tag":283,"props":1530,"children":1531},{},[1532],{"type":22,"value":1533},"413",{"type":17,"tag":283,"props":1535,"children":1536},{},[1537],{"type":17,"tag":47,"props":1538,"children":1540},{"className":1539},[],[1541],{"type":22,"value":1542},"payload_too_large",{"type":17,"tag":283,"props":1544,"children":1545},{},[1546],{"type":22,"value":1547},"The body is over 1 MB.",{"type":17,"tag":256,"props":1549,"children":1550},{},[1551,1556,1565],{"type":17,"tag":283,"props":1552,"children":1553},{},[1554],{"type":22,"value":1555},"422",{"type":17,"tag":283,"props":1557,"children":1558},{},[1559],{"type":17,"tag":47,"props":1560,"children":1562},{"className":1561},[],[1563],{"type":22,"value":1564},"invalid_request",{"type":17,"tag":283,"props":1566,"children":1567},{},[1568,1570,1576],{"type":22,"value":1569},"The input failed validation; ",{"type":17,"tag":47,"props":1571,"children":1573},{"className":1572},[],[1574],{"type":22,"value":1575},"details.issues",{"type":22,"value":1577}," lists each problem.",{"type":17,"tag":256,"props":1579,"children":1580},{},[1581,1585,1594],{"type":17,"tag":283,"props":1582,"children":1583},{},[1584],{"type":22,"value":1555},{"type":17,"tag":283,"props":1586,"children":1587},{},[1588],{"type":17,"tag":47,"props":1589,"children":1591},{"className":1590},[],[1592],{"type":22,"value":1593},"tool_error",{"type":17,"tag":283,"props":1595,"children":1596},{},[1597,1599,1605],{"type":22,"value":1598},"The input was valid but the tool refused it; ",{"type":17,"tag":47,"props":1600,"children":1602},{"className":1601},[],[1603],{"type":22,"value":1604},"message",{"type":22,"value":1606}," says why.",{"type":17,"tag":256,"props":1608,"children":1609},{},[1610,1615,1624],{"type":17,"tag":283,"props":1611,"children":1612},{},[1613],{"type":22,"value":1614},"429",{"type":17,"tag":283,"props":1616,"children":1617},{},[1618],{"type":17,"tag":47,"props":1619,"children":1621},{"className":1620},[],[1622],{"type":22,"value":1623},"rate_limited",{"type":17,"tag":283,"props":1625,"children":1626},{},[1627,1629,1635,1637,1643],{"type":22,"value":1628},"Too many requests. Wait for ",{"type":17,"tag":47,"props":1630,"children":1632},{"className":1631},[],[1633],{"type":22,"value":1634},"Retry-After",{"type":22,"value":1636}," seconds (also in ",{"type":17,"tag":47,"props":1638,"children":1640},{"className":1639},[],[1641],{"type":22,"value":1642},"details.retry_after_seconds",{"type":22,"value":1644},"). Also returned when too many approvals are waiting.",{"type":17,"tag":256,"props":1646,"children":1647},{},[1648,1653,1662],{"type":17,"tag":283,"props":1649,"children":1650},{},[1651],{"type":22,"value":1652},"500",{"type":17,"tag":283,"props":1654,"children":1655},{},[1656],{"type":17,"tag":47,"props":1657,"children":1659},{"className":1658},[],[1660],{"type":22,"value":1661},"internal_error",{"type":17,"tag":283,"props":1663,"children":1664},{},[1665],{"type":22,"value":1666},"Something failed on our side. Not charged.",{"type":17,"tag":256,"props":1668,"children":1669},{},[1670,1675,1691],{"type":17,"tag":283,"props":1671,"children":1672},{},[1673],{"type":22,"value":1674},"503",{"type":17,"tag":283,"props":1676,"children":1677},{},[1678,1684,1685],{"type":17,"tag":47,"props":1679,"children":1681},{"className":1680},[],[1682],{"type":22,"value":1683},"service_unavailable",{"type":22,"value":206},{"type":17,"tag":47,"props":1686,"children":1688},{"className":1687},[],[1689],{"type":22,"value":1690},"tool_disabled",{"type":17,"tag":283,"props":1692,"children":1693},{},[1694,1696,1701],{"type":22,"value":1695},"Try again shortly. ",{"type":17,"tag":47,"props":1697,"children":1699},{"className":1698},[],[1700],{"type":22,"value":1690},{"type":22,"value":1702}," means that one tool is switched off for now.",{"type":17,"tag":18,"props":1704,"children":1705},{},[1706],{"type":22,"value":1707},"Rate limits: 120 requests a minute per token, 600 a minute per workspace. The limit is shared with your MCP calls.",{"title":7,"searchDepth":1709,"depth":1709,"links":1710},2,[1711,1712,1713,1714,1715],{"id":32,"depth":1709,"text":35},{"id":115,"depth":1709,"text":118},{"id":151,"depth":1709,"text":154},{"id":1151,"depth":1709,"text":1154},{"id":1228,"depth":1709,"text":1231},"markdown","content:v:2026.3:build-with-ai:call-workspace369-over-http-builder-api.md","content","v\u002F2026.3\u002Fbuild-with-ai\u002Fcall-workspace369-over-http-builder-api.md","v\u002F2026.3\u002Fbuild-with-ai\u002Fcall-workspace369-over-http-builder-api","md",1792530172292]