List pipelines and stages
GET/api/v1/pipelines
Every deal pipeline with its stages in order, and how many deals each holds. Stage ids or names are what create_deal and update_deal take.
Example request
curl "https://crowdstack.org/api/v1/pipelines" \
-H "Authorization: Bearer $CROWDSTACK_API_KEY"Example response
{
"pipelines": [
{
"id": "cmf3k2x9a0060abcd",
"name": "Sales",
"dealCount": 12,
"stages": [
{
"id": "cmf3k2x9a0061abcd",
"name": "Qualified",
"position": 0,
"isWon": false,
"isLost": false
},
{
"id": "cmf3k2x9a0062abcd",
"name": "Proposal",
"position": 1,
"isWon": false,
"isLost": false
},
{
"id": "cmf3k2x9a0063abcd",
"name": "Won",
"position": 2,
"isWon": true,
"isLost": false
}
]
}
]
}List deals
GET/api/v1/deals
Deals across every pipeline, most recently updated first. Filter by pipeline, stage, open/won/lost, owner, company or contact.
Query parameters
| Parameter | Type | Description |
|---|---|---|
pipelineId | string | — |
stageId | string | — |
status | open | won | lost | open means in a stage that is neither won nor lost. |
ownerId | string | — |
companyId | string | — |
contactId | string | Deals this contact is linked to. |
q | string | Matches the deal name. |
limit | number | Page size, 1 to 100. Default 50. |
cursor | string | The nextCursor from the previous page. |
Example request
curl "https://crowdstack.org/api/v1/deals?status=open&limit=1" \
-H "Authorization: Bearer $CROWDSTACK_API_KEY"Example response
{
"deals": [
{
"id": "cmf3k2x9a0080abcd",
"name": "Acme renewal",
"amount": "12000.00",
"currency": "GBP",
"closeDate": "2026-10-31",
"status": "open",
"pipeline": {
"id": "cmf3k2x9a0060abcd",
"name": "Sales"
},
"stage": {
"id": "cmf3k2x9a0062abcd",
"name": "Proposal",
"position": 1,
"isWon": false,
"isLost": false
},
"owner": {
"id": "cmf3k2x9a0003abcd",
"name": "Jane Doe",
"email": "jane@acme-mail.com"
},
"company": {
"id": "cmf3k2x9a0002abcd",
"name": "Acme",
"domain": "acme.com"
},
"contacts": [
{
"id": "cmf3k2x9a0001abcd",
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@acme.com",
"isPrimary": true
}
],
"fields": {},
"createdAt": "2026-09-01T09:00:00.000Z",
"updatedAt": "2026-09-15T10:12:00.000Z"
}
],
"nextCursor": null
}Get a deal
GET/api/v1/deals/:id
One deal by id with its pipeline, stage, owner, company and linked contacts.
Responses
| Status | Meaning |
|---|---|
| 404 | No deal with that id. |
Example request
curl "https://crowdstack.org/api/v1/deals/cmf3k2x9a0001abcd" \
-H "Authorization: Bearer $CROWDSTACK_API_KEY"Example response
{
"deal": {
"id": "cmf3k2x9a0080abcd",
"name": "Acme renewal",
"amount": "12000.00",
"currency": "GBP",
"closeDate": "2026-10-31",
"status": "open",
"pipeline": {
"id": "cmf3k2x9a0060abcd",
"name": "Sales"
},
"stage": {
"id": "cmf3k2x9a0062abcd",
"name": "Proposal",
"position": 1,
"isWon": false,
"isLost": false
},
"owner": {
"id": "cmf3k2x9a0003abcd",
"name": "Jane Doe",
"email": "jane@acme-mail.com"
},
"company": {
"id": "cmf3k2x9a0002abcd",
"name": "Acme",
"domain": "acme.com"
},
"contacts": [
{
"id": "cmf3k2x9a0001abcd",
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@acme.com",
"isPrimary": true
}
],
"fields": {},
"createdAt": "2026-09-01T09:00:00.000Z",
"updatedAt": "2026-09-15T10:12:00.000Z"
}
}Create a deal
POST/api/v1/deals
Opens a deal in a pipeline. Without a pipeline it goes in the default one, and without a stage it starts in the first stage.
Request body
| Field | Type | Description |
|---|---|---|
namerequired | string | — |
pipelineId | string | Defaults to the workspace's default pipeline. |
amount | number | string | null | Deal value with up to two decimals. null clears it. |
currency | string | ISO 4217 code such as GBP or USD. |
closeDate | string | null | Expected close date, yyyy-mm-dd. null clears it. |
stage | string | A stage of the deal's pipeline, by id or name. |
ownerId | string | null | — |
companyId | string | null | — |
contactIds | string[] | Contacts linked to the deal; the first is primary. Replaces the existing links. |
fields | object | Custom field values keyed by field key. Unknown keys are rejected; get_workspace lists the defined fields. |
Responses
| Status | Meaning |
|---|---|
| 201 | Body: { deal }. |
| 422 | Unknown stage, company, contact or owner, or a bad amount. |
Example request
curl -X POST https://crowdstack.org/api/v1/deals \
-H "Authorization: Bearer $CROWDSTACK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme renewal",
"amount": 12000,
"closeDate": "2026-10-31",
"stage": "Proposal",
"companyId": "cmf3k2x9a0002abcd",
"contactIds": [
"cmf3k2x9a0001abcd"
]
}'Example response
{
"deal": {
"id": "cmf3k2x9a0080abcd",
"name": "Acme renewal",
"amount": "12000.00",
"currency": "GBP",
"closeDate": "2026-10-31",
"status": "open",
"pipeline": {
"id": "cmf3k2x9a0060abcd",
"name": "Sales"
},
"stage": {
"id": "cmf3k2x9a0062abcd",
"name": "Proposal",
"position": 1,
"isWon": false,
"isLost": false
},
"owner": {
"id": "cmf3k2x9a0003abcd",
"name": "Jane Doe",
"email": "jane@acme-mail.com"
},
"company": {
"id": "cmf3k2x9a0002abcd",
"name": "Acme",
"domain": "acme.com"
},
"contacts": [
{
"id": "cmf3k2x9a0001abcd",
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@acme.com",
"isPrimary": true
}
],
"fields": {},
"createdAt": "2026-09-01T09:00:00.000Z",
"updatedAt": "2026-09-15T10:12:00.000Z"
}
}Update a deal
PATCH/api/v1/deals/:id
Change a deal's fields or move it to another stage. Only keys you send are changed. A stage move is logged on every linked contact's timeline.
Request body
| Field | Type | Description |
|---|---|---|
name | string | — |
amount | number | string | null | Deal value with up to two decimals. null clears it. |
currency | string | ISO 4217 code such as GBP or USD. |
closeDate | string | null | Expected close date, yyyy-mm-dd. null clears it. |
stage | string | A stage of the deal's pipeline, by id or name. |
ownerId | string | null | — |
companyId | string | null | — |
contactIds | string[] | Contacts linked to the deal; the first is primary. Replaces the existing links. |
fields | object | Custom field values keyed by field key. Unknown keys are rejected; get_workspace lists the defined fields. |
Responses
| Status | Meaning |
|---|---|
| 200 | Body: { deal }. |
| 404 | No deal with that id. |
Example request
curl -X PATCH https://crowdstack.org/api/v1/deals/cmf3k2x9a0001abcd \
-H "Authorization: Bearer $CROWDSTACK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"stage": "Won"
}'Example response
{
"deal": {
"id": "cmf3k2x9a0080abcd",
"name": "Acme renewal",
"amount": "12000.00",
"currency": "GBP",
"closeDate": "2026-10-31",
"status": "won",
"pipeline": {
"id": "cmf3k2x9a0060abcd",
"name": "Sales"
},
"stage": {
"id": "cmf3k2x9a0063abcd",
"name": "Won",
"position": 2,
"isWon": true,
"isLost": false
},
"owner": {
"id": "cmf3k2x9a0003abcd",
"name": "Jane Doe",
"email": "jane@acme-mail.com"
},
"company": {
"id": "cmf3k2x9a0002abcd",
"name": "Acme",
"domain": "acme.com"
},
"contacts": [
{
"id": "cmf3k2x9a0001abcd",
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@acme.com",
"isPrimary": true
}
],
"fields": {},
"createdAt": "2026-09-01T09:00:00.000Z",
"updatedAt": "2026-09-15T10:12:00.000Z"
}
}Delete a deal
DELETE/api/v1/deals/:id
Permanently deletes a deal and its notes.
Responses
| Status | Meaning |
|---|---|
| 200 | Body: { deleted: true }. |
| 404 | No deal with that id. |
Example request
curl -X DELETE https://crowdstack.org/api/v1/deals/cmf3k2x9a0001abcd \
-H "Authorization: Bearer $CROWDSTACK_API_KEY"Example response
{
"deleted": true
}