Something new is coming up soon from Kanishu — stay tuned.

Developers › API reference

Sales Lead Management (CRM)

Base address https://crm.kanishu.com/api/v1 · Download the OpenAPI description (for Postman, code generators and the like).

Conventions shared by every endpoint — tokens, headers, lists, safe retries, versions, limits — are in the developer guide; error codes are on Error codes. Each endpoint below names the scope a token needs.

Jump to: API access · Contacts · Deals · Leads · People

API access

POST /api/v1/api-access-requests

Create in api access requests

Request fields (JSON body)

allowed_ipsstring (up to 2000), can be null
api_client_idinteger, can be null
purpose requiredstring (up to 1000)
scopes requiredlist of string
validity_daysinteger: 30, 60, 90, can be null

201 — Created. The record is in `data`; its address in `Location`.

GET /api/v1/api-access-requests/pending

Pending (api access requests pending)

ParameterInTypeAbout
fieldsquerystringOnly these fields of each record, comma-separated (e.g. `id,name`; nested: `owner.name`). `id` always comes back.

200 — OK.

POST /api/v1/api-access-requests/{apiAccessRequest}/approve

Approve (api access requests approve)

ParameterInTypeAbout
apiAccessRequest requiredpathinteger

200 — OK.

POST /api/v1/api-access-requests/{apiAccessRequest}/reject

Reject (api access requests reject)

ParameterInTypeAbout
apiAccessRequest requiredpathinteger

Request fields (JSON body)

reason requiredstring (up to 500)

200 — OK.

GET /api/v1/api-access-requests/{apiAccessRequest}/reveal

Reveal (api access requests reveal)

ParameterInTypeAbout
apiAccessRequest requiredpathinteger
fieldsquerystringOnly these fields of each record, comma-separated (e.g. `id,name`; nested: `owner.name`). `id` always comes back.

200 — OK.

Reply fields (1)
tokenstringThe API token, shown this once. Store it in your secrets manager and send it as Authorization: Bearer <token>.

Need fewer? Add ?fields= with the names you want, e.g. ?fields=token.

Contacts

GET /api/v1/contacts

List contacts · scope contacts:read

ParameterInTypeAbout
pagequeryintegerPage number, from 1.
per_pagequeryintegerItems a page (default 25, at most 100).
qquerystringSearch text.
filter[account_id]querystringOnly records with this value; several values comma-separated mean "any of".
sortquerystringComma-separated; prefix - for descending. Allowed: name, created_at, updated_at. Default: id.
fieldsquerystringOnly these fields of each record, comma-separated (e.g. `id,name`; nested: `owner.name`). `id` always comes back.
includequerystringRelated records in the same answer, comma-separated: `account` — The company account the record belongs to (needs `contacts:read`); `owner` — The record's owner: id, name, email; `deals` — The contact's deals (only those the token's owner may see), as GET /deals returns them (needs `deals:read`); `source_lead` — The lead the record came from, as GET /leads/{lead} returns it (only if the token's owner may see it) (needs `leads:read`).

200 — A page of results.

Reply fields (75) — each record in data

Also in the answer: meta, links.

idinteger
namestring
emailstring
phonestring
companystringCompany name as typed; account_id is the linked account record.
account_idintegerThe company account the contact belongs to (?include=account).
owner_user_idintegerThe salesperson who owns the contact (?include=owner).
converted_from_lead_idinteger, can be nullThe lead this contact was converted from, if any (?include=source_lead).
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)
custom_fieldsobjectYour organisation's own extra fields, by field name.
accountobjectOnly with ?include=account. The company account the record belongs to.
account.idinteger
account.namestring
account.domainstring, can be null
account.gstinstring, can be null
account.owner_user_idinteger
account.created_atstring (date and time, ISO 8601)
account.updated_atstring (date and time, ISO 8601)
account.countrystring, can be null
account.statestring, can be null
account.citystring, can be null
account.pincodestring, can be null
account.territory_idinteger, can be null
ownerobjectOnly with ?include=owner. The record's owner: id, name, email.
owner.idinteger
owner.namestring
owner.emailstring
dealslistOnly with ?include=deals. The contact's deals (only those the token's owner may see), as GET /deals returns them.
deals[].idinteger
deals[].titlestring
deals[].contact_idinteger
deals[].source_lead_idinteger, can be null
deals[].pipeline_idinteger
deals[].pipeline_stage_idinteger
deals[].valuestring, can be null
deals[].currencystring
deals[].fx_ratestring
deals[].fx_rate_datestring (date and time, ISO 8601)
deals[].fx_rate_sourcestring
deals[].value_homestring
deals[].forecast_categorystring, can be null
deals[].expected_close_datestring (date and time, ISO 8601), can be null
deals[].statusstring
deals[].stale_alert_sent_atstring (date and time, ISO 8601), can be null
deals[].owner_user_idinteger
deals[].closed_atstring (date and time, ISO 8601), can be null
deals[].close_reasonstring, can be null
deals[].close_notestring, can be null
deals[].created_atstring (date and time, ISO 8601)
deals[].updated_atstring (date and time, ISO 8601)
deals[].custom_fieldsobject
source_leadobject, can be nullOnly with ?include=source_lead. The lead the record came from, as GET /leads/{lead} returns it (only if the token's owner may see it).
source_lead.idinteger
source_lead.namestring
source_lead.emailstring
source_lead.phonestring
source_lead.companystring
source_lead.account_idinteger
source_lead.sourcestring
source_lead.statusstring
source_lead.disqualified_reasonstring, can be null
source_lead.scoreinteger
source_lead.stale_alert_sent_atstring (date and time, ISO 8601), can be null
source_lead.owner_user_idinteger
source_lead.converted_to_contact_idinteger
source_lead.converted_atstring (date and time, ISO 8601)
source_lead.created_atstring (date and time, ISO 8601)
source_lead.updated_atstring (date and time, ISO 8601)
source_lead.countrystring
source_lead.statestring
source_lead.citystring
source_lead.pincodestring
source_lead.territory_idinteger, can be null
source_lead.custom_fieldsobject

Need fewer? Add ?fields= with the names you want, e.g. ?fields=name,email.

POST /api/v1/contacts

Create in contacts · scope contacts:write

Request fields (JSON body)

companystring (up to 255), can be nullCompany name as typed; account_id is the linked account record.
emailstring (email) (up to 255), can be null
name requiredstring (up to 255)
phonestring (up to 50), can be null

201 — Created. The record is in `data`; its address in `Location`.

Reply fields (11) — in data
idinteger
namestring
emailstring
phonestring
companystringCompany name as typed; account_id is the linked account record.
account_idintegerThe company account the contact belongs to (?include=account).
owner_user_idintegerThe salesperson who owns the contact (?include=owner).
converted_from_lead_idinteger, can be nullThe lead this contact was converted from, if any (?include=source_lead).
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)
custom_fieldsobjectYour organisation's own extra fields, by field name.

