Attio Attributes API
Manage the attributes (typed fields) defined on an object or a list - list, create, get, and update attributes, plus manage the select options and statuses that power select-type and status-type attributes.
Manage the attributes (typed fields) defined on an object or a list - list, create, get, and update attributes, plus manage the select options and statuses that power select-type and status-type attributes.
openapi: 3.0.3
info:
title: Attio REST API
description: >-
The Attio REST API exposes the Attio CRM's object/attribute/record data model
over HTTPS. Attio is an AI-native CRM built on flexible objects (people,
companies, deals, users, workspaces, and custom objects), typed attributes,
records, and lists. This specification covers the core data-model, activity,
collaboration, and platform endpoints: objects, records, attributes, lists,
list entries, notes, tasks, comments, threads, webhooks, workspace members,
and token identification. All requests are authenticated with a Bearer access
token (API key or OAuth) and scoped by granular permissions. Endpoints marked
modeled in the repository review were derived from Attio's published endpoint
reference and follow Attio's documented /v2 path conventions.
version: '2.0'
contact:
name: Attio
url: https://attio.com
license:
name: Proprietary
url: https://attio.com/legal
servers:
- url: https://api.attio.com/v2
description: Attio REST API v2
security:
- bearerAuth: []
tags:
- name: Objects
description: Top-level data model - people, companies, deals, and custom objects.
- name: Records
description: Individual records within an object, with CRUD, query, and upsert.
- name: Attributes
description: Typed fields defined on objects and lists, plus select options and statuses.
- name: Lists
description: Collections that model a process by referencing records.
- name: List Entries
description: Entries within a list, referencing a parent record.
- name: Notes
description: Free-form notes attached to records.
- name: Tasks
description: Actionable to-dos with deadlines and assignees.
- name: Comments
description: Comments within threads on records and list entries.
- name: Threads
description: Threads of comments on records and list entries.
- name: Webhooks
description: Webhook subscriptions delivering signed HTTP callbacks on changes.
- name: Workspace Members
description: Human users belonging to the workspace.
- name: Meta
description: Access token identification and introspection.
paths:
/objects:
get:
operationId: listObjects
tags: [Objects]
summary: List objects
description: Lists all system-defined and user-defined objects in your workspace.
responses:
'200':
description: A list of objects.
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createObject
tags: [Objects]
summary: Create an object
description: Creates a new custom object in your workspace.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created object.
'401':
$ref: '#/components/responses/Unauthorized'
/objects/{object}:
parameters:
- $ref: '#/components/parameters/Object'
get:
operationId: getObject
tags: [Objects]
summary: Get an object
description: Gets a single object by its ID or slug.
responses:
'200':
description: The requested object.
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateObject
tags: [Objects]
summary: Update an object
description: Updates a single object.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The updated object.
/objects/{object}/records/query:
parameters:
- $ref: '#/components/parameters/Object'
post:
operationId: listRecords
tags: [Records]
summary: List records
description: >-
Lists people, company, or other records, with the option to filter and
sort results. Confirmed endpoint - POST /v2/objects/{object}/records/query.
requestBody:
content:
application/json:
schema:
type: object
properties:
filter:
type: object
sorts:
type: array
items:
type: object
limit:
type: integer
offset:
type: integer
responses:
'200':
description: A page of matching records.
/objects/{object}/records:
parameters:
- $ref: '#/components/parameters/Object'
post:
operationId: createRecord
tags: [Records]
summary: Create a record
description: Creates a new person, company, or other record.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created record.
put:
operationId: assertRecord
tags: [Records]
summary: Assert a record
description: >-
Creates or updates (upserts) a record using a matching attribute to
determine whether a record already exists.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The asserted (created or updated) record.
/objects/{object}/records/{record_id}:
parameters:
- $ref: '#/components/parameters/Object'
- $ref: '#/components/parameters/RecordId'
get:
operationId: getRecord
tags: [Records]
summary: Get a record
description: Gets a single record by its record_id.
responses:
'200':
description: The requested record.
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateRecordAppend
tags: [Records]
summary: Update a record (append multiselect values)
description: Updates a record, appending values to multiselect attributes.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The updated record.
put:
operationId: updateRecordOverwrite
tags: [Records]
summary: Update a record (overwrite multiselect values)
description: Updates a record, overwriting values on multiselect attributes.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The updated record.
delete:
operationId: deleteRecord
tags: [Records]
summary: Delete a record
description: Deletes a record by its record_id.
responses:
'200':
description: The record was deleted.
/objects/{object}/records/{record_id}/attributes/{attribute}/values:
parameters:
- $ref: '#/components/parameters/Object'
- $ref: '#/components/parameters/RecordId'
- $ref: '#/components/parameters/Attribute'
get:
operationId: listRecordAttributeValues
tags: [Records]
summary: List record attribute values
description: Lists all values, including historic values, for a given attribute on a record.
responses:
'200':
description: A list of attribute values.
/objects/{object}/records/{record_id}/entries:
parameters:
- $ref: '#/components/parameters/Object'
- $ref: '#/components/parameters/RecordId'
get:
operationId: listRecordEntries
tags: [Records]
summary: List record entries
description: Lists all entries, across all lists, for which this record is the parent.
responses:
'200':
description: A list of list entries.
/{target}/{identifier}/attributes:
parameters:
- $ref: '#/components/parameters/Target'
- $ref: '#/components/parameters/Identifier'
get:
operationId: listAttributes
tags: [Attributes]
summary: List attributes
description: Lists all attributes defined on a specific object or list.
responses:
'200':
description: A list of attributes.
post:
operationId: createAttribute
tags: [Attributes]
summary: Create an attribute
description: Creates a new attribute on either an object or a list.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created attribute.
/{target}/{identifier}/attributes/{attribute}:
parameters:
- $ref: '#/components/parameters/Target'
- $ref: '#/components/parameters/Identifier'
- $ref: '#/components/parameters/Attribute'
get:
operationId: getAttribute
tags: [Attributes]
summary: Get an attribute
description: Gets information about a single attribute on either an object or a list.
responses:
'200':
description: The requested attribute.
patch:
operationId: updateAttribute
tags: [Attributes]
summary: Update an attribute
description: Updates a single attribute on a given object or list.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The updated attribute.
/{target}/{identifier}/attributes/{attribute}/options:
parameters:
- $ref: '#/components/parameters/Target'
- $ref: '#/components/parameters/Identifier'
- $ref: '#/components/parameters/Attribute'
get:
operationId: listSelectOptions
tags: [Attributes]
summary: List select options
description: Lists all select options for a particular select-type attribute.
responses:
'200':
description: A list of select options.
post:
operationId: createSelectOption
tags: [Attributes]
summary: Create a select option
description: Adds a new option to a select-type attribute.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created select option.
/{target}/{identifier}/attributes/{attribute}/statuses:
parameters:
- $ref: '#/components/parameters/Target'
- $ref: '#/components/parameters/Identifier'
- $ref: '#/components/parameters/Attribute'
get:
operationId: listStatuses
tags: [Attributes]
summary: List statuses
description: Lists all statuses for a particular status-type attribute.
responses:
'200':
description: A list of statuses.
post:
operationId: createStatus
tags: [Attributes]
summary: Create a status
description: Adds a new status to a status-type attribute.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created status.
/lists:
get:
operationId: listLists
tags: [Lists]
summary: List all lists
description: Lists all lists that your access token has access to.
responses:
'200':
description: A list of lists.
post:
operationId: createList
tags: [Lists]
summary: Create a list
description: Creates a new list.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created list.
/lists/{list}:
parameters:
- $ref: '#/components/parameters/List'
get:
operationId: getList
tags: [Lists]
summary: Get a list
description: Gets a single list by its ID or slug.
responses:
'200':
description: The requested list.
patch:
operationId: updateList
tags: [Lists]
summary: Update a list
description: Updates an existing list.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The updated list.
/lists/{list}/entries/query:
parameters:
- $ref: '#/components/parameters/List'
post:
operationId: listEntries
tags: [List Entries]
summary: List entries
description: Lists entries in a given list, with the option to filter and sort results.
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: A page of list entries.
/lists/{list}/entries:
parameters:
- $ref: '#/components/parameters/List'
post:
operationId: createEntry
tags: [List Entries]
summary: Create an entry
description: Adds a record to a list as a new list entry.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created list entry.
put:
operationId: assertEntry
tags: [List Entries]
summary: Assert a list entry by parent
description: Creates or updates a list entry, keyed by its parent record.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The asserted list entry.
/lists/{list}/entries/{entry_id}:
parameters:
- $ref: '#/components/parameters/List'
- $ref: '#/components/parameters/EntryId'
get:
operationId: getEntry
tags: [List Entries]
summary: Get a list entry
description: Gets a single list entry by its entry_id.
responses:
'200':
description: The requested list entry.
patch:
operationId: updateEntryAppend
tags: [List Entries]
summary: Update a list entry (append multiselect values)
description: Updates a list entry, appending values to multiselect attributes.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The updated list entry.
put:
operationId: updateEntryOverwrite
tags: [List Entries]
summary: Update a list entry (overwrite multiselect values)
description: Updates a list entry, overwriting values on multiselect attributes.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The updated list entry.
delete:
operationId: deleteEntry
tags: [List Entries]
summary: Delete a list entry
description: Deletes a list entry by its entry_id.
responses:
'200':
description: The list entry was deleted.
/notes:
get:
operationId: listNotes
tags: [Notes]
summary: List notes
description: Lists notes for all records or for a specific record.
parameters:
- name: parent_object
in: query
schema:
type: string
- name: parent_record_id
in: query
schema:
type: string
- name: limit
in: query
schema:
type: integer
- name: offset
in: query
schema:
type: integer
responses:
'200':
description: A list of notes.
post:
operationId: createNote
tags: [Notes]
summary: Create a note
description: Creates a new note for a given record.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created note.
/notes/{note_id}:
parameters:
- name: note_id
in: path
required: true
schema:
type: string
get:
operationId: getNote
tags: [Notes]
summary: Get a note
description: Gets a single note by its note_id.
responses:
'200':
description: The requested note.
delete:
operationId: deleteNote
tags: [Notes]
summary: Delete a note
description: Deletes a note by its note_id.
responses:
'200':
description: The note was deleted.
/tasks:
get:
operationId: listTasks
tags: [Tasks]
summary: List tasks
description: Lists all tasks.
responses:
'200':
description: A list of tasks.
post:
operationId: createTask
tags: [Tasks]
summary: Create a task
description: Creates a new task.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created task.
/tasks/{task_id}:
parameters:
- name: task_id
in: path
required: true
schema:
type: string
get:
operationId: getTask
tags: [Tasks]
summary: Get a task
description: Gets a single task by its task_id.
responses:
'200':
description: The requested task.
patch:
operationId: updateTask
tags: [Tasks]
summary: Update a task
description: Updates a task's deadline, completion status, or assignees.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The updated task.
delete:
operationId: deleteTask
tags: [Tasks]
summary: Delete a task
description: Deletes a task by its task_id.
responses:
'200':
description: The task was deleted.
/comments:
post:
operationId: createComment
tags: [Comments]
summary: Create a comment
description: Creates a new comment related to an existing thread, record, or entry.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created comment.
/comments/{comment_id}:
parameters:
- name: comment_id
in: path
required: true
schema:
type: string
get:
operationId: getComment
tags: [Comments]
summary: Get a comment
description: Gets a single comment by its comment_id.
responses:
'200':
description: The requested comment.
delete:
operationId: deleteComment
tags: [Comments]
summary: Delete a comment
description: Deletes a comment by its comment_id.
responses:
'200':
description: The comment was deleted.
/threads:
get:
operationId: listThreads
tags: [Threads]
summary: List threads
description: Lists threads of comments on a record or list entry.
parameters:
- name: record_id
in: query
schema:
type: string
- name: entry_id
in: query
schema:
type: string
responses:
'200':
description: A list of threads.
/threads/{thread_id}:
parameters:
- name: thread_id
in: path
required: true
schema:
type: string
get:
operationId: getThread
tags: [Threads]
summary: Get a thread
description: Gets all comments in a thread.
responses:
'200':
description: The requested thread with its comments.
/webhooks:
get:
operationId: listWebhooks
tags: [Webhooks]
summary: List webhooks
description: Gets all of the webhooks in your workspace.
responses:
'200':
description: A list of webhooks.
post:
operationId: createWebhook
tags: [Webhooks]
summary: Create a webhook
description: Creates a webhook and its associated event subscriptions.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created webhook.
/webhooks/{webhook_id}:
parameters:
- name: webhook_id
in: path
required: true
schema:
type: string
get:
operationId: getWebhook
tags: [Webhooks]
summary: Get a webhook
description: Gets a single webhook by its webhook_id.
responses:
'200':
description: The requested webhook.
patch:
operationId: updateWebhook
tags: [Webhooks]
summary: Update a webhook
description: Updates a webhook and its associated subscriptions.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The updated webhook.
delete:
operationId: deleteWebhook
tags: [Webhooks]
summary: Delete a webhook
description: Deletes a webhook by its webhook_id.
responses:
'200':
description: The webhook was deleted.
/workspace_members:
get:
operationId: listWorkspaceMembers
tags: [Workspace Members]
summary: List workspace members
description: Lists all workspace members in the workspace.
responses:
'200':
description: A list of workspace members.
/workspace_members/{workspace_member_id}:
parameters:
- name: workspace_member_id
in: path
required: true
schema:
type: string
get:
operationId: getWorkspaceMember
tags: [Workspace Members]
summary: Get a workspace member
description: Gets a single workspace member by its ID.
responses:
'200':
description: The requested workspace member.
/self:
get:
operationId: identifySelf
tags: [Meta]
summary: Identify
description: >-
Identifies the current access token, the workspace it is linked to, the
authorizing member, and any permissions/scopes it holds.
responses:
'200':
description: The access token identity and permissions.
'401':
$ref: '#/components/responses/Unauthorized'
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: Attio access token (API key or OAuth 2.0 bearer token) with the required scopes.
parameters:
Object:
name: object
in: path
required: true
description: The object ID or slug (for example people, companies, deals, or a custom object).
schema:
type: string
RecordId:
name: record_id
in: path
required: true
schema:
type: string
Attribute:
name: attribute
in: path
required: true
description: The attribute ID or slug.
schema:
type: string
Target:
name: target
in: path
required: true
description: Whether the attribute belongs to an object or a list.
schema:
type: string
enum: [objects, lists]
Identifier:
name: identifier
in: path
required: true
description: The ID or slug of the object or list the attribute belongs to.
schema:
type: string
List:
name: list
in: path
required: true
description: The list ID or slug.
schema:
type: string
EntryId:
name: entry_id
in: path
required: true
schema:
type: string
responses:
Unauthorized:
description: The access token is missing, invalid, or lacks the required scope.
NotFound:
description: The requested resource was not found.