CRM
Attio
API integration
Ship CRM features without building the integration. Full Attio API access via Proxy, normalized data through Unified APIs, and 90+ MCP-ready tools for AI agents — all extensible to your exact use case.
Talk to usUse Cases
Why integrate with Attio
Common scenarios for SaaS companies building Attio integrations for their customers.
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
Ship these features with Truto + Attio
Concrete product features your team can ship faster by leveraging Truto’s Attio integration instead of building from scratch.
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.
SuperAI
Attio AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
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.
Why Truto
Why use Truto’s MCP server for Attio
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 650+ integrations.
Auto-generated, always up to date
Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.
Fine-grained access control
Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.
Multi-tenant by design
Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.
Works with every MCP client
Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.
Built-in auth, rate limits, and error handling
Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.
Expiring and auditable servers
Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.
Unified APIs
Unified APIs for Attio
Skip writing code for every integration. Use Truto’s category-specific Unified APIs out of the box or customize the mappings with AI.
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.
How It Works
From zero to integrated
Go live with Attio in under an hour. No boilerplate, no maintenance burden.
Link your customer’s Attio account
Use Truto’s frontend SDK to connect your customer’s Attio account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
We handle authentication
Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.
Call our API, we call Attio
Truto’s Proxy API is a 1-to-1 mapping of the Attio API. You call us, we call Attio, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate Attio’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about Attio on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
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.
From the Blog
Attio integration guides
Deep dives, architecture guides, and practical tutorials for building Attio integrations.
Attio
Get Attio integrated into your app
Our team understands what it takes to make a Attio integration successful. A short, crisp 30 minute call with folks who understand the problem.
Talk to us