GET /api/v1/contacts/{contact}

Get one of contacts · scope contacts:read

ParameterInTypeAbout
contact requiredpathinteger
fieldsquerystringOnly these fields of each record, comma-separated (e.g. `id,name`; nested: `owner.name`). `id` always comes back.
includequerystringRelated records in the same answer, comma-separated: `account` — The company account the record belongs to (needs `contacts:read`); `owner` — The record's owner: id, name, email; `deals` — The contact's deals (only those the token's owner may see), as GET /deals returns them (needs `deals:read`); `source_lead` — The lead the record came from, as GET /leads/{lead} returns it (only if the token's owner may see it) (needs `leads:read`).

200 — OK. The record is in `data`, with its version in the `ETag` header.

Reply fields (75) — in data
idinteger
namestring
emailstring
phonestring
companystringCompany name as typed; account_id is the linked account record.
account_idintegerThe company account the contact belongs to (?include=account).
owner_user_idintegerThe salesperson who owns the contact (?include=owner).
converted_from_lead_idinteger, can be nullThe lead this contact was converted from, if any (?include=source_lead).
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)
custom_fieldsobjectYour organisation's own extra fields, by field name.
accountobjectOnly with ?include=account. The company account the record belongs to.
account.idinteger
account.namestring
account.domainstring
account.gstinstring
account.owner_user_idinteger
account.created_atstring (date and time, ISO 8601)
account.updated_atstring (date and time, ISO 8601)
account.countrystring
account.statestring
account.citystring
account.pincodestring
account.territory_idinteger, can be null
ownerobjectOnly with ?include=owner. The record's owner: id, name, email.
owner.idinteger
owner.namestring
owner.emailstring
dealslistOnly with ?include=deals. The contact's deals (only those the token's owner may see), as GET /deals returns them.
deals[].idinteger
deals[].titlestring
deals[].contact_idinteger
deals[].source_lead_idinteger, can be null
deals[].pipeline_idinteger
deals[].pipeline_stage_idinteger
deals[].valuestring
deals[].currencystring
deals[].fx_ratestring
deals[].fx_rate_datestring (date and time, ISO 8601)
deals[].fx_rate_sourcestring
deals[].value_homestring
deals[].forecast_categorystring
deals[].expected_close_datestring (date and time, ISO 8601)
deals[].statusstring
deals[].stale_alert_sent_atstring (date and time, ISO 8601), can be null
deals[].owner_user_idinteger
deals[].closed_atstring (date and time, ISO 8601), can be null
deals[].close_reasonstring, can be null
deals[].close_notestring, can be null
deals[].created_atstring (date and time, ISO 8601)
deals[].updated_atstring (date and time, ISO 8601)
deals[].custom_fieldsobject
source_leadobject, can be nullOnly with ?include=source_lead. The lead the record came from, as GET /leads/{lead} returns it (only if the token's owner may see it).
source_lead.idinteger
source_lead.namestring
source_lead.emailstring
source_lead.phonestring
source_lead.companystring
source_lead.account_idinteger
source_lead.sourcestring
source_lead.statusstring
source_lead.disqualified_reasonstring, can be null
source_lead.scoreinteger
source_lead.stale_alert_sent_atstring (date and time, ISO 8601), can be null
source_lead.owner_user_idinteger
source_lead.converted_to_contact_idinteger
source_lead.converted_atstring (date and time, ISO 8601)
source_lead.created_atstring (date and time, ISO 8601)
source_lead.updated_atstring (date and time, ISO 8601)
source_lead.countrystring
source_lead.statestring
source_lead.citystring
source_lead.pincodestring
source_lead.territory_idinteger, can be null
source_lead.custom_fieldsobject

Need fewer? Add ?fields= with the names you want, e.g. ?fields=name,email.

PATCH /api/v1/contacts/{contact}

Change one of contacts · scope contacts:write

ParameterInTypeAbout
contact requiredpathinteger

Request fields (JSON body) — send only the fields you change

companystring (up to 255), can be nullCompany name as typed; account_id is the linked account record.
emailstring (email) (up to 255), can be null
namestring (up to 255)
phonestring (up to 50), can be null

200 — OK. The record is in `data`, with its version in the `ETag` header.

Reply fields (11) — in data
idinteger
namestring
emailstring
phonestring
companystringCompany name as typed; account_id is the linked account record.
account_idintegerThe company account the contact belongs to (?include=account).
owner_user_idintegerThe salesperson who owns the contact (?include=owner).
converted_from_lead_idinteger, can be nullThe lead this contact was converted from, if any (?include=source_lead).
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)
custom_fieldsobjectYour organisation's own extra fields, by field name.

Deals

GET /api/v1/deals

List deals · scope deals:read

ParameterInTypeAbout
pagequeryintegerPage number, from 1.
per_pagequeryintegerItems a page (default 25, at most 100).
qquerystringSearch text.
filter[status]querystringOnly records with this value; several values comma-separated mean "any of".
filter[pipeline_stage_id]querystringOnly records with this value; several values comma-separated mean "any of".
filter[contact_id]querystringOnly records with this value; several values comma-separated mean "any of".
sortquerystringComma-separated; prefix - for descending. Allowed: title, value, expected_close_date, created_at, updated_at. Default: id.
fieldsquerystringOnly these fields of each record, comma-separated (e.g. `id,name`; nested: `owner.name`). `id` always comes back.
includequerystringRelated records in the same answer, comma-separated: `contact` — The deal's contact, as GET /contacts/{contact} returns it (needs `contacts:read`); `stage` — The deal's pipeline stage: id, name, probability_percent, is_won_stage, is_lost_stage, and its pipeline (id, name); `owner` — The record's owner: id, name, email; `source_lead` — The lead the record came from, as GET /leads/{lead} returns it (only if the token's owner may see it) (needs `leads:read`).

