From attio-pack
Manage Attio lists, entries, notes, and tasks via REST API for sales pipelines, kanban boards, CRM notes, and assignments.
How this skill is triggered — by the user, by Claude, or both
Slash command
/attio-pack:attio-core-workflow-bThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Lists are Attio's pipeline/board primitive -- they contain entries (records added to the list with list-specific attributes like stage or owner). This skill also covers notes and tasks, which attach to records for activity tracking.
Lists are Attio's pipeline/board primitive -- they contain entries (records added to the list with list-specific attributes like stage or owner). This skill also covers notes and tasks, which attach to records for activity tracking.
attio-install-auth completedobject_configuration:read, record_permission:read, list_entry:read, list_entry:read-write, note:read-write, task:read-write, user_management:read// GET /v2/lists
const lists = await client.get<{
data: Array<{
id: { list_id: string };
api_slug: string;
name: string;
parent_object: string[]; // Which object types can be added
}>;
}>("/lists");
console.log(lists.data.map((l) => `${l.api_slug}: ${l.name}`));
// Output: ["sales_pipeline: Sales Pipeline", "hiring: Hiring Pipeline"]
// POST /v2/lists/{list_slug}/entries/query
const entries = await client.post<{
data: Array<{
entry_id: string;
record_id: string;
created_at: string;
values: Record<string, any[]>;
}>;
}>("/lists/sales_pipeline/entries/query", {
filter: {
stage: { status: { $eq: "In Progress" } },
},
sorts: [
{ attribute: "created_at", field: "created_at", direction: "desc" },
],
limit: 50,
});
// POST /v2/lists/{list_slug}/entries
const entry = await client.post<{ data: { entry_id: string } }>(
"/lists/sales_pipeline/entries",
{
data: {
// The record to add to the list
parent_record_id: companyRecordId,
parent_object: "companies",
// List-specific attribute values
values: {
stage: [{ status: "Qualified" }],
deal_value: [{ currency_code: "USD", currency_value: 50000 }],
owner: [{ referenced_actor_id: workspaceMemberId, referenced_actor_type: "workspace-member" }],
},
},
}
);
// PATCH /v2/lists/{list_slug}/entries/{entry_id} -- append multiselect
await client.patch(
`/lists/sales_pipeline/entries/${entryId}`,
{
data: {
values: {
stage: [{ status: "Won" }],
},
},
}
);
// PUT /v2/lists/{list_slug}/entries/{entry_id} -- overwrite multiselect
await client.put(
`/lists/sales_pipeline/entries/${entryId}`,
{
data: {
values: {
stage: [{ status: "Lost" }],
},
},
}
);
// DELETE /v2/lists/{list_slug}/entries/{entry_id}
await client.delete(`/lists/sales_pipeline/entries/${entryId}`);
// Note: This removes from the list only. The underlying record is not deleted.
// POST /v2/notes
const note = await client.post<{
data: { id: { note_id: string } };
}>("/notes", {
data: {
// Link to a parent record
parent_object: "companies",
parent_record_id: companyRecordId,
// Note content
title: "Q1 Review Meeting",
format: "plaintext", // or "markdown"
content: "Discussed renewal timeline. Budget approved for next quarter.",
},
});
// GET /v2/notes?parent_object=companies&parent_record_id={id}
const notes = await client.get<{
data: Array<{
id: { note_id: string };
title: string;
content: string;
created_at: string;
created_by_actor: { type: string; id: string };
}>;
}>(`/notes?parent_object=companies&parent_record_id=${companyRecordId}`);
// POST /v2/tasks
const task = await client.post<{
data: { id: { task_id: string } };
}>("/tasks", {
data: {
content: "Send renewal proposal to Acme Corp",
deadline: "2025-07-15T17:00:00.000Z",
is_completed: false,
// Link to records
linked_records: [
{ target_object: "companies", target_record_id: companyRecordId },
],
// Assign to workspace members
assignees: [
{ referenced_actor_id: memberId, referenced_actor_type: "workspace-member" },
],
},
});
// Complete a task
await client.patch(`/tasks/${taskId}`, {
data: { is_completed: true },
});
// List tasks (sorted oldest to newest by default)
const tasks = await client.get<{
data: Array<{
id: { task_id: string };
content: string;
deadline: string | null;
is_completed: boolean;
}>;
}>("/tasks");
Objects (people, companies, deals)
└── Records ← individual CRM entries (Step 1-7 of core-workflow-a)
└── Notes, Tasks ← activity attached to records
Lists (pipelines, boards)
└── Entries ← a record placed in a list context
└── List-specific values (stage, owner, custom columns)
| Error | Status | Cause | Solution |
|---|---|---|---|
not_found | 404 | Invalid list slug or entry ID | Verify with GET /v2/lists |
insufficient_scopes | 403 | Missing list_entry:read-write | Update token scopes |
validation_error | 422 | Wrong parent_object for list | Check list's parent_object array |
insufficient_scopes | 403 | Missing note:read-write for notes | Add note scope to token |
insufficient_scopes | 403 | Missing task:read-write + user_management:read | Tasks need both scopes |
For error diagnosis, see attio-common-errors. For webhooks on list/record changes, see attio-webhooks-events.
npx claudepluginhub fleet-to-force/claude-code-plugins-plus --plugin attio-pack7plugins reuse this skill
First indexed Jul 10, 2026
Showing the 6 earliest of 7 plugins
Manage Attio lists, entries, notes, and tasks via REST API for sales pipelines, kanban boards, CRM notes, and assignments.
Manages Attio CRM records (companies, people, deals), pipelines, notes, and tasks via REST API. Useful for searching contacts, adding notes, completing tasks, or syncing prospect data.
Configures Attio as a programmable CRM for B2B SaaS GTM, including custom objects, workflow automation, enrichment, and migration from HubSpot/Salesforce.