Tasks
Follow-ups with owners, due dates, types and priorities.
List tasks
GET/api/v1/tasks/
Parameters
cursorquery, string- Opaque pagination cursor (follow next/previous URLs).
Response fields 15
created_sourceenumcreated_source_labelstringidstring (uuid)organisationstring (uuid)titlestringtypestringdescriptionstringdue_datestring (date)prioritystringlinked_entity_typestringlinked_entity_idstringstatusenumcompleted_atstring (date-time)created_atstring (date-time)updated_atstring (date-time)
curl "https://api.vivrecrm.com/api/v1/tasks/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/tasks/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/tasks/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"created_source": "api_key",
"created_source_label": "",
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"organisation": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"title": "Kaveri Foods renewal",
"type": "",
"description": "Annual plan for the Hyderabad team.",
"due_date": "2026-10-31",
"priority": "",
"linked_entity_type": "",
"linked_entity_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": "pending",
"completed_at": "2026-10-17T09:30:00+05:30",
"created_at": "2026-10-17T09:30:00+05:30",
"updated_at": "2026-10-17T09:30:00+05:30"
}
]
}
Create task
POST/api/v1/tasks/
Body
titlestringRequiredtypestringRequireddescriptionstringdue_datestring (date), can be nullprioritystringassignee_idstring, can be nulllinked_entity_typestring, can be nulllinked_entity_idstring, can be nullstatusenum- One of
pending,in_progress,done,cancelled.
Response fields 15
created_sourceenumcreated_source_labelstringidstring (uuid)organisationstring (uuid)titlestringtypestringdescriptionstringdue_datestring (date)prioritystringlinked_entity_typestringlinked_entity_idstringstatusenumcompleted_atstring (date-time)created_atstring (date-time)updated_atstring (date-time)
curl -X POST "https://api.vivrecrm.com/api/v1/tasks/" \
-H "X-Api-Key: $VIVRE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "Kaveri Foods renewal", "type": "", "description": "Annual plan for the Hyderabad team.", "status": "pending"}'
import os, requests
resp = requests.post(
"https://api.vivrecrm.com/api/v1/tasks/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
json={
"title": "Kaveri Foods renewal",
"type": "",
"description": "Annual plan for the Hyderabad team.",
"status": "pending"
},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/tasks/", {
method: "POST",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"title": "Kaveri Foods renewal",
"type": "",
"description": "Annual plan for the Hyderabad team.",
"status": "pending"
}),
});
console.log(await resp.json());
{
"created_source": "api_key",
"created_source_label": "",
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"organisation": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"title": "Kaveri Foods renewal",
"type": "",
"description": "Annual plan for the Hyderabad team.",
"due_date": "2026-10-31",
"priority": "",
"linked_entity_type": "",
"linked_entity_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": "pending",
"completed_at": "2026-10-17T09:30:00+05:30",
"created_at": "2026-10-17T09:30:00+05:30",
"updated_at": "2026-10-17T09:30:00+05:30"
}
Retrieve a task
GET/api/v1/tasks/{public_id}/
Parameters
public_idpath, stringRequired- The record's public id (a UUID).
Response fields 15
created_sourceenumcreated_source_labelstringidstring (uuid)organisationstring (uuid)titlestringtypestringdescriptionstringdue_datestring (date)prioritystringlinked_entity_typestringlinked_entity_idstringstatusenumcompleted_atstring (date-time)created_atstring (date-time)updated_atstring (date-time)
curl "https://api.vivrecrm.com/api/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"created_source": "api_key",
"created_source_label": "",
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"organisation": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"title": "Kaveri Foods renewal",
"type": "",
"description": "Annual plan for the Hyderabad team.",
"due_date": "2026-10-31",
"priority": "",
"linked_entity_type": "",
"linked_entity_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": "pending",
"completed_at": "2026-10-17T09:30:00+05:30",
"created_at": "2026-10-17T09:30:00+05:30",
"updated_at": "2026-10-17T09:30:00+05:30"
}
Replace a task
PUT/api/v1/tasks/{public_id}/
Parameters
public_idpath, stringRequired- The record's public id (a UUID).
Body
titlestringRequiredtypestringRequireddescriptionstringdue_datestring (date), can be nullprioritystringassignee_idstring, can be nulllinked_entity_typestring, can be nulllinked_entity_idstring, can be nullstatusenum- One of
pending,in_progress,done,cancelled.
Response fields 15
created_sourceenumcreated_source_labelstringidstring (uuid)organisationstring (uuid)titlestringtypestringdescriptionstringdue_datestring (date)prioritystringlinked_entity_typestringlinked_entity_idstringstatusenumcompleted_atstring (date-time)created_atstring (date-time)updated_atstring (date-time)
curl -X PUT "https://api.vivrecrm.com/api/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/" \
-H "X-Api-Key: $VIVRE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "Kaveri Foods renewal", "type": "", "description": "Annual plan for the Hyderabad team.", "status": "pending"}'
import os, requests
resp = requests.put(
"https://api.vivrecrm.com/api/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
json={
"title": "Kaveri Foods renewal",
"type": "",
"description": "Annual plan for the Hyderabad team.",
"status": "pending"
},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/", {
method: "PUT",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"title": "Kaveri Foods renewal",
"type": "",
"description": "Annual plan for the Hyderabad team.",
"status": "pending"
}),
});
console.log(await resp.json());
{
"created_source": "api_key",
"created_source_label": "",
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"organisation": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"title": "Kaveri Foods renewal",
"type": "",
"description": "Annual plan for the Hyderabad team.",
"due_date": "2026-10-31",
"priority": "",
"linked_entity_type": "",
"linked_entity_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": "pending",
"completed_at": "2026-10-17T09:30:00+05:30",
"created_at": "2026-10-17T09:30:00+05:30",
"updated_at": "2026-10-17T09:30:00+05:30"
}
Update a task
PATCH/api/v1/tasks/{public_id}/
Parameters
public_idpath, stringRequired- The record's public id (a UUID).
Body
titlestringRequiredtypestringRequireddescriptionstringdue_datestring (date), can be nullprioritystringassignee_idstring, can be nulllinked_entity_typestring, can be nulllinked_entity_idstring, can be nullstatusenum- One of
pending,in_progress,done,cancelled.
Response fields 15
created_sourceenumcreated_source_labelstringidstring (uuid)organisationstring (uuid)titlestringtypestringdescriptionstringdue_datestring (date)prioritystringlinked_entity_typestringlinked_entity_idstringstatusenumcompleted_atstring (date-time)created_atstring (date-time)updated_atstring (date-time)
curl -X PATCH "https://api.vivrecrm.com/api/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/" \
-H "X-Api-Key: $VIVRE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "Kaveri Foods renewal", "type": "", "description": "Annual plan for the Hyderabad team.", "status": "pending"}'
import os, requests
resp = requests.patch(
"https://api.vivrecrm.com/api/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
json={
"title": "Kaveri Foods renewal",
"type": "",
"description": "Annual plan for the Hyderabad team.",
"status": "pending"
},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/", {
method: "PATCH",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"title": "Kaveri Foods renewal",
"type": "",
"description": "Annual plan for the Hyderabad team.",
"status": "pending"
}),
});
console.log(await resp.json());
{
"created_source": "api_key",
"created_source_label": "",
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"organisation": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"title": "Kaveri Foods renewal",
"type": "",
"description": "Annual plan for the Hyderabad team.",
"due_date": "2026-10-31",
"priority": "",
"linked_entity_type": "",
"linked_entity_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": "pending",
"completed_at": "2026-10-17T09:30:00+05:30",
"created_at": "2026-10-17T09:30:00+05:30",
"updated_at": "2026-10-17T09:30:00+05:30"
}
Delete a task
DELETE/api/v1/tasks/{public_id}/
Parameters
public_idpath, stringRequired- The record's public id (a UUID).
curl -X DELETE "https://api.vivrecrm.com/api/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.delete(
"https://api.vivrecrm.com/api/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.status_code)
const resp = await fetch("https://api.vivrecrm.com/api/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/", {
method: "DELETE",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(resp.status);
Mark complete
POST/api/v1/tasks/{public_id}/complete/
Parameters
public_idpath, stringRequired- The record's public id (a UUID).
Body
contentstring- Text of the "task completed" activity on the linked record. Default "Task completed: <title>". Used only when the task was not already done.
Response fields 15
created_sourceenumcreated_source_labelstringidstring (uuid)organisationstring (uuid)titlestringtypestringdescriptionstringdue_datestring (date)prioritystringlinked_entity_typestringlinked_entity_idstringstatusenumcompleted_atstring (date-time)created_atstring (date-time)updated_atstring (date-time)
curl -X POST "https://api.vivrecrm.com/api/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/complete/" \
-H "X-Api-Key: $VIVRE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content": "Called, wants a demo on Friday."}'
import os, requests
resp = requests.post(
"https://api.vivrecrm.com/api/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/complete/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
json={
"content": "Called, wants a demo on Friday."
},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/complete/", {
method: "POST",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"content": "Called, wants a demo on Friday."
}),
});
console.log(await resp.json());
{
"created_source": "api_key",
"created_source_label": "",
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"organisation": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"title": "Kaveri Foods renewal",
"type": "",
"description": "Annual plan for the Hyderabad team.",
"due_date": "2026-10-31",
"priority": "",
"linked_entity_type": "",
"linked_entity_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": "pending",
"completed_at": "2026-10-17T09:30:00+05:30",
"created_at": "2026-10-17T09:30:00+05:30",
"updated_at": "2026-10-17T09:30:00+05:30"
}
Bulk complete
POST/api/v1/tasks/bulk-complete/
Body
task_idsarray of string (uuid)Required- Task public ids. Any value that is not a UUID is a 400. Tasks not found, not visible to the caller or not open are skipped.
Response fields 1
completed_countinteger- Open tasks (pending or
in_progress) marked done.
curl -X POST "https://api.vivrecrm.com/api/v1/tasks/bulk-complete/" \
-H "X-Api-Key: $VIVRE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"task_ids": ["7c9e6679-7425-40de-944b-e07fc1f90ae7"]}'
import os, requests
resp = requests.post(
"https://api.vivrecrm.com/api/v1/tasks/bulk-complete/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
json={
"task_ids": [
"7c9e6679-7425-40de-944b-e07fc1f90ae7"
]
},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/tasks/bulk-complete/", {
method: "POST",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"task_ids": [
"7c9e6679-7425-40de-944b-e07fc1f90ae7"
]
}),
});
console.log(await resp.json());
{
"completed_count": 1
}
Task counts for the list header
GET/api/v1/tasks/stats/
Response fields 8
totalintegermineinteger- Assigned to the caller.
openinteger- Status pending or
in_progress. pendingintegeroverdueinteger- Due before today (organization's date) and still open.
due_todayintegerhigh_priorityinteger- Priority high or urgent.
completed_7dinteger- Completed in the last 7 days.
curl "https://api.vivrecrm.com/api/v1/tasks/stats/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/tasks/stats/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/tasks/stats/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"total": 1,
"mine": 1,
"open": 1,
"pending": 1,
"overdue": 1,
"due_today": 1,
"high_priority": 1,
"completed_7d": 1
}
Ids of every task the list shows
GET/api/v1/tasks/ids/
"Select all N matching". Takes the list's own query (search, filter (compound JSON), status, type, priority, assignee, dates and ordering), and answers the public ids in the list's order, up to 10,000, with the total. Pass them in batches to the bulk actions.
Response fields 3
countinteger- Every match, which may be more than
limit. idsarray of string (uuid)- Public ids of the first
limitmatches, in the list's order. limitinteger- The most ids answered: 10,000.
curl "https://api.vivrecrm.com/api/v1/tasks/ids/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/tasks/ids/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/tasks/ids/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"count": 1,
"ids": [
"7c9e6679-7425-40de-944b-e07fc1f90ae7"
],
"limit": 1
}