Access the Attio REST API with managed OAuth authentication. Manage CRM objects, records, tasks, notes, comments, lists, list entries, meetings, call recordings, and workspace data.
Reference
List Objects
GET /attio/v2/objectsReturns all system-defined and custom objects in your workspace.
Get Object
GET /attio/v2/objects/{object}Get a specific object by slug (e.g., people, companies) or UUID.
List Attributes
GET /attio/v2/objects/{object}/attributesReturns all attributes for an object.
Query Records
POST /attio/v2/objects/{object}/records/query
Content-Type: application/json
{
"limit": 50,
"offset": 0,
"filter": {},
"sorts": []
}Query parameters in body:
limit: Maximum results (default 500)offset: Number of results to skipfilter: Filter criteria objectsorts: Array of sort specifications
Get Record
GET /attio/v2/objects/{object}/records/{record_id}Create Record
POST /attio/v2/objects/{object}/records
Content-Type: application/json
{
"data": {
"values": {
"name": [{"first_name": "John", "last_name": "Doe", "full_name": "John Doe"}],
"email_addresses": ["john@example.com"]
}
}
}Note: For personal-name type attributes (like name on people), you must include full_name along with first_name and last_name.
Update Record
PATCH /attio/v2/objects/{object}/records/{record_id}
Content-Type: application/json
{
"data": {
"values": {
"job_title": "Software Engineer"
}
}
}Delete Record
DELETE /attio/v2/objects/{object}/records/{record_id}List Tasks
GET /attio/v2/tasks?limit=50Query parameters:
limit: Maximum results (default 500)offset: Number to skipsort:created_at:ascorcreated_at:desclinked_object: Filter by object type (e.g.,people)linked_record_id: Filter by specific recordassignee: Filter by assignee email/IDis_completed: Filter by completion status (true/false)
Get Task
GET /attio/v2/tasks/{task_id}Create Task
POST /attio/v2/tasks
Content-Type: application/json
{
"data": {
"content": "Follow up with customer",
"format": "plaintext",
"deadline_at": "2026-02-15T00:00:00.000000000Z",
"is_completed": false,
"assignees": [],
"linked_records": [
{
"target_object": "companies",
"target_record_id": "16f2fc57-5d22-48b8-b9db-8b0e6d99e9bc"
}
]
}
}Required fields: content, format, deadline_at, assignees, linked_records
Update Task
PATCH /attio/v2/tasks/{task_id}
Content-Type: application/json
{
"data": {
"is_completed": true
}
}Delete Task
DELETE /attio/v2/tasks/{task_id}List Workspace Members
GET /attio/v2/workspace_membersGet Workspace Member
GET /attio/v2/workspace_members/{workspace_member_id}Identify Current Token
GET /attio/v2/selfReturns workspace info and OAuth scopes for the current access token.
Create Comment on Record
POST /attio/v2/comments
Content-Type: application/json
{
"data": {
"format": "plaintext",
"content": "This is a comment",
"author": {
"type": "workspace-member",
"id": "{workspace_member_id}"
},
"record": {
"object": "companies",
"record_id": "{record_id}"
}
}
}Required fields: format, content, author
Plus one of:
record: Object withobjectslug andrecord_id(for record comments)entry: Object withlistslug andentry_id(for list entry comments)thread_id: UUID of existing thread (for replies)
Reply to Comment Thread
POST /attio/v2/comments
Content-Type: application/json
{
"data": {
"format": "plaintext",
"content": "This is a reply",
"author": {
"type": "workspace-member",
"id": "{workspace_member_id}"
},
"thread_id": "{thread_id}"
}
}List All Lists
GET /attio/v2/listsGet List
GET /attio/v2/lists/{list_id}Query List Entries
POST /attio/v2/lists/{list}/entries/query
Content-Type: application/json
{
"limit": 50,
"offset": 0,
"filter": {},
"sorts": []
}Query parameters in body:
limit: Maximum results (default 500)offset: Number of results to skipfilter: Filter criteria objectsorts: Array of sort specifications
Create List Entry
POST /attio/v2/lists/{list}/entries
Content-Type: application/json
{
"data": {
"parent_record_id": "{record_id}",
"parent_object": "companies",
"entry_values": {}
}
}Get List Entry
GET /attio/v2/lists/{list}/entries/{entry_id}Update List Entry
PATCH /attio/v2/lists/{list}/entries/{entry_id}
Content-Type: application/json
{
"data": {
"entry_values": {
"status": "Active"
}
}
}Delete List Entry
DELETE /attio/v2/lists/{list}/entries/{entry_id}List Notes
GET /attio/v2/notes?limit=50Query parameters:
limit: Maximum results (default 10, max 50)offset: Number to skipparent_object: Object slug containing notesparent_record_id: Filter by specific record
Get Note
GET /attio/v2/notes/{note_id}Create Note
POST /attio/v2/notes
Content-Type: application/json
{
"data": {
"format": "plaintext",
"title": "Meeting Summary",
"content": "Discussed Q1 goals and roadmap priorities.",
"parent_object": "companies",
"parent_record_id": "{record_id}",
"created_by_actor": {
"type": "workspace-member",
"id": "{workspace_member_id}"
}
}
}Required fields: format, content, parent_object, parent_record_id
Delete Note
DELETE /attio/v2/notes/{note_id}List Meetings
GET /attio/v2/meetings?limit=50Query parameters:
limit: Maximum results (default 50, max 200)cursor: Pagination cursor from previous response
Uses cursor-based pagination.
Get Meeting
GET /attio/v2/meetings/{meeting_id}List Call Recordings for Meeting
GET /attio/v2/meetings/{meeting_id}/call_recordings?limit=50Query parameters:
limit: Maximum results (default 50, max 200)cursor: Pagination cursor from previous response
Get Call Recording
GET /attio/v2/meetings/{meeting_id}/call_recordings/{call_recording_id}