# Attio on boxd

> Attio is a fully customizable workspace for your team's relationships and workflows.

- Page: https://boxd.sh/integrations/attio/
- CLI: `run attio` (100 commands, 47 marked common)
- SDK: `import { attio } from "@boxd/run"`; every parameter and response type is at `@boxd/run/attio`
- Triggers: none
- Connect: `run auth attio` (Sign in with Attio), or https://app.boxd.sh/integrations/detail/attio
- All integrations: https://boxd.sh/integrations/ (Markdown: https://boxd.sh/integrations/index.md)

## From the shell

```sh
run auth attio      # once: prints a link to connect your account
run attio           # list its commands
run attio list-lists
```

Parameters are flags (`--flag value`); object and array parameters take a JSON string. Output is YAML, or JSON with `--json`. Calls use your own connection; `--scope <name>` uses a connection shared with your team.

## From a script

```ts
import { every, attio } from "@boxd/run";

every("1 hour", async () => {
  const result = await attio.listLists();
  console.log(result);
});
```

Run it with `run attio.run.ts`. Attio has no triggers; `every()` polls on a schedule, keeps the script running as a job, and wakes the machine when it is due.

## Commands

Required flags are listed; `run attio <command> --help` lists the optional ones. "common" marks what `run attio` shows without `--all`.

