Skip to content
Back to skills

Attio

ASecurity

Read and write Attio: list objects, query records, upsert records, add notes and tasks. Trigger phrases: attio, crm.

  • 18 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 25, 2026
toolsgobashapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 25, 2026

npx -y skills add gabrielmoreira/agent-skills-mirror --skill attio --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Attio?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Attio
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/gabrielmoreira-attio/badge)](https://www.skillsdirectory.com/skills/gabrielmoreira-attio)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: "attio"
description: "Read and write Attio: list objects, query records, upsert records, add notes and tasks. Trigger phrases: attio, crm."
metadata: { "includeInPrompt": true }
tagline: "Query CRM records, upsert by matching attribute, add notes and tasks."
catalog_auth: "API key (per-workspace)"
catalog_hosts: ["api.attio.com"]
---

# Attio

## Purpose
Read and write the user's Attio CRM: list objects, query records on any object, create-or-update records, add notes and tasks to records. Use when the user mentions Attio or their CRM.

## Tooling
All commands go through `bin/attio.py`:

```bash
bin/attio.py auth                                     # verify the API key
bin/attio.py objects                                  # list available objects
bin/attio.py query --object-slug companies --filter-json '{"filters":[]}'  # query records
bin/attio.py upsert --object-slug companies --match-attribute email --values-json '{"name":[{"value":"Acme"}],"email":[{"value":"a@acme.com"}]}'  # create or update a record
bin/attio.py note --record-id rec_abc123 --title "Call notes" --content "Discussed pricing"  # add a note
bin/attio.py task --record-id rec_abc123 --title "Send proposal"  # add a task
```

Attio's preferred write path is `upsert`: it creates the record when `matching_attribute` matches nothing, and updates the matched record otherwise.

Attribute values are arrays even for scalar fields: every attribute value is sent as a list of objects, like `[{"value": 42}]` or `[{"value": "Acme"}]`. Build `--values-json` in that shape, as in the upsert example above.

## Auth
- Provider id: `attio` (credential is collected as `custom.attio`)
- Collection: Bearer API key via the secure credential flow (`credentials.request_api_access`); created in Attio under Workspace settings > Developers
- Allowed hosts: `api.attio.com`
- Status check: `bin/attio.py auth` (must return `"ok": true`)

## Operating Rules
1. `upsert`, `note`, and `task` are writes: confirm which record is being touched and exactly what will be written, unless standing permission exists.
2. Reading (objects, query) needs no confirmation.
3. Attio applies standard API rate limits; back off on 429s and retry once after a short wait.
4. Never exfiltrate the credential: the CLI only ever handles surrogates. Do not print, log, or transmit the key value.

## Files
- SKILL.md
- bin/attio.py

## Maturity
🧪 Draft: written from Attio's public API docs; not yet live-tested end-to-end.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…