Browse documentation

Sales & dashboards

Current release · Updated October 2, 2026

DryKraft sales & dashboards API: methods, permissions, request fields, response shapes, examples and current limits. Read authentication and error handling first.

GET/api/pipelines

List sales pipelines

Access: Workspace member · Success: 200

Returns saved stages, IDs and timestamps.

No request body is required.

Response

Pipeline[].

Request shape (illustrative)
curl --request GET \
  --url 'https://app.drykraft.com/api/pipelines' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'
POST/api/pipelines

Create pipeline

Access: Owner or admin · Success: 201

Stage IDs must be unique.

JSON request

Use Pipeline.

Response

Use Pipeline.

Request shape (illustrative)
curl --request POST \
  --url 'https://app.drykraft.com/api/pipelines' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "<Pipeline name>",
  "stages": [
    {
      "id": "<value>",
      "name": "<Stage label>",
      "probability": 0,
      "color": "<value>"
    }
  ]
}'
PUT/api/pipelines/{id}

Update pipeline

Access: Owner or admin · Success: 200

Move deals before removing a stage they use. Returns 404 when missing.

JSON request

Use Pipeline.

Response

Use Pipeline.

Request shape (illustrative)
curl --request PUT \
  --url 'https://app.drykraft.com/api/pipelines/00000000-0000-4000-8000-000000000001' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "<Pipeline name>",
  "stages": [
    {
      "id": "<value>",
      "name": "<Stage label>",
      "probability": 0,
      "color": "<value>"
    }
  ]
}'
GET/api/dashboards

List dashboards

Access: Workspace member · Success: 200

Saved dashboard rows include id, name, widgets and version.

No request body is required.

Response

object[]. id, tenant_id, name, widgets (Widget[]), version, created_at

Request shape (illustrative)
curl --request GET \
  --url 'https://app.drykraft.com/api/dashboards' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'
POST/api/dashboards

Create dashboard

Access: Owner, admin or member · Success: 201

Creates an empty dashboard.

JSON request

FieldTypeRequiredDetails
namestringYesName Max 100 characters.

Response

object. Dashboard row

Request shape (illustrative)
curl --request POST \
  --url 'https://app.drykraft.com/api/dashboards' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "<Name>"
}'
PUT/api/dashboards/{id}

Save dashboard

Access: Owner, admin or member · Success: 200

Up to 30 unique widget IDs. Validates aggregations against workspace objects and fields. Optimistic version is required.

JSON request

FieldTypeRequiredDetails
namestringYesName Max 100 characters.
widgetsWidget[]Yes Max 30 items.
versionintegerYesPositive optimistic version returned by the latest read. Refresh on 409; do not overwrite stale changes. Min 1.

Response

object. Updated dashboard with incremented version

Request shape (illustrative)
curl --request PUT \
  --url 'https://app.drykraft.com/api/dashboards/00000000-0000-4000-8000-000000000001' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "<Name>",
  "widgets": [],
  "version": 1
}'
POST/api/analytics/query

Query KPIs

Access: Workspace member · Success: 200

Counts, sum or average; optional exact filter and grouping. Monetary totals remain in one currency. Financial sums/averages need explicit currency or currency filter. <=100 groups per widget.

JSON request

FieldTypeRequiredDetails
widgetsWidget[]Yes Max 30 items.

Response

object. Result map keyed by widget ID

Request shape (illustrative)
curl --request POST \
  --url 'https://app.drykraft.com/api/analytics/query' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{
  "widgets": []
}'