---
title: Attio API Integration on Truto
slug: attio
category: CRM
canonical: "https://truto.one/integrations/detail/attio/"
---

# Attio API Integration on Truto



**Category:** CRM  
**Status:** Generally available

## Unified APIs

### Unified CRM API

- **Accounts** — The accounts represent a company in a CRM.
- **Associations** — 
- **Contacts** — The contacts represent an existing point of contact at a company in a CRM.
- **Fields** — The fields of entities in a CRM.
- **Notes** — The notes represent a note on another object in a CRM.
- **Opportunities** — The opportunities represent an opportunity in a CRM.
- **Tasks** — The tasks represent a task in a CRM.
- **Users** — The users represent a user in a CRM.

### Unified User Directory API

- **Roles** — The Role object represents a role of a User.
- **Users** — The User object represents a User.

## MCP-ready AI tools

Truto exposes 97 tools for Attio that AI agents can call directly.

- **list_all_attio_me** — Check validity of an access token in Attio. Returns active status, scopes, client_id, token_type, expiration, issue time, workspace_id, workspace_name, workspace_slug, and workspace_logo_url.
- **list_all_attio_companies** — List company records in Attio with filtering and sorting options. Returns fields including id, created_at, and values such as name, domains, description, and social links.
- **get_single_attio_company_by_id** — Get company record in Attio using id. Returns id (workspace_id, object_id, record_id), created_at, web_url and values containing company attributes.
- **create_a_attio_company** — Create company record in Attio. Returns id, created_at, web_url and values.
- **update_a_attio_company_by_id** — Update a company record in Attio by id. Returns fields: id (with workspace_id, object_id, record_id), created_at (creation timestamp), web_url (Attio record URL), and values (attributes such as domains, name, description, team, categories, locations, select options, etc.). The logo_url attribute cannot be updated via API, and updating multiselect attributes will prepend values; use the assert endpoint to overwrite or remove values.
- **delete_a_attio_company_by_id** — Delete a company record in Attio by id. Returns an empty object on success or, if not found, returns status_code, type, code, and message in the response.
- **attio_companies_assert** — Create or update a company in Attio using the unique matching_attribute. Returns id (with workspace_id, object_id, record_id), created_at, web_url, and values containing all company attributes as arrays of value objects. matching_attribute is required.
- **attio_companies_attribute_values** — List attribute values for a company record in Attio. Requires id and attribute. Returns attribute value objects including active_from, active_until, created_by_actor, attribute_type, and type-specific fields. show_historic cannot be true for COMINT or enriched attributes; if attempted, a 400 error is returned.
- **attio_companies_record_entries** — List all entries for which the company record is the parent in Attio. Requires id. Returns list_id, list_api_slug, entry_id, and created_at for each entry in the response.
- **list_all_attio_people** — List person records in Attio. Returns id details (workspace_id, object_id, record_id), created_at, web_url, and values with core fields including email_addresses, name, job_title, company, social links, and other attributes.
- **get_single_attio_person_by_id** — Get a person record in Attio using id. Returns id (including workspace_id, object_id, record_id), created_at, web_url, and values with detailed attributes like name, email_addresses, company, and more.
- **create_a_attio_person** — Create a person record in Attio. Throws on unique attribute conflicts such as email_addresses. Returns id (with workspace_id, object_id, record_id), created_at, web_url, and values including email_addresses, name, description, company, phone_numbers, primary_location, and more for the person record in the response.
- **update_a_attio_person_by_id** — Update a person record in Attio using id. Returns updated id, created_at, web_url, and values (attribute details such as email_addresses, name, company, etc.). Multiselect attribute values are prepended. avatar_url cannot be updated.
- **delete_a_attio_person_by_id** — Delete a person record in Attio by id. Returns an empty object on success. If the record is not found, response includes status_code, type, code, and message fields indicating the error.
- **attio_people_assert** — Assert a person record in Attio using matching_attribute. Creates or updates based on unique attribute. Returns id (workspace_id, object_id, record_id), created_at, web_url, and values with key attributes for the person. Requires matching_attribute.
- **attio_people_attribute_values** — List all values for a specific attribute on a person record in Attio. Requires id and attribute. Returns an array of values with fields such as active_from, active_until, created_by_actor, attribute_type, and value or attribute-specific fields. Historic values can only be queried if the attribute is not COMINT or enriched, otherwise, a 400 error is returned.
- **attio_people_record_entries** — List all entries for a specific person record in Attio. Requires id. Returns list_id, list_api_slug, entry_id, and created_at for each entry in the response.
- **list_all_attio_deals** — List deals in Attio. Returns id (workspace_id, object_id, record_id), created_at, web_url, and values for each deal.
- **get_single_attio_deal_by_id** — Get a specific deal record in Attio. Requires id. Returns id (workspace_id, object_id, record_id), created_at, web_url, and values (name, stage, owner, value, associated_people, associated_company) describing the deal.
- **create_a_attio_deal** — Create deal record in Attio. Throws error on unique attribute conflicts. Returns data.id (workspace_id, object_id, record_id), created_at, web_url, and values.
- **update_a_attio_deal_by_id** — Update a deal record in Attio by id. Returns id (with workspace_id, object_id, record_id), created_at, web_url, and values (including name, stage, owner, value, associated_people, associated_company) in the response. Note: Multiselect attributes are prepended, not overwritten.
- **delete_a_attio_deal_by_id** — Delete a deal record in Attio. Requires id. Returns success on deletion or error fields status_code, type, code, and message if the record is not found.
- **attio_deals_assert** — Create or update a person record in Attio using a unique matching_attribute. Returns id (workspace_id, object_id, record_id), created_at, web_url, and values including email_addresses, name, description, company, phone_numbers, and other key person attributes. Requires matching_attribute.
- **attio_deals_attribute_values** — List deal record attribute values in Attio. Requires record_id and attribute. Returns fields such as active_from (when the value became active), active_until, created_by_actor, and attribute_type. Includes all value types as defined in Attio's schema.
- **attio_deals_record_entries** — List all entries for which the deal record in Attio is the parent. Requires id. Returns list_id, list_api_slug, entry_id, and created_at fields for each entry in the response.
- **list_all_attio_notes** — List notes in Attio. Returns id (with workspace_id and note_id), parent_object, parent_record_id, title, content_plaintext, content_markdown, tags, created_by_actor, and created_at fields for each note.
- **get_single_attio_note_by_id** — Get a note in Attio by id. Returns id (workspace_id, note_id), parent_object, parent_record_id, title, content_plaintext, content_markdown, tags, created_by_actor, and created_at fields. Requires id.
- **create_a_attio_note** — Create a note in Attio. Requires parent_object, parent_record_id, title, format, and content. Returns id, parent_object, parent_record_id, title, content_plaintext, content_markdown, tags, created_by_actor, and created_at in the response.
- **delete_a_attio_note_by_id** — Delete a note in Attio by id. The response is empty on success. If the note does not exist, it returns fields status_code, type, code, and message indicating the error.
- **list_all_attio_tasks** — List all tasks in Attio. Returns tasks with fields: id (workspace_id, task_id), content_plaintext, deadline_at, is_completed, linked_records, assignees, created_by_actor, created_at. Results are sorted by creation date from oldest to newest.
- **get_single_attio_task_by_id** — Get a single task in Attio by id. Returns id, content_plaintext, deadline_at, is_completed, linked_records, assignees, created_by_actor, and created_at fields in the response. id is required.
- **create_a_attio_task** — Create a new task in Attio. Requires content, format, deadline_at, is_completed, linked_records, and assignees. Returns id (workspace_id, task_id), content_plaintext, deadline_at, is_completed, linked_records, assignees, created_by_actor, and created_at.
- **update_a_attio_task_by_id** — Update a specific task in Attio by id. Returns id, content_plaintext, deadline_at, is_completed, linked_records, assignees, created_by_actor, and created_at in the response. Only deadline_at, is_completed, linked_records, and assignees can be updated.
- **delete_a_attio_task_by_id** — Delete a task in Attio by id. Returns an empty object on success. If the task is not found, returns status_code, type, code, and message fields indicating the error.
- **list_all_attio_attribute_options** — List select options for a specific attribute in Attio using target, identifier, and attribute. Returns id (workspace_id, object_id, attribute_id, option_id), title, and is_archived fields for each option.
- **create_a_attio_attribute_option** — Create a select option on an attribute for a target and identifier in Attio. Returns id fields workspace_id, object_id, attribute_id, option_id, title, and is_archived status.
- **update_a_attio_attribute_option_by_id** — Update a select option on an attribute on an object or list in Attio. Requires target, identifier, attribute, and id. Returns workspace_id, object_id, attribute_id, option_id, title, and is_archived fields.
- **list_all_attio_attributes** — List attributes for a specific object or list in Attio. Requires target and identifier. Returns id, title, description, api_slug, type, is_system_attribute, is_writable, is_required, is_unique, is_multiselect, is_default_value_enabled, is_archived, default_value, relationship, created_at, and config for each attribute in the response.
- **get_single_attio_attribute_by_id** — Get information about a specific attribute in Attio using target, identifier, and id. Returns attribute properties such as id, title, description, api_slug, type, system and writability flags, requirements, uniqueness, multiselect, default value details, relationship, created_at, is_archived, and config.
- **create_a_attio_attribute** — Create an attribute in Attio for a specific object or list using target and identifier. Returns id, title, description, api_slug, type, is_system_attribute, is_writable, is_required, is_unique, is_multiselect, is_default_value_enabled, is_archived, default_value, relationship, created_at, and config in the response. When creating on an object, the object_configuration:read-write scope is required; for a list, the list_configuration:read-write scope is required. Attributes of type 'status' are not supported on objects.
- **update_a_attio_attribute_by_id** — Update a specific attribute in Attio for a given object or list. Requires target, identifier, and id. Returns title, description, api_slug, type, is_system_attribute, is_writable, is_required, is_unique, is_multiselect, is_default_value_enabled, is_archived, default_value, relationship, created_at, and config fields in the response.
- **list_all_attio_workspace_members** — List all workspace members in Attio. Returns id (with workspace_id and workspace_member_id), first_name, last_name, avatar_url, email_address, created_at, and access_level fields for each member.
- **get_single_attio_workspace_member_by_id** — Get a workspace member in Attio using id. Returns workspace_id, workspace_member_id, first_name, last_name, avatar_url, email_address, created_at, and access_level in the response.
- **list_all_attio_lists** — List all lists accessible with the current access token in Attio. Returns id, api_slug, name, parent_object, workspace_access, workspace_member_access, created_by_actor, and created_at fields for each list.
- **create_a_attio_list** — Create a list with name, api_slug, parent_object, workspace_access, and workspace_member_access in Attio. Returns id (workspace_id, list_id), api_slug, name, parent_object, workspace_access, workspace_member_access, created_by_actor, and created_at.
- **get_single_attio_list_by_id** — Get a single list by id in Attio. Returns id with workspace_id and list_id, api_slug, name, parent_object array, workspace_access level, workspace_member_access details, created_by_actor info, and created_at timestamp.
- **update_a_attio_list_by_id** — Update an existing list by id in Attio. Returns id (workspace_id, list_id), api_slug, name, parent_object, workspace_access, workspace_member_access, created_by_actor, and created_at fields.
- **list_all_attio_statuses** — List statuses for a specific status attribute in Attio. Requires target, identifier, and attribute. Returns id (workspace_id, object_id, attribute_id, status_id), title, is_archived, celebration_enabled, and target_time_in_status for each status.
- **create_a_attio_status** — Create a status in Attio for a specific attribute. Requires target, identifier, and attribute. Returns id (workspace_id, object_id, attribute_id, status_id), title, is_archived, celebration_enabled, and target_time_in_status in the response.
- **update_a_attio_status_by_id** — Update a status in Attio for a specific target, identifier, attribute, and id. Returns id fields (workspace_id, object_id, attribute_id, status_id), title, is_archived, celebration_enabled, and target_time_in_status in the response.
- **list_all_attio_entries** — List entries in a specific list in Attio. Requires list. Returns id (workspace_id, list_id, entry_id), parent_record_id, parent_object, created_at, and entry_values for each entry.
- **create_a_attio_entry** — Create an entry in Attio by adding a record to a list. Requires list. Returns id (workspace_id, list_id, entry_id), parent_record_id, parent_object, created_at, and entry_values fields for the created entry. Throws on unique attribute conflicts.
- **update_a_attio_entry_by_id** — Update a list entry in Attio using list and id. Appends new multiselect values if provided, does not overwrite existing ones. Returns id, parent_record_id, parent_object, created_at, and entry_values for the updated entry.
- **delete_a_attio_entry_by_id** — Delete an entry in Attio. Requires list and id. No content is returned in the response.
- **get_single_attio_entry_by_id** — Get a specific list entry in Attio. Requires list and id. Returns id (with workspace_id, list_id, entry_id), parent_record_id, parent_object, created_at, and entry_values containing attribute data.
- **attio_entries_assert** — Assert a list entry by parent in Attio for the given list. Requires list. Returns id (workspace_id, list_id, entry_id), parent_record_id, parent_object, created_at and entry_values for the created or updated entry, or errors if multiple match or not found.
- **attio_entries_overwrite** — Update a list entry in Attio using list and id. Overwrites multiselect values. Returns id details, parent_record_id, parent_object, created_at, and entry_values showing updated attribute values.
- **attio_entries_attribute_values** — List all values for a specific attribute on an entry in Attio. Requires list, id, and attribute. Returns key fields like active_from, active_until, created_by_actor, attribute_type, and value-dependent properties for each value.
- **list_all_attio_objects** — List all system-defined and user-defined objects in Attio. Returns id (workspace_id, object_id), api_slug, singular_noun, plural_noun, and created_at for each object.
- **get_single_attio_object_by_id** — Get an object in Attio using id. Returns id (with workspace_id and object_id), api_slug, singular_noun, plural_noun, and created_at fields in the response. Requires id.
- **create_a_attio_object** — Create a new object in Attio. Requires api_slug, singular_noun, and plural_noun. Returns id (object_id, workspace_id), api_slug, singular_noun, plural_noun, and created_at in the response.
- **update_a_attio_object_by_id** — Update an object in Attio. Requires id. Returns id (with workspace_id and object_id), api_slug, singular_noun, plural_noun, and created_at fields in the response.
- **list_all_attio_threads** — List threads in Attio. Returns id with workspace_id and thread_id, comments with key comment details for each thread, and created_at. To view record threads, object_configuration:read and record_permission:read are required; for list entry threads, list_configuration:read and list_entry:read are required. All key thread fields are returned in the response.
- **get_single_attio_thread_by_id** — Get all comments in a specific thread in Attio. Requires id of the thread. Returns thread id, workspace_id, created_at, and an array of comments with content, author, entry, record, and status fields.
- **get_single_attio_comment_by_id** — Get a specific comment in Attio by id. Returns fields including id (workspace_id, comment_id), thread_id, content_plaintext, entry, record, resolved_at, resolved_by, created_at, and author.
- **create_a_attio_comment** — Create a comment in Attio. Requires format, content, author, and one of thread_id, record, or entry. Returns id (workspace_id, comment_id), thread_id, content_plaintext, entry, record, resolved_at, resolved_by, created_at, and author.
- **delete_a_attio_comment_by_id** — Delete a comment in Attio by id. If deleting a comment at the head of a thread, all messages in the thread are also deleted. Success returns an empty object in the response.
- **list_all_attio_webhooks** — List all webhooks in Attio. Returns target_url, subscriptions (event_type and filter), id (workspace_id and webhook_id), status, and created_at for each webhook.
- **get_single_attio_webhook_by_id** — Get a webhook in Attio. Requires id. Returns target_url (delivery destination), subscriptions (event types with filter conditions), id (workspace_id and webhook_id), status (webhook state), and created_at (creation timestamp).
- **create_a_attio_webhook** — Create a webhook in Attio by specifying target_url and subscriptions. Returns target_url, subscriptions, id (with workspace_id and webhook_id), status, created_at, and secret. The secret is only shown when initially setting up the webhook.
- **update_a_attio_webhook_by_id** — Update a webhook in Attio. Requires id. Returns target_url (delivery URL), subscriptions (event types and filters), id (workspace_id, webhook_id), status (active, degraded, inactive), and created_at (creation timestamp) in the response.
- **delete_a_attio_webhook_by_id** — Delete a webhook in Attio using id. Returns an empty object if successful, or status_code, type, code, and message if webhook is not found.
- **list_all_attio_auth_session** — Identify the current access token, its Attio workspace, and permissions. Returns fields describing token status, scope, workspace details, issued and expiration times, client_id, issuer, and authorizing workspace member.
- **list_all_attio_users** — List user records in Attio. Returns id (workspace_id, object_id, record_id), created_at, web_url, and values (person, primary_email_address, user_id, workspace) for each record.
- **get_single_attio_user_by_id** — Get a user record in Attio by providing id. Returns id (with workspace_id, object_id, record_id), created_at (creation time), web_url (link to the user in Attio), and values (user attributes, such as person, primary_email_address, user_id, workspace).
- **create_a_attio_user** — Create a user record in Attio. Returns id identifying the created user, created_at timestamp, web_url to the user in Attio, and values including person, primary_email_address, user_id, and workspace. Throws on unique attribute conflicts.
- **update_a_attio_user_by_id** — Update a user record in Attio by id. Returns id with workspace_id, object_id, record_id, created_at, web_url, and values including person, primary_email_address, user_id, and workspace arrays. The avatar_url attribute cannot be updated via this endpoint.
- **delete_a_attio_user_by_id** — Delete a user record in Attio. Requires id. Returns an empty object on success or, if not found, returns status_code, type, code, and message fields indicating the error.
- **attio_users_assert** — Create or update a user record in Attio using the matching_attribute query parameter. Returns id (workspace_id, object_id, record_id), created_at, web_url, and values (with attributes like person, primary_email_address, user_id, workspace). Requires matching_attribute.
- **attio_users_attribute_values** — List all values for a specific attribute on a user record in Attio. Requires record_id and attribute. Returns fields such as active_from, active_until, created_by_actor, value, and attribute_type for each value. If show_historic is set to true, historic values are returned unless the attribute is a COMINT or an enriched attribute on people/company objects.
- **attio_users_record_entries** — List all entries for which the user record in Attio is the parent. Requires id. Returns list_id, list_api_slug, entry_id, and created_at fields in the response.
- **list_all_attio_workspaces** — List workspace records in Attio. Returns each record's id (workspace_id, object_id, record_id), created_at, web_url, and values with current and historical attribute values, including workspace_id, name, users, company, and avatar_url.
- **get_single_attio_workspace_by_id** — Get a specific workspace record in Attio using id. Returns id (with workspace_id, object_id, record_id), created_at, web_url, and values object containing attributes, users, company, and avatar_url.
- **create_a_attio_workspace** — Create a workspace record in Attio. Returns id (workspace_id, object_id, record_id), created_at, web_url for direct access, and values holding all workspace attributes for the created record. Throws on unique attribute conflicts.
- **update_a_attio_workspace_by_id** — Update a workspace record in Attio by id. Returns id (workspace_id, object_id, record_id), created_at (record creation time), web_url (link to record in Attio), and values (updated attribute arrays with details such as value, target_object, target_record_id, created_by_actor, active_from, active_until, and attribute_type). For multiselect attributes, supplied values are prepended; to overwrite or remove values, use the Assert workspace endpoint.
- **delete_a_attio_workspace_by_id** — Delete a workspace record in Attio by id. Returns an empty object on success or status_code, type, code, and message fields if the record is not found.
- **attio_workspaces_assert** — Create or update a workspace record in Attio. Requires matching_attribute. Returns id (workspace_id, object_id, record_id), created_at, web_url, and attribute values including workspace_id, name, users, company, and avatar_url for the workspace.
- **attio_workspaces_attribute_values** — List attribute values for a workspace record in Attio. Requires record_id and attribute. Returns fields such as active_from, active_until, created_by_actor, value, attribute_type, among others depending on attribute type.
- **attio_workspaces_record_entries** — List all entries for which the specified workspace record in Attio is the parent. Requires id. Returns list_id, list_api_slug, entry_id, and created_at for each entry in the response.
- **list_all_attio_records** — List records for a specific object in Attio. Requires object. Returns id (workspace_id, object_id, record_id), created_at, web_url, and values containing all attribute data for each record.
- **get_single_attio_record_by_id** — Get a specific record in Attio using object and id. Returns id (including workspace_id, object_id, record_id), created_at, web_url, and values fields representing all attribute values for the record.
- **create_a_attio_record** — Create a record in Attio for a specific object. Requires object. Returns id (workspace_id, object_id, record_id), created_at, web_url, and values in the response. Will throw on unique attribute conflicts.
- **delete_a_attio_record_by_id** — Delete a record in Attio by object and id. Returns an empty object if successful, or status_code, type, code, and message if the record is not found.
- **attio_records_attribute_values** — List all values for a specific attribute on a record in Attio. Requires object, id, and attribute. Returns active_from, active_until, created_by_actor, attribute_type, and other relevant value fields for each attribute value.
- **attio_records_record_entries** — List all entries for which this record is the parent in Attio. Requires object and id. Returns list_id, list_api_slug, entry_id, and created_at for each entry.
- **update_a_attio_record_by_id** — Update a record in Attio by object and id. Appends new multiselect attribute values instead of replacing them. Returns id (workspace_id, object_id, record_id), created_at, web_url, and all updated attribute values for the record in the response.
- **attio_records_overwrite** — Update a specific record in Attio by object and id. Overwrites any existing multiselect values. Returns id (workspace_id, object_id, record_id), created_at, web_url, and updated attribute values for the record in the response.