200 — A page of results.

Reply fields (71) — each record in data

Also in the answer: meta, links.

idinteger
titlestring
contact_idintegerThe deal's contact (?include=contact).
source_lead_idinteger, can be nullThe lead the deal came from, if any (?include=source_lead).
pipeline_idintegerThe sales pipeline the deal is in.
pipeline_stage_idintegerThe stage within that pipeline (?include=stage returns its name and win probability).
valuestring, can be nullDeal value in the deal's own currency.
currencystringISO currency code of value (e.g. INR, USD).
fx_ratestringExchange rate used for value_home (1 unit of currency in home currency).
fx_rate_datestring (date and time, ISO 8601)The date of that exchange rate.
fx_rate_sourcestringWhere the rate came from (e.g. the reference rate service, or typed in).
value_homestringThe value in your organisation's home currency, at the exchange rate fixed when entered.
forecast_categorystring, can be nullcommit, best_case, pipeline or omitted — how sure the owner is it will close.
expected_close_datestring (date and time, ISO 8601), can be nullWhen the deal is expected to close.
statusstringopen, won or lost.
stale_alert_sent_atstring (date and time, ISO 8601), can be nullWhen the owner was last reminded that the deal had no activity.
owner_user_idintegerThe salesperson who owns the deal (?include=owner).
closed_atstring (date and time, ISO 8601), can be nullWhen it was marked won or lost.
close_reasonstring, can be nullWhy it was won or lost: Price, Timing, Competitor, No budget, No response, Feature gap or Other.
close_notestring, can be nullFree-text note recorded when it was closed.
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)
custom_fieldsobjectYour organisation's own extra fields, by field name.
contactobjectOnly with ?include=contact. The deal's contact, as GET /contacts/{contact} returns it.
contact.idinteger
contact.namestring
contact.emailstring
contact.phonestring
contact.companystring
contact.account_idinteger
contact.owner_user_idinteger
contact.converted_from_lead_idinteger, can be null
contact.created_atstring (date and time, ISO 8601)
contact.updated_atstring (date and time, ISO 8601)
contact.custom_fieldsobject
stageobjectOnly with ?include=stage. The deal's pipeline stage: id, name, probability_percent, is_won_stage, is_lost_stage, and its pipeline (id, name).
stage.idinteger
stage.namestring
stage.probability_percentintegerThe chance of winning at this stage, used for weighted forecasts.
stage.is_won_stagebooleantrue if reaching this stage means the deal is won.
stage.is_lost_stagebooleantrue if reaching this stage means the deal is lost.
stage.pipelineobject
stage.pipeline.idinteger
stage.pipeline.namestring
ownerobjectOnly with ?include=owner. The record's owner: id, name, email.
owner.idinteger
owner.namestring
owner.emailstring
source_leadobject, can be nullOnly with ?include=source_lead. The lead the record came from, as GET /leads/{lead} returns it (only if the token's owner may see it).
source_lead.idinteger
source_lead.namestring
source_lead.emailstring
source_lead.phonestring
source_lead.companystring
source_lead.account_idinteger
source_lead.sourcestring
source_lead.statusstring
source_lead.disqualified_reasonstring, can be null
source_lead.scoreinteger
source_lead.stale_alert_sent_atstring (date and time, ISO 8601), can be null
source_lead.owner_user_idinteger
source_lead.converted_to_contact_idinteger
source_lead.converted_atstring (date and time, ISO 8601)
source_lead.created_atstring (date and time, ISO 8601)
source_lead.updated_atstring (date and time, ISO 8601)
source_lead.countrystring
source_lead.statestring
source_lead.citystring
source_lead.pincodestring
source_lead.territory_idinteger, can be null
source_lead.custom_fieldsobject

Need fewer? Add ?fields= with the names you want, e.g. ?fields=title,contact_id.

POST /api/v1/deals

Create in deals · scope deals:write

Request fields (JSON body)

contact_idstring, can be nullThe deal's contact (?include=contact).
currencystring, can be nullISO currency code of value (e.g. INR, USD).
expected_close_datestring (date), can be nullWhen the deal is expected to close.
pipeline_id requiredstringThe sales pipeline the deal is in.
pipeline_stage_id requiredstringThe stage within that pipeline (?include=stage returns its name and win probability).
title requiredstring (up to 255)
valuenumber, can be nullDeal value in the deal's own currency.

201 — Created. The record is in `data`; its address in `Location`.

Reply fields (23) — in data
idinteger
titlestring
contact_idintegerThe deal's contact (?include=contact).
source_lead_idintegerThe lead the deal came from, if any (?include=source_lead).
pipeline_idintegerThe sales pipeline the deal is in.
pipeline_stage_idintegerThe stage within that pipeline (?include=stage returns its name and win probability).
valuestring, can be nullDeal value in the deal's own currency.
currencystringISO currency code of value (e.g. INR, USD).
fx_ratestringExchange rate used for value_home (1 unit of currency in home currency).
fx_rate_datestring (date and time, ISO 8601)The date of that exchange rate.
fx_rate_sourcestringWhere the rate came from (e.g. the reference rate service, or typed in).
value_homestringThe value in your organisation's home currency, at the exchange rate fixed when entered.
forecast_categorystring, can be nullcommit, best_case, pipeline or omitted — how sure the owner is it will close.
expected_close_datestring (date and time, ISO 8601), can be nullWhen the deal is expected to close.
statusstringopen, won or lost.
stale_alert_sent_atstring (date and time, ISO 8601), can be nullWhen the owner was last reminded that the deal had no activity.
owner_user_idintegerThe salesperson who owns the deal (?include=owner).
closed_atstring (date and time, ISO 8601), can be nullWhen it was marked won or lost.
close_reasonstring, can be nullWhy it was won or lost: Price, Timing, Competitor, No budget, No response, Feature gap or Other.
close_notestring, can be nullFree-text note recorded when it was closed.
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)
custom_fieldsobjectYour organisation's own extra fields, by field name.

