Pipory
Node reference

Attio

Attio node reference - all 65 operations, the credential it needs, and a worked example.

Attio REST API (CRM). 65 operations: records on any object (create, upsert, get, update, delete, query, cross-object search); lists and list entries including pipeline-stage moves; notes; tasks; comments and threads; read-only schema discovery (objects, attributes, select options, statuses); workspace members, token introspection and read-only SQL; record files; meetings, call recordings and transcripts; and webhook management.

Credential: Attio API token - see Credentials.

Scopes

Each operation below lists the scope it needs. Scopes are ticked under Scopes when the access token is created in Workspace settings -> Developers -> New access token, and editable afterwards from the same page. Attio's authentication guide is explicit that a single-workspace API key and an OAuth access token use the SAME scopes, so this table applies whichever kind of token is stored - and neither kind carries any scope by default, which is why a brand-new token 403s on its first call. Attio also composes scopes across resources: reading a task needs task:read for the task, record_permission:read plus object_configuration:read for the records it links to, and user_management:read for its assignee, so every scope a row names is required. If a run fails with a permission error, the node names the missing scope in the error - grant it and re-run; you do not need to rebuild the workflow.

Operations (65)

Records

OperationWhat it doesScope
upsertPersonCreate / update person (match on email)record_permission:read-write + object_configuration:read
createRecordCreate recordrecord_permission:read-write + object_configuration:read
upsertRecordUpsert record (match on an attribute)record_permission:read-write + object_configuration:read
getRecordGet recordrecord_permission:read + object_configuration:read
updateRecordUpdate record (append multiselect)record_permission:read-write + object_configuration:read
updateRecordOverwriteUpdate record (overwrite multiselect)record_permission:read-write + object_configuration:read
deleteRecordDelete recordobject_configuration:read + record_permission:read-write
queryRecordsQuery records (filter / sort / paginate)record_permission:read + object_configuration:read
searchRecordsSearch records (attribute contains)record_permission:read + object_configuration:read
searchAllRecordsSearch across objects (full text)record_permission:read + object_configuration:read
listRecordAttributeValuesList a record's attribute valuesrecord_permission:read + object_configuration:read
listRecordEntriesList the lists a record belongs torecord_permission:read + object_configuration:read + list_entry:read

Lists

OperationWhat it doesScope
listListsList all listslist_configuration:read
createListCreate listlist_configuration:read-write
getListGet listlist_configuration:read
updateListUpdate listlist_configuration:read-write
listListViewsList views on a listlist_configuration:read

List entries

OperationWhat it doesScope
addToListAdd record to listlist_entry:read-write + list_configuration:read
upsertListEntryUpsert list entry (match on parent record)list_entry:read-write + list_configuration:read
queryListEntriesQuery list entries (pipeline stages)list_entry:read + list_configuration:read
getListEntryGet list entrylist_entry:read + list_configuration:read
updateListEntryUpdate list entry (append multiselect)list_entry:read-write + list_configuration:read
updateListEntryOverwriteUpdate list entry (overwrite multiselect)list_entry:read-write + list_configuration:read
deleteListEntryRemove record from listlist_entry:read-write + list_configuration:read
listEntryAttributeValuesList a list entry's attribute valueslist_entry:read + list_configuration:read

Notes

OperationWhat it doesScope
createNoteCreate notenote:read-write + object_configuration:read + record_permission:read
listNotesList notesnote:read + object_configuration:read + record_permission:read
getNoteGet notenote:read + object_configuration:read + record_permission:read
deleteNoteDelete notenote:read-write

Tasks

OperationWhat it doesScope
createTaskCreate tasktask:read-write + object_configuration:read + record_permission:read + user_management:read
listTasksList taskstask:read + object_configuration:read + record_permission:read + user_management:read
getTaskGet tasktask:read + object_configuration:read + record_permission:read + user_management:read
updateTaskUpdate task (complete / reschedule / reassign)task:read-write + object_configuration:read + record_permission:read + user_management:read
deleteTaskDelete tasktask:read-write

Comments & threads

OperationWhat it doesScope
createCommentCreate commentcomment:read-write
getCommentGet commentcomment:read
deleteCommentDelete commentcomment:read-write
listThreadsList comment threadscomment:read
getThreadGet thread with its commentscomment:read

Schema (read-only)

OperationWhat it doesScope
listObjectsList objectsobject_configuration:read
getObjectGet objectobject_configuration:read
listObjectViewsList views on an objectobject_configuration:read
listAttributesList attributes(any valid token — Attio states no scope requirement for the attribute reads)
getAttributeGet attribute(any valid token — Attio states no scope requirement for the attribute reads)
listSelectOptionsList select options(any valid token — Attio states no scope requirement for the attribute reads)
listStatusesList statuses(any valid token — Attio states no scope requirement for the attribute reads)

Workspace & meta

OperationWhat it doesScope
listWorkspaceMembersList workspace membersuser_management:read
getWorkspaceMemberGet workspace memberuser_management:read
identifySelfIdentify token & workspace(any valid token — this is the token-introspection endpoint and reports which scopes the token actually has)
runSqlRun a read-only SQL queryrecord_permission:read + object_configuration:read

Files

OperationWhat it doesScope
listFilesList a record's filesobject_configuration:read + record_permission:read + file:read
createFileEntryCreate folder / connect external filefile:read-write + object_configuration:read + record_permission:read
getFileGet filefile:read + object_configuration:read + record_permission:read
getFileDownloadUrlGet file download URLobject_configuration:read + record_permission:read + file:read
deleteFileDelete filefile:read-write + object_configuration:read + record_permission:read

Meetings & call recordings

OperationWhat it doesScope
listMeetingsList meetingsmeeting:read + record_permission:read
getMeetingGet meetingmeeting:read + record_permission:read
listCallRecordingsList call recordingsmeeting:read + call_recording:read
getCallRecordingGet call recordingmeeting:read + call_recording:read
getCallTranscriptGet call transcriptmeeting:read + call_recording:read

Webhooks

OperationWhat it doesScope
listWebhooksList webhookswebhook:read
createWebhookCreate webhookwebhook:read-write
getWebhookGet webhookwebhook:read
updateWebhookUpdate webhookwebhook:read-write
deleteWebhookDelete webhookwebhook:read-write

Example

Upsert a person so a webhook that fires twice does not duplicate them

The node's default operation. Attio is schema-flexible — objects and their attributes are workspace-defined — so almost everything here is generic over an object slug and takes attribute values as JSON. upsertPerson is the one exception, kept because it shipped before that model and saved workflows use it.

Set Operation to upsertPerson, then fill in:

FieldValueNotes
email{{ myTrigger.email }}The matching key for the upsert
firstName{{ myTrigger.firstName }}
lastName{{ myTrigger.lastName }}
valuesJson{"job_title": "{{ myTrigger.title }}"}Keyed by YOUR workspace's attribute slugs — they are not knowable at build time, which is why this is JSON rather than named fields

Sets {{person.id}} and {{person.record}}. Attio tokens carry no scopes by default, so a brand-new token 403s on everything until each family is ticked.