## How it works

1. **Link your customer's Attio account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach Attio.** The Proxy API is a 1-to-1 mapping of the Attio API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **Sync billing and subscription data into your customers' CRM** — If you're a billing or subscription management platform, your users want plan changes, MRR updates, and churn signals reflected in Attio automatically. Use Truto's Unified CRM API to upsert company records via assert endpoints, matching on domain to prevent duplicates, and update custom attributes like current plan or revenue tier.
- **Push product usage signals to drive sales workflows** — Product analytics and PLG platforms can sync high-intent user actions — like feature adoption or team invites — directly into Attio as contact or deal attribute updates. This lets your customers' sales teams act on product-qualified leads without leaving their CRM.
- **Log support interactions on CRM records for full customer context** — Customer support platforms can write ticket summaries, escalation notes, and resolution details as notes on Attio company or person records. Sales teams get instant visibility into active support issues tied to their accounts and deals.
- **Automate outbound campaign enrollment from CRM lists** — Outbound and marketing automation tools can read Attio lists and entries to pull segmented audiences for campaigns, then write back engagement statuses like replied, bounced, or meeting booked — giving CRM users a live view of campaign performance.
- **Enrich CRM records with third-party data on creation** — Data enrichment providers can listen for new company or person records via Attio webhooks, run enrichment workflows, and write firmographic or technographic data back to custom attributes — all through Truto without managing Attio's API directly.

