> ## Documentation Index
> Fetch the complete documentation index at: https://docs.asteragents.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Salesloft

> Connect Salesloft so your Agents can read people, accounts, cadences, activity, and conversation insights, and, where you allow it, enroll people in cadences and log activity

## Overview

The [Salesloft](https://salesloft.com) integration gives your agents your sales team's engagement history. Agents can read **people and accounts**, see **who is on which cadence and at which step**, and review **email and call activity, meetings, notes, and tasks**. They can also read **recorded conversations with Salesloft's AI summaries and transcripts**.

A separate, gated tool lets approved agents **create and update people and accounts**, **add people to cadences or remove them**, and **log notes, tasks, and calls**.

Your organization's Salesloft API key is injected automatically into every tool call. Agents never see or handle the key.

## Prerequisites

* A **Salesloft** account with API access
* A Salesloft **API key**, created by the user whose visibility your agents should have
* An Aster **admin** to connect the integration. The connection is shared org-wide.

<Note>
  A Salesloft API key is not a team credential. It **acts as the user who created it**, with that user's role and visibility. A rep's key sees what that rep sees. For team-wide pipeline reporting, create the key as a Salesloft admin. Records your agents create (people, notes, tasks, cadence enrollments) are attributed to that user unless a tool call names another user.
</Note>

## Setup Guide

<Steps>
  <Step title="Create a Salesloft API key">
    In Salesloft, open **Your Applications → API Keys** ([accounts.salesloft.com/oauth/applications](https://accounts.salesloft.com/oauth/applications)) and click **Create New**.

    Select **read** scopes for the data your agents need:

    * **People and accounts:** `people:read`, `accounts:read`
    * **Activity:** `activities:read`, `emails:read`, `calls:read`
    * **Conversations:** `conversations:read`
    * **Opportunities:** `opportunities:read`

    Add `email_contents:read` if agents should see email subjects.

    Add **write** scopes (`people:write`, `accounts:write`, `activities:write`, `calls:write`) only if you will grant **Salesloft Manage**.
  </Step>

  <Step title="Connect Salesloft in Aster Agents">
    Navigate to **Control Hub → Integrations**, locate the **Salesloft** card, click **Connect**, and paste the key. Aster validates it against Salesloft (`GET /v2/me`) and records which Salesloft user it acts as. The key is redacted on read-back, so it is never shown again after you save it.
  </Step>

  <Step title="Add the Salesloft tools to your agent">
    Edit your agent and enable only the tools it needs:

    * **Salesloft Query** — for agents that only report on pipeline or watch activity. It is read-only.
    * **Salesloft Manage** — add this only for agents allowed to act for your sales team. Adding someone to a cadence starts real outreach.
    * **Call Salesloft API** — add this only when you need an endpoint the other two don't cover.
  </Step>
</Steps>

## Available Tools

The tools are split on the permission boundary: reads in one tool, writes in another. An agent with only `salesloft_query` cannot enroll anyone in a cadence.

* **Salesloft Query** (`salesloft_query`) is **read-only**. `resource` selects what to read:
  * `people`, `accounts`, `cadences`, `cadence_memberships`, `emails`, `calls`, `meetings`, `notes`, `tasks`, `successes`, `opportunities`, `conversations`, `users`, and more.
  * The singular forms (`person`, `account`, `conversation`, …) fetch one record by `id`.
  * `conversation_insights` returns one conversation's AI summary, action items, and key moments.
  * `transcript` returns a transcription's sentences.
  * The tool follows pages automatically and spills large results to sandbox files (JSON plus a CSV with custom fields as columns).
* **Salesloft Manage** (`salesloft_manage`) is the **gated write companion**. Its actions are `create_person`, `update_person`, `create_account`, `update_account`, `add_to_cadence`, `remove_from_cadence`, `create_note`, `create_task`, and `log_call`.
  * `add_to_cadence` checks whether the person is already active on the cadence and returns the existing membership instead of enrolling them twice.
  * `remove_from_cadence` accepts `person_id` and `cadence_id`, so agents don't need the membership id.
  * `create_task` is idempotent per tool call, so a retried call doesn't create a second task.
  * Deletes are not available here.
* **Call Salesloft API** (`salesloft_api_call`) is an escape hatch to any v2 endpoint. It covers the long tail: upserts, webhook subscriptions, custom fields, stages, and deletes.

## Working with Salesforce

Salesloft people and accounts carry the CRM record id as `crm_id`. When an agent has both Salesforce and Salesloft tools, joining on `crm_id` is exact. Name matching misses on duplicates and renamed companies.

* To look up the Salesloft side of a Salesforce contact, pass `filters: {crm_id: "<Salesforce Id>"}` on `resource: "people"`.
* For an account, do the same on `resource: "accounts"`.

## Rate limits

Salesloft allows each team **600 cost units per minute**, and that budget is **shared by every integration on your Salesloft team**, including your CRM sync.

* Most requests cost 1.
* Pages past 100 cost 3 to 30 times as much.

To avoid starving your other integrations, `salesloft_query`:

* Stops paging when the team's remaining budget for the minute runs low, and says so.
* Refuses to jump past page 100. It pages by time instead: pass `updated_since`, and when more records remain the result includes `next_updated_since` to continue from.

`updated_since` is also the efficient way for a scheduled agent to watch for changes. It isn't available on `tasks`, `users`, `steps`, `meetings`, `custom_fields`, or `person_stages`, because Salesloft has no `updated_at` filter for them.

## Known API behaviour

* **Email bodies are not returned** by the activity endpoints. Email subjects require the `email_contents:read` scope on the key.
* **Account domains are unique on the team.** Search `accounts` by `domain` before `create_account`. `salesloft_manage` reduces a pasted URL (`https://acme.com/about`) to its host.
* **`do_not_contact: true`** on a person or account removes it from every cadence it was on.
* **Visibility follows the key's user.** A record the user cannot see returns "not found".
