Intellayer Public API

Intellayer Public API

What this is. The API lets other software read and change your records with an API key you create on Settings > API and webhooks. The key decides what that software may see and do. If someone else builds the connection for you, make a key there and give it to them; the rest of this page is for them.

Getting started

Read and write your organisation's records from your own systems. Every request carries an API key made on Settings > API and webhooks.

Every address on this page starts with https://api.intellayer.app/api/public/v1. The full description for tools (Postman, n8n, Make, Zapier) is the OpenAPI document: /api/public/v1/openapi.json.

  1. Make a key on Settings > API and webhooks, choosing the role it acts with. Copy it: it is shown once.
  2. Check it works by asking who it is:
    curl -H "Authorization: Bearer $API_KEY" https://api.intellayer.app/api/public/v1/me
    If your organisation takes access tokens only, get a token first (Access tokens).
  3. Read records, a page at a time: GET /api/public/v1/leads?page=1&pageSize=50.

To hear about changes as they happen instead of asking again and again, see the Webhooks guide.

Signing in

A key acts as the person who made it, limited to the role chosen for it: it sees and changes only what that role allows, and stops working when it is revoked or expires, or when its creator loses access.

Every key has a client ID, its 12-character public id (the part after ascpk_), shown under each key on Settings > API and webhooks and in the dialog when the key is made. Unless it was made with No secret it also has a secret: the whole key, shown once. An integration signs in in one of three ways:

  1. The key on every call. The simplest: send the key with each request. Refused while access tokens only is on.
  2. An access token from the key. Send the client ID and the key to the token endpoint, get a token that works for one hour, and send the token with each request instead of the key.
  3. An access token from a key pair. The integration keeps a private key that never leaves it and proves who it is with that instead of a secret, then uses the same hour-long token.

Whichever way, every check of the key (revoked, expired, suspended, allowed addresses, role) runs on every call.

The key on every call

Authorization: Bearer ascpk_xxxxxxxxxxxx_…

or X-Api-Key: ascpk_…, for tools that cannot set Authorization.

Access tokens

Instead of sending the key with every call, an integration can trade it for an access token that lasts an hour, so the key itself crosses the network once an hour at most. POST /api/public/v1/oauth/token, form-encoded, with grant_type=client_credentials (OAuth 2.0 client credentials) and the key as the client: client_secret_basic (Authorization: Basic base64(client_id:client_secret)) or client_secret_post (client_id and client_secret in the form). The client_id is the key's client ID (shown under each key on Settings > API and webhooks, and in the dialog when the key is made); the client_secret is the whole key.

curl -s -X POST https://api.intellayer.app/api/public/v1/oauth/token \
  -u "$CLIENT_ID:$API_KEY" -d grant_type=client_credentials

{ "access_token": "eyJ…", "token_type": "Bearer", "expires_in": 3600 }

Send it as Authorization: Bearer <access_token>. Every check of the key runs on every call made with the token: revoke, suspend or limit the key and its tokens stop or are limited at once. Ask for a new token shortly before expires_in runs out; an expired one gets 401 with errors.apiKeys.tokenInvalid.

Node.js:

const res = await fetch(`${apiHost}/api/public/v1/oauth/token`, {
  method: 'POST',
  headers: { Authorization: 'Basic ' + Buffer.from(`${clientId}:${apiKey}`).toString('base64') },
  body: new URLSearchParams({ grant_type: 'client_credentials' }),
});
const { access_token, expires_in } = await res.json();
const leads = await fetch(`${apiHost}/api/public/v1/leads`, { headers: { Authorization: `Bearer ${access_token}` } });

Errors follow RFC 6749: 400 with unsupported_grant_type or invalid_request (no grant, or more than one way of authenticating), 401 with invalid_client for an unknown client or a wrong secret, and 401 invalid_client with the key's own error in error_description (for example errors.apiKeys.revoked or errors.apiKeys.ipNotAllowed). The endpoint takes 30 requests a minute per address; failed attempts count towards the key's unusual-use alerts.

Key pair sign-in

A key can hold the integration's public key instead of, or as well as, a secret (private_key_jwt). The integration then proves itself at the token endpoint with a short assertion signed by its private key (RFC 7523), and the private key never leaves it. Register the public key when making the key, or later from its Public key action: PEM (BEGIN PUBLIC KEY or BEGIN RSA PUBLIC KEY) or a JWK; RSA of at least 2048 bits, or EC P-256 or P-384. Tick No secret and the key has no secret at all: it works only through the token endpoint. Registering or replacing a public key asks for your second factor and is emailed to the Owners.