## What you can build

- **Idempotent company and contact upserts** — Use Attio's assert endpoints via Truto to create-or-update companies by domain and people by email address, eliminating duplicate records when syncing data from your product.
- **Real-time deal stage automation** — Move deals and list entries between pipeline stages automatically by updating entry statuses when key events occur in your platform — like a contract signature or trial expiration.
- **Custom attribute sync with historical tracking** — Write product metrics, health scores, or billing data to Attio custom attributes and leverage attribute value endpoints to expose how those values changed over time.
- **Automated task creation for account managers** — Create tasks in Attio assigned to specific workspace members when your product detects an actionable event, like a customer upgrading, a usage spike, or a renewal approaching.
- **Dynamic field mapping using schema discovery** — Query Attio's objects and attributes at runtime to let your end users map your product's data fields to their specific Attio setup, supporting custom objects and bespoke attribute configurations.
- **Contextual note and comment logging on CRM threads** — Attach structured notes to company, person, or deal records and post comments on active threads so your product's activity history appears natively inside your customers' Attio workspace.

## FAQs

### What authentication method does the Attio integration use?

Attio uses OAuth 2.0 for third-party integrations. Truto handles the full OAuth flow, token storage, and refresh cycle so your end users can connect their Attio workspace with a single click.

### How do I avoid creating duplicate records when syncing data to Attio?

