Skip to content
Talk to an Engineer Dashboard

Attio

Connect to Attio CRM to manage contacts, companies, deals, notes, tasks, and lists with a modern relationship management platform.

Connect to Attio to manage CRM records, people, companies, deals, tasks, notes, and workspace data

Attio logo

Supports authentication: OAuth 2.0

Register your Attio OAuth app credentials with Scalekit so it can manage the OAuth 2.0 authentication flow and token lifecycle on your behalf. You’ll need a Client ID and Client Secret from the Attio Developer Portal.

  1. Create a connection in Scalekit and copy the redirect URI

    • Sign in to your Scalekit dashboard and go to Agent Auth in the left sidebar.

    • Click Create Connection, search for Attio, and click Create.

    • On the connection configuration panel, locate the Redirect URI field. It looks like: https://<SCALEKIT_ENVIRONMENT_URL>/sso/v1/oauth/<CONNECTION_ID>/callback

    • Click the copy icon next to the Redirect URI to copy it to your clipboard.

    Scalekit Agent Auth showing the Redirect URI for the Attio connection

    Keep this tab open — you’ll return to it in step 3.

  2. Register the redirect URI in your Attio OAuth app

    • Sign in to build.attio.com and open the app you want to connect. If you don’t have one yet, click Create app.

    • In the left sidebar, click OAuth to open the OAuth settings tab for your app.

    • You’ll see your Client ID and Client Secret near the top of the page. Copy both values and save them somewhere safe — you’ll need them in step 3.

    • Scroll down to the Redirect URIs section. Click + New redirect URI.

    • Paste the Redirect URI you copied from Scalekit into the input field and confirm.

    Attio OAuth app settings showing Client ID, Client Secret, and the Redirect URIs section with the Scalekit callback URL added
  3. Add credentials and scopes in Scalekit

    • Return to your Scalekit dashboardAgent AuthConnections and open the Attio connection you created in step 1.

    • Fill in the following fields:

      • Client ID — paste the Client ID from your Attio OAuth app

      • Client Secret — paste the Client Secret from your Attio OAuth app

      • Permissions — select the OAuth scopes your app requires. Choose the minimum scopes needed. Common scopes:

        ScopeWhat it allows
        record_permission:readRead CRM records (people, companies, deals)
        record_permission:read-writeRead and write CRM records
        object_configuration:readRead object and attribute schemas
        list_configuration:readRead list schemas
        list_entry:readRead list entries
        list_entry:read-writeRead and write list entries
        note:readRead notes
        note:read-writeRead and write notes
        task:read-writeRead and write tasks
        comment:read-writeRead and write comments
        webhook:read-writeManage webhooks
        user_management:readRead workspace members

        For a full list, see the Attio OAuth scopes reference.

    Scalekit connection configuration showing the Client ID, Client Secret, and Permissions fields for the Attio connection
    • Click Save. Scalekit will validate the credentials and mark the connection as active.

Connect a user’s Attio workspace and make API calls on their behalf — Scalekit handles OAuth and token management automatically.

