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

ParameterTypeDescription
pipelineIdstring
stageIdstring
statusopen | won | lostopen means in a stage that is neither won nor lost.
ownerIdstring
companyIdstring
contactIdstringDeals this contact is linked to.
qstringMatches the deal name.
limitnumberPage size, 1 to 100. Default 50.
cursorstringThe 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

StatusMeaning
404No 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

FieldTypeDescription
namerequiredstring
pipelineIdstringDefaults to the workspace's default pipeline.
amountnumber | string | nullDeal value with up to two decimals. null clears it.
currencystringISO 4217 code such as GBP or USD.
closeDatestring | nullExpected close date, yyyy-mm-dd. null clears it.
stagestringA stage of the deal's pipeline, by id or name.
ownerIdstring | null
companyIdstring | null
contactIdsstring[]Contacts linked to the deal; the first is primary. Replaces the existing links.
fieldsobjectCustom field values keyed by field key. Unknown keys are rejected; get_workspace lists the defined fields.

Responses

StatusMeaning
201Body: { deal }.
422Unknown 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

FieldTypeDescription
namestring
amountnumber | string | nullDeal value with up to two decimals. null clears it.
currencystringISO 4217 code such as GBP or USD.
closeDatestring | nullExpected close date, yyyy-mm-dd. null clears it.
stagestringA stage of the deal's pipeline, by id or name.
ownerIdstring | null
companyIdstring | null
contactIdsstring[]Contacts linked to the deal; the first is primary. Replaces the existing links.
fieldsobjectCustom field values keyed by field key. Unknown keys are rejected; get_workspace lists the defined fields.

Responses

StatusMeaning
200Body: { deal }.
404No 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

StatusMeaning
200Body: { deleted: true }.
404No 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
}