attio-sdk-patterns
Build a typed Attio REST client with tenant-aware tokens, endpoint-specific pagination, structured errors, bounded retries, and contract tests while distinguishing it from the Attio App SDK. Use when creating or refactoring Attio integration code. Trigger with "Attio SDK", "Attio client wrapper", or "typed Attio API".
Allowed Tools
Provided by Plugin
attio-pack
Attio CRM integration pack with 18 operator skills
Installation
This skill is included in the attio-pack plugin:
/plugin install attio-pack@claude-code-plugins-plus
Click to copy
Instructions
Attio Typed Client Patterns
Overview
This skill designs a small REST client around the endpoints an application actually uses. It does not conflate a server-side REST wrapper with Attio's attio App SDK for in-product apps.
Prerequisites
- Runtime, package manager, and existing HTTP conventions
- Exact endpoints, methods, scopes, and response shapes
- Tenancy and credential model
- Existing tests and error-handling policy
Tool Discipline
Use Read, Glob, and Grep to inspect clients, types, dependency policy, and tests. Use WebFetch only for official Attio REST, OpenAPI, and App SDK documentation. Use Write or Edit after the target abstraction and endpoint contracts are confirmed.
Current Contract
- Attio REST requests use the
https://api.attio.com/v2base URL and endpoint-specific scopes. - Pagination is endpoint-specific: some operations use limit and offset, while others return a cursor such as
pagination.next_cursor. - The Attio App SDK package
attioserves apps running inside Attio and is not a universal REST client replacement. - Generated types can start from the official OpenAPI document, but application-level validation and tests still own runtime safety.
Authentication
Inject a token provider that resolves the authorized workspace at request time. Do not place a global production token in source, client constructors, snapshots, fixtures, or logs.
Instructions
- Inventory call sites and group the smallest useful endpoint surface.
- Reverify each method, path, scope, body, response, and paginator in official documentation.
- Define typed request and response boundaries with runtime validation for external data.
- Centralize base URL, authorization, timeouts, redaction, request IDs, and structured error translation.
- Implement separate offset and cursor iterators; bind each endpoint explicitly to the correct strategy.
- Retry only eligible transient failures, respecting rate limits and mutation idempotency.
- Add fixture, pagination-termination, error, redaction, and tenant-isolation tests.
Approval Boundaries
Do not replace an established client, add a generated dependency, or migrate production call sites without owner approval and compatibility evidence.
Output
Return the endpoint inventory, client interface, pagination mapping, error taxonomy, auth boundary, test evidence, migration plan, and rollback point.
Error Handling
| Condition | Response |
|---|---|
| Endpoint contract is ambiguous | Stop and recheck the official endpoint reference. |
| Runtime payload fails validation | Return a typed contract error and preserve redacted evidence. |
| Pagination repeats a page | Abort at the loop guard and record the endpoint strategy. |
| Tenant token does not match context | Reject before sending the request. |
Examples
Input:
runtime=TypeScript; endpoints=record query and task create; tenancy=multi-workspace
Expected handoff:
client=typed REST wrapper; pagination=endpoint mapped; tenant-tests=pass