{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-docs/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Tools","projectTitle":"Frontline Documentation","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"tools","__idx":0},"children":["Tools"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Tool"]}," is a reusable HTTP integration that an Agent or Workflow can call. You define the endpoint once — URL, method, headers, query params, body, arguments — and reference it from a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TOOLS_AI"]}," node, which lets the AI decide when and how to call it."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In the Public API surface, only ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["API call tools"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type: API_CALL"]},") are exposed. WhatsApp template tools exist internally but are not part of this surface."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"identity","__idx":1},"children":["Identity"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Type"},"children":["Type"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Notes"},"children":["Notes"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["number"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Use as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["toolId"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["name"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["1–256 characters."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["description"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Max 1000 characters. The AI uses this to decide when to call the tool — be precise."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["enum?"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ACTIVE"]}," · ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PAUSED"]}," · ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ARCHIVED"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["enum"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Always ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["API_CALL"]}," in the Public API."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["method"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["enum?"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET"]}," · ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST"]}," · ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUT"]}," · ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PATCH"]}," · ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DELETE"]}," · ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["HEAD"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["url"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Valid URL. May reference arguments through interpolation (see \"Arguments\" below)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["body"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string?"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["JSON string. Same argument interpolation rules as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["url"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["arguments"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["array"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["What the AI must extract from the conversation. See below."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["headers"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["array"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ key, value }"]}," pairs. Values can interpolate ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{argName}"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["queryParams"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["array"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ key, value }"]}," pairs."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["createdAt"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["ISO timestamp."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["updatedAt"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["ISO timestamp."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"arguments","__idx":2},"children":["Arguments"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each argument is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ name, dataType, description? }"]},". The AI is asked to extract values for these from the conversation before calling the tool. The extracted values are then injected into the request (url, body, headers, query params) when the tool fires."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["name"]}," (string, required) — referenced from the request fields (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["url"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["headers"]}," values, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["queryParams"]}," values, and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["body"]},") with ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["single curly braces"]},": ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{name}"]},". Double braces (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{{name}}"]},") do ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not"]}," interpolate."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["dataType"]}," (enum) — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["STRING"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NUMBER"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BOOLEAN"]},"; guides extraction. Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NUMBER"]}," for decimals too. (Avoid ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DECIMAL"]},": the API accepts it but the app UI does not render it.)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["description"]}," (string) — give the AI context about what the value means."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"headers-and-query-params","__idx":3},"children":["Headers and query params"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Both follow the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ key, value }"]}," shape. Values support argument interpolation for dynamic auth, IDs, etc."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"where-they-run","__idx":4},"children":["Where they run"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Tools are invoked from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TOOLS_AI"]}," nodes:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Inside Flows"]}," — the AI picks a tool mid-conversation."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Inside Workflows"]}," — the AI picks a tool as part of an automation."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You wire which tools an ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/concepts/agents"},"children":["Agent"]}," can use via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["customToolIds"]}," in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUT /agents/{agentId}/agent-setting"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"operations","__idx":5},"children":["Operations"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Verb"},"children":["Verb"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Path"},"children":["Path"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/public/v1/tools"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/public/v1/tools"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/public/v1/tools/{toolId}"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUT"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/public/v1/tools/{toolId}"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DELETE"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/public/v1/tools/{toolId}"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Filters on list: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filterText"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The tool type cannot be changed after creation (you cannot turn an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["API_CALL"]}," into something else)."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"cli","__idx":6},"children":["CLI"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"frontline tools list --status ACTIVE\nfrontline tools create \\\n  --name \"Fetch contact\" \\\n  --description \"Fetches a CRM contact by ID\" \\\n  --method GET \\\n  --url \"https://api.example.com/contacts/{contactId}\" \\\n  --arguments '[{\"name\":\"contactId\",\"dataType\":\"STRING\"}]'\n\n# POST with a JSON body — interpolate arguments with single braces\nfrontline tools create \\\n  --name \"Create lead\" \\\n  --description \"Creates a lead\" \\\n  --method POST \\\n  --url \"https://api.example.com/leads\" \\\n  --arguments '[{\"name\":\"nombre_cliente\",\"dataType\":\"STRING\"},{\"name\":\"tipo_cliente\",\"dataType\":\"STRING\"}]' \\\n  --headers '[{\"key\":\"Content-Type\",\"value\":\"application/json\"}]' \\\n  --body '{\"nombre_cliente\":\"{nombre_cliente}\",\"tipo_cliente\":\"{tipo_cliente}\"}'\n\nfrontline tools update 123 --headers '[{\"key\":\"Authorization\",\"value\":\"Bearer {apiKey}\"}]'\n","lang":"bash"},"children":[]}]},"headings":[{"value":"Tools","id":"tools","depth":1},{"value":"Identity","id":"identity","depth":2},{"value":"Arguments","id":"arguments","depth":3},{"value":"Headers and query params","id":"headers-and-query-params","depth":3},{"value":"Where they run","id":"where-they-run","depth":2},{"value":"Operations","id":"operations","depth":2},{"value":"CLI","id":"cli","depth":2}],"frontmatter":{"seo":{"title":"Tools"}},"lastModified":"2026-06-03T18:45:04.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/concepts/tools","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}