# List Calendar Events
Source: https://docs.attention.com//api-reference/calendar/list-calendar-events
api-reference/openapi.json get /calendar_events/{user_uuid}
Returns a paginated list of calendar events from a specific user
# Archive Conversation
Source: https://docs.attention.com//api-reference/conversation/archive-conversation
api-reference/openapi.json delete /conversations/{id}
Archive a conversation, marking it as no longer active.
# Change Conversation Privacy
Source: https://docs.attention.com//api-reference/conversation/change-conversation-privacy
api-reference/openapi.json put /conversations/{id}/change_privacy
Change the privacy of a conversation from private to public and vice versa
# Generate Conversation Media Download URL
Source: https://docs.attention.com//api-reference/conversation/generate-conversation-media-download-url
api-reference/openapi.json post /conversations/{id}/media/download
Generate a presigned URL for downloading the media file of a conversation. Organization-level authentication only.
# Get Conversation
Source: https://docs.attention.com//api-reference/conversation/get-conversation
api-reference/openapi.json get /conversations/{id}
Retrieves detailed information about a specific conversation, including its transcription, participants, and metadata. The response can be customized to include or exclude certain details based on the query parameters.
# Get Signed Upload Conversation URL
Source: https://docs.attention.com//api-reference/conversation/get-signed-upload-conversation-url
api-reference/openapi.json get /conversations/upload-url
Generate a signed URL for uploading a conversation file
# Import Conversation
Source: https://docs.attention.com//api-reference/conversation/import-conversation
api-reference/openapi.json post /conversations/import
Import a conversation from a media file. This endpoint creates a new conversation from an external source (e.g., Gong, Salesforce) and processes it through the Attention platform's transcription and analysis pipeline.
# List Conversations
Source: https://docs.attention.com//api-reference/conversation/list-conversations
api-reference/openapi.json get /conversations
Retrieves a paginated list of conversations with their transcriptions. Supports various filtering options to narrow down the results based on date ranges, participants, teams, and conversation status.
# Update Conversation
Source: https://docs.attention.com//api-reference/conversation/update-conversation
api-reference/openapi.json put /conversations/{id}
Updates the metadata and properties of an existing conversation. This endpoint allows modification of conversation details such as title, participants, and associated metadata.
# List emails
Source: https://docs.attention.com//api-reference/email/list-emails
api-reference/openapi.json get /emails
Returns a list of emails
# Create Team
Source: https://docs.attention.com//api-reference/organization/create-team
api-reference/openapi.json post /organizations/teams
Creates a new team in the organization. You can optionally specify a parent team to create a hierarchical team structure. The team will be created with default permissions and settings.
# Create User
Source: https://docs.attention.com//api-reference/organization/create-user
api-reference/openapi.json post /organizations/users
Creates a new user in the specified organization. Requires a valid API key and proper permissions to create users. The user will be assigned to the specified team and given the specified role. Returns the created user's details including their UUID.
# Delete User
Source: https://docs.attention.com//api-reference/organization/delete-user
api-reference/openapi.json delete /organizations/users/{userId}
Deletes an existing user from the organization. This operation is permanent and cannot be undone. The user will be removed from all teams and their access will be revoked. Requires proper permissions to delete users.
# List Organization Users
Source: https://docs.attention.com//api-reference/organization/list-organization-users
api-reference/openapi.json get /organizations/users
Returns a list of users in the organization. You can optionally filter the results by teamUUID to get users from a specific team. The response includes user details such as name, email, and role information.
# List Roles
Source: https://docs.attention.com//api-reference/organization/list-roles
api-reference/openapi.json get /organizations/roles
Returns a list of roles
# List Teams
Source: https://docs.attention.com//api-reference/organization/list-teams
api-reference/openapi.json get /organizations/teams
Returns a list of all teams in the organization. The response includes team details such as name, UUID, and parent team information if applicable.
# Update Team
Source: https://docs.attention.com//api-reference/organization/update-team
api-reference/openapi.json patch /organizations/teams/{teamId}
Updates an existing team's information. You can modify the team's name and parent team assignment. This operation can be used to restructure the team hierarchy within the organization.
# Update User
Source: https://docs.attention.com//api-reference/organization/update-user
api-reference/openapi.json patch /organizations/users/{userId}
Updates an existing user's information in the organization. You can modify the user's name, email, team assignment, and role. Requires proper permissions to update user details.
# Create SCIM Group
Source: https://docs.attention.com//api-reference/scim/create-scim-group
api-reference/openapi.json post /scim/Groups
# Create SCIM User
Source: https://docs.attention.com//api-reference/scim/create-scim-user
api-reference/openapi.json post /scim/Users
Creates a new user. Used by SCIM clients like Okta to provision users.
# Get SCIM Group
Source: https://docs.attention.com//api-reference/scim/get-scim-group
api-reference/openapi.json get /scim/Groups/{id}
Retrieves a single group by ID. Used by SCIM clients like Okta.
# Get SCIM Service Provider Config
Source: https://docs.attention.com//api-reference/scim/get-scim-service-provider-config
api-reference/openapi.json get /scim/ServiceProviderConfigs
Returns SCIM service provider capabilities. Required by SCIM clients like Okta to determine feature support.
# Get SCIM User
Source: https://docs.attention.com//api-reference/scim/get-scim-user
api-reference/openapi.json get /scim/Users/{id}
Retrieves a single user by ID. Used by SCIM clients like Okta.
# List SCIM Groups
Source: https://docs.attention.com//api-reference/scim/list-scim-groups
api-reference/openapi.json get /scim/Groups
Retrieves a list of groups, supports filtering and pagination. Used by SCIM clients like Okta.
# List SCIM Users
Source: https://docs.attention.com//api-reference/scim/list-scim-users
api-reference/openapi.json get /scim/Users
Retrieves a list of users, supports filtering and pagination. Used by SCIM clients like Okta.
# Patch SCIM Group
Source: https://docs.attention.com//api-reference/scim/patch-scim-group
api-reference/openapi.json patch /scim/Groups/{id}
Partially updates a group using SCIM patch semantics.
# Patch SCIM User
Source: https://docs.attention.com//api-reference/scim/patch-scim-user
api-reference/openapi.json patch /scim/Users/{id}
Partially updates a user.
# Update SCIM Group
Source: https://docs.attention.com//api-reference/scim/update-scim-group
api-reference/openapi.json put /scim/Groups/{id}
Updates group. Used by SCIM clients like Okta to provision groups.
# Update SCIM User
Source: https://docs.attention.com//api-reference/scim/update-scim-user
api-reference/openapi.json put /scim/Users/{id}
Updates user. Used by SCIM clients like Okta to provision users.
# Create Scorecard Result
Source: https://docs.attention.com//api-reference/scorecard/create-scorecard-result
api-reference/openapi.json post /createScorecardResult
Create Scorecard Result for a conversation
# Get scorecards summary
Source: https://docs.attention.com//api-reference/scorecard/get-scorecards-summary
api-reference/openapi.json post /scorecards/summary
Retrieves detailed usage statistics for specified users or teams within a given time period.
# List scorecards
Source: https://docs.attention.com//api-reference/scorecard/list-scorecards
api-reference/openapi.json get /scorecards
Retrieves scorecards
# Get Team
Source: https://docs.attention.com//api-reference/team/get-team
api-reference/openapi.json get /teams/{id}
Retrieves detailed information about a specific team by its ID. The response includes team details, members, and hierarchical information.
# Get Team Members
Source: https://docs.attention.com//api-reference/team/get-team-members
api-reference/openapi.json get /teams/{id}/members
Retrieves all members of a specific team. The response includes user details and their roles within the team.
# List Teams
Source: https://docs.attention.com//api-reference/team/list-teams
api-reference/openapi.json get /teams
Retrieves a list of all teams in the system. The response includes team details such as name, UUID, parent team information, and team hierarchy.
# Ask Attention
Source: https://docs.attention.com//api-reference/tool/ask-attention
api-reference/openapi.json post /ask_attention
Analyzes conversations or prompts to provide insights and attention points. This endpoint helps identify key information, sentiment, and important details in the provided content.
# Ask Attention V2
Source: https://docs.attention.com//api-reference/tool/ask-attention-v2
api-reference/openapi.json post /ask_attention/v2
Analyzes conversations or prompts to provide insights and attention points. This endpoint helps identify key information, sentiment, and important details in the provided content.
# Create Deck
Source: https://docs.attention.com//api-reference/tool/create-deck
api-reference/openapi.json post /create_deck
Generates presentation decks based on conversations, deals, or other content. This endpoint creates structured presentations with key insights and data visualizations.
# Create Snippet
Source: https://docs.attention.com//api-reference/tool/create-snippet
api-reference/openapi.json post /snippets
Creates a new conversation snippet that can be used for reference, analysis, or sharing. This endpoint allows you to capture and store important parts of conversations for future use.
# Get Connection Report
Source: https://docs.attention.com//api-reference/tool/get-connection-report
api-reference/openapi.json get /connectionReport
Simple report showing which users have connected their calendar and email. No parameters needed - shows all users in the organization.
# Get Usage Report
Source: https://docs.attention.com//api-reference/tool/get-usage-report
api-reference/openapi.json get /usageReport
Retrieves detailed usage statistics for specified users or teams within a given time period. This endpoint helps track API consumption, feature usage, and user activity patterns.
# List Users
Source: https://docs.attention.com//api-reference/user/list-users
api-reference/openapi.json get /users
Returns a list of users, you can also filter by id, email and teamUUID
# API Authentication
Source: https://docs.attention.com/api-authentication
Learn how to obtain and use API keys to authenticate with the Attention API
## Overview
The Attention API uses API keys for authentication. All API requests must include a valid API key in the request headers to access protected endpoints.
## How to Obtain Your API Key
Navigate to [https://app.attention.tech](https://app.attention.tech) and sign in with your account using **Google**, **Single sign-on (SSO)**, or your **email and password**.
Once signed in, click your profile avatar in the top-left corner and select **Settings** from the dropdown menu.
In the sidebar, under the **Organization** section, select **API Keys**.
You must have **Admin** role permissions to access and manage organization-level API keys.
Click **+ Create API Key** in the top-right corner.
You’ll be prompted to:
* **Name your API key** – Give it a descriptive name (e.g., “Production Integration” or “Development Testing”)
After creation, a modal titled **API Key Created** will appear showing your key once.
**Important:** This is the only time you’ll be able to view your API key. Copy it now and store it securely.
Store your API key securely:
* Use environment variables in your application
* Use a secrets manager (e.g., AWS Secrets Manager, HashiCorp Vault)
* Never commit keys to version control
## Using Your API Key
Include your API key in the `Authorization` header of all API requests:
```bash Curl theme={null}
curl https://api.attention.tech/v2/conversations \
-H "Authorization: Bearer YOUR_API_KEY"
```
```javascript Node.js theme={null}
const axios = require('axios');
const apiKey = process.env.ATTENTION_API_KEY;
const response = await axios.get('https://api.attention.tech/v2/conversations', {
headers: {
'Authorization': `Bearer ${apiKey}`
}
});
```
```python Python theme={null}
import os
import requests
api_key = os.environ.get('ATTENTION_API_KEY')
headers = {
'Authorization': f'Bearer {api_key}'
}
response = requests.get('https://api.attention.tech/v2/conversations', headers=headers)
```
```go Go theme={null}
package main
import (
"fmt"
"net/http"
"os"
)
func main() {
apiKey := os.Getenv("ATTENTION_API_KEY")
client := &http.Client{}
req, _ := http.NewRequest("GET", "https://api.attention.tech/v2/conversations", nil)
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", apiKey))
resp, err := client.Do(req)
// Handle response...
}
```
## Managing Your API Keys
### Rotating API Keys
For security best practices, it's recommended to rotate your API keys periodically:
1. Generate a new API key following the steps above
2. Update your applications to use the new key
3. Test that all integrations work with the new key
4. Delete the old API key from the **API Keys** page
### Revoking API Keys
If an API key is compromised or no longer needed:
1. Go to **Settings** → **API Keys**
2. Find the key you want to revoke
3. Click the **⋯** menu next to the key
4. Select **Delete**
Revoking an API key immediately invalidates it. Any applications using that key will no longer be able to authenticate.
## Troubleshooting
### 401 Unauthorized Error
If you receive a `401 Unauthorized` error:
* Verify your API key is correctly included in the `Authorization` header
* Ensure you're using `Bearer` before the API key
* Check that your API key hasn't been revoked or expired
* Confirm your account has the necessary permissions for the endpoint
### Rate Limits
API requests are subject to rate limiting. If you exceed the rate limit, you'll receive a `429 Too Many Requests` response.
Contact your Attention account manager to discuss rate limit increases for your organization.
## Security Best Practices
Never hardcode API keys in your source code. Always use environment variables or secure secret management systems.
```bash theme={null}
# .env file (never commit this)
ATTENTION_API_KEY=your_api_key_here
```
Create separate API keys for development, staging, and production environments to isolate access and make key rotation easier.
Regularly audit which API keys are being used and delete any that are no longer needed.
## Next Steps
Explore all available API endpoints and their usage
Learn how to manage user roles and permissions
Need help with API authentication? Contact [support@attention.com](mailto:support@attention.com) or reach out to your Attention account manager.
# Action Steps
Source: https://docs.attention.com/builder-101/action-steps
Reference for all the types of action steps available in Attention workflows.
Action steps define **what happens after a trigger fires**. They can be grouped into three main categories: AI steps, core logic steps, and integrated app steps.
***
## 1. AI Action Steps
Use AI models or Attention’s intelligence to generate outputs or fetch insights.
* **Ask Attention**: summarize conversations, extract insights, or build follow-up emails
* **Attention Conversation utilities**: list conversations, fetch conversations, or query by ID
* **Ask OpenAI (ChatGPT)**: use OpenAI’s models for general-purpose tasks
* **Ask Anthropic (Claude)**: use Anthropic’s models for extended reasoning
**Example use cases:**
* Generate a discovery call recap
* Draft a follow-up email template
* Extract key metrics across multiple calls
## 2. Core Action Steps
Steps that manage logic, routing, and data handling inside the workflow. These include:
* **Routers**: branch execution paths with if/else logic
* **Loops**: iterate over lists of items (e.g., conversations or rows)
* **Storage**: collect and aggregate outputs across steps
* **Text Helpers**: transform or clean text values
* **HTTP Requests**: connect to any API by sending a request
* **Custom Code Step:** run Node.js & TypeScript code
* To include data from previous steps, add pairs of keys and values as inputs in the Code Step configuration
**Example use cases:**
* Only continue if conversation label = “Discovery Call”
* Loop through all sales calls this week and append summaries to storage
* Send data via API
## 3. Integrated App Steps
These steps let you act directly in other SaaS tools.
Supported categories include:
* **G Suite**: Gmail, Google Sheets, Google Docs
* **CRMs**: Salesforce, HubSpot, Pipedrive, Zoho
* **Productivity apps**: Asana, Airtable, Notion, Linear
* **Data platforms**: Snowflake and others
**Example use cases:**
* Send Slack messages with meeting summaries
* Update Salesforce account plans automatically
* Log call recaps into a Google Doc
# Workflow Builder Overview
Source: https://docs.attention.com/builder-101/getting-started
Learn what workflows are, how they are structured, and how to configure steps in the builder.
Workflows in Attention are **a powerful low-code canvas for automation**. They let you define repeatable, logic-driven steps that execute whenever a trigger fires. Attention workflows support **agentic action** through **Ask Attention** and external LLMs (OpenAI, Anthropic, Perplexity), enabling dynamic reasoning and content generation directly on your **first-party conversational data**.
***
### **Getting Started**
To open the Attention Builder, click on your name in the top left of the Attention homepage and navigate to `Settings` > `Builder.`
Choose from a pre-built template or start from scratch. Templates cover the most popular and common use cases for Attention workflows.
We recommend starting with a template, such as **Personal Slack Summaries.** This workflow runs every time a conversation is analyzed and sends a Slack DM to the conversation owner with a detailed summary of the call.
## Core Building Blocks: Triggers and Actions
All workflows are comprised of a trigger and one or more action steps. Data is passed to each subsequent step, allowing you to chain together actions.
* **Triggers**: Events that start the workflow execution (e.g., a conversation analyzed, a CRM record updated, or a scheduled time).
* **Action steps**: steps that take action on your data and fall into 3 buckets:
* **AI steps**: Ask Attention, Ask OpenAI, Ask Anthropic.
* **Core logic steps**: Filters, routers, loops, storage, and transformations.
* **Integrated app steps**: Send Slack messages, update Salesforce, write to Google Sheets, and many more
## Configuring Steps
When you add a step to the canvas, a **right-hand panel** will open with configuration options. Name the step and fill out the required fields and any optional fields.
Data from previous steps will be available to use in the current step from the **Data Selector Window.** Click on previous steps from the Data Selector Window to see all data contained within step. Click "Insert" to add that data to the configuration of your current step.
For example, in the image below, we insert the output from a previous "Ask Attention" step into the body of our Slack message. This allows us to send a call summary in Slack, with the call summary being generated in the "Ask Attention" step.
**Connecting to External Apps:** Steps connected to external apps **require authentication**. To authenticate, you'll be prompted to first create a connection and provide that app with the necessary permissions.
Any steps connected to an external **app requires authentication**. Follow the necessary steps to create the connection and authenticate the app after adding it as a trigger or action step.
**Testing Steps:**\
After configuring your step, proceed to testing the step by clicking "Test" on the right-hand panel. Testing each step is important because:
1. It allows you to preview the data and confirm everything is worked as desired
2. The results from test reveal all data associated with the step. This allows you to then reference and use that data in subsequent steps
# Triggers
Source: https://docs.attention.com/builder-101/triggers
Learn about the different ways to start workflows in Attention.
Triggers define **when and how** a workflow begins. They can originate from Attention itself, from integrated apps, from scheduled times, or from webhooks.
***
## Trigger Types
### 1. Attention Triggers
Events from within Attention can start workflows. For example:
* Conversation Analyzed: fire a workflow whenever a call has been processed by Attention's intelligence layer.
[See all Attention Triggers](/builder-101/triggers/attention-triggers)
### 2. Integrated App Triggers
Changes in your connected apps can also start workflows. Examples include:
* Gmail: when a new email arrives
* Salesforce: when a record is updated
* HubSpot: when a contact or deal changes
* Google Sheets: when a new row is added
### 3. Scheduled Triggers
Start workflows on a predefined schedule:
* Every X minutes
* Hourly
* Daily
* Weekly
**Use cases:** Weekly recaps, nightly syncs, or periodic data checks.
### 4. Webhook Triggers
Catch an incoming webhook and start a workflow run.
* Works with any app that can send HTTP requests.
* Supports all standard HTTP methods (GET, POST, PUT, DELETE).
* Provides maximum flexibility for integrating with additional tools in your tech stack
***
## Configuring a Trigger
When you add a trigger to the canvas, you’ll see a configuration panel on the right-hand side. From here you can:
* Select the trigger type
* Connect the relevant account (if from an integration)
* Test the trigger to preview incoming data
***
# Attention Triggers
Source: https://docs.attention.com/builder-101/triggers/attention-triggers
Detailed documentation for all Attention workflow triggers and their payloads.
Attention triggers are events that originate from within Attention and can start workflows automatically. These triggers fire when specific actions occur in the platform, providing rich contextual data for your automations.
***
## Available Triggers
| Trigger | Description |
| - | - |
| [Conversation Analyzed](#conversation-analyzed) | Fired once when a conversation finishes processing |
| [Export CRM Fields](#export-crm-fields) | Fired when user exports fields from CRM tab |
| [Generalized Insights Calculated](#generalized-insights-calculated) | Fired when generalized insights are calculated |
| [Labels Changed](#labels-changed) | Fired when labels are changed on a conversation |
| [New Email Imported](#new-email-imported) | Fired when a new email tied to an account is imported |
***
## Conversation Analyzed
**Trigger ID:** `webhookTrigger`
Fired once when a conversation finishes processing through Attention's intelligence layer. This is the most commonly used trigger for automating post-call workflows.
### Use Cases
* Automatically sync call insights to your CRM
* Send follow-up email summaries to participants
* Notify team members in Slack about important calls
* Update deal stages based on conversation outcomes
### Payload Fields
| Field | Type | Description |
| - | - | - |
| `id` | string | Unique identifier for the conversation |
| `type` | string | Resource type |
| `links.self` | string (URI) | API link to the conversation resource |
| `attributes.title` | string | Title of the conversation |
| `attributes.createdAt` | string (date-time) | When the conversation was created |
| `attributes.finishedAt` | string (date-time) | When the conversation finished |
| `attributes.userUUID` | string (UUID) | UUID of the user who owns the conversation |
| `attributes.crmExportStatus` | string | Current CRM export status |
| `attributes.dealUUID` | string (UUID) | UUID of the associated deal |
| `attributes.externalAccounts` | array | List of external accounts with `code` and `id` |
| `attributes.linkedCrmRecords` | array | List of linked CRM records with `code` and `id` |
| `attributes.extractedIntelligence` | object | AI-extracted insights from the conversation |
| `attributes.externalOpportunity.uuid` | string (UUID) | UUID of the external opportunity |
| `attributes.scorecardResults` | array | Scorecard evaluation results with `summary.summaryText` |
***
## Export CRM Fields
**Trigger ID:** `exportCRMFieldsTrigger`
Fired when a user exports fields from the CRM tab in the conversation view. Use this trigger to capture manual export actions and extend them with additional automations.
### Use Cases
* Log export activity for compliance tracking
* Trigger additional data transformations after export
* Notify managers when reps export CRM data
* Sync exported fields to secondary systems
### Payload Fields
| Field | Type | Description |
| - | - | - |
| `id` | string | Unique identifier for the conversation |
| `type` | string | Resource type |
| `links.self` | string (URI) | API link to the conversation resource |
| `attributes.title` | string | Title of the conversation |
| `attributes.teamUUID` | string (UUID) | UUID of the team |
| `attributes.userUUID` | string (UUID) | UUID of the user who performed the export |
| `attributes.finishedAt` | string (date-time) | When the conversation finished |
| `attributes.crmExportStatus` | string | Current CRM export status |
| `attributes.labels` | object | Labels associated with the conversation |
***
## Generalized Insights Calculated
**Trigger ID:** `giCalculatedTrigger`
Fired when generalized insights are calculated for a conversation. Generalized insights provide AI-synthesized summaries and analysis across multiple data points.
### Use Cases
* Send AI-generated summaries to stakeholders
* Update CRM records with synthesized insights
* Trigger coaching workflows based on insight results
* Build dashboards with aggregated conversation intelligence
### Payload Fields
| Field | Type | Description |
| - | - | - |
| `uuid` | string (UUID) | UUID of the conversation |
| `title` | string | Title of the conversation |
| `user.uuid` | string (UUID) | UUID of the user who owns the conversation |
| `results` | array | Array of insight results |
| `results[].status` | string | Status of the insight calculation |
| `results[].synthesis` | string | AI-synthesized insight text |
***
## Labels Changed
**Trigger ID:** `labelsChangedTrigger`
Fired when labels are added, removed, or modified on a conversation. Labels help categorize and organize conversations for filtering and reporting.
### Use Cases
* Sync label changes to external systems
* Trigger workflows based on specific label assignments
* Notify team members when high-priority labels are applied
* Update CRM fields based on conversation categorization
### Payload Fields
| Field | Type | Description |
| - | - | - |
| `id` | string | Unique identifier for the conversation |
| `type` | string | Resource type |
| `links.self` | string (URI) | API link to the conversation resource |
| `attributes.title` | string | Title of the conversation |
| `attributes.teamUUID` | string (UUID) | UUID of the team |
| `attributes.userUUID` | string (UUID) | UUID of the user |
| `attributes.finishedAt` | string (date-time) | When the conversation finished |
| `attributes.labels` | object | Current labels on the conversation |
***
## New Email Imported
**Trigger ID:** `newEmailImported`
Fired when a new email tied to an account is imported into Attention. This trigger enables workflows based on email activity associated with your tracked accounts.
### Use Cases
* Automatically analyze email sentiment
* Update contact engagement scores
* Trigger follow-up reminders based on email content
* Sync email activity to CRM timelines
### Payload Fields
| Field | Type | Description |
| - | - | - |
| `bodyUrl` | string (URI) | URL to retrieve the email body content |
| `ccRecipients` | array of strings | List of CC recipients |
| `isInternalUser` | boolean | Whether the sender is an internal user |
| `messageId` | string | Unique message identifier |
| `recipients` | array of strings | List of email recipients |
| `sendDate` | string (date-time) | When the email was sent |
| `sender` | string | Email sender address |
| `snippet` | string | Preview snippet of the email content |
| `subject` | string | Email subject line |
| `threadId` | string | Thread identifier for email conversations |
# Workflow Runs
Source: https://docs.attention.com/builder-101/workflow-runs
Monitor and debug workflow executions once your workflow is live.
Once your workflow is live, each execution is called a **workflow run**. Runs let you see what happened, debug issues, and understand the data flowing through your automation.
***
## Viewing Runs
* Navigate to the **Workflow Runs** tab.
* Filter runs by time range (e.g., last 24 hours, last 7 days).
* Click into a run to view step-by-step execution.
## Debugging Runs
Each run shows:
* When the **trigger fired**
* Which **steps executed successfully**
* Which **branches were followed**
* Any **errors or failures**
This helps you quickly identify where something broke (e.g., authentication expired, invalid field mapping).
## Restoring Versions
Workflows are versioned. If you’ve made changes and something breaks, you can restore to a previous version.
* Go to the workflow’s **versions history**.
* Select a past version and restore it.
## Best Practices
* Always test triggers and actions before publishing.
* Use the run debugger to validate logic before rolling out to the whole team.
* Restore to known-good versions if major issues arise.
# Product Updates
Source: https://docs.attention.com/change-log
New releases and improvements
**Simplified, faster Salesforce connection:**
* Admins can now link Salesforce with one click, without needing to enter a My Domain value, and sandbox vs. production routing is handled automatically
* Salesforce OAuth linking and reconnecting now supports PKCE, so it works with customer apps and org security policies that require it
* CRM-specific field errors now surface immediately when saving integration configuration, and connection checks complete quickly even for large organizations
**Smoother call playback:**
* Calls now recover automatically from playback stalls instead of buffering indefinitely
* Users can preview video content by scrubbing the seek bar with thumbnail previews
* Users can keep listening through screen lock, with lock-screen controls and auto-resume on unlock
**Recording consent for external participants:**
* External participants can now review and consent to meeting recording before joining a call, via a dedicated consent page available in five languages
* Org admins can enable a master consent-mode switch and turn on chat compliance messages for desktop recordings
**Smart action suggestions:**
* Reps can review AI-suggested actions in a redesigned inbox with My/Team tabs, a detail panel, and inline AI editing—even for document drafts
* Reps can see suggested actions directly within a conversation's Actions tab, with unread indicators and "expiring soon" reminders on each card
* Reps can rate suggestions with optional comments, restore dismissed ones, and download the created document, deck, or email in its native format
**Multi-select call labels:**
* Call labels now support assigning multiple values instead of just one, in both editing and display
**Sales rep scorecard editing:**
* Sales reps can now edit manual scorecards when their organization turns on this option
**Home page calls and meetings feed:**
* Users can see a redesigned homepage feed showing recent calls, upcoming meetings, and live calls in one view
* Users can join scheduled meetings directly from the desktop app, and add or remove the notetaking bot for live calls right from the homepage
* Upcoming meetings now show participants and bot-join controls with a "view all" link, and are combined with the Calls & Meetings section
**Desktop app recording enhancements:**
* Desktop app now shows live recording status from start through finished transcript, with real-time transcription and live talktrack and battlecard prompts during the call
* Desktop recordings now capture calendar event details and apply your team's custom vocabulary for transcription, matching bot recordings
**Expanded manager & rep analytics exports:**
* Managers and reps can now export their analytics data to CSV, including a rep Email column
* Analytics tables, drilldowns, and CSV exports now include Minutes Listened and Active Listener metrics
**Deal View customization:**
* Users can now create custom boards with configurable columns and tabs in Deal View, automatically returning to their preferred board and tab
* Users can see a Last Attention Activity Date column showing the most recent call or email
* Users can resize deal-view columns with widths persisting across devices; new organizations start with the enhanced deal view and persistent filters on by default
**App now runs in the background:**
* The app can now open automatically when you start your computer
* Users can start recording a call without opening the app first
**Promote email templates to team or org scope:**
* Managers and admins can now change a personal email template's scope to Team or Org level
* A hierarchical team picker lets admins choose exactly which teams gain access
**Scorecard administration:**
* Admins can now list, create, and update scorecards across all teams, and create, update, and delete scorecard items
* Admins can now duplicate an existing scorecard, keeping all its columns, team links, and items
* Admins can now soft-delete scorecard templates, removing them from new conversations while keeping historical results available
**AI-generated setup suggestions when connecting a CRM:**
* When admins connect a new CRM, they now automatically get AI-generated suggestions for scorecards, field configs, call tags, and email templates — no manual trigger needed
* A live progress card shows the status of these AI-generated setup suggestions and prompts users to review and act on them once ready
**File attachments and model choice in Super Agent chat:**
* Users can now attach files, including images, directly in Super Agent chat, with folder drop supporting up to 30 concurrent files and 250MB each
* Users can now override the default LLM model for their own Super Agent and Build Chat conversations
**Conversation retention policies:**
* Admins can now set media retention policies for conversations, with configurable hold periods and per-team settings
* Content-generation features like CRM analysis, insights, snippets, and email templates are now disabled for conversations whose retention status has been removed
**New Super Agent tools and integrations:**
* Super Agent can now search the web, query Snowflake data, and generate images delivered right in Slack
* Super Agent can now read and analyze imported chat and email threads, not just calls,
* Super Agent now supports HubSpot company search and enrichment alongside Salesforce, discovers related child accounts under Salesforce parents, links conversations to CRM records, shows real deal-stage names, and can filter pipeline queries to closed deals
**Duplicate and auto-assign intelligence item collections:**
* Users can now duplicate an intelligence item collection, cloning all its items and assignments into a new copy
* Admins can now set a collection to auto-assign itself to any new teams created after the collection is set up
**Trigger native integrations via the public API:**
* Developers can now list and trigger native integration workflows directly through the public API
* Repeated triggers are safely deduplicated, and workflows stay isolated between organizations
**CRM validation error notifications:**
* Admins now get notified when CRM field validation errors occur, with an option to reconnect their CRM account
* Salesforce validation errors now include the specific rule name, description, and a direct link to fix the issue in Salesforce
**More flexible bot joining and calendar connection controls:**
* Users can connect Google or Microsoft calendars even when their organization has turned off automatic bot joining
* Users can opt into consent-required bot joining without needing an organization-wide setting
* Admins can let the bot join meetings without requiring the organizer to accept the calendar invite
**Connect AI assistants to your call data:**
* Admins can now connect AI assistants like Claude, Cursor, and ChatGPT to their account through a secure MCP integration
* Users can ask connected assistants to search calls and transcripts, pull usage reports, and review scorecards, teams, and reps
* Managers and admins can create and update labels, scorecards, forecast categories, and invitations directly through connected AI assistants
**More accurate, live CRM data in deal views:**
* Deal view filters now show current picklist values pulled directly from CRM records instead of stale data
* Opportunity scores now update dynamically and reflect accurate values
**Timestamped scorecard feedback:**
* Scorecard feedback now includes timestamped evidence, showing the exact quote and time range that supports each grade
**Unified search:**
* Users can now press Cmd+K to search People, Accounts, Opportunities, and Calls from one dialog, accessible via a new search bar in the page header
* Results rank by relevance, boost related conversations, and group into Calls and Transcripts sections with title matches first
* Users can now search for exact phrases in call titles and transcripts by wrapping them in quotes, and filter results by title or transcript independently
**Chat sharing and collaboration for Super Agent:**
* Users can now share Super Agent chats via public or private links, with raw tool-execution details hidden for a cleaner read
* Multiple people can now take part in the same shared Slack thread conversation with Super Agent
**Release of Agent Builder v2:**
* For organization with Agent Builder enabled, it is now accessible via the "Agents" tab on the Attention homepage
* v1 of the Agent Builder, now called "Builder", can still be accessed via the settings menu for enabled users
**New permissions for transferring call ownership:**
* Admins can now transfer ownership of their organization's calls across all team members in the org
* Managers can now transfer ownership of thier team's calls aross all members of their teams
* Sales reps can now transfer their own calls to other team members
**Multi-team email templates:**
* Admins can now create email templates for sharing across the entire organization or across multiple teams
* Note: Team-level email templates created before this update are still available for the teams they were initialled created for and cannot be changed
**Updates to UI/UX in Conversations view including:**
* Transcripts broken out by sentence for improved readability and navigation
* Streamlined snippet creation by clicking next to sentence or highlighting over transcript text
* See number of matches in transcript search and navigate through previous/next match
**Customizable Deal Indicators for Deal View:**
* For organizations wtih Deal View enabled, deal indicators can be edited and customized via the "Deal Indicators" tab in Settings
* Two Indicator Types: Score and List indicators. Score indicators can be applied to overall deal score
* Indicators are configured and applied at the organization level
**Manager Analytics v2:**
* Views for manager activity and rep activity. Filter by date ranges
* Insights at the manager and rep level for: # of calls listened to, # of comments left, # of sessions, and more
# Find and Review Your Calls
Source: https://docs.attention.com/core-features/all-calls
Browse every recorded call in your workspace, narrow the list with filters, and open a call to review it.
**All Calls** lists the conversations Attention has recorded, imported or received as uploads. Use it to find a call, check its status at a glance and open it for the full review.
## 1. Open All Calls
Go to **Conversations → All Calls**.
The header shows **Calls** and the number of calls that match your current filters. More calls load as you scroll.
## 2. Read the list
Each row shows:
* The call title.
* The call owner, the date and the duration.
* The linked opportunity, when the call has one.
* The call's tags. Click **more** to see every tag on a row.
Badges next to the details tell you more about the call:
* **Private** — the owner or an admin made the call private, so other team members can't view it.
* **Internal** — everyone on the call is from your organization.
* **Transcript Only** — the call has a transcript but no recording, for example an uploaded transcript.
A call that is still uploading shows **Uploading...** and opens once it finishes.
When new calls that match your filters come in while the page is open, a notification appears. Click **Load new** to add them to the list.
## 3. Filter the list
Use the **Filters** panel on the left. On smaller screens, click **Filters** above the list to open it.
* **Participants** — pick people from **People at my organization** or **Customers** to see calls they joined.
* **Team** — pick one or more teams. This filter appears when you belong to more than one team.
* **Call Title** — type words from the call's title.
* **Date Range** — choose **Today**, **Yesterday**, **Past week**, **This week**, **This month**, **Past month** or **Custom Date Range**.
* **Call Duration** — choose **1 to 5 minutes**, **6 to 15 minutes**, **16 to 30 minutes** or **>30 minutes**. To set your own range, click **Custom range**, enter a **Minimum (minutes)**, a **Maximum (minutes)** or both, and click **Apply**.
* **Call Tags** — expand a tag category and check the values you want. Check **Not Set** to find calls where that tag is empty. Tags come from your [call labels](/workspace-setup/call-labels).
* **Show all call tags** — show every tag on each row instead of a shortened list.
* **Hide internal calls** — leave out calls with only people from your organization.
* **Calls I own** — show only the calls you own.
When your workspace has a CRM connected, the panel also has one field for each CRM object Attention syncs. Pick a record to see the calls linked to it. See [CRM Auto Update](/core-features/crm-sync) for how calls get linked.
### Default filters
The list opens with filters already set for you:
* Admins and managers see the calls of their primary team and the teams under it.
* Other users see the calls of their primary team, with **Participants** set to themselves once they've been on a call.
## 4. Save or reset your filters
As soon as you change a filter, two buttons appear at the top of the panel:
* **Save filters** — keep this selection as your default view. The list opens with it next time.
* **Reset** — go back to your saved view, or to the default filters if you haven't saved one.
## 5. Open a call
Click a row to open the call. The call page shows the recording and the transcript, with tabs for the rest of the review:
* **CRM** — the fields Attention filled in for your CRM. See [CRM Auto Update](/core-features/crm-sync).
* **Coaching** — scorecard results and talk tracks. See [Review Scorecards on a Call](/core-features/scorecards-on-a-call).
* **Insights** — the summary and other insights. See [Generate Call Insights](/core-features/call-insights).
* **Snippets** — short clips to share. See [Share Snippets from a Call](/core-features/snippets).
* **Email** — a follow-up email drafted from the call. See [Send Follow-Up Emails with Templates](/core-features/email-templates).
* **Comments** — notes for your team at a moment in the call. See [Leave and Manage Comments](/core-features/comments).
You can also act on a call without opening it. Click **⋯** at the end of the row and choose **Rename Call**, **Download Call**, **Make Call Private** (or **Make Call Public**) or **Archive Call**.
## Add a call by hand
To add a call that Attention didn't record, click **Upload Recording** or **Upload Transcript** at the top of the list. See [Upload a recording](/core-features/get-attention-into-calls#upload-a-recording).
# Set When Attention Joins Your Meetings
Source: https://docs.attention.com/core-features/auto-join-rules
Choose which calendar meetings the Attention notetaker joins automatically, and find out why it skipped one.
Once your calendar is linked, the Attention notetaker joins your calendar events automatically. It joins events that have a Zoom, Google Meet or Microsoft Teams link and that you have accepted in your calendar.
Which of those meetings it joins depends on who is invited:
* **External meetings** have at least one participant from outside your company. They follow your personal settings.
* **Internal meetings** have only participants from your company. They follow your team's settings.
## External meetings
1. In [Attention](https://app.attention.tech), click your name at the bottom of the sidebar, then **Settings**.
2. Under **Call Settings**, find **Join external calls when** and click **Edit**.
3. In **External call joining settings**, check the meetings you want Attention to join.
Each change saves as soon as you click the box. The row then shows how many options are selected.
The options, and what a new account starts with:
**Join calls when I’m the host and**
* **I’m the only one from my company with Attention on the call**: on.
* **Other teammates with Attention are on the call**: on.
**Join calls when a teammate is the host and**
* **They have Attention set up to join calls**: off. The host's notetaker records the meeting, so yours stays out. Check it if you also want your own recording.
* **They don’t have Attention set up to join calls**: on.
**Someone outside my company is the host**: on.
## Internal meetings
Internal meetings follow your team's settings. Go to **Settings → Teams**, open your team, and choose the **Settings** tab. Under **Recorder**:
* **Join internal calls**: on by default. Attention records meetings where all participants are from your organization.
* **Skip 1:1 internal meetings**: off by default. When it is on, Attention skips one-on-one meetings between teammates: meetings with "1:1" or "one on one" in the title, or with only two people from your company.
The same switches appear for every team in **Organization Settings → Internal call recording**.
In an internal meeting, the notetaker of the person who organized it joins. When a teammate organizes an internal meeting, their notetaker records it and yours stays out.
## Join or skip one meeting
To change a single meeting without touching these rules, use the **Join** checkbox next to the event under **Home → Upcoming calls**. See [Get Attention into Your Calls](/core-features/get-attention-into-calls#choose-which-upcoming-meetings-attention-joins).
## Why didn't Attention join my meeting?
On **Home**, hover the **?** icon next to an upcoming event to see why Attention is or isn't set to join it. These are the most common reasons:
Attention joins through the meeting link, so the **Join** checkbox is disabled for events without one. Add a Zoom, Google Meet or Microsoft Teams link to the event in your calendar.
Attention only joins meetings you have accepted. Accept the invitation in your calendar.
**Join** was turned off for this one event. Check **Join** again under **Home → Upcoming calls**.
When a teammate with Attention hosts an external meeting, their notetaker records it, and **They have Attention set up to join calls** is off by default. To have yours join too, check that option in **External call joining settings**.
In an internal meeting, only the organizer's notetaker joins. If you organized it, check your team's **Join internal calls** and **Skip 1:1 internal meetings** switches in **Settings → Teams**, on your team's **Settings** tab under **Recorder**.
Check **Someone outside my company is the host** in **External call joining settings**.
Need help? Contact [support@attention.com](mailto:support@attention.com).
# Generate Call Insights
Source: https://docs.attention.com/core-features/call-insights
Ask questions about a call or deal, or run a built-in template, from the Insights tab.
## 1. Open the **Insights** tab
Open a call in [Attention](https://app.attention.tech) and click the **Insights** tab next to the recording.
## 2. Choose what to ask about
The icon button to the left of the question box sets what your question is about:
* **Call** (the default): the answer is based on this call.
* **Deal**: the answer is based on the deal this call belongs to.
## 3. Run a template or ask your own question
With **Call** selected, pick a template from the list, or click the question box to open the same list. Templates are grouped as follows:
| Group | Templates |
| - | - |
| **Coaching** | **Active Listening** |
| **Summary** | **Long Summary**, **Short Summary** |
| **Deal Insights** | **Closing Attempts**, **Objections**, **Budget**, **Timeline general**, **Risks**, **Introductions**, **Action Items**, **Positive Moments** |
To ask something else, type it in the box (**Ask a question about your conversation or deal**), then press **Enter** or click the arrow. For example: "What did the prospect say about their current vendor?"
The answer appears as a card in the tab, with its title and scope at the top.
## 4. Copy, refresh or delete an insight
Each card has three icons in its top-right corner:
* **Copy to clipboard**: copies the title and answer, ready to paste into an email or CRM note.
* **Refresh**: generates the answer again.
* **Delete**: removes the insight after you confirm in the **Delete insight** dialog.
### Use cases
* Run **Short Summary** right after a call to share a recap with your team.
* Run **Objections** and **Risks** before a deal review.
* Switch to **Deal** and ask what is blocking the deal.
* Combine an insight with a [snippet](/core-features/snippets) to share the summary and the moment it came from.
# Navigate a Call Page
Source: https://docs.attention.com/core-features/call-page
Find your way around a call page and manage the call: rename, archive, transfer, change its language and download it.
Every call in **Conversations → All Calls** opens on its own page. This page explains where things are and what you can do from it.
## Layout
The page has two parts:
* **Video and transcript**, on the left. The call title, owner, date and labels sit above the video. Use the **Video** and **Transcript** toggle at the bottom to switch between the recording and the transcript.
* **The tab panel**, on the right. It holds the call's analysis and tools.
The tab panel opens on the first tab. These are the tabs, each with its own guide:
| Tab | What it's for |
| - | - |
| **CRM** | Review and sync the fields Attention filled in. See [CRM Auto Update](/core-features/crm-sync). |
| **Coaching** | Scorecard results for the call. See [Scorecards on a Call](/core-features/scorecards-on-a-call). |
| **Insights** | Ask questions about the call. See [Generate Call Insights](/core-features/call-insights). |
| **Snippets** | Create and share clips. See [Share Snippets from a Call](/core-features/snippets). |
| **Email** | Draft a follow-up email. See [Send Follow‑Up Emails with Templates](/core-features/email-templates). |
| **Comments** | Leave timestamped comments. See [Leave and Manage Comments](/core-features/comments). |
### Read the transcript next to the video
To read the transcript while you watch, open the transcript and click **View with video**. The transcript moves next to the video and the tab panel closes. Click **View with analysis** to bring the tab panel back. You can also press **Shift + V** to switch between the two views.
The side-by-side view is available on larger screens.
## Rename the call
1. Click the pencil icon next to the call title, or double-click the title.
2. Type the new name.
3. Press **Enter** or click anywhere outside the title to save. Press **Esc** to cancel.
The new title appears in **All Calls** and everywhere else the call is listed.
## Call actions
The rest of the actions are in the **⋯** menu next to the **Share** button, at the top of the page.
### Change the call's language
If the call was transcribed in the wrong language, re-transcribe it:
1. Click **⋯ → Change Language**.
2. Pick the language the call was spoken in.
3. Click **Re-transcribe**.
Attention re-transcribes the call in that language and replaces the current transcript. It takes a few minutes. A banner shows on the call while it runs, and the transcript updates on its own when it's ready.
To keep the transcript as it is and only watch with subtitles in another language, use [translated subtitles](#watch-with-translated-subtitles) instead.
### Transfer the call to someone else
1. Click **⋯ → Transfer ownership of call**.
2. Under **New call owner**, choose a user.
3. Click **Transfer call**.
The call moves to the new owner and their team, and Attention recalculates its scorecards based on the new owner. If the new owner is on a different team, Attention also recalculates the CRM fields and labels with that team's setup.
If the new owner isn't on your team, Attention asks you to confirm with **Yes, transfer call**, since you may lose access to the call once it moves.
### Archive the call
1. Click **⋯ → Archive Call**.
2. Click **Archive** to confirm.
Once archived, the call and all of its snippets can no longer be reviewed.
There's no option in the app to unarchive a call.
## Watch with translated subtitles
Subtitles let you follow a call in another language without changing its transcript.
1. In the video controls, click the gear icon (**Settings**).
2. Click **Show captions** if captions are off.
3. Open the menu again, then choose **Subtitle language** and pick a language.
The first time someone picks a language for a call, Attention translates the subtitles. A banner shows while they're generated, and they load on their own when ready. Languages that are already translated are marked and load right away. Choose **Original (transcript language)** to go back to the transcript's language.
## Download the call or copy the transcript
* **Video:** click **⋯ → Download Call**. It's available once the video has finished processing. The download starts in a new browser tab.
* **Transcript:** open the transcript and click the copy icon (**Copy full Transcript**) at the top. The whole transcript is now on your clipboard.
To add a call to Attention, by uploading it or adding the bot to a meeting, see [Get Attention into Your Calls](/core-features/get-attention-into-calls).
# Leave and Manage Comments
Source: https://docs.attention.com/core-features/comments
Capture feedback and collaborate by adding comments directly on call recordings.
Comments are pinned to a moment in the recording, so teammates can jump straight to what you are talking about. Use them to ask for coaching on an objection, flag a risk, or point the team to a great pitch.
## 1. Open the **Comments** tab
Open a call in [Attention](https://app.attention.tech) and click the **Comments** tab next to the recording.
## 2. Write your comment
1. Play or scrub the recording to the moment you want to discuss.
2. Click the **Leave a comment...** box. The comment is pinned to the current playback time, shown on the button (**Comment at 1:23**). If you keep playing, click the refresh icon (**Refresh timestamp**) to use the new time.
3. Type your note. To tag a teammate, type `@` and pick their name from the list.
4. To point to another moment, type a time such as `4:05`. It becomes a link that jumps to that point in the call.
## 3. Choose who can see it
Under the box, use **Comment visible to**:
* **Entire Organization** (the default): everyone in your organization.
* **Your team**: people who share a team with you.
* **Individual**: only the people you pick. Click **Select viewers** and search with **Find a person**. You are always included.
Press **Enter** or click **Comment** to post it.
## 4. Reply, edit or delete
* Every comment shows its timestamp. Click it to play the call from that moment.
* Hover the icon on the right of a comment to see who can view it.
* Click **Reply** under a comment to answer in a thread. The reply starts with a mention of the author. Click the reply count (for example, **2 replies**) to show or hide a thread.
* On your own comments and replies, open the **⋯** menu and click **Edit** (make your changes, then **Save**) or **Delete**.
## Email notifications
Attention emails the call owner when someone comments on their call, and emails teammates you `@` mention when they can see the comment. Each person can turn these emails off: click your name at the bottom of the sidebar, then **Settings**. On **Personal Settings**, open **Email notifications** and switch off **Comments and mentions**.
### Use cases
* **Get coaching on an objection:** set visibility to **Individual**, add your manager, and ask for input.
* **Celebrate a great pitch:** share it with the **Entire Organization**.
* **Collaborate on a deal:** set visibility to **Your team** so everyone can weigh in.
# Update Your CRM from a Call
Source: https://docs.attention.com/core-features/crm-sync
Review the CRM fields Attention fills in from a call and push them to your CRM record.
After each call, Attention fills in your organization's CRM fields from the conversation. You review them on the call's **CRM** tab and push them to the matching record in your CRM.
## 1. Open the **CRM** tab on a call
1. Go to **Conversations → All Calls** and open a call.
2. Click the **CRM** tab.
The tab has two parts:
* **The record pickers** at the top: one per CRM object your organization syncs, such as an opportunity or a deal. When Attention matched the call to a record, it is already selected.
* **Fields**: every CRM field your admin set up, with the value Attention extracted from the call. Picklist fields show the options from your CRM. Text fields show the answer as text you can edit.
## 2. Check the linked record
Make sure the picker at the top shows the record you want to update.
* To link a different record, click the picker, search by name and select it. Attention recalculates the deal fields for the new record.
* To unlink the record, click the **X** in the picker.
* To open the record in your CRM, click the external link icon next to the picker (**View in CRM**).
## 3. Review and edit the fields
1. Read each value. To change one, edit the text or pick different options from the list.
2. Select the checkbox next to each field you want to push. If you edit a text field, select its checkbox again afterwards.
3. Use **Select All** or **Clear selection** to change many fields at once. The count next to them shows how many fields are selected, for example **3 of 8 fields selected**.
## 4. Click **Update N Records**
Click **Update N Records** at the bottom of the tab, where N is the number of fields you selected. Attention writes the selected values to the linked record. If your fields are set to **Automatic**, Attention has already sent them to your CRM, and **Update N Records** doesn't send them again.
## Re-run the analysis with **Analyze Call**
Click **Analyze Call** above the fields to extract the values from the call again, for example after your admin added or changed fields. The tab shows **Analyzing Conversation...** while it works, then the fields refresh with the new values.
## See where a value came from
Click the **CRM history** icon next to a deal or record field to open its **Field Breakdown**:
* **Current value**: the value the field has now.
* **Inputs**: every value that went into it, newest first, with its date and source. Each entry says whether it was AI generated or edited by a user, and whether it came from this call or from the whole deal.
Deal fields build on every call linked to the same opportunity, so the breakdown shows how the value changed from call to call.
## Automatic and manual updates
When fields reach your CRM depends on how your admin set up field configurations. Attention has two versions of that setup.
### V2: push modes
If your organization uses **Push to CRM** on its field configurations, the push mode decides:
* **Manual**: the values wait on the **CRM** tab until you click **Update N Records**.
* **Automatic** (the default): Attention sends the values once it has analyzed the call. You don't need to click anything.
* **Automatic or manual**: Attention sends the values once it has analyzed the call, and you can also send them from the **CRM** tab.
See [Set Up CRM Field Configurations (V2)](/workspace-setup/crm-field-configurations-push-to-crm).
### V1: workflow triggers
If your organization sends fields with CRM workflows, each workflow's trigger decides:
* **User exports Fields from Attention**: the values wait on the **CRM** tab until you click **Update N Records**.
* **Conversation finished**: Attention sends the values once it has analyzed the call. You don't need to click anything.
* **Conversation finished or User exports Fields from Attention**: Attention sends the values once it has analyzed the call, and you can also send them from the **CRM** tab.
See [Set Up CRM Field Configurations (V1)](/workspace-setup/crm-config).
## Troubleshooting
When **Update N Records** is grayed out, hover over it to see why.
No record is linked to the call. Select one in the picker at the top of the **CRM** tab.
Select the checkbox next to at least one field, or click **Select All**.
You already pushed these values to this record. Edit a value or select other fields to push again.
Need help? Contact [support@attention.com](mailto:support@attention.com).
# Attention Desktop App
Source: https://docs.attention.com/core-features/desktop-app
Record your meetings directly from your computer — no bot in the call. Download, install, and configure the desktop app.
## What is the Desktop App?
By default, Attention joins your meetings with a **notetaker bot** that appears as a participant. The **Attention Desktop App** is an alternative: it records meetings **directly from your computer**, so no bot joins the call.
The app runs quietly in the background and:
* **Detects** when a meeting starts on your computer (Zoom, Google Meet, Microsoft Teams **desktop app**).
* **Asks you** whether to record — recording never starts silently, and a visible indicator is shown while it's active.
* **Captures** the meeting audio/video and your microphone, then uploads the recording securely to Attention for your transcript and AI notes — exactly like a bot-recorded call.
## Download & Install
1. In the Attention web app, go to [**Settings → Desktop Settings**](https://app.attention.tech/settings/desktop-settings).
2. Turn on **Enable Desktop Recording**. The download section appears below the toggle.
3. Under **Download the Desktop App**, click **Download** to get the latest version (currently for macOS on Apple Silicon).
4. Open the downloaded `.dmg` file and drag **Attention** into your **Applications** folder.
5. Launch the app and sign in with your Attention account.
The desktop app is signed and notarized by Apple, so macOS will open it
without any security warnings.
**If you use Zoom:** quit and reopen Zoom once after installing the desktop
app — the app will remind you if it's needed. This one-time restart is
required for Zoom meeting detection to work.
## macOS Permissions
The first time you run the app, macOS asks you to grant a few permissions. Each one is needed for a specific part of meeting recording:
| Permission | Needed for | Why |
| - | - | - |
| **Microphone** | Required | Captures **your voice** during a meeting. The meeting-window capture only contains the other participants' audio — without the microphone, your side of the conversation would be missing from the transcript. |
| **Screen Recording** | Required | This is how the **other participants' audio and video** are captured: the app records the meeting application's window only — never your whole desktop or other apps. macOS requires this permission for any window or system-audio capture. |
| **Accessibility** | Required | Lets the app **detect that a meeting has started** by reading window information from Zoom, Meet, or Teams, so it can prompt you to record at the right moment. It is not used to control other applications. |
| **Full Disk Access** | **Required for Teams desktop app & Safari** | This is how the app obtains the **meeting URL** when you use the **Microsoft Teams desktop app** or join **Google Meet from Safari** — those apps keep their meeting information in locations macOS only unlocks with this permission. The meeting URL is what links a call to your calendar event, so without it automatic recording, the event title, deal/opportunity matching, and CRM export **all fail** for those meetings. Not needed for Zoom or for Google Meet in Chrome. Not applicable to Microsoft Teams joined in a browser (see the URL-detection warning below). No personal documents are read. |
If you accidentally deny a permission, you can grant it later in **System Settings → Privacy & Security**, under the matching section (Microphone, Screen Recording, Accessibility, or Full Disk Access). The app will also guide you there from its permission checklist.
## Desktop Settings Explained
All desktop app options live in [**Settings → Desktop Settings**](https://app.attention.tech/settings/desktop-settings).
### General
**Launch Attention on startup**
Opens Attention automatically when you log in to your computer. It starts in the background — no window pops up — so it can detect your meetings from the moment your day starts. We recommend keeping this **on**; if it's off and the app isn't running, meetings won't be detected or recorded.
**Install updates automatically**
When on, Attention downloads new versions, installs them, and relaunches on its own — you always have the latest version without doing anything. Turn it off only if you want to control when updates happen (you can then install them yourself from the tray menu, for example to test a specific build).
### Recording
**Enable Desktop Recording**
This is the master switch that changes *how* your meetings are recorded:
* **On** — the notetaker bot **no longer joins your calls automatically**. The desktop app records them from your computer instead.
* **Off** — the bot keeps joining your meetings as usual, and the desktop app does not record.
Turning it on also reveals the **Download the Desktop App** section and the options below.
**Download the Desktop App**
Always offers the **latest released version** of the app for your platform. If you're setting up a new computer, come back here to grab the installer.
**High-quality meeting capture**
Records **Microsoft Teams** and **Google Meet** at full quality by connecting to the meeting directly instead of capturing your screen. See [High-quality Meeting Capture](#high-quality-meeting-capture) below for the requirements and what other participants see.
**Allow the bot to record in parallel with the desktop app**
By default, enabling desktop recording turns the bot off entirely. Check this option if you want **both** to run: the bot still joins your calls *and* the desktop app records locally. This is useful as a safety net while you're trying out the desktop app — if anything goes wrong with the local recording (for example, a missing permission), the bot recording is still there.
## High-quality Meeting Capture
By default the app records a meeting by **capturing the meeting window on your Mac** — the same pixels and audio you see and hear.
**High-quality meeting capture** records the same meeting a different way: Attention connects to the meeting **as a companion device** and receives the audio and video **directly from the meeting platform**. Nothing is captured from your screen.
The result is a cleaner recording — full-resolution video, per-participant audio, and no quality loss from your Mac being busy — but it comes with one visible trade-off, covered next.
This is an option, not a replacement. It applies only to **Microsoft Teams**
and **Google Meet**. Zoom, Slack, and anything else keep using the standard
desktop recording, and any call that cannot use high-quality capture falls
back to it automatically.
### What other people see
**Google Meet.** Because Attention joins as a companion device, **an extra participant appears in the call** carrying **your own name**. Google Meet announces it to everyone:
Opening the **People** panel shows both entries under your name — you, and the companion beside it, marked with a device icon:
So for Meet calls, other participants can see that something extra is connected, attributed to you by name. That visibility is deliberate on Google's side and cannot be turned off.
**Microsoft Teams.** Teams does **not** add a visible participant in the same way. The recording still happens through the same mechanism, but Teams does not announce a companion device to the other people in the call.
**This changes who can tell you are recording.** With the standard desktop
recording, nothing appears in the participant list at all. With high-quality
capture on a **Google Meet** call, an extra participant with your name is
visible to everyone. The consent settings and chat compliance message
described in [Consent & Compliance](#consent-%26-compliance) still apply — this
is in addition to them, not instead of them.
### Requirements
| Requirement | Detail |
| - | - |
| **macOS 13 or later** | The section does not appear on older versions. |
| **Apple Silicon Mac** | Intel Macs cannot use high-quality capture. |
| **Microsoft Teams** | The **Teams desktop app** must be installed. Teams joined in a browser (`teams.microsoft.com`) is not supported by the desktop app at all, with or without high-quality capture. |
| **Google Meet** | Meet must run in **Chrome, Arc, Brave, Comet, or Dia**, and that browser must be your **default browser**. Safari records Meet calls normally but cannot use high-quality capture. |
| **Automation permission** | macOS asks for permission for Attention to control Teams and your browser. This is granted once per platform. |
| **One restart per platform** | Teams and your browser each restart once while the permission is applied. Open tabs and your session are restored. |
**Full Disk Access is still required.** High-quality capture does not remove
that requirement: every call that falls back to the standard recording —
including all your Zoom calls — still needs it for Teams and Safari meeting
URLs. Keep it enabled.
### Turning it on
1. Go to [**Settings → Desktop Settings**](https://app.attention.tech/settings/desktop-settings).
2. Under **Recording Mode**, turn on **High-quality meeting capture**.
3. Two rows appear, one per platform. Click **Set up** on each one you want.
4. Approve the macOS Automation prompt when it appears.
5. Let Teams or your browser restart when asked. **Do this before a call, not during one** — Attention will refuse to restart your browser while you are in a Meet call.
A green check on a row means that platform is ready. An amber warning means something needs attention, and the row explains what.
### The default browser rule for Google Meet
Attention can only set up high-quality capture for your **default browser**, and the permission belongs to that browser specifically. Three consequences worth knowing:
* **A Meet call opened in another browser is recorded in low quality.** If Chrome is your default and you open a Meet link in Arc, that call falls back to the standard recording. Nothing appears in the call, and the recording still works — it just is not high quality.
* **If you change your default browser, set it up again.** The permission does not follow you. Attention notices and shows **Set up again** on the Meet row.
* **If your default is not supported** (Safari, for example), the row tells you so and no setup is possible until you change it.
### Differences at a glance
| | Standard desktop recording | High-quality meeting capture |
| - | - | - |
| **How the meeting is captured** | The meeting window on your Mac is recorded | Audio and video come directly from the meeting platform |
| **Platforms** | Zoom, Google Meet, Microsoft Teams, Slack | Microsoft Teams desktop app, Google Meet in a supported default browser |
| **Visible to other participants** | Nothing appears in the call | **Google Meet:** an extra participant with your name. **Teams:** nothing |
| **Video quality** | Limited by what your Mac captures, and by the **Recording quality fallback** setting | Full quality from the platform |
| **Speaker separation** | Derived from the mixed meeting audio | Per-participant audio streams |
| **Effect on your Mac** | Uses CPU to capture and encode | Much lighter, since nothing is captured locally |
| **Extra permissions** | Screen Recording, Microphone, Accessibility | The above, plus Automation for Teams and your browser |
| **Extra setup** | None beyond permissions | One restart of Teams and your browser |
Once high-quality capture is on, the **Recording quality** setting is renamed
**Recording quality fallback** — it now applies only to the calls that still
use the standard recording, such as Zoom.
### When a call falls back to standard recording
A call is recorded the standard way, with no warning in the meeting, whenever:
* The meeting is **Zoom or Slack** — high-quality capture covers Teams and Meet only.
* The Meet call was opened in **Safari**, which records normally but cannot use high-quality capture.
* The Meet call was opened in a **browser that is not your default**.
* The **Automation permission** for that platform is not granted, or Teams or your browser has not been restarted since setup.
* The **Teams desktop app is not installed**.
* The call started before setup finished — the capture method is chosen when recording begins and does not change mid-call.
The recording, transcript, and AI notes all work normally in these cases. Only the capture quality differs.
### If high-quality capture isn't working
* **The Recording Mode section is missing.** Your Mac does not meet the requirements — most often an Intel Mac or macOS 12 or earlier. The section is hidden rather than shown as broken.
* **The Google Meet row says your default browser is not supported.** Set Chrome, Arc, Brave, Comet, or Dia as your default in **System Settings → Desktop & Dock → Default web browser**, then run setup again.
* **The Microsoft Teams row says Teams was not found.** Attention looks for the Teams **desktop app**. Install it, then click **Check again**.
* **A row says the permission was denied.** Click **Check again** first — Attention re-verifies before sending you anywhere. If it is genuinely denied, macOS will not ask a second time, so enable Attention manually in **System Settings → Privacy & Security → Automation**.
* **Setup will not run during a call.** It restarts Teams or your browser, which would drop the call you are in. Leave the call and try again.
* **It is on, but calls are still recorded in standard quality.** Check that both rows show a green check. If they do and calls still fall back, high-quality capture may not be enabled for your workspace yet — contact Attention support.
## Desktop Recording & Your Calendar
Desktop recording works together with your linked calendar. If a calendar event has the **Join** check activated, and you join the meeting link of the event on time, the expected behavior is:
1. **The bot does not join the call.**
2. **The desktop app starts recording automatically.**
3. **The title of the conversation is taken from the calendar event.**
4. **Opportunity matching assigns the deal/opportunity from the event to the conversation.**
5. **The CRM export runs to HubSpot/Salesforce**, exactly as it does for bot-recorded calls.
A few details on how the matching works:
* **"On time"** means you open the meeting link up to **10 minutes before the event starts**, or at any point **while the event is in progress**. Outside that window, the meeting won't be matched to the event.
* The meeting is matched to the event by its **meeting link**, so make sure you join using the link from the calendar event.
* The event must have **Join enabled** for the meeting to be matched — if you've told Attention not to join an event, the desktop recording won't be linked to it.
* If you checked **Allow the bot to record in parallel with the desktop app**, the bot still joins as usual and behavior 1 does not apply.
* If no calendar event matches (ad-hoc meeting, Join disabled, or outside the time window), the meeting can still be recorded, but the conversation keeps the meeting's own title and no deal/opportunity is assigned automatically.
**The meeting URL is what makes all of this work.** The desktop app matches
a call to your calendar event by its **meeting URL**. If the URL cannot be
detected, **every step above fails as a result**:
* ❌ The desktop app does **not** start recording automatically.
* ❌ The conversation does **not** get the title from the calendar event.
* ❌ **No** deal/opportunity is assigned to the conversation.
* ❌ The CRM export to HubSpot/Salesforce does **not** run.
Each platform has one requirement for URL detection to work:
* **Zoom** — restart Zoom once after installing the desktop app (the app
reminds you). URL detection works from then on.
* **Microsoft Teams desktop app** and **Google Meet in Safari** — grant
**Full Disk Access**: **System Settings → Privacy & Security → Full
Disk Access → enable Attention**.
* **Google Meet in Chrome** — no extra requirement.
* **Microsoft Teams in a browser (`teams.microsoft.com`) — not supported.**
The desktop app cannot obtain the meeting URL when Teams is joined from
a browser tab, so automatic recording, calendar-event matching, and CRM
export will not run for those meetings. Install and join from the
**Microsoft Teams desktop app** for the full flow to work.
## Consent & Compliance
Because the desktop app records without a bot joining the call, other participants don't see a notetaker in the participant list. Two mechanisms keep participants informed:
* The team-level **pre-meeting consent page** (configurable per team, for external participants only or everyone) applies to desktop-recorded meetings just like bot-recorded ones. It is shown to participants who join through an **Attention meeting link** created by the calendar add-on, so it requires meetings to be scheduled with that link.
* Attention can post a **chat compliance message** directly into the meeting chat when a desktop recording starts.
* The notice is posted automatically in **Zoom**, **Google Meet**, and **Microsoft Teams** as soon as the recording begins — for example: *"This call is being recorded and transcribed by \[Your Company] using Attention."*
* The message includes your organization's name.
* It only applies to new recordings — toggling it doesn't affect recordings already in progress.
**How to enable it:**
1. This feature is currently in **beta** and is activated **per organization by Attention** — reach out to your Customer Success Manager or [support](mailto:support@attention.tech) to request it for your workspace.
2. Once activated, an org admin can turn it on in **Settings → Organization → Chat Compliance** with the **Chat compliance message** toggle.
The chat compliance message is supported in Zoom, Google Meet, and Microsoft
Teams meetings.
## Troubleshooting
### My meeting wasn't recorded
Work through this checklist — it covers the causes in order of likelihood:
1. **Was the desktop app running and signed in?** The app must be running in the background to detect meetings. Keep **Launch Attention on startup** enabled so it's always there. If your session expired, the app shows a sign-in notification.
2. **Is Enable Desktop Recording on?** Check [Settings → Desktop Settings](https://app.attention.tech/settings/desktop-settings).
3. **Are all permissions granted?** Open the app's permission checklist and verify Microphone, Screen Recording, and Accessibility.
4. **Zoom:** did you restart Zoom once after installing the app? Detection doesn't work until then.
5. **Microsoft Teams desktop app or Google Meet in Safari:** is **Full Disk Access** granted? (Teams joined in a browser is not supported — see bullet 7.)
6. **Expecting automatic recording?** It only happens when you join using the **meeting link from the calendar event**, the event has **Join** enabled, and you join within the window (up to 10 minutes before the start, or while in progress). Otherwise you'll only get the manual recording prompt.
7. **Is the platform supported?** On Mac: Zoom (desktop app), Microsoft Teams (desktop app), and Google Meet in Chrome, Safari, or Chromium browsers (Arc, Brave, Comet, Dia) are supported. Google Meet in **Edge is not supported** on Mac, **Microsoft Teams joined in a browser (`teams.microsoft.com`) is not supported — you must join from the Teams desktop app**, and Slack huddles are captured audio-only.
8. **Was the meeting visible?** A **minimized** meeting window can't be captured, and a Google Meet tab must stay visible on screen (or in Picture-in-Picture) for video. A general rule: if you can see the meeting, the app can capture it — a window covered by another window is fine, a hidden or minimized one is not.
### My recording didn't upload or is incomplete
* **Network loss ends the recording.** If your connection drops mid-call, the recording stops and is not restarted automatically — the app notifies you, and you can start recording again once you're back online. Offline recording is not supported.
* **Keep the app running until the upload finishes.** Shutting down the machine right after a call can interrupt the upload.
* **Locked screen records audio only**, and **closing the laptop lid ends the meeting** — and with it the recording.
### Good to know
* **Slack calls are recorded audio-only.** Slack huddles are captured without video — you still get the audio, transcript, and AI notes, but there is no video recording.
* **Video quality can drop on Google Meet** when you switch tabs: Meet's Picture-in-Picture mode produces smaller, lower-quality video feeds, and the recording reflects that.
* **One meeting at a time** — the app can't record two simultaneous meetings on the same machine.
* **Speaker labels can be less precise than bot recordings.** The bot receives a separate audio stream per participant; the desktop app captures one mixed stream and uses AI to separate voices and infer names, which is inherently less reliable.
## Tips
**How do I know the app is recording?**
You'll see a recording indicator while a capture is active, and you're always prompted when a meeting is detected — the app never starts recording silently.
**Does the app record my screen all the time?**
No. The Screen Recording permission is only used to capture the **meeting window** during meetings you choose to record. There is no ambient screen or audio capture.
**How do I update the app manually?**
If **Install updates automatically** is off, open the Attention icon in the menu bar (tray) and install the update from there.
**Where do my recordings go?**
Recordings are uploaded securely over HTTPS to your Attention workspace and show up alongside your bot-recorded calls, with the same transcripts, AI notes, and CRM sync.
# Send Follow‑Up Emails with Templates
Source: https://docs.attention.com/core-features/email-templates
Build email templates with AI blocks and turn any call into a follow-up email you can send from Gmail.
An email template mixes your own text with AI blocks. When you use it on a call, Attention fills each AI block with text written from that call, so you get a follow-up email ready to send.
## 1. Open **Email Templates**
Click your name at the bottom of the sidebar, then **Settings**, then **Email Templates**.
The list shows every template you can use. Under each name you see where the template lives: **Personal**, the names of its teams, or **Organization**.
## 2. Choose where a template lives
Every template has a scope that decides who can use it:
| Scope | Who uses it | Who creates it |
| - | - | - |
| **Personal (only you)** | You | Everyone |
| **Team (select teams below)** | Members of the teams you pick, and admins | Admins, for any team. Managers, for their own team |
| **Organization-wide** | Everyone in your organization | Admins |
The person who created a template edits it, and admins can edit any template. Admins can also change the scope of any template, and managers can change the scope of the templates they created (see step 7).
## 3. Create a template
1. Click **Add template**.
2. Enter a **Name**.
3. Under **Scope**, pick where the template lives. **Personal (only you)** is selected by default. For **Team (select teams below)**, choose one or more teams under **Teams**.
4. Click **Create**. The template opens in the editor.
## 4. Write the template
The editor has a **Title** and a **Content** area. Content is made of two kinds of text:
* **Plain text** goes into the email exactly as you write it. Use it for greetings, a sign-off or links you always include.
* **AI blocks** hold a prompt. When you use the template on a call, Attention replaces each block with text written from that call.
To add an AI block:
1. Click on an empty line, or on a line you want to turn into a prompt.
2. Click **Insert AI**. The line turns into a gray AI block.
3. Write your prompt in the block: what the email should cover, the tone and the length.
Click **Insert AI** again to turn a block back into plain text. To keep typing plain text below a block, press **Enter** three times at the end of it.
To add a link, select some plain text, click the link icon that appears, paste the URL and press **Enter**.
When the template has at least one AI block and every block has a prompt, click **Save**.
## 5. Use a template on a call
1. Go to **Conversations → All Calls** and open a call.
2. Click the **Email** tab.
3. Under **Template**, pick a template from the list. You can search it by name.
Attention writes the email from the call and shows it under **Email Preview**. You can edit the text there before you send it.
To generate the email again, or with another template, pick a template from the list again. **Edit templates**, above the list, takes you to **Email Templates**.
## 6. Send the email
Use the buttons just above the email:
* **Create Gmail Draft** saves the email as a draft in your Gmail and opens it in a new tab. Add the recipients and a subject, then send it.
* **Share to Gmail** opens a new Gmail message in a new tab with the email in the body.
* **Copy To Clipboard** copies the email so you can paste it anywhere.
You see one of the two Gmail buttons. A new account shows **Share to Gmail**, because each person links their own Gmail. Once you link Gmail in your [personal settings](/core-features/personal-settings) and grant the permissions Attention asks for, the button reads **Create Gmail Draft**.
## 7. Change a template's scope or delete it
In **Email Templates**, open the **⋯** menu next to a template:
* **Change scope**: pick the new scope in the **Change scope** dialog and click **Save**.
* **Delete**: click **Delete** again in the **Delete email template** dialog.
Deleting a template can't be undone.
Your Gmail connection doesn't include permission to create drafts. In your [personal settings](/core-features/personal-settings), unlink Gmail, link it again and grant every permission Attention asks for. The button then reads **Create Gmail Draft**.
Need help? Contact [support@attention.com](mailto:support@attention.com).
# Get Attention into Your Calls
Source: https://docs.attention.com/core-features/get-attention-into-calls
Add Attention to a live meeting, choose which calendar events it joins, record with the desktop app, or upload a recording or transcript.
Attention can join a meeting as a notetaker, join the events on your calendar automatically, record from your computer with the desktop app, or process a recording or transcript you upload. Each call ends up in **Conversations → All Calls** with its transcript and insights.
## Add Attention to a live call
Use this for a meeting that has already started, or one that isn't on your calendar.
1. Go to **Home** in [Attention](https://app.attention.tech).
2. Click **Add Attention to a call**.
3. Paste the meeting link into **Link**. Zoom, Google Meet and Microsoft Teams links work.
4. Click **Invite Attention**.
A confirmation appears, and Attention joins the meeting.
## Choose which upcoming meetings Attention joins
**Home** lists your calendar events for the next two weeks under **Upcoming calls**. Each event has a **Join** checkbox. When it is checked, Attention joins that meeting.
1. Go to **Home** and scroll to **Upcoming calls**. Click **Show more** to see more events.
2. Hover the **?** icon next to an event to see why Attention is or isn't set to join.
3. Check **Join** to send Attention to that meeting, or uncheck it to keep Attention out.
The change applies to that one event only. Your auto-join settings stay the same.
The **Join** checkbox is disabled when the event has no meeting link. Add a Zoom, Google Meet or Microsoft Teams link to the event in your calendar to make it available.
## Remove Attention from a call
While Attention is recording, the call appears under **Ongoing Calls** at the top of **Home**, marked **LIVE**.
1. Go to **Home**.
2. Under **Ongoing Calls**, find the call.
3. Click **Remove bot from call**.
The notetaker leaves the meeting.
## Let Attention join from your calendar
Once your calendar is linked, Attention joins your meetings automatically. Your auto-join settings decide which ones, for example whether it joins when the host is outside your company. To link your calendar, see [Connect Your Calendar & Personalize Attention](/core-features/personal-settings). To set these rules, see [Set When Attention Joins Your Meetings](/core-features/auto-join-rules).
## Record with the desktop app
The Attention Desktop App records meetings directly from your computer, so no notetaker joins the call. The recording uploads to Attention and gets the same transcript, notes and CRM sync as a bot recording. See [Desktop App](/core-features/desktop-app).
## Upload a recording
Upload a recording of a meeting Attention wasn't in.
1. Go to **Conversations → All Calls**.
2. Click **Upload Recording**.
3. Choose one audio or video file, or drag it into the window. Upload files that are at least 2 minutes long.
4. Click **Upload** and wait for the upload to finish.
5. In **Recording Settings**, fill in:
* **Meeting Name**: defaults to the file name.
* **Language**: the language spoken in the call. Defaults to your primary language.
* **Start Date & Time**: when the meeting took place. Defaults to now.
6. Click **Save**.
The call appears in **All Calls**. The speaker separation, transcript and insights take a few minutes to process.
## Upload a transcript
If you only have a transcript, Attention can create the call from it.
1. Go to **Conversations → All Calls**.
2. Click **Upload Transcript**.
3. Choose one `.vtt`, `.srt` or `.txt` file of up to 5 MB, or drag it into the window.
4. Click **Continue**.
5. In **Transcript Settings**, check the **Meeting Name** and set the **Start Date & Time**.
6. Click **Import**.
The call appears in **All Calls**, and its insights are ready in a few minutes.
The upload window shows an example for each format under **Expected format**. If Attention can't read the file, the reason appears in the window so you can fix it and try again.
To import calls from your own systems, use the [Import Conversation API](/api-reference/conversation/import-conversation).
# Find Your Way Around Home
Source: https://docs.attention.com/core-features/home
See your live calls, your recent and team calls, and your upcoming meetings from the Attention Home page.
**Home** is the first page you see when you log into [Attention](https://app.attention.tech). It shows the calls Attention is recording right now, your latest calls and your team's, and the meetings on your calendar for the next two weeks.
To open it at any time, click **Home** in the sidebar.
## Add Attention to a call
Click **Add Attention to a call**, at the top right of the page, to send Attention into a meeting that has already started or isn't on your calendar. Paste the meeting link and click **Invite Attention**. See [Add Attention to a live call](/core-features/get-attention-into-calls#add-attention-to-a-live-call) for the details.
## Ongoing Calls
While Attention is recording a meeting, the call appears under **Ongoing Calls** at the top of **Home**, marked **LIVE**. Each row shows the call title and its participants.
* Click the call title to open the call and follow it while it happens.
* Click **Remove bot from call** to make the notetaker leave the meeting.
## Calls & meetings
**Calls & meetings** lists your five most recent calls. Use the tabs to switch between two lists:
* **My Calls**: the calls you took part in.
* **Team Calls**: the latest calls from your team and its sub-teams. Each row also shows who owns the call.
Calls are grouped by when they happened: **Today**, **Yesterday**, **This Week**, **Last Week** and **Earlier**. Each row shows the call title, the date and time, the duration, the linked opportunity if there is one, and the call's labels.
1. Click a call to open its recording, transcript and insights.
2. Hover a call and open its menu to rename, download, make private or archive it.
3. Click **View all** to open **Conversations → All Calls**, already filtered to the tab you are on.
## Upcoming calls
**Upcoming calls** shows the meetings on your calendar for the next two weeks, grouped by day (**Today**, **Tomorrow**, then the date). The first three appear. Click **Show more** to see more.
Each row shows the meeting title, start time and participants. Click the title to open the meeting link.
### Choose which meetings Attention joins
Each meeting has a **Join** checkbox. When it is checked, Attention joins that meeting. Hover the **?** icon next to it to see why Attention is or isn't set to join. See [Choose which upcoming meetings Attention joins](/core-features/get-attention-into-calls#choose-which-upcoming-meetings-attention-joins) for the details.
### Browse past events
Click **Browse past events**, next to the **Upcoming calls** heading, to see the calendar events that have already happened.
**Upcoming calls** lists the events from your linked calendar. To link your calendar, see [Connect Your Calendar & Personalize Attention](/core-features/personal-settings).
Need help? Reach out to [support@attention.com](mailto:support@attention.com).
# Track Team Activity in Manager Analytics
Source: https://docs.attention.com/core-features/manager-analytics
See how your managers and reps use Attention, filter by team, people and date range, and export the table to CSV.
Manager Analytics shows, person by person, how your team uses Attention: the calls they listen to, the comments and snippets they leave, the questions they ask Attention's AI, and whether their calendar and email are connected. Admins and Managers can open it.
## 1. Open **Manager Analytics**
In [Attention](https://app.attention.tech), go to **Analytics → Manager Analytics** in the sidebar.
The page has two tabs at the top. The number next to each tab is how many people it lists.
* **Manager Analytics**: one row per user with the Manager role.
* **Rep Analytics**: one row per user with the Sales Rep role.
Each row starts with the person's name and, below it, their team.
## 2. Filter the table
The filters sit at the top right of the page and apply to the tab you are on. Switching tabs resets them.
* **Select Teams**: show only the members of one or more teams.
* **Select People**: show only the people you pick, searchable by name or email.
* **Date range**: **Past Week** by default. Choose **Past Month** or **Past Year**, or click **Custom Date Range**, pick the first and last day on the calendar, and click **Confirm Selection**. To go back to the past week, click the **×** in the date field.
## 3. Read the metrics
Both tabs share most columns. Counts cover the selected date range unless the table below says otherwise.
| Column | What it measures |
| - | - |
| **Calls listened to** | The number of different calls the person opened for the first time in the date range. Each call counts once per person, however many times they reopen it. |
| **Super Agent queries** | The messages the person sent to Super Agent. |
| **Attention links used** | **Rep Analytics** only. The number of different meetings in the date range whose calendar event used an Attention consent link. |
| **Conversation Insights** | The call insights credited to the person, such as the questions they ask and the templates they run on a call's [Insights](/core-features/call-insights) tab. |
| **Comments left** | The [comments](/core-features/comments) and replies the person wrote on calls. **per call** is the average number of comments on each call they commented on. |
| **Snippets created** | The [snippets](/core-features/snippets) the person created. **per call** is the average number of snippets on each call they clipped. |
| **Linked Calendar Account** | Whether the person has a calendar connected to Attention right now. The date range doesn't change it. |
| **Linked Email Account** | Whether the person has an email account connected to Attention right now. The date range doesn't change it. |
| **Logins** | How many times the person signed in to Attention in the date range. |
### See the details behind a number
Click a number in **Calls listened to**, **Comments left** or **Snippets created** to open a side panel with the items behind it, newest first, each with its call (or snippet) title and date. For comments, the panel also shows the comment text. Click an item to open its call in a new tab.
## 4. Export to CSV
Click **Export CSV** above the table. Attention downloads the rows you are looking at, with the filters you set, as a CSV file.
The file has one row per person with their name, **Email** and **Team**, then the same columns as the table. Comments and snippets each get an extra column with their per-call average (**Average comments left**, **Average snippets created**), and the linked account columns read **Yes** or **No**.
The file name tells you what it contains: the tab, the date range and, when you filtered, how many teams or people you picked. For example, `rep-analytics_2026-09-30_to_2026-10-07_2-teams.csv`.
Need help? Contact [support@attention.com](mailto:support@attention.com).
# Connect Your Calendar & Personalize Attention
Source: https://docs.attention.com/core-features/personal-settings
Link your calendar and tailor Attention’s look, language, and auto‑join behavior.
Your personal settings hold your calendar and email connections, how your notetaker appears in calls, and your preferences. To open them, click your name at the bottom of the sidebar, then **Settings**. **Personal Settings** opens.
## 1. Link your calendar and email
Attention joins the meetings on your calendar once it is linked. Linking your email lets Attention pull in emails related to your deals. Unrelated emails aren't imported.
Scroll to the account cards:
* **Link Google accounts** has **Google Calendar** and **Gmail**.
* **Link Microsoft accounts** has **Outlook Calendar** and **Outlook**.
You can link one calendar and one email at a time. For example, you can link Google Calendar together with Outlook, but not Google Calendar together with Outlook Calendar.
1. Next to the calendar you use, click **Link account**.
2. Sign in to your Google or Microsoft account in the window that opens and grant the permissions Attention asks for.
3. When you're back in Attention, the row shows **Linked**. Hover over it to see which account is connected.
4. To link your email, click **Link account** next to **Gmail** or **Outlook** and repeat the same steps.
To switch to another account or provider, open the **⋯** menu on the linked row and click **Unlink account**, then link the new one.
Your calendar events show up on **Home**. To choose which of them Attention joins, see [Get Attention into Your Calls](/core-features/get-attention-into-calls).
## 2. Choose when Attention joins your calls
Under **Call Settings**, **Join external calls when** controls which calls with people outside your company Attention joins automatically. Click **Edit** to change it. For what each option does, see [Auto-Join Rules](/core-features/auto-join-rules).
## 3. Set your transcript language
Under **Call Settings**, pick a language in **Transcript language**. It is **English** by default. Languages marked **Post-call only** are transcribed after the call ends, not live during it.
## 4. Name your notetaker and give it a picture
Your notetaker joins calls under its own name and picture. You can change both under **Call Settings**.
* **Change bot name**: a new account starts with your first name followed by "'s AI Agent". Type a new name and click outside the field to save it.
* **Bot image**: your notetaker uses the Attention image until you upload your own. Click the **Attention bot** placeholder and choose an image. JPG works best.
## 5. Choose your email notifications
Open **Email notifications** to choose which emails Attention sends you, such as comments and mentions or shared snippets. Your admin sets the defaults, and you can turn each category on or off for yourself. To stop them all, turn on **Unsubscribe from all**. Transactional emails, such as password resets, still arrive.
## 6. Update your profile and appearance
At the top of the page, under **General**:
* Click the pencil next to your name to edit your first and last name.
* Click **Change password** to set a new password.
* In **Appearance**, pick **Light**, **Dark** or **Use system setting**.
Need help? Contact [support@attention.com](mailto:support@attention.com).
# Review Scorecards on a Call
Source: https://docs.attention.com/core-features/scorecards-on-a-call
Read a call's scorecard results on the Coaching tab, correct scores, or remove a scorecard from the call.
After a call is processed, Attention scores it with every scorecard template that applies to it and shows the results on the call's **Coaching** tab. To build or change the templates, see [Build a Scorecard Template](/workspace-setup/create-scorecards).
## 1. Open the **Coaching** tab
1. Go to **Conversations → All Calls** and open a call.
2. In the tabs next to the recording, click **Coaching**.
Each scorecard that scored the call has its own section, titled with the scorecard's name.
## 2. Read the results
The top of each scorecard gives you the overview:
* **Overall score**: the circle shows the call's score for the whole scorecard, out of the template's maximum score.
* **Field scores**: a bar for each field of the scorecard. The first four are listed by name, and any others are grouped in one row below them.
* **Summary**: the main takeaways from the call for this scorecard.
Below the overview, each field has its own row with:
* its score, on the scale set in the template;
* a description that explains the score;
* quotes from the call that support it. Click the timestamp next to a quote to jump to that moment in the recording.
## 3. Edit scores and descriptions
To correct a scorecard on a call:
1. Click the **⋯** menu next to the scorecard's name, then **Edit scores**.
2. Drag a field's slider to change its score, and edit the text below it to change its description. You can also edit the scorecard's summary.
3. Click **Save**, or **Cancel** to discard your changes.
A **Scorecards updated** message confirms the change, and the overall score updates to match the new field scores.
There's no option to re-score a call. To correct a result, edit it.
## 4. Delete a scorecard from the call
1. Click the **⋯** menu next to the scorecard's name, then **Delete scorecard from call**.
2. Click **Delete** to confirm.
The scorecard's results are removed from this call. The template, and the results it gave other calls, stay as they are.
Deleting a scorecard from a call can't be undone.
## Troubleshooting
No scorecard template applies to the call. A template scores the calls of the teams and call tags you pick on it, starting with the calls processed after you save it. Internal calls aren't scored. To check a template's teams and tags, see [Build a Scorecard Template](/workspace-setup/create-scorecards).
# Track Scorecard Results Over Time
Source: https://docs.attention.com/core-features/scoring-analytics
Follow how your team scores on a scorecard, compare people and teams, and drill down into a rep's calls.
**Scoring** shows how calls score on a scorecard over time, for your whole organization, a team or a single rep. Managers and admins find it under **Analytics** in the sidebar. Scores come from your scorecard templates; to build one, see [Build a Scorecard Template](/workspace-setup/create-scorecards). To read the results of a single call, see [Review Scorecards on a Call](/core-features/scorecards-on-a-call).
## 1. Open Scoring
In the sidebar, go to **Analytics → Scoring**.
The page opens on **Scorecard Summary**, with a chart at the top and the **All Team Members** table below it.
## 2. Pick a scorecard and a date range
At the top of the page, next to **Scorecard Summary**:
1. Click the scorecard picker and choose a scorecard. You can type in **Search scorecard...** to find it. The page opens on your first active scorecard.
2. Click the date range and choose **Past Week**, **Past Month**, **Past Year** or **Max**. To pick your own dates, click **Custom Date Range**. The page opens on **Past Week**.
The chart and the table both update to the scorecard and dates you pick.
Scorecards that were turned off keep their results. They are listed under **Inactive** at the bottom of the picker: click **Inactive** to expand the list. When you pick one, it shows an **Inactive** badge and the page shows its historical data.
## 3. Read the chart
By default, the chart shows **All Teams Average**: the overall score of every scored call in the date range, as a trend line.
To change what the chart shows, use the controls above it:
* **Scorecard Average**: the first dropdown charts the overall score. Pick one of the scorecard's fields instead to chart that criterion alone.
* **People**: pick teams or reps to compare. Each one gets its own line, and each team also has an average option named after it (for example, **Sales Average**). Use **Search...** to find someone, or **Select All**. Click **Reset** to go back to the overall view. If you manage a team, the chart opens with your primary team and its members already picked.
* **Show Calls**: shows each scored call as a dot on the chart. Hover over a dot to see the call's title and score, and click it to open the call in a new tab.
When you compare people, click a name in the legend to highlight its line, or click the **X** next to it to remove it.
To look at two views at once, click **+** next to **Show Calls**. Another chart opens with its own score, people and **Show Calls** controls. Click the trash icon on a chart to remove it.
## 4. Compare reps in the table
The **All Team Members** table has one row per rep, with their **Overall Score** and a column for each field of the scorecard. Each cell is colored by how high the score is on the scorecard's scale, and the **Total** row at the top averages each column.
* Click a column header to sort by it. Click again to reverse the order.
* Use the **People** dropdown above the table to show only some teams or reps. Click **Reset** to show everyone again. If you manage a team, the table opens with your primary team picked.
## 5. Drill down into a rep's calls
Click a rep's row to open their panel. It shows:
* the rep's trend chart for the same scorecard and dates, with its own score dropdown and **Show Calls** button;
* the **Conversations** table: each of the rep's scored calls, with the call's date, its **Overall Score** and its score on each field.
Click a call's title to open it in a new tab, on the call page where you can [review its scorecard](/core-features/scorecards-on-a-call).
## Troubleshooting
Your organization has no scorecard template yet. Create one in [Build a Scorecard Template](/workspace-setup/create-scorecards). A template scores the calls processed after you save it.
The dropdown lists the teams the scorecard applies to. To add a team, edit the template's **Teams** in [Build a Scorecard Template](/workspace-setup/create-scorecards).
# Share a Call
Source: https://docs.attention.com/core-features/share-a-call
Send a link to a full call recording and control who can see the call.
Share the full recording of a call with a link. Anyone with the link can watch it, including people outside your company. To share only part of a call, create a snippet instead (see [Share Snippets from a Call](/core-features/snippets)).
## 1. Open the call
Go to **Conversations → All Calls** and open the call you want to share.
## 2. Click **Share**
Click **Share** at the top right of the call. The **Share full call** dialog opens.
## 3. Choose the sharing settings
Under **Snippet sharing settings**:
* **Notify me when link is viewed** — Off by default. Turn it on to get an email each time someone outside your organization opens the link.
* **Shareable with public** — On by default, so anyone with the link can watch. Turn it off to limit the link to people signed in to your Attention organization.
## 4. Create and copy the link
1. Click **Generate Shareable Link**. The link appears at the bottom of the dialog.
2. Click **Copy shareable link**. The link is now on your clipboard, and the button shows **Shareable link copied!**
Paste the link into an email, a chat or your CRM.
The link is also saved in the call's **Snippets** tab and in your library, so you can find it again later.
To share a part of the call from the same dialog, click **Create a snippet**.
## 5. Turn off a link
A shared link keeps working until you delete it.
1. Open the call and click the **Snippets** tab.
2. Find the full-call link, click **⋯**, then **Delete snippet**.
3. Click **Delete** to confirm.
Once deleted, the link stops working for everyone you shared it with.
## Make a call private
A call is visible to your team by default. Making it private hides it from your teammates. Links you've already shared keep working.
1. Open the call and click **⋯** at the top right, next to **Share**.
2. Click **Make Call Private**, then **Make Private**.
To show the call to your team again, click **⋯ → Make Call Public**, then **Make Public**.
## What the recipient sees
When someone opens the link:
* **You and members of the call's team**, when signed in, go straight to the call in Attention.
* **Everyone else** sees the shared call page: the recording and the transcript, with the call title, the owner's name and a **Share snippet** button that copies the link.
If you turned on **Notify me when link is viewed**, people outside your organization first see a **Before you watch...** screen. They enter their email and click **Continue to Snippet**, and Attention emails you that they viewed it.
### Use cases
* **Send the recording after a call** to prospects or customers who couldn't attend.
* **Know when a prospect watches** with view notifications, and time your follow-up.
* **Keep sensitive calls to yourself** by making them private.
Need help? Contact [support@attention.com](mailto:support@attention.com).
# Organize Snippets in the Library
Source: https://docs.attention.com/core-features/snippet-library
Find, organize and manage your saved snippets in folders, privately or shared with your company.
The snippet library is where saved snippets live. Use it to keep your own clips in order and to build a shared collection for your company, such as *Great Demos* or *Objection Handling*.
To create a snippet from a call, see [Share Snippets from a Call](/core-features/snippets).
## 1. Open the library
Go to **Conversations → Snippets**.
The library opens with the folder panel on the left and the snippets of the selected folder on the right. Each snippet shows its title, the part of the call it covers, who created it and when, plus any notes.
## 2. Switch between Mine and Company
Use the toggle at the top of the folder panel:
* **Mine** — your personal library. Only you see these snippets, and the page shows a **Private** badge.
* **Company** — the library shared with everyone in your organization. The page shows a **Shared** badge.
Each library starts with a top-level folder called **All items**. Click it to open it, and click the arrow next to any folder to show its sub-folders.
## 3. Create folders and sub-folders
To create a folder inside the folder you have open:
1. Click **New folder**.
2. Enter a **Folder Name**.
3. Click **Create**.
To add a folder inside a specific folder, hover over it, click the **…** menu and choose **Add sub-folder**.
The new folder opens right away.
## 4. Share a folder link
In the **Company** library, hover over a folder, click the **…** menu and choose **Share**. The link to that folder is now on your clipboard. Anyone in your organization who opens it lands in that folder.
## 5. Manage a snippet
Click the **…** menu on the right of a snippet to see its actions.
### Rename
Choose **Rename**, edit the **Snippet Title** and click **Save changes**.
### Download
Choose **Download**. The video file opens in a new tab so you can save it. **Download** becomes available once the snippet has finished processing.
### Share
Choose **Share**. The snippet link is now on your clipboard.
### Move to folder
1. Choose **Move to folder**.
2. Pick the destination folder. A snippet moves within its own library: from one **Mine** folder to another, or from one **Company** folder to another.
3. Click **Move**.
### Duplicate
1. Choose **Duplicate**.
2. Pick a folder under **My Library** or, if you can add to the Company library, under **Company Library**.
3. Click **Copy**.
The copy appears in the folder you picked, and the original stays where it was. Duplicating is how you add a Company snippet to your own library, or a snippet of yours to the Company library.
### Delete
Choose **Delete**, then click **Delete** to confirm.
Once a snippet is deleted, people you shared it with may no longer be able to watch it.
## 6. Delete a folder
Hover over the folder, click the **…** menu, choose **Delete** and confirm with **Delete**.
Deleting a folder also deletes every snippet and sub-folder inside it.
## Who can do what
| Action | Mine | Company |
| - | - | - |
| View snippets | You | Everyone in your organization |
| Rename, download, share or delete a snippet | You | Everyone in your organization |
| Create a folder or sub-folder | You | Admins and Managers |
| Share a folder link | — | Everyone in your organization |
| Delete a folder | You | Everyone in your organization |
| Move a snippet | You | Admins and Managers |
| Duplicate a snippet into this library | You | Admins and Managers |
### Use cases
* **Build a team playbook** — collect your best discovery questions or demo moments in a Company folder and share the folder link with new hires.
* **Keep personal references** — save clips you want to revisit in **Mine** without adding them to the shared library.
* **Promote a great clip** — duplicate a snippet from your library into the right Company folder.
# Share Snippets from a Call
Source: https://docs.attention.com/core-features/snippets
Create short, shareable clips from any conversation and track engagement.
A snippet is a clip of a call that you can share with a link. Use it to send the moment that matters instead of the full recording.
## 1. Open the **Snippets** tab
1. Go to **Conversations → All Calls** and open the call.
2. In the tab panel on the right, click **Snippets**. It lists the snippets already made from this call. For a tour of the call page, see [Navigate a Call Page](/core-features/call-page).
3. Click **Add Snippet**. The **Create new snippet** dialog opens.
You can also open the dialog from the video: click the scissors icon (**Share snippet**) in the player controls, or press **S** while you watch.
## 2. Choose the time range
The range starts around the point you're at in the video. To change it:
* Drag the handles on the timeline below the video.
* Type the start and end times under **Snippet range**.
* Click a speaker's segment on the speaker tracks to select just that segment.
* Click **Select entire call** to use the whole recording.
Use the play button below the timeline to check the selection before you save.
## 3. Add a title and a comment
Both are optional.
* **Snippet title** — the name people see when they open the snippet.
* **Add a comment** — context for whoever watches it, up to 10,000 characters. A counter below the box shows how many you've used.
## 4. Pick a folder
Under **Save snippet in**, choose **My Library**, **Company Library** or one of their folders. If you don't pick one, the snippet goes to **My Library**.
## 5. Set the sharing settings
Under **Snippet sharing settings**:
* **Shareable with public** — On by default, so anyone with the link can watch. Turn it off to limit the snippet to people signed in to your Attention organization.
* **Notify me when snippet is viewed** — Off by default. Turn it on to get an email when someone opens the snippet.
## 6. Click **Save snippet**
The snippet link is now on your clipboard. The dialog shows **Snippet saved and ready to share! 🎉** with a preview of the clip.
To copy the link again, click **Copy link to snippet**. Paste it into an email, a chat or your CRM.
The new snippet appears in the call's **Snippets** tab and in the folder you picked. To find and organize your snippets later, see [Snippet Library](/core-features/snippet-library).
## Share the full call instead
To share the whole recording, click **Share full call** at the top of the **Create new snippet** dialog. Set the sharing settings, click **Generate Shareable Link**, then **Copy shareable link**. See [Share a Call](/core-features/share-a-call) for the details.
### Use cases
* **Send follow‑up highlights** instead of a full‑length recording.
* **Build a best‑practice collection** in the Company Library for your team.
* **Track prospect engagement** with view notifications and time your next touch.
Need help? Contact [support@attention.com](mailto:support@attention.com).
# Import Calls from Aircall
Source: https://docs.attention.com/integrations/aircall-integration
Import your Aircall phone calls into Attention as they end.
Connect Aircall to import your phone calls as they end. Imported calls appear in **Conversations → All Calls**.
## Open Integrations
1. In [Attention](https://app.attention.tech), click your name at the bottom of the sidebar, then **Settings**.
2. In the settings menu, click **Integrations**.
3. Click **Add integration**.
The **New Integration** dialog lists the tools you haven't connected yet under **Other Integrations**.
## Connect Aircall
1. In the **New Integration** dialog, click **Aircall**.
2. Aircall opens in a new window. Sign in and approve the connection.
When the window closes, Aircall appears under **Others** on the Integrations page.
## What gets imported
* Each recorded Aircall call that ends after you connect. Calls from before you connected aren't imported.
* Attention transcribes the recording and analyzes the call like any other call.
* Each call goes to the Attention user whose email matches the Aircall user on the call.
Calls shorter than the **Minimum imported call duration** are skipped. It is 120 seconds by default. You can change it in **Settings → Organization Settings**, under **Call settings**.
## Disconnect Aircall
1. On the Integrations page, open the **⋯** menu on the **Aircall** row and click **Delete**.
2. In the **Aircall Account Removal** dialog, click **Remove**.
Attention stops importing calls from Aircall. Calls already imported stay in Attention.
Need help? Contact [support@attention.com](mailto:support@attention.com) or your Attention point of contact.
# Import Calls from Gong
Source: https://docs.attention.com/integrations/gong-integration
Bring your past Gong calls into Attention and keep importing new ones.
Connect Gong to bring in your past calls and keep importing new ones. Imported calls appear in **Conversations → All Calls**.
To add a single recording or transcript by hand, see [Upload a recording](/core-features/get-attention-into-calls#upload-a-recording).
## Open Integrations
1. In [Attention](https://app.attention.tech), click your name at the bottom of the sidebar, then **Settings**.
2. In the settings menu, click **Integrations**.
3. Click **Add integration**.
The **New Integration** dialog lists the tools you haven't connected yet under **Other Integrations**.
## Connect Gong
You need a Gong access key and its secret. A Gong admin creates them in Gong's API settings.
1. In the **New Integration** dialog, click **Gong**.
2. In **Connect to Gong**, enter the **Access Key** and the **Access Key Secret**.
3. Under **Import calls from**, choose **Past Week**, **Past Month**, **Past Year** or **Custom Date Range**.
4. To import only some people's calls, select **Import calls for specific users** and add their email addresses. Press Enter after each one.
5. Click **Connect**.
Gong now appears under **Others** on the Integrations page, marked **Syncing in progress** while your past calls come in. A large import can take a while; calls show up in **All Calls** as they finish processing.
## What gets imported
* Every Gong call in the date range you chose, with its video (or its audio when there is no video) and Gong's transcript.
* Each call goes to the Attention user whose email matches the call's owner in Gong.
* After the first import, Attention keeps importing new Gong calls, with the same email filter.
* New calls get scorecards, labels and CRM field updates like any other call. Past calls from your date range come in without them.
Calls shorter than the **Minimum imported call duration** are skipped. It is 120 seconds by default. You can change it in **Settings → Organization Settings**, under **Call settings**.
## Disconnect Gong
1. On the Integrations page, open the **⋯** menu on the **Gong** row and click **Delete**.
2. In the **Gong Account Removal** dialog, click **Remove**.
Attention stops importing calls from Gong. Calls already imported stay in Attention.
Need help? Contact [support@attention.com](mailto:support@attention.com) or your Attention point of contact.
# Import Meetings from Granola
Source: https://docs.attention.com/integrations/granola-integration
Bring your Granola meetings into Attention and keep importing new ones.
Connect Granola to bring in your past meetings and keep importing new ones. Imported meetings appear in **Conversations → All Calls**.
To add a single recording or transcript by hand, see [Upload a recording](/core-features/get-attention-into-calls#upload-a-recording).
## Open Integrations
1. In [Attention](https://app.attention.tech), click your name at the bottom of the sidebar, then **Settings**.
2. In the settings menu, click **Integrations**.
3. Click **Add integration**.
The **New Integration** dialog lists the tools you haven't connected yet under **Other Integrations**.
## Connect Granola
You need a Granola API key, which you create in Granola.
1. In the **New Integration** dialog, click **Granola**.
2. In **Connect to Granola**, enter your **API Key**.
3. Under **Import meetings from**, choose **Past Week**, **Past Month**, **Past Year** or **Custom Date Range**.
4. To import only some people's meetings, select **Import meetings for specific users** and add their email addresses. Press Enter after each one.
5. To import a single folder, select **Only import meetings from a specific folder**, then pick the folder in **Select a folder**. The folder list loads from the API key you entered.
6. Click **Connect**.
Granola now appears under **Others** on the Integrations page, marked **Syncing in progress** while your meetings come in. They show up in **All Calls** as they finish processing.
## What gets imported
* Every Granola meeting in the date range you chose, with its title, attendees and transcript. Granola doesn't share audio or video, so imported meetings have no recording.
* Each meeting goes to the Attention user whose email matches the meeting's owner in Granola.
* After the first import, Attention keeps importing new Granola meetings, with the same email and folder filters.
* New meetings get scorecards, labels and CRM field updates like any other call. Past meetings from your date range come in without them.
## Disconnect Granola
1. On the Integrations page, open the **⋯** menu on the **Granola** row and click **Delete**.
2. In the **Granola Account Removal** dialog, click **Remove**.
Attention stops importing meetings from Granola. Meetings already imported stay in Attention.
Need help? Contact [support@attention.com](mailto:support@attention.com) or your Attention point of contact.
# Authentication
Source: https://docs.attention.com/mcp/authentication
How clients authenticate to the Attention MCP server — OAuth for end users, API keys for programmatic access, plus scopes and rate limits.
The Attention MCP server is exposed at:
```
https://api.attention.tech/mcp
```
It speaks **MCP over HTTP Streamable transport** and accepts two authentication methods on the `Authorization` header: **OAuth 2.1 with Dynamic Client Registration (DCR)** for human users connecting from MCP clients, and **API key JWTs** for programmatic integrations. Pick whichever matches your use case.
Whichever method you use, the server enforces your existing Attention permissions. The MCP layer cannot grant access beyond what your user or API key already has.
## For Claude.ai users (OAuth)
When you add the Attention connector to Claude (or any MCP-compatible client that supports DCR), the client registers itself with Attention and walks you through an OAuth consent flow.
In Claude.ai go to **Settings → Connectors → Add custom connector** and enter `https://api.attention.tech/mcp`. Skip this step if Attention is already in the connector directory.
The client redirects you to Attention's login page. Sign in with Google, SSO, or email/password — whichever method your org uses. After login, you'll see a consent screen showing the scopes Claude is requesting (`mcp:read`, `mcp:write`).
Approve the consent screen. The client receives an OAuth access token and starts using it on every MCP request.
The OAuth token is bound to **your** Attention user. Every tool call runs under your identity — your roles, your team memberships, your data scope. Admin-only tools (e.g. `create_team`, `delete_user`) only succeed if your account has the admin role.
### What the assistant can access
The MCP server enforces the same authorization rules as the Attention app:
* **Calls and transcripts** — only calls your account can see in the app are returned by `search_calls` / `get_call_details`.
* **Teams, users, scorecards, labels, etc.** — read access scoped to your organization; some tools narrow further based on team membership.
* **Write operations** — require the `mcp:write` scope plus, for most tools, the admin role.
Org-wide settings, other users' personal data, and other organizations are never accessible.
### Revoking access
Go to **Settings → Connectors** in Claude.ai (or your MCP client's equivalent screen).
Find the Attention connector and click **Disconnect**. Outstanding access and refresh tokens are immediately invalidated server-side.
## For developers (API keys and Anthropic Messages API)
If you're building an integration that calls the MCP server directly — from a backend service, a CI pipeline, or the Anthropic Messages API — use an **API key** instead of OAuth.
### Create an API key
You can create keys from the Attention app under **Settings → API Keys**, or programmatically via the [`create_api_key`](/mcp/tools/api-keys#create_api_key) MCP tool itself once you have any other admin-authenticated session:
```text theme={null}
Tool: create_api_key
{
"name": "CI/CD Pipeline",
"org_level": true,
"expiry_hours": 8760
}
```
The token is shown **only once** at creation time. Store it in a secrets manager — Attention cannot recover it later.
Two scopes:
* **Org-level keys** (`org_level: true`) — full org access, no user binding. Best for backend integrations.
* **User-level keys** (`org_level: false`) — scoped to the authenticated user, with that user's roles and team memberships.
### Use an API key
Send the key as a Bearer token on the `Authorization` header:
```bash Curl theme={null}
curl https://api.attention.tech/mcp \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
```
```python Python theme={null}
import os
import httpx
api_key = os.environ["ATTENTION_API_KEY"]
response = httpx.post(
"https://api.attention.tech/mcp",
headers={"Authorization": f"Bearer {api_key}"},
json={"jsonrpc": "2.0", "id": 1, "method": "tools/list"},
)
```
```javascript Node.js theme={null}
const apiKey = process.env.ATTENTION_API_KEY;
const response = await fetch("https://api.attention.tech/mcp", {
method: "POST",
headers: {
Authorization: `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "tools/list" }),
});
```
The token is a JWT carrying an `api-version: apiv2` claim. The server detects this claim with a zero-cost base64 peek before validating, so API key requests do not pay the OAuth-validation overhead.
### Use the MCP server from the Anthropic Messages API
To let Claude call Attention tools inside an Anthropic Messages API request, declare the MCP server in the `mcp_servers` array. The `authorization_token` is your Attention API key (or a user OAuth access token):
```json theme={null}
{
"model": "claude-opus-4-7",
"max_tokens": 1024,
"mcp_servers": [
{
"type": "url",
"url": "https://api.attention.tech/mcp",
"name": "attention",
"authorization_token": "YOUR_ATTENTION_TOKEN"
}
],
"messages": [
{ "role": "user", "content": "Summarize my last 10 calls with Acme." }
]
}
```
## Scopes
The server defines two scopes. OAuth tokens carry the scopes granted at consent time; API keys have implicit access to both scopes within their organization.
| Scope | Required for |
| - | - |
| `mcp:read` | Every read tool — `get_me`, `search_calls`, `list_*`, `get_*`, `ask_attention`, etc. |
| `mcp:write` | Every mutating tool — `create_*`, `update_*`, `delete_*`, `archive_*`, snippet creation, etc. |
Many `mcp:write` tools additionally require the **admin role** on your user — see each tool's reference page for the exact requirement. Tools that explicitly require user-level authentication (not org-level keys) are flagged on their reference pages and include `invite_user`, `update_invitation`, `delete_invitation`, `delete_user`, and the super agent tools. Conversely, `get_usage_report` requires an **org-level API key** and rejects OAuth and user-level keys.
If a tool call fails due to insufficient scope or role, the response contains a structured error such as `insufficient_scope`, `admin_required`, or `user_required`.
## Rate limits
The MCP server applies a multi-window rate limiter on every authenticated request. Limits are tracked per identity in this priority order:
1. `user-{user_id}` — for OAuth tokens and user-level API keys.
2. `org-{org_id}` — for org-level API keys.
3. `ip-{client_ip}` — fallback if neither user nor org could be resolved.
Three windows are enforced simultaneously: per-second, per-hour, and per-day. Default values come from server configuration; orgs can configure custom limits via Attention support.
When a limit is exceeded the server returns `429 Too Many Requests` with:
* A `Retry-After` header (seconds until the relevant window resets).
* A JSON body of the form `{"error":"rate limit exceeded","retry_after":"N s","limit_type":"second|hour|day"}`.
If the rate limiter itself is unavailable (e.g. Redis outage), the server **fails open** — requests are allowed through rather than blocked. Availability of the MCP server is prioritized over precise enforcement during infrastructure incidents.
## Error responses
Authentication failures return `401 Unauthorized` with a `WWW-Authenticate: Bearer resource_metadata="..."` header pointing to the well-known resource metadata document. The JSON body distinguishes:
* `invalid_token` with description `"The access token has expired..."` — use your refresh token (OAuth) or rotate the API key.
* `invalid_token` with description `"The access token is invalid."` — re-authenticate from scratch.
* `unauthorized` with description `"missing or invalid Authorization header"` — no Bearer token was sent.
Tool-level errors (insufficient scope, missing fields, validation) return `200 OK` with a structured `CallToolResult` containing an error message — they are application-level errors, not transport errors.
# Example Prompts
Source: https://docs.attention.com/mcp/examples
Things you can ask Claude (or any MCP-compatible LLM) once the Attention connector is enabled.
These examples are grouped by what the assistant will do under the hood. They are starting points — feel free to combine, narrow, or extend them.
## Search & analyze
*"What were the main objections prospects raised in our calls this week? Highlight any patterns by deal stage."*
*"Summarize all conversations with Datadog and tell me where the deal stands."*
*"Find all calls from the last 60 days where prospects mentioned Gong and summarize what they said about them."*
*"Search the transcripts of the past quarter for the phrase 'security review' and pull the relevant quotes."*
## Coaching & scorecards
*"Compare how our top reps handle pricing objections vs. the rest of the team this month."*
*"Show me all calls from the SMB team last Friday and highlight deals at risk."*
*"Pull up scorecard results for Sara's calls this month and identify her top three improvement areas."*
*"For each rep on the AE team, give me one specific moment from a recent call I should coach on."*
## Snippets
*"Create a clip from my call with Acme between 12:30 and 14:00 where they discussed budget timeline. Title it 'Acme — Budget Reveal'."*
*"From this week's discovery calls, pull two 60-second moments that show great pain identification and add them to the Onboarding library folder."*
## Workspace administration
*"Invite [alex@example.com](mailto:alex@example.com) as a Sales Rep on the SMB team with a recording seat."*
*"Move the 'BDR North' team under 'BDR' and add Sara as their primary team member."*
*"Create a Discovery scorecard with three criteria — Pain Identification, Stakeholder Mapping, and Next Steps — on a 1–5 scale, applied to the AE team."*
*"Add a forecast column called 'Stretch' between 'Best Case' and 'Pipeline' that contributes to the total."*
## Intelligence & CRM
*"Add a CRM prompt called 'Champion' to the Discovery collection that extracts the prospect's internal champion."*
*"We just added a new custom field in Salesforce. Sync the latest field definitions and add it to our Opportunity integration."*
*"Start the OAuth flow to connect our HubSpot account."*
## Super agent (open-ended)
The super agent is best for questions that span multiple data sources or that benefit from autonomous exploration. The MCP client should poll for the response if it returns `processing`.
*"Use the super agent to give me a complete picture of the Acme account: every call, deal stage history, key stakeholders, and risks."*
*"Ask the super agent to identify the five deals in our pipeline most likely to slip this quarter and explain why."*
# Attention MCP Server
Source: https://docs.attention.com/mcp/overview
Connect Claude and other LLM clients to your Attention workspace. Search calls, analyze deals, configure scorecards, manage teams, and chat with the Attention super agent — all through natural language.
## Overview
The Attention MCP Server connects AI assistants — Claude, ChatGPT, IDE agents — directly to your organization's conversation intelligence data and workspace configuration. Attention captures, transcribes, and analyzes every sales and customer conversation, syncing structured insights to your CRM. Through the MCP server, an LLM can read those calls and act on your workspace exactly as a logged-in user would.
Find calls by date, rep, team, keyword, opportunity, CRM field, or transcript content across your entire org.
Run natural-language analysis across up to 25 calls in a single request, or chat with the autonomous Attention super agent.
Review and configure scorecards, criteria, weights, ranges, and team assignments.
Manage teams, users, roles, invitations, labels, forecasting, CRM integrations, and intelligence collections.
Build the workflow behind an Attention agent — trigger, steps, loops, routers and code — then validate and test it.
## Quickstart
Get connected in under a minute from any MCP-compatible client.
In Claude.ai, go to **Settings → Connectors**. In Claude Desktop, **Settings → Connectors**. Other MCP-compatible clients have similar entry points.
Search for **Attention** in the connector directory, or click **Add custom connector** and paste the server URL:
```
https://api.attention.tech/mcp
```
Click **Connect** and complete the OAuth flow. The MCP server enforces the same permissions as your Attention account — if you can see a call in the app, the assistant can read it through the connector. Anything you cannot see is invisible to the assistant.
Try: *"What were the main objections in our sales calls this week?"* or *"Create a Discovery scorecard with three criteria and assign it to the SMB team."*
**For Team & Enterprise plans:** an organization Owner must add the connector in Organization Settings → Connectors before individual users can connect.
For the developer setup (HTTP endpoint, API keys, scopes, rate limits), see [Authentication](/mcp/authentication).
## What's available
The server exposes **81 tools** across 16 functional groups. Read tools require the `mcp:read` scope; write tools require `mcp:write` and many also require admin role.
| Group | Tools | Highlights |
| - | - | - |
| [Identity](/mcp/tools/identity) | 1 | `get_me` |
| [Calls](/mcp/tools/calls) | 2 | `search_calls`, `get_call_details` |
| [AI Analysis](/mcp/tools/ai-analysis) | 1 | `ask_attention` |
| [Snippets](/mcp/tools/snippets) | 1 | `create_snippet` |
| [Teams](/mcp/tools/teams) | 9 | List, create, archive, manage members |
| [Users & Roles](/mcp/tools/users-roles) | 11 | List reps, manage roles, invitations, lifecycle |
| [Organization](/mcp/tools/organization) | 2 | Org overview and settings |
| [Scorecards](/mcp/tools/scorecards) | 9 | Templates, items, ranges, ordering |
| [Labels](/mcp/tools/labels) | 5 | Categories, options, conversation labels |
| [Forecasting](/mcp/tools/forecasting) | 3 | Categories and quotas |
| [CRM](/mcp/tools/crm) | 6 | Integrations, field sync, OAuth connections |
| [Intelligence](/mcp/tools/intelligence) | 8 | CRM prompt collections and items |
| [API Keys](/mcp/tools/api-keys) | 3 | Programmatic access management |
| [Super Agent](/mcp/tools/super-agent) | 6 | Autonomous chat sessions |
| [Agent Builder](/mcp/tools/agent-builder) | 13 | Build, validate and test agent flows |
| [Reports](/mcp/tools/reports) | 1 | Per-user activity and usage metrics |
| **Total** | **81** | |
For a flat, searchable list of every tool with its scope and a one-line description, see the [Tools Reference](/mcp/tools-overview).
## Example prompts
A few of the things you can ask Claude (or any MCP-compatible LLM) once the connector is enabled. See [more examples](/mcp/examples).
*"What were the main objections prospects raised in calls with Datadog this quarter?"*
*"Compare how our top reps handle pricing objections vs. the rest of the team this month."*
*"Create a Discovery scorecard with three criteria — Pain Identification, Stakeholder Mapping, and Next Steps — on a 1–5 scale, applied to the AE team."*
*"Invite [alex@example.com](mailto:alex@example.com) as a Sales Rep on the SMB team and add them to the Pricing Discovery intelligence collection."*
## Version history
The MCP server is versioned independently from the Attention API. Current version: **v1.7.0**. Each release is additive — no tool has been removed since v1.0.0.
Reports: `get_usage_report` returns per-user activity metrics (coaching sessions, calls viewed, comments left, snippets created, AI insights ran, Super Agent web/Slack queries) for a date range. Requires an org-level API key.
User management (`manage_user_role`, `delete_user`, `reactivate_user`), conversation labels (`change_conversation_labels`), CRM write tools (`create_crm_integration`, `update_crm_integration`, `sync_crm_fields`, `delete_crm_account`), org settings (`update_org_settings`), scorecard configuration (`update_scorecard_item_order`, `update_scorecard_ranges`), and OAuth connection tooling (`connect_integration` for Salesforce, HubSpot, Microsoft).
Team write tools (`create_team`, `update_team`, `archive_team`, `add_team_member`, `remove_team_member`, `change_team_parent`), user write tools (`update_user`, `update_user_teams`), intelligence collections and items (8 tools), and API key management (`list_api_keys`, `create_api_key`, `delete_api_key`).
Transcript search via Algolia. Adds the `transcript_search` parameter to `search_calls` for full-text matching inside call transcripts.
Invitation tools: `invite_user`, `update_invitation`, `delete_invitation`, `list_invitations`.
Org configuration tools — labels (`list_labels`, `create_label`, `update_label`, `delete_label`), scorecard write (`create_scorecard`, `update_scorecard`, scorecard item CRUD), forecast (`get_forecast_config`, `create_forecast_category`, `update_forecast_category`), and CRM read (`get_crm_integrations`).
Super agent tools: `send_super_agent_message`, `list_super_agent_sessions`, `get_super_agent_session_history`, `delete_super_agent_session` (and later `cancel_super_agent_processing` and `rename_super_agent_session`).
Initial release: identity (`get_me`), calls (`search_calls`, `get_call_details`), AI analysis (`ask_attention`), snippets (`create_snippet`), teams (`list_teams`, `get_team`, `get_team_members`), users (`list_reps`), roles (`list_roles`), scorecards read (`get_scorecards`, `get_scorecard_details`), and org overview (`get_org_overview`).
## Frequently asked questions
The Attention connector is available on Claude Pro, Max, Team, and Enterprise plans. The MCP server itself is open to any MCP-compatible client.
Yes. Add the connector via **Settings → Connectors** in Claude Desktop. Remote MCP servers added in claude.ai are also automatically available in Claude Code.
The MCP server queries the Attention API in real time. Calls appear as soon as they are processed — typically within minutes of the call ending.
No. Every tool runs under your authenticated identity. Attention's permission model is enforced server-side; if your account cannot see a call, scorecard, team, or user in the app, the MCP server will not return it.
Yes. Tools like `delete_user`, `archive_team`, `delete_label`, `delete_scorecard_item`, `delete_intelligence_collection`, `delete_intelligence_item`, `delete_api_key`, `delete_crm_account`, and `delete_super_agent_session` mutate or remove data. They require admin access and the `mcp:write` scope, and Claude will surface them with a destructive warning before invoking. Each destructive tool is flagged on its reference page.
Go to **Settings → Connectors** in Claude.ai (or your client of choice) and click **Disconnect** on the Attention connector. For API keys created via `create_api_key`, use `delete_api_key` or revoke from **Settings → API Keys** in the Attention app.
# Tools Reference
Source: https://docs.attention.com/mcp/tools-overview
Flat, searchable index of every tool exposed by the Attention MCP server with its scope and a one-line description.
The Attention MCP server (v1.7.0) exposes **81 tools** across 16 functional groups. The table below lists every tool with its scope and a one-line description; click the tool name to jump to its full reference.
For a grouped overview, see the [Overview](/mcp/overview#whats-available).
## Scope legend
| Marker | Meaning |
| - | - |
| `mcp:read` | Read-only tool. Available to OAuth tokens with the read scope and to any API key. |
| `mcp:write` | Mutating tool. Requires the write scope. |
| **Admin** | Additionally requires the admin role on the authenticated user. |
| **User-level** | Cannot be called with org-level API keys; needs OAuth or a user-level API key. |
| **Org-level** | Requires an org-level API key; OAuth tokens and user-level API keys are not allowed. |
| **Destructive** | Permanently removes data or cannot be reversed without manual intervention. |
| **Builder** | Requires the admin or Product role, and Agent Builder enabled for the organization. |
## All tools
### Identity
| Tool | Scope | Description |
| - | - | - |
| [`get_me`](/mcp/tools/identity#get_me) | `mcp:read` | Get the authenticated user, org, and roles. |
### Calls
| Tool | Scope | Description |
| - | - | - |
| [`search_calls`](/mcp/tools/calls#search_calls) | `mcp:read` | Search calls by date, rep, team, keyword, opportunity, CRM field, transcript. |
| [`get_call_details`](/mcp/tools/calls#get_call_details) | `mcp:read` | Get a single call's transcript, scorecard results, and insights. |
### AI Analysis
| Tool | Scope | Description |
| - | - | - |
| [`ask_attention`](/mcp/tools/ai-analysis#ask_attention) | `mcp:read` | Run AI analysis across up to 25 calls or all calls in a deal. |
### Snippets
| Tool | Scope | Description |
| - | - | - |
| [`create_snippet`](/mcp/tools/snippets#create_snippet) | `mcp:write` | Create a shareable clip from a call recording. |
### Teams
| Tool | Scope | Description |
| - | - | - |
| [`list_teams`](/mcp/tools/teams#list_teams) | `mcp:read` | List all teams and the team hierarchy. |
| [`get_team`](/mcp/tools/teams#get_team) | `mcp:read` | Get a single team's details and sub-teams. |
| [`get_team_members`](/mcp/tools/teams#get_team_members) | `mcp:read` | List the members of a team with their roles. |
| [`create_team`](/mcp/tools/teams#create_team) | `mcp:write`, **Admin** | Create a new team. |
| [`update_team`](/mcp/tools/teams#update_team) | `mcp:write`, **Admin** | Rename a team or change its parent. |
| [`archive_team`](/mcp/tools/teams#archive_team) | `mcp:write`, **Admin** | Archive or unarchive a team (reversible). |
| [`change_team_parent`](/mcp/tools/teams#change_team_parent) | `mcp:write`, **Admin** | Move a team under a new parent or make it top-level. |
| [`add_team_member`](/mcp/tools/teams#add_team_member) | `mcp:write`, **Admin** | Add a user to a team. |
| [`remove_team_member`](/mcp/tools/teams#remove_team_member) | `mcp:write`, **Admin** | Remove a user from a team. |
### Users & Roles
| Tool | Scope | Description |
| - | - | - |
| [`list_reps`](/mcp/tools/users-roles#list_reps) | `mcp:read` | List users in the org with optional filters. |
| [`list_roles`](/mcp/tools/users-roles#list_roles) | `mcp:read` | List org roles with their type. |
| [`list_invitations`](/mcp/tools/users-roles#list_invitations) | `mcp:read` | List pending invitations. |
| [`update_user`](/mcp/tools/users-roles#update_user) | `mcp:write`, **Admin** | Update a user's profile, role, or seat type. |
| [`update_user_teams`](/mcp/tools/users-roles#update_user_teams) | `mcp:write`, **Admin** | Add/remove team memberships in one call. |
| [`manage_user_role`](/mcp/tools/users-roles#manage_user_role) | `mcp:write`, **Admin** | Assign or remove a role for a user. |
| [`delete_user`](/mcp/tools/users-roles#delete_user) | `mcp:write`, **Admin**, **User-level** | Soft-delete (deactivate) a user. Reversible via `reactivate_user`. |
| [`reactivate_user`](/mcp/tools/users-roles#reactivate_user) | `mcp:write`, **Admin** | Reactivate a previously deactivated user. |
| [`invite_user`](/mcp/tools/users-roles#invite_user) | `mcp:write`, **Admin**, **User-level** | Send an email invitation to a new user. |
| [`update_invitation`](/mcp/tools/users-roles#update_invitation) | `mcp:write`, **Admin**, **User-level** | Update a pending invitation's seat type. |
| [`delete_invitation`](/mcp/tools/users-roles#delete_invitation) | `mcp:write`, **Admin**, **User-level**, **Destructive** | Delete a pending invitation. |
### Organization
| Tool | Scope | Description |
| - | - | - |
| [`get_org_overview`](/mcp/tools/organization#get_org_overview) | `mcp:read` | Get a summary of roles and team structure. |
| [`update_org_settings`](/mcp/tools/organization#update_org_settings) | `mcp:write`, **Admin** | Update org-wide settings (call joining, bot image). |
### Scorecards
| Tool | Scope | Description |
| - | - | - |
| [`get_scorecards`](/mcp/tools/scorecards#get_scorecards) | `mcp:read` | List all scorecards. |
| [`get_scorecard_details`](/mcp/tools/scorecards#get_scorecard_details) | `mcp:read` | Get a scorecard's full details and items. |
| [`create_scorecard`](/mcp/tools/scorecards#create_scorecard) | `mcp:write`, **Admin** | Create a new scorecard. |
| [`update_scorecard`](/mcp/tools/scorecards#update_scorecard) | `mcp:write`, **Admin** | Update a scorecard's settings or criteria. |
| [`create_scorecard_item`](/mcp/tools/scorecards#create_scorecard_item) | `mcp:write`, **Admin** | Add a scoring criterion to a scorecard. |
| [`update_scorecard_item`](/mcp/tools/scorecards#update_scorecard_item) | `mcp:write`, **Admin** | Update a scoring criterion. |
| [`delete_scorecard_item`](/mcp/tools/scorecards#delete_scorecard_item) | `mcp:write`, **Admin**, **Destructive** | Remove a scoring criterion. |
| [`update_scorecard_item_order`](/mcp/tools/scorecards#update_scorecard_item_order) | `mcp:write`, **Admin** | Reorder a scoring criterion. |
| [`update_scorecard_ranges`](/mcp/tools/scorecards#update_scorecard_ranges) | `mcp:write`, **Admin** | Update min/middle/max for all items in a scorecard. |
### Labels
| Tool | Scope | Description |
| - | - | - |
| [`list_labels`](/mcp/tools/labels#list_labels) | `mcp:read` | List label categories and their options. |
| [`create_label`](/mcp/tools/labels#create_label) | `mcp:write`, **Admin** | Create a new label category. |
| [`update_label`](/mcp/tools/labels#update_label) | `mcp:write`, **Admin** | Update a label category. |
| [`delete_label`](/mcp/tools/labels#delete_label) | `mcp:write`, **Admin**, **Destructive** | Delete a label category. |
| [`change_conversation_labels`](/mcp/tools/labels#change_conversation_labels) | `mcp:write` | Apply or update labels on a conversation. |
### Forecasting
| Tool | Scope | Description |
| - | - | - |
| [`get_forecast_config`](/mcp/tools/forecasting#get_forecast_config) | `mcp:read` | Get forecast categories. |
| [`create_forecast_category`](/mcp/tools/forecasting#create_forecast_category) | `mcp:write`, **Admin** | Create a new forecast category. |
| [`update_forecast_category`](/mcp/tools/forecasting#update_forecast_category) | `mcp:write`, **Admin** | Update a forecast category. |
### CRM
| Tool | Scope | Description |
| - | - | - |
| [`get_crm_integrations`](/mcp/tools/crm#get_crm_integrations) | `mcp:read` | List configured CRM integrations. |
| [`create_crm_integration`](/mcp/tools/crm#create_crm_integration) | `mcp:write`, **Admin** | Create a new CRM integration mapping. |
| [`update_crm_integration`](/mcp/tools/crm#update_crm_integration) | `mcp:write`, **Admin** | Update a CRM integration's name, fields, or status. |
| [`sync_crm_fields`](/mcp/tools/crm#sync_crm_fields) | `mcp:write`, **Admin** | Force-sync entity and field definitions from the CRM. |
| [`delete_crm_account`](/mcp/tools/crm#delete_crm_account) | `mcp:write`, **Admin**, **Destructive** | Disconnect a CRM account and remove its integrations. |
| [`connect_integration`](/mcp/tools/crm#connect_integration) | `mcp:write`, **User-level** (admin for CRM, write for Microsoft) | Generate an OAuth link to connect Salesforce, HubSpot, or Microsoft. |
### Intelligence
| Tool | Scope | Description |
| - | - | - |
| [`list_intelligence_collections`](/mcp/tools/intelligence#list_intelligence_collections) | `mcp:read` | List CRM prompt collections. |
| [`create_intelligence_collection`](/mcp/tools/intelligence#create_intelligence_collection) | `mcp:write`, **Admin** | Create a new collection. |
| [`update_intelligence_collection`](/mcp/tools/intelligence#update_intelligence_collection) | `mcp:write`, **Admin** | Update a collection. |
| [`delete_intelligence_collection`](/mcp/tools/intelligence#delete_intelligence_collection) | `mcp:write`, **Admin**, **Destructive** | Delete a collection. |
| [`list_intelligence_items`](/mcp/tools/intelligence#list_intelligence_items) | `mcp:read` | List items in a collection. |
| [`create_intelligence_item`](/mcp/tools/intelligence#create_intelligence_item) | `mcp:write`, **Admin** | Add a new prompt to a collection. |
| [`update_intelligence_item`](/mcp/tools/intelligence#update_intelligence_item) | `mcp:write`, **Admin** | Update an item. |
| [`delete_intelligence_item`](/mcp/tools/intelligence#delete_intelligence_item) | `mcp:write`, **Admin**, **Destructive** | Delete an item. |
### API Keys
| Tool | Scope | Description |
| - | - | - |
| [`list_api_keys`](/mcp/tools/api-keys#list_api_keys) | `mcp:read` | List API keys (without tokens). |
| [`create_api_key`](/mcp/tools/api-keys#create_api_key) | `mcp:write`, **Admin** | Create a new API key. Token shown only once. |
| [`delete_api_key`](/mcp/tools/api-keys#delete_api_key) | `mcp:write`, **Admin**, **Destructive** | Revoke an API key permanently. |
### Super Agent
| Tool | Scope | Description |
| - | - | - |
| [`send_super_agent_message`](/mcp/tools/super-agent#send_super_agent_message) | `mcp:write`, **User-level** | Send a message to the super agent (sync up to 15s, then async). |
| [`list_super_agent_sessions`](/mcp/tools/super-agent#list_super_agent_sessions) | `mcp:read`, **User-level** | List your super agent sessions. |
| [`get_super_agent_session_history`](/mcp/tools/super-agent#get_super_agent_session_history) | `mcp:read`, **User-level** | Get message history (used to poll for async responses). |
| [`cancel_super_agent_processing`](/mcp/tools/super-agent#cancel_super_agent_processing) | `mcp:write`, **User-level** | Cancel an in-progress super agent run. |
| [`rename_super_agent_session`](/mcp/tools/super-agent#rename_super_agent_session) | `mcp:write`, **User-level** | Rename a session. |
| [`delete_super_agent_session`](/mcp/tools/super-agent#delete_super_agent_session) | `mcp:write`, **User-level**, **Destructive** | Delete a session and its messages. |
### Agent Builder
| Tool | Scope | Description |
| - | - | - |
| [`create_agent_flow`](/mcp/tools/agent-builder#create_agent_flow) | `mcp:write`, **Builder** | Create an agent and its empty flow; returns `agent_id` and `flow_id`. |
| [`get_flow`](/mcp/tools/agent-builder#get_flow) | `mcp:read`, **Builder** | Read a flow's trigger, steps, inputs and current issues. |
| [`get_piece_schema`](/mcp/tools/agent-builder#get_piece_schema) | `mcp:read`, **Builder** | Look up a piece's exact action, trigger and property ids. |
| [`get_action_options`](/mcp/tools/agent-builder#get_action_options) | `mcp:write`, **Builder** | Resolve a dropdown's values against a connected account. |
| [`set_trigger`](/mcp/tools/agent-builder#set_trigger) | `mcp:write`, **Builder**, **Destructive** | Set what fires the flow, replacing the current trigger. |
| [`add_step`](/mcp/tools/agent-builder#add_step) | `mcp:write`, **Builder** | Insert a piece action step. |
| [`add_loop_step`](/mcp/tools/agent-builder#add_loop_step) | `mcp:write`, **Builder** | Add a loop that runs its body once per list element. |
| [`add_router_step`](/mcp/tools/agent-builder#add_router_step) | `mcp:write`, **Builder** | Add a router with condition and fallback branches. |
| [`add_code_step`](/mcp/tools/agent-builder#add_code_step) | `mcp:write`, **Builder** | Add a JavaScript step for reshaping data. |
| [`update_step`](/mcp/tools/agent-builder#update_step) | `mcp:write`, **Builder**, **Destructive** | Change a step's input, action, connection or code. |
| [`delete_step`](/mcp/tools/agent-builder#delete_step) | `mcp:write`, **Builder**, **Destructive** | Remove a step and anything nested inside it. |
| [`test_step`](/mcp/tools/agent-builder#test_step) | `mcp:write`, **Builder** | Run one step (reads only) and show its output. |
| [`validate_flow`](/mcp/tools/agent-builder#validate_flow) | `mcp:read`, **Builder** | Return the flow's blocking and advisory issues. |
### Reports
| Tool | Scope | Description |
| - | - | - |
| [`get_usage_report`](/mcp/tools/reports#get_usage_report) | `mcp:read`, **Org-level** | Per-user activity metrics for a date range (calls, coaching, AI usage). |
# Agent Builder
Source: https://docs.attention.com/mcp/tools/agent-builder
Build the workflow behind an Attention agent — trigger, steps, loops, routers and code — then validate and test it, all from an MCP client.
The Agent Builder tools let an assistant author the flow behind an Attention agent: what fires it, which steps run, and how data passes between them. These are the same flows you build on the [Workflow Builder](/builder-101/getting-started) canvas, so anything built here can be opened and edited in the Attention UI.
**Availability.** Agent Builder is rolled out per organization. When it is not enabled for your workspace, these tools do not appear in your client's tool list. Every tool also requires the **admin** role or the **Product** role.
**Everything you build is a draft.** There is no publish tool. To make an agent run for real, open it in the Attention UI and publish it there.
## How a build goes
[`create_agent_flow`](#create_agent_flow) creates the agent and returns its `agent_id` plus the `flow_id` of its empty flow.
[`get_piece_schema`](#get_piece_schema) returns the exact trigger, action and property ids. Use those ids, not display names. Most broken steps come from a property name guessed from its label.
[`set_trigger`](#set_trigger) picks what fires the flow. [`add_step`](#add_step) appends piece actions. For control flow, use [`add_loop_step`](#add_loop_step), [`add_router_step`](#add_router_step) or [`add_code_step`](#add_code_step).
Every edit returns the updated flow and the validator's issues. Fix the **blocking** issues before adding more steps. **Advisory** issues never block the flow.
[`test_step`](#test_step) shows what a step actually returns, so later steps bind to real fields. Call [`validate_flow`](#validate_flow) before you call the build finished.
### Conventions shared by every tool
* **`flow_id` or `agent_id`, never both.** Every tool that works on an existing flow accepts either one, so an agent built in another session or in the UI can be addressed by its agent id alone. The flow must belong to your organization.
* **Bindings.** Reference earlier data as `{{step_name.path}}`. Paths can be nested, for example `{{step_1.data.items[0].id}}`. Trigger fields are `{{trigger.path}}`. Only bind to fields the source step's schema declares, or that a `test_step` sample showed.
* **Connections are bound for you.** When the project has exactly one connection for a piece, `set_trigger` and `add_step` bind it automatically. When there are several, the response carries a `connection-candidates` advisory listing their `externalId`s. Pass one as `connection_id`. Never put a connection inside `input`.
* **Placing steps.** `parent_step` is the step to insert after; use the trigger's name (usually `trigger`) to insert first. `position` is `AFTER` (default), `INSIDE_LOOP` or `INSIDE_BRANCH`. `INSIDE_BRANCH` also needs a zero-based `branch_index`.
### Pieces you can build with
There is no tool that lists pieces, so this is the full catalog. `get_piece_schema` lists each piece's full set of actions and triggers.
| Piece | Use it for |
| - | - |
| `schedule` | Triggers only: `every_x_minutes`, `every_hour`, `every_day`, `every_week`, `every_month`, `cron_expression`. |
| `slack` | Notifications: `send_channel_message`, `send_direct_message`, `updateMessage`, `slack-find-user-by-email`, `request_approval_message`. |
| `salesforce` | `run_query` runs a SOQL query. |
| `hubspot` | `create-note`, `create-contact`, `update-contact`. `custom_api_call` calls the HubSpot API directly for objects with no dedicated action. |
| `attention` (actions) | `listConversationsV2`, `showConversation`, `updateConversation`, `listTeams`, `fetchTeamMembers`, `listUsers`, `createSnippet`, `askAttention`, `askAttentionV2`, `createDeck`, `listEmails`, `scorecardSummary`, `execute_agent_task`, `importConversation`, `listCalendarEvents`, `triggerNativeWorkflow`, `changeConversationOpportunity`, `updateTeamOpportunity`, `changeConversationLabels`, `grantConversationAccess`, `upsertAIScore`, `upsertDealTLDR`, `upsertDealRisk`, `custom_api_call`. |
| `attention` (triggers) | `webhookTrigger` (fires when a conversation finishes analysis), `giCalculatedTrigger`, `exportCRMFieldsTrigger`, `labelsChangedTrigger`, `userChangesCrmAssociationTrigger`, `newEmailImported`. See [Attention Triggers](/builder-101/triggers/attention-triggers). |
Some actions and triggers carry **Guidance** in their `get_piece_schema` entry: a recipe built from earlier builds, such as a worked cron expression with its timezone. Follow it when configuring that step.
## Create and read
### create\_agent\_flow
Scope: `mcp:write`. Requires admin or Product role.
Create a new agent in your organization, along with the flow it is built from. Start here: no other tool hands out a flow id. The new flow has no trigger and no steps.
Name of the agent as people will see it in Attention, e.g. `Deal desk notifier`.
What the agent is for, in one or two sentences. Shown alongside the agent in Attention.
Agent folder to file the agent in, matched exactly but ignoring case. If no folder has that name, nothing is created and the response lists the folders that exist. Omit to create the agent outside any folder.
Create the folder named by `folder_name` if it doesn't exist yet. A folder that already has the name is used either way.
**Returns:** `agent_id`, `flow_id`, `created`, the folder used (`folder_id`, `folder_name`, `folder_created`) and any `warnings`.
***
### get\_flow
Scope: `mcp:read`. Requires admin or Product role.
Read a flow: its trigger, its steps with their configured inputs, and the validator's current issues. Call it before editing a flow you didn't just build.
ID of the flow to read. Pass this or `agent_id`.
ID of the agent whose flow to read. Pass this or `flow_id`.
**Returns:** The flow's trigger and steps, plus blocking and advisory issues.
***
### get\_piece\_schema
Scope: `mcp:read`. Requires admin or Product role.
Look up a piece so triggers and steps can be written with exact ids. With `piece_name` alone, it returns an index of the piece's action and trigger ids (up to 60 of each, no input schemas). With `action_name` or `trigger_name`, it returns that entry's input properties (exact key, type, whether required, static dropdown values), its declared output keys and any Guidance.
Piece to look up, e.g. `slack`.
Return this one action's inputs and output. Must be an id from the index.
Return this one trigger's inputs and output. Must be an id from the index.
**Returns:** The piece index, or one action's or trigger's full schema.
It doesn't resolve dropdowns whose values come from the connected account, such as Slack channels or CRM pipelines. Use [`get_action_options`](#get_action_options) for those.
***
### get\_action\_options
Scope: `mcp:write`. Requires admin or Product role.
Resolve what a dropdown property actually offers, the same way the builder does when someone opens it. This runs the piece's options code against the connected account, which is why it needs the write scope. It only reads.
Piece the entry belongs to, e.g. `slack`.
Exact property key from `get_piece_schema`, e.g. `channel`.
Action whose property to resolve. Pass this or `trigger_name`.
Trigger whose property to resolve. Pass this or `action_name`.
`externalId` of the connection to resolve against, as `list_connections` reports it. Required for values that come from the connected account; without it the dropdown comes back disabled.
Values already chosen for the entry's other properties, keyed by property name. A dropdown that depends on a sibling property resolves to nothing without it.
Resolve in the context of this flow, so the property can see the flow's saved step samples. Pass this, `agent_id`, or neither.
Same as `flow_id`, naming the agent instead.
Case-insensitive filter over the returned labels and values.
**Returns:** Up to 50 options, each with label and value.
## Edit the flow
`set_trigger`, `add_step`, `add_loop_step`, `add_router_step`, `add_code_step`, `update_step` and `delete_step` all return the flow's new contents and the validator's issues in the same response. `update_step`, `delete_step` and `set_trigger` overwrite what was there, and there is no undo.
### set\_trigger
Scope: `mcp:write`. Requires admin or Product role. **Destructive**: replaces the current trigger.
Set what fires the flow, replacing the current trigger. The trigger keeps its step name, so `{{trigger.field}}` bindings still resolve, but they're re-checked against the new trigger's output. This can't clear a trigger, and only piece triggers are supported.
ID of the flow. Pass this or `agent_id`.
ID of the agent. Pass this or `flow_id`.
Piece the trigger belongs to, e.g. `schedule`.
Exact trigger id from `get_piece_schema`, e.g. `every_x_minutes`.
Trigger inputs keyed by property name. Replaces the whole input; omitting it sets the trigger with no inputs.
Label shown in the builder. An existing label is kept when omitted.
`externalId` of the connection to run on, from a `connection-candidates` advisory. Because the trigger is replaced whole, send `piece_name`, `trigger_name` and the current `input` in the same call.
For a `schedule` trigger, copy the cron format and timezone from the trigger's Guidance. A schedule that never comes due raises no issue. It just looks like a flow that hasn't fired yet.
***
### add\_step
Scope: `mcp:write`. Requires admin or Product role.
Insert a piece action into the flow. For loops, routers and code, use the dedicated tools below.
ID of the flow. Pass this or `agent_id`.
ID of the agent. Pass this or `flow_id`.
Unique machine name, e.g. `step_3`. Letters, digits and underscores only. Later steps reference it as `{{step_name.path}}`.
Piece the action belongs to, e.g. `slack`.
Exact action id from `get_piece_schema`, e.g. `send_channel_message`.
Existing step to insert after. Use the trigger's name (usually `trigger`) to insert first.
Action inputs keyed by property name, e.g. `{"text": "{{step_1.body.summary}}"}`.
Label shown in the builder. Defaults to the action name.
`AFTER` (default), `INSIDE_LOOP` or `INSIDE_BRANCH`.
Zero-based branch of the parent router. Required with `INSIDE_BRANCH`.
`externalId` of the connection to run on. Omit it to bind the project's only connection for the piece.
***
### add\_loop\_step
Scope: `mcp:write`. Requires admin or Product role.
Add a loop that runs its body once per element of a list. The loop is created empty. Add its body with further calls using `position: INSIDE_LOOP` and `parent_step` set to the loop's `step_name`. Inside the body, read the current element as `{{step_name.item}}` and its position as `{{step_name.index}}`. `{{step_name.iterations}}` exists only after the loop finishes.
ID of the flow. Pass this or `agent_id`.
ID of the agent. Pass this or `flow_id`.
Unique machine name, e.g. `for_each_row`.
Existing step to insert after.
A binding onto a list an earlier step produced, e.g. `{{step_1.body.results}}`. A reference, not the list itself.
Label shown in the builder.
`AFTER` (default), `INSIDE_LOOP` or `INSIDE_BRANCH`.
Zero-based branch of the parent router. Required with `INSIDE_BRANCH`.
***
### add\_router\_step
Scope: `mcp:write`. Requires admin or Product role.
Add a router that sends execution down one of several branches. Every branch starts empty. Fill one with further calls using `position: INSIDE_BRANCH`, `parent_step` set to the router's `step_name`, and its `branch_index`. Branch conditions can't be changed after the router is created.
ID of the flow. Pass this or `agent_id`.
ID of the agent. Pass this or `flow_id`.
Unique machine name, e.g. `route_by_status`.
Existing step to insert after.
The branches, in order. At least one is required.
Label shown in the builder.
`CONDITION` (default) runs when its conditions match. `FALLBACK` runs only when no condition branch matched. At most one branch may be a fallback. Put the catch-all here, not in a condition.
A list of AND groups: conditions within a group are ANDed, groups are ORed. Each condition has `first_value` (usually a binding), `operator` (e.g. `TEXT_EXACTLY_MATCHES`, `TEXT_CONTAINS`, `NUMBER_IS_GREATER_THAN`, `BOOLEAN_IS_TRUE`, `EXISTS`), `second_value`, and `case_sensitive` (text operators only). Omit `second_value` for `BOOLEAN_IS_TRUE`, `BOOLEAN_IS_FALSE`, `EXISTS`, `DOES_NOT_EXIST`, `LIST_IS_EMPTY` and `LIST_IS_NOT_EMPTY`. Leave `conditions` out on a fallback branch.
`EXECUTE_FIRST_MATCH` (default) runs only the first matching branch. `EXECUTE_ALL_MATCH` runs every matching branch.
Label shown in the builder.
`AFTER` (default), `INSIDE_LOOP` or `INSIDE_BRANCH`.
Zero-based branch of the *parent* router. Required with `INSIDE_BRANCH`.
```json Example branches theme={null}
[
{
"branch_name": "is open",
"branch_type": "CONDITION",
"conditions": [[{ "first_value": "{{trigger.status}}", "operator": "TEXT_EXACTLY_MATCHES", "second_value": "open" }]]
},
{ "branch_name": "everything else", "branch_type": "FALLBACK" }
]
```
***
### add\_code\_step
Scope: `mcp:write`. Requires admin or Product role.
Add a JavaScript step for reshaping that no piece does, such as reformatting a payload, filtering a list or computing a value. Prefer a piece action wherever one exists: a piece declares its inputs and outputs, and code declares nothing. The source is parsed when it's sent, and code that doesn't parse is refused with each error's line and column.
A code step's `input` must never reference a connection. Inputs reach the code already resolved, so a connection there would hand the credential to the code. Read the connected system in a piece step and pass its output in.
ID of the flow. Pass this or `agent_id`.
ID of the agent. Pass this or `flow_id`.
Unique machine name, e.g. `build_payload`.
Existing step to insert after.
A module exporting one async function that takes the inputs object, e.g. `export const code = async ({ rows }) => rows.length;`
Values passed to the function, keyed by the parameter names it destructures, e.g. `{"rows": "{{step_1.body.results}}"}`.
npm manifest as JSON, e.g. `{"dependencies":{"dayjs":"1.11.10"}}`. Omit when there are no dependencies.
Label shown in the builder.
`AFTER` (default), `INSIDE_LOOP` or `INSIDE_BRANCH`.
Zero-based branch of the parent router. Required with `INSIDE_BRANCH`.
***
### update\_step
Scope: `mcp:write`. Requires admin or Product role. **Destructive**: overwritten values are not recoverable.
Change an existing step. Send only what changes. The step keeps its name, so bindings that point at it still resolve.
ID of the flow. Pass this or `agent_id`.
ID of the agent. Pass this or `flow_id`.
Step to change.
Replaces the step's **whole** input, so include every property the step needs. Omit to keep the current input.
New label shown in the builder.
Switch to a different piece. Must be sent with `action_name`.
Switch to a different action. Must be sent with `piece_name`.
Rebind the step to this connection. Sent alone, it changes only the connection.
Code steps only: the complete replacement module. This is the only way to change what a code step runs.
Code steps only, sent with `source_code`. Re-send the current manifest to keep dependencies; it's cleared otherwise.
***
### delete\_step
Scope: `mcp:write`. Requires admin or Product role. **Destructive**: there is no undo.
Remove a step. Deleting a loop or router deletes everything nested inside it. Bindings aren't rewritten: steps that read the deleted step come back as blocking `binding` issues to repoint with `update_step`. The trigger can't be deleted; replace it with `set_trigger`.
ID of the flow. Pass this or `agent_id`.
ID of the agent. Pass this or `flow_id`.
Step to remove, exactly as `get_flow` reports it.
## Verify
### test\_step
Scope: `mcp:write`. Requires admin or Product role.
Run one action step and show what it returned, so later steps bind to fields the step really produces.
* An action the piece marks as a **read** runs for real against the connected system. The result is shown and saved as the step's sample.
* An action marked as a **write**, or not marked, is stubbed unless the piece ships its own test handler. This tool never asks the builder to perform a write.
* A **code step** is compiled and checked for side effects, and each finding is reported with its location. It is not executed.
The trigger can't be tested. Samples are shown up to 4,000 characters, with field names listed separately. Each organization shares a budget of about 30 step tests per minute. A timeout doesn't mean the step didn't run: check `get_flow` for a saved sample before retrying.
ID of the flow. Pass this or `agent_id`.
ID of the agent. Pass this or `flow_id`.
Action step to test, exactly as `get_flow` reports it.
Stub the step instead of running it, even a read. Nothing reaches the connected system and no sample is saved. Default: `false`.
***
### validate\_flow
Scope: `mcp:read`. Requires admin or Product role.
Run the validator over the flow without changing it. Call it before you call a build finished: fix every blocking issue, then validate again. It returns the verdict only; read the flow itself with `get_flow`.
ID of the flow. Pass this or `agent_id`.
ID of the agent. Pass this or `flow_id`.
**Returns:** Blocking and advisory issues, plus each step's output status.
| Advisory | Meaning |
| - | - |
| `unverified` | The binding's shape couldn't be checked. |
| `conditional` | Reads a step inside a router branch or loop that may not have run. |
| `skipped` | The validator didn't check that step. |
| `expression` | An input computes a value inline instead of naming one earlier field. |
| `type` | A binding's type doesn't fit the field it feeds. |
| `code` | A code step whose output isn't known. |
| `connection-candidates` | Lists the connections a step could bind to. |
| Output status | Meaning |
| - | - |
| `declared` | An authoritative shape from the piece or Attention's own schema. |
| `sampled` | The example output the piece ships with. |
| `overlay` | A transcribed schema of a third-party API. |
| `captured` | Taken from a real `test_step` run. |
| `unknown` | Nothing has run and nothing declared a shape. Normal for code steps. |
A blocking `connection` issue means a step has no connection bound. If the project has a connection for that piece, bind it with `connection_id`. If it has none, add one in the Attention UI, or with `create_connection` for the pieces it supports.
# AI Analysis
Source: https://docs.attention.com/mcp/tools/ai-analysis
Run natural-language analysis across one or many calls in a single request.
`ask_attention` is the workhorse of multi-call analysis. Instead of fetching each transcript and asking the LLM to reason over them, hand a list of call IDs (or a deal ID) plus a prompt to Attention's analysis engine — it processes all the calls server-side and returns a focused answer. This is dramatically more efficient than calling `get_call_details` in a loop.
## Tools
### ask\_attention
Scope: `mcp:read`.
Analyze calls by running AI analysis across **up to 25 calls** in a single request. Provide either a list of call IDs (typically returned from [`search_calls`](/mcp/tools/calls#search_calls)) or a deal ID — the engine pulls all conversations associated with that deal automatically.
The question or analysis prompt to run against the calls. Be specific about what to surface (objections, pricing mentions, next steps, etc).
List of call IDs to analyze. Provide this **or** `deal_id`.
Deal ID to analyze all associated calls. Provide this **or** `conversation_ids`.
**Returns:** A Markdown answer to the prompt, grounded in the supplied calls. Includes references back to specific calls when relevant.
**Example prompt:** *"Across these 12 calls with Datadog, what are the recurring objections and how have they evolved over the deal's lifetime?"*
The recommended pattern is **`search_calls` → `ask_attention`** rather than fetching each transcript with `get_call_details`. The engine reads transcripts, scorecard results, and intelligence items in a single pass.
# API Keys
Source: https://docs.attention.com/mcp/tools/api-keys
Create, list, and revoke programmatic API keys.
API keys are the primary authentication mechanism for backend integrations and the Anthropic Messages API path. See [Authentication → For developers](/mcp/authentication#for-developers-api-keys-and-anthropic-messages-api) for the connection-side details.
These tools let you manage keys directly from an MCP session. The full token of a newly created key is shown **only once** — store it immediately.
## Tools
### list\_api\_keys
Scope: `mcp:read`. No parameters.
List API keys in your organization. Tokens themselves are not returned — only metadata (name, ID, scope, last-seen timestamp).
**Returns:** Markdown list of API keys with name, ID, scope (`org-level` / `user-level`), and last used date.
***
### create\_api\_key
Scope: `mcp:write`. Requires admin role. The full token is returned only once — save it now.
Create a new API key. Org-level keys have full org access; user-level keys are scoped to the authenticated user.
Display name for the API key (e.g. `CRM Integration`, `CI/CD Pipeline`).
If `true` (default), creates an org-level key with full org access. If `false`, creates a user-level key scoped to the authenticated user.
Number of hours until the key expires. Omit for a non-expiring key.
**Returns:** A confirmation containing the new key's ID, name, and **the full token** — shown only once. The result text includes a warning to save the token immediately.
***
### delete\_api\_key
Scope: `mcp:write`. Requires admin role. Destructive — any integrations using this key will stop working immediately.
Revoke an API key permanently. Use `list_api_keys` to find key IDs.
The UUID of the API key to revoke.
# Calls
Source: https://docs.attention.com/mcp/tools/calls
Search recorded calls and read full details, transcripts, scorecard results, and AI insights.
Calls are the foundation of every other read flow. `search_calls` is the entry point — it scopes results to what your authenticated user can see, supports a wide set of filters (date, rep, team, CRM fields, transcript content), and returns IDs that you can pass to `get_call_details` for a single call or to [`ask_attention`](/mcp/tools/ai-analysis#ask_attention) for batch AI analysis.
When the user mentions a company name, always run **two** searches in parallel: one filtered by `title`, and one filtered by CRM account name (`crm_field_entity_code="account"`, `crm_field_field_name="Name"`, `crm_field_values=["Acme"]`). Merge and deduplicate the IDs. This catches calls whose title doesn't include the company name but whose linked CRM account does.
## Tools
### search\_calls
Scope: `mcp:read`.
Search recorded calls by date, rep, team, keyword, opportunity, CRM field, or transcript content. Results are scoped to calls your user can see.
#### Pagination
Page number (starts from 1).
Number of calls per page. Maximum: 50.
#### Date range
Show calls after this date. Format: `2024-01-01T00:00:00Z`.
Show calls before this date. Format: `2024-12-31T23:59:59Z`.
#### Owner & team
Filter by call owner email. Useful for admins/managers to view a specific rep's calls. Sales reps already see their team's calls by default.
Filter by call owner user ID. Alternative to `rep_email`.
Filter by team ID. Results are already scoped to your accessible teams based on your role.
#### Keyword & participants
Search calls by title keyword.
Filter by external participant email.
Search inside call transcripts for specific words or phrases. Returns calls where the transcript contains the search term, with matched snippets showing who said what.
**Compatibility:** `transcript_search` cannot be combined with `crm_field_*`, `opportunity_id`, `participant_email`, `rep_email`, `rep_id`, or `title`. It can be combined with `from_date`, `to_date`, `team_id`, and the `hide_*` filters. If you need both, run two searches and cross-reference the IDs.
#### CRM filters
Filter by CRM opportunity/deal ID. The preferred way to find calls linked to a specific opportunity.
CRM entity code (e.g. `opportunity`, `account`, `contact`). Required together with `crm_field_field_name` and `crm_field_values`.
CRM field name to match (e.g. `StageName`, `Name`). Required together with `crm_field_entity_code` and `crm_field_values`.
Values to match for the CRM field (OR logic, max 10). Required together with `crm_field_entity_code` and `crm_field_field_name`.
#### Status filters
These default to safe values; only set them when the user explicitly asks.
Exclude internal-only meetings.
Exclude calls that haven't been analyzed.
Exclude calls that are still pending processing.
Exclude calls whose processing failed.
Omit the transcript body from each call in the results. Calls are not filtered. Defaults to `true` to keep responses small; fetch the transcript with get\_call\_details.
#### Result enrichment
Optional flags that add detail to each result. Only set when the user has asked for that detail; they make responses larger.
Include the reps (internal participants) in each call's participants list.
Include Zoom-specific metadata (meeting IDs, etc).
Include import metadata (when the call was imported from another source).
Include linked CRM records (deals, accounts).
Include AI-extracted insights (intelligence item values).
**Returns:** A Markdown list of matching calls — title, date, rep, participants, score, and ID — with pagination context. When `transcript_search` is used, results also include the matched transcript snippets.
**Example prompt:** *"Find all calls discussing pricing in the last 30 days from the Enterprise team."*
***
### get\_call\_details
Scope: `mcp:read`.
Get details for a single call: full transcript, scorecard results, AI-extracted insights, participants, and CRM linkage. Use this when the user asks to read or see the transcript. For analysis across multiple calls, use [`ask_attention`](/mcp/tools/ai-analysis#ask_attention) instead — it's an order of magnitude more efficient than calling `get_call_details` in a loop.
The call ID, returned by `search_calls`.
When `true`, returns a structured transcript with speaker names and timestamps. When `false` (default), returns the simple text transcript.
**Returns:** A Markdown document with the call's title, date, participants, score, transcript, and AI-extracted insights.
**Example prompt:** *"Show me the full transcript of my call with Acme yesterday, with speaker names and timestamps."*
# CRM
Source: https://docs.attention.com/mcp/tools/crm
Inspect and manage CRM integrations — Salesforce, HubSpot, Microsoft — and trigger field syncs.
The CRM tools let an MCP client see what CRM platforms are connected, create and update integration mappings (which CRM entities and fields sync into Attention), force-refresh field schemas after a CRM-side change, disconnect accounts, and start a fresh OAuth connection to a new CRM platform.
## Tools
### get\_crm\_integrations
Scope: `mcp:read`. No parameters.
List CRM integrations configured for your organization, including platform details, sync status, and entity field mappings.
**Returns:** Markdown list of CRM integrations with name, status, platform, entity type, mapped fields, and last sync time.
***
### create\_crm\_integration
Scope: `mcp:write`. Requires admin role.
Create a new CRM integration mapping CRM entity fields to Attention. Use `get_crm_integrations` to see existing integrations, and the OAuth flow via `connect_integration` to obtain a `crm_account_uuid`.
UUID of the CRM platform (Salesforce, HubSpot, etc.).
UUID of the CRM entity type to integrate.
UUID of the connected CRM account.
Display name for the integration.
List of CRM field names to sync.
Team UUID to scope the integration to.
Whether the integration is active.
***
### update\_crm\_integration
Scope: `mcp:write`. Requires admin role.
Update an existing CRM integration's name, fields, or enabled status. The name should reflect the CRM entity type (e.g. `Deal Sync` for Opportunity entities).
UUID of the CRM integration to update.
New display name.
New list of CRM field names to sync.
Whether the integration is active.
***
### sync\_crm\_fields
Scope: `mcp:write`. Requires admin role.
Force-sync CRM entity and field definitions from the CRM platform. Useful after CRM schema changes (new custom fields, renamed fields, etc.).
UUID of the CRM account to sync fields from.
***
### delete\_crm\_account
Scope: `mcp:write`. Requires admin role. Destructive and irreversible.
Disconnect a CRM account and remove all its integrations.
UUID of the CRM account to disconnect.
***
### connect\_integration
Scope: `mcp:write`. Requires **user-level authentication**. Salesforce/HubSpot require admin role; Microsoft requires write access. The tool returns an OAuth URL — the user must open it in their browser to complete the connection.
Generate an OAuth authorization link to connect a CRM or calendar/email integration. After authorization, the connection is established automatically.
Integration provider: `salesforce`, `hubspot`, or `microsoft`.
Required for Salesforce: your org domain (e.g. `my-company.my`). For sandbox use `my-company.sandbox.my`.
For Microsoft only: services to connect — `calendar`, `email`, or both. Defaults to `["calendar"]`.
**Returns:** A user-facing block of text containing the OAuth URL and step-by-step instructions for the user to complete the flow in their browser.
See the [Salesforce integration guide](/workspace-setup/salesforce-integration) for the full Salesforce setup walkthrough.
# Forecasting
Source: https://docs.attention.com/mcp/tools/forecasting
Read and configure forecast categories — the columns that make up your forecast grid.
Forecast categories are the columns of your forecast grid (Commit, Best Case, Pipeline, etc). Each category defines how it contributes to the forecast total, where it sits in the grid, and whether it's computed from the CRM or driven by user input.
System-managed categories (like CRM-derived totals) only allow updates to their description and inclusion flag — the rest is computed.
## Tools
### get\_forecast\_config
Scope: `mcp:read`. No parameters.
Get the forecast categories configured for your organization, including column types, display order, and visibility settings.
**Returns:** Markdown list of forecast categories with label, ID, column key, type, display order, color, visibility, and whether they're system-managed.
***
### create\_forecast\_category
Scope: `mcp:write`. Requires admin role.
Create a new forecast category column.
Unique column key identifier (e.g. `commit`, `upside`).
Display label for the category.
Description or tooltip text.
Column type: `system`, `call`, or `deal_rollup` (default: `deal_rollup`).
Display order position.
UI accent color (e.g. `#00FF00`).
Whether this category contributes to the forecast total.
***
### update\_forecast\_category
Scope: `mcp:write`. Requires admin role.
Update an existing forecast category. System-managed categories only accept updates to `description` and `include_in_call`.
The UUID of the forecast category to update.
New display label.
New description.
Whether this contributes to the forecast total.
New display order position.
New UI accent color.
Whether this category is visible in the forecast grid.
# Identity
Source: https://docs.attention.com/mcp/tools/identity
Inspect the authenticated identity behind a connection.
Identity tools let an MCP client confirm who it is authenticated as before performing other operations. This is useful both for debugging connector setup and for assistants that want to greet a user by name.
## Tools
### get\_me
Scope: `mcp:read`. No parameters.
Get the authenticated identity, including name, email, user UUID, organization, roles, and team memberships. For org-level API keys (which are not bound to a specific user), the result includes only the organization name and ID.
**Returns:** A Markdown summary of the authenticated identity. For user-level auth: name, email, user ID, organization, roles, and teams. For org-level API keys: organization name, organization ID, and a note that no specific user is associated.
**Example prompt:** *"Who am I logged in as on Attention right now?"*
# Intelligence
Source: https://docs.attention.com/mcp/tools/intelligence
Manage intelligence collections (CRM prompt sets) and their items (individual extraction prompts).
Intelligence in Attention refers to AI-extracted CRM fields — Champion, Next Steps, Competitor, Budget, etc. The data model has two levels:
1. **Collections** group related prompts and apply them to calls matching a label-based criteria filter.
2. **Items** are the individual prompts inside a collection, each describing one field to extract from a call.
Use [`list_intelligence_collections`](#list_intelligence_collections) to see what's configured, then drill into one with [`list_intelligence_items`](#list_intelligence_items). All write tools require admin access.
## Collection tools
### list\_intelligence\_collections
Scope: `mcp:read`. No parameters.
List all CRM prompt collections in your organization. Each collection defines which CRM prompts apply to calls matching its label-based criteria.
**Returns:** Markdown list of collections with name, ID, team scope, and criteria operators / conditions.
***
### create\_intelligence\_collection
Scope: `mcp:write`. Requires admin role.
Create a new CRM prompt collection. Collections group CRM extraction prompts and apply them to calls matching label-based criteria.
Name of the collection (must be unique within the org).
Apply to all teams.
Team IDs this collection applies to. Ignored if `all_teams` is `true`.
Label-based filter: calls matching these criteria use this collection's CRM prompts.
* `operator`: `AND` or `OR`.
* `conditions`: array of `{ "field": "Call Type", "value": "Discovery" }`.
***
### update\_intelligence\_collection
Scope: `mcp:write`. Requires admin role.
Update a collection's name, team assignments, or criteria filters. Omitted fields preserve their current values.
The UUID of the collection to update.
New name.
Apply to all teams.
Team IDs this collection applies to.
New label-based filter conditions. Replaces existing criteria.
***
### delete\_intelligence\_collection
Scope: `mcp:write`. Requires admin role. Destructive.
Delete a collection. This is permanent.
The UUID of the collection to delete.
## Item tools
### list\_intelligence\_items
Scope: `mcp:read`.
List all CRM prompts/fields in an intelligence collection. Shows titles, prompts, response types, and options.
UUID of the intelligence collection.
**Returns:** Markdown list of intelligence items with title, ID, category, description, prompt (truncated to 200 chars), response type, options, and analysis level.
***
### create\_intelligence\_item
Scope: `mcp:write`. Requires admin role.
Add a CRM prompt/field to a collection. Each item defines an AI extraction prompt that runs on calls matching the collection's criteria.
UUID of the intelligence collection.
Field title (e.g. `Champion`, `Next Steps`, `Competitor`).
The AI prompt that defines what to extract from calls.
Item category. Default: `CRM`.
Content type. Default: `text`.
Prompt type. Default: `base`.
Response type: `list` for multi-select. Omit for free-text responses.
For `list` response type: available options (e.g. `["Salesforce", "HubSpot"]`).
Description of this field.
Allow longer AI responses.
Include direct quotes from the call.
Maximum number of values for list responses.
Analysis scope: `conversation` (per-call, default) or `deal` (across all calls in a deal).
Position in the UI list. Lower numbers appear first.
***
### update\_intelligence\_item
Scope: `mcp:write`. Requires admin role.
Update a CRM prompt/field's title, prompt, response type, or options. Omitted fields preserve current values.
UUID of the intelligence item assignment.
Updated title.
Updated AI prompt.
Content type.
Prompt type.
Response type: `list` for multi-select.
Available options for list responses.
Description.
Allow longer AI responses.
Include direct quotes.
Max values for list responses.
Analysis scope: `conversation` or `deal`.
Position in the UI list.
***
### delete\_intelligence\_item
Scope: `mcp:write`. Requires admin role. Destructive.
Delete a CRM prompt/field from its collection. This is permanent.
UUID of the intelligence item to delete.
# Labels
Source: https://docs.attention.com/mcp/tools/labels
Manage label categories used to classify calls; apply or update labels on individual conversations.
Labels are the classification system Attention's AI uses to categorize calls (e.g. `Call Type` → `Discovery`, `Demo`, `Negotiation`). Each **label category** holds one or more **options**. Label categories can drive scorecard applicability, intelligence collection criteria, and reporting.
This group covers reading the catalog, managing categories and options (admin), and applying labels to individual conversations.
## Read tools
### list\_labels
Scope: `mcp:read`.
List label categories and their classification options. Each category contains options that Attention's AI uses to classify calls.
Filter labels by team ID. If omitted, returns all org labels.
Search labels by name (case-insensitive substring match).
Filter by AI flow status. `true` = only AI-classified labels, `false` = only manual labels.
**Returns:** Markdown list of label categories with description, AI flow status, team scope, and options.
## Category write tools
### create\_label
Scope: `mcp:write`. Requires admin role.
Create a new label category. A label category contains one or more options that Attention's AI classifies calls into.
The name of the label category.
Description of what this label represents.
The classification options within this category. Each entry: `{ "value": "Pricing Discussion", "description": "Optional context for the AI" }`. A label category needs at least one option to classify calls.
Must be `true` for the label to appear in the UI and classify calls. Defaults to `true`.
Apply to all teams. If `false`, use `team_ids`.
Team IDs this label applies to. Ignored if `all_teams` is `true`.
***
### update\_label
Scope: `mcp:write`. Requires admin role.
Update an existing label category, including its classification options. Omitted fields preserve current values. Note that `options` is **replace-all** — providing it overwrites every existing option.
The UUID of the label category.
New name.
New description. Set to empty string to clear.
Replace the classification options for this category.
Whether this category is active in AI classification.
Apply to all teams.
Team IDs this label applies to.
***
### delete\_label
Scope: `mcp:write`. Requires admin role. Destructive.
Delete a label category and all its options. This is permanent.
The UUID of the label category to delete.
## Conversation labels
### change\_conversation\_labels
Scope: `mcp:write`.
Apply or update labels on a specific conversation. Labels are passed as a key-value map where keys are label category names (use `list_labels` to see them).
UUID of the conversation to label.
Labels to set, as key-value pairs. Keys are label category names, values are the label values.
Example:
```json theme={null}
{ "Call Type": "Discovery", "Outcome": "Positive" }
```
Skip CRM intelligence refresh after the label change. Default: `false`.
# Organization
Source: https://docs.attention.com/mcp/tools/organization
Get an overview of your organization and update org-level settings.
These tools surface and configure organization-level state — high-level structure (teams, roles) and a small set of org-wide settings. Most workspace administration lives in the more specific groups: [Teams](/mcp/tools/teams), [Users & Roles](/mcp/tools/users-roles), [Labels](/mcp/tools/labels), [Scorecards](/mcp/tools/scorecards), [Forecasting](/mcp/tools/forecasting), [CRM](/mcp/tools/crm).
## Tools
### get\_org\_overview
Scope: `mcp:read`. No parameters.
Get a summary of your organization: available roles and team structure. Useful as a first call when an assistant needs context about how the workspace is organized.
**Returns:** A Markdown summary listing roles (with type and UUID) and the team hierarchy.
**Example prompt:** *"Give me an overview of how my organization is set up in Attention."*
***
### update\_org\_settings
Scope: `mcp:write`. Requires admin role.
Update organization settings. Only the customer-facing settings are exposed via MCP — internal flags and vocabulary are managed elsewhere. At least one field must be set.
Enable org-level call joining settings (which controls which meetings the recording bot joins).
Force all users to use the organization's bot image. When enabled, all users see the org bot avatar instead of their personal one.
**Returns:** A confirmation including the org name, ID, and the applied settings.
# Reports
Source: https://docs.attention.com/mcp/tools/reports
Pull usage and activity reports for your organization.
Reports surface aggregated activity metrics for your workspace — how many calls were viewed, coaching sessions held, comments left, snippets created, AI insights ran, and Super Agent queries made by each user over a given period. Use them to monitor adoption, build internal dashboards, or feed product analytics.
## Tools
### get\_usage\_report
Scope: `mcp:read`. Requires an **org-level API key** (OAuth tokens and user-level API keys are not supported).
Get a usage report showing per-user activity metrics for a date range. Returns one entry per user with their team, coaching sessions, calls viewed, comments left, snippets created, AI insights ran, and Super Agent usage (web and Slack).
Start date for the report period in `YYYY-MM-DD` format (inclusive).
End date for the report period in `YYYY-MM-DD` format (inclusive). Must be on or after `start_date`.
List of user UUIDs to filter the report. Leave empty to include all users in the org.
List of team UUIDs to filter the report. Leave empty to include all teams.
**Returns:** A Markdown summary with one section per user, including name, email, team, and activity metrics for the period. Returns an empty-state message when no usage data matches the filters.
**Example prompt:** *"Pull a usage report for the SMB team for last month — I want to see who's actually using coaching and Super Agent."*
# Scorecards
Source: https://docs.attention.com/mcp/tools/scorecards
Read scorecards and detailed criteria; create, update, and configure scorecards, items, and score ranges.
Scorecards drive how Attention's AI evaluates calls. A scorecard defines a set of weighted scoring items (criteria), an optional set of label-based filters (when does this scorecard apply?), and a numeric range (e.g. 1–5). The MCP server exposes a complete CRUD surface — list and inspect scorecards, create new ones, manage individual items, reorder them, and set the global range.
## Read tools
### get\_scorecards
Scope: `mcp:read`. No parameters.
List all scorecards used to evaluate calls in your organization, including their criteria and which teams they apply to.
**Returns:** Markdown list of scorecards with title, ID, status, and team assignments.
***
### get\_scorecard\_details
Scope: `mcp:read`.
Get detailed information about a specific scorecard — criteria, weights, team assignments, scoring scale, and evaluation instructions. Use the scorecard ID from `get_scorecards`.
The UUID of the scorecard to retrieve.
**Returns:** A full Markdown rendering of the scorecard: title, status, mode (standard / expert), prompt, instructions, interaction type, criteria filters, team assignments, and every item with its weight, scale, and criteria descriptions.
## Scorecard write tools
### create\_scorecard
Scope: `mcp:write`. Requires admin role.
Create a new scorecard. After creating, add scoring items with [`create_scorecard_item`](#create_scorecard_item).
The scorecard title.
Apply to all teams. If `false`, use `team_ids`.
Team IDs this scorecard applies to. Required when `all_teams` is `false`.
Interaction type: `conversation` (default), `chat`, or `email`.
Label-based filter that determines which calls this scorecard applies to:
* `operator`: `AND` (all must match) or `OR` (any must match).
* `conditions`: array of `{ "field": "Call Type", "value": "Discovery" }`.
Use [`list_labels`](/mcp/tools/labels#list_labels) to see available label categories and options.
AI prompt used to evaluate calls against this scorecard.
Formatting instructions for how the AI should structure its evaluation feedback.
Enable expert mode for per-item custom prompts.
***
### update\_scorecard
Scope: `mcp:write`. Requires admin role.
Update an existing scorecard's settings, criteria filters, or AI prompt. Use `get_scorecard_details` to see current values. Item-level changes (add/edit/delete/reorder) live in their own tools below.
The UUID of the scorecard to update.
New title.
Enable or disable the scorecard.
Apply to all teams.
Team IDs this scorecard applies to.
Interaction type: `conversation`, `chat`, or `email`.
Label-based filter conditions. Replaces all existing criteria.
AI prompt used to evaluate calls.
Evaluation instructions.
Enable expert mode.
## Scorecard item tools
Scorecard items are the individual scoring criteria within a scorecard.
### create\_scorecard\_item
Scope: `mcp:write`. Requires admin role.
Add a scoring criterion to a scorecard. Each item defines what the AI evaluates on a numeric scale (e.g. 1–5).
The UUID of the scorecard.
The scoring criterion title (e.g. `Effective Questioning`, `Need Discovery`).
Relative weight of this item in the overall score. Default: `1`.
Minimum score value. Default: `1`. Must match the scale of existing items in this scorecard.
Middle score value for 3-point anchor scales (e.g. `3` on a 1–5 scale). Must be strictly between `min` and `max`.
Maximum score value. Default: `5`.
Description of what the minimum score means. Required unless the scorecard is in expert mode.
Description of what the middle score means.
Description of what the maximum score means. Required unless the scorecard is in expert mode.
Custom AI prompt for this item. Only used when the scorecard's `expert_mode` is enabled.
***
### update\_scorecard\_item
Scope: `mcp:write`. Requires admin role.
Update a scoring criterion. Use `get_scorecard_details` to find item IDs.
The UUID of the scorecard item.
New title.
New weight.
New minimum score value.
New middle score value.
New maximum score value.
New description for the minimum score.
New description for the middle score.
New description for the maximum score.
New custom AI prompt for this item.
***
### delete\_scorecard\_item
Scope: `mcp:write`. Requires admin role. Destructive.
Remove a scoring criterion from a scorecard.
The UUID of the scorecard item to delete.
***
### update\_scorecard\_item\_order
Scope: `mcp:write`. Requires admin role.
Move a scorecard item to a new position within its scorecard. Items are reordered to accommodate the change.
UUID of the scorecard item to move.
New position (0-based index).
***
### update\_scorecard\_ranges
Scope: `mcp:write`. Requires admin role.
Set the score ranges (min, middle, max) for **all items** in a scorecard at once. Useful when migrating an existing scorecard from one scale to another.
UUID of the scorecard.
Minimum score value.
Middle score value for 3-point anchor scales.
Maximum score value.
# Snippets
Source: https://docs.attention.com/mcp/tools/snippets
Create shareable clips from call recordings.
Snippets are time-bounded clips of a call recording. They're useful for highlighting key moments — objection handling, pricing reveals, competitive mentions — and sharing them with teammates or saving them to a library.
## Tools
### create\_snippet
Scope: `mcp:write`.
Create a shareable snippet from a call recording. Provide both `start_time` and `end_time` to clip a specific time range, or omit both to use the full recording. The snippet can optionally be added to a library folder.
The call ID to create a snippet from.
UUID of the user who owns the snippet.
Whether the snippet is internal-only (`true`) or shareable externally (`false`).
Start time in seconds. Omit both `start_time` and `end_time` to use the full recording. Cannot be negative.
End time in seconds. Must be greater than `start_time`. Omit both `start_time` and `end_time` to use the full recording.
Optional snippet title. Auto-generated when omitted.
Optional notes to attach to the snippet.
Whether to notify viewers when the snippet is opened. Default: `false`.
When `true`, adds the snippet to the library. Use `library_folder_path` to specify the folder.
Library folder path when `in_library` is `true`. Omit for the root folder.
When `in_library` is `true`, set this to `true` to add the snippet to the user's personal library instead of the org library.
**Returns:** A Markdown summary including the snippet ID, conversation ID, optional title, and the time range.
**Example prompt:** *"Create a clip from my call with Acme between 12:30 and 14:00, title it 'Pricing Reveal', and add it to the Sales Snippets library folder."*
# Super Agent
Source: https://docs.attention.com/mcp/tools/super-agent
Chat with the autonomous Attention super agent — best for complex, open-ended questions that span search, CRM, and integrations.
The super agent is an autonomous Attention agent with broad access to search, CRM data, and other integrations. Unlike [`ask_attention`](/mcp/tools/ai-analysis#ask_attention) — which runs a focused analysis over a fixed list of calls — the super agent decides for itself which sources to query, runs as long as it needs, and may take multiple steps to reach an answer.
All super agent tools require **user-level authentication** (org-level API keys are not supported), since sessions are tied to a specific user.
When relaying super agent output, **always present the agent's responses to the user exactly as returned** — do not summarize, reinterpret, or rephrase them. The agent's wording, citations, and structure are intentional.
## Async response model
`send_super_agent_message` waits up to **15 seconds** for a synchronous response. If the agent is still working when the timeout hits, the tool returns `status: "processing"` along with a `session_id`. To get the final answer:
1. Poll [`get_super_agent_session_history`](#get_super_agent_session_history) every 15–20 seconds.
2. Inspect the last message — if its `role` is `assistant`, the response is ready.
3. If the user wants to stop early, call [`cancel_super_agent_processing`](#cancel_super_agent_processing).
## Tools
### send\_super\_agent\_message
Scope: `mcp:write`. Requires user-level authentication.
Send a message to the super agent. Creates a new session if no `session_id` is provided.
The message content to send to the super agent.
Existing session ID. If omitted, a new session is created automatically.
Optional timezone for context-aware responses (e.g. `America/New_York`).
**Returns:** Either the agent's response (synchronous case) or a `processing` status with the `session_id` (async case).
***
### list\_super\_agent\_sessions
Scope: `mcp:read`. Requires user-level authentication.
List your super agent chat sessions. Useful for resuming a prior conversation.
Optional search term to filter sessions by title.
Maximum number of sessions to return. Default: `50`. Maximum: `1000`.
***
### get\_super\_agent\_session\_history
Scope: `mcp:read`. Requires user-level authentication.
Get the message history for a session. Returns all user and assistant messages (excluding internal tool results). Use this to poll for the assistant's response after `send_super_agent_message` returns `processing`.
The session ID to retrieve message history for.
***
### cancel\_super\_agent\_processing
Scope: `mcp:write`. Requires user-level authentication.
Cancel in-progress super agent processing for a session. Use this when the user wants to stop a long-running query.
The session ID to cancel processing for.
Optional reason for cancellation.
***
### rename\_super\_agent\_session
Scope: `mcp:write`. Requires user-level authentication.
Update the title of a super agent session.
The session ID to rename.
The new title for the session.
***
### delete\_super\_agent\_session
Scope: `mcp:write`. Requires user-level authentication. Destructive.
Delete a super agent session and all its messages.
The session ID to delete.
# Teams
Source: https://docs.attention.com/mcp/tools/teams
List teams and their members; create, update, archive, and reorganize teams; add or remove team members.
Teams group users in Attention and control which calls, scorecards, and labels apply to them. Teams can be nested arbitrarily — every team has an optional parent, and the read tools return the full hierarchy.
Read tools (`list_teams`, `get_team`, `get_team_members`) require only `mcp:read`. All write tools require `mcp:write` **plus** the admin role.
## Read tools
### list\_teams
Scope: `mcp:read`. No parameters.
List all teams in your organization with their structure and sub-teams.
**Returns:** A Markdown tree of teams with IDs, names, and parent relationships.
**Example prompt:** *"What teams do we have in Attention?"*
***
### get\_team
Scope: `mcp:read`.
Get details about a specific team, including its sub-teams. Use the team ID from `list_teams`.
The team ID.
**Returns:** Team details (name, parent team, sub-teams).
***
### get\_team\_members
Scope: `mcp:read`.
List all members of a specific team — names, emails, and roles.
The team ID.
**Returns:** Markdown list of team members with names, emails, and roles.
## Write tools
### create\_team
Scope: `mcp:write`. Requires admin role.
Create a new team in your organization. Teams organize users and control which calls, scorecards, and labels apply to them.
The team name. Will be prefixed with the organization name automatically (e.g. `Sales` becomes `[Acme Corp] Sales`).
UUID of the parent team. Omit for a top-level team. Use `list_teams` to find team IDs.
**Returns:** ID, name, and parent team of the newly created team.
***
### update\_team
Scope: `mcp:write`. Requires admin role.
Update a team's name or parent team. Omitted fields preserve their current values.
The UUID of the team to update.
New team name.
New parent team UUID. Use `list_teams` to find team IDs.
***
### archive\_team
Scope: `mcp:write`. Requires admin role.
Archive or unarchive a team. Archived teams are hidden from most views but their data is preserved — this is reversible.
The UUID of the team.
Set to `true` to archive, `false` to unarchive.
***
### change\_team\_parent
Scope: `mcp:write`. Requires admin role.
Move a team under a different parent team, or make it top-level by omitting `parent_team_id`. Use `list_teams` to see the current hierarchy.
UUID of the team to move.
UUID of the new parent team. Omit to make the team top-level.
***
### add\_team\_member
Scope: `mcp:write`. Requires admin role.
Add a user to a team. Provide either `user_id` or `user_email`.
The UUID of the team to add the member to.
UUID of the user to add. Provide either `user_id` or `user_email`.
Email of the user to add. Provide either `user_id` or `user_email`.
UUID of the role to assign. If omitted, the user's default role is used. Use [`list_roles`](/mcp/tools/users-roles#list_roles) to find role IDs.
Whether this should be the user's primary team.
***
### remove\_team\_member
Scope: `mcp:write`. Requires admin role.
Remove a user from a team. Use `get_team_members` to find user IDs.
The UUID of the team.
UUID of the user to remove from the team.
# Users & Roles
Source: https://docs.attention.com/mcp/tools/users-roles
List users and roles; update profiles and team memberships; manage user roles and lifecycle; send and manage invitations.
This group covers everything related to users in your Attention org: listing reps and roles, updating user profiles, changing team memberships, assigning roles, deactivating and reactivating accounts, and managing pending invitations.
Several tools require **user-level authentication** (not org-level API keys) — these are flagged below. The reason is that they perform actions tied to a specific actor (e.g. invitation emails include the inviter's name).
## Read tools
### list\_reps
Scope: `mcp:read`.
List all users (reps, managers, admins) in your organization. Optionally filter by email, ID, or team.
Filter by user email address.
Filter by user ID.
Filter by team ID.
Include soft-deleted (deactivated) users.
**Returns:** Markdown list of users with names, emails, roles, and team memberships.
***
### list\_roles
Scope: `mcp:read`. No parameters.
List all roles defined in your organization with their type (`admin`, `manager`, or `sales_rep`). Use this before assigning roles via `manage_user_role` or `update_user`.
**Returns:** Markdown list of roles with name, type, and UUID.
***
### list\_invitations
Scope: `mcp:read`.
List pending invitations in your organization. Shows email, team, role, seat type, and expiration status.
Page number. Default: `1`.
Page size. Default: `20`. Maximum: `50`.
Filter invitations by email address (exact match).
Filter invitations by team ID.
## User write tools
### update\_user
Scope: `mcp:write`. Requires admin role.
Update a user's profile, role, or seat type. Omitted fields preserve current values (read-before-write merge).
The UUID of the user to update.
New first name.
New last name.
UUID of the role to assign. Use `list_roles` to find role IDs.
Seat type: `recording` (can record calls) or `listener` (view-only).
Custom name for the user's recording bot.
Whether deal/pipeline features are enabled for this user.
***
### update\_user\_teams
Scope: `mcp:write`. Requires admin role.
Add or remove a user from teams in a single operation. Can also set the user's primary team. At least one of `teams_to_add` or `team_ids_to_remove` is required.
The UUID of the user.
Teams to add the user to. Each entry: `{ "team_id": "...", "primary": false }`. Only one team can be primary.
Team UUIDs to remove the user from.
## Role and lifecycle tools
### manage\_user\_role
Scope: `mcp:write`. Requires admin role.
Assign or remove a role for a user. Use `list_roles` to find available role IDs.
Action to perform: `set` to assign, `remove` to remove.
UUID of the user.
UUID of the role.
***
### delete\_user
Scope: `mcp:write`. Requires admin role and **user-level authentication** (org-level API keys are not supported). Destructive but reversible via `reactivate_user`.
Soft-delete (deactivate) a user. The user loses access immediately but can be reactivated later. Their team memberships are preserved.
UUID of the user to deactivate.
***
### reactivate\_user
Scope: `mcp:write`. Requires admin role.
Reactivate a previously deactivated user. Restores their access and team memberships.
UUID of the user to reactivate.
## Invitation tools
### invite\_user
Scope: `mcp:write`. Requires admin role and **user-level authentication** (org-level API keys are not supported — the invitation email includes the inviter's name).
Invite a user to your organization by email. The recipient receives an email invitation to join the specified team with the given role.
Email address of the user to invite.
Role UUID to assign. Use `list_roles` to get available role IDs.
Team UUID to add the user to. Use [`list_teams`](/mcp/tools/teams#list_teams) to get available team IDs.
Seat type: `listener` (view-only) or `recording` (can record calls).
***
### update\_invitation
Scope: `mcp:write`. Requires admin role and **user-level authentication**.
Update a pending invitation's seat type. Only pending (not yet accepted) invitations can be updated.
UUID of the invitation to update.
New seat type: `listener` or `recording`.
***
### delete\_invitation
Scope: `mcp:write`. Requires admin role and **user-level authentication**. Destructive.
Delete a pending invitation. Only pending (not yet accepted) invitations can be deleted.
UUID of the invitation to delete.
# Welcome to Attention ⚡️
Source: https://docs.attention.com/welcome
Enterprise-grade AI for Sales: Automate work out of your sales conversations
### How to use this guide
Best for **Admins + Managers**
How to get your team set up and fully running on Attention.
Best for **Sales Reps**
Learn Attention's core features and start taking action on your call data.
As always, if you have additional questions, reach out to your Attention account manager over Slack or email.
# Create Call Labels
Source: https://docs.attention.com/workspace-setup/call-labels
Set up label categories that Attention fills in on every call, then use them to filter calls, target scorecards and start workflows.
Call labels sort your calls into categories you define, such as *Call Type* or *Competitor*. Each label category has a prompt and a list of options. After each call, Attention reads the conversation and picks the option that fits. When none fits, the label shows **Not Set**.
## 1. Open Call Labels
1. Click your name at the bottom of the sidebar, then **Settings**.
2. Select **Call Labels** in the settings menu.
Your categories are listed under **Active call tags**, each with the teams it applies to and its number of options.
## 2. Add a label category
1. Click **Add label category**.
2. In **Category Title**, name the category, for example *Call Type*.
3. In **Teams**, choose the teams whose calls get this label, or check **All Teams**.
4. In **Category AI Prompt**, describe what the category captures, for example *"The stage of the sales cycle this call belongs to."*
## 3. Add the options
Under **Label Options**, click **Add Label Option** once for each value Attention can choose. Fill in both fields of each option:
* **Label**: the value that shows on the call, for example *Discovery*.
* **AI Prompt**: when Attention should pick it, for example *"Assign this label if the rep asks diagnostic questions about the prospect's needs."*
Attention picks one option per call, so give each option a prompt that doesn't overlap with the others. If you add no options, Attention writes the value itself.
## 4. Test the prompt
Under **Test your prompt**, pick a past call in **Select Conversation** and click **Test**. Attention shows the option it would pick for that call. Adjust the prompts and test again until the results look right.
## 5. Save
Click **Save changes**. From now on, Attention labels every new call from the selected teams. Calls processed before you saved keep the labels they already have.
## Edit or delete a category
* **Edit**: click the category in the list. **Edit Label Category** opens with the same fields. Make your changes and click **Save changes**. They apply to calls processed after you save.
* **Delete**: open the **⋮** menu on the category, click **Delete**, then confirm.
Deleting a label category can't be undone.
## Where labels are used
* **On a call.** On a call's page, the labels sit under the call title. To correct one, click it and pick another option, or **Not Set**. For a label without options, type the new value and press **Enter**. Attention confirms with **Label updated**.
* **In All Calls.** Go to **Conversations → All Calls**. In the filters panel, open **Call Tags**, expand a category and check the values you want to see. Check **Not Set** to find calls where the label wasn't set.
* **In scorecards.** In a scorecard template, click **Change** under **Apply scorecard to** and pick label values. The scorecard then runs only on calls that match **any** or **all** of them. See [Build a Scorecard Template](/workspace-setup/create-scorecards).
* **In workflows.** The **Labels Changed** trigger starts a workflow when someone changes a call's labels. See [Attention Triggers](/builder-101/triggers/attention-triggers#labels-changed).
# Build a Scorecard Template
Source: https://docs.attention.com/workspace-setup/create-scorecards
Create scorecard templates that grade your team's calls against the criteria you define.
A scorecard template tells Attention which calls to grade, on what scale, and against which criteria. To read the results on a call, see [Scorecards on a call](/core-features/scorecards-on-a-call).
## 1. Open Scorecard Templates
1. Click your name at the bottom of the sidebar and select **Settings**.
2. Select **Scorecard Templates** in the settings menu.
The page lists every template in your organization, with the number of templates that are on next to **Active scorecards**.
## 2. Create the template
1. Click **Add scorecard**.
2. Enter a **Title**, for example *Discovery Call*.
3. Under **Teams**, select the teams whose calls this template grades, or check **All teams** to include every current and future team. A call counts for the primary team of the rep who owns it.
4. **Apply scorecard to** shows **All Conversations**, so every call from those teams is graded. To grade only calls with certain [call tags](/workspace-setup/call-labels), click **Change**:
1. Next to **Calls that match**, choose **all** (a call needs every tag you pick) or **any** (one is enough). With **all**, you can pick one value per tag.
2. Pick the tag values in **Select call tags**.
3. Click **Save**.
5. Click **Add**.
The template opens, ready for its scale and fields. It is on from the start. A template only scores new calls: it doesn't go back over calls from before you created or changed it, and the app has no option to re-score them.
## 3. Set the scale
Under **Field Properties**, choose the **Min score** and the **Max Score**. New templates go from 1 to 5, and the maximum can go up to 100. To add a midpoint with its own description, pick a **Mid Score (Optional)**.
The scale applies to every field in the template. If you change it later, all fields switch to the new scale.
## 4. Add fields
Each field is one criterion, such as a skill or behavior, that Attention grades on each call.
1. Click the **+** button next to **Fields**. The **Add Field** panel opens.
2. Enter a **Field Title**, for example *Identify Pain*.
3. Under **Minimum score** and **Maximum score**, describe what a call at each end of the scale looks like. Each box shows an example to start from. If the template has a mid score, describe **Middle score** too.
4. *(Optional)* Change the **Score Weight**. Each field starts at 1. The template's overall score is a weighted average, so a field with a higher weight counts more.
5. Click **Add**.
Repeat for each criterion. In the **Fields** list, drag a field to change the order, click its title to edit it, or open its **⋯** menu and select **Delete** to remove it.
## 5. Write the template prompts
Below **Field Properties**, three optional prompts apply to the whole template. Each one saves when you click outside the box.
* **Scorecard Prompt**: describe the purpose of the scorecard, such as the type of call and what a good one looks like. Attention takes it into account for every field.
* **Formatting Prompt**: the format of the feedback under each field's score. Leave it blank to use Attention's default format. To replace Attention's formatting instructions entirely with yours, turn on **Use only this format prompt**.
* **Summary Takeaways Rules**: the rules for the short takeaways that summarize the scorecard on a call. Leave it blank to use the default rules.
While you edit **Formatting Prompt** or **Summary Takeaways Rules**, **Reset prompt to default** puts back the default text.
## 6. Test a field
The **Add Field** and **Edit Field** panels end with **Test your prompt**, which runs the field on a past call before you save it.
1. Once the field has a title and its score descriptions, choose a call in **Select Conversation**. Type to search for it.
2. Click **Test**.
Attention shows the score and the feedback that call would get. The test uses the field as it is in the panel, together with the template prompts already saved, and doesn't save anything. Adjust the descriptions and test again until the result looks right.
## 7. Turn a template on or off
On the **Scorecard Templates** page (click **All scorecard templates** to go back), each template has a switch. Turn it off to stop grading calls with that template, and on again to resume.
## 8. Edit, duplicate or delete a template
On the template's page, open the **⋯** menu next to its title:
* **Edit** opens the **Edit Scorecard** dialog. Change the title, the teams or the call tags, then click **Update**. **Interaction type** sets what the template grades: **Conversation** (calls, the default) or **Email**.
* **Duplicate** creates a copy named after the original with **(Copy)** at the end and opens it. The copy keeps the teams, call tags, fields and prompts, and it is on if the original is.
* **Delete** opens **Delete scorecard template**. Click **Delete scorecard** to confirm. The template stops grading new calls, and the results it already produced stay available for reporting. You can't restore a deleted template.
You can also delete a template from the **⋯** menu on its row in the **Scorecard Templates** list.
# Set Up CRM Field Configurations (V1)
Source: https://docs.attention.com/workspace-setup/crm-config
Define the fields Attention fills in from your calls, then send them to your CRM with a workflow.
Attention has two versions of the field configuration screen. This page covers **V1**: fields have an **Analysis Scope** setting, and a workflow sends their values to your CRM. If your **New configuration** dialog has a **Push to CRM** switch, you're on **V2**: see [Set Up CRM Field Configurations (V2)](/workspace-setup/crm-field-configurations-push-to-crm).
A field configuration is a set of fields that Attention fills in from your calls, such as next steps, budget or competitors. A workflow then sends those values to the matching fields in your CRM.
## 1. Create a field configuration
1. Click your name at the bottom of the sidebar, then **Settings**.
2. Click **CRM Settings**.
3. In **CRM field configurations**, click **New configuration**.
4. In **Add CRM field configuration**, enter a **Title**.
5. Choose the **Teams** whose calls this configuration covers, or check **All teams**.
6. Under **Apply field configuration to**, the default is **All Conversations**. To use the configuration only on some calls, click **Change**, choose whether calls must match **all** or **any** of the call tag values, select the values and click **Save**. Call tags come from your [call labels](/workspace-setup/call-labels).
7. Click **Create Field Configuration**.
The configuration page opens.
## 2. Add a field
1. On the configuration page, click **Add Field**.
2. Enter a **Name** for the field.
3. Choose a **Type**:
* **Free Text**: any text answer.
* **Picklist**: a set of options. Under **Picklist Details**, enter each option on its own line, using the same values as your CRM picklist. Check **Multi-select** if more than one option can apply.
4. Choose an **Analysis Scope**:
* **Analyze entire deal**: reads every call linked to the deal. If no deal is linked, only this call is analyzed. This is the default.
* **Analyze conversation**: reads only this call.
5. Write the **Prompt**: tell Attention what to pull from the call and how to format the answer. Click **Optimize** to have Attention improve it.
6. Under **Test your prompt**, pick a past conversation and click **Test** to see the result.
7. Click **Save**.
Repeat for each field you need. The fields appear under **Active fields**. Drag them to change their order, or click a field to edit it.
To rename the configuration or change its teams or calls, open the menu next to its name at the top of the configuration page and click **Edit settings**.
## 3. Send the fields to your CRM with a workflow
Connect your CRM first, as described in [Salesforce](/workspace-setup/salesforce-integration) or [HubSpot](/workspace-setup/hubspot-integration).
1. Go back to **CRM Settings**.
2. In **Connect Attention fields to CRM fields with workflows**, click **Add workflow**.
3. Enter a **Name** and click **Create**. The workflow opens, already turned on and with a trigger as its first step.
4. Click the trigger step to open **Select Workflow Trigger**, then choose when the workflow runs:
* **User exports Fields from Attention**: reps review the values in the call's **CRM** tab and click **Update Records** to send them. This is the default.
* **Conversation finished**: values are sent automatically when the call finishes, with no action from the rep.
* **Conversation finished or User exports Fields from Attention**: values are sent automatically, and reps can also send them from the **CRM** tab.
5. Click **+** below the trigger, choose your CRM, then **Update … Fields** (for example, **Update Salesforce Fields**).
6. In **Update Platform Record**, choose the **Connection**, the **Object** to update (for example, an opportunity) and the **Field Configuration** you created.
7. Under **Field Mappings**, click **+** for each field. Pick the CRM field under **Connection Field** and the matching Attention field under **Attention Field**.
8. Click **Add**.
The switch next to the workflow name turns it on or off.
## 4. See it in action
After a call, Attention fills in every field in the configuration. You'll find the values in the call's **CRM** tab.
* With **Conversation finished**, your CRM is updated with no rep action.
* With **User exports Fields from Attention**, reps check the values and click **Update Records**.
To learn more about the rep side, see [Update Your CRM from a Call](/core-features/crm-sync).
Need help? Contact [support@attention.com](mailto:support@attention.com).
# Set Up CRM Field Configurations (V2)
Source: https://docs.attention.com/workspace-setup/crm-field-configurations-push-to-crm
Choose the fields Attention fills in from your calls and push their values to your CRM automatically or manually.
Attention has two versions of the field configuration screen. This page covers **V2**: the **New configuration** dialog has a **Push to CRM** switch, and new fields let you choose **CRM field** or **Custom Attention field**. If your fields have an **Analysis Scope** setting and you send them to your CRM with workflows, you're on **V1**: see [Set Up CRM Field Configurations (V1)](/workspace-setup/crm-config).
A field configuration is a set of fields that Attention fills in from your calls. For each one, you choose which calls it covers, whether and how its values are pushed to your CRM, and the prompt Attention uses for each field.
## 1. Open CRM Field Configurations
1. Click your name at the bottom of the sidebar, then **Settings**.
2. Click **CRM Settings**.
3. Scroll to **CRM Field Configurations** and click **New configuration**.
The **Add CRM field configuration** dialog opens.
## 2. Set up the configuration
1. Enter a **Title**.
2. **Teams** has all your teams selected. Remove any whose calls this configuration should not cover.
3. Under **Apply field configuration to**, choose:
* **All conversations** to fill in the fields on every call.
* **Specific call tags** to fill them in only on some calls. Choose whether calls must match **any** or **all** of the tags, then select the call tag values. Call tags come from your [call labels](/workspace-setup/call-labels). If your organization has no call tags yet, this section shows **Set up call tags** instead.
4. To send the values to your CRM, turn on **Push to CRM** and fill in:
* **Push mode**, which decides when values are sent (see below). The default is **Automatic**.
* **CRM account**, if you have connected more than one CRM account.
* **CRM object**, the record type the values are written to, such as an opportunity or deal.
5. Click **Create Field Configuration**.
The configuration page opens, ready for its first field.
### Push modes
| Push mode | What happens |
| - | - |
| **Manual** | Nothing is sent on its own. Reps review the values in the call's **CRM** tab and click **Update Records** to send them. |
| **Automatic** | Attention sends the values to your CRM as soon as it has analyzed the call. |
| **Automatic or manual** | Attention sends the values once it has analyzed the call, and reps can also send them from the call's **CRM** tab with **Update Records**. |
Leave **Push to CRM** off if you want the fields to stay in Attention only. You can then add only Custom Attention fields.
## 3. Add a field
1. On the configuration page, click **Add Field**.
2. Under **Field type**, choose:
* **CRM field** to fill in fields that already exist in your CRM. To use it, turn on **Push to CRM** and choose the CRM account and object first. Use **Add destination** to pick one or more CRM fields from the CRM object you chose. The field takes the name of the first CRM field you add.
* **Custom Attention field** to create a field that only exists in Attention. Enter a **Name**. Custom fields stay in Attention and aren't synced to your CRM, unless you link them to a CRM field under **Linked CRM fields (optional)**.
3. Choose a **Type**: **Free Text**, **Picklist**, **Checkbox** or **Date**. For a picklist, enter each option on its own line, using the same values as your CRM picklist.
4. For a CRM field, check **Data validation**. It lists the rules the value must follow, such as the data type, the allowed values and whether one or several values can be picked. Click **Edit**, change **Data type** or the selection, then click **Save**.
5. Under **Analyze**, choose which calls Attention reads to fill in the field:
* **Entire deal**: every call in the deal. If no deal is linked, just this call. This is the default.
* **This call only**: only what was said in this call.
6. Write the **Prompt**: tell Attention what to pull from the call and how to format the answer. Click **Optimize** to have Attention improve it.
7. Under **Test your prompt**, pick a past conversation and click **Test** to see the result.
8. Click **Add**.
Repeat for each field you need.
## 4. Manage the configuration
The configuration page lists its fields under **Active fields**.
* **Reorder fields** by dragging them.
* **Edit a field** by clicking it, or open its menu and click **Edit**. Open the menu and click **Delete** to remove it.
* **Change the configuration's settings** (title, teams, calls or push to CRM) from the menu next to its name at the top of the page: click **Edit settings**, make your changes and click **Save changes**. Click **Delete** in the same menu to remove the configuration.
Turning off **Push to CRM** on an existing configuration removes its CRM push and all of its field mappings.
Need help? Contact [support@attention.com](mailto:support@attention.com).
# Google Integration
Source: https://docs.attention.com/workspace-setup/google-integration
Configure Google Workspace to work with Attention
You must be a Google Workspace Admin to configure Attention as an authorized app.
# Authorizing Attention as a Trusted App
To authorize Attention as a trusted third-party app in your Google Workspace:
1. Go to **Security > Access and data control > API controls**.
2. Click **Manage Third-Party App Access**.
3. Add **Attention** and set it to **Trusted**.
For more details, see [Google's documentation on controlling third-party app access](https://support.google.com/a/answer/7281227?hl).
# Permissions
Attention requires the following OAuth scopes to provide its full functionality. Scopes are organized by sensitivity level as defined by Google.
Attention does not require all scopes at once. The specific scopes requested depend on which features you use, such as calendar sync, email sync, or Workflows integrations. Refer to the "Used By" column to see which scopes apply to your setup.
## Non-sensitive Scopes
| Scope | Description | Used By |
| - | - | - |
| `/auth/userinfo.email` | See your primary Google Account email address | All Google integrations |
| `/auth/userinfo.profile` | See your personal info, including any personal info you've made publicly available | All Google integrations |
| `/auth/drive.file` | See, edit, create, and delete only the specific Google Drive files you use with this app | Google Docs agent tools (Workflows) |
## Sensitive Scopes
| Scope | Description | Used By |
| - | - | - |
| `/auth/calendar.events.readonly` | View events on all your calendars | Calendar sync |
| `/auth/calendar.readonly` | See and download any calendar you can access using your Google Calendar | Calendar sync |
| `/auth/calendar.events` | View and edit events on all your calendars | Calendar (Workflows) |
| `/auth/forms.responses.readonly` | See all responses to your Google Forms forms | Google Forms (Workflows) |
| `/auth/tasks` | Create, edit, organize, and delete all your tasks | Google Tasks (Workflows) |
| `/auth/gmail.send` | Send email on your behalf | Email sending (Workflows) |
| `/auth/contacts` | See, edit, download, and permanently delete your contacts | Contact sync (Workflows) |
| `/auth/cloud-platform` | See, edit, configure, and delete your Google Cloud data and see the email address for your Google Account | Google Cloud (Workflows) |
| `/auth/chat.spaces` | Create conversations and spaces and see or update metadata (including history settings and access settings) in Google Chat | Google Chat (Workflows) |
| `/auth/chat.memberships` | See, add, update, and remove members from conversations and spaces in Google Chat | Google Chat (Workflows) |
| `/auth/directory.readonly` | See and download your organization's Google Workspace directory | Workspace directory (Workflows) |
| `/auth/bigquery` | View and manage your data in Google BigQuery and see the email address for your Google Account | BigQuery (Workflows) |
## Restricted Scopes
### Gmail Scopes
| Scope | Description | Used By |
| - | - | - |
| `/auth/gmail.readonly` | View your email messages and settings | Gmail sync, Gmail (Workflows) |
| `/auth/gmail.compose` | Manage drafts and send emails | Email drafts |
### Chat Scopes
| Scope | Description | Used By |
| - | - | - |
| `/auth/chat.messages` | See, compose, send, update, and delete messages as well as their message content; add, see, and delete reactions to messages | Google Chat (Workflows) |
# Integrate Attention with HubSpot
Source: https://docs.attention.com/workspace-setup/hubspot-integration
Connect your HubSpot account to enable 2-way sync with Attention
You must be an Attention Admin to be able to manage CRM integrations, including HubSpot.
Likewise, you must be a HubSpot Super Admin — or a user with **App Marketplace Access** permissions — to be able to connect Attention to your HubSpot account.
# What the integration does
Attention is an AI platform for revenue teams: it records and analyzes sales calls, scores them, and turns conversations into structured CRM data. Connecting HubSpot enables a 2-way sync:
* **HubSpot → Attention**: Attention syncs your deals, companies, contacts, leads, owners, and pipelines so calls are automatically matched to the right records, and so deal boards and forecasting reflect live CRM data.
* **Attention → HubSpot**: Attention writes AI-generated insights from your calls back to the HubSpot properties you choose — no manual data entry. Reps can also push updates manually, and Attention Builder workflows can create or update records (contacts, deals, companies, tickets) as automation steps.
Common use cases:
* Auto-populate deal and contact properties (next steps, pain points, competitors, MEDDIC fields) after every call.
* Keep forecasts and deal boards in Attention synchronized with HubSpot pipelines and stages.
* Filter and analyze calls in Attention by the HubSpot records they relate to.
# Connect HubSpot to Attention
CRM integrations are managed from the **CRM Settings** page, which brings the integration, field selection, AI field configurations, and CRM workflows together in one place.
1. Log into [Attention](https://app.attention.tech) as an Admin.
2. Click on your name on the top left corner.
3. Select **⚙️ Settings** from the dropdown.
4. In the **Settings** page, select **CRM Settings** on the left sidebar.
5. In the **CRM integration & sync** section, click **Add your CRM**.
6. Select **HubSpot** in the **Integrate your CRM** dialog.
7. A new window will open with an **Authorize HubSpot** step. Click **Continue** to be taken to HubSpot.
8. Log into HubSpot if prompted. If your login has access to more than one HubSpot account, select the account you want to connect and click **Choose Account**.
9. HubSpot will show the permissions Attention is requesting (see the scope list below). Review them and select **Connect app**.
10) The window closes and you are returned to Attention, where the HubSpot card now appears under **CRM integration & sync**, showing how many record types and fields are synced.
Once connected, Attention starts an initial sync of your HubSpot data. Deals, companies, contacts, leads, owners, and pipelines are synced with a default set of properties; depending on the size of your HubSpot account, the initial sync can take from a few minutes to a few hours. After that, changes in HubSpot are picked up continuously.
If you don't see **CRM Settings** in the sidebar, your Attention user doesn't have management access — ask an Attention Admin in your organization to connect the integration.
# Required HubSpot access scopes
Attention requests the following OAuth scopes. HubSpot displays this list on the approval screen during installation.
| Scope | Purpose |
| - | - |
| `oauth` | Basic OAuth access — identifies the connected account and keeps the connection alive without re-authentication |
| `crm.objects.deals.read` / `crm.objects.deals.write` | Sync deals into Attention (deal boards, forecasting, call matching) and write AI-generated properties back to deals |
| `crm.objects.companies.read` / `crm.objects.companies.write` | Sync companies for account matching and write company properties back |
| `crm.objects.contacts.read` / `crm.objects.contacts.write` | Match call participants to contacts and create or update contacts from workflows |
| `crm.objects.leads.read` / `crm.objects.leads.write` | Sync leads for call matching and lead-based workflows |
| `crm.objects.owners.read` | Read owners so records and calls can be attributed to the right reps (matched by email) |
| `crm.objects.users.read` | Read user identifiers for reporting and attribution |
| `crm.objects.line_items.read` / `crm.objects.line_items.write` | Read and update line items on deals when workflows reference them |
| `crm.objects.custom.read` / `crm.objects.custom.write` | Sync custom objects for organizations that map Attention data to them |
| `crm.objects.listings.read` / `crm.objects.listings.write` | Support HubSpot industry objects (listings) for organizations that use them |
| `crm.objects.services.read` / `crm.objects.services.write` | Support HubSpot industry objects (services) for organizations that use them |
| `crm.extensions_calling_transcripts.write` | Attach call and transcript data through HubSpot's calling extension |
| `tickets` | Let Attention Builder workflows create and update support tickets |
Attention only reads the objects and properties enabled for your organization, and only writes the properties you explicitly map. Scopes define the maximum access HubSpot allows — not what Attention does by default.
# Configure the integration
Everything below lives on the same **Settings → CRM Settings** page:
1. **Choose synced record types and properties.** On the HubSpot card, click **Manage** (labelled **Select fields to sync** right after connecting). Attention enables a default set of properties per object (e.g. deal name, amount, close date, stage, owner); enable any additional properties you want available in deal boards, filters, and AI field mapping.
2) **Map AI-generated fields.** In the **CRM field configurations** section, follow [Create & Map CRM Fields](/workspace-setup/crm-config) to define the fields Attention should extract from calls and map each one to a HubSpot property. Pick-list values must match your HubSpot property options exactly.
3) **Pick a sync trigger.** In the **Connect Attention fields to CRM fields with workflows** section, add a workflow and choose **Conversation finish** to update HubSpot automatically after each call, or **User action → Update CRM** to let reps review and push updates manually from the call sidebar.
# Day-to-day usage
* **Automatic**: with a **Conversation finish** trigger, HubSpot properties update within minutes of a call ending — no rep action required. Deal boards and forecasts in Attention stay in sync with HubSpot as deals progress.
* **Manual**: reps click **Update CRM** in the call sidebar to review AI-suggested values before pushing them to HubSpot.
* **Workflows**: [Attention Builder](/builder-101/getting-started) workflows can read and write HubSpot records as action steps — for example, creating a follow-up ticket or updating a deal stage when a call meets certain criteria.
See [CRM Sync](/core-features/crm-sync) for how synced records appear throughout Attention.
# Disconnect or uninstall
## Disconnect from Attention
1. Go to **Settings → CRM Settings**.
2. On the HubSpot card under **CRM integration & sync**, open the card menu and select **Delete integration**.
3. Confirm in the **Delete integration** dialog. This action cannot be undone from the UI — reconnecting requires going through the OAuth flow again.
Disconnecting stops all syncing immediately — Attention no longer reads from or writes to your HubSpot account.
## Uninstall from HubSpot
You can also revoke access from the HubSpot side:
1. In HubSpot, go to **Settings → Integrations → Connected Apps**.
2. Find **Attention** and select **Uninstall**.
This revokes Attention's OAuth tokens; syncing stops immediately.
## What happens to your data
* **Data in HubSpot**: nothing is deleted. Properties Attention wrote to your records remain in HubSpot.
* **Data in Attention**: previously synced HubSpot records are retained so existing call associations and analytics keep working. To have synced HubSpot data deleted from Attention, contact [support@attention.com](mailto:support@attention.com).
* Reconnecting later re-runs the initial sync and resumes where you left off.
# Support
If the connection expires or stops syncing (for example, after the connecting user's HubSpot access changes), use **Reconnect** on the HubSpot card in **Settings → CRM Settings** to re-run the OAuth flow without losing your configuration.
For anything else, reach out to [support@attention.com](mailto:support@attention.com) or your Attention point of contact.
# Manage Users, Roles & Seats in Attention
Source: https://docs.attention.com/workspace-setup/inviting-users
Invite teammates, assign roles, and control recording seats from User Management.
## Video Walkthrough
## Open User Management
1. Click **Settings → Organizational settings → User Management**.
2. You’ll see a list of **Users**, their **Team**, **Role**, and **Seat type** at a glance.
## Invite new teammates
1. In **User Management**, click **Invite team member**.
2. Fill in:
* **Email address**
* **Team** – e.g., *Sales*, *Account Management*, *Customer Success*.
* **Role** – choose **Sales Rep**, **Manager**, or **Admin** (see differences below).
* **Seat type** – **Recording seat** or **Listener seat** (details below).
3. Hit **Send invite**. The user gets an email to activate their account.
## Re-assigning and deactivating users
* Once users have been invited and onboarded to Attention, you can change their Team, Role, and Seat Type
* To deactivate users, click the ⋯ icon next to Seat Type
# Add Attention to Microsoft Teams
Source: https://docs.attention.com/workspace-setup/microsoft-teams-integration
Bring Attention's conversational insights and agents into Microsoft Teams.
# Overview
Install Attention's Microsoft Teams app to interact with Attention agents and receive workflow outputs directly in your Teams channels and chats.
This page covers the **Attention app and agent inside Microsoft Teams**. It does not cover recording Teams meetings — for that, see the [Desktop App](/core-features/desktop-app) guide.
Note: Installing the app requires a **Microsoft Teams administrator**, or someone with permission to approve new apps in your organization's app catalog. Most end users cannot install it themselves.
## Before you start
Microsoft Teams must be enabled for your Attention organization before the option appears in your settings. If you do not see **Microsoft Teams** in the integrations list, contact your Attention account manager — this is enabled on the Attention side, not something you can turn on yourself.
# Configuration
## Step 1: Install the Attention app in Microsoft Teams
Install the app from the Microsoft marketplace listing:
[Attention AI on the Microsoft Marketplace](https://marketplace.microsoft.com/en-us/product/WA200011412)
Your Teams administrator may need to approve it in your organization's app catalog before it becomes available to your team.
## Step 2: Connect Microsoft Teams to Attention
Choose the option that matches what you want to do.
### Option 1: Create a Microsoft Teams connection for the Attention Builder
Use this to build workflows that post to Teams, create channels, or react to channel messages.
1. Click on your name on the top left corner.
2. Select **⚙️ Settings** from the dropdown.
3. In the **Settings** page, select **Builder** on the left sidebar.
4. Select a workflow.
* Alternatively, create a new workflow by selecting **➕ Create workflow** on the top right corner.
5. In the workflow builder, select the ➕ icon to add a new node. Search for Microsoft Teams.
6. In the node configuration window on the right, click **Create Connection**.
7. Name your connection and select **Connect**.
8. Follow the Microsoft authorization flow and click **Accept** when prompted.
### Option 2: Connect the Microsoft Teams Attention Super Agent via the Integrations Settings Page
Use this to talk to your Attention agent inside Teams.
1. Click on your name on the top left corner.
2. Select **⚙️ Settings** from the dropdown.
3. In the **Settings** page, select **Integrations** on the left sidebar.
4. Select **➕ Add integration** on the top right corner.
5. Select the Microsoft Teams integration option.
6. Follow the Microsoft authorization flow and click **Accept** when prompted.
Once the connection is created, the agent is ready in direct messages immediately.
## Step 3: Add the Attention app to a channel
Direct messages work as soon as the connection exists. To use the agent **in a channel**, the app has to be added to that channel first:
1. Open the channel in Microsoft Teams.
2. Select the **+** icon to add an app to the channel.
3. Search for **Attention AI** and add it.
You only need to do this in the channels where you want to mention the agent. Direct messages need no additional configuration.
# Using the agent
* **Direct message** — open a chat with Attention and ask your question.
* **In a channel** — mention `@Attention AI` followed by your question.
## Use Cases
Once configured, partner with your Attention account manager to build out agents and workflows to fit your team's unique needs. Examples include:
* **Sales Team Sync:** Post call summaries or transcripts into a dedicated Teams channel for real-time collaboration.
* **Coaching & Feedback Loop:** Surface high-scoring and low-scoring calls with alerts where your team already works.
* **Highlight Wins:** Notify the channel when a deal closes, with insights from the conversation that moved it forward.
* **Attention Agent:** Mention `@Attention AI` in a channel, or send it a direct message, and get answers from your AI agents.
# Troubleshooting
## I don't see Microsoft Teams in the integrations list
Microsoft Teams has not been enabled for your Attention organization yet. Contact your Attention account manager.
## The agent doesn't respond in a channel, but works in a direct message
The app has not been added to that channel. See [Step 3](#step-3-add-the-attention-app-to-a-channel).
## The agent doesn't respond anywhere
Work through these in order:
1. Confirm the Attention app is still installed in your Microsoft Teams organization. If it was removed, reinstall it from the [marketplace listing](https://marketplace.microsoft.com/en-us/product/WA200011412).
2. Confirm the connection still exists under **Settings → Integrations**. If it was disconnected, connect it again — reconnecting is safe and takes a few seconds.
3. If both are in place and the agent is still silent, contact support with the approximate time you sent the message and whether it was a direct message or a channel mention.
## The app is not available for me to install in Teams
Your Microsoft Teams administrator has to approve it in your organization's app catalog first. Share the [marketplace listing](https://marketplace.microsoft.com/en-us/product/WA200011412) with them.
# Attention Microsoft Teams Integration Permissions
Attention requests different permissions depending on which connection you create. The Super Agent connection requests strictly less than the Builder connection.
## Attention Builder Microsoft Teams Integration Permissions
| Category | Permissions |
| - | - |
| **Content and info about you** | • View your basic profile and email address • Sign you in and keep the connection active without asking you to re-authorize |
| **Content and info about people in your organization** | • View basic profile information, including email addresses, for people in your Microsoft 365 directory • View availability and presence information for people in your organization |
| **Content and info about teams, channels & chats** | • View the teams you are a member of • View the channels in those teams • View messages in channels • View and manage your one-to-one and group chats |
### Actions Attention can take
| Category | Actions |
| - | - |
| **Perform actions in teams & channels** | • Post messages to channels • Reply to messages in channels • Edit messages it has posted • Create new channels in a team |
| **Perform actions in chats** | • Send and read messages in one-to-one and group chats |
Two of these permissions are broader than they may look, so here is exactly why they are requested:
* **Directory profile access** is used to resolve the email address of the person talking to the agent, so the agent knows who it is answering and applies that person's access.
* **Reading channel messages** is required by the "New channel message" trigger, which lets a workflow react to messages posted in a channel you choose.
## Attention Super Agent Microsoft Teams Integration Permissions
| Category | Permissions |
| - | - |
| **Content and info about you** | • View your basic profile and email address • Sign you in and keep the connection active without asking you to re-authorize |
| **Content and info about teams, channels & chats** | • View the teams you are a member of • View the channels in those teams • View and manage your one-to-one and group chats |
### Actions the Attention Super Agent can take
| Category | Actions |
| - | - |
| **Perform actions in teams & channels** | • Post replies to channels where the app has been added and the agent is mentioned |
| **Perform actions in chats** | • Send and read messages in one-to-one chats with the agent |
The Super Agent connection deliberately does **not** request directory-wide profile access, presence information, permission to read messages across all channels, or permission to create channels.
Attention agents use LLMs and have the potential to generate inaccurate responses, summaries or other outputs.
## Need Additional Support?
If you need further assistance or have inquiries, please contact our team at [support@attention.com](mailto:support@attention.com) or reach out directly to your Attention account manager.
[Attention Privacy Policy](https://www.attention.com/privacy-policy)
# Integrate Attention with Salesforce
Source: https://docs.attention.com/workspace-setup/salesforce-integration
Connect your Salesforce organization to enable 2-way sync with Attention.
# What the integration does
Connecting Salesforce enables a 2-way sync:
* **Salesforce → Attention**: Attention syncs the record types and fields you choose, so calls are matched to the right Salesforce records and you can filter and analyze calls by them.
* **Attention → Salesforce**: Attention writes the insights it extracts from your calls back to the Salesforce fields you map.
# Before you start
Attention acts with the permissions of the Salesforce user who connects it. That user's profile, or a permission set assigned to them, needs these **Administrative Permissions**:
* **API Enabled**
* **Customize Application**
* **Modify All Data**
To turn them on in Salesforce:
1. Open **Setup**.
2. Under **Administration**, expand **Users** and select **Profiles**.
3. Open the profile of the user who will connect Attention and click **Edit**.
4. In **Administrative Permissions**, check **API Enabled**, **Customize Application** and **Modify All Data**.
5. Click **Save**.
# Connect Salesforce
1. Log into [Attention](https://app.attention.tech).
2. Click your name at the bottom of the sidebar and select **Settings**.
3. Select **CRM Settings** in the settings menu.
4. In the **CRM integration & sync** section, click **Add your CRM**.
5. Select **Salesforce** in the **Integrate your CRM** dialog.
6. A new window opens on the **Authorize Salesforce** page. If you are connecting a Salesforce sandbox, check **This is a sandbox**. Click **Continue**.
7. Log into Salesforce if prompted.
8. Salesforce asks you to allow access for **Attention SFDC Integration** (see the scopes below). Click **Allow**.
9. The window shows **Salesforce authorization was successful** and closes by itself. Back in **CRM Settings**, the Salesforce card now appears under **CRM integration & sync**.
## Required Salesforce access scopes
Attention requests these OAuth scopes. Salesforce lists them on the **Allow Access** screen.
| Scope | Purpose |
| - | - |
| `api` | Read and update your Salesforce data through the REST API |
| `email` | Identify the connected Salesforce user and organization |
| `offline_access` | Keep the connection alive without signing in again |
# Choose what to sync
A new connection doesn't sync anything until you choose the record types and fields.
1. On the Salesforce card, click **Select fields to sync**.
2. On the **Manage Salesforce** page, check each record type you want to sync and the fields to bring in with it. Fields a record type needs are already checked.
3. Click **Save**.
For each record type you turn on, Attention imports your existing records first. After that, it checks Salesforce for new and changed records on a regular schedule. The card shows how many record types and fields are synced, and **Manage** takes you back to the same page to change them.
To write call insights back to Salesforce, follow [Create & Map CRM Fields](/workspace-setup/crm-config). See [CRM Sync](/core-features/crm-sync) for how synced records appear in Attention.
# Reconnect Salesforce
Reconnect when the connection stops syncing, for example after the connecting user's password or permissions change in Salesforce. Your record types, fields and mappings stay as they are.
1. Go to **Settings → CRM Settings**.
2. On the Salesforce card, open the menu and select **Reconnect**.
3. In the window that opens, check **This is a sandbox** if it is a sandbox, and click **Continue**.
4. Log into the same Salesforce organization and click **Allow**.
The window closes when the connection is restored.
# Disconnect Salesforce
1. Go to **Settings → CRM Settings**.
2. On the Salesforce card, open the menu and select **Delete integration**.
3. Click **Delete** in the **Delete integration** dialog.
Attention shows **Deleting integration** while it removes the connection, then **Integration deleted**. The **Add your CRM** button appears again, so you can connect Salesforce later by following [Connect Salesforce](#connect-salesforce).
Deleting the integration can't be undone. Attention stops reading from and writing to Salesforce. Data Attention already wrote to your Salesforce records stays in Salesforce.
# Support
Check that **This is a sandbox** matches the Salesforce organization you are connecting and that the connecting user has the permissions listed in [Before you start](#before-you-start), then close the window and try again.
Use **Reconnect** on the Salesforce card in **Settings → CRM Settings**.
For anything else, reach out to [support@attention.com](mailto:support@attention.com) or your Attention point of contact.
# SCIM Provisioning (Okta)
Source: https://docs.attention.com/workspace-setup/scim-provisioning
Automatically create, update, and deactivate Attention users and teams from Okta using SCIM 2.0.
Attention supports [SCIM 2.0](https://datatracker.ietf.org/doc/html/rfc7644) so your identity provider can manage Attention users and teams automatically. Assign someone to the Attention SCIM app in Okta and their account is created; unassign them and it is deactivated.
**SCIM is provisioning, not login.** SCIM creates and updates accounts. Signing in is configured separately — see [Single Sign-On](/workspace-setup/single-sign-on). Most organizations enable both: SSO for authentication, SCIM so users exist before they authenticate. In Okta they also live in **separate apps**: SSO uses your OIDC app, SCIM uses the dedicated app you create in Step 2.
## How Attention maps to SCIM
| SCIM resource | Attention object |
| - | - |
| User | User |
| Group | [Team](/workspace-setup/teams-roles-seats) |
| `active: false` | Deactivated user (reversible) |
Group membership becomes team membership. Roles are assigned through a custom attribute described below.
## Before you start
* **Admin** role in Attention
* An **organization-level** API key
* Okta Super Admin or Application Admin access
## Step 1: Create an organization-level API key
Follow [API Authentication](/api-authentication) to create a key from **Settings → API Keys**.
The key must be an **organization-level** key, created by an Admin. A personal API key is rejected on every SCIM request with `403 Organization not found for API key`. If your test connection fails with a 403, this is almost always the reason.
Verify the key works before touching Okta:
```bash theme={null}
curl -i https://api.attention.tech/scim/v2/ServiceProviderConfig \
-H "Authorization: Bearer YOUR_API_KEY"
```
A `200 OK` with a JSON body means the key is valid and correctly scoped.
## Step 2: Create a dedicated SCIM app in Okta
SCIM runs on its own Okta app, separate from the app your users sign in with.
**Your SSO app cannot do SCIM.** Okta does not support SCIM provisioning on manually created OIDC apps, so the OIDC **Web Application** from the [SSO guide](/workspace-setup/single-sign-on) has no **Provisioning** tab — and never will. Do not look for one there; create the app below instead.
1. In the Okta Admin Console, go to **Applications → Browse App Catalog**.
2. Search for **SCIM 2.0 Test App (Header Auth)** and add it. Despite the name, this is Okta's standard connector for SCIM APIs that authenticate with a bearer token, and it is suitable for production.
3. Give it a recognizable label such as `Attention SCIM`.
4. Hide it from end users (**Do not display application icon to users**) — this app only provisions; people keep signing in through your existing SSO app.
5. Assign the same people and groups you assign to your SSO app. Okta only provisions users who are assigned to this app.
A custom SAML app with **Enable SCIM provisioning** (General tab → App Settings) works too, if you prefer that route. The rest of this guide applies to it unchanged; only the field labels in Step 3 differ.
## Step 3: Configure the SCIM connector
In the SCIM app you just created — not the SSO app — go to **Provisioning → Configure API Integration** and check **Enable API integration**.
| Field | Value |
| - | - |
| Base URL | `https://api.attention.tech/scim/v2` |
| API Token | your organization-level API key from Step 1 |
Okta sends the key on every request as `Authorization: Bearer YOUR_API_KEY`.
Click **Test API Credentials** (labeled **Test Connector Configuration** on the SAML route) to confirm the connection, then save.
On the custom SAML route the same screen is labeled differently: **SCIM connector base URL** (same URL), **Authentication Mode** = `HTTP Header`, the API key in **Authorization**, **Unique identifier field for users** = `userName`, and the **Push New Users, Push Profile Updates, Push Groups** provisioning actions enabled.
**The unique user identifier must be `userName`.** Attention only supports filtering users by `userName` and `active`. If your app lets you change the identifier (the custom SAML route does) and it is set to anything else (`email`, `externalId`, `id`), the lookup filter is ignored rather than rejected, Okta receives your entire user list, and it may match the wrong person — silently applying updates to the wrong account.
EU-hosted organizations use `https://api.eu-a.attention.tech/scim/v2`. If you are unsure which applies, ask your Attention point of contact.
## Step 4: Enable provisioning to Attention
Under **Provisioning → To App → Edit**, enable:
* **Create Users**
* **Update User Attributes**
* **Deactivate Users**
Deactivation is reversible: re-assigning a user in Okta restores the account with its history intact.
## Step 5: Map user attributes
| Okta attribute | SCIM attribute |
| - | - |
| `user.email` | `userName` |
| `user.firstName` | `name.givenName` |
| `user.lastName` | `name.familyName` |
`userName` must be the user's email address — Attention matches users by email.
`displayName`, `emails`, `locale`, `timezone`, and `preferredLanguage` are accepted and stored where they have an Attention equivalent.
## Step 6: Assign roles (optional)
Roles are set through an Okta-specific extension attribute rather than the standard SCIM `roles` field.
Call the roles endpoint with your API key:
```bash theme={null}
curl https://api.attention.tech/v2/organizations/roles \
-H "Authorization: Bearer YOUR_API_KEY"
```
In the Okta **Profile Editor** for the SCIM app from Step 2, add a string attribute:
* **External namespace:** `urn:okta:onprem_app:1.0:user:custom`
* **External name:** `roleUUID`
Map the attribute to the role UUID you want each user to receive — a constant value, or an expression driven by Okta group membership.
The resulting request looks like this:
```json theme={null}
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:okta:onprem_app:1.0:user:custom"
],
"userName": "jane.smith@company.com",
"name": { "givenName": "Jane", "familyName": "Smith" },
"active": true,
"urn:okta:onprem_app:1.0:user:custom": {
"roleUUID": "550e8400-e29b-41d4-a716-446655440000"
}
}
```
A user holds **one role per organization**. Sending `roleUUID` replaces any role the user currently has, including one set manually in Attention. The role must belong to your organization or the request fails with `400`.
The standard SCIM `roles` array is **not supported**. A payload containing `roles` succeeds but assigns no role — it fails silently. Use the custom extension above.
## Step 7: Push groups as teams
In the SCIM app, open the **Push Groups** tab and push the Okta groups that should exist as Attention teams. Each pushed group becomes a team, and its members become team members.
Push users before groups. Okta creates users first and then reconciles group membership, which is the order Attention expects.
## Provisioning behavior
A user provisioned before any group is pushed is placed in your organization's **Default** team, created automatically on first use. Once Push Groups runs, they gain their real team memberships and keep the Default membership until it is removed.
Provisioned users receive a **Recording seat** — the Attention bot can join and record their meetings. To change someone to a Listener seat, edit the user in Attention; see [Teams, Roles & Seats](/workspace-setup/teams-roles-seats).
Unassigning a user in Okta sends `active: false`, which deactivates the account without destroying data. Re-assigning restores it. `DELETE /Users/{id}` behaves the same way — it deactivates rather than erases.
Deleting or unpushing a group archives the Attention team and hides it from group listings, but **does not remove its members**. Those users remain active in Attention.
Deleting a group is not an offboarding action. To offboard people, deactivate each user.
If someone was invited through Attention and is later provisioned via SCIM, the pending invitation is linked to the new account and its role is applied, unless the SCIM request specifies a role of its own.
Creating a user who already exists returns the existing account rather than an error, so Okta retries are safe. Re-adding a user who is already a team member is likewise harmless.
## Limitations
* **Filtering** — only `userName eq` and `active eq` are supported, combined with `and`. Operators such as `ne`, `co`, `sw`, `gt`, and `lt` are not supported, and unsupported filters are ignored rather than rejected.
* **Page size** — listings return at most 100 resources per request. Use `startIndex` and `count` to page.
* **`roles` attribute** — not supported; use the custom extension in Step 6.
* **`externalId`** — accepted but not stored, and not returned as sent. Do not rely on it as a correlation key.
* **Group membership via `PUT /Users/{id}`** — ignored. Change membership through the Groups endpoint, or with `PATCH /Users/{id}` using `add` or `remove` on `groups`.
* **`/Me`** — not implemented.
## Troubleshooting
You are looking at the SSO (OIDC) app. Okta does not support SCIM provisioning on OIDC apps, so that tab will never appear there. Create the dedicated SCIM app from Step 2 and configure provisioning on it.
The `Authorization` header is missing or the key is invalid. Confirm the header is `Bearer YOUR_API_KEY` and that the key has not been deleted.
The key is a personal key, not an organization-level one. Have an Admin create an organization-level key and update Okta. See Step 1.
A pushed group references a team that does not exist in your organization. Re-push the group so Attention creates it, then retry the user.
The email address already belongs to a user in another Attention organization. Contact support — this cannot be resolved from Okta.
The resource does not exist in your organization, or it belongs to another one. Confirm you are using the ID Attention returned when the resource was created.
Harmless — the user is already a member of the team. It usually means Okta retried or ran overlapping sync jobs.
Okta records every request under **Reports → System Log** (filter on your SCIM app), which is the fastest place to see the exact payload and response.
## Next steps
Configure Okta, Google, or EntraID authentication
Understand what roles and seat types grant
Need help with SCIM provisioning? Contact [support@attention.com](mailto:support@attention.com) or your Attention account manager.
# Single Sign-On (SSO)
Source: https://docs.attention.com/workspace-setup/single-sign-on
How to setup Single Sign-On for your org.
Attention supports Single Sign-On through Google, Okta, and Microsoft EntraID.
## **Google SSO Setup**
1. Go to the Google Cloud Platform and choose your project: [https://console.cloud.google.com/apis/credentials](https://console.cloud.google.com/apis/credentials)
2. Click on `+ Create Credentials` and choose `OAuth client ID`
3. Choose `Web application` as application type and give a name.
4. Under `Authorized Redirect URIs`, paste the following URI:
[https://id.attention.tech/ui/login/login/externalidp/callback](https://id.attention.tech/ui/login/login/externalidp/callback)
5. After saving, a **Client ID** and **Client Secret** will be generated. Provide these to your Attention point of contact to finalize setup.
6. After doing this, the Attention team will follow up with the URL your team needs to use log in with Google OAuth. This URL will take you directly to your Google account login. Once you log in successfully, you will be redirected automatically to the Attention paltform homepage.
NOTE: The authentication mechanism does not auto provision users on Attention. Users must be invited to Attention before trying to authenticate via Google.
## **Okta SSO Setup**
1. As an Okta administrator, log into the administration panel and navigate to the list of applications.
2. Once there, click to create a new App Integration, and choose `OIDC - OpenID Connect`.
3. Choose `Web Application` as the application type.
4. Give it an identifiable name (this is for your own purposes to easily identify it among other applications you might have configured).
5. In the `Sign-in redirect URIs` paste the identity service redirect URL which is the following one: [https://id.attention.tech/ui/login/login/externalidp/callback](https://id.attention.tech/ui/login/login/externalidp/callback)
6. Once saved, provide the **Client ID, Secret and Issuer URL** (which will look something like: [https://trial-1925566.okta.com](https://trial-1925566.okta.com)) to your point of contact at Attention. Your Attention point of contact will then notify you once the configuration has been completed.
7. Once the Web Application has been created, add your team members to organization and/or group in Okta that is configured to use this new application.
This OIDC application handles **login only**. Okta does not support SCIM provisioning on OIDC apps, so it will never show a **Provisioning** tab. To create, update, and deactivate users automatically, set up the separate SCIM app described in [SCIM Provisioning (Okta)](/workspace-setup/scim-provisioning).
## **EntraID SAML Setup**
**Register a new enterprise application in EntraID**
1. Navigate to the [Enterprise App registration menu](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/AppGalleryBladeV2).
2. Search for "SAML Toolkit" and click on the `Microsoft Entra SAML Toolkit` card.
3. Change the name if desired and click "Create"
4. This will create an application that will be configured in the subsequent steps.
### **Configure SAML**
1. Click on the Application and Go to `Manage`> `Single sign-on`
2. Select SAML
3. Once redirected to the Single Sign-On details, copy the URL from `SAML Certificates` > `App Federation Metadata URL` to your clipboard
The URL will look like the following:
[https://login.microsoftonline.com/a58a822e-34bf-4955-b034-000000000/federationmetadata/2007-06/federationmetadata.xml?appid=3e1dde4d-f7b2-4836-000-00000000](https://login.microsoftonline.com/a58a822e-34bf-4955-b034-000000000/federationmetadata/2007-06/federationmetadata.xml?appid=3e1dde4d-f7b2-4836-000-00000000)
4. Provide this URL to your point of contact at Attention.
5. The Attention team will then provide a series of URLs like the following:
> Entity ID URL: [https://id.attention.tech/idps/00000000000000000000/saml/metadata](https://id.attention.tech/idps/00000000000000000000/saml/metadata) Reply URL: [https://id.attention.tech/ui/login/login/externalidp/saml/acs](https://id.attention.tech/ui/login/login/externalidp/saml/acs) \
> Sign On URL: [https://id.attention.tech/ui/login/login/externalidp/saml/acs](https://id.attention.tech/ui/login/login/externalidp/saml/acs) \
> Logout URL: [https://id.attention.tech/idps/00000000000000000000/saml/slo](https://id.attention.tech/idps/00000000000000000000/saml/slo)
6. Return to the `Single sign-On` settings of your application and click Edit on `Basic SAML Configuration`
7. Paste in the URLs provided by the Attention team to each matching field. Leave `Relay State URL` empty.
8. Save changes and confirm your `Basic SAML Configuration` section now looks like this:
9. Once completed, notify your Attention point of contact.
10. The Attention team will follow up provide the URL needed to log in using EntraID. This URL will take you directly to your EntraID login. Once users login, they will be redirected to the Attention homepage.
NOTE: The authentication mechanism does not auto-provision users on Attention. Users must be invited to Attention before trying to authenticate via EntraID.
### Configure User Requirements for App Access
There are 2 options for requiring Attention users to authenticate via EntraID.
**Option 1:** Assign users and groups manually via the settings in `Manage` > `Users and groups`
\*\*Option 2: \*\*Require all Attention users to authenticate by default. \
To do this, naviagate to `Manage` > `Properties` and set `Assignment required?` to "No"
# Add Attention to your Slack Workspace
Source: https://docs.attention.com/workspace-setup/slack-setup
Combine Attention with Slack to keep everyone in sync.
# Overview
Install Attention's Slack App to get all of your conversational insights and interact with Attention agents within your Slack worskpace.
Note: You must be a Slack Admin or have the proper permission in Slack to add new apps to your workspace.
# Configuration
The first step is to allow Attention to access your Slack workspace. You can do this in two ways — choose the option that matches your workflow:
## Option 1: Create a Slack connection for the Attention Builder
1. Click on your name on the top left corner.
2. Select **⚙️ Settings** from the dropdown.
3. In the **Settings** page, select **Builder** on the left sidebar.
4. Select a workflow.
* Alternatively, create a new workflow by selecting **➕ Create workflow** on the top right corner.
5. In the workflow builder, select the ➕ icon to add a new node. Search for Slack.
6. In the node configuration window on the right, click **Create Connection**.
7. Name your connection and select **Connect**.
8. Follow the Slack authorization flow and click **Allow** when prompted.
## Option 2: Connect the Slack Attention Super Agent via the Integrations Settings Page
1. Click on your name on the top left corner.
2. Select **⚙️ Settings** from the dropdown.
3. In the **Settings** page, select **Integrations** on the left sidebar.
4. Select **➕ Add integration** on the top right corner.
5. Select the Slack integration option.
6. Follow the OAuth flow to grant Attention access to your Slack workspace and click **Allow** when prompted.
**Once a connection has been created, add the Attention app to Slack channels:**
In order for the Attention app to post messages in specific channels, it needs to be added to the channel by doing the following:
1. Type /invite in the channel's chat.
2. Click "Add apps to this channel".
3. Search for Attention and add the app.
The Attention app will also be able to send Builder outputs via Direct Messages to your teammates in Slack. No additional configuration is needed.
## Use Cases
Once configured, partner with your Attention account manager to build out agents and workflows to fit your team's unique needs. Examples include:
* **Sales Team Sync:** Export sales call transcripts or summaries from Attention directly into a dedicated Slack channel for real-time collaboration and feedback within the sales team.
* **Coaching & Feedback Loop:** Surface high-scoring and low-scoring calls with real-time alerts.
* **Highlight Wins:** Notify your team anytime a deal closes and include insights from sales conversation to uncover what helped move the needle.
* \*\*Attention Agent: \*\*Tag @Attention in Slack and get answers from your AI agents.
## Attention Slack Integrations Permissions
### Attention Builder Slack Integration Permissions
| Category | Permissions |
| - | - |
| **Content and info about you** | • View information about your identity |
| **Content and info about channels & conversations** | • View emoji reactions in your channels and conversations and their associated content • View messages and other content in public channels, private channels, direct messages, and group direct messages that "Attention" has been added to • View basic information about direct and group direct messages that "Attention" has been added to • View basic information about public channels in your workspace • View emoji reactions and their associated content in channels and conversations that "Attention" has been added to • View basic information about private channels that "Attention" has been added to |
| **Content and info about your workspace** | • View people in your workspace • View email addresses of people in your workspace |
#### Actions the Attention can take
| Category | Actions |
| - | - |
| **Perform actions as you** | • Edit your profile information and status |
| **Perform actions in channels & conversations** | • Start direct and group direct messages with people • View messages that directly mention @attention2 in conversations that the app is in • Send messages as @attention2 • Manage public channels that "Attention" has been added to and create new ones • Manage private channels that "Attention" has been added to and create new ones • Add and edit emoji reactions • Upload, edit, and delete files as "Attention" |
### Attention Super Agent Integration Permissions
| Category | Permissions |
| - | - |
| **Content and info about you** | • View information about your identity |
| **Content and info about channels & conversations** | • View emoji reactions in your channels and conversations and their associated content • View messages and other content in public channels, private channels, direct messages, and group direct messages that "Attention" has been added to • View basic information about direct and group direct messages that "Attention" has been added to • View basic information about public channels in your workspace • View emoji reactions and their associated content in channels and conversations that "Attention" has been added to • View basic information about private channels that "Attention" has been added to |
| **Content and info about your workspace** | • View people in your workspace • View email addresses of people in your workspace |
#### Actions the Attention Super Agent can take
| Category | Actions |
| - | - |
| **Perform actions as you** | • Edit your profile information and status |
| **Perform actions in channels & conversations** | • Start direct and group direct messages with people • View messages that directly mention @attention2 in conversations that the app is in • Send messages as @attention2 • Manage public channels that "Attention" has been added to and create new ones • Manage private channels that "Attention" has been added to and create new ones • Add and edit emoji reactions • Upload, edit, and delete files as "Attention" |
Attention agents use LLMs and have the potential to generate inaccurate responses, summaries or other outputs.
## Need Additional Support?
If you need further assistance or have inquiries, please contact our team at [support@attention.com](mailto:support@attention.com) or reach out directly to your Attention account manager.
[Attention Privacy Policy](https://www.attention.com/privacy-policy)
# Teams, Roles & Seats
Source: https://docs.attention.com/workspace-setup/teams-roles-seats
Every Attention user needs a Team, a Role, and a Seat type. Together, these govern what they can see, do, and record inside Attention.
## Teams
A **Team** groups users by function or territory so you can filter analytics, calls, and share insights with the right people.
* Examples: *Sales*, *Account Management*, *Customer Success*, *EMEA*, *Enterprise*.
Team-level permissions and settings are customizable and initially setup during onboarding. To update your Team-level settings, contact your Account Manager.
## Roles
**Sales Rep:**
* View and search call recordings.
* Review call scorecards and insights.
* Leave comments and ask AI questions.
* Generate email follow-ups and email templates.
**Manager:**
* Inherits all Sales Rep capabilities.
* Access Scoring Analytics and Generalized Insights.
**Admin:**
* Inherits all Manager capabilities.
* Control org‑wide settings—invite or remove users, manage policies. configure custom fields, edit scorecard templates.
* Access Manager Analytics & Workflow Builder.
## Seat types
**Recording seat**
* Attention bot joins live meetings and records them automatically.
* View Upcoming Calendar events and manage bot access
**Listener seat**
* View, search, and analyze existing recordings.
* Cannot start recordings or have Attention join live meetings.
## Tips
* Use **Listener seats** for execs or stakeholders who only need post‑call insights.
* Reassign seats any time — just edit the user in **User Management**.
# Zoom Phone integration
Source: https://docs.attention.com/workspace-setup/zoom-phone-integration
Associate Zoom Phone with Attention, configure recording permissions, and verify with a test call.
# Zoom Phone integration
Attention can record calls made with Zoom Phone associated with the account. Each user’s Zoom account must be associated with the Attention app in the Zoom Marketplace. The user’s Zoom account must be configured to allow call or meeting recording, and the user must have access to download those recordings.
## 1. Link Zoom account
1. Open **Personal settings** (**Settings** in the user menu → **Personal settings**), then find **Link Zoom account** and follow the steps to link your Zoom account with the Attention app in the Zoom Marketplace.
## 2. Required Zoom account settings (web portal)
### Automatic call recording
In the Zoom admin portal, go to:
**Admin → Account Management → Account settings → Zoom Phone (tab) → Automatic Call Recording**
Enable **Automatic call recording** for the account.
### Access permissions
Recording access is granted per user, in that user's **Policy** tab. A user policy overrides the account default, so this step is required for every user who should be recorded.
For each user, go to:
**Admin → Phone System Management → Users & Rooms → Users (tab) → \[user] → Policy (tab)**
Scroll down to **Automatic Call Recording**, make sure the toggle is enabled, and under **Access Permissions** tick **Allow user to access to their own recording** and its **Download** sub-option:
**Download** is what Attention needs. **Delete** is optional and can stay off.
If **Allow user to access to their own recording** or **Download** is off, Zoom still records the call and still notifies Attention, but returns `File does not exist.` when Attention tries to fetch the audio.
After enabling it, calls from roughly the last hour are retried and import on their own — no need to unlink and relink the Zoom account. Older calls are past their retry window and will not be imported.
A **Modified** badge next to **Automatic Call Recording** means this user's policy overrides the account setting, so changing the account default will not affect them. Check this tab per user whenever recordings are missing for some people but not others.
## 3. Test call
Place a test call using the configured Zoom account. The call must:
1. Include **English** speech of at least **100 words**.
2. Last **more than two minutes**.
After a few minutes, the call should appear in **All calls** (**Conversations** → **All calls**).
**If you want to stop the Zoom Phone integration:** Open **Personal settings** (**Settings** in the user menu → **Personal settings**), find **Link Zoom account**, open the **three dots** menu, and follow the steps to **unlink** your Zoom account from the Attention app.
Need help? Contact [support@attention.com](mailto:support@attention.com) or your Attention account manager.