GET /api/v1/deals/{deal}

Get one of deals · scope deals:read

ParameterInTypeAbout
deal requiredpathinteger
fieldsquerystringOnly these fields of each record, comma-separated (e.g. `id,name`; nested: `owner.name`). `id` always comes back.
includequerystringRelated records in the same answer, comma-separated: `contact` — The deal's contact, as GET /contacts/{contact} returns it (needs `contacts:read`); `stage` — The deal's pipeline stage: id, name, probability_percent, is_won_stage, is_lost_stage, and its pipeline (id, name); `owner` — The record's owner: id, name, email; `source_lead` — The lead the record came from, as GET /leads/{lead} returns it (only if the token's owner may see it) (needs `leads:read`).

200 — OK. The record is in `data`, with its version in the `ETag` header.

Reply fields (71) — in data
idinteger
titlestring
contact_idintegerThe deal's contact (?include=contact).
source_lead_idintegerThe lead the deal came from, if any (?include=source_lead).
pipeline_idintegerThe sales pipeline the deal is in.
pipeline_stage_idintegerThe stage within that pipeline (?include=stage returns its name and win probability).
valuestring, can be nullDeal value in the deal's own currency.
currencystringISO currency code of value (e.g. INR, USD).
fx_ratestringExchange rate used for value_home (1 unit of currency in home currency).
fx_rate_datestring (date and time, ISO 8601)The date of that exchange rate.
fx_rate_sourcestringWhere the rate came from (e.g. the reference rate service, or typed in).
value_homestringThe value in your organisation's home currency, at the exchange rate fixed when entered.
forecast_categorystring, can be nullcommit, best_case, pipeline or omitted — how sure the owner is it will close.
expected_close_datestring (date and time, ISO 8601), can be nullWhen the deal is expected to close.
statusstringopen, won or lost.
stale_alert_sent_atstring (date and time, ISO 8601), can be nullWhen the owner was last reminded that the deal had no activity.
owner_user_idintegerThe salesperson who owns the deal (?include=owner).
closed_atstring (date and time, ISO 8601), can be nullWhen it was marked won or lost.
close_reasonstring, can be nullWhy it was won or lost: Price, Timing, Competitor, No budget, No response, Feature gap or Other.
close_notestring, can be nullFree-text note recorded when it was closed.
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)
custom_fieldsobjectYour organisation's own extra fields, by field name.
contactobjectOnly with ?include=contact. The deal's contact, as GET /contacts/{contact} returns it.
contact.idinteger
contact.namestring
contact.emailstring
contact.phonestring
contact.companystring
contact.account_idinteger
contact.owner_user_idinteger
contact.converted_from_lead_idinteger
contact.created_atstring (date and time, ISO 8601)
contact.updated_atstring (date and time, ISO 8601)
contact.custom_fieldsobject
stageobjectOnly with ?include=stage. The deal's pipeline stage: id, name, probability_percent, is_won_stage, is_lost_stage, and its pipeline (id, name).
stage.idinteger
stage.namestring
stage.probability_percentintegerThe chance of winning at this stage, used for weighted forecasts.
stage.is_won_stagebooleantrue if reaching this stage means the deal is won.
stage.is_lost_stagebooleantrue if reaching this stage means the deal is lost.
stage.pipelineobject
stage.pipeline.idinteger
stage.pipeline.namestring
ownerobjectOnly with ?include=owner. The record's owner: id, name, email.
owner.idinteger
owner.namestring
owner.emailstring
source_leadobjectOnly with ?include=source_lead. The lead the record came from, as GET /leads/{lead} returns it (only if the token's owner may see it).
source_lead.idinteger
source_lead.namestring
source_lead.emailstring
source_lead.phonestring
source_lead.companystring
source_lead.account_idinteger
source_lead.sourcestring
source_lead.statusstring
source_lead.disqualified_reasonstring, can be null
source_lead.scoreinteger
source_lead.stale_alert_sent_atstring (date and time, ISO 8601), can be null
source_lead.owner_user_idinteger
source_lead.converted_to_contact_idinteger
source_lead.converted_atstring (date and time, ISO 8601)
source_lead.created_atstring (date and time, ISO 8601)
source_lead.updated_atstring (date and time, ISO 8601)
source_lead.countrystring
source_lead.statestring
source_lead.citystring
source_lead.pincodestring
source_lead.territory_idinteger, can be null
source_lead.custom_fieldsobject

Need fewer? Add ?fields= with the names you want, e.g. ?fields=title,contact_id.

PATCH /api/v1/deals/{deal}

Change one of deals · scope deals:write

ParameterInTypeAbout
deal requiredpathinteger

Request fields (JSON body) — send only the fields you change

expected_close_datestring (date), can be nullWhen the deal is expected to close.
titlestring (up to 255)
valuenumber, can be nullDeal value in the deal's own currency.

200 — OK. The record is in `data`, with its version in the `ETag` header.

Reply fields (23) — in data
idinteger
titlestring
contact_idintegerThe deal's contact (?include=contact).
source_lead_idintegerThe lead the deal came from, if any (?include=source_lead).
pipeline_idintegerThe sales pipeline the deal is in.
pipeline_stage_idintegerThe stage within that pipeline (?include=stage returns its name and win probability).
valuestring, can be nullDeal value in the deal's own currency.
currencystringISO currency code of value (e.g. INR, USD).
fx_ratestringExchange rate used for value_home (1 unit of currency in home currency).
fx_rate_datestring (date and time, ISO 8601)The date of that exchange rate.
fx_rate_sourcestringWhere the rate came from (e.g. the reference rate service, or typed in).
value_homestringThe value in your organisation's home currency, at the exchange rate fixed when entered.
forecast_categorystring, can be nullcommit, best_case, pipeline or omitted — how sure the owner is it will close.
expected_close_datestring (date and time, ISO 8601), can be nullWhen the deal is expected to close.
statusstringopen, won or lost.
stale_alert_sent_atstring (date and time, ISO 8601), can be nullWhen the owner was last reminded that the deal had no activity.
owner_user_idintegerThe salesperson who owns the deal (?include=owner).
closed_atstring (date and time, ISO 8601), can be nullWhen it was marked won or lost.
close_reasonstring, can be nullWhy it was won or lost: Price, Timing, Competitor, No budget, No response, Feature gap or Other.
close_notestring, can be nullFree-text note recorded when it was closed.
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)
custom_fieldsobjectYour organisation's own extra fields, by field name.