import scalekit.client, os
from dotenv import load_dotenv
load_dotenv()
connection_name = "attio" # connection name from Scalekit dashboard
identifier = "user_123" # your unique user identifier
# Get credentials from app.scalekit.com → Developers → API Credentials
scalekit_client = scalekit.client.ScalekitClient(
client_id=os.getenv("SCALEKIT_CLIENT_ID"),
client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
env_url=os.getenv("SCALEKIT_ENV_URL"),
)
# Step 1: Send this URL to your user to authorize Attio access
link_response = scalekit_client.actions.get_authorization_link(
connection_name=connection_name,
identifier=identifier
)
print("Authorize Attio:", link_response.link)
# Step 2: After the user authorizes, make API calls via Scalekit proxy
# --- Query people records with a filter ---
people = scalekit_client.actions.request(
connection_name=connection_name,
identifier=identifier,
path="/v2/objects/people/records/query",
method="POST",
json={
"filter": {
"email_addresses": [{"email_address": {"$eq": "alice@example.com"}}]
},
"limit": 10
}
)
print("People:", people)
# --- Create a company record ---
company = scalekit_client.actions.request(
connection_name=connection_name,
identifier=identifier,
path="/v2/objects/companies/records",
method="POST",
json={
"data": {
"values": {
"name": [{"value": "Acme Corp"}],
"domains": [{"domain": "acme.com"}]
}
}
}
)
company_id = company["data"]["id"]["record_id"]
print("Created company:", company_id)
# --- Create a person record and associate with the company ---
person = scalekit_client.actions.request(
connection_name=connection_name,
identifier=identifier,
path="/v2/objects/people/records",
method="POST",
json={
"data": {
"values": {
"name": [{"first_name": "Alice", "last_name": "Smith"}],
"email_addresses": [{"email_address": "alice@acme.com", "attribute_type": "email"}],
"company": [{"target_record_id": company_id}]
}
}
}
)
person_id = person["data"]["id"]["record_id"]
print("Created person:", person_id)
# --- Add a note to the person record ---
note = scalekit_client.actions.request(
connection_name=connection_name,
identifier=identifier,
path="/v2/notes",
method="POST",
json={
"data": {
"parent_object": "people",
"parent_record_id": person_id,
"title": "Initial outreach",
"content": "Spoke with Alice about Q2 pricing. Follow up next week.",
"format": "plaintext"
}
}
)
print("Created note:", note["data"]["id"]["note_id"])
# --- Create a task linked to the person ---
task = scalekit_client.actions.request(
connection_name=connection_name,
identifier=identifier,
path="/v2/tasks",
method="POST",
json={
"data": {
"content": "Send Q2 pricing proposal to Alice",
"deadline_at": "2026-03-20T17:00:00.000Z",
"is_completed": False,
"linked_records": [
{"target_object": "people", "target_record_id": person_id}
]
}
}
)
print("Created task:", task["data"]["id"]["task_id"])
# --- Verify current token and workspace ---
token_info = scalekit_client.actions.request(
connection_name=connection_name,
identifier=identifier,
path="/v2/self",
method="GET"
)
workspace = token_info["data"]["workspace"]["name"]
scopes = token_info["data"]["scopes"]
print(f"Connected to workspace: {workspace}")
print(f"Granted scopes: {', '.join(scopes)}")

Create a new person record in Attio. Throws an error if a unique attribute like email_addresses conflicts with an existing record. The values object maps attribute slugs to their typed values — use attio_list_attributes on the people object first to discover available slugs and types.

Example values:

{
"name": [{ "first_name": "Alice", "last_name": "Smith" }],
"email_addresses": [{ "email_address": "alice@acme.com", "attribute_type": "email" }],
"company": [{ "target_record_id": "<company_record_id>" }]
}
NameTypeRequiredDescription
valuesobjectYesAttribute values keyed by attribute slug. Multi-value attributes (e.g., email_addresses, phone_numbers) must be arrays. Single-value attributes (e.g., name) must also be arrays with one item.

List person records with optional filtering and sorting. Returns paginated results. Use attio_list_attributes on people to find filterable attribute slugs before building a filter object.

Filter example — find people at a specific company:

{ "company": [{ "target_record_id": "<company_record_id>" }] }

Sort example — most recently created first:

[{ "direction": "desc", "attribute": "created_at" }]
NameTypeRequiredDescription
filterobjectNoAttribute-based filter conditions. Keys are attribute slugs; values are match expressions
sortsarrayNoArray of sort objects, each with attribute (slug) and direction (asc or desc)
limitintegerNoNumber of records to return per page (default 500)
offsetintegerNoNumber of records to skip for pagination (default 0)

Retrieve a single person record by its record_id. Returns all attribute values with temporal and audit metadata, including created_by_actor and active_from/active_until per value.

NameTypeRequiredDescription
record_idstringYesUUID of the person record to retrieve

