---
title: "Create an AI Sales Agent"
method: POST
path: "/api/v2/ai-agents/sales"
tags: ["AISalesAgent"]
---

# Create an AI Sales Agent

`POST /api/v2/ai-agents/sales`

## Request

- Base URL: `https://api.instantly.ai`
- URL: `https://api.instantly.ai/api/v2/ai-agents/sales`
- Auth: HTTP bearer

Create a new AI Sales Agent. Provide `type` and `input` to extract business details from a website or pitch deck, or skip the scrape by setting `memory_from_workspace` to true to copy the workspace business details, or `is_duplicate` with `source_ai_sdr_id` to copy an existing agent.


Requires one of the following scopes: `ai_sdr:create`, `ai_sdr:all`, `all:create`, `all:all`

## Request body

- object: The AI Sales Agent to create
  - `name` string, required: Name of the AI Sales Agent
  - `description` string, nullable: Description of the AI Sales Agent
  - `type` 'website' | 'pitch_deck': The type of business details extraction method used (website scraping or pitch deck). Required unless memory_from_workspace is true.
  - `input` string, nullable: The input used for creation: URL for website scraping or text content for pitch deck extraction. Required unless memory_from_workspace is true.
  - `config` object: Configuration for the AI Sales Agent including memory, enrichment settings, outreach settings, and autonomy settings. If not provided, default configuration will be used.
    - `memory` object: Business context and memory for the AI Sales Agent. Updates are merged key by key: keys omitted from the request keep their stored value.
      - `company` string: Company name
      - `business_description` string: Description of the business and what it sells
      - `icps` object[]: Ideal customer profiles the agent targets
        - `name` string
        - `problems_solved` string[]
        - `benefits` string[]
        - `usp` string
        - `customer_goals` string[]
        - `success_stories` string
        - `keywords` object
          - `include` string, nullable
          - `exclude` string, nullable
        - `company_size` string[]
        - `industry` string[]
        - `job_title` object
          - `include` string[]
          - `exclude` string[]
      - `active_icps_indexes` integer[]: Indexes of the entries in `icps` that are currently active
      - `business_offers` string[]: Offers the agent can pitch
      - `active_business_offers_indexes` integer[]: Indexes of the entries in `business_offers` that are currently active
      - `custom_fields` string[]: Raw storage for the agent guidance rules, at most 10 entries. Prefer the `/ai-agents/sales/{id}/guidance-rules` endpoints over editing this array directly.
    - `position_details` string: Position details for recruiting agents, describing the role, responsibilities, and requirements
    - `investment_details` string: Investment details for investment agents, describing the investment thesis and target companies
    - `research_details` string: Research details for user research agents, describing the research goals and target participants
    - `partnership_details` string: Partnership details for partnership agents, describing the partnership goals and target partners
    - `enrichment_settings` object: Settings for lead enrichment
      - `enrichment_limit_per_run` number: Maximum number of leads to enrich per run
      - `signal_targeting_enabled` boolean: Whether the agent puts leads with recent buying signals first. AI Sales Agents only; other agent types ignore it. Defaults to true when omitted. Signals rank rather than filter: when fewer signal-carrying leads are available than the agent's daily target, the remainder is filled with other leads matching the ICP, so this never reduces the number of leads sourced. Set to false to stop prioritizing signals; the stored categories are kept for when it is turned back on.
      - `signal_targeting_categories` string[]: Signal categories the agent prioritizes while signal targeting is on (AI Sales Agents only), each with a 90-day freshness window. Omit to use the default high-intent set (recent funding or acquisition, executive leadership change, pricing change, product launch, company expansion, buying intent on Reddit). An empty array prioritizes nothing; a non-empty array targets exactly those categories.
    - `outreach_settings` object: Settings for email outreach. Changes are propagated to the agent's campaigns.
      - `campaign_schedule` object
        - `start_date` string, date, nullable: Start date in YYYY-MM-DD format. Uses the campaign's timezone.
        - `end_date` string, date, nullable: End date in YYYY-MM-DD format. Uses the campaign's timezone.
        - `schedules` object[], required
          - `name` string, required
          - `timing` object, required
            - `from` string, required
            - `to` string, required
          - `days` object, required
            - `0` boolean
            - `1` boolean
            - `2` boolean
            - `3` boolean
            - `4` boolean
            - `5` boolean
            - `6` boolean
          - `timezone` 'Etc/GMT+12' | 'Etc/GMT+11' | 'Etc/GMT+10' | 'America/Anchorage' | 'America/Dawson' | 'America/Creston' | 'America/Chihuahua' | 'America/Boise' | 'America/Belize' | 'America/Chicago' | 'America/Bahia_Banderas' | 'America/Regina' | 'America/Bogota' | 'America/Detroit' | 'America/Indiana/Marengo' | 'America/Caracas' | 'America/Asuncion' | 'America/Glace_Bay' | 'America/Campo_Grande' | 'America/Anguilla' | 'America/Santiago' | 'America/St_Johns' | 'America/Sao_Paulo' | 'America/Argentina/La_Rioja' | 'America/Araguaina' | 'America/Godthab' | 'America/Montevideo' | 'America/Bahia' | 'America/Noronha' | 'America/Scoresbysund' | 'Atlantic/Cape_Verde' | 'Africa/Casablanca' | 'America/Danmarkshavn' | 'Europe/Isle_of_Man' | 'Atlantic/Canary' | 'Africa/Abidjan' | 'Arctic/Longyearbyen' | 'Europe/Belgrade' | 'Africa/Ceuta' | 'Europe/Sarajevo' | 'Africa/Algiers' | 'Africa/Windhoek' | 'Asia/Nicosia' | 'Asia/Beirut' | 'Africa/Cairo' | 'Asia/Damascus' | 'Europe/Bucharest' | 'Africa/Blantyre' | 'Europe/Helsinki' | 'Europe/Istanbul' | 'Asia/Jerusalem' | 'Africa/Tripoli' | 'Asia/Amman' | 'Asia/Baghdad' | 'Europe/Kaliningrad' | 'Asia/Aden' | 'Africa/Addis_Ababa' | 'Europe/Kirov' | 'Europe/Astrakhan' | 'Asia/Tehran' | 'Asia/Dubai' | 'Asia/Baku' | 'Indian/Mahe' | 'Asia/Tbilisi' | 'Asia/Yerevan' | 'Asia/Kabul' | 'Antarctica/Mawson' | 'Asia/Yekaterinburg' | 'Asia/Karachi' | 'Asia/Kolkata' | 'Asia/Colombo' | 'Asia/Kathmandu' | 'Antarctica/Vostok' | 'Asia/Dhaka' | 'Asia/Rangoon' | 'Antarctica/Davis' | 'Asia/Novokuznetsk' | 'Asia/Hong_Kong' | 'Asia/Krasnoyarsk' | 'Asia/Brunei' | 'Australia/Perth' | 'Asia/Taipei' | 'Asia/Choibalsan' | 'Asia/Irkutsk' | 'Asia/Dili' | 'Asia/Pyongyang' | 'Australia/Adelaide' | 'Australia/Darwin' | 'Australia/Brisbane' | 'Australia/Melbourne' | 'Antarctica/DumontDUrville' | 'Australia/Currie' | 'Asia/Chita' | 'Antarctica/Macquarie' | 'Asia/Sakhalin' | 'Pacific/Auckland' | 'Etc/GMT-12' | 'Pacific/Fiji' | 'Asia/Anadyr' | 'Asia/Kamchatka' | 'Etc/GMT-13' | 'Pacific/Apia', required
      - `email_list` string[]: Sending account emails the agent's campaigns use
      - `email_tag_list` string[]: Account tag ids used to select sending accounts
      - `daily_limit` number: Daily email sending limit per campaign
      - `stop_on_reply` boolean: Stop contacting a lead after they reply
      - `open_tracking` boolean: Track email opens
      - `first_email_text_only` boolean: Send the first email as plain text
      - `prioritize_new_leads` boolean: Prioritize new leads over follow-ups
      - `match_lead_esp` boolean: Match the sending account's email provider to the lead's provider
      - `opt_out_settings` object: Opt-out settings appended to outgoing emails
        - `text_opt_out_enabled` boolean: Append a plain-text opt-out line to every email
    - `autonomy_settings` object: Settings for AI Sales Agent autonomy
      - `autopilot_mode` boolean: Enable autopilot mode for autonomous decision-making
      - `auto_reply_to_responses` boolean: Automatically respond to prospect replies with contextual messages
      - `manual_leads_mode` boolean: When true, automatic lead discovery is disabled and the user uploads leads manually
    - `slack_connection_id` string, nullable: App connection id of the Slack workspace used for daily reports. `null` disconnects Slack.
  - `agent_type` 2 | 4 | 7 | 8 | 9 | 10: The outbound agent type to create; preserved on every read. 2 = Sales, 7 = Recruiting, 8 = Investment, 9 = User Research, 10 = Partnership. Required unless `is_duplicate` is true, in which case the type is inherited from the duplicated agent.
  - `self_improvement` boolean, nullable: When enabled, the agent learns from past campaign performance to iteratively improve its outreach strategy.
  - `status` -1 | 0 | 1: Optional initial status for the AI Sales Agent. Defaults to 0 (inactive).
  - `memory_from_workspace` boolean: When true, skips the initial scrape and copies memory from the workspace business details, then creates an initial setup activity. When set, `type` and `input` are not required.
  - `master_lead_list_id` string, uuid: Master lead list ID for the AI Sales Agent.
  - `initial_scrape_ready` boolean: Whether the initial scrape is ready.
  - `is_duplicate` boolean: When true, duplicates an existing AI Sales Agent in this workspace. Must be sent together with source_ai_sdr_id.
  - `source_ai_sdr_id` string, uuid: Required when is_duplicate is true: the id of the AI Sales Agent to copy from. Must exist in the current workspace.

