API reference / Work management
Pipelines
A pipeline tracks deals from first contact to closed. Each stage of a pipeline is a contact list: the stage takes its name from the list, and the contacts in the list are the deals in that stage. To move a deal to another stage, move the contact to that stage's list.
In routes and fields, a pipeline is a board and a stage is a list.
Pipeline webhooks, such as contact.pipeline.stage.entered, are listed in
Webhooks.
Routes
| Method | Route | Scope | What it does |
|---|---|---|---|
GET |
/boards/public/boards |
contacts:read |
List your pipelines |
POST |
/boards/public/boards |
contacts:write |
Create a pipeline |
PUT |
/boards/public/boards/{board_id} |
contacts:write |
Rename a pipeline or replace its stages |
DELETE |
/boards/public/boards/{board_id} |
contacts:write |
Delete a pipeline |
POST |
/boards/public/boards/{board_id}/lists |
contacts:write |
Add a stage |
DELETE |
/boards/public/boards/{board_id}/lists/{list_id} |
contacts:write |
Remove a stage |
Stage fields
Each entry in a pipeline's lists array is a stage.
| Field | Type | Required | Description |
|---|---|---|---|
list_id |
string | Yes | The contact list behind the stage. Create it first with Contact lists. |
order |
integer | No | The stage's position, from 0. |
win_probability |
number | No | 0 to 100: the chance a deal in this stage closes. Used for the weighted forecast in the dashboard. |
stage_type |
string | No | open, won or lost. Empty means open. |
stale_after_days |
integer | No | 1 to 365. A deal in the stage longer than this is flagged as stale. |
A value out of range is clamped: win_probability: 120 is stored as 100 and
stale_after_days: 500 as 365. Any other invalid value is stored as null.
List your pipelines
Returns your pipelines newest first, in one response. A pipeline limited to certain teammates in the dashboard is listed only if the user the API key belongs to can see it.
| Field | Type | Required | Description |
|---|---|---|---|
search_term |
string | No | Only pipelines whose name contains this text, ignoring case. |
limit |
integer | No | Maximum pipelines to return. Default: all. |
curl https://api-v2.dropcowboy.com/boards/public/boards \
-H "x-key: $DC_KEY" -H "x-secret: $DC_SECRET"
{
"data": [
{
"_id": "66f2b1c4e8a9d3f1a2b4c6df",
"board_id": "3028a01c-9f13-4158-a864-2daa70189301",
"team_id": "cd5cd773-4617-4b28-854d-d3adc74c96d5",
"name": "Sales pipeline",
"brand_id": null,
"shared_across_brands": false,
"lists": [
{ "list_id": "50bb4bbb-3f86-459a-9761-f8bd7ff12f1b", "order": 0, "sort": "newestFirst", "win_probability": 10, "stage_type": "open", "stale_after_days": 7 },
{ "list_id": "764ff1bd-86e1-49af-8703-2ad22b53f04a", "order": 1, "sort": "newestFirst", "win_probability": 60, "stage_type": "open", "stale_after_days": 14 },
{ "list_id": "e2db9755-0c26-4aae-823a-dfb1b7c05acf", "order": 2, "sort": "newestFirst", "win_probability": 100, "stage_type": "won", "stale_after_days": null }
],
"visible_for_user_id": null,
"visible_for_user_group_id": null,
"created_at": 1757491200000,
"created_by": "fa933d82-485f-43b0-80ab-860121f06980",
"updated_at": 1759312800000,
"updated_by": "fa933d82-485f-43b0-80ab-860121f06980",
"deleted_at": null
}
],
"meta": { "request_id": "bcce25c4-6b8e-43d8-a1cb-689ddc6bb984" }
}
sort is how the dashboard orders the deals inside a stage. Timestamps are
epoch milliseconds.
Create a pipeline
The response is 201 with the new pipeline.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | No | Pipeline name. Default New Bucket Board. |
lists |
array | No | The stages, using the stage fields. |
brand_id |
string | No | The brand whose contacts this pipeline holds. Default: your default brand. See List brands. |
shared_across_brands |
boolean | No | true to accept contacts from every brand. Default false. |
curl -X POST https://api-v2.dropcowboy.com/boards/public/boards \
-H "x-key: $DC_KEY" -H "x-secret: $DC_SECRET" \
-H "Content-Type: application/json" \
-d '{
"name": "Renewals",
"lists": [
{ "list_id": "c6e0e173-ab7e-45d6-b470-72d593b15f56", "order": 0, "win_probability": 40 },
{ "list_id": "964c9795-8bdd-475a-917a-2ec2727c2cfb", "order": 1, "win_probability": 100, "stage_type": "won" }
]
}'
Rename a pipeline or replace its stages
Send only what you want to change.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | No | New name. |
lists |
array | No | The full set of stages. This replaces every existing stage. |
brand_id |
string | No | New brand. Send null for your default brand. |
shared_across_brands |
boolean | No | true to accept contacts from every brand. |
To change one stage's settings, read the pipeline, edit that entry and send
the whole lists array back, including each stage's sort.
curl -X PUT https://api-v2.dropcowboy.com/boards/public/boards/3028a01c-9f13-4158-a864-2daa70189301 \
-H "x-key: $DC_KEY" -H "x-secret: $DC_SECRET" \
-H "Content-Type: application/json" \
-d '{ "name": "Customer renewals" }'
{
"data": {
"acknowledged": true,
"modifiedCount": 1,
"upsertedId": null,
"upsertedCount": 0,
"matchedCount": 1
},
"meta": { "request_id": "be51cd74-12cd-4cc0-bc58-701d3292564d" }
}
Every change route on this page returns this result.
Delete a pipeline
Removes the pipeline. The contact lists behind its stages, and the contacts in them, are kept.
curl -X DELETE https://api-v2.dropcowboy.com/boards/public/boards/3028a01c-9f13-4158-a864-2daa70189301 \
-H "x-key: $DC_KEY" -H "x-secret: $DC_SECRET"
The response is the same change result as above.
Add a stage
Adds one stage to the end of the pipeline's lists. Set its order to place
it.
| Field | Type | Required | Description |
|---|---|---|---|
list |
object | Yes | One stage, using the stage fields. |
curl -X POST https://api-v2.dropcowboy.com/boards/public/boards/3028a01c-9f13-4158-a864-2daa70189301/lists \
-H "x-key: $DC_KEY" -H "x-secret: $DC_SECRET" \
-H "Content-Type: application/json" \
-d '{
"list": {
"list_id": "1e979536-0ee5-4b32-ae35-80826b24079e",
"order": 3,
"stage_type": "lost"
}
}'
The response is 201 with the same change result as above.
Remove a stage
Takes the stage off the pipeline. The contact list and its contacts are kept.
curl -X DELETE https://api-v2.dropcowboy.com/boards/public/boards/3028a01c-9f13-4158-a864-2daa70189301/lists/1e979536-0ee5-4b32-ae35-80826b24079e \
-H "x-key: $DC_KEY" -H "x-secret: $DC_SECRET"
The response is the same change result as above.
Errors
| Status | When | What to do |
|---|---|---|
400 |
missing parameters: list wasn't sent when adding a stage. |
Send the stage as a list object. |
404 |
Board not found: the board_id isn't one of your pipelines. |
Check the id with List your pipelines. |
For every other error, see Responses, errors and limits.