Programmatically manage your CRM via the SalesKey REST API.
The SalesKey API is served on your own account's domain.
Replace {your-subdomain} in the examples below with your own subdomain:
https://{your-subdomain}.saleskey.ai/api/v1
You can copy your exact base URL from Company Settings → API Keys.
The API uses account-scoped, permission-scoped, time-limited API keys. Generate one under Company Settings → API Keys. The plaintext key is shown once at creation and it can't be retrieved again.
Send it as a Bearer token on every request:
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx
The API is available on the Professional plan only.
All errors use a consistent envelope:
{ "error": { "code": "insufficient_permissions", "message": "..." } }
| HTTP | code |
Meaning |
|---|---|---|
| 401 | invalid_api_key |
Missing, malformed, unknown, or revoked API key. |
| 401 | api_key_expired |
The key is past its expiry date. |
| 403 | plan_upgrade_required |
The account is not on the Professional plan. |
| 403 | insufficient_permissions |
The key lacks the required resource/action grant. |
| 404 | not_found |
The requested resource does not exist. |
| 405 | method_not_allowed |
The HTTP method is not supported for this endpoint. |
| 422 | validation_failed |
The request body failed validation (see error.details). |
| 429 | rate_limit_exceeded |
More than 60 requests per minute for this key. |
| 500 | server_error |
An unexpected error occurred on our side. |
To authenticate requests, include an Authorization header with the value "Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
Generate an API key under Company Settings → API Keys. The plaintext key is shown only once at creation.
Programmatic access to your CRM Leads. All endpoints require a Bearer API key
with the appropriate leads permission and a Professional-plan account.
Returns a paginated list of leads, filterable by any combination of the
params below. Filters accepting an array (param[]=) are OR'd together
within the same param and AND'd with every other param. Any param not
listed here - including its singular form like status or person -
is silently ignored, not applied.
Custom fields (tenant-specific, configured under Settings > Fields) are
also filterable by their slug, e.g. region=Asia does a partial match;
append _gte/_lte to a numeric or date custom field for range
filtering, e.g. budget_gte=1000. This suffix behavior only applies to
custom fields, not the native params below.
Page number.
Results per page (default 25, max 200 - values above 200 are clamped).
When true, returns leads of every status - including archived and converted - and ignores status_id if also sent.
Filter by status ID(s) (see GET /statuses).
Include archived leads instead of excluding them (the default).
Include converted leads instead of excluding them (the default).
Filter by linked Person ID(s).
Filter by linked Organization ID(s).
Filter by owner user ID(s).
Filter by assigned user ID(s).
Filter by following user ID(s).
Filter by Source Channel ID(s) (see GET /source-channels).
Filter by Label ID(s) (see GET /labels?type=lead).
Filter by creator user ID(s).
Partial, case-insensitive match on the lead title.
Filter by ISO 4217 currency code(s).
numeric[] [min] for a lower bound, or [min,max] for a range, on value converted to the account's base currency.
[date] for an exact day, or [start,end] for a range (Y-m-d).
[date] for an exact day, or [start,end] for a range (Y-m-d).
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/leads?page=1&per_page=25&all=1&status_id[]=1&status_id[]=2&archived=&converted=&person_id[]=9&organization_id[]=4&owner_id[]=1&assignees[]=1&followers[]=1&source_channel_id[]=1&labels[]=1&created_by[]=1&title=Acme¤cy[]=USD&value_in_base_currency=0&expected_close_date[]=2026-09-01&created_at[]=2026-01-01&created_at[]=2026-08-01" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 42,
"title": "Acme Corp renewal",
"value": "5000.00",
"currency": "USD",
"value_in_base_currency": "5000.00",
"expected_close_date": "2026-09-01",
"status": {
"id": 1,
"name": "New",
"slug": "lead-new"
},
"person": {
"id": 9,
"name": "John Doe"
},
"organization": {
"id": 4,
"name": "Acme Corp"
},
"owner": {
"id": 1,
"name": "Jane Owner"
},
"source_channel": "Referral",
"source_channel_id": 1,
"exchange_rate": null,
"labels": [
{
"id": 1,
"name": "Hot"
}
],
"assignees": [
{
"id": 1,
"name": "Jane Owner"
}
],
"followers": [
{
"id": 1,
"name": "Jane Owner"
}
],
"creator": {
"id": 1,
"name": "Jane Owner"
},
"custom_fields": {
"region": "Asia"
},
"created_at": "2026-08-06T12:11:37+00:00",
"updated_at": "2026-08-11T06:18:26+00:00"
}
],
"links": {
"first": "https://{your-subdomain}.saleskey.ai/api/v1/leads?per_page=25&page=1",
"last": "https://{your-subdomain}.saleskey.ai/api/v1/leads?per_page=25&page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"per_page": 25,
"to": 1,
"total": 1,
"path": "https://{your-subdomain}.saleskey.ai/api/v1/leads",
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://{your-subdomain}.saleskey.ai/api/v1/leads?per_page=25&page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
]
}
}
The lead ID.
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/leads/42" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 42,
"title": "Acme Corp renewal",
"value": "5000.00",
"currency": "USD",
"value_in_base_currency": "5000.00",
"expected_close_date": "2026-09-01",
"status": {
"id": 1,
"name": "New",
"slug": "lead-new"
},
"person": {
"id": 9,
"name": "John Doe"
},
"organization": {
"id": 4,
"name": "Acme Corp"
},
"owner": {
"id": 1,
"name": "Jane Owner"
},
"source_channel": "Referral",
"source_channel_id": 1,
"exchange_rate": null,
"labels": [
{
"id": 1,
"name": "Hot"
}
],
"assignees": [
{
"id": 1,
"name": "Jane Owner"
}
],
"followers": [
{
"id": 1,
"name": "Jane Owner"
}
],
"creator": {
"id": 1,
"name": "Jane Owner"
},
"custom_fields": {
"region": "Asia"
},
"created_at": "2026-08-06T12:11:37+00:00",
"updated_at": "2026-08-11T06:18:26+00:00"
}
}
title is the only required field. Every other field - person,
organization, owner, status, source, custom fields - is optional and
will be left empty or defaulted (owner defaults to the API key's
creator, status defaults to the account's default lead status) if
omitted.
person and organization are plain names, not IDs. Each is matched
against existing records by an exact, case-insensitive name match - if
found, the lead is linked to that existing record; if not found, a new
record is created with just that name (matching the CRM's built-in
"select or create" behavior). Any other field not listed below is
stored as a custom field.
curl --request POST \
"https://{your-subdomain}.saleskey.ai/api/v1/leads" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"title\": \"Acme Corp renewal\",
\"value\": 5000,
\"currency\": \"USD\",
\"exchange_rate\": 1,
\"expected_close_date\": \"2026-09-01\",
\"person\": \"John Doe\",
\"organization\": \"Acme Corp\",
\"status_id\": 1,
\"source_channel_id\": 1,
\"source_channel\": \"Referral\",
\"owner_id\": 1,
\"labels\": [
1,
2
],
\"assignees\": [
1
],
\"followers\": [
1
]
}"
{
"data": {
"id": 43,
"title": "Acme Corp renewal",
"value": "5000.00",
"currency": "USD",
"value_in_base_currency": "5000.00",
"expected_close_date": "2026-09-01",
"status": {
"id": 1,
"name": "New",
"slug": "lead-new"
},
"person": {
"id": 9,
"name": "John Doe"
},
"organization": {
"id": 4,
"name": "Acme Corp"
},
"owner": {
"id": 1,
"name": "Jane Owner"
},
"source_channel": null,
"source_channel_id": null,
"exchange_rate": null,
"labels": [],
"assignees": [],
"followers": [],
"creator": {
"id": 1,
"name": "Jane Owner"
},
"custom_fields": null,
"created_at": "2026-08-06T12:11:37+00:00",
"updated_at": "2026-08-06T12:11:37+00:00"
}
}
Partial update - send only the fields you want to change.
person and organization follow the same match-or-create rule as
create: exact, case-insensitive name match against an existing record,
or a new record is created if no match exists.
The lead ID.
curl --request PATCH \
"https://{your-subdomain}.saleskey.ai/api/v1/leads/42" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"title\": \"Acme Corp renewal (updated)\",
\"value\": 7500,
\"currency\": \"USD\",
\"exchange_rate\": 1,
\"expected_close_date\": \"2026-09-01\",
\"person\": \"John Doe\",
\"organization\": \"Acme Corp\",
\"status_id\": 1,
\"source_channel_id\": 1,
\"source_channel\": \"Referral\",
\"owner_id\": 1,
\"labels\": [
1,
2
],
\"assignees\": [
1
],
\"followers\": [
1
]
}"
{
"data": {
"id": 42,
"title": "Acme Corp renewal (updated)",
"value": "7500.00",
"currency": "USD",
"value_in_base_currency": "7500.00",
"expected_close_date": "2026-09-01",
"status": {
"id": 1,
"name": "New",
"slug": "lead-new"
},
"person": {
"id": 9,
"name": "John Doe"
},
"organization": {
"id": 4,
"name": "Acme Corp"
},
"owner": {
"id": 1,
"name": "Jane Owner"
},
"source_channel": "Referral",
"source_channel_id": 1,
"exchange_rate": null,
"labels": [
{
"id": 1,
"name": "Hot"
}
],
"assignees": [
{
"id": 1,
"name": "Jane Owner"
}
],
"followers": [
{
"id": 1,
"name": "Jane Owner"
}
],
"creator": {
"id": 1,
"name": "Jane Owner"
},
"custom_fields": {
"region": "Asia"
},
"created_at": "2026-08-06T12:11:37+00:00",
"updated_at": "2026-08-11T06:18:26+00:00"
}
}
Soft-deletes the lead, matching the internal delete behavior.
The lead ID.
curl --request DELETE \
"https://{your-subdomain}.saleskey.ai/api/v1/leads/42" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" [Empty response]
Programmatic access to your CRM Deals. All endpoints require a Bearer API key
with the appropriate deals permission and a Professional-plan account.
Returns a paginated list of deals, filterable by any combination of the
params below. Filters accepting an array (param[]=) are OR'd together
within the same param and AND'd with every other param. Any param not
listed here - including its singular form like status or person -
is silently ignored, not applied.
Custom fields (tenant-specific, configured under Settings > Fields) are
also filterable by their slug, e.g. country=Qatar does a partial
match; append _gte/_lte to a numeric or date custom field for range
filtering, e.g. budget_gte=1000. This suffix behavior only applies to
custom fields, not the native params below.
Page number.
Results per page (default 25, max 200 - values above 200 are clamped).
When true, returns deals of every status - including archived and won - and ignores status_id if also sent.
Filter by status ID(s) (see GET /statuses).
Include archived (and won) deals instead of excluding them (the default).
Filter by Pipeline ID (see GET /pipelines).
Filter by linked Person ID(s).
Filter by linked Organization ID(s).
Filter by owner user ID(s).
Filter by assigned user ID(s).
Filter by following user ID(s).
Filter by Source Channel ID(s) (see GET /source-channels).
Filter by Label ID(s) (see GET /labels?type=deal).
Filter by creator user ID(s).
Partial, case-insensitive match on the deal title.
Filter by ISO 4217 currency code(s).
numeric[] [min] for a lower bound, or [min,max] for a range, on value converted to the account's base currency.
[date] for an exact day, or [start,end] for a range (Y-m-d).
[date] for an exact day, or [start,end] for a range (Y-m-d).
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/deals?page=1&per_page=25&all=1&status_id[]=15&archived=&pipeline=1&person_id[]=9&organization_id[]=4&owner_id[]=1&assignees[]=1&followers[]=1&source_channel_id[]=1&labels[]=1&created_by[]=1&title=Acme¤cy[]=USD&value_in_base_currency=0&expected_close_date[]=2026-09-01&created_at[]=2026-01-01&created_at[]=2026-08-01" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 7,
"title": "Acme Corp expansion",
"value": "12000.00",
"currency": "USD",
"value_in_base_currency": "12000.00",
"expected_close_date": "2026-09-01",
"status": {
"id": 15,
"name": "Open",
"slug": "deal-open"
},
"pipeline": {
"id": 1,
"name": "Deal Flow"
},
"pipeline_stage": {
"id": 1,
"name": "Qualified"
},
"closed_reason": null,
"closed_reason_note": null,
"person": {
"id": 9,
"name": "John Doe"
},
"organization": {
"id": 4,
"name": "Acme Corp"
},
"owner": {
"id": 1,
"name": "Jane Owner"
},
"source_channel": "Referral",
"source_channel_id": 1,
"exchange_rate": null,
"labels": [
{
"id": 1,
"name": "Hot"
}
],
"assignees": [
{
"id": 1,
"name": "Jane Owner"
}
],
"followers": [
{
"id": 1,
"name": "Jane Owner"
}
],
"creator": {
"id": 1,
"name": "Jane Owner"
},
"custom_fields": {
"country": "Qatar"
},
"created_at": "2026-08-06T11:42:43+00:00",
"updated_at": "2026-08-06T11:43:16+00:00"
}
],
"links": {
"first": "https://{your-subdomain}.saleskey.ai/api/v1/deals?per_page=25&page=1",
"last": "https://{your-subdomain}.saleskey.ai/api/v1/deals?per_page=25&page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"per_page": 25,
"to": 1,
"total": 1,
"path": "https://{your-subdomain}.saleskey.ai/api/v1/deals",
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://{your-subdomain}.saleskey.ai/api/v1/deals?per_page=25&page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
]
}
}
The deal ID.
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/deals/7" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 7,
"title": "Acme Corp expansion",
"value": "12000.00",
"currency": "USD",
"value_in_base_currency": "12000.00",
"expected_close_date": "2026-09-01",
"status": {
"id": 15,
"name": "Open",
"slug": "deal-open"
},
"pipeline": {
"id": 1,
"name": "Deal Flow"
},
"pipeline_stage": {
"id": 1,
"name": "Qualified"
},
"closed_reason": null,
"closed_reason_note": null,
"person": {
"id": 9,
"name": "John Doe"
},
"organization": {
"id": 4,
"name": "Acme Corp"
},
"owner": {
"id": 1,
"name": "Jane Owner"
},
"source_channel": "Referral",
"source_channel_id": 1,
"exchange_rate": null,
"labels": [
{
"id": 1,
"name": "Hot"
}
],
"assignees": [
{
"id": 1,
"name": "Jane Owner"
}
],
"followers": [
{
"id": 1,
"name": "Jane Owner"
}
],
"creator": {
"id": 1,
"name": "Jane Owner"
},
"custom_fields": {
"country": "Qatar"
},
"created_at": "2026-08-06T11:42:43+00:00",
"updated_at": "2026-08-06T11:43:16+00:00"
}
}
title is the only required field. Every other field is optional.
pipeline_id and pipeline_stage_id default independently when
omitted: a missing pipeline_id resolves to the tenant's default
(first active) pipeline; a missing pipeline_stage_id resolves to the
first stage of whichever pipeline was used (the one you passed, or the
default) - so passing pipeline_id alone still picks that specific
pipeline's first stage, not the tenant default's.
Pass lead_id to convert an existing Lead into this Deal - the source
Lead is marked converted, and its linked emails are copied over, exactly
as when converting a lead from the app itself.
person and organization are plain names, not IDs. Each is matched
against existing records by an exact, case-insensitive name match. If
found, the deal is linked to that existing record; if not found, a new
record is created with just that name. Any other field not listed
below is stored as a custom field.
curl --request POST \
"https://{your-subdomain}.saleskey.ai/api/v1/deals" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"title\": \"Acme Corp expansion\",
\"value\": 12000,
\"currency\": \"USD\",
\"exchange_rate\": 1,
\"expected_close_date\": \"2026-09-01\",
\"pipeline_id\": 1,
\"pipeline_stage_id\": 3,
\"lead_id\": 42,
\"person\": \"John Doe\",
\"organization\": \"Acme Corp\",
\"status_id\": 1,
\"source_channel_id\": 1,
\"source_channel\": \"Referral\",
\"owner_id\": 1,
\"labels\": [
1,
2
],
\"assignees\": [
1
],
\"followers\": [
1
]
}"
{
"data": {
"id": 8,
"title": "Acme Corp expansion",
"value": "12000.00",
"currency": "USD",
"value_in_base_currency": "12000.00",
"expected_close_date": null,
"status": {
"id": 15,
"name": "Open",
"slug": "deal-open"
},
"pipeline": {
"id": 1,
"name": "Deal Flow"
},
"pipeline_stage": {
"id": 1,
"name": "Qualified"
},
"closed_reason": null,
"closed_reason_note": null,
"person": {
"id": 9,
"name": "John Doe"
},
"organization": {
"id": 4,
"name": "Acme Corp"
},
"owner": {
"id": 1,
"name": "Jane Owner"
},
"source_channel": null,
"source_channel_id": null,
"exchange_rate": null,
"labels": [],
"assignees": [],
"followers": [],
"creator": {
"id": 1,
"name": "Jane Owner"
},
"custom_fields": null,
"created_at": "2026-08-06T11:42:43+00:00",
"updated_at": "2026-08-06T11:42:43+00:00"
}
}
Partial update - send only the fields you want to change. Pipeline stage cannot be changed here; use the dedicated stage endpoint below.
person and organization follow the same match-or-create rule as
create: exact, case-insensitive name match against an existing record,
or a new record is created if no match exists.
The deal ID.
curl --request PATCH \
"https://{your-subdomain}.saleskey.ai/api/v1/deals/7" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"title\": \"Acme Corp expansion (updated)\",
\"value\": 15000,
\"currency\": \"USD\",
\"exchange_rate\": 1,
\"person\": \"John Doe\",
\"organization\": \"Acme Corp\",
\"status_id\": 1,
\"source_channel_id\": 1,
\"source_channel\": \"Referral\",
\"owner_id\": 1,
\"labels\": [
1,
2
],
\"assignees\": [
1
],
\"followers\": [
1
]
}"
{
"data": {
"id": 7,
"title": "Acme Corp expansion (updated)",
"value": "15000.00",
"currency": "USD",
"value_in_base_currency": "15000.00",
"expected_close_date": "2026-09-01",
"status": {
"id": 15,
"name": "Open",
"slug": "deal-open"
},
"pipeline": {
"id": 1,
"name": "Deal Flow"
},
"pipeline_stage": {
"id": 1,
"name": "Qualified"
},
"closed_reason": null,
"closed_reason_note": null,
"person": {
"id": 9,
"name": "John Doe"
},
"organization": {
"id": 4,
"name": "Acme Corp"
},
"owner": {
"id": 1,
"name": "Jane Owner"
},
"source_channel": "Referral",
"source_channel_id": 1,
"exchange_rate": null,
"labels": [
{
"id": 1,
"name": "Hot"
}
],
"assignees": [
{
"id": 1,
"name": "Jane Owner"
}
],
"followers": [
{
"id": 1,
"name": "Jane Owner"
}
],
"creator": {
"id": 1,
"name": "Jane Owner"
},
"custom_fields": {
"country": "Qatar"
},
"created_at": "2026-08-06T11:42:43+00:00",
"updated_at": "2026-08-11T06:30:44+00:00"
}
}
The deal ID.
curl --request PATCH \
"https://{your-subdomain}.saleskey.ai/api/v1/deals/7/stage" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"pipeline_stage_id\": 3,
\"pipeline_id\": 1
}"
{
"data": {
"id": 7,
"title": "Acme Corp expansion",
"value": "12000.00",
"currency": "USD",
"value_in_base_currency": "12000.00",
"expected_close_date": "2026-09-01",
"status": {
"id": 15,
"name": "Open",
"slug": "deal-open"
},
"pipeline": {
"id": 1,
"name": "Deal Flow"
},
"pipeline_stage": {
"id": 2,
"name": "Contact Made"
},
"closed_reason": null,
"closed_reason_note": null,
"person": {
"id": 9,
"name": "John Doe"
},
"organization": {
"id": 4,
"name": "Acme Corp"
},
"owner": {
"id": 1,
"name": "Jane Owner"
},
"source_channel": "Referral",
"source_channel_id": 1,
"exchange_rate": null,
"labels": [
{
"id": 1,
"name": "Hot"
}
],
"assignees": [
{
"id": 1,
"name": "Jane Owner"
}
],
"followers": [
{
"id": 1,
"name": "Jane Owner"
}
],
"creator": {
"id": 1,
"name": "Jane Owner"
},
"custom_fields": {
"country": "Qatar"
},
"created_at": "2026-08-06T11:42:43+00:00",
"updated_at": "2026-08-11T06:31:00+00:00"
}
}
Soft-deletes the deal, matching the internal delete behavior.
The deal ID.
curl --request DELETE \
"https://{your-subdomain}.saleskey.ai/api/v1/deals/7" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" [Empty response]
Programmatic access to your CRM People (contacts). All endpoints require a
Bearer API key with the appropriate people permission and a
Professional-plan account.
Returns a paginated list of people. Supports page, per_page, and the
same filters as the web app.
Page number.
Results per page (default 25, max 200 - values above 200 are clamped).
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/people?page=1&per_page=25" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 9,
"name": "John Doe",
"first_name": "John",
"last_name": "Doe",
"email": [
{
"label": "Work",
"value": "john.doe@example.com"
}
],
"phone": [
{
"label": "Mobile",
"value": "+17703505963"
}
],
"status": {
"id": 9,
"name": "Lead",
"slug": "contact-lead"
},
"organizations": [
{
"id": 4,
"name": "Acme Corp"
}
],
"custom_fields": {
"region": "Asia"
},
"created_at": "2026-08-06T12:11:37+00:00",
"updated_at": "2026-08-06T12:11:37+00:00"
}
],
"links": {
"first": "https://{your-subdomain}.saleskey.ai/api/v1/people?per_page=25&page=1",
"last": "https://{your-subdomain}.saleskey.ai/api/v1/people?per_page=25&page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"per_page": 25,
"to": 1,
"total": 1,
"path": "https://{your-subdomain}.saleskey.ai/api/v1/people",
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://{your-subdomain}.saleskey.ai/api/v1/people?per_page=25&page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
]
}
}
The person ID.
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/people/9" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 9,
"name": "John Doe",
"first_name": "John",
"last_name": "Doe",
"email": [
{
"label": "Work",
"value": "john.doe@example.com"
}
],
"phone": [
{
"label": "Mobile",
"value": "+17703505963"
}
],
"status": {
"id": 9,
"name": "Lead",
"slug": "contact-lead"
},
"organizations": [
{
"id": 4,
"name": "Acme Corp"
}
],
"custom_fields": {
"region": "Asia"
},
"created_at": "2026-08-06T12:11:37+00:00",
"updated_at": "2026-08-06T12:11:37+00:00"
}
}
name is the only required field. Every other field - email, phone,
status, custom fields - is optional and will be left empty or defaulted
(status defaults to the account's default contact status) if omitted.
Pass organization to attach a Person's Organization - a plain name,
matched by exact, case-insensitive name against an existing
Organization (attached if found), or created if no match exists. A
Person's organization is a many-to-many link, not a single field.
curl --request POST \
"https://{your-subdomain}.saleskey.ai/api/v1/people" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Jane Doe\",
\"organization\": \"Acme Corp\"
}"
{
"data": {
"id": 9,
"name": "Jane Doe",
"first_name": "Jane",
"last_name": "Doe",
"email": null,
"phone": null,
"status": {
"id": 9,
"name": "Lead",
"slug": "contact-lead"
},
"organizations": [],
"custom_fields": null,
"created_at": "2026-08-06T12:11:37+00:00",
"updated_at": "2026-08-06T12:11:37+00:00"
}
}
Partial update - send only the fields you want to change. Unlike the
internal app's edit form, organization can be sent alongside other
fields in the same request; the organization link is replaced (not
added to) when provided. It follows the same match-or-create rule as
create: exact, case-insensitive name match against an existing
Organization, or a new one is created if no match exists.
The person ID.
curl --request PATCH \
"https://{your-subdomain}.saleskey.ai/api/v1/people/9" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Jane Doe (updated)\",
\"organization\": \"Acme Corp\"
}"
{
"data": {
"id": 9,
"name": "Jane Doe (updated)",
"first_name": "Jane",
"last_name": "Doe (updated)",
"email": null,
"phone": null,
"status": {
"id": 9,
"name": "Lead",
"slug": "contact-lead"
},
"organizations": [
{
"id": 4,
"name": "Acme Corp"
}
],
"custom_fields": null,
"created_at": "2026-08-06T09:26:59+00:00",
"updated_at": "2026-08-06T11:46:04+00:00"
}
}
Soft-deletes the person, matching the internal delete behavior.
The person ID.
curl --request DELETE \
"https://{your-subdomain}.saleskey.ai/api/v1/people/9" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" [Empty response]
Programmatic access to your CRM Organizations. All endpoints require a
Bearer API key with the appropriate organizations permission and a
Professional-plan account.
Returns a paginated list of organizations. Supports page, per_page,
and the same filters as the web app.
Page number.
Results per page (default 25, max 200 - values above 200 are clamped).
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/organizations?page=1&per_page=25" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 4,
"name": "Acme Corp",
"email": "info@acme.test",
"phone": "+13947741292",
"website": "https://acme.test",
"street_address": "3944 Broadway",
"city": "Phoenix",
"state": "AZ",
"postal_code": "27434",
"country": "United States",
"status": {
"id": 11,
"name": "In Deal",
"slug": "contact-in-deal"
},
"people": [
{
"id": 9,
"name": "John Doe"
}
],
"custom_fields": {
"industry": "SaaS"
},
"created_at": "2026-08-05T07:05:52+00:00",
"updated_at": "2026-08-06T11:42:43+00:00"
}
],
"links": {
"first": "https://{your-subdomain}.saleskey.ai/api/v1/organizations?per_page=25&page=1",
"last": "https://{your-subdomain}.saleskey.ai/api/v1/organizations?per_page=25&page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"per_page": 25,
"to": 1,
"total": 1,
"path": "https://{your-subdomain}.saleskey.ai/api/v1/organizations",
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://{your-subdomain}.saleskey.ai/api/v1/organizations?per_page=25&page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
]
}
}
The organization ID.
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/organizations/4" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 4,
"name": "Acme Corp",
"email": "info@acme.test",
"phone": "+13947741292",
"website": "https://acme.test",
"street_address": "3944 Broadway",
"city": "Phoenix",
"state": "AZ",
"postal_code": "27434",
"country": "United States",
"status": {
"id": 11,
"name": "In Deal",
"slug": "contact-in-deal"
},
"people": [
{
"id": 9,
"name": "John Doe"
}
],
"custom_fields": {
"industry": "SaaS"
},
"created_at": "2026-08-05T07:05:52+00:00",
"updated_at": "2026-08-06T11:42:43+00:00"
}
}
name is the only required field. Every other field is optional. Note:
status_id cannot be set on create - it always defaults to the
account's default contact status, matching the internal app's existing
behavior. To attach people to the organization, use the dedicated
link-person endpoint below after creation.
curl --request POST \
"https://{your-subdomain}.saleskey.ai/api/v1/organizations" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Acme Corp\",
\"website\": \"acme.test\"
}"
{
"data": {
"id": 4,
"name": "Acme Corp",
"email": null,
"phone": null,
"website": "https://acme.test",
"street_address": null,
"city": null,
"state": null,
"postal_code": null,
"country": null,
"status": {
"id": 8,
"name": "Record Only",
"slug": "contact-record-only"
},
"people": [],
"custom_fields": null,
"created_at": "2026-08-06T11:46:31+00:00",
"updated_at": "2026-08-06T11:46:31+00:00"
}
}
Partial update - send only the fields you want to change.
The organization ID.
curl --request PATCH \
"https://{your-subdomain}.saleskey.ai/api/v1/organizations/4" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Acme Corp (updated)\"
}"
{
"data": {
"id": 4,
"name": "Acme Corp (updated)",
"email": "info@acme.test",
"phone": "+13947741292",
"website": "https://acme.test",
"street_address": "3944 Broadway",
"city": "Phoenix",
"state": "AZ",
"postal_code": "27434",
"country": "United States",
"status": {
"id": 11,
"name": "In Deal",
"slug": "contact-in-deal"
},
"people": [
{
"id": 9,
"name": "John Doe"
}
],
"custom_fields": {
"industry": "SaaS"
},
"created_at": "2026-08-05T07:05:52+00:00",
"updated_at": "2026-08-06T11:42:43+00:00"
}
}
person is a plain name - matched by exact, case-insensitive name
against an existing Person (attached if found), or created and
attached if no match exists.
The organization ID.
curl --request POST \
"https://{your-subdomain}.saleskey.ai/api/v1/organizations/4/people" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"person\": \"Jane Doe\"
}"
{
"data": {
"id": 4,
"name": "Acme Corp",
"email": null,
"phone": null,
"website": "https://acme.test",
"street_address": null,
"city": null,
"state": null,
"postal_code": null,
"country": null,
"status": {
"id": 11,
"name": "In Deal",
"slug": "contact-in-deal"
},
"people": [
{
"id": 9,
"name": "Jane Doe"
}
],
"custom_fields": null,
"created_at": "2026-08-05T07:05:52+00:00",
"updated_at": "2026-08-06T11:42:43+00:00"
}
}
Detaches the person without deleting the Person record itself.
The organization ID.
The person ID to unlink.
curl --request DELETE \
"https://{your-subdomain}.saleskey.ai/api/v1/organizations/4/people/9" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"person_id\": 16
}"
{
"data": {
"id": 4,
"name": "Acme Corp",
"email": null,
"phone": null,
"website": "https://acme.test",
"street_address": null,
"city": null,
"state": null,
"postal_code": null,
"country": null,
"status": {
"id": 11,
"name": "In Deal",
"slug": "contact-in-deal"
},
"people": [],
"custom_fields": null,
"created_at": "2026-08-05T07:05:52+00:00",
"updated_at": "2026-08-06T11:42:43+00:00"
}
}
Soft-deletes the organization, matching the internal delete behavior.
The organization ID.
curl --request DELETE \
"https://{your-subdomain}.saleskey.ai/api/v1/organizations/4" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" [Empty response]
Read-only access to the Status definitions used by Leads, Deals, People, and
Organizations - lets you discover valid status_id values before creating
or updating those resources. Requires a Bearer API key with the statuses
permission and a Professional-plan account. Creating, reordering, and
deleting statuses (including reassigning or removing the records on a
status) is a Settings-only capability and is not exposed via the API.
Returns the statuses defined for a single type, ordered the same way
they appear in the Settings UI. type=contact covers both People and
Organizations - there's no separate person/organization type.
One of: lead, contact, deal, project. contact covers both People and Organizations.
Page number.
Results per page (default 25, max 200 - values above 200 are clamped).
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/statuses?type=lead&page=1&per_page=25" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"type\": \"lead\"
}"
{
"data": [
{
"id": 1,
"name": "New",
"slug": "lead-new",
"type": "lead",
"color": "4299E1",
"order": 1,
"is_locked": true
},
{
"id": 2,
"name": "Attempted",
"slug": "lead-attempted",
"type": "lead",
"color": "ECC94B",
"order": 2,
"is_locked": false
},
{
"id": 3,
"name": "Contacted",
"slug": "lead-contacted",
"type": "lead",
"color": "ED8936",
"order": 3,
"is_locked": false
},
{
"id": 4,
"name": "Qualified",
"slug": "lead-qualified",
"type": "lead",
"color": "48BB78",
"order": 4,
"is_locked": true
},
{
"id": 5,
"name": "Unqualified",
"slug": "lead-unqualified",
"type": "lead",
"color": "F56565",
"order": 5,
"is_locked": true
},
{
"id": 6,
"name": "Converted",
"slug": "lead-converted",
"type": "lead",
"color": "38B2AC",
"order": 6,
"is_locked": true
},
{
"id": 7,
"name": "Archived",
"slug": "lead-archived",
"type": "lead",
"color": "A0AEC0",
"order": 7,
"is_locked": true
}
],
"links": {
"first": "https://{your-subdomain}.saleskey.ai/api/v1/statuses?type=lead&per_page=25&page=1",
"last": "https://{your-subdomain}.saleskey.ai/api/v1/statuses?type=lead&per_page=25&page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"per_page": 25,
"to": 7,
"total": 7,
"path": "https://{your-subdomain}.saleskey.ai/api/v1/statuses",
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://{your-subdomain}.saleskey.ai/api/v1/statuses?type=lead&per_page=25&page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
]
}
}
The status ID.
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/statuses/1" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"name": "New",
"slug": "lead-new",
"type": "lead",
"color": "4299E1",
"order": 1,
"is_locked": true
}
}
Read-only access to the Label definitions used to tag Leads, Deals, and
Projects. Lets you discover valid label ids to populate the labels field
on POST/PATCH /leads and /deals (attaching labels to a record is
unchanged - still handled there, not by this API). Requires a Bearer API
key with the labels permission and a Professional-plan account. Creating,
reordering, and deleting label definitions is a Settings-only capability
and is not exposed via the API.
Returns the labels defined for a single type, ordered the same way they appear in the Settings UI. Not paginated - label counts per type are typically small.
One of: lead, deal, project.
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/labels?type=lead" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"type\": \"lead\"
}"
{
"data": [
{
"id": 1,
"name": "Hot",
"slug": "lead-hot",
"type": "lead",
"color": "F56565",
"order": 1
},
{
"id": 2,
"name": "Warm",
"slug": "lead-warm",
"type": "lead",
"color": "ED8936",
"order": 2
},
{
"id": 3,
"name": "Cold",
"slug": "lead-cold",
"type": "lead",
"color": "4299E1",
"order": 3
}
]
}
The label ID.
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/labels/1" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"name": "Hot",
"slug": "lead-hot",
"type": "lead",
"color": "F56565",
"order": 1
}
}
Read-only access to the Source Channel definitions used by Leads and Deals
(e.g. Website, Referral). Lets you discover valid source_channel_id
values before creating or updating those resources. Requires a Bearer API
key with the source_channels permission and a Professional-plan account.
Creating, reordering, and deleting source channel definitions is a
Settings-only capability and is not exposed via the API.
Returns every source channel, ordered the same way they appear in the Settings UI. Not paginated - source channel counts are typically small.
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/source-channels" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 1,
"name": "Website",
"order": 1
},
{
"id": 2,
"name": "Referral",
"order": 4
}
]
}
The source channel ID.
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/source-channels/1" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"name": "Website",
"order": 1
}
}
Read-only access to Deal Pipelines and their stages. Lets you discover
valid pipeline_id/pipeline_stage_id values before creating or updating
a Deal (Leads have no pipeline concept). Requires a Bearer API key with the
pipelines permission and a Professional-plan account. Creating, updating,
and deleting pipelines/stages - including operations that can reassign or
delete every Deal on a pipeline - is a Settings-only capability and is not
exposed via the API.
Returns every active pipeline with its stages. Not paginated - pipeline counts are typically small.
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/pipelines" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 1,
"name": "Deal Flow",
"is_active": true,
"has_probabilities": true,
"stages": [
{
"id": 1,
"name": "Qualified",
"color": "EF4444",
"order": 1,
"probability": "10.00"
},
{
"id": 2,
"name": "Contact Made",
"color": "F59E0B",
"order": 2,
"probability": "30.00"
},
{
"id": 3,
"name": "Demo Scheduled",
"color": "EAB308",
"order": 3,
"probability": "50.00"
},
{
"id": 4,
"name": "Proposal Made",
"color": "3B82F6",
"order": 4,
"probability": "75.00"
},
{
"id": 5,
"name": "Negotiation Started",
"color": "10B981",
"order": 5,
"probability": "100.00"
}
]
}
]
}
The pipeline ID.
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/pipelines/1" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"name": "Deal Flow",
"is_active": true,
"has_probabilities": true,
"stages": [
{
"id": 1,
"name": "Qualified",
"color": "EF4444",
"order": 1,
"probability": "10.00"
},
{
"id": 2,
"name": "Contact Made",
"color": "F59E0B",
"order": 2,
"probability": "30.00"
},
{
"id": 3,
"name": "Demo Scheduled",
"color": "EAB308",
"order": 3,
"probability": "50.00"
},
{
"id": 4,
"name": "Proposal Made",
"color": "3B82F6",
"order": 4,
"probability": "75.00"
},
{
"id": 5,
"name": "Negotiation Started",
"color": "10B981",
"order": 5,
"probability": "100.00"
}
]
}
}
Read-only access to the tenant's Users - lets you discover valid
owner_id, assignees, and followers values before creating or
updating Leads/Deals. Requires a Bearer API key with the users
permission and a Professional-plan account. Inviting, deactivating, and
managing roles for users is a Settings-only capability and is not
exposed via the API.
Returns a paginated list of active (non-deleted) users.
Page number.
Results per page (default 25, max 200 - values above 200 are clamped).
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/users?page=1&per_page=25" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 1,
"name": "Jane Owner",
"email": "jane@acme.test",
"status": "active",
"roles": [
"Account Owner"
],
"created_at": "2026-07-23T10:00:00+00:00",
"updated_at": "2026-07-23T10:00:00+00:00"
}
],
"links": {
"first": "...",
"last": "...",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"per_page": 25,
"total": 1
}
}
The user ID.
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/users/1" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"name": "Jane Owner",
"email": "jane@acme.test",
"status": "active",
"roles": [
"Account Owner"
]
}
}
Read-only access to the fields available on Leads, Deals, People, and
Organizations - both built-in and custom - including resolved options for
select/multiselect fields. Lets you discover exactly what a create/update
payload can contain before sending one. Requires a Bearer API key with the
fields permission and a Professional-plan account. Creating, editing, and
reordering fields is a Settings-only capability and is not exposed via the
API.
options is resolved server-side wherever a real backing source exists
(statuses, labels, source channels, users, people, organizations,
pipelines) for the built-in select fields, and read directly from the
field's own stored choices for custom select/multiselect fields. Three
built-in fields can't be resolved to one flat, context-free list: a Deal's
pipeline stage (valid stages depend on which pipeline is chosen - see
GET /pipelines), and country/currency (static lists with no backing
tenant-DB service). For these, options is null and options_source is
set to pipeline_stages, countries, or currencies instead.
Returns every visible built-in and custom field for a single entity type, in the same order they appear in the Settings UI, including resolved options for select/multiselect fields.
One of: lead, deal, person, organization.
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/fields?type=lead" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"type\": \"person\"
}"
{
"data": [
{
"id": 29,
"slug": "lead_title",
"name": "Title",
"type": "input",
"relation_type": "lead",
"is_default": true,
"options": null,
"order": 1
},
{
"id": 32,
"slug": "lead_currency",
"name": "Currency",
"type": "select_currency",
"relation_type": "lead",
"is_default": true,
"options": null,
"options_source": "currencies",
"order": 4
},
{
"id": 33,
"slug": "lead_value",
"name": "Value",
"type": "input_money",
"relation_type": "lead",
"is_default": true,
"options": null,
"order": 5
},
{
"id": 36,
"slug": "lead_expected_close_date",
"name": "Expected Close Date",
"type": "date",
"relation_type": "lead",
"is_default": true,
"options": null,
"order": 8
},
{
"id": 37,
"slug": "lead_person_id",
"name": "Person",
"type": "create_or_select_person",
"relation_type": "lead",
"is_default": true,
"options": [],
"order": 9
},
{
"id": 38,
"slug": "lead_organization_id",
"name": "Organization",
"type": "create_or_select_organization",
"relation_type": "lead",
"is_default": true,
"options": [],
"order": 10
},
{
"id": 39,
"slug": "lead_status_id",
"name": "Status",
"type": "select_status",
"relation_type": "lead",
"is_default": true,
"options": [
{
"value": 1,
"label": "New"
},
{
"value": 2,
"label": "Attempted"
},
{
"value": 3,
"label": "Contacted"
},
{
"value": 4,
"label": "Qualified"
},
{
"value": 5,
"label": "Unqualified"
},
{
"value": 6,
"label": "Converted"
},
{
"value": 7,
"label": "Archived"
}
],
"order": 11
},
{
"id": 40,
"slug": "lead_labels",
"name": "Labels",
"type": "multiselect_labels",
"relation_type": "lead",
"is_default": true,
"options": [
{
"value": 1,
"label": "Hot"
},
{
"value": 2,
"label": "Warm"
},
{
"value": 3,
"label": "Cold"
}
],
"order": 12
},
{
"id": 41,
"slug": "lead_source_channel_id",
"name": "Source Channel",
"type": "select_source_channel",
"relation_type": "lead",
"is_default": true,
"options": [
{
"value": 1,
"label": "Website"
},
{
"value": 2,
"label": "Social Media"
},
{
"value": 3,
"label": "Email Campaign"
},
{
"value": 4,
"label": "Referral"
},
{
"value": 5,
"label": "Event"
},
{
"value": 6,
"label": "Prospector"
}
],
"order": 13
},
{
"id": 43,
"slug": "lead_owner_id",
"name": "Owner",
"type": "select_user",
"relation_type": "lead",
"is_default": true,
"options": [
{
"value": 1,
"label": "Jane Owner"
}
],
"order": 15
},
{
"id": 44,
"slug": "lead_assignees",
"name": "Assignees",
"type": "multiselect_users",
"relation_type": "lead",
"is_default": true,
"options": [
{
"value": 1,
"label": "Jane Owner"
}
],
"order": 16
},
{
"id": 542,
"slug": "lead_region",
"name": "Region",
"type": "select",
"relation_type": "lead",
"is_default": false,
"options": [
"Asia",
"Europe",
"North America",
"South America",
"Africa",
"Australia"
],
"order": 21
}
]
}
The field ID.
curl --request GET \
--get "https://{your-subdomain}.saleskey.ai/api/v1/fields/11" \
--header "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 39,
"slug": "lead_status_id",
"name": "Status",
"type": "select_status",
"relation_type": "lead",
"is_default": true,
"options": [
{
"value": 1,
"label": "New"
},
{
"value": 2,
"label": "Attempted"
},
{
"value": 3,
"label": "Contacted"
},
{
"value": 4,
"label": "Qualified"
},
{
"value": 5,
"label": "Unqualified"
},
{
"value": 6,
"label": "Converted"
},
{
"value": 7,
"label": "Archived"
}
],
"order": 11
}
}