# EC P-256 (ES256)
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out client.key
# or RSA (RS256)
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out client.key
# the public half, to paste into the settings page
openssl pkey -in client.key -pubout -out client.pub

The assertion is a JWT signed with RS256, ES256 or ES384 (anything else, none and HS256 included, is refused) with these claims: iss and sub the client_id; aud the token endpoint's full URL, https://api.intellayer.app/api/public/v1/oauth/token; exp at most 5 minutes ahead; jti unique (each assertion is accepted once); iat optional. Clocks may differ by up to 60 seconds. Send it as client_assertion with client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer.

Node.js (no libraries):

const { createPrivateKey, sign, randomUUID } = require('crypto');
const key = createPrivateKey(fs.readFileSync('client.key'));
const b64 = o => Buffer.from(JSON.stringify(o)).toString('base64url');
const now = Math.floor(Date.now() / 1000);
const head = b64({ alg: 'ES256', typ: 'JWT' });
const body = b64({ iss: clientId, sub: clientId, aud: tokenUrl, iat: now, exp: now + 120, jti: randomUUID() });
const sig = sign('sha256', Buffer.from(`${head}.${body}`), { key, dsaEncoding: 'ieee-p1363' }).toString('base64url');
const res = await fetch(tokenUrl, { method: 'POST', body: new URLSearchParams({
  grant_type: 'client_credentials',
  client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
  client_assertion: `${head}.${body}.${sig}`,
}) });

C# (System.IdentityModel.Tokens.Jwt):

using var ec = ECDsa.Create();
ec.ImportFromPem(File.ReadAllText("client.key"));
var now = DateTime.UtcNow;
var assertion = new JwtSecurityTokenHandler().WriteToken(new JwtSecurityToken(
    issuer: clientId, audience: tokenUrl,
    claims: [new Claim("sub", clientId), new Claim("jti", Guid.NewGuid().ToString())],
    notBefore: now, expires: now.AddMinutes(2),
    signingCredentials: new SigningCredentials(new ECDsaSecurityKey(ec), SecurityAlgorithms.EcdsaSha256)));
var response = await http.PostAsync(tokenUrl, new FormUrlEncodedContent(new Dictionary<string, string>
{
    ["grant_type"] = "client_credentials",
    ["client_assertion_type"] = "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
    ["client_assertion"] = assertion,
}));

Access tokens only

An Owner can switch the organisation to Access tokens only on Settings > API and webhooks. From then on a key sent with any call other than the token endpoint gets 401 with errors.apiKeys.tokensOnly: only access tokens and key pair sign-in work. Move every integration to tokens before it is turned on.

Key safety and expiry

Format. ascpk_, a 12-character public id, _ and a 49-character secret whose last six characters are a checksum, so a secret scanner can recognise a leaked key without false alarms: \bascpk_[a-km-np-z2-9]{12}_[0-9A-Za-z]{49}\b. Older keys start ak_ and keep working until they expire or are given a new secret.

Expiry. Every key expires: 90 days after it is made unless another date is chosen, a year at most. Its creator and the organisation's Owners are emailed 14 and 3 days before. An expired key gets 401 with errors.apiKeys.expired.

New secret. A key can be given a new secret on the settings page; it keeps its id, role and allowed addresses. The previous secret keeps working for 24 hours, so you can switch without downtime. A second new secret within those 24 hours ends the oldest at once.

Allowed addresses. A key can be limited to IPv4 and IPv6 addresses and ranges (CIDR). A call from anywhere else gets 403 with errors.apiKeys.ipNotAllowed, even with the right key.

Unusual use. The organisation's Owners are emailed when a key is used from a new address or country, its volume jumps, or it keeps being refused. If they have turned on automatic suspension, a key used from a new country or refused again and again with its right secret gets 401 with errors.apiKeys.suspended until an Owner resumes it.

Personal data

A key reads personal data only when it is allowed to (Can read personal data on the settings page; turning it on asks for your second factor and is emailed to the Owners). Keys made before this setting existed keep reading it; new keys do not unless it is ticked. GET /me shows it as canReadPersonalData.