Permanently delete a person record by its record_id. This operation is irreversible and cannot be undone. The underlying contact data, linked tasks, notes, and list entries associated with this person are also affected.

NameTypeRequiredDescription
record_idstringYesUUID of the person record to delete

Create a new company record in Attio. Throws an error if a unique attribute like domains conflicts with an existing company. Use attio_list_attributes on companies to discover available attribute slugs.

Example values:

{
"name": [{ "value": "Acme Corp" }],
"domains": [{ "domain": "acme.com" }],
"description": [{ "value": "Enterprise SaaS company" }]
}
NameTypeRequiredDescription
valuesobjectYesAttribute values keyed by attribute slug. The domains attribute is unique — creating a company with an existing domain will throw a conflict error

List company records with optional filtering and sorting. Returns paginated results.

Filter example — companies in a specific industry:

{ "categories": [{ "value": "Software" }] }
NameTypeRequiredDescription
filterobjectNoAttribute-based filter conditions
sortsarrayNoArray of sort objects with attribute and direction
limitintegerNoNumber of records per page (default 500)
offsetintegerNoRecords to skip for pagination (default 0)

Retrieve a single company record by its record_id. Returns all attribute values with full audit metadata.

NameTypeRequiredDescription
record_idstringYesUUID of the company record to retrieve

Permanently delete a company record by its record_id. This operation is irreversible.

NameTypeRequiredDescription
record_idstringYesUUID of the company record to delete

Create a new deal record in Attio. Throws an error if a unique attribute conflict is detected. Provide at least one attribute value. Use attio_list_attributes on deals to discover available slugs.

Example values:

{
"name": [{ "value": "Acme Enterprise Contract" }],
"value": [{ "currency_value": 50000, "currency_code": "USD" }],
"stage": [{ "status": "In progress" }],
"associated_company": [{ "target_record_id": "<company_record_id>" }]
}
NameTypeRequiredDescription
valuesobjectYesAttribute values keyed by attribute slug

List deal records with optional filtering and sorting. Returns paginated results.

NameTypeRequiredDescription
filterobjectNoAttribute-based filter conditions
sortsarrayNoArray of sort objects with attribute and direction
limitintegerNoNumber of records per page (default 500)
offsetintegerNoRecords to skip for pagination (default 0)

Retrieve a single deal record by its record_id. Returns all attribute values with temporal and audit metadata.

NameTypeRequiredDescription
record_idstringYesUUID of the deal record to retrieve

Permanently delete a deal record by its record_id. This operation is irreversible.

NameTypeRequiredDescription
record_idstringYesUUID of the deal record to delete

Create a new record for any Attio object type — including people, companies, deals, and custom objects. Use this as a generic alternative to attio_create_person / attio_create_company when the object type is dynamic. Throws an error if a unique attribute conflict is detected.

Example — create a custom object record:

{
"object": "projects",
"values": {
"name": [{ "value": "Q2 Migration" }],
"status": [{ "status": "active" }]
}
}
NameTypeRequiredDescription
objectstringYesObject type slug (e.g., people, companies, deals) or UUID — use attio_list_objects to discover available objects
valuesobjectYesAttribute values keyed by attribute slug. Use attio_list_attributes on the target object to discover valid slugs and types

List and filter records for any Attio object type. Returns guaranteed up-to-date data. Prefer this over attio_search_records when you need exact filtering by attribute value (e.g., find by email, status, or domain). Use attio_search_records for fuzzy, name-based lookups.

Example — filter people by email:

{
"object": "people",
"filter": { "email_addresses": [{ "email_address": { "$eq": "alice@acme.com" } }] }
}
NameTypeRequiredDescription
objectstringYesObject type slug or UUID
filterobjectNoAttribute-based filter. Structure depends on attribute type — use attio_list_attributes to discover filter syntax per attribute
sortsarrayNoArray of sort objects with attribute (slug) and direction (asc/desc)
limitintegerNoRecords per page (default 500)
offsetintegerNoRecords to skip for pagination (default 0)

