Lead Categories
Categories are the buckets the AI sorts each lead into. Each has a name and a description that tells the AI when to use it, an optional fuDisabled flag, and its own list of follow-ups. A lead's category is stored on the contact as lead_category. Categories are addressed by name (case-insensitive).
List categories
Returns every category with its description, fuDisabled flag and follow-ups. meta.categorizationEnabled reports whether AI auto-categorisation is currently on.
curl -X GET "https://api.sendiee.com/v2.0/leads/categories" \
-H "Authorization: Bearer YOUR_API_KEY"{
"success": true,
"data": [
{
"name": "Hot Lead",
"description": "Ready to buy, asked about pricing or checkout.",
"fuDisabled": false,
"followups": [
{
"delay": 600,
"prompt": "Nudge to checkout.",
"active": true
}
]
},
{
"name": "Cold Lead",
"description": "Just browsing.",
"fuDisabled": false,
"followups": []
}
],
"meta": {
"total": 2,
"categorizationEnabled": true
}
}Get a single category
curl -X GET "https://api.sendiee.com/v2.0/leads/categories/Hot%20Lead" \
-H "Authorization: Bearer YOUR_API_KEY"{
"success": true,
"data": {
"name": "Hot Lead",
"description": "Ready to buy.",
"fuDisabled": false,
"followups": []
}
}Create a category
Both name and description are required — the description is what the AI uses to decide when to apply the category.
Body
| Parameter | Type | Description |
|---|---|---|
| name | string | Unique category name (case-insensitive) |
| description | string | Tells the AI when to use this category |
| fuDisabled | boolean | Disable follow-ups for this category |
| followups | object[] | { delay, prompt, active }[] — optional starting follow-ups |
curl -X POST "https://api.sendiee.com/v2.0/leads/categories" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Hot Lead", "description": "Ready to buy, asked about pricing." }'{
"success": true,
"data": {
"name": "Hot Lead",
"description": "Ready to buy, asked about pricing.",
"fuDisabled": false,
"followups": []
}
}{
"error": true,
"code": "CATEGORY_EXISTS",
"message": "A category with this name already exists."
}Update / rename a category
Send a new name to rename, description to edit the AI guidance, and/or fuDisabled. The name in the URL identifies the existing category.
Renames cascade
lead_category is updated and a history entry is recorded).Body
| Parameter | Type | Description |
|---|---|---|
| name | string | New name (triggers a cascading rename) |
| description | string | New AI guidance |
| fuDisabled | boolean | Toggle follow-ups for this category |
curl -X PATCH "https://api.sendiee.com/v2.0/leads/categories/Hot%20Lead" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Ready to Buy", "description": "Explicitly asked to purchase." }'{
"success": true,
"data": {
"name": "Ready to Buy",
"description": "Explicitly asked to purchase.",
"fuDisabled": false,
"followups": []
}
}Delete a category
Refuses with 409 CATEGORY_IN_USE while contacts still belong to the category, unless you pass reassignTo: an existing category name to move those contacts to, or an empty value to clear their category.
Query
| Parameter | Type | Description |
|---|---|---|
| reassignTo | string | Existing category to move in-use contacts to, or empty to clear |
# Simple delete (fails if contacts still use it)
curl -X DELETE "https://api.sendiee.com/v2.0/leads/categories/Cold%20Lead" \
-H "Authorization: Bearer YOUR_API_KEY"
# Delete and move existing contacts to "Hot Lead"
curl -X DELETE "https://api.sendiee.com/v2.0/leads/categories/Cold%20Lead?reassignTo=Hot%20Lead" \
-H "Authorization: Bearer YOUR_API_KEY"{
"success": true,
"data": {
"deleted": true,
"reassigned": 12
}
}{
"error": true,
"code": "CATEGORY_IN_USE",
"message": "Cannot delete: 12 contact(s) still use this category. Pass ?reassignTo= to move them first.",
"count": 12
}