Leads

GET /api/v1/leads

List leads · scope leads:read

ParameterInTypeAbout
pagequeryintegerPage number, from 1.
per_pagequeryintegerItems a page (default 25, at most 100).
qquerystringSearch text.
filter[status]querystringOnly records with this value; several values comma-separated mean "any of".
filter[source]querystringOnly records with this value; several values comma-separated mean "any of".
sortquerystringComma-separated; prefix - for descending. Allowed: name, score, created_at, updated_at. Default: id.
fieldsquerystringOnly these fields of each record, comma-separated (e.g. `id,name`; nested: `owner.name`). `id` always comes back.
includequerystringRelated records in the same answer, comma-separated: `account` — The company account the record belongs to (needs `contacts:read`); `owner` — The record's owner: id, name, email; `converted_contact` — The contact the lead was converted to, as GET /contacts/{contact} returns it (needs `contacts:read`).

200 — A page of results.

Reply fields (51) — each record in data

Also in the answer: meta, links.

idinteger
namestring
emailstring
phonestring
companystring
account_idinteger, can be nullThe company account the lead belongs to, if linked (?include=account returns it).
sourcestringWhere the lead came from (e.g. website, referral, event) — your own wording.
statusstringnew, contacted, qualified, unqualified or converted.
disqualified_reasonstring, can be nullWhy the lead was marked unqualified, if it was.
scoreintegerLead score from your scoring rules (higher is warmer).
stale_alert_sent_atstring (date and time, ISO 8601), can be nullWhen the owner was last reminded that the lead had no activity.
owner_user_idintegerThe salesperson who owns the lead (?include=owner returns id, name, email).
converted_to_contact_idinteger, can be nullThe contact the lead became when converted (?include=converted_contact).
converted_atstring (date and time, ISO 8601), can be nullWhen the lead was converted.
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)
countrystring
statestring
citystring
pincodestringPostal code (PIN code in India).
territory_idinteger, can be nullThe sales territory, set from the location by your territory rules.
custom_fieldsobjectYour organisation's own extra fields, by field name.
accountobject, can be nullOnly with ?include=account. The company account the record belongs to.
account.idinteger
account.namestring
account.domainstring, can be null
account.gstinstring, can be null
account.owner_user_idinteger
account.created_atstring (date and time, ISO 8601)
account.updated_atstring (date and time, ISO 8601)
account.countrystring, can be null
account.statestring, can be null
account.citystring, can be null
account.pincodestring, can be null
account.territory_idinteger, can be null
ownerobjectOnly with ?include=owner. The record's owner: id, name, email.
owner.idinteger
owner.namestring
owner.emailstring
converted_contactobject, can be nullOnly with ?include=converted_contact. The contact the lead was converted to, as GET /contacts/{contact} returns it.
converted_contact.idinteger
converted_contact.namestring
converted_contact.emailstring
converted_contact.phonestring
converted_contact.companystring
converted_contact.account_idinteger
converted_contact.owner_user_idinteger
converted_contact.converted_from_lead_idinteger
converted_contact.created_atstring (date and time, ISO 8601)
converted_contact.updated_atstring (date and time, ISO 8601)
converted_contact.custom_fieldsobject

Need fewer? Add ?fields= with the names you want, e.g. ?fields=name,email.

POST /api/v1/leads

Create in leads · scope leads:write

Request fields (JSON body)

citystring (up to 80), can be null
companystring (up to 255), can be null
countrystring (up to 80), can be null
emailstring (email) (up to 255), can be null
name requiredstring (up to 255)
phonestring (up to 50), can be null
pincodestring (up to 12), can be nullPostal code (PIN code in India).
sourcestring (up to 255), can be nullWhere the lead came from (e.g. website, referral, event) — your own wording.
statestring (up to 80), can be null

201 — Created. The record is in `data`; its address in `Location`.

Reply fields (22) — in data
idinteger
namestring
emailstring
phonestring
companystring
account_idinteger, can be nullThe company account the lead belongs to, if linked (?include=account returns it).
sourcestringWhere the lead came from (e.g. website, referral, event) — your own wording.
statusstringnew, contacted, qualified, unqualified or converted.
disqualified_reasonstring, can be nullWhy the lead was marked unqualified, if it was.
scoreintegerLead score from your scoring rules (higher is warmer).
stale_alert_sent_atstring (date and time, ISO 8601), can be nullWhen the owner was last reminded that the lead had no activity.
owner_user_idintegerThe salesperson who owns the lead (?include=owner returns id, name, email).
converted_to_contact_idinteger, can be nullThe contact the lead became when converted (?include=converted_contact).
converted_atstring (date and time, ISO 8601), can be nullWhen the lead was converted.
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)
countrystring
statestring
citystring
pincodestringPostal code (PIN code in India).
territory_idinteger, can be nullThe sales territory, set from the location by your territory rules.
custom_fieldsobjectYour organisation's own extra fields, by field name.

GET /api/v1/leads/{lead}

Get one of leads · scope leads:read

ParameterInTypeAbout
lead requiredpathinteger
fieldsquerystringOnly these fields of each record, comma-separated (e.g. `id,name`; nested: `owner.name`). `id` always comes back.
includequerystringRelated records in the same answer, comma-separated: `account` — The company account the record belongs to (needs `contacts:read`); `owner` — The record's owner: id, name, email; `converted_contact` — The contact the lead was converted to, as GET /contacts/{contact} returns it (needs `contacts:read`).

200 — OK. The record is in `data`, with its version in the `ETag` header.

