Attio Meta / Self API
Identify the current access token - the workspace it is linked to, the authorizing member, and the scopes and permissions it holds. Useful for token introspection and health checks before making other calls.
Identify the current access token - the workspace it is linked to, the authorizing member, and the scopes and permissions it holds. Useful for token introspection and health checks before making other calls.
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.