Without it the personal fields are still in every answer, set to null, and the answer carries "redacted": true next to data. The fields: leads and customers: firstName, lastName, email, phone, address, city, district, postalCode, notes; companies: email, phone, notes, taxId, address, city, postalCode (a sole trader's are their own); invoices: billingName, billingVatNumber; proposals: customerName; tasks: description. Writes work as before, though the record returned is redacted too. Finding records by email, and setting a customer's email (a duplicate is refused), get 403 with errors.apiKeys.personalDataRequired, since the answer would say whether that person is on file. Full webhook payloads of a subscription made through such a key are redacted the same way, carry "redacted": true, and their changes name the fields without their values.

Responses and limits

Every response is { "success", "data", "error", "meta" }. Lists take page (from 1) and pageSize (up to 100); meta carries totalCount. Errors carry a stable error.code. Under each endpoint below, Response names the object inside data.

Your organisation has a number of requests per minute, set by its plan and shared by all its keys. A key can also be given a lower limit of its own. Past either you get 429 with Retry-After in seconds; GET /me shows the key's limit.

Endpoints

Companies

GET /api/public/v1/companies

List companies

Returns a page of the companies the key can see, newest first. Pages start at 1; pageSize runs up to 100 (25 by default), and meta.totalCount holds the total. Filter by updatedSince. Needs View on companies. Record scope applies as in the app: the key sees only what its role's scope (own, team, team tree or all) allows.

ParameterInType
pagequeryinteger, string (int32)
pageSizequeryinteger, string (int32)
updatedSincequerystring (date-time)
Response
200 OK: a page of PublicCompany
Errors
401 Unauthorized, 403 Forbidden (ApiResponse); 429 Too Many Requests
POST /api/public/v1/companies

Create a company

Creates a company. Only name is required. Answers 201 with the new company. Needs Create on companies.

Request body
PublicCompanyWrite, JSON
Response
201 Created: PublicCompany
Errors
400 Bad Request, 401 Unauthorized, 403 Forbidden (ApiResponse); 429 Too Many Requests
GET /api/public/v1/companies/{id}

Get a company

Returns one company. Needs View on companies. One the key cannot see answers 404, the same as one that does not exist.

ParameterInType
id *pathstring (uuid)
Response
200 OK: PublicCompany
Errors
401 Unauthorized, 403 Forbidden, 404 Not Found (ApiResponse); 429 Too Many Requests
PUT /api/public/v1/companies/{id}

Replace a company's details

Replaces the company's details with the ones sent: a field left blank is cleared, so send every field you want to keep. Only name is required. ownerUserId left out keeps the owner; each legal identity field (tradingName, legalForm, registrationNumber, taxId, industry, employeeBand) left out stays as it is, and an empty string clears it. Needs Update on companies. One the key cannot see answers 404, the same as one that does not exist.

ParameterInType
id *pathstring (uuid)
Request body
PublicCompanyWrite, JSON
Response
200 OK: PublicCompany
Errors
400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found (ApiResponse); 429 Too Many Requests

Customers

GET /api/public/v1/customers

List customers

Returns a page of the customers the key can see, newest first. Pages start at 1; pageSize runs up to 100 (25 by default), and meta.totalCount holds the total. Archived customers are left out unless includeArchived=true. Filter by updatedSince or email (exact, any case); filtering by email needs a key that may read personal data (403 otherwise). Needs View on customers. Record scope applies as in the app: the key sees only what its role's scope (own, team, team tree or all) allows.

ParameterInType
pagequeryinteger, string (int32)
pageSizequeryinteger, string (int32)
updatedSincequerystring (date-time)
includeArchivedqueryboolean
emailquerystring
Response
200 OK: a page of PublicCustomer
Errors
401 Unauthorized, 403 Forbidden (ApiResponse); 429 Too Many Requests
POST /api/public/v1/customers

Create a customer

Creates a customer as a contact, without a portal login, owned by the key's creator. firstName and lastName are required, and a business customer needs a companyId the key can see (404 otherwise). Setting email needs a key that may read personal data (403 otherwise), since refusing a duplicate would say whether that person is on file. Answers 201 with the new customer. Needs Create on customers.

Request body
PublicCustomerCreate, JSON
Response
201 Created: PublicCustomer
Errors
400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found (ApiResponse); 429 Too Many Requests
GET /api/public/v1/customers/{id}

Get a customer

Returns one customer, archived or not. Needs View on customers. One the key cannot see answers 404, the same as one that does not exist.

ParameterInType
id *pathstring (uuid)
Response
200 OK: PublicCustomer
Errors
401 Unauthorized, 403 Forbidden, 404 Not Found (ApiResponse); 429 Too Many Requests
PATCH /api/public/v1/customers/{id}

Update a customer

Changes only the fields sent and leaves the rest. Changing email never changes the address a customer signs in to the portal with, and setting it needs a key that may read personal data (403 otherwise). Needs Update on customers. One the key cannot see answers 404, the same as one that does not exist.

ParameterInType
id *pathstring (uuid)
Request body
PublicCustomerUpdate, JSON
Response
200 OK: PublicCustomer
Errors
400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found (ApiResponse); 429 Too Many Requests

Invoices

GET /api/public/v1/invoices

List invoices

Returns a page of the invoices the organisation issued, newest first, visible as their customer is. Pages start at 1; pageSize runs up to 100 (25 by default), and meta.totalCount holds the total. Filter by updatedSince or status (draft, sent, paid, partially_paid, overdue or cancelled). Read-only. Needs View on invoices.

ParameterInType
pagequeryinteger, string (int32)
pageSizequeryinteger, string (int32)
updatedSincequerystring (date-time)
statusquerystring
Response
200 OK: a page of PublicInvoice
Errors
401 Unauthorized, 403 Forbidden (ApiResponse); 429 Too Many Requests
GET /api/public/v1/invoices/{id}

Get an invoice

Returns one invoice. Needs View on invoices. One the key cannot see answers 404, the same as one that does not exist.

ParameterInType
id *pathstring (uuid)
Response
200 OK: PublicInvoice
Errors
401 Unauthorized, 403 Forbidden, 404 Not Found (ApiResponse); 429 Too Many Requests

Leads

GET /api/public/v1/leads

List leads

Returns a page of the leads the key can see, newest first. Pages start at 1; pageSize runs up to 100 (25 by default), and meta.totalCount holds the total. Filter by updatedSince (changed at or after a UTC instant), status (New, Contacted, SiteVisitScheduled, ProposalSent, Negotiation, Won or Lost; 400 otherwise) or email (exact, any case). Filtering by email needs a key that may read personal data (403 otherwise), since the answer would say whether that person is on file. Needs View on leads. Record scope applies as in the app: the key sees only what its role's scope (own, team, team tree or all) allows.

ParameterInType
pagequeryinteger, string (int32)
pageSizequeryinteger, string (int32)
updatedSincequerystring (date-time)
statusquerystring
emailquerystring
Response
200 OK: a page of PublicLead
Errors
400 Bad Request, 401 Unauthorized, 403 Forbidden (ApiResponse); 429 Too Many Requests
POST /api/public/v1/leads

Create a lead

Creates a lead owned by the key's creator, in the organisation's first pipeline stage unless stageId names another; source defaults to "api". firstName and lastName are required, and a business lead needs a companyId the key can see (404 otherwise). Answers 201 with the new lead, or 409 errors.installer.recordLimitReached when the plan's limit for leads and customers is reached. Needs Create on leads.

Request body
PublicLeadCreate, JSON
Response
201 Created: PublicLead
Errors
400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 409 Conflict (ApiResponse); 429 Too Many Requests
GET /api/public/v1/leads/{id}

Get a lead

Returns one lead. Needs View on leads. One the key cannot see answers 404, the same as one that does not exist.

ParameterInType
id *pathstring (uuid)
Response
200 OK: PublicLead
Errors
401 Unauthorized, 403 Forbidden, 404 Not Found (ApiResponse); 429 Too Many Requests
PATCH /api/public/v1/leads/{id}

Update a lead

Changes only the fields sent and leaves the rest. A status change is logged on the lead; an unknown status answers 400. companyId must be a company the key can see, and the empty GUID unlinks it. Needs Update on leads. One the key cannot see answers 404, the same as one that does not exist.

ParameterInType
id *pathstring (uuid)
Request body
PublicLeadUpdate, JSON
Response
200 OK: PublicLead
Errors
400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found (ApiResponse); 429 Too Many Requests

Me

GET /api/public/v1/me

Who am I

Returns the calling key (its name, role, expiry, rate limit, and whether it may read personal data), its organisation, and what it may do: for each feature, the scope of each action (none, own, team, team_tree or all). Every key may call it; automation tools use it to test a connection.

Response
200 OK: PublicMeDto
Errors
401 Unauthorized, 403 Forbidden (ApiResponse); 429 Too Many Requests

OAuth

POST /api/public/v1/oauth/token

Get an access token

Exchanges the key for an access token that works for one hour (OAuth 2.0 client credentials). Send grant_type=client_credentials form-encoded, proving the key one way: the client ID and the whole key as HTTP Basic credentials (client_secret_basic) or as client_id and client_secret in the form (client_secret_post), or a client_assertion signed with the key's private key (private_key_jwt). Needs no Authorization: Bearer. Errors follow RFC 6749: error and error_description. 30 requests a minute per address.

Request body
PublicTokenRequest, form-encoded
Response
200 OK: PublicTokenResponse
Errors
400 Bad Request, 401 Unauthorized (PublicTokenError); 429 Too Many Requests

Pipeline stages

GET /api/public/v1/pipeline-stages

List pipeline stages

Returns all the organisation's pipeline stages in their order, not paged: the ids to put in a lead's stageId. Needs View on leads.

Response
200 OK: a list of PublicPipelineStage
Errors
401 Unauthorized, 403 Forbidden (ApiResponse); 429 Too Many Requests

Proposals

GET /api/public/v1/proposals

List proposals

Returns a page of proposals (quotes), newest first, visible as their customer or lead is. Pages start at 1; pageSize runs up to 100 (25 by default), and meta.totalCount holds the total. Filter by updatedSince or status (Draft, Sent, Viewed, Accepted, Rejected or Expired; 400 otherwise). Read-only. Needs View on proposals.

ParameterInType
pagequeryinteger, string (int32)
pageSizequeryinteger, string (int32)
updatedSincequerystring (date-time)
statusquerystring
Response
200 OK: a page of PublicProposal
Errors
400 Bad Request, 401 Unauthorized, 403 Forbidden (ApiResponse); 429 Too Many Requests
GET /api/public/v1/proposals/{id}

Get a proposal

Returns one proposal. Needs View on proposals. One the key cannot see answers 404, the same as one that does not exist.

ParameterInType
id *pathstring (uuid)
Response
200 OK: PublicProposal
Errors
401 Unauthorized, 403 Forbidden, 404 Not Found (ApiResponse); 429 Too Many Requests

Tasks

GET /api/public/v1/tasks

List tasks

Returns a page of the tasks the key can see, newest first. Pages start at 1; pageSize runs up to 100 (25 by default), and meta.totalCount holds the total. A repeating task appears once, as its series. Filter by updatedSince or status (exact match). Needs View on tasks. Record scope applies as in the app: the key sees only what its role's scope (own, team, team tree or all) allows.

ParameterInType
pagequeryinteger, string (int32)
pageSizequeryinteger, string (int32)
updatedSincequerystring (date-time)
statusquerystring
Response
200 OK: a page of PublicTask
Errors
401 Unauthorized, 403 Forbidden (ApiResponse); 429 Too Many Requests
POST /api/public/v1/tasks

Create a task

Creates a one-off task. title is required; priority defaults to medium and the assignee to the key's creator. A linked customerId or leadId must be one the key can see (404 otherwise). Answers 201 with the new task. Needs Create on tasks.

Request body
PublicTaskCreate, JSON
Response
201 Created: PublicTask
Errors
400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found (ApiResponse); 429 Too Many Requests
GET /api/public/v1/tasks/{id}

Get a task

Returns one task. Needs View on tasks. One the key cannot see answers 404, the same as one that does not exist.

ParameterInType
id *pathstring (uuid)
Response
200 OK: PublicTask
Errors
401 Unauthorized, 403 Forbidden, 404 Not Found (ApiResponse); 429 Too Many Requests

Webhooks

GET /api/public/v1/webhooks

List the key's subscriptions

The webhook subscriptions this key made, newest first, with whether each is switched on, its verification status and its payload mode. Not paged. A key never sees subscriptions made in the app or by another key.

Response
200 OK: a list of PublicWebhookSubscription
Errors
401 Unauthorized, 403 Forbidden (ApiResponse); 429 Too Many Requests
POST /api/public/v1/webhooks

Subscribe a URL to events

Subscribes an https URL on the public internet to events and answers 201 with the signing secret, shown only this once. Nothing is delivered until the URL answers the verification challenge, sent within seconds, and every Owner is emailed the destination. The key's role must be able to read each event's records (403 otherwise). payloadMode is thin (the default) or full. 400 for an unknown event, an address that is not allowed or a bad header; 409 when the organisation already has as many subscriptions as it may.

Request body
PublicWebhookSubscribe, JSON
Response
201 Created: PublicWebhookCreated
Errors
400 Bad Request, 401 Unauthorized, 403 Forbidden, 409 Conflict (ApiResponse); 429 Too Many Requests
GET /api/public/v1/webhooks/events

List webhook events

The events this organisation offers, each with available: whether the key's role can read the records the event is about. Only those can be subscribed to.

Response
200 OK: a list of PublicWebhookEvent
Errors
401 Unauthorized, 403 Forbidden (ApiResponse); 429 Too Many Requests
DELETE /api/public/v1/webhooks/{id}

Unsubscribe

Removes a subscription this key made; nothing more is delivered to it. A subscription made in the app or by another key answers 404, as one that does not exist.

ParameterInType
id *pathstring (uuid)
Response
200 OK: PublicDeleted
Errors
401 Unauthorized, 403 Forbidden, 404 Not Found (ApiResponse); 429 Too Many Requests

Objects

ApiError

FieldType
codestring
messagestring
validationErrorsobject

ApiResponse

FieldType
successboolean
data
error0
meta0
redactedboolean

PaginationMeta

FieldType
pageinteger, string (int32)
pageSizeinteger, string (int32)
totalCountinteger, string (int32)
totalPagesinteger, string (int32)
hasNextboolean
hasPreviousboolean

PublicCompany

FieldType
idstring (uuid)
namestring
vatNumberstring
countryCodestring
addressstring
citystring
postalCodestring
phonestring
emailstring
websitestring
notesstring
ownerUserIdstring (uuid)
viesStatusstring
viesCheckedAtstring (date-time)
createdAtstring (date-time)
updatedAtstring (date-time)
tradingNamestring
legalFormstring
registrationNumberstring
taxIdstring
industrystring
employeeBandstring

PublicCompanyWrite

FieldType
namestring
vatNumberstring
countryCodestring
addressstring
citystring
postalCodestring
phonestring
emailstring
websitestring
notesstring
ownerUserIdstring (uuid)
tradingNamestring
legalFormstring
registrationNumberstring
taxIdstring
industrystring
employeeBandstring

PublicCustomer

FieldType
idstring (uuid)
firstNamestring
lastNamestring
emailstring
phonestring
addressstring
citystring
districtstring
postalCodestring
countryCodestring
companyIdstring (uuid)
ownerUserIdstring (uuid)
assignedTeamIdstring (uuid)
stageIdstring (uuid)
notesstring
sourcestring
archivedAtstring (date-time)
createdAtstring (date-time)
updatedAtstring (date-time)
kindstring

PublicCustomerCreate

FieldType
firstNamestring
lastNamestring
kindstring
emailstring
phonestring
addressstring
citystring
districtstring
countryCodestring
companyIdstring (uuid)

PublicCustomerUpdate

FieldType
kindstring
firstNamestring
lastNamestring
emailstring
phonestring
addressstring
citystring
districtstring
postalCodestring
countryCodestring
companyIdstring (uuid)
ownerUserIdstring (uuid)
notesstring

PublicDeleted

FieldType
idstring (uuid)

PublicInvoice

FieldType
idstring (uuid)
invoiceNumberstring
typestring
statusstring
customerIdstring (uuid)
currencystring
subtotalnumber, string (double)
vatAmountnumber, string (double)
totalnumber, string (double)
amountPaidnumber, string (double)
issueDatestring (date)
dueDatestring (date)
paidDatestring (date)
billingNamestring
billingVatNumberstring
createdAtstring (date-time)
updatedAtstring (date-time)

PublicKeyDto

FieldType
idstring (uuid)
namestring
rolestring
expiresAtstring (date-time)
rateLimitPerMinuteinteger, string (int32)
canReadPersonalDataboolean

PublicLead

FieldType
idstring (uuid)
firstNamestring
lastNamestring
emailstring
phonestring
addressstring
citystring
districtstring
postalCodestring
countryCodestring
statusstring
stageIdstring (uuid)
prioritystring
sourcestring
companyIdstring (uuid)
ownerUserIdstring (uuid)
assignedUserIdstring (uuid)
estimatedBudgetEurnumber, string (double)
propertyTypestring
notesstring
nextFollowUpAtstring (date-time)
convertedCustomerIdstring (uuid)
createdAtstring (date-time)
updatedAtstring (date-time)
kindstring

PublicLeadCreate

FieldType
firstNamestring
lastNamestring
kindstring
emailstring
phonestring
addressstring
citystring
districtstring
countryCodestring
stageIdstring (uuid)
prioritystring
sourcestring
companyIdstring (uuid)
assignedUserIdstring (uuid)
estimatedBudgetEurnumber, string (double)
propertyTypestring
notesstring
nextFollowUpAtstring (date-time)

PublicLeadUpdate

FieldType
kindstring
firstNamestring
lastNamestring
emailstring
phonestring
addressstring
citystring
districtstring
countryCodestring
statusstring
prioritystring
sourcestring
companyIdstring (uuid)
ownerUserIdstring (uuid)
assignedUserIdstring (uuid)
estimatedBudgetEurnumber, string (double)
propertyTypestring
notesstring
nextFollowUpAtstring (date-time)

PublicMeDto

FieldType
organizationPublicOrganizationDto
keyPublicKeyDto
permissionsobject

PublicOrganizationDto

FieldType
idstring (uuid)
namestring

PublicPermissionDto

FieldType
viewstring
createstring
updatestring
deletestring

PublicPipelineStage

FieldType
idstring (uuid)
namestring
codestring
sortOrderinteger, string (int32)
phasestring
isWinStageboolean
isLossStageboolean
isActiveboolean

PublicProposal

FieldType
idstring (uuid)
proposalNumberstring
statusstring
customerIdstring (uuid)
leadIdstring (uuid)
customerNamestring
subtotalEurnumber, string (double)
vatAmountEurnumber, string (double)
totalCostEurnumber, string (double)
sentAtstring (date-time)
viewedAtstring (date-time)
acceptedAtstring (date-time)
expiresAtstring (date-time)
createdAtstring (date-time)
updatedAtstring (date-time)

PublicTask

FieldType
idstring (uuid)
titlestring
descriptionstring
categorystring
prioritystring
statusstring
dueDatestring (date)
dueTimestring (time)
assignedUserIdstring (uuid)
assignedTeamIdstring (uuid)
customerIdstring (uuid)
leadIdstring (uuid)
createdByUserIdstring (uuid)
completedAtstring (date-time)
createdAtstring (date-time)
updatedAtstring (date-time)

PublicTaskCreate

FieldType
titlestring
descriptionstring
categorystring
prioritystring
dueDatestring (date)
dueTimestring (time)
assignedUserIdstring (uuid)
assignedTeamIdstring (uuid)
customerIdstring (uuid)
leadIdstring (uuid)

PublicTokenError

FieldType
errorstring
error_descriptionstring

PublicTokenRequest

FieldType
grant_typestring
client_idstring
client_secretstring
client_assertion_typestring
client_assertionstring

PublicTokenResponse

FieldType
access_tokenstring
token_typestring
expires_ininteger, string (int32)

PublicWebhookCreated

FieldType
idstring (uuid)
urlstring
eventsarray of string
authHeaderNamestring
payloadModestring
verificationStatusstring
secretstring

PublicWebhookEvent

FieldType
namestring
availableboolean

PublicWebhookSubscribe

FieldType
urlstring
eventsarray of string
descriptionstring
authHeaderNamestring
authHeaderValuestring
payloadModestring

PublicWebhookSubscription

FieldType
idstring (uuid)
urlstring
eventsarray of string
isActiveboolean
createdAtstring (date-time)
verificationStatusstring
verifiedAtstring (date-time)
verificationErrorstring
payloadModestring

WebhookChange

A field an *.updated event changed. previous and current only in full payloads, and not for a key that may not read personal data.

FieldType
fieldstring
previousstring
currentstring

WebhookThinData

A thin webhook payload's data: the record's id, its type, and the API path that returns it.

FieldType
idstring (uuid)
objectstringlead, customer, company, task, proposal, invoice or system.
urlstringe.g. /api/public/v1/leads/{id}.