Reply fields (51) — in data
idinteger
namestring
emailstring
phonestring
companystring
account_idinteger, can be nullThe company account the lead belongs to, if linked (?include=account returns it).
sourcestringWhere the lead came from (e.g. website, referral, event) — your own wording.
statusstringnew, contacted, qualified, unqualified or converted.
disqualified_reasonstring, can be nullWhy the lead was marked unqualified, if it was.
scoreintegerLead score from your scoring rules (higher is warmer).
stale_alert_sent_atstring (date and time, ISO 8601), can be nullWhen the owner was last reminded that the lead had no activity.
owner_user_idintegerThe salesperson who owns the lead (?include=owner returns id, name, email).
converted_to_contact_idinteger, can be nullThe contact the lead became when converted (?include=converted_contact).
converted_atstring (date and time, ISO 8601), can be nullWhen the lead was converted.
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)
countrystring
statestring
citystring
pincodestringPostal code (PIN code in India).
territory_idinteger, can be nullThe sales territory, set from the location by your territory rules.
custom_fieldsobjectYour organisation's own extra fields, by field name.
accountobject, can be nullOnly with ?include=account. The company account the record belongs to.
account.idinteger
account.namestring
account.domainstring, can be null
account.gstinstring, can be null
account.owner_user_idinteger
account.created_atstring (date and time, ISO 8601)
account.updated_atstring (date and time, ISO 8601)
account.countrystring, can be null
account.statestring, can be null
account.citystring, can be null
account.pincodestring, can be null
account.territory_idinteger, can be null
ownerobjectOnly with ?include=owner. The record's owner: id, name, email.
owner.idinteger
owner.namestring
owner.emailstring
converted_contactobject, can be nullOnly with ?include=converted_contact. The contact the lead was converted to, as GET /contacts/{contact} returns it.
converted_contact.idinteger
converted_contact.namestring
converted_contact.emailstring
converted_contact.phonestring
converted_contact.companystring
converted_contact.account_idinteger
converted_contact.owner_user_idinteger
converted_contact.converted_from_lead_idinteger
converted_contact.created_atstring (date and time, ISO 8601)
converted_contact.updated_atstring (date and time, ISO 8601)
converted_contact.custom_fieldsobject

Need fewer? Add ?fields= with the names you want, e.g. ?fields=name,email.

PATCH /api/v1/leads/{lead}

Change one of leads · scope leads:write

ParameterInTypeAbout
lead requiredpathinteger

Request fields (JSON body) — send only the fields you change

citystring (up to 80), can be null
companystring (up to 255), can be null
countrystring (up to 80), can be null
emailstring (email) (up to 255), can be null
namestring (up to 255)
phonestring (up to 50), can be null
pincodestring (up to 12), can be nullPostal code (PIN code in India).
statestring (up to 80), can be null
statusstring: new, contacted, qualified, unqualified, convertednew, contacted, qualified, unqualified or converted.

200 — OK. The record is in `data`, with its version in the `ETag` header.

Reply fields (22) — in data
idinteger
namestring
emailstring
phonestring
companystring
account_idinteger, can be nullThe company account the lead belongs to, if linked (?include=account returns it).
sourcestringWhere the lead came from (e.g. website, referral, event) — your own wording.
statusstringnew, contacted, qualified, unqualified or converted.
disqualified_reasonstring, can be nullWhy the lead was marked unqualified, if it was.
scoreintegerLead score from your scoring rules (higher is warmer).
stale_alert_sent_atstring (date and time, ISO 8601), can be nullWhen the owner was last reminded that the lead had no activity.
owner_user_idintegerThe salesperson who owns the lead (?include=owner returns id, name, email).
converted_to_contact_idinteger, can be nullThe contact the lead became when converted (?include=converted_contact).
converted_atstring (date and time, ISO 8601), can be nullWhen the lead was converted.
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)
countrystring
statestring
citystring
pincodestringPostal code (PIN code in India).
territory_idinteger, can be nullThe sales territory, set from the location by your territory rules.
custom_fieldsobjectYour organisation's own extra fields, by field name.

People

GET /api/v1/people

List people · scope people:read

ParameterInTypeAbout
pagequeryintegerPage number, from 1.
per_pagequeryintegerItems a page (default 25, at most 100).
fieldsquerystringOnly these fields of each record, comma-separated (e.g. `id,name`; nested: `owner.name`). `id` always comes back.

200 — A page of results.

Reply fields (24) — each record in data

Also in the answer: meta, links.

idstring (uuid)The person's id in People (a UUID). Use it with /people/{person}.
display_namestringThe name shown everywhere in Kanishu.
preferred_namestring, can be nullWhat they like to be called, if different.
work_emailstringTheir work email address; how they are matched to logins in the products.
employee_numberstring, can be nullYour own employee number for them (e.g. from payroll or HR).
typestringemployee, contractor, external (auditor, consultant…) or other.
statusstringpre_joining (joining soon), active, on_leave, leaving (last working day set) or left.
joining_datestring (date), can be nullTheir first working day.
last_working_datestring (date), can be nullTheir last working day, once they are leaving; their logins are switched off after it.
access_end_datestring (date), can be nullWhen their access to Kanishu products ends, if earlier or later than the last working day (e.g. contractors).
departmentobject, can be nullTheir department or team (id and name), from GET /people-organisation.
department.idstring (uuid)
department.namestring
positionobject, can be nullTheir job position (id and name).
position.idstring (uuid)
position.namestring
locationobject, can be nullTheir office or site (id and name).
location.idstring (uuid)
location.namestring
managerobject, can be nullTheir manager in People (id and display_name).
manager.idstring (uuid)
manager.display_namestring
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)

Need fewer? Add ?fields= with the names you want, e.g. ?fields=display_name,preferred_name.

POST /api/v1/people

Create in people · scope people:write

Request fields (JSON body)

access_end_datestring (date), can be nullWhen their access to Kanishu products ends, if earlier or later than the last working day (e.g. contractors).
display_name requiredstring (up to 255)The name shown everywhere in Kanishu.
employee_numberstring (up to 50), can be nullYour own employee number for them (e.g. from payroll or HR).
employment_statusstring: pre_joining, active, on_leave, leaving, leftpre_joining (joining soon), active, on_leave, leaving (last working day set) or left.
joining_datestring (date), can be nullTheir first working day.
location_idstring (uuid), can be null
manager_person_idstring (uuid), can be nullThe manager's People id.
org_unit_idstring (uuid), can be nullThe department or team id, from GET /people-organisation.
person_typestring: employee, contractor, external, otheremployee, contractor, external (auditor, consultant…) or other.
position_idstring (uuid), can be null
preferred_namestring (up to 255), can be nullWhat they like to be called, if different.
work_emailstring (email) (up to 255), can be nullTheir work email address; how they are matched to logins in the products.

