Skip to content

List Lead Status Definitions

Your organisation's status catalogue, with the reasons and sub-reasons each status accepts.

Endpoint

GET /v2/lead-status-definitions

Request

curl --location '{base_url}/v2/lead-status-definitions' \
  --header 'Authorization: Bearer JWT_TOKEN'

Response

Success Response

Code: 200 OK

{
  "items": [
    {
      "id": "8d2c5e0a-41f7-4b3e-9a6d-2f1b7c4e9a01",
      "label": "New Lead",
      "stage": "NEW",
      "is_system": true,
      "sort_order": 0,
      "reasons": []
    },
    {
      "id": "c4a91f37-0b6e-4d28-8f15-6e3a2b9d7c42",
      "label": "Contacted",
      "stage": "IN_PROGRESS",
      "is_system": false,
      "sort_order": 1,
      "reasons": [
        {
          "id": "1f6b8d24-93ce-4a57-b0e1-5c7d2a9f3e18",
          "label": "Left voicemail",
          "needs_follow_up": true,
          "sort_order": 0,
          "subreasons": []
        },
        {
          "id": "5e9a2c71-d84b-4f06-a3c9-0b7e1f6d2a55",
          "label": "Spoke with patient",
          "needs_follow_up": false,
          "sort_order": 1,
          "subreasons": [
            {
              "id": "a7d3f5b9-2c18-4e6a-9b40-8f1c5e2d7b63",
              "label": "Interested, deciding",
              "sort_order": 0
            },
            {
              "id": "3b8e6a1d-f9c2-47d5-8e03-a6c4b2f1d970",
              "label": "Has questions",
              "sort_order": 1
            }
          ]
        }
      ]
    },
    {
      "id": "d4a8e1c6-7f2b-4e93-8c5a-0b6d3f9e2a71",
      "label": "Converted",
      "stage": "CONVERTED",
      "is_system": true,
      "sort_order": 98,
      "reasons": []
    },
    {
      "id": "e2f7c9a4-6b1d-4c83-b5e9-1d0a7f3c8b26",
      "label": "Dropped",
      "stage": "DROPPED",
      "is_system": true,
      "sort_order": 99,
      "reasons": [
        {
          "id": "6c2e9f41-8b5d-4a7c-9e13-2d4f7a8b1c95",
          "label": "Out of area",
          "needs_follow_up": false,
          "sort_order": 0,
          "subreasons": [
            {
              "id": "b9d14e72-3c6a-4f85-a0b2-7e5c1d9f4a36",
              "label": "Moved away",
              "sort_order": 0
            }
          ]
        }
      ]
    }
  ]
}

Response Fields

Field Type Description
items array of object Every status in your organisation's catalogue. See Items.

Items

Field Type Description
id string The id to send as status_id, reason_id or subreason_id. It stays the same when the name changes.
label string Display label, as your organisation configured it.
stage string The stage this status belongs to. Choosing an IN_PROGRESS status moves a NEW lead to IN_PROGRESS; nothing moves a lead back, so a lead's own stage can be ahead of its status's. The CONVERTED stage holds only the system Converted status, which a booked appointment sets. One of NEW, IN_PROGRESS, CONVERTED, DROPPED.
is_system boolean System statuses can't be removed by the organisation. There are three: the NEW-stage one a lead is raised on, the CONVERTED-stage one a booked appointment puts it on (it can't be changed at all), and the DROPPED-stage one a drop puts it on.
sort_order integer Display order within its list.
reasons array of object The reasons a change to this status can cite. See Reasons.

Reasons

Field Type Description
id string The id to send as status_id, reason_id or subreason_id. It stays the same when the name changes.
label string Display label, as your organisation configured it.
needs_follow_up boolean When true, a status change citing this reason must carry follow_up_date.
sort_order integer Display order within its list.
subreasons array of object Finer reasons under this one. See Subreasons.

Subreasons

Field Type Description
id string The id to send as status_id, reason_id or subreason_id. It stays the same when the name changes.
label string Display label, as your organisation configured it.
sort_order integer Display order within its list.

Error Response

Code: 400 Bad Request

{
  "code": "bad_request",
  "message": "Validation failed",
  "errors": [
    {
      "field": "patient_id",
      "message": "must be a string"
    }
  ]
}

Every error has the same shape — a machine-readable code, a message, and an errors[] array that's empty when there's nothing field-specific to report. The HTTP status is authoritative.

Status code Meaning
400 Bad Request bad_request The request body or parameters failed validation. errors[] names the offending fields.
401 Unauthorized unauthorized The access token is missing, malformed or expired.
403 Forbidden forbidden The request references a resource outside the token's organisation or clinic scope.
404 Not Found not_found No such resource, or it's outside your scope.
429 Too Many Requests rate_limited Rate limit exceeded. Back off and retry.
500 Internal Server Error internal_error Unexpected server error.
502 Bad Gateway upstream_error Upstream service failed or timed out.

Notes

  • Statuses are defined per organisation and named by id, which stays the same when a status is renamed — read this list rather than hard-coding a set. Every organisation has three system statuses: the NEW-stage one a lead is raised on, the CONVERTED-stage one a booked appointment puts it on, and the DROPPED-stage one a drop puts it on. Your own statuses are all IN_PROGRESS.
  • The CONVERTED-stage status has no reasons and can't be chosen or changed — booking an appointment against the lead's case is what puts a lead on it.
  • A reason marked needs_follow_up makes follow_up_date mandatory on a status change that cites it.
  • A status your organisation removes leaves this list, but leads that already have it keep its id and name. It can no longer be chosen.