Search records using a fuzzy text query. Returns matching records with their IDs, labels, and key attributes. Best for user-facing search (e.g., “find the company called Acme”). For precise attribute-based filtering, use attio_list_records instead.

NameTypeRequiredDescription
objectstringYesObject type slug (e.g., people, companies, deals)
querystringYesFuzzy text query matched against names, emails, and domains. Pass an empty string to return all records
limitintegerNoNumber of results to return (default 20)
offsetintegerNoResults to skip for pagination (default 0)

Retrieve a specific record by object type and record ID. Returns the full record including all attribute values with their complete audit trail (created_by_actor, active_from, active_until).

NameTypeRequiredDescription
objectstringYesObject type slug or UUID
record_idstringYesUUID of the record to retrieve

Permanently delete a record by object type and record ID. This action is irreversible.

NameTypeRequiredDescription
objectstringYesObject type slug or UUID
record_idstringYesUUID of the record to delete

Retrieve all values for a specific attribute on a record. Useful for inspecting multi-value attributes (e.g., all email addresses on a person) or retrieving the full value history when show_historic is set. Not available for COMINT or enriched attributes.

NameTypeRequiredDescription
objectstringYesObject type slug or UUID
record_idstringYesUUID of the record
attributestringYesAttribute slug or UUID to retrieve values for
show_historicbooleanNoSet to true to include all historical values, not just the current ones

Create a new task in Attio. Tasks can be linked to one or more CRM records and assigned to workspace members. Only plaintext is supported for task content.

linked_records structure:

[{ "target_object": "people", "target_record_id": "<person_record_id>" }]

assignees structure — use attio_list_workspace_members to get UUIDs:

[{ "referenced_actor_type": "workspace-member", "referenced_actor_id": "<member_uuid>" }]
NameTypeRequiredDescription
contentstringYesTask content in plaintext (max 2000 characters)
deadline_atstringNoISO 8601 deadline timestamp including milliseconds and timezone, e.g. 2026-04-01T17:00:00.000Z
is_completedbooleanNoInitial completion status (default: false)
linked_recordsarrayNoRecords to link this task to — each item needs target_object (slug) and target_record_id (UUID)
assigneesarrayNoWorkspace members to assign the task to — each item needs referenced_actor_type (workspace-member) and referenced_actor_id (UUID)

List tasks in Attio. Filter by linked record to retrieve tasks for a specific contact, company, or deal. Filter by completion status to show only open or completed tasks.

NameTypeRequiredDescription
linked_objectstringNoObject type slug to filter tasks by linked record type (e.g., people, companies)
linked_record_idstringNoUUID of the record to filter tasks linked to a specific record — use with linked_object
is_completedbooleanNoFilter by completion status: true for completed, false for open, omit to return all
limitintegerNoNumber of tasks to return (default 20)
offsetintegerNoTasks to skip for pagination (default 0)

Retrieve a single task by its task_id. Returns the task content, deadline, completion status, assignees, and linked records.

NameTypeRequiredDescription
task_idstringYesUUID of the task to retrieve

Permanently delete a task by its task_id. This operation is irreversible.

NameTypeRequiredDescription
task_idstringYesUUID of the task to delete

Create a note on a CRM record (person, company, deal, or custom object). Notes support plaintext or Markdown. Optionally backdate the note using created_at or associate it with an existing meeting via meeting_id.

NameTypeRequiredDescription
parent_objectstringYesObject type slug the record belongs to (e.g., people, companies, deals)
parent_record_idstringYesUUID of the record to attach the note to
titlestringNoPlaintext title for the note
contentstringNoNote body — plaintext or Markdown depending on format
formatstringNoContent format: plaintext (default) or markdown
created_atstringNoISO 8601 timestamp to backdate the note (e.g., 2026-01-15T10:30:00Z) — defaults to now
meeting_idstringNoUUID of an existing meeting to associate with this note

