Task Management

The Brevo CRM Tasks API enables you to create and manage sales activities, follow-ups, and reminders to keep your team organized within the Tajo platform.

Overview

Task management is essential for:

  • Sales follow-ups with automated reminders and due dates
  • Team coordination assigning activities to specific team members
  • Deal progression linking tasks to deals and companies
  • Activity tracking monitoring team productivity and completion rates
  • Customer engagement scheduling loyalty program outreach and check-ins

Quick Start

Create Task

POST https://api.brevo.com/v3/crm/tasks
Content-Type: application/json
api-key: YOUR_API_KEY
{
"name": "Follow up on Enterprise Loyalty proposal",
"taskType": "call",
"date": "2026-02-15T10:00:00Z",
"duration": 1800,
"notes": "Discuss volume discount tier and loyalty point allocation",
"assignTo": "[email protected]",
"companiesIds": ["comp_123456789"],
"dealsIds": ["deal_abc123def456"],
"contactsIds": [12345],
"done": false,
"reminder": {
"value": 15,
"unit": "minutes"
}
}

Response

{
"id": "task_xyz789",
"name": "Follow up on Enterprise Loyalty proposal",
"taskType": "call",
"date": "2026-02-15T10:00:00Z",
"done": false,
"created_at": "2026-01-25T14:30:00Z"
}

Get Tasks

List All Tasks

GET https://api.brevo.com/v3/crm/tasks?limit=50&offset=0&sort=desc
Content-Type: application/json
api-key: YOUR_API_KEY

Response

{
"items": [
{
"id": "task_xyz789",
"name": "Follow up on Enterprise Loyalty proposal",
"taskType": "call",
"date": "2026-02-15T10:00:00Z",
"duration": 1800,
"assignTo": "[email protected]",
"done": false,
"companiesIds": ["comp_123456789"],
"dealsIds": ["deal_abc123def456"],
"created_at": "2026-01-25T14:30:00Z"
}
],
"total": 1
}

Filter Tasks

GET https://api.brevo.com/v3/crm/tasks?filters[done]=false&filters[taskType]=call&sort=date:asc

Get Single Task

GET https://api.brevo.com/v3/crm/tasks/{task_id}
Content-Type: application/json
api-key: YOUR_API_KEY

Task Types

The CRM supports several task types for different sales activities:

TypeDescriptionUse Case
callPhone callFollow-up calls, demos, check-ins
emailEmail outreachProposals, updates, newsletters
meetingIn-person or virtual meetingDemos, negotiations, reviews
todoGeneral taskInternal work, research, prep
deadlineTime-sensitive taskContract renewals, milestones

Automated Task Creation

Deal-Based Task Automation

Create tasks automatically when deals progress through stages:

class TaskAutomation {
constructor() {
this.tasksApi = new TasksApi();
}
async createDealFollowUp(deal, stageChange) {
const taskTemplates = {
'Lead': {
name: `Qualify lead: ${deal.name}`,
taskType: 'call',
daysFromNow: 1,
duration: 900
},
'Qualified': {
name: `Schedule demo: ${deal.name}`,
taskType: 'meeting',
daysFromNow: 3,
duration: 3600
},
'Demo': {
name: `Send proposal: ${deal.name}`,
taskType: 'email',
daysFromNow: 1,
duration: 1800
},
'Proposal': {
name: `Follow up on proposal: ${deal.name}`,
taskType: 'call',
daysFromNow: 5,
duration: 900
},
'Negotiation': {
name: `Finalize contract: ${deal.name}`,
taskType: 'deadline',
daysFromNow: 7,
duration: 3600
},
'Closed Won': {
name: `Onboard customer: ${deal.name}`,
taskType: 'meeting',
daysFromNow: 2,
duration: 3600
}
};
const template = taskTemplates[stageChange.newStage];
if (!template) return null;
const taskDate = new Date();
taskDate.setDate(taskDate.getDate() + template.daysFromNow);
return await this.tasksApi.createTask({
name: template.name,
taskType: template.taskType,
date: taskDate.toISOString(),
duration: template.duration,
assignTo: deal.attributes.deal_owner,
dealsIds: [deal.id],
companiesIds: deal.attributes.company_id ? [deal.attributes.company_id] : [],
contactsIds: deal.attributes.contact_id ? [deal.attributes.contact_id] : [],
done: false,
reminder: { value: 30, unit: 'minutes' }
});
}
async createLoyaltyCheckIn(company) {
return await this.tasksApi.createTask({
name: `Loyalty program check-in: ${company.name}`,
taskType: 'call',
date: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString(),
duration: 1800,
assignTo: company.attributes.account_manager,
companiesIds: [company.id],
notes: `Review tier status: ${company.attributes.loyalty_tier}\nAnnual spend: $${company.attributes.annual_spend}`,
done: false,
reminder: { value: 1, unit: 'days' }
});
}
}

Bulk Task Operations

class BulkTaskManager {
async createRenewalTasks(daysBeforeExpiry = 90) {
const renewalDate = new Date();
renewalDate.setDate(renewalDate.getDate() + daysBeforeExpiry);
const companies = await this.companiesApi.getCompanies({
filters: {
'attributes.renewal_date': `<${renewalDate.toISOString()}`
}
});
const tasks = [];
for (const company of companies.items) {
const task = await this.tasksApi.createTask({
name: `Contract renewal: ${company.name}`,
taskType: 'deadline',
date: company.attributes.renewal_date,
assignTo: company.attributes.account_manager,
companiesIds: [company.id],
notes: `Contract value: $${company.attributes.contract_value}\nCurrent tier: ${company.attributes.loyalty_tier}`,
done: false,
reminder: { value: 7, unit: 'days' }
});
tasks.push(task);
}
return tasks;
}
}

API Methods Reference

// Create a new task
const task = await tasksApi.createTask({
name: 'Follow up call',
taskType: 'call',
date: '2026-02-15T10:00:00Z',
assignTo: '[email protected]',
done: false
});
// Get task by ID
const task = await tasksApi.getTask('task_xyz789');
// Update task
await tasksApi.updateTask('task_xyz789', {
done: true,
notes: 'Customer agreed to upgrade tier'
});
// Delete task
await tasksApi.deleteTask('task_xyz789');
// List tasks with filtering
const tasks = await tasksApi.getTasks({
filters: {
done: false,
taskType: 'call',
assignTo: '[email protected]'
},
sort: 'date:asc',
limit: 50
});

Best Practices

  1. Automate task creation: Link tasks to deal stage changes for consistent follow-up
  2. Set reminders: Always configure reminders for time-sensitive tasks
  3. Link records: Associate tasks with deals, companies, and contacts for context
  4. Track completion: Monitor task completion rates for team performance insights
  5. Use task types: Categorize tasks properly for accurate activity reporting

Error Handling

try {
const task = await tasksApi.createTask(taskData);
console.log('Task created:', task.id);
} catch (error) {
if (error.status === 400) {
console.error('Invalid task data:', error.message);
} else if (error.status === 404) {
console.error('Associated deal or contact not found');
} else {
console.error('Unexpected error:', error);
}
}

Next Steps

AI Assistant

Hi! Ask me anything about the docs.

Inizia gratis con Brevo