| Command | SDK method | Required flags | Optional | Description |
|---|---|---|---|---|
| `assert-company` ·common | `attio.assertCompany()` | `--matching-attribute` | 6 | Creates or updates a company record in Attio using a unique attribute to search for existing companies |
| `assert-person` ·common | `attio.assertPerson()` | `--matching-attribute` `--values` | 0 | Create or update person records using a unique attribute to search for existing people |
| `assert-user-record` ·common | `attio.assertUserRecord()` | `--matching-attribute` `--values` | 0 | Creates or updates a user record in Attio using a unique attribute to search for existing users |
| `assert-workspace` ·common | `attio.assertWorkspace()` | `--matching-attribute` | 5 | Creates or updates a workspace record in Attio using a unique attribute to search for existing workspaces |
| `create-attribute` | `attio.createAttribute()` | `--api-slug` `--config` `--identifier` `--target` `--title` `--type` | 6 | Create a new attribute on an object or list in Attio |
| `create-comment` ·common | `attio.createComment()` | `--author` `--content` | 4 | Create a new comment on a thread, record, or list entry in Attio |
| `create-company` ·common | `attio.createCompany()` | — | 5 | Creates a new company record in Attio |
| `create-deal-record` ·common | `attio.createDealRecord()` | — | 9 | Create a new deal record in Attio |
| `create-entry` ·deprecated | `attio.createEntry()` | `--list-id` `--parent-object` `--parent-record-id` | 1 | Use ATTIO_ATTIO_POST_V2_LISTS_LIST_ENTRIES instead |
| `create-list` | `attio.createList()` | `--api-slug` `--name` `--parent-object` `--workspace-access` `--workspace-member-access` | 0 | Create a new list in Attio |
| `create-note` ·common | `attio.createNote()` | `--content` `--parent-object` `--parent-record-id` `--title` | 1 | This tool creates a new note on a given record in Attio |
| `create-object` | `attio.createObject()` | `--data` | 0 | Create a new custom object in your Attio workspace |
| `create-person` ·common | `attio.createPerson()` | — | 8 | Creates a new person record in Attio |
| `create-record` ·common | `attio.createRecord()` | `--object-type` `--values` | 0 | This tool creates a new record in Attio for a specified object type (people, companies, deals, users, workspaces, etc.) |
| `create-select-option` | `attio.createSelectOption()` | `--attribute` `--data` `--identifier` `--target` | 0 | Add a new select option to a select or multiselect attribute in Attio |
| `create-status` | `attio.createStatus()` | `--attribute` `--data` `--identifier` `--target` | 0 | Add a new status to a status attribute on either an object or a list |
| `create-task` ·common | `attio.createTask()` | `--content` | 4 | Create a new task in Attio |
| `create-user-record` ·common | `attio.createUserRecord()` | `--primary-email-address` `--user-id` `--workspace-id` | 1 | Creates a new user record in Attio |
| `create-webhook` | `attio.createWebhook()` | `--subscriptions` `--target-url` | 0 | Create a webhook and subscribe to events in Attio |
| `create-workspace-record` ·common | `attio.createWorkspaceRecord()` | `--workspace-id` | 4 | Creates a new workspace record in Attio |
| `delete-comment` | `attio.deleteComment()` | `--comment-id` | 0 | Delete a comment by its comment_id |
| `delete-company` ·common | `attio.deleteCompany()` | `--record-id` | 0 | Delete a company record from Attio by its record_id |
| `delete-deal` ·common | `attio.deleteDeal()` | `--record-id` | 0 | Delete a deal record from Attio by its record_id |
| `delete-entry` | `attio.deleteEntry()` | `--entry-id` `--list` | 0 | Delete a single list entry by its entry_id in Attio |
| `delete-note` ·common | `attio.deleteNote()` | `--note-id` | 0 | This tool allows users to delete a specific note in Attio by its ID |
| `delete-person` ·common | `attio.deletePerson()` | `--record-id` | 0 | Delete a person record from Attio by its record_id |
| `delete-record` ·common | `attio.deleteRecord()` | `--object-type` `--record-id` | 0 | This tool allows you to delete a record from Attio permanently |
| `delete-task` | `attio.deleteTask()` | `--task-id` | 0 | Delete a task by its task_id |
| `delete-user` ·common | `attio.deleteUser()` | `--record-id` | 0 | Delete a user record from Attio by its record_id |
| `delete-webhook` | `attio.deleteWebhook()` | `--webhook-id` | 0 | Delete a webhook by its webhook_id |
| `delete-workspace-record` ·common | `attio.deleteWorkspaceRecord()` | `--record-id` | 0 | Delete a workspace record from Attio by its record_id |
| `find-record` ·common | `attio.findRecord()` | `--object-id` | 4 | This tool allows users to find a record in Attio by either its unique ID or by searching using unique attributes |
| `get-attribute` | `attio.getAttribute()` | `--attribute` `--identifier` `--target` | 0 | Get information about a single attribute on either an object or a list |
| `get-comment` | `attio.getComment()` | `--comment-id` | 0 | Get a single comment by its comment_id in Attio |
| `get-company` | `attio.getCompany()` | `--record-id` | 0 | Get a single company record by its record_id in Attio |
| `get-deal-record` | `attio.getDealRecord()` | `--record-id` | 0 | Get a single deal record by its record_id in Attio |
| `get-list` | `attio.getList()` | `--list` | 0 | Retrieve details of a single list in your Attio workspace |
| `get-list-entry` | `attio.getListEntry()` | `--entry-id` `--list` | 0 | Get a single list entry by its entry_id |
| `get-note` | `attio.getNote()` | `--note-id` | 0 | Get a single note by its note_id in Attio |
| `get-object` ·common | `attio.getObject()` | `--object` | 0 | Get a single object by its object_id or slug |
| `get-record` ·common ·deprecated | `attio.getRecord()` | `--object-type` `--record-id` | 0 | Use find-record instead |
| `get-record-entries` | `attio.getRecordEntries()` | `--object` `--record-id` | 2 | List all entries, across all lists, for which a record is the parent |
| `get-self` | `attio.getSelf()` | — | 0 | Identify the current access token, the workspace it is linked to, and any permissions it has |
| `get-task` | `attio.getTask()` | `--task-id` | 0 | Get a single task by its task_id in Attio |
| `get-v2-objects-object-records-record-id` ·deprecated | `attio.getV2ObjectsObjectRecordsRecordId()` | `--object` `--record-id` | 0 | Use find-record instead |
| `get-v2-tasks` ·common | `attio.getV2Tasks()` | — | 7 | List all tasks in the workspace |
| `get-v2-workspace-members` ·common ·deprecated | `attio.getV2WorkspaceMembers()` | — | 0 | Use list-workspace-members instead |
| `get-webhook` | `attio.getWebhook()` | `--webhook-id` | 0 | Get a single webhook by its webhook_id in Attio |
| `get-workspace-member` | `attio.getWorkspaceMember()` | `--workspace-member-id` | 0 | Get a single workspace member by their workspace_member_id |
| `get-workspace-record` | `attio.getWorkspaceRecord()` | `--record-id` | 0 | Get a single workspace record by its record_id |
| `list-attribute-options` | `attio.listAttributeOptions()` | `--attribute` `--identifier` `--target` | 3 | List all select options for a particular attribute on either an object or a list |
| `list-attribute-statuses` | `attio.listAttributeStatuses()` | `--attribute` `--identifier` `--target` | 1 | List all statuses for a particular status attribute on either an object or a list |
| `list-attributes` ·common | `attio.listAttributes()` | `--identifier` `--target` | 3 | List the attribute schema for an Attio object or list (including slugs, types, select/status config) to enable correct filtering and writes |
| `list-call-recordings` | `attio.listCallRecordings()` | `--meeting-id` | 2 | List all call recordings for a meeting in Attio |
| `list-companies` ·common | `attio.listCompanies()` | — | 4 | List company records in Attio with optional filtering and sorting |
| `list-company-attribute-values` | `attio.listCompanyAttributeValues()` | `--attribute` `--record-id` | 3 | Get all values for a given attribute on a company record |
| `list-company-record-entries` | `attio.listCompanyRecordEntries()` | `--record-id` | 2 | List all entries across all lists for which a company record is the parent in Attio |
| `list-deal-entries` | `attio.listDealEntries()` | `--record-id` | 2 | List all entries across all lists for which a deal record is the parent in Attio |
| `list-deal-record-attribute-values` | `attio.listDealRecordAttributeValues()` | `--attribute` `--record-id` | 3 | Retrieve all values for a specified attribute on a deal record in Attio |
| `list-deal-records` ·common | `attio.listDealRecords()` | — | 4 | List deal records in Attio with the option to filter and sort results |
| `list-entries` ·deprecated | `attio.listEntries()` | `--list-id` | 4 | Use ATTIO_ATTIO_POST_V2_LISTS_LIST_ENTRIES_QUERY instead |
| `list-list-entries` ·common ·deprecated | `attio.listListEntries()` | `--list` | 4 | Use ATTIO_ATTIO_POST_V2_LISTS_LIST_ENTRIES_QUERY instead |
| `list-list-entry-attribute-values` | `attio.listListEntryAttributeValues()` | `--attribute` `--entry-id` `--list` | 3 | Retrieve all values for a specified attribute on a list entry in Attio |
| `list-lists` ·common | `attio.listLists()` | — | 0 | This tool retrieves all lists available in the Attio workspace, sorted as they appear in the sidebar |
| `list-meetings` ·common | `attio.listMeetings()` | — | 9 | List all meetings in the workspace using a deterministic sort order |
| `list-notes` ·common | `attio.listNotes()` | — | 4 | Lists notes in Attio |
| `list-objects` ·common | `attio.listObjects()` | — | 0 | This tool retrieves a list of all available objects (both system-defined and user-defined) in the Attio workspace via GET /v2/objects, returning key metadata including slugs and IDs for each object |
| `list-people-attribute-values` | `attio.listPeopleAttributeValues()` | `--attribute` `--record-id` | 3 | Get all values for a given attribute on a person record |
| `list-people-record-entries` | `attio.listPeopleRecordEntries()` | `--record-id` | 2 | List all entries across all lists for which a person record is the parent in Attio |
| `list-record-attribute-values` | `attio.listRecordAttributeValues()` | `--attribute` `--object-type` `--record-id` | 3 | Retrieve all values for a specified attribute on a record in Attio |
| `list-records` ·common | `attio.listRecords()` | `--object-type` | 2 | This tool lists records from a specific object type in Attio |
| `list-threads` | `attio.listThreads()` | — | 6 | List threads of comments on a record or list entry in Attio |
| `list-user-record-entries` | `attio.listUserRecordEntries()` | `--record-id` | 2 | List all entries across all lists for which a user record is the parent in Attio |
| `list-user-records` ·common | `attio.listUserRecords()` | — | 4 | List user records in Attio with optional filtering and sorting |
| `list-webhooks` | `attio.listWebhooks()` | — | 2 | Get all webhooks in your Attio workspace |
| `list-workspace-members` ·common | `attio.listWorkspaceMembers()` | — | 0 | List workspace members (actors) so agents can reliably assign owners and resolve workspace-member IDs even when the optional Users standard object is disabled |
| `list-workspace-record-attribute-values` | `attio.listWorkspaceRecordAttributeValues()` | `--attribute` `--record-id` | 3 | Retrieve all values for a specified attribute on a workspace record in Attio |
| `list-workspace-record-entries` | `attio.listWorkspaceRecordEntries()` | `--record-id` | 2 | List all entries across all lists for which a workspace record is the parent in Attio |
| `list-workspace-records` | `attio.listWorkspaceRecords()` | — | 4 | List workspace records with filtering and sorting options |
| `patch-record` ·common | `attio.patchRecord()` | `--object` `--record-id` `--values` | 0 | Update people, companies, and other records by record_id using PATCH method |
| `patch-v2-lists-list-entries-entry-id` | `attio.patchV2ListsListEntriesEntryId()` | `--entry-id` `--entry-values` `--list` | 0 | Update list entries by entry_id in Attio |
| `people-get-person` | `attio.peopleGetPerson()` | `--record-id` | 0 | Get a single person record by its record_id in Attio |
| `people-list-persons` ·common | `attio.peopleListPersons()` | — | 4 | List person records from Attio with optional filtering and sorting |
| `post-v2-lists-list-entries` | `attio.postV2ListsListEntries()` | `--list` `--parent-object` `--parent-record-id` | 1 | Add a record to a list as a new list entry in Attio |
| `post-v2-lists-list-entries-query` ·common | `attio.postV2ListsListEntriesQuery()` | `--list` | 4 | List entries in a given list, with the option to filter and sort results |
| `post-v2-objects-object-records` ·common ·deprecated | `attio.postV2ObjectsObjectRecords()` | `--object` `--values` | 0 | Use create-record instead |
| `post-v2-objects-object-records-query` ·common | `attio.postV2ObjectsObjectRecordsQuery()` | `--object` | 4 | List people, company or other records in Attio with the option to filter and sort results |
| `post-v2-objects-records-search` ·common ·deprecated | `attio.postV2ObjectsRecordsSearch()` | `--objects` `--query` `--request-as` | 1 | Use search-records instead |
| `put-v2-lists-list-entries` | `attio.putV2ListsListEntries()` | `--list` `--parent-object` `--parent-record-id` | 1 | Create or update a list entry for a given parent record in Attio |
| `put-v2-lists-list-entries-entry-id` | `attio.putV2ListsListEntriesEntryId()` | `--entry-id` `--entry-values` `--list` | 0 | Update list entries by entry_id in Attio using PUT method |
| `put-v2-objects-object-records` ·common | `attio.putV2ObjectsObjectRecords()` | `--matching-attribute` `--object` `--values` | 0 | Create or update people, companies and other records in Attio using a matching attribute |
| `put-v2-objects-object-records-record-id` | `attio.putV2ObjectsObjectRecordsRecordId()` | `--object` `--record-id` `--values` | 0 | Update people, companies, and other records by record_id using PUT method |
| `query-records` ·common | `attio.queryRecords()` | `--object` | 4 | Query records for a specific Attio object using server-side filtering operators and sorting |
| `search-records` ·common | `attio.searchRecords()` | `--objects` `--query` `--request-as` | 1 | Fuzzy search for records across multiple objects in Attio |
| `update-attribute` | `attio.updateAttribute()` | `--attribute` `--data` `--identifier` `--target` | 0 | Update an existing attribute by its attribute_id or slug |
| `update-company` ·common | `attio.updateCompany()` | `--record-id` `--values` | 0 | Update a company record in Attio by its record_id |
| `update-deal-record` ·common | `attio.updateDealRecord()` | `--record-id` `--values` | 0 | Update an existing deal record in Attio by record ID |
| `update-entry` ·deprecated | `attio.updateEntry()` | `--entry-id` `--entry-values` `--list-id` | 0 | Use ATTIO_ATTIO_PATCH_V2_LISTS_LIST_ENTRIES_ENTRY_ID instead |
| `update-list` | `attio.updateList()` | `--list` | 4 | Update an existing list in Attio |
| `update-object` | `attio.updateObject()` | `--data` `--object-id` | 0 | Update a single object's configuration in Attio |

## Docs

- [run CLI](https://docs.boxd.sh/cli/run): Call connected integrations from the shell, connect new ones, and run automations.
- [Quickstart](https://docs.boxd.sh/guides/integrations/quickstart): Connect an integration, call it from the shell, and turn a script into an automation.
- [Connections](https://docs.boxd.sh/guides/integrations/connections): Connect an account once, for yourself or for your whole organization.
- [Scripts](https://docs.boxd.sh/guides/automations/scripts): Typed integrations, triggers, schedules and state in a .run.ts file.
- [Jobs](https://docs.boxd.sh/guides/automations/jobs): How a script becomes a background job: states, retries, sleep and wake.
- [Beyond the catalog](https://docs.boxd.sh/guides/automations/beyond-the-catalog): Reach your own APIs, databases and cloud accounts from a script.
