Custom tools

Plug any API into your agents, without writing a line of code

Order status, inventory, quotes, loyalty points: if it has an HTTP API, your agents can use it. Describe the tool, define its parameters, and the AI decides when to call it and fills them in. You decide exactly which parts of the response it gets to see.

A custom tool calls an order-status API with the order number the AI extracted, and the AI only sees the allowed response fieldsTools › get_order_statusWHEN TO USEWhen a customer asks where their order isGETapi.shop.com/orders/{{order_id}}PARAMETERSorder_idText · requiredHEADERSAuthorizationSaved (hidden)AI sees: status, eta, carrierSMS · PriyaWhere's my order #48213?It shipped yesterday with DHL andarrives Thursday. Tracking: JD0148…AI filled order_id = 48213GET/orders/48213Bearer ••••••api.shop.comRESPONSE · 200 · 184 ms{ "status": "shipped", "eta": "2026-10-01", "carrier": "DHL", "customer_email": "priya@…", "internal_id": "a8f2-19c…", "warehouse_cost": 11.40}AI seeshidden
5HTTP methods
AES-256encrypted headers
Per steptool access
Safesample responses in tests
Deep dive

A closer look at Custom tools

01 · Define

Describe it once, the AI does the rest

Give the tool a name and a description of when to use it, pick GET, POST, PUT, PATCH or DELETE, and add parameters as text, number or true/false. Use {{parameter}} and contact placeholders in the URL, query, headers or JSON and form bodies.

  • Name and “when to use” description
  • Typed, required or optional parameters
  • {{placeholders}} for parameters and contact details
  • JSON or form bodies
The tool builder cycles through GET, POST, PUT, PATCH and DELETE requests with typed parameters and placeholdersGETPOSTPUTPATCHDELETEhttps://api.example.com/orders/{{order_id}}/leads/bookings/{{booking_id}}/contacts/{{contact.email}}/holds/{{hold_id}}PARAMETERS (AI FILLS THESE)order_idText · required{{order_id}}quantityNumber{{quantity}}gift_wrapTrue / false{{gift_wrap}}JSON BODY{ "order": "{{order_id}}", "qty": {{quantity}}, "wrap": {{gift_wrap}}, "email": "{{contact.email}}", "name": "{{contact.name}}"}Contact placeholders work in every tool
02 · Secure

Secrets stay secret

Headers usually carry API keys, so they're encrypted at rest and never shown again after saving. Choose which response fields the AI can see, keeping internal IDs and personal data out of the conversation.

  • Encrypted headers, hidden after save
  • Response field allow-list
  • Per-tool timeout
  • Turned on per step, not globally
An API key header is encrypted and hidden once saved, and only allow-listed response fields reach the AIHEADERAuthorizationBearer sk_live_9f2c81a…Saved (hidden). Blank keeps itSaveAES-256-GCMat restRESPONSE FIELDS THE AI SEESstatusetacarriercustomer_emailinternal_idwarehouse_costWHAT THE AI RECEIVES{ "status": "shipped", "eta": "2026-10-01", "carrier": "DHL"}No emails, IDs or costs in the prompt
03 · Test

Tested before it ever touches a customer

Run the tool from its page with example values and inspect the response. In Test & Debug, tools that change things answer with the saved sample response instead of calling the real API, so testing never creates a real order.

  • Try it from the tool page
  • Save the sample response
  • Simulated in tests unless you allow real calls
  • Every call visible in the debugger
A tool is tried with example values and its response saved as a sample; in tests the sample answers instead of the real APITry itEXAMPLE VALUESorder_id = 10001Run200 OK · 212 ms{ "status": "packed", "eta": "2026-09-30", "carrier": "UPS" }saved as sample responseTest & DebugWhere's order 10001?get_order_statusanswered with the saved samplesimulatedIt's packed and shipswith UPS, arriving 30 Sep.Real API untouchedTools that change things neverrun for real in tests (unless you allow it)
Under the hood

The details

Methods

GET, POST, PUT, PATCH and DELETE.

Parameters

Text, number and true/false, required or optional.

Placeholders

{{param}}, {{contact.name}}, {{contact.email}}, {{contact.phone}}.

Templates

Start from ready-made templates for common APIs.

Response fields

Limit the AI to the fields it needs.

Webhooks

Or fire a send_webhook to hand data to Zapier, Make or n8n.

Use cases

Who it's for

E-commerce

Look up order status and tracking by order number.

SaaS support

Check a customer's plan and usage before answering.

Logistics

Fetch live rates or ETAs mid-conversation.

FAQ

Custom tools: common questions

Do I need to write code?

No. Tools are configured in a form: method, URL, parameters, headers and body.

How are API keys stored?

Headers are encrypted at rest and never displayed again after saving.

Will testing call my real API?

Only if you allow it. Otherwise tests use the saved sample response.

Can I limit what the AI sees?

Yes. Pick the response fields the AI is shown.

Get started

Put it to work on your own inbox

Connect an inbox, describe the job, test it in a sandbox and go live with exactly the autonomy you're comfortable with.