Method: POST
This endpoint creates a new web_call Agent. Only web_call
agents are supported.
https://app.salescloser.ai/api/v2/agents
company_name (required) - String
Company/Product name stored as company_name.
agent_nickname (required) - String
agent_name (required) - String
Must match the agent name format used in the app.
avatar_id (optional) - Integer
Realtime avatar ID (from Avatars endpoint).
agent_position (required) - String
voice_id (required) - String
Provider voice identifier (see Voices endpoint). Example: BCT3xQAsoGrdDreaWeJE
prompt (required) - String
The core prompt for the agent. Stored internally.
language (optional) - String
ISO code. Defaults to en
if omitted.
voice_speed (optional) - Integer
Range 70–120. Defaults to 100
.
description (optional) - String
Short description shown alongside the agent.
timezone (optional) - String
Valid IANA timezone. If omitted, defaults to your account timezone.
knowledge_base (optional) - String
Plain text only (no links). Automatically creates or updates a Knowledge Base and links it to the agent.
Notes:
web_call
.{
"company_name": "My Web Agent",
"agent_nickname": "Web Demo Agent",
"agent_name": "ProductDemo2025",
"agent_position": "Product Specialist",
"voice_id": "BCT3xQAsoGrdDreaWeJE",
"prompt": "You are a helpful AI sales agent that explains our product clearly.",
"language": "en",
"voice_speed": 100,
"timezone": "America/Los_Angeles",
"avatar_id": 42
}
{
"data": {
"id": 123,
"company_name": "My Web Agent",
"agent_name": "ProductDemo2025",
"agent_position": "Product Specialist",
"language": "en",
"voice_id": "BCT3xQAsoGrdDreaWeJE",
"voice_speed": 100,
"timezone": "America/Los_Angeles",
"start_meeting_url": "https://app.salescloser.ai/agents/{agentUuid}/start-meeting"
},
"message": "Agent created successfully."
}
Method: GET
Returns full details for a specific Agent.
https://app.salescloser.ai/api/v2/agents/{agentId}
{
"data": {
"id": 123,
"company_name": "My Web Agent",
"agent_name": "ProductDemo2025",
"agent_position": "Product Specialist",
"language": "English",
"voice_id": "BCT3xQAsoGrdDreaWeJE",
"voice_speed": 100,
"timezone": "America/Los_Angeles",
"start_meeting_url": "https://app.salescloser.ai/agents/{agentUuid}/start-meeting",
"sequence_type": "prompt_based",
"sequence_prompt": "You are a helpful AI sales agent ..."
}
}
Method: PATCH
Updates an existing web_call Agent. The type
cannot be changed.
https://app.salescloser.ai/api/v2/agents/{agentId}
company_name (optional) - String
Updates company/product name.
agent_nickname (optional) - String
avatar_id (optional) - Integer
Realtime avatar ID (from Avatars endpoint).
avatar_id (optional) - Integer
Realtime avatar ID (from Avatars endpoint).
agent_name (optional) - String
agent_position (optional) - String
description (optional) - String
Short description.
language (optional) - String
ISO code (e.g., en
).
voice_id (optional) - String
Provider voice identifier.
voice_speed (optional) - Integer
Range 70–120.
timezone (optional) - String
Valid IANA timezone.
prompt (optional) - String
Replaces the agent's prompt.
knowledge_base (optional) - String
Plain text only (no links). Replaces the agent's existing knowledge base content; creates one if missing.
{
"agent_nickname": "Demo",
"voice_id": "BCT3xQAsoGrdDreaWeJE",
"voice_speed": 95,
"prompt": "Update: keep responses concise."
}
{
"data": {
"id": 123,
"company_name": "My Web Agent",
"agent_name": "ProductDemo2025",
"agent_position": "Product Specialist",
"language": "English",
"voice_id": "BCT3xQAsoGrdDreaWeJE",
"voice_speed": 95,
"timezone": "America/Los_Angeles",
"start_meeting_url": "https://app.salescloser.ai/agents/{agentUuid}/start-meeting",
"sequence_type": "prompt_based",
"sequence_prompt": "Update: keep responses concise."
},
"message": "Agent updated successfully."
}
Method: GET
Returns the list of voices available to your account.
https://app.salescloser.ai/api/v2/voices
[
{
"id": 31,
"voice_id": "BCT3xQAsoGrdDreaWeJE",
"name": "Natasha V2",
"accent": "US",
"gender": "female",
"description": "Clear, friendly",
"use_case": "general",
"age": "adult",
"default_speed": 100,
"min_speed": 70,
"max_speed": 120
},
{
"id": 12,
"voice_id": "21m00Tcm4TlvDq8ikWAM",
"name": "Rachel",
"accent": "US",
"gender": "female",
"default_speed": 100,
"min_speed": 70,
"max_speed": 120
}
]
Method: GET
Returns a list of supported languages by name.
https://app.salescloser.ai/api/v2/languages
["Arabic","Bulgarian","Dutch","English","French","German","Greek","Hindi","Indonesian","Italian","Japanese","Portuguese","Romanian","Russian","Spanish","Turkish"]
Method: GET
Returns the list of available avatars for your tenant (global and tenant-specific).
https://app.salescloser.ai/api/v2/avatars
[
{
"id": 12,
"name": "Alex",
"thumbnail_image_url": "https://...signed-url..."
},
{
"id": 13,
"name": "Taylor",
"thumbnail_image_url": null
}
]
To authenticate generate a new API Token in your profile, and pass it in the Authorization header as a Bearer token
Authorization: Bearer {yourToken}
Method: GET
This endpoint returns a list of all Agents in your account in alphabetical order.
https://app.salescloser.ai/api/v2/agents
[
{
"id": 1,
"name": "My New Product Showcase"
},
{
"id": 2,
"name": "My New Course Demo"
},
...
]
Method: GET
This endpoint returns a list of all States that belong to an Agent in your account.
https://app.salescloser.ai/api/v2/agents/{agentId}
[
{
"id": 1,
"name": "step_1",
},
{
"id": 2,
"name": "step_2"
},
{
"id": 3,
"name": "step_3"
},
{
"id": 4,
"name": "step_4"
},
...
]
Method: POST
This endpoint creates a Campaign with status DRAFT
https://app.salescloser.ai/api/v2/campaigns
agent_id (required) - Integer
Has to be attached to a Phone Number
title (required) - String
Max length: 255 characters
scheduled_at (required) - DateTime
Has to be in the UTC timezone
Format: "Y-m-d H:i:s" 2025-10-09 18:04:17
ring_timeout (optional) - Integer
Ring timeout in seconds (1-600). If not provided, uses Twilio's default (60 seconds)
leads (required) - array
Has to include at least one lead object with the following fields
{
"id": 1000,
"title": "My First Campaign",
"status": "draft",
"scheduled_at": "2024-04-02T20:32:53.000000Z"
}
Method: PATCH
This endpoint updates a Campaign
https://app.salescloser.ai/api/v2/campaigns/{campaignId}
title (required) - String
Max length: 255 characters
scheduled_at (required) - DateTime
Has to be in the UTC timezone
Format: "Y-m-d H:i:s" 2025-10-09 18:04:17
ring_timeout (optional) - Integer
Ring timeout in seconds (1-600). If not provided, uses Twilio's default (60 seconds)
status (optional) - String
Valid options: draft, live.
{
"id": 1000,
"title": "My First Campaign",
"status": "live",
"scheduled_at": "2024-04-02T20:32:53.000000Z"
}
Method: GET
This endpoint returns a paginated list of all Calls in your account.
https://app.salescloser.ai/api/v2/calls
status (optional) - String
Valid options: completed, in_progress, incomplete, draft, scheduled, sent_to_server, pending.
type (optional) - String
Valid options: inbound_call, outbound_call, zoom.
agent_id (optional) - Integer
A valid Agent ID
campaign_id (optional) - Integer
A valid Campaign ID
lead_id (optional) - Integer
A valid Lead ID
order_by (optional) - String
Defaults to id.
Valid options: id scheduled_at, finished_at.
order_direction (optional) - String
Defaults to DESC.
Valid options: ASC, DESC.
per_page (optional) - Integer
Defaults to 24.
page (optional) - String
Defaults to 1.
{
"data": [
{
"id": 1000,
"agent_id": 123,
"lead_id": 123,
"campaign_id": null,
"finished_demo_at": null,
"status": "pending",
"final_step_reached": null,
"next_steps": null,
"summary_background": null,
"provider_meeting_id": null,
"minutes": null,
"retries": 0,
"incomplete_reason": null,
"sent_to_server_at": null,
"created_at": "2024-04-02T20:32:53.000000Z",
"updated_at": "2024-05-06T20:40:37.000000Z",
"scheduled_at": null,
"type": "zoom"
},
...
],
"metadata": {
"current_page": 1,
"total_records": 80,
"has_more_pages": true,
"total_pages": 4
}
}
Method: POST
This endpoint creates a Call.
https://app.salescloser.ai/api/v2/calls
agent_id (required) - Integer
Has to be attached to a Phone Number
scheduled_at (required) - DateTime
Has to be in the UTC timezone
Format: "Y-m-d H:i:s" 2025-10-09 18:04:17
lead (required) - Object
{
"data": {
"demo": {
"id": 1235,
"agent_id": 122,
"lead_id": 489,
"campaign_id": null,
"finished_demo_at": null,
"status": "draft",
"final_step_reached": null,
"next_steps": null,
"summary_background": null,
"provider_meeting_id": null,
"minutes": null,
"retries": 0,
"incomplete_reason": null,
"sent_to_server_at": null,
"created_at": "2024-07-10T19:54:37.000000Z",
"updated_at": "2024-07-10T19:54:37.000000Z",
"scheduled_at": "2024-09-01T12:00:00.000000Z",
"type": "outbound_phone"
}
},
"message": "Call created successfully"
}
Method: GET
This endpoint returns a paginated list of all Leads in your account.
https://app.salescloser.ai/api/v2/leads
search (optional) - String
Search leads by first name, last name, email, phone number, or business name
status (optional) - Array
Filter by lead status. Valid options: 0 (Created), 1 (Open), 2 (Working), 3 (Disqualified), 4 (Qualified), 5 (Opportunity Created), 6 (Opportunity Lost), 7 (Customer).
per_page (optional) - Integer
Number of results per page (1-100). Defaults to 24.
{
"data": [
{
"id": 2,
"email": "john.doe@example.com",
"first_name": "John",
"last_name": "Doe",
"phone_number": "555-1234",
"business_name": "Acme Corp",
"website": "https://example.com",
"client_id": 21,
"comments": "Interested in our premium package",
"timezone": "America/New_York",
"was_recently_created": false,
"created_at": "2025-06-12T20:23:16.000000Z",
"updated_at": "2025-06-12T20:23:16.000000Z",
"custom_field": "custom_value",
"api_source": "mobile_app"
},
{
"id": 1,
"email": "jane.smith@example.com",
"first_name": "Jane",
"last_name": "Smith",
"phone_number": "555-5678",
"business_name": "Smith Consulting",
"website": "https://smithconsulting.com",
"client_id": 21,
"comments": null,
"timezone": "America/Mexico_City",
"was_recently_created": false,
"created_at": "2025-06-06T20:16:46.000000Z",
"updated_at": "2025-06-06T20:16:46.000000Z"
}
],
"metadata": {
"current_page": 1,
"total_records": 2,
"per_page": 24,
"has_more_pages": false,
"total_pages": 1
}
}
Method: POST
This endpoint creates a new Lead in your account.
https://app.salescloser.ai/api/v2/leads
phone_number (required) - String
Valid phone number. Must be unique per client.
email (optional) - String
Valid email address
first_name (optional) - String
Lead's first name (max 255 characters)
last_name (optional) - String
Lead's last name (max 255 characters)
business_name (optional) - String
Company or business name (max 255 characters)
website_url (optional) - String
Valid website URL (max 255 characters)
comments (optional) - String
Additional notes or comments (max 1000 characters)
timezone (optional) - String
Valid IANA timezone (see Timezones section)
status (optional) - Integer
Lead status (0-7). Defaults to 0 (Created)
Custom Fields
You can pass any additional fields as strings. They will be stored in the lead's metadata for flexible data storage.
{
"phone_number": "555-1234",
"email": "jane.smith@example.com",
"first_name": "Jane",
"last_name": "Smith",
"business_name": "Smith Consulting",
"website_url": "https://smithconsulting.com",
"comments": "Potential high-value client",
"timezone": "America/New_York",
"status": 1,
"lead_source": "website_form",
"campaign_id": "summer_2024",
"industry": "consulting"
}
{
"data": {
"id": 3,
"email": "jane.smith@example.com",
"first_name": "Jane",
"last_name": "Smith",
"phone_number": "+19871231232",
"business_name": "Smith Consulting",
"website": "https://smithconsulting.com",
"client_id": 21,
"comments": "Potential high-value client",
"timezone": "America/New_York",
"was_recently_created": true,
"created_at": "2025-08-29T17:47:03.000000Z",
"updated_at": "2025-08-29T17:47:03.000000Z",
"lead_source": "website_form",
"campaign_id": "summer_2024",
"industry": "consulting"
},
"message": "Lead created successfully."
}
Method: GET
This endpoint retrieves a specific Lead by ID.
https://app.salescloser.ai/api/v2/leads/{leadId}
leadId (required) - Integer
The ID of the lead to retrieve
{
"data": {
"id": 2,
"email": "jane.smith@example.com",
"first_name": "Jane",
"last_name": "Smith",
"phone_number": "555-1234",
"business_name": "Smith Consulting",
"website": "https://smithconsulting.com",
"client_id": 21,
"comments": "Potential high-value client",
"timezone": "America/New_York",
"was_recently_created": false,
"created_at": "2025-06-12T20:23:16.000000Z",
"updated_at": "2025-06-12T20:23:16.000000Z",
"lead_source": "website_form",
"campaign_id": "summer_2024",
"industry": "consulting"
}
}
Method: PATCH
This endpoint updates an existing Lead. All fields are optional - only provide the fields you want to update.
https://app.salescloser.ai/api/v2/leads/{leadId}
leadId (required) - Integer
The ID of the lead to update
phone_number (optional) - String
Valid phone number. Must be unique per client if changed.
email (optional) - String
Valid email address
first_name (optional) - String
Lead's first name (max 255 characters)
last_name (optional) - String
Lead's last name (max 255 characters)
business_name (optional) - String
Company or business name (max 255 characters)
website_url (optional) - String
Valid website URL (max 255 characters)
comments (optional) - String
Additional notes or comments (max 1000 characters)
timezone (optional) - String
Valid IANA timezone (see Timezones section)
status (optional) - Integer
Lead status (0-7)
Custom Fields
You can update custom fields by passing them as strings. New custom fields will be added, existing ones will be updated, and missing ones will be preserved.
{
"email": "jane.smith.updated@example.com",
"status": 4,
"comments": "Qualified lead - ready for sales call",
"lead_source": "referral",
"priority": "high"
}
{
"data": {
"id": 3,
"email": "jane.smith.updated@example.com",
"first_name": "Jane",
"last_name": "Smith",
"phone_number": "+19871231232",
"business_name": "Smith Consulting",
"website": "https://smithconsulting.com",
"client_id": 21,
"comments": "Qualified lead - ready for sales call",
"timezone": "America/New_York",
"was_recently_created": false,
"created_at": "2025-08-29T17:47:03.000000Z",
"updated_at": "2025-08-29T17:47:53.000000Z",
"lead_source": "referral",
"campaign_id": "summer_2024",
"industry": "consulting",
"priority": "high"
},
"message": "Lead updated successfully."
}
These are the timezones you can use for your leads and campaigns. When uploading timezones via a CSV file, make sure the format strictly follows standard IANA timezone names. Incorrect formatting may result in scheduling issues.
America/New_York
Asia/Karachi
Europe/London
GMT
UTC+5
america/new_york
New York
Timezones are case-sensitive and must exactly match standard IANA formats. Informal or incorrect names will lead to campaign or lead scheduling errors.