LIO API Documentation
Product: LIO — Lead Intelligence (WorksBuddy suite) Last updated: 2026-06-15
LIO lets you capture, enrich, score, route, and manage leads and deals programmatically. Use the API to push leads from your own forms, apps, and ad platforms, read AI lead scores and intent signals, manage pipelines and deals, run reports, and keep your CRM data in sync.
Table of contents#
- Getting started
- Authentication
- Requests and responses
- Errors
- Pagination, filtering, and sorting
- Endpoint reference
- Core resources in detail
- Lead ingestion and web forms
- Intent signals and email tracking
- Public booking
- Data models
- Common integration use cases
1. Getting started#
| Item | Value |
|---|---|
| Base URL | https://<host> |
| Content type | application/json (file uploads use multipart/form-data) |
| Core objects | Lead, Deal, Contact, Company, Pipeline, Stage, Activity |
LIO is multi-tenant: every record belongs to an organization, and your requests only ever see data from your own organization.
Endpoints are served under two path prefixes, /api and /api/v1. Use the exact path shown for each endpoint — both prefixes are available to any authenticated caller.
To make your first call:
- Get a token with
POST /api/auth/login. - Send that token in the
Authorizationheader on every request.
2. Authentication#
Most endpoints authenticate with a bearer token that you obtain by logging in. Lead-ingestion endpoints can alternatively authenticate with an API key.
2.1 Log in and get a token#
POST /api/auth/login
Exchange your email and password for a bearer token.
| Parameter | Type | Required | Description |
|---|---|---|---|
email | string | Yes | Your LIO account email |
password | string | Yes | Your account password |
Sample request:
curl -X POST https://<host>/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "you@company.com",
"password": "<your_password>"
}'Sample response (200 OK):
{
"success": true,
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 2592000,
"expires_at": "2026-07-15T09:14:32.000Z",
"user": {
"id": 142,
"email": "you@company.com",
"name": "Your Name",
"organization_id": "org_...",
"role_name": "Admin"
}
}The token is valid for 30 days (expires_in is in seconds). It scopes all data access to your organization automatically.
| Code | Meaning |
|---|---|
400 | email and password not both provided |
401 | Invalid credentials |
403 | Account inactive or no organization assigned |
404 | No LIO account exists for this email |
2.2 Use the token#
Send the token in the Authorization header on every request:
Authorization: Bearer <access_token>A missing, malformed, or expired token returns 401.
2.3 API keys (for lead ingestion)#
For server-to-server lead capture you can use an API key instead of a bearer token. Create and manage keys from the LIO app (Settings → API Keys), then send the key as a header:
x-api-key: <your_api_key>API keys are accepted by the lead-ingestion and hosted-web-form endpoints described in Section 8. A key can be restricted to specific domains and IP addresses when you create it.
3. Requests and responses#
Most endpoints return a standard envelope:
{ "success": true, "message": "...", "data": [], "total": 100, "page": 1, "limit": 10 }On failure:
{ "success": false, "error": { "message": "...", "type": "...", "code": null } }A few endpoints (hosted forms, tracking pixels, redirects) return a non-JSON body appropriate to their purpose; these are called out where relevant.
Notes:
- All timestamps are ISO 8601.
- IDs are numeric.
- Requests are scoped to your organization; you never need to pass an organization identifier.
4. Errors#
| Code | Meaning |
|---|---|
200 | OK |
201 | Created |
400 | Bad request / invalid parameters |
401 | Not authenticated |
403 | Forbidden |
404 | Not found |
409 | Conflict (for example, a duplicate lead) |
422 | Validation error |
429 | Too many requests |
500 | Server error |
Requests may be rate limited; if you receive 429, retry with exponential backoff.
API-key specific errors:
| Code | Meaning |
|---|---|
401 | API key missing |
403 | Invalid or expired API key, or the calling IP/domain is not allowed |
5. Pagination, filtering, and sorting#
List endpoints share a common query convention:
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number |
limit | integer | 10 | Items per page |
search_value | string | — | Free-text search |
order_by | string | id | Field to sort by |
order_in | string | DESC | ASC or DESC |
start_date / end_date | date | — | Date range filter (ISO) |
List responses return data alongside total, page, and limit. Most list endpoints also accept resource-specific filters; the important ones are noted per resource in Section 7.
6. Endpoint reference#
Endpoints are grouped by area. Unless an endpoint is documented as using an API key, it authenticates with the bearer token from Section 2.
In the Parameters column, bold fields are required and the rest are optional. :id and similar path values are shown in the path. List endpoints also accept the standard list parameters (page, limit, search_value, order_by, order_in, date range).
6.1 Authentication and users#
| Method | Path | Description | Parameters |
|---|---|---|---|
POST | /api/auth/login | Log in, get a token | email, password |
POST | /api/auth/logout | Log out | — |
GET | /api/user/my | Current user profile | — |
GET | /api/user/list | List organization users | role_id, state_id (csv) |
POST | /api/user/add | Add a user | first_name, email, phone_no, password; last_name, role_id |
POST | /api/user/update/:id | Update a user | first_name, email, phone_no; last_name, language, timezone |
POST | /api/user/change-password | Change password | current_password, new_password, confirm_password |
POST | /api/user/delete | Remove a user | user_id |
GET | /api/user/global-search | Search across your data | search_value |
GET | /api/role/list | List roles | state_id |
POST | /api/role/add | Create a role | name; description |
6.2 Leads#
See §7.1 for full field details on creating, updating, and filtering leads.
| Method | Path | Description | Parameters |
|---|---|---|---|
GET | /api/lead/list | List leads (filter, sort, paginate) | Lead filters — see §7.1 |
POST | /api/lead/add | Create a lead | first_name, last_name; see §7.1 |
GET | /api/lead/view/:id | Get one lead | — |
POST | /api/lead/update/:id | Update a lead | Any lead field — see §7.1 |
DELETE | /api/lead/delete | Delete leads | ids (array) |
POST | /api/lead/status-change | Change lead status | status; ids or select_all + filters |
POST | /api/lead/assign-user | Assign leads to a rep | assigned_to; ids or select_all + filters |
POST | /api/lead/assign-tags | Add tags | tags; ids or select_all + filters |
POST | /api/lead/set-assign-tags | Replace tags | tags; ids or select_all + filters |
POST | /api/lead/lead-imports | Bulk import from CSV/XLSX | multipart: file |
POST | /api/lead/:id/upload-profile-image | Upload a profile image | multipart: image |
POST | /api/lead/update-custom-fields | Update custom field values | lead_id, custom_fields |
GET | /api/lead/note/list | List notes | lead_id |
POST | /api/lead/note/add | Add a note | lead_id, title; note |
GET | /api/lead/follow-up/list | List follow-ups | lead_id, status (1–6) |
POST | /api/lead/follow-up/add | Create a follow-up | lead_id, follow_up_date (ISO); notes |
GET | /api/lead/document/list | List lead documents | lead_id |
POST | /api/lead/document/add | Attach a document | multipart: lead_id, file; document_type, description |
GET | /api/import-job/list | Track import job status | type |
6.3 Lead enrichment#
| Method | Path | Description | Parameters |
|---|---|---|---|
POST | /api/lead-enrichment/enrich | Enrich a single lead | At least one of: lead_id, email, linkedin_url, name, company, domain |
POST | /api/lead-enrichment/enrich/bulk | Bulk enrich (asynchronous) | leads (array of {linkedin_url/email/name/company/domain}); group_id |
GET | /api/lead-enrichment/job/:jobId | Enrichment job status | — |
GET | /api/lead-enrichment/linkedin-leads/recent | Recent LinkedIn leads | page, limit, search |
GET | /api/lead-enrichment/linkedin-leads/:id | One LinkedIn lead | — |
6.4 Contacts and companies#
| Method | Path | Description | Parameters |
|---|---|---|---|
GET | /api/contact/list | List contacts | my, date range |
GET | /api/contact/view/:id | Get one contact | — |
POST | /api/contact/add | Create a contact | name, company_id; email, phone_number, designation, tags |
POST | /api/contact/update/:id | Update a contact | Any contact field |
POST | /api/contact/bulk-update | Bulk update contacts | contact_ids or select_all + filters; company_id, lead_score, tags |
DELETE | /api/contact/delete/:id | Delete contacts | :id, or ids (array) / select_all |
GET | /api/company/list | List companies | my, company_id, industry filter, date range |
GET | /api/company/stats | Company statistics | Same filters as list |
GET | /api/company/view/:id | Get one company | — |
GET | /api/company/similar/:id | Similar companies | — |
POST | /api/company/add | Create a company | company_name; city, country, website, employee_size, company_logo (multipart) |
POST | /api/company/update/:id | Update a company | Any company field |
POST | /api/company/enrich | Enrich company data | company_id |
DELETE | /api/company/delete/:id | Delete companies | :id, or ids (array) / select_all |
6.5 Custom fields, lookups, and views#
| Method | Path | Description | Parameters |
|---|---|---|---|
POST | /api/lead/custom-field | Define a custom field | lead_id, field_name; field_value |
GET | /api/custom-lookups/list | List lookup values (status, source, tags, etc.) | module_name, type, is_active, parent_id |
POST | /api/custom-lookups/add | Create a lookup value | module_name, type, name; value, color_code, parent_id |
POST | /api/custom-lookups/update/:id | Update a lookup value | name, value, color_code, is_active |
GET | /api/custom-view/list | List saved views | module_name, search_value |
POST | /api/custom-view/add | Create a saved view | module_name, visibility (private/team/public); view_name, filters, columns, sorting |
POST | /api/custom-view/update/:id | Update a saved view | Any view field |
DELETE | /api/custom-view/delete/:id | Delete a saved view | — |
6.6 Pipelines and deals#
See §7.2 and §7.3 for full field details.
| Method | Path | Description | Parameters |
|---|---|---|---|
GET | /api/pipelines/list | List pipelines | state_id |
POST | /api/pipelines/add | Create a pipeline with stages | name; stages, max_deal_limit, region — see §7.3 |
PUT | /api/pipelines/update/:id | Update a pipeline | Any pipeline field |
DELETE | /api/pipelines/delete | Delete pipelines | ids (array) |
GET | /api/pipelines/stages/:id | Stages for a pipeline | — |
GET | /api/lead/deal/list | List deals | lead_id, pipeline_id, status (stage ID), date range |
POST | /api/lead/deal/add | Create a deal | lead_id, pipeline_id, stage_id, title, value, expected_close_date — see §7.2 |
POST | /api/lead/deal/update/:id | Update a deal | Any deal field |
DELETE | /api/lead/deal/delete | Delete deals | ids (array) |
6.7 Forecasting#
| Method | Path | Description | Parameters |
|---|---|---|---|
GET | /api/forecast/deal/:id | Latest deal forecast and trend | — |
GET | /api/forecast/deal/:id/history | Deal forecast history | limit |
GET | /api/forecast/pipeline | Pipeline forecast | period (monthly/quarterly), months, pipeline_id |
GET | /api/forecast/pipeline/contributors | Deal-level breakdown | pipeline_id, period_month (YYYY-MM); page |
GET | /api/forecast/at-risk | At-risk deals | status, owner (me/all), pipeline_id, limit |
GET | /api/forecast/accuracy | Forecast accuracy report | months, pipeline_id, format (json/csv) |
6.8 Target accounts (ABM)#
| Method | Path | Description | Parameters |
|---|---|---|---|
GET | /api/target-accounts | List target accounts | health, tier, owner_id, search, sort |
POST | /api/target-accounts | Create a target account | company_id; owner_id, tier, estimated_decision_makers, icp_fit_score |
GET | /api/target-accounts/:id | Account detail | — |
PATCH | /api/target-accounts/:id | Update an account | owner_id, tier, icp_fit_score, status |
DELETE | /api/target-accounts/:id | Delete an account | — |
POST | /api/target-accounts/:id/contacts | Add a contact | contact_id; stakeholder_role |
POST | /api/target-accounts/:id/send-bulk-email | Email account contacts | subject, body; contact_ids, mode |
GET | /api/target-accounts/:id/outreach-plans | List outreach plans | — |
POST | /api/target-accounts/:id/outreach-plans | Create an outreach step | contact_id, channel, scheduled_at (ISO); assigned_to, notes |
GET | /api/reports/abm/funnel | ABM funnel metrics | — |
GET | /api/reports/abm/top-engaged | Top engaged accounts | limit |
6.9 AI tools and email#
| Method | Path | Description | Parameters |
|---|---|---|---|
POST | /api/ai-tools/magicpen | Enhance note text | noteText; leadContext |
POST | /api/ai-tools/email-generator | Generate an email body | prompt, emailSubject, emailBody, leadContext |
POST | /api/ai-email/generate/:lead_id | Draft an AI email for a lead | persona |
POST | /api/ai-email/bulk-generate | Draft emails for many leads | lead_ids (array, max 500); persona |
GET | /api/ai-email/drafts/lead/:lead_id | List drafts for a lead | — |
PUT | /api/ai-email/draft/:draft_id/approve | Approve a draft | — |
POST | /api/ai-email/draft/:draft_id/send | Send an approved draft | config_id (mail account ID) |
GET | /api/credits | Organization credit balance | — |
GET | /api/credits/ai-features | AI feature pricing | — |
AI generation features (magicpen, email generation, AI dashboards) consume credits from your organization's balance.
6.10 Dashboards and analytics#
| Method | Path | Description | Parameters |
|---|---|---|---|
GET | /api/dashboard/overview | Overview statistics | start_date, end_date |
GET | /api/dashboard/stats | CRM statistics | start_date, end_date |
GET | /api/dashboard/lead-aging | Lead aging analysis | — |
GET | /api/dashboard/top-accounts | Top accounts | — |
GET | /api/dashboards | List dashboards | scope (personal/team/workspace) |
POST | /api/dashboards | Create a dashboard | dashboard_id; name, scope, definition |
PUT | /api/dashboards/:id | Update a dashboard | definition, name, scope |
DELETE | /api/dashboards/:id | Delete a dashboard | — |
POST | /api/ai-dashboards/generate | Generate a dashboard from a prompt | prompt |
GET | /api/queries | List saved queries | — |
POST | /api/queries/:queryId/execute | Run a saved query | parameters, widgetType |
6.11 Mail, inbox, calendar, and meetings#
Most inbox endpoints require
config_id(the mail account ID) as a query parameter.
| Method | Path | Description | Parameters |
|---|---|---|---|
GET | /api/mail-configurations/list | List mail configurations | mailer, state_id, date range |
POST | /api/mail-configurations/add | Add a mail configuration | mailer, from_address, from_name, password (OAuth token) |
GET | /api/inbox/list | List inbox messages | config_id; folder, search, unreadOnly, date range |
GET | /api/inbox/view/:messageId | Message detail | config_id |
POST | /api/inbox/send | Send an email | config_id, to, subject, body; cc, bcc |
POST | /api/inbox/reply/:messageId | Reply to a message | config_id, body |
GET | /api/calendar/availability | Availability slots | date, duration, from, to, tz |
GET | /api/calendar/:provider/events | List calendar events | from, to |
POST | /api/calendar/:provider/events | Create a calendar event | Provider-specific event object |
GET | /api/meeting/list | List meetings | lead_id, contact_id, company_id, status, from, to |
POST | /api/meeting/add | Create a meeting | title, start_time, end_time; lead_id, attendees, meeting_tool |
GET | /api/meeting/view/:id | Get a meeting | — |
POST | /api/meeting/update/:id | Update a meeting | title, start_time, end_time, attendees, status |
DELETE | /api/meeting/delete/:id | Delete a meeting | — |
GET | /api/meeting/:id/transcript | Meeting transcript | — |
POST | /api/meeting/:id/generate-summary | Generate a meeting summary | detail (brief/detailed) |
6.12 Voice and calling#
| Method | Path | Description | Parameters |
|---|---|---|---|
GET | /api/voice/available-numbers | Search phone numbers | areaCode, contains, type, limit |
GET | /api/voice/my-numbers | List owned numbers | — |
POST | /api/voice/purchase-number | Purchase a number | phoneNumber (E.164); friendlyName, type |
POST | /api/voice/assign-number | Assign a number to a user | number_id; user_ids or user_id |
GET | /api/voice/wallet | Calling wallet balance | — |
POST | /api/call/voice-token | Get a calling token | — |
POST | /api/call/agent/initiate | Start an AI agent call | system_prompt; lead_id or contact_id; first_message, voice_id, language |
GET | /api/call/list | Call history | lead_id, contact_id, company_id, status |
GET | /api/call/:id | One call record | — |
GET | /api/call/:id/recording | Call recording link | — |
GET | /api/call/:id/transcript | Call transcript | — |
6.13 Intent signals and alerts#
| Method | Path | Description | Parameters |
|---|---|---|---|
GET | /api/intent-alert/list | List intent alerts | lead_id, assigned_to_id, from_date, to_date |
GET | /api/intent-alert/hot-leads | Hot leads | limit, assigned_to_id, signal_type |
GET | /api/intent-alert/lead/:leadId | Alerts for a lead | page, limit |
POST | /api/intent-alert/acknowledge/:id | Acknowledge an alert | — |
POST | /api/intent-alert/signal | Log an intent signal | lead_id, signal_type; signal_detail, source, occurred_at |
6.14 Integrations (CRM import and messaging)#
| Method | Path | Description | Parameters |
|---|---|---|---|
GET | /api/connected-apps/list | List connected providers | — |
GET | /api/connected-apps/hubspot/properties | HubSpot fields | all (0/1) |
POST | /api/connected-apps/hubspot/import | Start a HubSpot import | mapping (lead + company); from, to, limit |
GET | /api/connected-apps/hubspot/import/:id/status | HubSpot import status | — |
GET | /api/slack/channels | List Slack channels | — |
POST | /api/slack/test-notification | Send a test Slack notification | channel; event_type |
GET | /api/teams/channels | List Teams channels | team_id |
6.15 Notifications, files, and exports#
| Method | Path | Description | Parameters |
|---|---|---|---|
GET | /api/notification/list | List notifications | is_read, type_id |
POST | /api/notification/read | Mark notifications read | ids (array) |
GET | /api/feed/list | Activity feed | model_type, model_id |
POST | /api/storage-file/add | Upload a file | multipart: file |
POST | /api/file/attach | Attach a cloud file | provider, subject_type, subject_id, file ({id, name, mime_type, web_url}) |
GET | /api/file/list | List attached files | subject_type, subject_id; category, provider |
POST | /api/exports/create | Start an export job | export_type (leads/companies/contacts/clients), filters |
GET | /api/exports/list | List exports | page, limit |
GET | /api/exports/download/:id | Download an export | — |
7. Core resources in detail#
7.1 Leads#
List leads — GET /api/lead/list
In addition to the standard list parameters, leads support:
| Parameter | Description |
|---|---|
score_min / score_max | Lead score range |
assigned_to | User ID, comma-separated IDs, or true for the current user |
unassigned | true to return only unassigned leads |
lead_source / priority / state_id | Comma-separated lookup IDs |
company, city, state, country | Location and company filters |
created_from / created_to | Creation date range (YYYY-MM-DD) |
Create a lead — POST /api/lead/add
| Parameter | Type | Required | Description |
|---|---|---|---|
first_name | string | Yes | First name (2–50 chars) |
last_name | string | Yes | Last name (2–50 chars) |
email | string | No | Unique within your organization |
phone_number | string | No | Phone |
company | string | No | Company name (creates the company if new) |
job_title | string | No | Job title |
linkedin_url | string | No | LinkedIn profile URL |
status | integer | No | Status lookup ID (auto-assigned if omitted) |
priority | integer | No | 1=Low, 2=Medium, 3=High, 4=Urgent |
lead_source | integer | No | 1=Website, 2=Referral, 3=LinkedIn, 4=Email, 5=Direct |
estimated_value | number | No | Estimated deal value |
assigned_to | integer | No | User ID of the assigned rep |
tags | array | No | Tag lookup IDs |
Update a lead — POST /api/lead/update/:id
Accepts any creatable field. custom_fields and ai_information are merged into the existing values.
Bulk actions — status change, assignment, and tagging accept either an explicit ids array or select_all: true with a filters object to act on every lead matching the current filter.
7.2 Deals#
Create a deal — POST /api/lead/deal/add
| Parameter | Type | Required | Description |
|---|---|---|---|
lead_id | integer | Yes | Lead this deal belongs to |
pipeline_id | integer | Yes | Target pipeline |
stage_id | integer | Yes | Starting stage |
title | string | Yes | Deal title (2–50 chars) |
value | number | Yes | Deal value (≥ 1) |
expected_close_date | date | Yes | Expected close |
priority | integer | No | 1=Low … 4=Urgent |
description | string | No | Up to 1000 chars |
List deals — GET /api/lead/deal/list supports lead_id, pipeline_id, status (stage ID), and date-range filters alongside the standard list parameters.
7.3 Pipelines#
Create a pipeline — POST /api/pipelines/add
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Pipeline name (≥ 2 chars) |
stages | array | No | Stages, each { name, color, position, is_won, is_lost } |
max_deal_limit | number | No | Optional value cap |
region | string | No | Optional region label |
Some pipeline stages are protected and cannot be changed or removed.
8. Lead ingestion and web forms#
These endpoints let external systems push leads into LIO. They accept an API key (x-api-key) instead of a bearer token.
8.1 Create a lead#
POST /api/v1/lead
Creates a lead in the organization that owns the API key. Provide at least one of email, phone_number, or linkedin_url.
| Parameter | Type | Description |
|---|---|---|
email | string | Lead email |
phone_number | string | Phone |
first_name / last_name | string | Name |
company | string | Company name |
job_title | string | Job title |
linkedin_url | string | LinkedIn URL |
status | integer | Status lookup ID (default 1) |
priority | integer | 1=Low, 2=Medium, 3=High, 4=Urgent (default 2) |
lead_source | integer | 1=Website, 2=Referral, 3=LinkedIn, 4=Email, 5=Direct |
tags | array | Tag strings (created automatically) |
custom_fields | object | Key-value custom fields |
Sample request:
curl -X POST https://<host>/api/v1/lead \
-H "x-api-key: <your_api_key>" \
-H "Content-Type: application/json" \
-d '{
"email": "jane@acme.com",
"first_name": "Jane",
"company": "Acme Corp",
"lead_source": 1
}'Sample response:
{
"success": true,
"message": "Lead created successfully",
"data": {
"id": 80231,
"email": "jane@acme.com",
"first_name": "Jane",
"company": "Acme Corp",
"status": 1,
"priority": 2,
"score": 0,
"created_at": "2026-06-15T09:14:32.000Z"
}
}A duplicate (same email or LinkedIn URL) returns 409. To accept it anyway, send duplicate: 1; to update the existing lead instead, send merge: 1. Any field not listed above is stored under custom_fields. AI scoring fields populate shortly after creation.
8.2 List leads via API key#
GET /api/v1/lead/lead-list — paginated list of the key's organization. Supports page, limit, search_value, order_by, and order_in.
8.3 Hosted web form#
GET /api/v1/web-form/:form_link — returns a hosted lead-capture form. Submissions create leads in the form's organization. Build and manage forms in the LIO app.
9. Intent signals and email tracking#
9.1 Log an intent signal#
POST /api/v1/intent-signal
Record a behavioral signal against a lead. Resulting hot leads surface through GET /api/intent-alert/hot-leads.
| Parameter | Type | Required | Description |
|---|---|---|---|
lead_id | integer | Yes | Lead the signal belongs to |
signal_type | string | Yes | See list below |
signal_detail | object | No | Extra context |
occurred_at | date | No | When it happened (defaults to now) |
signal_type values: pricing_page_visit, demo_requested, form_submitted, reply_received, email_opened, email_opened_3x, link_clicked, case_study_download, manual.
9.2 Email tracking#
Embed these in outbound email to capture engagement:
| Path | Purpose |
|---|---|
GET /api/v1/track/open/:token | Open-tracking pixel (returns a 1×1 image) |
GET /api/v1/track/click/:token | Click redirect (redirects to the target URL) |
Opens and clicks generate email_opened and link_clicked intent signals automatically.
10. Public booking#
These endpoints back a public scheduling page and require no authentication.
| Method | Path | Description |
|---|---|---|
GET | /api/v1/booking/:slug | Booking profile for a rep |
GET | /api/v1/booking/:slug/availability | Available slots (date, from, to, duration, tz) |
POST | /api/v1/booking/:slug/confirm | Confirm a booking |
Confirm a booking — POST /api/v1/booking/:slug/confirm
| Parameter | Type | Required | Description |
|---|---|---|---|
start / end | date | Yes | Slot start and end (ISO) |
name | string | Yes | Attendee name |
email | string | Yes | Attendee email |
company / phone / notes | string | No | Optional details |
11. Data models#
Core objects and their main fields. Read-only fields are populated by LIO and cannot be set directly.
Lead#
| Field | Type | Description |
|---|---|---|
id | number | Identifier |
first_name / last_name | string | Name |
email | string | |
phone_number | string | Phone |
company | string | Company name |
company_id | number | Linked company |
job_title / industry / website | string | Firmographics |
address / city / state / country / pin_code | string | Location |
status | number | Status lookup ID |
priority | number | 1=Low, 2=Medium, 3=High, 4=Urgent |
lead_source | number | 1=Website, 2=Referral, 3=LinkedIn, 4=Email, 5=Direct |
score | number | Lead score (read-only) |
estimated_value | number | Estimated value |
assigned_to | number | Assigned rep |
linkedin_url | string | LinkedIn URL |
tags | array | Tags |
custom_fields | object | Custom field values |
notes | string | Free-form notes |
ai_information | object | AI enrichment (read-only) |
last_activity_at | date | Last sales activity |
created_at / updated_at | date | Timestamps |
Resolved labels status_text, priority_text, and lead_source_text are returned for convenience.
Deal#
| Field | Type | Description |
|---|---|---|
id | number | Identifier |
lead_id | number | Owning lead |
pipeline_id | number | Pipeline |
stage_id | number | Current stage |
title | string | Deal title |
value | number | Deal value |
expected_close_date | date | Expected close |
priority | number | 1=Low … 4=Urgent |
description | string | Description |
Contact#
| Field | Type | Description |
|---|---|---|
id | number | Identifier |
name | string | Contact name |
email / phone_number | string | Contact details |
company_id | number | Linked company |
lead_id | number | Linked lead |
designation / seniority / decision_maker | string | Role and buyer signals |
linkedin_url | string | LinkedIn URL |
lead_score | number | Contact score |
status | number | Status lookup ID |
Company#
| Field | Type | Description |
|---|---|---|
id | number | Identifier |
company_name | string | Company name |
industry_type | string | Industry |
company_logo | string | Logo URL |
address / city / country | string | Location |
employee_size | string | Headcount range |
rating | number | 1–5 |
contact_email / phone_number / website | string | Contact details |
summary | string | Description |
Pipeline and stage#
Pipeline: id, name, description, max_deal_limit, region, state_id (1=Active, 0=Inactive).
Stage: id, pipeline_id, name, color, position, is_won, is_lost, probability (0–1), max_days_in_stage.
Meeting#
id, user_id, lead_id / contact_id / company_id, title, description, location, start_time, end_time, timezone, attendees, meeting_url, meeting_tool (meet/teams/zoom/custom/none), status (1=Scheduled, 2=Rescheduled, 3=Held, 4=Cancelled, 5=No Show).
Call#
id, user_id, lead_id / contact_id / company_id, direction (inbound/outbound), from_number / to_number, status, started_at / answered_at / ended_at, duration_sec, transcript, price.
12. Common integration use cases#
- Push leads from your own form or app —
POST /api/v1/leadwith an API key. - Host a lead-capture form — embed
GET /api/v1/web-form/:form_link; submissions become leads. - Sync deal stages from another system — list deals with
GET /api/lead/deal/list, then update withPOST /api/lead/deal/update/:id. - Feed behavioral intent signals —
POST /api/v1/intent-signal, then read hot leads viaGET /api/intent-alert/hot-leads. - Track email engagement — embed the open pixel and click redirect from Section 9.
- Offer public booking —
GET /api/v1/booking/:slug→/availability→POST .../confirm. - Import an existing CRM —
POST /api/connected-apps/hubspot/import, then poll the import status endpoint. - Bulk import from a spreadsheet —
POST /api/lead/lead-imports, then pollGET /api/import-job/list.