Attio provides assert endpoints (available for companies, people, deals, users, entries, and more) that perform idempotent upserts. You specify a matching attribute — like domain for companies or email_address for people — and Attio will update the existing record or create a new one. These are fully supported through Truto.

### Can I read and write custom fields and custom objects in Attio?

Yes. You can use list_all_attio_attributes and list_all_attio_objects to discover your end user's custom schema at runtime, then read and write custom attribute values on any record. Truto's Unified CRM Fields resource also maps to Attio attributes.

### What's the difference between updating and overwriting multiselect attributes?

Attio's standard update endpoints prepend new values to multiselect attributes, preserving existing selections. If you need to fully replace them, use the overwrite endpoints (e.g., attio_records_overwrite or attio_entries_overwrite) which replace the attribute value entirely.

### Does the integration support webhooks for real-time event triggers?

Yes. You can create, list, update, and delete Attio webhooks through Truto. This lets your product subscribe to events like record creation or attribute changes in your end user's Attio workspace and react in real time.

### Which Truto Unified APIs map to Attio?

Attio is supported under the Unified CRM API (covering Accounts, Contacts, Associations, Fields, Notes, Opportunities, Tasks, and Users) and the Unified User Directory API (covering Users and Roles). You can use either the unified models for cross-CRM compatibility or Attio-specific proxy endpoints for full API coverage.

## Related reading

- [Connect Attio to Claude: Automate Pipeline Management via MCP](https://truto.one/blog/connect-attio-to-claude-automate-pipeline-management-and-collaboration/) — Step-by-step engineering guide to connecting Attio to Claude using a managed MCP server. Automate CRM pipelines, notes, and task management.
- [Connect Attio to ChatGPT: Manage Relationships and Sales Workflows](https://truto.one/blog/connect-attio-to-chatgpt-manage-relationships-and-sales-workflows/) — Learn how to connect Attio to ChatGPT using a managed MCP server. Execute CRM workflows, assert records, and update pipelines via natural language.
- [Connect Attio to AI Agents: Orchestrate Customer Data and Entities](https://truto.one/blog/connect-attio-to-ai-agents-orchestrate-customer-data-and-entities/) — Learn how to connect Attio to AI agents using Truto. Discover how to handle Attio's unique Record and Entry hierarchy, bind tools, and automate CRM workflows.
- [Best MCP Server for Attio in 2026](https://truto.one/blog/best-mcp-server-for-attio-in-2026/) — Compare the best MCP servers for Attio CRM in 2026. Open-source vs. Attio's hosted MCP vs. Truto's managed server — with setup guides for Claude, ChatGPT, and custom agents.