## Response `200`

The AI Sales Agent

- AISalesAgent: An AI Sales Development Representative that autonomously manages outreach campaigns
  - `id` string, uuid, required: Unique identifier for the AI Sales Agent
  - `workspace_id` string, uuid, required: Workspace ID that owns this AI Sales Agent
  - `name` string, required: Name of the AI Sales Agent
  - `description` string, nullable: Description of the AI Sales Agent
  - `type` 'website' | 'pitch_deck': The type of business details extraction method used (website scraping or pitch deck). Required unless memory_from_workspace is true.
  - `input` string, nullable: The input used for creation: URL for website scraping or text content for pitch deck extraction. Required unless memory_from_workspace is true.
  - `status` -1 | 0 | 1, required: Status of the AI Sales Agent
  - `config` object: Configuration for the AI Sales Agent including memory, enrichment settings, outreach settings, and autonomy settings. If not provided, default configuration will be used.
    - `memory` object: Business context and memory for the AI Sales Agent
    - `position_details` string: Position details for recruiting agents, describing the role, responsibilities, and requirements
    - `investment_details` string: Investment details for investment agents, describing the investment thesis and target companies
    - `research_details` string: Research details for user research agents, describing the research goals and target participants
    - `partnership_details` string: Partnership details for partnership agents, describing the partnership goals and target partners
    - `enrichment_settings` object: Settings for lead enrichment
      - `enrichment_limit_per_run` number: Maximum number of leads to enrich per run
      - `signal_targeting_enabled` boolean: Whether the agent puts leads with recent buying signals first. AI Sales Agents only; other agent types ignore it. Defaults to true when omitted. Signals rank rather than filter: when fewer signal-carrying leads are available than the agent's daily target, the remainder is filled with other leads matching the ICP, so this never reduces the number of leads sourced. Set to false to stop prioritizing signals; the stored categories are kept for when it is turned back on.
      - `signal_targeting_categories` string[]: Signal categories the agent prioritizes while signal targeting is on (AI Sales Agents only), each with a 90-day freshness window. Omit to use the default high-intent set (recent funding or acquisition, executive leadership change, pricing change, product launch, company expansion, buying intent on Reddit). An empty array prioritizes nothing; a non-empty array targets exactly those categories.
    - `outreach_settings` object: Settings for email outreach including campaign_schedule, email_list, email_tag_list, daily_limit, stop_on_reply, open_tracking, first_email_text_only, prioritize_new_leads, match_lead_esp
      - `opt_out_settings` object: Opt-out settings appended to outgoing emails
        - `text_opt_out_enabled` boolean: Append a plain-text opt-out line to every email
    - `autonomy_settings` object: Settings for AI Sales Agent autonomy including autopilot_mode, auto_reply_to_responses, and manual_leads_mode
      - `autopilot_mode` boolean: Enable autopilot mode for autonomous decision-making
      - `auto_reply_to_responses` boolean: Automatically respond to prospect replies with contextual messages
      - `manual_leads_mode` boolean: When true, automatic lead discovery is disabled and the user uploads leads manually
  - `created_by` string, uuid, nullable: User ID who created the AI Sales Agent
  - `master_lead_list_id` string, uuid, nullable: ID of the master lead list associated with this AI Sales Agent
  - `initial_scrape_ready` boolean, required: Indicates whether the initial website scrape has been completed
  - `agent_type` 2 | 4 | 7 | 8 | 9 | 10: The agent type. 2 = Sales Agent, 4 = Affiliate Agent, 7 = Recruiting Agent, 8 = Investment Agent, 9 = User Research Agent, 10 = Partnership Agent. Defaults to 2 (Sales Agent) if not provided.
  - `self_improvement` boolean, nullable: When enabled, the agent learns from past campaign performance to iteratively improve its outreach strategy.
  - `timestamp_created` string, date-time, required: Timestamp when the AI Sales Agent was created
  - `timestamp_updated` string, date-time, required: Timestamp when the AI Sales Agent was last updated
  - `timestamp_last_action` string, date-time, nullable: Timestamp of the last action taken by the AI Sales Agent
  - `timestamp_last_decision` string, date-time, nullable: Timestamp of the last decision made by the AI Sales Agent
  - `next_decision_time` string, date-time, nullable: Timestamp of the next scheduled decision time

## Other responses

- `400`: Invalid request body (e.g. missing required fields, or invalid field values)
- `401`: This request is unauthorized (either the Authorization header is missing or invalid, or the API key has been revoked)
- `402`: This request cannot be fulfilled because the workspace does not have an active paid plan
- `404`: The requested resource was not found
- `429`: You have exceeded the rate limit. Please check the rate limit docs for more information.

## Changes

- **2026-11-03** `c781051105a8`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/instantly/apis/api-explorer/changes/api/v2/ai-agents/sales/post.md)

---

[API](https://skmtc.dev/instantly/apis/api-explorer.md) - [All operations](https://skmtc.dev/instantly/apis/api-explorer/llms.txt) - [OpenAPI document](https://skmtc.dev/instantly/apis/api-explorer/revisions/3daaa5f6b0be?raw)