201 — Created. The record is in `data`; its address in `Location`.

Reply fields (24) — in data
idstring (uuid)The person's id in People (a UUID). Use it with /people/{person}.
display_namestringThe name shown everywhere in Kanishu.
preferred_namestring, can be nullWhat they like to be called, if different.
work_emailstringTheir work email address; how they are matched to logins in the products.
employee_numberstring, can be nullYour own employee number for them (e.g. from payroll or HR).
typestringemployee, contractor, external (auditor, consultant…) or other.
statusstringpre_joining (joining soon), active, on_leave, leaving (last working day set) or left.
joining_datestring (date)Their first working day.
last_working_datestring (date), can be nullTheir last working day, once they are leaving; their logins are switched off after it.
access_end_datestring (date), can be nullWhen their access to Kanishu products ends, if earlier or later than the last working day (e.g. contractors).
departmentobjectTheir department or team (id and name), from GET /people-organisation.
department.idstring (uuid)
department.namestring
positionobjectTheir job position (id and name).
position.idstring (uuid)
position.namestring
locationobjectTheir office or site (id and name).
location.idstring (uuid)
location.namestring
managerobject, can be nullTheir manager in People (id and display_name).
manager.idstring (uuid)
manager.display_namestring
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)

GET /api/v1/people-organisation

Organisation (people organisation) · scope people:read

ParameterInTypeAbout
fieldsquerystringOnly these fields of each record, comma-separated (e.g. `id,name`; nested: `owner.name`). `id` always comes back.

200 — OK. The record is in `data`, with its version in the `ETag` header.

Reply fields (18) — in data
departmentslist
departments[].idstring (uuid)
departments[].namestring
departments[].typestringWhat kind of unit it is (e.g. department, team, business unit).
departments[].codestring
departments[].part_of_idinteger or string, can be nullThe unit this one sits under, or null at the top.
departments[].in_usebooleanfalse when the unit is archived and no longer offered.
positionslist
positions[].idstring (uuid)
positions[].namestring
positions[].codestring, can be null
positions[].in_usebooleanfalse when the position is archived.
locationslist
locations[].idstring (uuid)
locations[].namestring
locations[].codestring, can be null
locations[].citystring, can be null
locations[].in_usebooleanfalse when the location is archived.

Need fewer? Add ?fields= with the names you want, e.g. ?fields=departments,positions.

POST /api/v1/people/joiners

Add a joiner (from their start date) · scope people:write

Request fields (JSON body)

accesslist of string, can be nullLogins they should get, as product key => role (e.g. {"itsm": "agent"}); each one waits for an approval.
access_end_datestring (date), can be nullWhen their access to Kanishu products ends, if earlier or later than the last working day (e.g. contractors).
display_name requiredstring (up to 255)The name shown everywhere in Kanishu.
employee_numberstring (up to 50), can be nullYour own employee number for them (e.g. from payroll or HR).
employment_statusstring: pre_joining, active, on_leave, leaving, leftpre_joining (joining soon), active, on_leave, leaving (last working day set) or left.
joining_datestring (date), can be nullTheir first working day.
location_idstring (uuid), can be null
manager_person_idstring (uuid), can be nullThe manager's People id.
org_unit_idstring (uuid), can be nullThe department or team id, from GET /people-organisation.
person_typestring: employee, contractor, external, otheremployee, contractor, external (auditor, consultant…) or other.
position_idstring (uuid), can be null
preferred_namestring (up to 255), can be nullWhat they like to be called, if different.
start_date requiredstring (date)Their first working day; their logins are prepared for it.
work_emailstring (email) (up to 255), can be nullTheir work email address; how they are matched to logins in the products.

201 — The new person, as GET /people/{person} returns them.

Reply fields (24) — in data
idstring (uuid)The person's id in People (a UUID). Use it with /people/{person}.
display_namestringThe name shown everywhere in Kanishu.
preferred_namestring, can be nullWhat they like to be called, if different.
work_emailstringTheir work email address; how they are matched to logins in the products.
employee_numberstring, can be nullYour own employee number for them (e.g. from payroll or HR).
typestringemployee, contractor, external (auditor, consultant…) or other.
statusstringpre_joining (joining soon), active, on_leave, leaving (last working day set) or left.
joining_datestring (date)Their first working day.
last_working_datestring (date), can be nullTheir last working day, once they are leaving; their logins are switched off after it.
access_end_datestring (date), can be nullWhen their access to Kanishu products ends, if earlier or later than the last working day (e.g. contractors).
departmentobjectTheir department or team (id and name), from GET /people-organisation.
department.idstring (uuid)
department.namestring
positionobjectTheir job position (id and name).
position.idstring (uuid)
position.namestring
locationobjectTheir office or site (id and name).
location.idstring (uuid)
location.namestring
managerobject, can be nullTheir manager in People (id and display_name).
manager.idstring (uuid)
manager.display_namestring
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)

GET /api/v1/people/{person}

Get one of people · scope people:read

ParameterInTypeAbout
person requiredpathinteger
fieldsquerystringOnly these fields of each record, comma-separated (e.g. `id,name`; nested: `owner.name`). `id` always comes back.

200 — OK. The record is in `data`, with its version in the `ETag` header.

Reply fields (24) — in data
idstring (uuid)The person's id in People (a UUID). Use it with /people/{person}.
display_namestringThe name shown everywhere in Kanishu.
preferred_namestring, can be nullWhat they like to be called, if different.
work_emailstringTheir work email address; how they are matched to logins in the products.
employee_numberstring, can be nullYour own employee number for them (e.g. from payroll or HR).
typestringemployee, contractor, external (auditor, consultant…) or other.
statusstringpre_joining (joining soon), active, on_leave, leaving (last working day set) or left.
joining_datestring (date)Their first working day.
last_working_datestring (date), can be nullTheir last working day, once they are leaving; their logins are switched off after it.
access_end_datestring (date), can be nullWhen their access to Kanishu products ends, if earlier or later than the last working day (e.g. contractors).
departmentobjectTheir department or team (id and name), from GET /people-organisation.
department.idstring (uuid)
department.namestring
positionobjectTheir job position (id and name).
position.idstring (uuid)
position.namestring
locationobjectTheir office or site (id and name).
location.idstring (uuid)
location.namestring
managerobject, can be nullTheir manager in People (id and display_name).
manager.idstring (uuid)
manager.display_namestring
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)