List notes in Attio. Filter by parent object and record to retrieve notes for a specific person, company, or deal. Maximum 50 results per page.

NameTypeRequiredDescription
parent_objectstringNoObject type slug to filter notes by record type — must be provided together with parent_record_id
parent_record_idstringNoUUID of the record to filter notes — must be provided together with parent_object
limitintegerNoNumber of notes to return (max 50, default 10)
offsetintegerNoNotes to skip for pagination (default 0)

Retrieve a single note by its note_id. Returns the note’s title, content in both plaintext and Markdown, tags, and creator information.

NameTypeRequiredDescription
note_idstringYesUUID of the note to retrieve

Permanently delete a note by its note_id. This operation is irreversible.

NameTypeRequiredDescription
note_idstringYesUUID of the note to delete

Create a comment on a CRM record or list entry. To comment on a record, provide record_object and record_id. To comment on a list entry, provide list_id and entry_id. To reply to an existing thread, include thread_id. Content is always plaintext.

Use attio_list_workspace_members to look up the author_actor_id UUID.

NameTypeRequiredDescription
author_actor_idstringYesUUID of the workspace member authoring the comment — retrieve with attio_list_workspace_members
contentstringYesComment content in plaintext
record_objectstringNoObject type slug when commenting on a record (e.g., people, companies)
record_idstringNoUUID of the record to comment on
list_idstringNoUUID of the list when commenting on a list entry
entry_idstringNoUUID of the list entry to comment on
thread_idstringNoUUID of an existing comment thread to reply to — omit to start a new thread

Retrieve a single comment by its comment_id. Returns the comment content, author, thread ID, and resolution status.

NameTypeRequiredDescription
comment_idstringYesUUID of the comment to retrieve

Permanently delete a comment by its comment_id. If the comment is the head of a thread, all replies in that thread are also deleted.

NameTypeRequiredDescription
comment_idstringYesUUID of the comment to delete

List all comment threads on a record or list entry. Returns all threads with their messages and resolution status.

NameTypeRequiredDescription
record_objectstringNoObject type slug when listing threads for a record
record_idstringNoUUID of the record
list_idstringNoUUID of the list when listing threads for a list entry
entry_idstringNoUUID of the list entry

Retrieve all CRM lists in the Attio workspace. Lists track pipeline stages, outreach targets, or custom groupings of records. Optionally filter returned entries by a specific parent record.

NameTypeRequiredDescription
parent_record_idstringNoFilter list entries to those belonging to this record UUID
parent_objectstringNoObject type slug to scope entry filtering (use with parent_record_id)

Create a new CRM list in Attio. After creation, add custom attributes with attio_create_attribute and add records with attio_add_to_list.

workspace_member_access structure — to give a specific member full access:

[{ "workspace_member_id": "<member_uuid>", "level": "full-access" }]

Pass an empty array [] to rely solely on workspace_access for all members.

NameTypeRequiredDescription
namestringYesDisplay name for the list
api_slugstringYesURL-safe identifier used in API calls (e.g., q2-outreach)
workspace_accessstringYesDefault access for all workspace members: full-access, read-and-write, or read-only
workspace_member_accessarrayYesPer-member access overrides — each item needs workspace_member_id and level. Pass [] for uniform access

Retrieve details of a single list by its UUID or slug, including its name, parent object type, and access configuration.

NameTypeRequiredDescription
liststringYesList UUID or API slug

List entries in a given Attio list. Returns the records that belong to the list along with any list-specific attribute values (e.g., pipeline stage, entry date).

NameTypeRequiredDescription
liststringYesList UUID or API slug
filterobjectNoFilter conditions on list-level attributes
sortsarrayNoSort objects with attribute and direction
limitintegerNoNumber of entries to return
offsetintegerNoEntries to skip for pagination

Retrieve a single list entry by its entry_id. Returns detailed information about the entry including list-specific attribute values.

NameTypeRequiredDescription
liststringYesList UUID or API slug
entry_idstringYesUUID of the list entry to retrieve

