Tool Types Reference
The exact payload for each toolType. These fields apply to create and update. You can also fetch this reference (with a valid example) live from GET /v2.0/tools/schema.
Common fields (all types)
| Parameter | Type | Description |
|---|---|---|
| name | string | Lowercase letters/numbers/underscores, starts with a letter. Unique per organization. |
| description | string | When the AI should call this tool. Be specific about the trigger. |
| toolType | string | One of the 8 types below. Immutable after creation. |
| isActive | boolean | Enabled state. Defaults to true on create.Default: true |
| pixelEvent | string | Optional conversion event: Purchase | LeadSubmitted | QualifiedLead. |
| tags | array | Optional array of ToolTag ids for dashboard grouping. |
function
Calls an external HTTP endpoint. The AI fills the declared parameters; Sendiee makes the request and feeds the response back to the AI.
| Parameter | Type | Description |
|---|---|---|
| serverUrl | string | http(s) endpoint. Use {{param}} placeholders in the path. |
| requestMethod | string | GET | POST | PUT | PATCH | DELETE.Default: POST |
| auth | object | { type: none|bearer|api_key|basic, ... }. bearer→token; basic→username+password; api_key→apiKeyIn/apiKeyName/apiKeyValue. |
| headers | array | Array of { key, value, enabled }. Duplicate keys (case-insensitive) are rejected. |
| bodyMode | string | auto | custom | none. custom requires customPayload.Default: auto |
| customPayload | string | JSON string with {{variable}} placeholders. Required when bodyMode = custom. |
| parameters | object | JSON-schema the AI fills: { type:'object', properties:{...}, required:[...] }. Property names must be lowercase/underscore. |
| timeout | number | Seconds, 1–300.Default: 30 |
| strict | boolean | Enforce strict parameter validation. |
| async | boolean | Fire-and-forget; the AI continues without waiting. |
{
"name": "get_order_status",
"description": "Look up the delivery status of an order by its order number.",
"toolType": "function",
"serverUrl": "https://api.yourstore.com/orders/{{order_id}}",
"requestMethod": "GET",
"auth": { "type": "bearer", "token": "sk_live_xxx" },
"headers": [{ "key": "Content-Type", "value": "application/json", "enabled": true }],
"bodyMode": "none",
"parameters": {
"type": "object",
"properties": { "order_id": { "type": "string", "description": "Customer order number, e.g. 1001" } },
"required": ["order_id"]
},
"timeout": 30
}static_tool
Returns a fixed message. Supports {{current_date}}, {{current_time}}, {{current_datetime}}, {{phone_number}} placeholders.
| Parameter | Type | Description |
|---|---|---|
| response | string | The message returned when the AI calls this tool. |
| isStrict | boolean | When true the response is sent verbatim; when false the AI may rephrase it. |
{
"name": "store_hours",
"description": "Tell the customer the store opening hours.",
"toolType": "static_tool",
"response": "We are open 9am–9pm daily. Today is {{current_date}}.",
"isStrict": false
}media_attachments
Sends 1–5 media files. Files must already exist in Sendiee (upload via the dashboard); reference them by File id. The caption is sent with the first file.
| Parameter | Type | Description |
|---|---|---|
| mediaIds | array | 1–5 Sendiee File ids (24-char hex). |
| response | string | Caption/message accompanying the media. |
| isStrict | boolean | Send the caption verbatim when true. |
{
"name": "send_brochure",
"description": "Send the product brochure PDF when the customer asks for details.",
"toolType": "media_attachments",
"mediaIds": ["64f0c0ffeeb0c0ffeeb0c0ff"],
"response": "Here is our latest brochure!"
}message_templates (WhatsApp)
A WhatsApp interactive message. templateType is one of: button, list, cta_url, product, product_list, catalog_message, flow, carousel. The components object is the exact Meta interactive JSON and is sent to Meta verbatim.
| Parameter | Type | Description |
|---|---|---|
| templateType | string | One of the 8 WhatsApp interactive types above. |
| components | object | Meta interactive payload: { type, header?, body:{text}, footer?, action }. |
| headerType | string | 'text' or 'media'. Derived from components.header when omitted. |
| mediaId | string | Sendiee File id for a media header you uploaded (alternative to a public link). |
Meta limits (enforced)
{
"name": "order_actions",
"description": "Offer the customer quick actions on their order.",
"toolType": "message_templates",
"templateType": "button",
"components": {
"type": "button",
"body": { "text": "What would you like to do with your order?" },
"action": {
"buttons": [
{ "type": "reply", "reply": { "id": "track", "title": "Track order" } },
{ "type": "reply", "reply": { "id": "cancel", "title": "Cancel order" } }
]
}
}
}instagram_templates
An Instagram message. instagramComponents.message holds text, quick_replies, or an attachment template.
| Parameter | Type | Description |
|---|---|---|
| instagramComponents | object | { message: { text?, quick_replies?, attachment? } }. Must contain at least one of text / quick_replies / attachment. |
Limits (enforced)
web_url (needs url) or postback (needs payload).{
"name": "ig_pricing",
"description": "Share pricing options on Instagram with quick replies.",
"toolType": "instagram_templates",
"instagramComponents": {
"message": {
"text": "Which plan interests you?",
"quick_replies": [
{ "title": "Basic", "payload": "PLAN_BASIC" },
{ "title": "Pro", "payload": "PLAN_PRO" }
]
}
}
}messenger_templates
A Messenger message. messengerComponents.message holds text, quick_replies, a button/generic template, or a media attachment.
| Parameter | Type | Description |
|---|---|---|
| messengerComponents | object | { message: { text?, quick_replies?, attachment? } }. Must contain at least one of text / quick_replies / attachment. |
Limits (enforced)
payload.url.{
"name": "fb_welcome",
"description": "Greet the customer on Messenger with menu buttons.",
"toolType": "messenger_templates",
"messengerComponents": {
"message": {
"attachment": { "type": "template", "payload": {
"template_type": "button",
"text": "Welcome! How can we help?",
"buttons": [{ "type": "postback", "title": "Browse", "payload": "BROWSE" }]
} }
}
}
}sendiee_catalog
Built-in Sendiee Catalog action. The AI supplies only narrow args; the catalog (and optional collection) are pinned here.
| Parameter | Type | Description |
|---|---|---|
| catalogAction.type | string | list_collections | list_products | get_product | get_collection_products. |
| catalogAction.catalogId | string | 24-char Sendiee catalog id. |
| catalogAction.collectionId | string | Required when type = get_collection_products. |
| catalogAction.defaultLimit | number | 1–20. Fallback result count.Default: 5 |
{
"name": "search_products",
"description": "Search the catalog when the customer asks about products.",
"toolType": "sendiee_catalog",
"catalogAction": { "type": "list_products", "catalogId": "64f0c0ffeeb0c0ffeeb0c0ff", "defaultLimit": 5 }
}shopify
Built-in Shopify action. The org’s connected Shopify store is resolved server-side, so no store credentials are passed.
| Parameter | Type | Description |
|---|---|---|
| shopifyAction.type | string | search_products | get_product | get_variants | list_collections | get_collection_products | track_order | get_order | search_customer | list_customer_orders | create_draft_order | send_invoice. |
| shopifyAction.defaultLimit | number | 1–20. Fallback result count for list-style actions.Default: 10 |
Requires a connected Shopify store
{
"name": "track_order",
"description": "Look up the shipping status of a Shopify order by its order number.",
"toolType": "shopify",
"shopifyAction": { "type": "track_order", "defaultLimit": 10 }
}