Need fewer? Add ?fields= with the names you want, e.g. ?fields=display_name,preferred_name.

PATCH /api/v1/people/{person}

Change one of people · scope people:write

ParameterInTypeAbout
person requiredpathinteger

Request fields (JSON body) — send only the fields you change

access_end_datestring (date), can be nullWhen their access to Kanishu products ends, if earlier or later than the last working day (e.g. contractors).
display_namestring (up to 255)The name shown everywhere in Kanishu.
employee_numberstring (up to 50), can be nullYour own employee number for them (e.g. from payroll or HR).
employment_statusstring: pre_joining, active, on_leave, leaving, leftpre_joining (joining soon), active, on_leave, leaving (last working day set) or left.
joining_datestring (date), can be nullTheir first working day.
location_idstring (uuid), can be null
manager_person_idstring (uuid), can be nullThe manager's People id.
org_unit_idstring (uuid), can be nullThe department or team id, from GET /people-organisation.
person_typestring: employee, contractor, external, otheremployee, contractor, external (auditor, consultant…) or other.
position_idstring (uuid), can be null
preferred_namestring (up to 255), can be nullWhat they like to be called, if different.
work_emailstring (email) (up to 255), can be nullTheir work email address; how they are matched to logins in the products.

200 — OK. The record is in `data`, with its version in the `ETag` header.

Reply fields (24) — in data
idstring (uuid)The person's id in People (a UUID). Use it with /people/{person}.
display_namestringThe name shown everywhere in Kanishu.
preferred_namestring, can be nullWhat they like to be called, if different.
work_emailstringTheir work email address; how they are matched to logins in the products.
employee_numberstring, can be nullYour own employee number for them (e.g. from payroll or HR).
typestringemployee, contractor, external (auditor, consultant…) or other.
statusstringpre_joining (joining soon), active, on_leave, leaving (last working day set) or left.
joining_datestring (date)Their first working day.
last_working_datestring (date), can be nullTheir last working day, once they are leaving; their logins are switched off after it.
access_end_datestring (date), can be nullWhen their access to Kanishu products ends, if earlier or later than the last working day (e.g. contractors).
departmentobjectTheir department or team (id and name), from GET /people-organisation.
department.idstring (uuid)
department.namestring
positionobjectTheir job position (id and name).
position.idstring (uuid)
position.namestring
locationobjectTheir office or site (id and name).
location.idstring (uuid)
location.namestring
managerobject, can be nullTheir manager in People (id and display_name).
manager.idstring (uuid)
manager.display_namestring
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)

POST /api/v1/people/{person}/leave

Record a leaver (logins switched off after the last working day, or now if urgent) · scope people:write

ParameterInTypeAbout
person requiredpathinteger

Request fields (JSON body)

last_working_date requiredstring (date)Their last working day, once they are leaving; their logins are switched off after it.
reasonstring (up to 500), can be nullWhy they are leaving (kept in People's History).
urgentbooleantrue to switch their logins off now instead of after the last working day.

200 — The person, as GET /people/{person} returns them.

Reply fields (24) — in data
idstring (uuid)The person's id in People (a UUID). Use it with /people/{person}.
display_namestringThe name shown everywhere in Kanishu.
preferred_namestring, can be nullWhat they like to be called, if different.
work_emailstringTheir work email address; how they are matched to logins in the products.
employee_numberstring, can be nullYour own employee number for them (e.g. from payroll or HR).
typestringemployee, contractor, external (auditor, consultant…) or other.
statusstringpre_joining (joining soon), active, on_leave, leaving (last working day set) or left.
joining_datestring (date)Their first working day.
last_working_datestring (date), can be nullTheir last working day, once they are leaving; their logins are switched off after it.
access_end_datestring (date), can be nullWhen their access to Kanishu products ends, if earlier or later than the last working day (e.g. contractors).
departmentobjectTheir department or team (id and name), from GET /people-organisation.
department.idstring (uuid)
department.namestring
positionobjectTheir job position (id and name).
position.idstring (uuid)
position.namestring
locationobjectTheir office or site (id and name).
location.idstring (uuid)
location.namestring
managerobject, can be nullTheir manager in People (id and display_name).
manager.idstring (uuid)
manager.display_namestring
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)

POST /api/v1/people/{person}/move

Move a person (department, manager, position or location) from a date · scope people:write

ParameterInTypeAbout
person requiredpathinteger

Request fields (JSON body)

department_idstring (uuid), can be nullThe department or team they move to, from GET /people-organisation.
effective_date requiredstring (date)The date the move takes effect.
location_idstring (uuid), can be null
manager_idstring (uuid), can be nullTheir new manager's People id.
position_idstring (uuid), can be null

200 — The person, as GET /people/{person} returns them.

Reply fields (24) — in data
idstring (uuid)The person's id in People (a UUID). Use it with /people/{person}.
display_namestringThe name shown everywhere in Kanishu.
preferred_namestring, can be nullWhat they like to be called, if different.
work_emailstringTheir work email address; how they are matched to logins in the products.
employee_numberstring, can be nullYour own employee number for them (e.g. from payroll or HR).
typestringemployee, contractor, external (auditor, consultant…) or other.
statusstringpre_joining (joining soon), active, on_leave, leaving (last working day set) or left.
joining_datestring (date)Their first working day.
last_working_datestring (date), can be nullTheir last working day, once they are leaving; their logins are switched off after it.
access_end_datestring (date), can be nullWhen their access to Kanishu products ends, if earlier or later than the last working day (e.g. contractors).
departmentobjectTheir department or team (id and name), from GET /people-organisation.
department.idstring (uuid)
department.namestring
positionobjectTheir job position (id and name).
position.idstring (uuid)
position.namestring
locationobjectTheir office or site (id and name).
location.idstring (uuid)
location.namestring
managerobject, can be nullTheir manager in People (id and display_name).
manager.idstring (uuid)
manager.display_namestring
created_atstring (date and time, ISO 8601)
updated_atstring (date and time, ISO 8601)