Add a record to a specific Attio list. Returns the newly created list entry with its entry_id — save this if you need to remove the entry later. If the record is already in the list, a new entry is created (Attio supports multiple entries per record in the same list).

Optionally set list-level attribute values (e.g., pipeline stage) on the entry using entry_values.

entry_values example — set stage on add:

{ "stage": [{ "status": "Qualified" }] }
NameTypeRequiredDescription
liststringYesList UUID or API slug
record_idstringYesUUID of the record to add
entry_valuesobjectNoAttribute values to set on the list entry itself (not the underlying record). Keys are list attribute slugs

Remove a specific entry from an Attio list by its entry_id. Deletes the list entry but does not delete the underlying record. Use the entry_id returned by attio_add_to_list or attio_list_record_entries.

NameTypeRequiredDescription
liststringYesList UUID or API slug
entry_idstringYesUUID of the list entry to remove — this is the entry ID, not the record ID

List all list memberships for a specific record across all lists. Returns the list IDs, entry IDs, and creation timestamps — useful for finding the entry_id needed to remove a record from a list.

NameTypeRequiredDescription
objectstringYesObject type slug or UUID
record_idstringYesUUID of the record

Retrieve all objects available in the Attio workspace — both system objects (people, companies, deals, users, workspaces) and any custom objects. Call this first to discover what object types exist before querying or writing records.

This tool takes no input parameters.

Retrieve details of a single object by its slug or UUID, including its display name, API slug, and whether it is system-defined or custom.

NameTypeRequiredDescription
objectstringYesObject slug (e.g., people, companies) or UUID

Create a new custom object type in the Attio workspace. Use this when you need an object beyond the standard types. After creation, add attributes with attio_create_attribute.

NameTypeRequiredDescription
singular_nounstringYesSingular display name (e.g., Project)
plural_nounstringYesPlural display name (e.g., Projects)
api_slugstringYesURL-safe identifier used in API calls (e.g., projects)

List the attribute schema for an object or list — including slugs, types, and configuration for select/status attributes. Call this before filtering or writing to confirm the correct slugs and understand the expected value structure for each attribute type.

NameTypeRequiredDescription
objectstringNoObject slug or UUID to list attributes for (e.g., people, companies)
liststringNoList slug or UUID to list attributes for

Retrieve full details of a single attribute including its type, slug, configuration, required/unique flags, and metadata.

NameTypeRequiredDescription
objectstringNoObject slug or UUID containing the attribute
liststringNoList slug or UUID containing the attribute
attributestringYesAttribute slug or UUID

Create a new attribute on an object or list. The required type determines the structure of the config object.

Supported type values: text, number, select, multiselect, status, date, timestamp, checkbox, currency, record-reference, actor-reference, location, domain, email-address, phone-number, interaction

config by type:

  • Most types (text, number, date, checkbox, etc.): pass {}
  • select / multiselect: pass {} — add options via attio_list_attribute_options after creation
  • record-reference: pass { "relationship": { "object": "<target_object_slug>" } }
NameTypeRequiredDescription
objectstringNoObject slug or UUID to add the attribute to (provide either object or list)
liststringNoList slug or UUID to add the attribute to
api_slugstringYesURL-safe identifier for the attribute — must be unique within the object
titlestringYesDisplay name shown in the Attio UI
typestringYesAttribute data type — see supported values above
descriptionstringYesHuman-readable description of what this attribute stores
is_requiredbooleanYesWhether a value is required when creating records of this type
is_uniquebooleanYesWhether values must be unique across all records
is_multiselectbooleanYesWhether multiple values are allowed per record
configobjectYesType-specific configuration — pass {} for most types; see examples above

List all select options for a select or multiselect attribute. Returns option IDs, titles, and color configuration. Use this before writing to a select attribute to confirm valid option values.

NameTypeRequiredDescription
objectstringNoObject slug or UUID containing the attribute
liststringNoList slug or UUID containing the attribute
attributestringYesAttribute slug or UUID of the select or multiselect attribute

