Before you start
Send Accept: application/json and Authorization: Bearer YOUR_TOKEN to https://{subdomain}.talentohq.com. See API for authentication.
Path and query identifiers are UUID strings.
Successful responses use 200. Validation failures use 422. Missing or invalid tokens, and records that cannot be found, use 401.
List all leads
GET /api/v3/leads
| Parameter | Type | Description |
|---|---|---|
status |
string | Optional lead status. |
employee_id |
string (UUID) | Optional owner id. |
lead_source_id |
string (UUID) | Optional lead source id. |
q |
string | Optional search across company, contact, email, and phone. |
custom_field_filters |
array | Optional custom field filters. |
custom_field_sort |
object | Optional custom field sort. |
Results are paginated. Pass page to move through pages of 50 records.
Response 200
[
{
"id": "e269dd36-bb60-41ac-9242-6ec7afe4c640",
"company_name": "Acme",
"contact_name": "Alex Rivera",
"email": "alex@acme.test",
"phone": "555-0100",
"title": "Operations lead",
"campaign": "spring",
"status": "new",
"score": 42,
"captured_at": "2026-03-01T09:00:00.000Z",
"qualified_at": null,
"converted_at": null,
"disqualified_reason": null,
"employee_id": "3ed57043-3894-43e9-a03b-69883506a3d6",
"employee_name": "Employee name",
"lead_source_id": "0f27fb66-20f6-4e9b-9d7f-664066c28f58",
"lead_source_name": "Website",
"customer_id": null,
"contact_id": null,
"opportunity_id": null,
"custom_fields": [
{
"custom_field_definition_id": "1ae2fd31-da27-434e-92f2-b8f4480b57a8",
"name": "Industry",
"field_type": "string",
"track_history": true,
"value": "SaaS",
"observed_at": "2026-03-01T10:00:00Z",
"source": "api"
}
]
}
]
Create a lead
POST /api/v3/leads
Do not set status to qualified, disqualified, or converted here. Use the lifecycle endpoints instead.
Request
{
"company_name": "Acme",
"contact_name": "Alex Rivera",
"email": "alex@acme.test",
"phone": "555-0100",
"title": "Operations lead",
"campaign": "spring",
"status": "new",
"disqualified_reason": null,
"captured_at": "2026-03-01T09:00:00.000Z",
"employee_id": "3ed57043-3894-43e9-a03b-69883506a3d6",
"lead_source_id": "0f27fb66-20f6-4e9b-9d7f-664066c28f58",
"custom_fields": [
{
"custom_field_definition_id": "1ae2fd31-da27-434e-92f2-b8f4480b57a8",
"value": "SaaS"
}
]
}
Response 200
{
"id": "e269dd36-bb60-41ac-9242-6ec7afe4c640",
"company_name": "Acme",
"contact_name": "Alex Rivera",
"email": "alex@acme.test",
"phone": "555-0100",
"title": "Operations lead",
"campaign": "spring",
"status": "new",
"score": 42,
"captured_at": "2026-03-01T09:00:00.000Z",
"qualified_at": null,
"converted_at": null,
"disqualified_reason": null,
"employee_id": "3ed57043-3894-43e9-a03b-69883506a3d6",
"employee_name": "Employee name",
"lead_source_id": "0f27fb66-20f6-4e9b-9d7f-664066c28f58",
"lead_source_name": "Website",
"customer_id": null,
"contact_id": null,
"opportunity_id": null,
"custom_fields": [
{
"custom_field_definition_id": "1ae2fd31-da27-434e-92f2-b8f4480b57a8",
"name": "Industry",
"field_type": "string",
"track_history": true,
"value": "SaaS",
"observed_at": "2026-03-01T10:00:00Z",
"source": "api"
}
]
}
Show a lead
GET /api/v3/leads/{lead_id}
| Parameter | Type | Description |
|---|---|---|
lead_id |
string (UUID) | Lead id. |
Response 200
{
"id": "e269dd36-bb60-41ac-9242-6ec7afe4c640",
"company_name": "Acme",
"contact_name": "Alex Rivera",
"email": "alex@acme.test",
"phone": "555-0100",
"title": "Operations lead",
"campaign": "spring",
"status": "new",
"score": 42,
"captured_at": "2026-03-01T09:00:00.000Z",
"qualified_at": null,
"converted_at": null,
"disqualified_reason": null,
"employee_id": "3ed57043-3894-43e9-a03b-69883506a3d6",
"employee_name": "Employee name",
"lead_source_id": "0f27fb66-20f6-4e9b-9d7f-664066c28f58",
"lead_source_name": "Website",
"customer_id": null,
"contact_id": null,
"opportunity_id": null,
"custom_fields": [
{
"custom_field_definition_id": "1ae2fd31-da27-434e-92f2-b8f4480b57a8",
"name": "Industry",
"field_type": "string",
"track_history": true,
"value": "SaaS",
"observed_at": "2026-03-01T10:00:00Z",
"source": "api"
}
]
}
Update a lead
PUT /api/v3/leads/{lead_id}
Request
{
"company_name": "Acme",
"contact_name": "Alex Rivera",
"email": "alex@acme.test",
"employee_id": "3ed57043-3894-43e9-a03b-69883506a3d6",
"lead_source_id": "0f27fb66-20f6-4e9b-9d7f-664066c28f58"
}
Response 200
{
"id": "e269dd36-bb60-41ac-9242-6ec7afe4c640",
"company_name": "Acme",
"contact_name": "Alex Rivera",
"email": "alex@acme.test",
"phone": "555-0100",
"title": "Operations lead",
"campaign": "spring",
"status": "new",
"score": 42,
"captured_at": "2026-03-01T09:00:00.000Z",
"qualified_at": null,
"converted_at": null,
"disqualified_reason": null,
"employee_id": "3ed57043-3894-43e9-a03b-69883506a3d6",
"employee_name": "Employee name",
"lead_source_id": "0f27fb66-20f6-4e9b-9d7f-664066c28f58",
"lead_source_name": "Website",
"customer_id": null,
"contact_id": null,
"opportunity_id": null,
"custom_fields": [
{
"custom_field_definition_id": "1ae2fd31-da27-434e-92f2-b8f4480b57a8",
"name": "Industry",
"field_type": "string",
"track_history": true,
"value": "SaaS",
"observed_at": "2026-03-01T10:00:00Z",
"source": "api"
}
]
}
Delete a lead
DELETE /api/v3/leads/{lead_id}
Response 200
{}
Custom field observations
Observations are nested under a lead.
List observations
GET /api/v3/leads/{lead_id}/custom_field_observations
| Parameter | Type | Description |
|---|---|---|
lead_id |
string (UUID) | Lead id. |
custom_field_definition_id |
string (UUID) | Optional definition id. |
observed_from |
string | Optional ISO-8601 lower bound. |
observed_to |
string | Optional ISO-8601 upper bound. |
Results are paginated. Pass page to move through pages of 50 records.
Response 200
[
{
"id": "14902d70-c2f8-4796-8d33-cb996e1702b2",
"custom_field_definition_id": "1ae2fd31-da27-434e-92f2-b8f4480b57a8",
"name": "Industry",
"field_type": "string",
"value": "SaaS",
"observed_at": "2026-03-01T10:00:00Z",
"source": "api",
"employee_id": "3ed57043-3894-43e9-a03b-69883506a3d6",
"created_at": "2026-03-01T10:00:01Z"
}
]
Show an observation
GET /api/v3/leads/{lead_id}/custom_field_observations/{custom_field_observation_id}
| Parameter | Type | Description |
|---|---|---|
lead_id |
string (UUID) | Lead id. |
custom_field_observation_id |
string (UUID) | Observation id. |
Response 200
{
"id": "14902d70-c2f8-4796-8d33-cb996e1702b2",
"custom_field_definition_id": "1ae2fd31-da27-434e-92f2-b8f4480b57a8",
"name": "Industry",
"field_type": "string",
"value": "SaaS",
"observed_at": "2026-03-01T10:00:00Z",
"source": "api",
"employee_id": "3ed57043-3894-43e9-a03b-69883506a3d6",
"created_at": "2026-03-01T10:00:01Z"
}
Create an observation
POST /api/v3/leads/{lead_id}/custom_field_observations
A conflicting idempotency_key returns 409.
Request
{
"custom_field_definition_id": "1ae2fd31-da27-434e-92f2-b8f4480b57a8",
"value": "SaaS",
"observed_at": "2026-03-01T10:00:00Z",
"source": "api",
"idempotency_key": "obs-1"
}
Response 200
{
"id": "14902d70-c2f8-4796-8d33-cb996e1702b2",
"custom_field_definition_id": "1ae2fd31-da27-434e-92f2-b8f4480b57a8",
"name": "Industry",
"field_type": "string",
"value": "SaaS",
"observed_at": "2026-03-01T10:00:00Z",
"source": "api",
"employee_id": "3ed57043-3894-43e9-a03b-69883506a3d6",
"created_at": "2026-03-01T10:00:01Z"
}
Qualify, disqualify, and convert
These endpoints change lead lifecycle status. They return the lead object.
Qualify
POST /api/v3/leads/{lead_id}/qualification
Request
{
"employee_id": "3ed57043-3894-43e9-a03b-69883506a3d6",
"note": "Budget confirmed"
}
Response 200
{
"id": "e269dd36-bb60-41ac-9242-6ec7afe4c640",
"company_name": "Acme",
"contact_name": "Alex Rivera",
"email": "alex@acme.test",
"phone": "555-0100",
"title": "Operations lead",
"campaign": "spring",
"status": "qualified",
"score": 42,
"captured_at": "2026-03-01T09:00:00.000Z",
"qualified_at": "2026-03-02T09:00:00.000Z",
"converted_at": null,
"disqualified_reason": null,
"employee_id": "3ed57043-3894-43e9-a03b-69883506a3d6",
"employee_name": "Employee name",
"lead_source_id": "0f27fb66-20f6-4e9b-9d7f-664066c28f58",
"lead_source_name": "Website",
"customer_id": null,
"contact_id": null,
"opportunity_id": null,
"custom_fields": [
{
"custom_field_definition_id": "1ae2fd31-da27-434e-92f2-b8f4480b57a8",
"name": "Industry",
"field_type": "string",
"track_history": true,
"value": "SaaS",
"observed_at": "2026-03-01T10:00:00Z",
"source": "api"
}
]
}
Disqualify
POST /api/v3/leads/{lead_id}/disqualification
Request
{
"reason": "no_budget",
"note": "Paused until next year"
}
Response 200
{
"id": "e269dd36-bb60-41ac-9242-6ec7afe4c640",
"company_name": "Acme",
"contact_name": "Alex Rivera",
"email": "alex@acme.test",
"phone": "555-0100",
"title": "Operations lead",
"campaign": "spring",
"status": "disqualified",
"score": 42,
"captured_at": "2026-03-01T09:00:00.000Z",
"qualified_at": null,
"converted_at": null,
"disqualified_reason": "no_budget",
"employee_id": "3ed57043-3894-43e9-a03b-69883506a3d6",
"employee_name": "Employee name",
"lead_source_id": "0f27fb66-20f6-4e9b-9d7f-664066c28f58",
"lead_source_name": "Website",
"customer_id": null,
"contact_id": null,
"opportunity_id": null,
"custom_fields": [
{
"custom_field_definition_id": "1ae2fd31-da27-434e-92f2-b8f4480b57a8",
"name": "Industry",
"field_type": "string",
"track_history": true,
"value": "SaaS",
"observed_at": "2026-03-01T10:00:00Z",
"source": "api"
}
]
}
Convert
POST /api/v3/leads/{lead_id}/conversion
Request
{
"customer_id": "55129d78-0281-4e72-aca1-8d547a2df814",
"contact_id": "1ae2fd31-da27-434e-92f2-b8f4480b57a8",
"opportunity_id": null,
"create_opportunity": true,
"opportunity_name": "Acme rollout",
"expected_amount": 12000,
"amount_period": "one_off"
}
Response 200
{
"id": "e269dd36-bb60-41ac-9242-6ec7afe4c640",
"company_name": "Acme",
"contact_name": "Alex Rivera",
"email": "alex@acme.test",
"phone": "555-0100",
"title": "Operations lead",
"campaign": "spring",
"status": "converted",
"score": 42,
"captured_at": "2026-03-01T09:00:00.000Z",
"qualified_at": null,
"converted_at": "2026-03-03T09:00:00.000Z",
"disqualified_reason": null,
"employee_id": "3ed57043-3894-43e9-a03b-69883506a3d6",
"employee_name": "Employee name",
"lead_source_id": "0f27fb66-20f6-4e9b-9d7f-664066c28f58",
"lead_source_name": "Website",
"customer_id": "55129d78-0281-4e72-aca1-8d547a2df814",
"contact_id": "1ae2fd31-da27-434e-92f2-b8f4480b57a8",
"opportunity_id": "8d429d99-fbd4-4196-a9ac-94f1dc481344",
"custom_fields": [
{
"custom_field_definition_id": "1ae2fd31-da27-434e-92f2-b8f4480b57a8",
"name": "Industry",
"field_type": "string",
"track_history": true,
"value": "SaaS",
"observed_at": "2026-03-01T10:00:00Z",
"source": "api"
}
]
}