--- name: attio-install-auth description: >- Choose and configure Attio REST authentication for a single workspace or multi-workspace OAuth app, including least-privilege scopes and a read-only verification. Use when connecting a service to Attio. Trigger with "Attio auth", "Attio API key", or "Attio OAuth setup". argument-hint: "[repository-path] [single-workspace|oauth]" allowed-tools: Read, Glob, Grep, WebFetch, Write, Edit version: 1.8.0 author: Jeremy Longshore license: MIT tags: - saas - attio - authentication model: inherit effort: high compatibility: Designed for Claude Code --- # Attio Authentication Setup ## Overview This skill selects the correct Attio access-token path, maps endpoint scopes, and proves the credential with a non-mutating request. ## Prerequisites - The integration's workspace and tenancy model - Exact endpoints and operations the application will use - An approved secret store and rotation owner - Registered redirect URIs when OAuth is required ## Tool Discipline Use `Read`, `Glob`, and `Grep` to inspect the local auth wrapper, secret names, redirect configuration, and endpoint use. Use `WebFetch` only for current official Attio documentation. Use `Write` or `Edit` after the auth model and target files are confirmed. ## Current Contract - Prefer OAuth 2.0 for an app that serves multiple Attio workspaces. - Use a manually generated workspace API key for one controlled workspace. - Both credential types can be sent as `Authorization: Bearer `. - Required scopes are documented per endpoint and should be granted operation by operation. - Attio also supports Basic authentication with the token as username and an empty password, but Bearer is recommended. ## Authentication For OAuth, validate `state`, use the registered redirect URI exactly, exchange the code server-side, and encrypt the resulting token at rest. For a workspace key, create it in developer settings with the minimum scopes and store it only in the approved secret manager. ## Instructions 1. Classify the integration as single-workspace or multi-workspace. 2. Inventory methods and endpoints, then derive scopes from their current reference pages. 3. Define secret storage, tenant-to-token mapping, rotation, revocation, and audit ownership. 4. Implement server-side credential injection without token logging. 5. For OAuth, bind and verify `state`; never expose the client secret to browser code. 6. Verify with one read-only endpoint and record only status, workspace alias, and granted scope names. ## Approval Boundaries Do not generate or broaden production credentials, modify redirect URIs, or migrate tenant tokens without the owning administrator's approval and a rollback plan. ## Output Return the chosen auth model, endpoint-to-scope map, secret reference, OAuth control evidence if applicable, read-only verification, and rotation owner. ## Error Handling | Condition | Response | |---|---| | Tenancy model is unclear | Stop before choosing a credential type. | | OAuth state mismatch | Reject the callback and start a fresh authorization flow. | | 403 after verification | Compare the exact endpoint scopes; do not grant all scopes. | | Token appears in logs | Revoke or rotate it and scrub retained output. | ## Examples Input: ```text tenancy=multiple-workspaces; endpoint=GET /v2/tasks; storage=encrypted-server-side ``` Expected handoff: ```text auth=oauth; state=verified; scopes=endpoint-derived; read-test=pass ``` ## Resources - [Skill-specific official documentation](references/official-docs.md) - [Authentication](https://docs.attio.com/rest-api/guides/authentication) - [OAuth tutorial](https://docs.attio.com/rest-api/tutorials/connect-an-app-through-oauth) - [REST API overview](https://docs.attio.com/rest-api/overview)