List all statuses for a status attribute, including their IDs, titles, and celebration configuration. Use this before writing to a status attribute to confirm valid status titles.

NameTypeRequiredDescription
objectstringNoObject slug or UUID containing the attribute
liststringNoList slug or UUID containing the attribute
attributestringYesAttribute slug or UUID of the status attribute

List all workspace members. Use this to retrieve member UUIDs needed when assigning task owners, setting actor-reference attributes, or identifying comment authors.

NameTypeRequiredDescription
limitintegerNoNumber of members to return
offsetintegerNoMembers to skip for pagination

Retrieve a single workspace member by their UUID. Returns name, email address, access level, and avatar information.

NameTypeRequiredDescription
workspace_member_idstringYesUUID of the workspace member to retrieve

List user records in Attio with optional filtering and sorting. User records represent end-users of the connected product and are distinct from workspace members. Returns paginated results.

NameTypeRequiredDescription
filterobjectNoAttribute-based filter conditions
sortsarrayNoArray of sort objects with attribute and direction
limitintegerNoNumber of records to return
offsetintegerNoRecords to skip for pagination

Permanently delete a user record by its record_id. This operation is irreversible.

NameTypeRequiredDescription
record_idstringYesUUID of the user record to delete

List workspace records in Attio with optional filtering and sorting. Workspace records represent instances of connected SaaS products (e.g., a Slack workspace). Returns paginated results.

NameTypeRequiredDescription
filterobjectNoAttribute-based filter conditions
sortsarrayNoArray of sort objects with attribute and direction
limitintegerNoNumber of records to return
offsetintegerNoRecords to skip for pagination

Retrieve a single workspace record by its record_id. Returns all attribute values with temporal and audit metadata.

NameTypeRequiredDescription
record_idstringYesUUID of the workspace record to retrieve

Permanently delete a workspace record by its record_id. This operation is irreversible.

NameTypeRequiredDescription
record_idstringYesUUID of the workspace record to delete

Retrieve all webhooks configured in the Attio workspace. Returns webhook configurations, event subscriptions, and statuses.

NameTypeRequiredDescription
limitintegerNoNumber of webhooks to return
offsetintegerNoWebhooks to skip for pagination

Retrieve a single webhook by its webhook_id. Returns the target URL, subscribed event types, current status, and metadata.

NameTypeRequiredDescription
webhook_idstringYesUUID of the webhook to retrieve

Permanently delete a webhook by its webhook_id. This operation is irreversible.

NameTypeRequiredDescription
webhook_idstringYesUUID of the webhook to delete

List all meetings in the Attio workspace. Optionally filter by participants or linked records.

NameTypeRequiredDescription
filterobjectNoFilter conditions (e.g., by participant UUIDs or linked record IDs)
limitintegerNoNumber of meetings to return
offsetintegerNoMeetings to skip for pagination

Identify the current access token, the workspace it belongs to, the actor that authenticated, and the OAuth scopes granted. Use this to verify a user’s token is active, confirm which workspace is connected, and check permissions before making write calls.

This tool takes no input parameters. It returns:

FieldTypeDescription
activebooleanWhether the token is currently active and usable
workspace.idstringUUID of the connected Attio workspace
workspace.namestringDisplay name of the connected Attio workspace
actor.typestringWho authenticated — workspace-member for a user OAuth token, api-token for a service token
actor.idstringUUID of the workspace member or API token
actor.namestringDisplay name of the authenticated actor
actor.emailstringEmail address of the workspace member (present for workspace-member actors only)
scopesarrayOAuth scopes granted to this token (e.g., record_permission:read, note:read-write)

When to call this:

  • After a user completes OAuth — confirm the connection succeeded and identify which workspace they authorized.
  • Before a write operation — verify the required scope is in scopes to give a clear error rather than a cryptic API rejection.
  • When debugging — check active is true and that expected scopes are present.