{"_id":"attio-ts-sdk","_rev":"15-9de172bba4d346397626025623f71f86","name":"attio-ts-sdk","dist-tags":{"latest":"2.3.3"},"versions":{"0.0.0":{"name":"attio-ts-sdk","version":"0.0.0","keywords":["attio","crm","sdk","typescript","zod"],"author":{"name":"Harold Martin","email":"harold.martin@gmail.com"},"license":"MIT","_id":"attio-ts-sdk@0.0.0","maintainers":[{"name":"hbmartin","email":"harold.martin@gmail.com"}],"homepage":"https://github.com/hbmartin/attio-ts-sdk","bugs":{"url":"https://github.com/hbmartin/attio-ts-sdk/issues"},"dist":{"shasum":"6b7b203921360c2c242fb7550f7f7040ccde6b59","tarball":"https://registry.npmjs.org/attio-ts-sdk/-/attio-ts-sdk-0.0.0.tgz","fileCount":9,"integrity":"sha512-8sGlUGhc133BWKWAxHysvney+RI+IWRxkE+I8WS705+xpk94Q7YwUtM6tBWGs+eZOengIdVFRgawzLqov2SQ4Q==","signatures":[{"sig":"MEYCIQCE+KeEoMOINY5B6EcXOn1dk00H70FDy8hqiTQppknxhgIhALOzWTpE3J6y3DAekAmZ1gHm0hA85ZB97/wV7qb7tn6R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3565923},"type":"module","jscpd":{"ignore":["**/node_modules/**","**/dist/**","**/coverage/**","**/test/**","**/src/generated/**","**/*.json","**/*.test.ts"],"absolute":false,"reporters":["markdown","console"],"threshold":0},"types":"./dist/index.d.mts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"gitHead":"10fcb5b5a19f1b2aa55d1da6703fcd621e2ffde8","scripts":{"dev":"tsdown --watch","lint":"biome check --error-on-warnings","size":"size-limit","test":"vitest run --coverage","build":"tsdown","dupes":"jscpd","format":"biome format --write"},"_npmUser":{"name":"hbmartin","email":"harold.martin@gmail.com"},"repository":{"url":"git+https://github.com/hbmartin/attio-ts-sdk.git","type":"git"},"size-limit":[{"path":"dist/browser.js","limit":"3.5 KB"}],"_npmVersion":"11.7.0","description":"TypeScript SDK for Attio CRM based on Zod v4","directories":{},"resolutions":{"@types/node":"^24"},"sideEffects":false,"_nodeVersion":"25.4.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","attw":"^1.0.0","jscpd":"^4.0.7","tsdown":"^0.20.0","vitest":"^4.0.17","publint":"^0.3.17","size-limit":"^8.2.6","typescript":"^5.9.3","@types/node":"^24.10.9","@biomejs/biome":"^2.3.11","@hey-api/openapi-ts":"^0.90.8","@vitest/coverage-istanbul":"^4.0.17","@size-limit/preset-small-lib":"^8.2.6"},"peerDependencies":{"zod":"^4"},"_npmOperationalInternal":{"tmp":"tmp/attio-ts-sdk_0.0.0_1769100760918_0.7266982971784803","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"attio-ts-sdk","version":"1.0.0","keywords":["attio","crm","sdk","typescript","zod","api","api-client","rest","openapi","type-safe","validation","schema","contacts","sales"],"author":{"name":"Harold Martin","email":"harold.martin@gmail.com"},"license":"MIT","_id":"attio-ts-sdk@1.0.0","maintainers":[{"name":"hbmartin","email":"harold.martin@gmail.com"}],"homepage":"https://github.com/hbmartin/attio-ts-sdk","bugs":{"url":"https://github.com/hbmartin/attio-ts-sdk/issues"},"dist":{"shasum":"11834d02725c5b28af1d6b598a00cd916093d2b7","tarball":"https://registry.npmjs.org/attio-ts-sdk/-/attio-ts-sdk-1.0.0.tgz","fileCount":6,"integrity":"sha512-NqxUumw4vf6B5taK3IsX3tlH7Byy0JxlQ3u06L5Fot8JRWRuWuWYHep8xKAJXHMTRyyTCiaDtibk4qoA+Vji3Q==","signatures":[{"sig":"MEUCIQCM8C52xVOobJWBh1KtzOLXxMurGcl0ky626v/N9AeZ2QIgTf9tb65RmsZ0JgbRtMyGnK0HHfW4N5FLn2j11NJbOdA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/attio-ts-sdk@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1926286},"type":"module","jscpd":{"ignore":["**/node_modules/**","**/dist/**","**/coverage/**","**/test/**","**/src/generated/**","**/*.json","**/*.test.ts"],"absolute":false,"reporters":["markdown","console"],"threshold":0},"types":"./dist/index.d.mts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"d137c815bdc2f2a0edb8989824630b8bf8f2cf68","scripts":{"dev":"tsdown --watch","lint":"biome check --error-on-warnings","test":"vitest run --coverage","build":"tsdown","dupes":"jscpd","format":"biome check --write","prepare":"husky","openapi-ts":"openapi-ts","lint:report":"biome check . --reporter=json | jq -r '  .diagnostics[]  | .category' | sort | uniq -c | sort -nr"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ed2efcf8-2433-4186-937d-e345e7874f40"}},"repository":{"url":"git+https://github.com/hbmartin/attio-ts-sdk.git","type":"git"},"_npmVersion":"11.8.0","description":"Type-safe TypeScript SDK for the Attio CRM API with Zod v4 runtime validation","directories":{},"resolutions":{"@types/node":"^24"},"sideEffects":false,"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","attw":"^1.0.0","husky":"^9.1.7","jscpd":"^4.0.7","tsdown":"^0.20.0","vitest":"^4.0.17","publint":"^0.3.17","typescript":"^5.9.3","@types/node":"^24.10.9","@biomejs/biome":"^2.3.11","@commitlint/cli":"^20.3.1","@hey-api/openapi-ts":"^0.90.8","@vitest/coverage-istanbul":"^4.0.17","@commitlint/config-conventional":"^20.3.1"},"peerDependencies":{"zod":"^4"},"_npmOperationalInternal":{"tmp":"tmp/attio-ts-sdk_1.0.0_1769112641689_0.5682082476236545","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"attio-ts-sdk","version":"1.1.0","keywords":["attio","crm","sdk","typescript","zod","api","api-client","rest","openapi","type-safe","validation","schema","contacts","sales"],"author":{"name":"Harold Martin","email":"harold.martin@gmail.com"},"license":"MIT","_id":"attio-ts-sdk@1.1.0","maintainers":[{"name":"hbmartin","email":"harold.martin@gmail.com"}],"homepage":"https://github.com/hbmartin/attio-ts-sdk","bugs":{"url":"https://github.com/hbmartin/attio-ts-sdk/issues"},"dist":{"shasum":"659a5fe14ba84ba1f12d77e92f98ca29c8c8895b","tarball":"https://registry.npmjs.org/attio-ts-sdk/-/attio-ts-sdk-1.1.0.tgz","fileCount":6,"integrity":"sha512-M/zj0Jd+unF5CAd6+fucIEAZcH1JfYoSKj1AV4mMg4R+EIAl3bJh1uD1VaRc4Our8yFqvAIxYT366PvWVmNlLg==","signatures":[{"sig":"MEUCIQDGpGp7ia6EboAXzh+ew922pbwusbxNQzGXzyNmNAIRMwIgCLbs0PGbf2X6UbsycUt9YTqSTiDaGYC/JvVS35MGFkw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/attio-ts-sdk@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2022025},"type":"module","jscpd":{"ignore":["**/node_modules/**","**/dist/**","**/coverage/**","**/test/**","**/src/generated/**","**/*.json","**/*.test.ts"],"absolute":false,"reporters":["markdown","console"],"threshold":0},"types":"./dist/index.d.mts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"31328fc146b5b01440c113dfbfed3f9a53c08cd8","scripts":{"dev":"tsdown --watch","lint":"biome check --error-on-warnings","test":"vitest run --coverage","build":"tsc --noEmit && tsdown","dupes":"jscpd","format":"biome check --write","prepare":"husky","typecheck":"tsc --noEmit","openapi-ts":"openapi-ts","lint:report":"biome check . --reporter=json | jq -r '  .diagnostics[]  | .category' | sort | uniq -c | sort -nr"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ed2efcf8-2433-4186-937d-e345e7874f40"}},"repository":{"url":"git+https://github.com/hbmartin/attio-ts-sdk.git","type":"git"},"_npmVersion":"11.8.0","description":"Type-safe TypeScript SDK for the Attio CRM API with Zod v4 runtime validation","directories":{},"resolutions":{"@types/node":"^24"},"sideEffects":false,"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.6","attw":"^1.0.0","husky":"^9.1.7","jscpd":"^4.0.8","tsdown":"^0.20.1","vitest":"^4.0.18","publint":"^0.3.17","typescript":"^5.9.3","@types/node":"^24.10.9","undici-types":"^7.20.0","@biomejs/biome":"^2.3.13","@commitlint/cli":"^20.4.1","@hey-api/openapi-ts":"^0.91.1","@vitest/coverage-istanbul":"^4.0.18","@commitlint/config-conventional":"^20.4.1"},"peerDependencies":{"zod":"^4"},"_npmOperationalInternal":{"tmp":"tmp/attio-ts-sdk_1.1.0_1770057713619_0.45419735099455516","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"attio-ts-sdk","version":"1.1.1","keywords":["attio","crm","sdk","typescript","zod","api","api-client","rest","openapi","type-safe","validation","schema","contacts","sales","attio-api","attio-api-client","attio-rest-api","deals","companies","leads","codegen","customer-data","attio ts","attio js","attio typescript","attio javascript","attio api"],"author":{"name":"Harold Martin","email":"harold.martin@gmail.com"},"license":"MIT","_id":"attio-ts-sdk@1.1.1","maintainers":[{"name":"hbmartin","email":"harold.martin@gmail.com"}],"homepage":"https://github.com/hbmartin/attio-ts-sdk","bugs":{"url":"https://github.com/hbmartin/attio-ts-sdk/issues"},"dist":{"shasum":"6ef76690d9a654fff87ccbd9a8625ffc099f4536","tarball":"https://registry.npmjs.org/attio-ts-sdk/-/attio-ts-sdk-1.1.1.tgz","fileCount":6,"integrity":"sha512-ACTZUEeXTzcfnsMJm45fNsqDpZG44ukFEVZBXmGqmr/1zRnCFws5/7Jz8GyNGyAIEGgSSEHecIRfoYEr9i3yIA==","signatures":[{"sig":"MEUCIBrvhZN2PCWnZ4sFnCGB+gRbipz4zaFbnzINvkXUC2tIAiEA4f7Nl9R13NUfnJQXxm83YrS3dMtzbZ+Z0vBTjdiAK6M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/attio-ts-sdk@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2030087},"type":"module","jscpd":{"ignore":["**/node_modules/**","**/dist/**","**/coverage/**","**/test/**","**/src/generated/**","**/*.json","**/*.test.ts"],"absolute":false,"reporters":["markdown","console"],"threshold":0},"types":"./dist/index.d.mts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"69884ae1fea240a5de08efd7f87c41dd0401d035","scripts":{"dev":"tsdown --watch","lint":"biome check --error-on-warnings","test":"vitest run --coverage","build":"tsc --noEmit && tsdown","dupes":"jscpd","format":"biome check --write","prepare":"husky","typecheck":"tsc --noEmit","openapi-ts":"openapi-ts","lint:report":"biome check . --reporter=json | jq -r '  .diagnostics[]  | .category' | sort | uniq -c | sort -nr"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ed2efcf8-2433-4186-937d-e345e7874f40"}},"repository":{"url":"git+https://github.com/hbmartin/attio-ts-sdk.git","type":"git"},"_npmVersion":"11.8.0","description":"Type-safe TypeScript SDK for the Attio CRM API with Zod v4 runtime validation","directories":{},"resolutions":{"@types/node":"^24"},"sideEffects":false,"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.6","attw":"^1.0.0","husky":"^9.1.7","jscpd":"^4.0.8","tsdown":"^0.20.1","vitest":"^4.0.18","publint":"^0.3.17","typescript":"^5.9.3","@types/node":"^24.10.9","undici-types":"^7.20.0","@biomejs/biome":"^2.3.13","@commitlint/cli":"^20.4.1","@hey-api/openapi-ts":"^0.91.1","@vitest/coverage-istanbul":"^4.0.18","@commitlint/config-conventional":"^20.4.1"},"peerDependencies":{"zod":"^4"},"_npmOperationalInternal":{"tmp":"tmp/attio-ts-sdk_1.1.1_1770132462946_0.8323546180631782","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"attio-ts-sdk","version":"1.2.0","keywords":["attio","crm","sdk","typescript","zod","api","api-client","rest","openapi","type-safe","validation","schema","contacts","sales","attio-api","attio-api-client","attio-rest-api","deals","companies","leads","codegen","customer-data","attio ts","attio js","attio typescript","attio javascript","attio api"],"author":{"name":"Harold Martin","email":"harold.martin@gmail.com"},"license":"MIT","_id":"attio-ts-sdk@1.2.0","maintainers":[{"name":"hbmartin","email":"harold.martin@gmail.com"}],"homepage":"https://github.com/hbmartin/attio-ts-sdk","bugs":{"url":"https://github.com/hbmartin/attio-ts-sdk/issues"},"dist":{"shasum":"445f74f576d4c682cb7cf8c947dcbd99df588585","tarball":"https://registry.npmjs.org/attio-ts-sdk/-/attio-ts-sdk-1.2.0.tgz","fileCount":6,"integrity":"sha512-TPMAB/E2MGjQKfHv8OwNxWgqtbpdmtJuGOWEEUqF4V9sjEgWuMVta0j0zjMmQVOu4IzOYf90uCr0ezFJBjg7Jw==","signatures":[{"sig":"MEQCIBzxdtZBK+2RpclhR1wZ7aySuXGit1eeQ38HYyS+h/dDAiBNGJfX3IW5bhQ9OjAs6d0QJoSWwTXxls/WphcD4GDfGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/attio-ts-sdk@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2046900},"type":"module","jscpd":{"ignore":["**/node_modules/**","**/dist/**","**/coverage/**","**/test/**","**/src/generated/**","**/*.json","**/*.test.ts"],"absolute":false,"reporters":["markdown","console"],"threshold":0},"types":"./dist/index.d.mts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"c40ffeb97542841fe4e1ff427de02a5d32d19da6","scripts":{"dev":"tsdown --watch","lint":"biome check --error-on-warnings","test":"vitest run --coverage","build":"tsc --noEmit && tsdown","dupes":"jscpd","format":"biome check --write","prepare":"husky","typecheck":"tsc --noEmit","openapi-ts":"openapi-ts","lint:report":"biome check . --reporter=json | jq -r '  .diagnostics[]  | .category' | sort | uniq -c | sort -nr"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ed2efcf8-2433-4186-937d-e345e7874f40"}},"repository":{"url":"git+https://github.com/hbmartin/attio-ts-sdk.git","type":"git"},"_npmVersion":"11.8.0","description":"Type-safe TypeScript SDK for the Attio CRM API with Zod v4 runtime validation","directories":{},"resolutions":{"@types/node":"^24"},"sideEffects":false,"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.6","husky":"^9.1.7","jscpd":"^4.0.8","tsdown":"^0.20.1","vitest":"^4.0.18","publint":"^0.3.17","typescript":"^5.9.3","@types/node":"^24.10.9","undici-types":"^7.20.0","@biomejs/biome":"^2.3.13","@commitlint/cli":"^20.4.1","@hey-api/openapi-ts":"^0.91.1","@arethetypeswrong/cli":"^0.18.2","@vitest/coverage-istanbul":"^4.0.18","@commitlint/config-conventional":"^20.4.1"},"peerDependencies":{"zod":"^4"},"_npmOperationalInternal":{"tmp":"tmp/attio-ts-sdk_1.2.0_1770137507428_0.3123377155446041","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"attio-ts-sdk","version":"1.2.1","keywords":["attio","crm","sdk","typescript","zod","api","api-client","rest","openapi","type-safe","validation","schema","contacts","sales","attio-api","attio-api-client","attio-rest-api","deals","companies","leads","codegen","customer-data","attio ts","attio js","attio typescript","attio javascript","attio api"],"author":{"name":"Harold Martin","email":"harold.martin@gmail.com"},"license":"MIT","_id":"attio-ts-sdk@1.2.1","maintainers":[{"name":"hbmartin","email":"harold.martin@gmail.com"}],"homepage":"https://github.com/hbmartin/attio-ts-sdk","bugs":{"url":"https://github.com/hbmartin/attio-ts-sdk/issues"},"dist":{"shasum":"4f46263222b6afbb3d40ff251913dd0ee07c7876","tarball":"https://registry.npmjs.org/attio-ts-sdk/-/attio-ts-sdk-1.2.1.tgz","fileCount":6,"integrity":"sha512-rCJM6hF4k2DP9yntY9qjIVe5PZeALBs8N5+7nFQDqH9L9YmbzwC0hUUm0wptGuxd8eTGORZ7+gG6kMbXgJqUvA==","signatures":[{"sig":"MEUCIFGzHHL+dBrFqBBfPkC+NvO+1i4axhojLPydRVZ9UGzbAiEAsqJZ5vkpB50TFQR4Ugxd0Xw9/RFZoHqOGHzgIU/5Rlk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/attio-ts-sdk@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2074910},"type":"module","jscpd":{"ignore":["**/node_modules/**","**/dist/**","**/coverage/**","**/test/**","**/src/generated/**","**/*.json","**/*.test.ts"],"absolute":false,"reporters":["markdown","console"],"threshold":0},"types":"./dist/index.d.mts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"18b5500cb8172d820acb494e1e106877bd48bc9b","scripts":{"dev":"tsdown --watch","lint":"biome check --error-on-warnings","test":"vitest run --coverage","build":"tsc --noEmit && tsdown","dupes":"jscpd","format":"biome check --write","prepare":"husky","typecheck":"tsc --noEmit","openapi-ts":"openapi-ts","lint:report":"biome check . --reporter=json | jq -r '  .diagnostics[]  | .category' | sort | uniq -c | sort -nr"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ed2efcf8-2433-4186-937d-e345e7874f40"}},"repository":{"url":"git+https://github.com/hbmartin/attio-ts-sdk.git","type":"git"},"_npmVersion":"11.8.0","description":"Type-safe TypeScript SDK for the Attio CRM API with Zod v4 runtime validation","directories":{},"resolutions":{"@types/node":"^24"},"sideEffects":false,"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.6","husky":"^9.1.7","jscpd":"^4.0.8","tsdown":"^0.20.1","vitest":"^4.0.18","publint":"^0.3.17","typescript":"^5.9.3","@types/node":"^24.10.9","undici-types":"^7.20.0","@biomejs/biome":"^2.3.13","@commitlint/cli":"^20.4.1","@hey-api/openapi-ts":"^0.91.1","@arethetypeswrong/cli":"^0.18.2","@vitest/coverage-istanbul":"^4.0.18","@commitlint/config-conventional":"^20.4.1"},"peerDependencies":{"zod":"^4"},"_npmOperationalInternal":{"tmp":"tmp/attio-ts-sdk_1.2.1_1770144965301_0.5987346532276749","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"attio-ts-sdk","version":"2.0.0","keywords":["attio","crm","sdk","typescript","zod","api","api-client","rest","openapi","type-safe","validation","schema","contacts","sales","attio-api","attio-api-client","attio-rest-api","deals","companies","leads","codegen","customer-data","attio ts","attio js","attio typescript","attio javascript","attio api"],"author":{"name":"Harold Martin","email":"harold.martin@gmail.com"},"license":"MIT","_id":"attio-ts-sdk@2.0.0","maintainers":[{"name":"hbmartin","email":"harold.martin@gmail.com"}],"homepage":"https://github.com/hbmartin/attio-ts-sdk","bugs":{"url":"https://github.com/hbmartin/attio-ts-sdk/issues"},"dist":{"shasum":"ecb8a914d7300ddf95af17fcc96c48d3991da079","tarball":"https://registry.npmjs.org/attio-ts-sdk/-/attio-ts-sdk-2.0.0.tgz","fileCount":6,"integrity":"sha512-CFN9vOu6TmqPinxU0zxjsIgJbNLBs5YJdDdSemdh1msb0J2Gd/fJB0HeVc2B5JH4BLW48NEcPyIDRwjlIMtRLA==","signatures":[{"sig":"MEQCIGENfyDVGdCU4OqXg4K6HcQs207/gHli5ptz6U9jhF6SAiBM3sMig+gw+7/FZmGYx6l7R1XctP3LNcDyXmXCS0ZpCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/attio-ts-sdk@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2114479},"type":"module","jscpd":{"ignore":["**/node_modules/**","**/dist/**","**/coverage/**","**/test/**","**/src/generated/**","**/*.json","**/*.test.ts","**/*.md","**/*.yml"],"absolute":false,"reporters":["json","console"],"threshold":0},"types":"./dist/index.d.mts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"b3f46725ef2bf48296f5f35cc31ef5bac5cddb5d","scripts":{"dev":"tsdown --watch","lint":"biome check --error-on-warnings","test":"vitest run --coverage","build":"tsc --noEmit && tsdown","dupes":"jscpd","format":"biome check --write","prepare":"husky","biome:up":"npx tsx scripts/enable-new-biome-rules.ts --ignore-groups a11y --ignore-rules next --ignore-rules qwik --ignore-rules vue --ignore-rules react --ignore-rules solid --ignore-rules turborepo","typecheck":"tsc --noEmit","openapi-ts":"openapi-ts","lint:report":"biome check . --reporter=json | jq -r '  .diagnostics[]  | .category' | sort | uniq -c | sort -nr"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ed2efcf8-2433-4186-937d-e345e7874f40"}},"repository":{"url":"git+https://github.com/hbmartin/attio-ts-sdk.git","type":"git"},"_npmVersion":"11.9.0","description":"Type-safe TypeScript SDK for the Attio CRM API with Zod v4 runtime validation","directories":{},"resolutions":{"@types/node":"^24"},"sideEffects":false,"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.6","husky":"^9.1.7","jscpd":"^4.0.8","tsdown":"^0.20.3","vitest":"^4.0.18","publint":"^0.3.17","typescript":"^5.9.3","@types/node":"^24.10.11","undici-types":"^7.21.0","@biomejs/biome":"^2.3.14","@commitlint/cli":"^20.4.1","@hey-api/openapi-ts":"^0.91.1","@arethetypeswrong/cli":"^0.18.2","@vitest/coverage-istanbul":"^4.0.18","@commitlint/config-conventional":"^20.4.1"},"peerDependencies":{"zod":"^4"},"_npmOperationalInternal":{"tmp":"tmp/attio-ts-sdk_2.0.0_1770481875739_0.8278583781146798","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"attio-ts-sdk","version":"2.0.1","keywords":["attio","crm","sdk","typescript","zod","api","api-client","rest","openapi","type-safe","validation","schema","contacts","sales","attio-api","attio-api-client","attio-rest-api","deals","companies","leads","codegen","customer-data","attio ts","attio js","attio typescript","attio javascript","attio api"],"author":{"name":"Harold Martin","email":"harold.martin@gmail.com"},"license":"MIT","_id":"attio-ts-sdk@2.0.1","maintainers":[{"name":"hbmartin","email":"harold.martin@gmail.com"}],"homepage":"https://github.com/hbmartin/attio-ts-sdk","bugs":{"url":"https://github.com/hbmartin/attio-ts-sdk/issues"},"dist":{"shasum":"72343f0ae0f8583fc7ea8d2c621b402112a1db87","tarball":"https://registry.npmjs.org/attio-ts-sdk/-/attio-ts-sdk-2.0.1.tgz","fileCount":6,"integrity":"sha512-bTr3Nqppl3b7BNm7Qj9faBrqgPx8vU4uJR+BdfyQPxM9Cax916PTAEViZZSXQz/x1AyhpuSv6jFkGn7wObelSQ==","signatures":[{"sig":"MEUCIQCyMDnPT/IDiWdY+ISoUkgHx3X39R5yQ5ZBlw0e9QTgNAIgHU3m6Vw5WseEF09lHCru9uqkiPHUJxA2FgS46oQ7/cA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/attio-ts-sdk@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2123770},"type":"module","jscpd":{"ignore":["**/node_modules/**","**/dist/**","**/coverage/**","**/test/**","**/src/generated/**","**/*.json","**/*.test.ts","**/*.md","**/*.yml"],"absolute":false,"reporters":["json","console"],"threshold":0},"types":"./dist/index.d.mts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"7baf60f765c8afdb790dedbf63d04fc382d4ff97","scripts":{"dev":"tsdown --watch","lint":"biome check --error-on-warnings","test":"vitest run --coverage","build":"tsc --noEmit && tsdown","dupes":"jscpd","format":"biome check --write","prepare":"husky","biome:up":"npx tsx scripts/enable-new-biome-rules.ts --ignore-groups a11y --ignore-rules next --ignore-rules qwik --ignore-rules vue --ignore-rules react --ignore-rules solid --ignore-rules turborepo","typecheck":"tsc --noEmit","openapi-ts":"openapi-ts","lint:report":"biome check . --reporter=json | jq -r '  .diagnostics[]  | .category' | sort | uniq -c | sort -nr"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ed2efcf8-2433-4186-937d-e345e7874f40"}},"repository":{"url":"git+https://github.com/hbmartin/attio-ts-sdk.git","type":"git"},"_npmVersion":"11.9.0","description":"Type-safe TypeScript SDK for the Attio CRM API with Zod v4 runtime validation","directories":{},"resolutions":{"@types/node":"^24"},"sideEffects":false,"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.6","husky":"^9.1.7","jscpd":"^4.0.8","tsdown":"^0.20.3","vitest":"^4.0.18","publint":"^0.3.17","typescript":"^5.9.3","@types/node":"^24.10.11","undici-types":"^7.21.0","@biomejs/biome":"^2.3.14","@commitlint/cli":"^20.4.1","@hey-api/openapi-ts":"^0.92.3","@arethetypeswrong/cli":"^0.18.2","@vitest/coverage-istanbul":"^4.0.18","@commitlint/config-conventional":"^20.4.1"},"peerDependencies":{"zod":"^4"},"_npmOperationalInternal":{"tmp":"tmp/attio-ts-sdk_2.0.1_1770661912218_0.4098273234647176","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"attio-ts-sdk","version":"2.0.2","keywords":["attio","crm","sdk","typescript","zod","api","api-client","rest","openapi","type-safe","validation","schema","contacts","sales","attio-api","attio-api-client","attio-rest-api","deals","companies","leads","codegen","customer-data","attio ts","attio js","attio typescript","attio javascript","attio api"],"author":{"name":"Harold Martin","email":"harold.martin@gmail.com"},"license":"MIT","_id":"attio-ts-sdk@2.0.2","maintainers":[{"name":"hbmartin","email":"harold.martin@gmail.com"}],"homepage":"https://github.com/hbmartin/attio-ts-sdk","bugs":{"url":"https://github.com/hbmartin/attio-ts-sdk/issues"},"dist":{"shasum":"28e9df377f3993a9714ca15348c6aba5624973a5","tarball":"https://registry.npmjs.org/attio-ts-sdk/-/attio-ts-sdk-2.0.2.tgz","fileCount":6,"integrity":"sha512-B9ONhkdnsltdChNWlG51BqecqV+L8zJNk20PgfpaF4UADQgolsTadOrPzfSD4CK4t1t/ILqbUvdKleDa4kjz0Q==","signatures":[{"sig":"MEQCIHJsFMYpkXczfyWpuGvALJTURpi2uCwlxnpRl6l2mp3aAiAzIjNNXUZKlZLQaJjDuuFp84smIVzji8LkjkxY0lc1Iw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/attio-ts-sdk@2.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2123860},"type":"module","jscpd":{"ignore":["**/node_modules/**","**/dist/**","**/coverage/**","**/test/**","**/src/generated/**","**/*.json","**/*.test.ts","**/*.md","**/*.yml"],"absolute":false,"reporters":["json","console"],"threshold":0},"types":"./dist/index.d.mts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"2c18b97bb6328bea5332b88c08cdcc01bb1ccdde","scripts":{"dev":"tsdown --watch","lint":"biome check --error-on-warnings","test":"vitest run --coverage","build":"tsc --noEmit && tsdown","dupes":"jscpd","format":"biome check --write","prepare":"husky","biome:up":"npx tsx scripts/enable-new-biome-rules.ts --ignore-groups a11y --ignore-rules next --ignore-rules qwik --ignore-rules vue --ignore-rules react --ignore-rules solid --ignore-rules turborepo","typecheck":"tsc --noEmit","openapi-ts":"openapi-ts","lint:report":"biome check . --reporter=json | jq -r '  .diagnostics[]  | .category' | sort | uniq -c | sort -nr"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ed2efcf8-2433-4186-937d-e345e7874f40"}},"repository":{"url":"git+https://github.com/hbmartin/attio-ts-sdk.git","type":"git"},"_npmVersion":"11.9.0","description":"Type-safe TypeScript SDK for the Attio CRM API with Zod v4 runtime validation","directories":{},"resolutions":{"@types/node":"^24"},"sideEffects":false,"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.6","husky":"^9.1.7","jscpd":"^4.0.8","tsdown":"^0.20.3","vitest":"^4.0.18","publint":"^0.3.17","typescript":"^5.9.3","@types/node":"^24.10.11","undici-types":"^7.21.0","@biomejs/biome":"^2.3.14","@commitlint/cli":"^20.4.1","@hey-api/openapi-ts":"^0.92.3","@arethetypeswrong/cli":"^0.18.2","@vitest/coverage-istanbul":"^4.0.18","@commitlint/config-conventional":"^20.4.1"},"peerDependencies":{"zod":"^4"},"_npmOperationalInternal":{"tmp":"tmp/attio-ts-sdk_2.0.2_1770687745432_0.0626723830542193","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"attio-ts-sdk","version":"2.1.0","keywords":["attio","crm","sdk","typescript","zod","api","api-client","rest","openapi","type-safe","validation","schema","contacts","sales","attio-api","attio-api-client","attio-rest-api","deals","companies","leads","codegen","customer-data","attio ts","attio js","attio typescript","attio javascript","attio api"],"author":{"name":"Harold Martin","email":"harold.martin@gmail.com"},"license":"MIT","_id":"attio-ts-sdk@2.1.0","maintainers":[{"name":"hbmartin","email":"harold.martin@gmail.com"}],"homepage":"https://github.com/hbmartin/attio-ts-sdk","bugs":{"url":"https://github.com/hbmartin/attio-ts-sdk/issues"},"dist":{"shasum":"79c20f91c1728b09eb34421fe5cb387e9c967884","tarball":"https://registry.npmjs.org/attio-ts-sdk/-/attio-ts-sdk-2.1.0.tgz","fileCount":6,"integrity":"sha512-bLvcWqw0K6f57M/4sywm6POk24zF9JlJfQ1mIjK/+i41qAkw1leayoi4+uT0QgpPoZuu/naXzNsrn1OINshd+A==","signatures":[{"sig":"MEUCIHeMXkRcHfYWxA50qS5gdFEFHzq1/CNUB/fKEOUOjiluAiEA1ln2fqHRDnx4VcNXCcUxgiFL1nPFa8JIQlI06kGdhUk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/attio-ts-sdk@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2166214},"type":"module","jscpd":{"ignore":["**/node_modules/**","**/dist/**","**/coverage/**","**/test/**","**/src/generated/**","**/*.json","**/*.test.ts","**/*.md","**/*.yml"],"absolute":false,"reporters":["json","console"],"threshold":0},"types":"./dist/index.d.mts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"92e13739b9e66d8fbd4b0a7d920eb0f1fd5b809f","scripts":{"dev":"tsdown --watch","lint":"biome check --error-on-warnings","test":"vitest run --coverage","build":"tsc --noEmit && tsdown","dupes":"jscpd","format":"biome check --write","prepare":"husky","biome:up":"npx tsx scripts/enable-new-biome-rules.ts --ignore-groups a11y --ignore-rules next --ignore-rules qwik --ignore-rules vue --ignore-rules react --ignore-rules solid --ignore-rules turborepo","typecheck":"tsc --noEmit","openapi-ts":"openapi-ts","lint:report":"biome check . --reporter=json | jq -r '  .diagnostics[]  | .category' | sort | uniq -c | sort -nr"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ed2efcf8-2433-4186-937d-e345e7874f40"}},"repository":{"url":"git+https://github.com/hbmartin/attio-ts-sdk.git","type":"git"},"_npmVersion":"11.10.0","description":"Type-safe TypeScript SDK for the Attio CRM API with Zod v4 runtime validation","directories":{},"resolutions":{"@types/node":"^24"},"sideEffects":false,"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.6","husky":"^9.1.7","jscpd":"^4.0.8","tsdown":"^0.20.3","vitest":"^4.0.18","publint":"^0.3.17","typescript":"^5.9.3","@types/node":"^24","undici-types":"^7.21.0","@biomejs/biome":"^2.3.15","@commitlint/cli":"^20.4.1","@hey-api/openapi-ts":"^0.92.3","@arethetypeswrong/cli":"^0.18.2","@vitest/coverage-istanbul":"^4.0.18","@commitlint/config-conventional":"^20.4.1"},"peerDependencies":{"zod":"^4"},"_npmOperationalInternal":{"tmp":"tmp/attio-ts-sdk_2.1.0_1770914549107_0.018517888921483427","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"attio-ts-sdk","version":"2.2.1","keywords":["attio","crm","sdk","typescript","zod","api","api-client","rest","openapi","type-safe","validation","schema","contacts","sales","attio-api","attio-api-client","attio-rest-api","deals","companies","leads","codegen","customer-data","attio ts","attio js","attio typescript","attio javascript","attio api"],"author":{"name":"Harold Martin","email":"harold.martin@gmail.com"},"license":"MIT","_id":"attio-ts-sdk@2.2.1","maintainers":[{"name":"hbmartin","email":"harold.martin@gmail.com"}],"homepage":"https://github.com/hbmartin/attio-ts-sdk","bugs":{"url":"https://github.com/hbmartin/attio-ts-sdk/issues"},"dist":{"shasum":"1c9e2c13fd6dd2942443bde2bb1b9141dcf5f97f","tarball":"https://registry.npmjs.org/attio-ts-sdk/-/attio-ts-sdk-2.2.1.tgz","fileCount":6,"integrity":"sha512-vGuNLQJPSEJiZu0W4JNN3fjsGB9zw6e8qtAqJQJm1OXKXxw7laMgCmpcY49cLnRDJm4MVFzc5EXVStTIcVqxaA==","signatures":[{"sig":"MEUCIHlIGwjLpVShMBN+gg+B12ClvonXGGBnSg2rUNyi4ZzzAiEAtbfj9ibgej0jWwRn2JN4jjRMiiWYohKK8zrezKjoAhc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/attio-ts-sdk@2.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2513688},"type":"module","jscpd":{"ignore":["**/node_modules/**","**/dist/**","**/coverage/**","**/test/**","**/src/generated/**","**/*.json","**/*.test.ts","**/*.md","**/*.yml"],"absolute":false,"reporters":["json","console"],"threshold":0},"types":"./dist/index.d.mts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"83da67dba19363459d4c6b52b5949987d2bb2ee5","scripts":{"dev":"tsdown --watch","lint":"biome check --error-on-warnings","test":"vitest run --coverage","build":"tsc --noEmit && tsdown","dupes":"jscpd","format":"biome check --write","prepare":"husky","biome:up":"npx tsx scripts/enable-new-biome-rules.ts --ignore-groups a11y --ignore-rules next --ignore-rules qwik --ignore-rules vue --ignore-rules react --ignore-rules solid --ignore-rules turborepo","typecheck":"tsc --noEmit","openapi-ts":"openapi-ts","lint:report":"biome check . --reporter=json | jq -r '  .diagnostics[]  | .category' | sort | uniq -c | sort -nr"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ed2efcf8-2433-4186-937d-e345e7874f40"}},"repository":{"url":"git+https://github.com/hbmartin/attio-ts-sdk.git","type":"git"},"_npmVersion":"11.14.1","description":"Type-safe TypeScript SDK for the Attio CRM API with Zod v4 runtime validation","directories":{},"resolutions":{"@types/node":"^22"},"sideEffects":false,"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"packageManager":"pnpm@11.1.1","devDependencies":{"zod":"^4.4.3","husky":"^9.1.7","jscpd":"^4.1.1","tsdown":"^0.22.0","vitest":"^4.1.6","publint":"^0.3.20","typescript":"^6.0.3","@types/node":"^22","undici-types":">=6.21.0","@biomejs/biome":"^2.4.15","@commitlint/cli":"^21.0.1","@hey-api/openapi-ts":"^0.97.1","@arethetypeswrong/cli":"^0.18.2","@vitest/coverage-istanbul":"^4.1.6","@commitlint/config-conventional":"^21.0.1"},"peerDependencies":{"zod":"^4"},"_npmOperationalInternal":{"tmp":"tmp/attio-ts-sdk_2.2.1_1778714427209_0.5217082088532765","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"attio-ts-sdk","version":"2.3.0","keywords":["attio","crm","sdk","typescript","zod","api","api-client","rest","openapi","type-safe","validation","schema","contacts","sales","attio-api","attio-api-client","attio-rest-api","deals","companies","leads","codegen","customer-data","attio ts","attio js","attio typescript","attio javascript","attio api"],"author":{"name":"Harold Martin","email":"harold.martin@gmail.com"},"license":"MIT","_id":"attio-ts-sdk@2.3.0","maintainers":[{"name":"hbmartin","email":"harold.martin@gmail.com"}],"homepage":"https://github.com/hbmartin/attio-ts-sdk","bugs":{"url":"https://github.com/hbmartin/attio-ts-sdk/issues"},"dist":{"shasum":"8d7c14c0aa7ef4950427a6a9d83ae4f6dfd4c806","tarball":"https://registry.npmjs.org/attio-ts-sdk/-/attio-ts-sdk-2.3.0.tgz","fileCount":9,"integrity":"sha512-YhptNhQxiJ7u6ucFPrzJtwvgWdDo2z8b/UfKW2AYOq7nmyJYhtjBD+nUUnv2Gj015H5y5CP3aRaLRCC/+xM8uQ==","signatures":[{"sig":"MEQCICF74Q2QNri22B5eyrYp3cyqf5av6EyQN4BBhmAeW6SwAiAEv6/PYI2N44mS1LWRPwyRc9E92i41BgZO59l/vhWLcA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/attio-ts-sdk@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4926600},"main":"./dist/index.cjs","type":"module","jscpd":{"ignore":["**/node_modules/**","**/dist/**","**/coverage/**","**/test/**","**/src/generated/**","**/*.json","**/*.test.ts","**/*.md","**/*.yml"],"absolute":false,"reporters":["json","console"],"threshold":0},"types":"./dist/index.d.cts","module":"./dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"./package.json":"./package.json"},"gitHead":"4e423e835807cc59a5cc7015e906aec03d0444d1","scripts":{"dev":"tsdown --watch","lint":"biome check --error-on-warnings","test":"vitest run --coverage","build":"tsc --noEmit && tsdown","dupes":"jscpd","format":"biome check --write","prepare":"husky","biome:up":"npx tsx scripts/enable-new-biome-rules.ts --ignore-groups a11y --ignore-rules next --ignore-rules qwik --ignore-rules vue --ignore-rules react --ignore-rules solid --ignore-rules turborepo","typecheck":"tsc --noEmit","openapi-ts":"openapi-ts","lint:report":"biome check . --reporter=json | jq -r '  .diagnostics[]  | .category' | sort | uniq -c | sort -nr","lint:contracts":"node scripts/contract-lint.mjs","test:performance":"vitest run --config vitest.performance.config.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ed2efcf8-2433-4186-937d-e345e7874f40"}},"repository":{"url":"git+https://github.com/hbmartin/attio-ts-sdk.git","type":"git"},"_npmVersion":"11.14.1","description":"Type-safe TypeScript SDK for the Attio CRM API with Zod v4 runtime validation","directories":{},"resolutions":{"@types/node":"^22"},"sideEffects":false,"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"packageManager":"pnpm@11.1.1","devDependencies":{"zod":"^4.4.3","husky":"^9.1.7","jscpd":"^4.2.0","tsdown":"^0.22.0","vitest":"^4.1.6","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^22","undici-types":">=6.21.0","@biomejs/biome":"^2.4.15","@commitlint/cli":"^21.0.1","@hey-api/openapi-ts":"^0.97.1","@arethetypeswrong/cli":"^0.18.2","@vitest/coverage-istanbul":"^4.1.6","@commitlint/config-conventional":"^21.0.1"},"peerDependencies":{"zod":"^4"},"_npmOperationalInternal":{"tmp":"tmp/attio-ts-sdk_2.3.0_1778872653961_0.3173681306195104","host":"s3://npm-registry-packages-npm-production"}},"2.3.1":{"name":"attio-ts-sdk","version":"2.3.1","keywords":["attio","crm","sdk","typescript","zod","api","api-client","rest","openapi","type-safe","validation","schema","contacts","sales","attio-api","attio-api-client","attio-rest-api","deals","companies","leads","codegen","customer-data","attio ts","attio js","attio typescript","attio javascript","attio api"],"author":{"name":"Harold Martin","email":"harold.martin@gmail.com"},"license":"MIT","_id":"attio-ts-sdk@2.3.1","maintainers":[{"name":"hbmartin","email":"harold.martin@gmail.com"}],"homepage":"https://github.com/hbmartin/attio-ts-sdk","bugs":{"url":"https://github.com/hbmartin/attio-ts-sdk/issues"},"dist":{"shasum":"3ca5aca30550abc08c687ee576493da76bbe9f86","tarball":"https://registry.npmjs.org/attio-ts-sdk/-/attio-ts-sdk-2.3.1.tgz","fileCount":9,"integrity":"sha512-S+FHcN1glhN4VV3ejgo2B7OJgcbgi6ESy4w2Zi9sGm/WWUWiX76+R2vEEgeYj/QHfGJWSGYf65NAZQWk4J6JlQ==","signatures":[{"sig":"MEUCIQC8nhxRD8YhSrWOPLWCSD40mIOEsCxZ0C6rhdB0slNahgIgMZxiSbnwphf2Kr9LLeuD9gXD3FUqV/aEg3eaFN6NV4U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/attio-ts-sdk@2.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4926826},"main":"./dist/index.cjs","type":"module","jscpd":{"ignore":["**/node_modules/**","**/dist/**","**/coverage/**","**/test/**","**/src/generated/**","**/*.json","**/*.test.ts","**/*.md","**/*.yml"],"absolute":false,"reporters":["json","console"],"threshold":0},"types":"./dist/index.d.cts","module":"./dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"./package.json":"./package.json"},"gitHead":"a23aaa7ee8daba2ebfe5d76a56d5ecd4574557da","scripts":{"dev":"tsdown --watch","lint":"biome check --error-on-warnings","test":"vitest run --coverage","build":"tsc --noEmit && tsdown","dupes":"jscpd","format":"biome check --write","prepare":"husky","biome:up":"npx tsx scripts/enable-new-biome-rules.ts --ignore-groups a11y --ignore-rules next --ignore-rules qwik --ignore-rules vue --ignore-rules react --ignore-rules solid --ignore-rules turborepo","typecheck":"tsc --noEmit","openapi-ts":"openapi-ts","lint:report":"biome check . --reporter=json | jq -r '  .diagnostics[]  | .category' | sort | uniq -c | sort -nr","lint:contracts":"node scripts/contract-lint.mjs","test:performance":"vitest run --config vitest.performance.config.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ed2efcf8-2433-4186-937d-e345e7874f40"}},"repository":{"url":"git+https://github.com/hbmartin/attio-ts-sdk.git","type":"git"},"_npmVersion":"11.14.1","description":"Type-safe TypeScript SDK for the Attio CRM API with Zod v4 runtime validation","directories":{},"resolutions":{"@types/node":"^22"},"sideEffects":false,"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"packageManager":"pnpm@11.1.1","devDependencies":{"zod":"^4.4.3","husky":"^9.1.7","jscpd":"^4.2.0","tsdown":"^0.22.0","vitest":"^4.1.6","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^22","undici-types":">=6.21.0","@biomejs/biome":"^2.4.15","@commitlint/cli":"^21.0.1","@hey-api/openapi-ts":"^0.97.1","@arethetypeswrong/cli":"^0.18.2","@vitest/coverage-istanbul":"^4.1.6","@commitlint/config-conventional":"^21.0.1"},"peerDependencies":{"zod":"^4"},"_npmOperationalInternal":{"tmp":"tmp/attio-ts-sdk_2.3.1_1779142106508_0.6275525508268271","host":"s3://npm-registry-packages-npm-production"}},"2.3.2":{"name":"attio-ts-sdk","version":"2.3.2","keywords":["attio","crm","sdk","typescript","zod","api","api-client","rest","openapi","type-safe","validation","schema","contacts","sales","attio-api","attio-api-client","attio-rest-api","deals","companies","leads","codegen","customer-data","attio ts","attio js","attio typescript","attio javascript","attio api"],"author":{"name":"Harold Martin","email":"harold.martin@gmail.com"},"license":"MIT","_id":"attio-ts-sdk@2.3.2","maintainers":[{"name":"hbmartin","email":"harold.martin@gmail.com"}],"homepage":"https://github.com/hbmartin/attio-ts-sdk","bugs":{"url":"https://github.com/hbmartin/attio-ts-sdk/issues"},"dist":{"shasum":"4bd88e42d7006b293c2237df22994c930ee10de8","tarball":"https://registry.npmjs.org/attio-ts-sdk/-/attio-ts-sdk-2.3.2.tgz","fileCount":9,"integrity":"sha512-queJqDWvHH6o9hmiz8+8SIdWoRY/cacgfyycbK8sNb/6sa9Lrj5VjBg49gDQ9pe+eZ1+jG1nspez+v0KB9EG2w==","signatures":[{"sig":"MEQCIDofTtuqH/1AdP8hzA3LECuxy8yX0j+kKv/3/R6Kwl1DAiATxBSe34O6gxlIdCGkdNVDKyqGd5mimIOjRdQNu7fduw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/attio-ts-sdk@2.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4893744},"main":"./dist/index.cjs","type":"module","jscpd":{"ignore":["**/node_modules/**","**/dist/**","**/coverage/**","**/test/**","**/src/generated/**","**/*.json","**/*.test.ts","**/*.md","**/*.yml"],"absolute":false,"reporters":["json","console"],"threshold":0},"types":"./dist/index.d.cts","module":"./dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"./package.json":"./package.json"},"gitHead":"2d24a7e63a0aa9bee51e99642ada735195c4583d","scripts":{"dev":"tsdown --watch","lint":"biome check --error-on-warnings","test":"vitest run --coverage","build":"tsc --noEmit && tsdown","dupes":"jscpd","format":"biome check --write","prepare":"husky","biome:up":"npx tsx scripts/enable-new-biome-rules.ts --ignore-groups a11y --ignore-rules next --ignore-rules qwik --ignore-rules vue --ignore-rules react --ignore-rules solid --ignore-rules turborepo","typecheck":"tsc --noEmit","openapi-ts":"openapi-ts","lint:report":"biome check . --reporter=json | jq -r '  .diagnostics[]  | .category' | sort | uniq -c | sort -nr","lint:contracts":"node scripts/contract-lint.mjs","test:performance":"vitest run --config vitest.performance.config.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ed2efcf8-2433-4186-937d-e345e7874f40"}},"repository":{"url":"git+https://github.com/hbmartin/attio-ts-sdk.git","type":"git"},"_npmVersion":"11.14.1","description":"Type-safe TypeScript SDK for the Attio CRM API with Zod v4 runtime validation","directories":{},"resolutions":{"@types/node":"^22"},"sideEffects":false,"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"packageManager":"pnpm@11.1.1","devDependencies":{"zod":"^4.4.3","husky":"^9.1.7","jscpd":"^4.2.0","tsdown":"^0.22.0","vitest":"^4.1.6","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^22","undici-types":">=6.21.0","@biomejs/biome":"^2.4.15","@commitlint/cli":"^21.0.1","@hey-api/openapi-ts":"^0.97.1","@arethetypeswrong/cli":"^0.18.2","@vitest/coverage-istanbul":"^4.1.6","@commitlint/config-conventional":"^21.0.1"},"peerDependencies":{"zod":"^4"},"_npmOperationalInternal":{"tmp":"tmp/attio-ts-sdk_2.3.2_1779146657596_0.1384085798671839","host":"s3://npm-registry-packages-npm-production"}},"2.3.3":{"name":"attio-ts-sdk","version":"2.3.3","description":"Type-safe TypeScript SDK for the Attio CRM API with Zod v4 runtime validation","keywords":["attio","crm","sdk","typescript","zod","api","api-client","rest","openapi","type-safe","validation","schema","contacts","sales","attio-api","attio-api-client","attio-rest-api","deals","companies","leads","codegen","customer-data","attio ts","attio js","attio typescript","attio javascript","attio api"],"homepage":"https://github.com/hbmartin/attio-ts-sdk","type":"module","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"./package.json":"./package.json"},"types":"./dist/index.d.cts","sideEffects":false,"scripts":{"build":"tsc --noEmit && tsdown","typecheck":"tsc --noEmit","dev":"tsdown --watch","lint":"biome check --error-on-warnings","lint:contracts":"node scripts/contract-lint.mjs","lint:report":"biome check . --reporter=json | jq -r '  .diagnostics[]  | .category' | sort | uniq -c | sort -nr","format":"biome check --write","test":"vitest run --coverage","test:performance":"vitest run --config vitest.performance.config.ts","dupes":"jscpd","prepare":"husky","openapi-ts":"openapi-ts","biome:up":"npx tsx scripts/enable-new-biome-rules.ts --ignore-groups a11y --ignore-rules next --ignore-rules qwik --ignore-rules vue --ignore-rules react --ignore-rules solid --ignore-rules turborepo"},"author":{"name":"Harold Martin","email":"harold.martin@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/hbmartin/attio-ts-sdk.git"},"bugs":{"url":"https://github.com/hbmartin/attio-ts-sdk/issues"},"license":"MIT","engines":{"node":">=22"},"peerDependencies":{"zod":"^4"},"devDependencies":{"@arethetypeswrong/cli":"^0.18.2","@biomejs/biome":"^2.4.15","@commitlint/cli":"^21.0.1","@commitlint/config-conventional":"^21.0.1","@hey-api/openapi-ts":"^0.97.1","@types/node":"^22","@vitest/coverage-istanbul":"^4.1.6","husky":"^9.1.7","jscpd":"^4.2.0","publint":"^0.3.21","tsdown":"^0.22.0","typescript":"^6.0.3","undici-types":">=6.21.0","vitest":"^4.1.6","zod":"^4.4.3"},"resolutions":{"@types/node":"^22"},"packageManager":"pnpm@11.1.1","jscpd":{"threshold":0,"reporters":["json","console"],"ignore":["**/node_modules/**","**/dist/**","**/coverage/**","**/test/**","**/src/generated/**","**/*.json","**/*.test.ts","**/*.md","**/*.yml"],"absolute":false},"main":"./dist/index.cjs","module":"./dist/index.mjs","gitHead":"482efdd6ca9dfe7ead3799cda306b632b4f57ea6","_id":"attio-ts-sdk@2.3.3","_nodeVersion":"24.15.0","_npmVersion":"11.14.1","dist":{"integrity":"sha512-0QTT6RPNINhiLebGXirMtk75Tbdti1pcTbh8NS7fXJQylvINjm9O3gFxdndCDXCY65QmXZzihY6rQ+xHTf17Ug==","shasum":"22a573fe4f31e332967065a6215cf4e0881cb15f","tarball":"https://registry.npmjs.org/attio-ts-sdk/-/attio-ts-sdk-2.3.3.tgz","fileCount":9,"unpackedSize":3113073,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/attio-ts-sdk@2.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEyH2pWFMP+wIYg/TVQ+S9Ry7m2IACS5yZ5wsM87jJolAiAfdvDW07At4Ch7uSp3TNrtTXvxX+pwAOmAB3UWRVuRGw=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ed2efcf8-2433-4186-937d-e345e7874f40"}},"directories":{},"maintainers":[{"name":"hbmartin","email":"harold.martin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/attio-ts-sdk_2.3.3_1779221323042_0.5179950764469208"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-22T16:52:40.917Z","modified":"2026-05-19T20:08:43.469Z","0.0.0":"2026-01-22T16:52:41.144Z","1.0.0":"2026-01-22T20:10:41.895Z","1.1.0":"2026-02-02T18:41:53.815Z","1.1.1":"2026-02-03T15:27:43.087Z","1.2.0":"2026-02-03T16:51:47.616Z","1.2.1":"2026-02-03T18:56:05.475Z","2.0.0":"2026-02-07T16:31:15.915Z","2.0.1":"2026-02-09T18:31:52.383Z","2.0.2":"2026-02-10T01:42:25.668Z","2.1.0":"2026-02-12T16:42:29.341Z","2.2.1":"2026-05-13T23:20:27.400Z","2.3.0":"2026-05-15T19:17:34.232Z","2.3.1":"2026-05-18T22:08:26.789Z","2.3.2":"2026-05-18T23:24:17.785Z","2.3.3":"2026-05-19T20:08:43.228Z"},"bugs":{"url":"https://github.com/hbmartin/attio-ts-sdk/issues"},"author":{"name":"Harold Martin","email":"harold.martin@gmail.com"},"license":"MIT","homepage":"https://github.com/hbmartin/attio-ts-sdk","keywords":["attio","crm","sdk","typescript","zod","api","api-client","rest","openapi","type-safe","validation","schema","contacts","sales","attio-api","attio-api-client","attio-rest-api","deals","companies","leads","codegen","customer-data","attio ts","attio js","attio typescript","attio javascript","attio api"],"repository":{"type":"git","url":"git+https://github.com/hbmartin/attio-ts-sdk.git"},"description":"Type-safe TypeScript SDK for the Attio CRM API with Zod v4 runtime validation","maintainers":[{"name":"hbmartin","email":"harold.martin@gmail.com"}],"readme":"# Attio CRM TypeScript SDK\n\n[![npm version](https://badge.fury.io/js/attio-ts-sdk.svg)](https://www.npmjs.com/package/attio-ts-sdk)\n[![ci](https://github.com/hbmartin/attio-ts-sdk/actions/workflows/ci.yml/badge.svg)](https://github.com/hbmartin/attio-ts-sdk/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/hbmartin/attio-ts-sdk/graph/badge.svg?token=Po1nDYEr5f)](https://codecov.io/gh/hbmartin/attio-ts-sdk)\n[![NPM License](https://img.shields.io/npm/l/attio-ts-sdk?color=blue)](https://github.com/hbmartin/attio-ts-sdk/blob/main/LICENSE)\n[![Context7](https://img.shields.io/badge/[]-Context7-059669)](https://context7.com/hbmartin/attio-ts-sdk)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/hbmartin/attio-ts-sdk)\n\nA modern, type-safe TypeScript SDK for the [Attio](https://attio.com) CRM API. Built with Zod v4 and a client layer that adds retries, error normalization, caching, and higher‑level helpers on top of the generated OpenAPI client.\n\n- **Full Attio API Coverage** - People, companies, lists, notes, tasks, meetings, webhooks, and more\n- **Create a client in one line** - `createAttioClient({ apiKey })`\n- **Retry & rate‑limit aware** - exponential backoff + `Retry-After`\n- **Normalized errors** - consistent shape + optional suggestions for select/status mismatches\n- **Record normalization** - handles inconsistent response shapes\n- **Metadata caching** - attributes, select options, statuses\n- **Pagination helpers** - `paginate` + `paginateOffset` + cursor handling\n- **Filter helpers** - typed comparison, logical, path, and list-entry filters\n- **Request cancellation** - `AbortSignal` support for client, query, and pagination calls\n- **Runtime Validation** - Every request and response validated with Zod v4 schemas\n- **Tree-Shakeable** - Import only what you need\n- **TypeScript First** - Complete type definitions generated from OpenAPI spec\n\nYou still have full access to the generated, spec‑accurate endpoints.\n\n## Table of Contents\n\n- [Installing](#installing)\n- [Getting Your API Key](#getting-your-api-key)\n- [Usage](#usage)\n  - [Quick Start](#quick-start)\n  - [Recommended Pattern](#recommended-pattern)\n  - [Attio SDK](#attio-sdk)\n  - [Attio Convenience Layer](#attio-convenience-layer)\n  - [Filter Helpers](#filter-helpers)\n  - [Value Helpers](#value-helpers)\n  - [Record Value Accessors](#record-value-accessors)\n  - [Schema Helpers](#schema-helpers)\n  - [Client Configuration](#client-configuration)\n  - [Error Handling](#error-handling)\n  - [Pagination Helpers](#pagination-helpers)\n  - [Caching](#caching)\n  - [Debug Hooks](#debug-hooks)\n  - [Metadata Helpers](#metadata-helpers)\n  - [Working with Records](#working-with-records)\n  - [Using Generated Endpoints Directly](#using-generated-endpoints-directly)\n  - [Managing Lists](#managing-lists)\n  - [Notes and Tasks](#notes-and-tasks)\n  - [Files](#files)\n  - [Listing and Viewing Person Notes](#listing-and-viewing-person-notes)\n  - [Webhooks](#webhooks)\n- [Development](#development)\n\n## Installing\n\n```bash\n# pnpm (recommended)\npnpm add attio-ts-sdk zod\n\n# npm\nnpm install attio-ts-sdk zod\n\n# yarn\nyarn add attio-ts-sdk zod\n\n# bun\nbun add attio-ts-sdk zod\n```\n\n> **Note:** Zod v4 is a peer dependency - install it alongside the SDK.\n\n## Getting Your API Key\n\n1. Log in to your [Attio](https://attio.com) workspace.\n2. Navigate to **Workspace Settings → Developers** (or visit `https://app.attio.com/settings/developers` directly).\n3. Click **Create a new integration**, give it a name, and select the scopes your application needs.\n4. Copy the generated API token and store it securely (e.g. in an environment variable).\n\n```bash\nexport ATTIO_API_KEY=\"your-api-key-here\"\n```\n\nThe SDK reads the key from whatever you pass to `createAttioClient({ apiKey })` — it does **not** read environment variables automatically, so you control exactly how the secret is loaded.\n\n## Usage\n\nThis SDK provides two layers:\n\n1) **Attio helpers** (recommended): `createAttioClient`, `createRecord`, `queryRecords`, etc.\n2) **Generated endpoints**: `getV2Objects`, `postV2ObjectsByObjectRecordsQuery`, etc.\n\n### Quick Start\n\n```typescript\nimport { createAttioClient, getV2Objects, postV2ObjectsByObjectRecordsQuery } from 'attio-ts-sdk';\n\n// Configure the client with your API key\nconst client = createAttioClient({\n  apiKey: process.env.ATTIO_API_KEY,\n});\n\n// List all objects in your workspace\nconst { data: objects } = await getV2Objects({ client });\nconsole.log(objects);\n\n// Query people records\nconst { data: people } = await postV2ObjectsByObjectRecordsQuery({\n  client,\n  path: { object: 'people' },\n  body: {\n    limit: 10,\n    sorts: [{ attribute: 'created_at', direction: 'desc' }],\n  },\n});\n```\n\n### Recommended Pattern\n\nPrefer the Attio convenience layer, throw on errors by default, and unwrap responses with helpers.\nThis keeps request code compact and consistent.\n\n```typescript\nimport {\n  assertOk,\n  createAttioClient,\n  createAttioSdk,\n  getV2Objects,\n  value,\n} from 'attio-ts-sdk';\n\nconst client = createAttioClient({\n  apiKey: process.env.ATTIO_API_KEY,\n  responseStyle: 'data',\n  throwOnError: true,\n});\n\nconst sdk = createAttioSdk({ client });\n\nconst company = await sdk.records.create({\n  object: 'companies',\n  values: {\n    name: value.string('Acme Corp'),\n    domains: value.domain('acme.com'),\n    annual_revenue: value.currency(50000, 'USD'),\n  },\n});\n\n// Use assertOk with generated endpoints when you need raw access\nconst objects = assertOk(await getV2Objects({ client }));\nconsole.log(objects);\n```\n\n### Attio SDK\n\n`createAttioSdk` builds on top of the convenience layer and the generated endpoints to provide a single, namespaced object you can pass around your application. It binds the client once so you don't repeat `{ client }` on every call, and groups operations by resource.\n\n```typescript\nimport { createAttioSdk, filters } from 'attio-ts-sdk';\n\nconst sdk = createAttioSdk({ apiKey: process.env.ATTIO_API_KEY });\n```\n\n`createAttioSdk` accepts the same flat client config as `createAttioClient`. You can also pass `{ config: { apiKey } }` or an existing `{ client }`.\n\nThe returned `sdk` object exposes these namespaces:\n\n| Namespace | Methods |\n| --- | --- |\n| `sdk.objects` | `list`, `get`, `create`, `update` |\n| `sdk.records` | `create`, `update`, `upsert`, `get`, `getMany`, `delete`, `query` |\n| `sdk.lists` | `list`, `get`, `queryEntries`, `addEntry`, `updateEntry`, `removeEntry` |\n| `sdk.notes` | `list`, `get`, `create`, `delete` |\n| `sdk.tasks` | `list`, `get`, `create`, `update`, `delete` |\n| `sdk.files` | `list`, `listForPerson`, `get`, `download`, `getDownloadUrl` |\n| `sdk.search` | `records` |\n| `sdk.workspaceMembers` | `list`, `get` |\n| `sdk.metadata` | `listAttributes`, `findAttribute`, `getAttribute`, `getAttributeOptions`, `getAttributeStatuses`, `listAllowedValues`, `schema` |\n\nThe underlying `AttioClient` is also available as `sdk.client` when you need to drop down to the generated endpoints.\n\n```typescript\nconst companies = await sdk.records.query({\n  object: 'companies',\n  filter: filters.contains('name', 'Acme'),\n});\n\nconst attributes = await sdk.metadata.listAttributes({\n  target: 'objects',\n  identifier: 'companies',\n});\n\n// Use the generated endpoints when you need full spec access\nconst { data } = await getV2Objects({ client: sdk.client });\n```\n\n### Attio Convenience Layer\n\nThe standalone helper functions wrap the generated endpoints with retries, error normalization,\nrecord normalization, and opinionated defaults. They are the same functions that `createAttioSdk` uses under the hood — use them directly when you prefer explicit `{ client }` threading.\n\n```typescript\nimport { createAttioClient, createRecord, listLists, searchRecords } from 'attio-ts-sdk';\n\nconst client = createAttioClient({ apiKey: process.env.ATTIO_API_KEY });\n\nconst lists = await listLists({ client });\n\nconst company = await createRecord({\n  client,\n  object: 'companies',\n  values: {\n    name: [{ value: 'Acme Corp' }],\n    domains: [{ domain: 'acme.com' }],\n  },\n});\n\nconst matches = await searchRecords({\n  client,\n  query: 'acme.com',\n  objects: ['companies'],\n});\n```\n\n### Filter Helpers\n\nThe `filters` namespace builds typed Attio filters for convenience helpers and generated endpoint bodies. Use it for equality, string matching, comparisons, ranges, logical groups, record-reference paths, and list-entry relationships.\n\n```typescript\nimport { filters } from 'attio-ts-sdk';\n\nconst revenueFilter = filters.and(\n  filters.gte('annual_revenue', 50000),\n  filters.lt('annual_revenue', 100000),\n  filters.in('stage', ['active', 'pending']),\n);\n\nconst rangeFilter = filters.between('annual_revenue', 50000, 100000);\n\nconst primaryContactFilter = filters.path(\n  [['companies', 'primary_contact']],\n  { email: { $contains: '@acme.com' } },\n);\n\nconst listEntryFilter = filters.and(\n  filters.parentRecordId({\n    list: 'hiring-pipeline',\n    object: 'people',\n    recordId: 'rec_123',\n  }),\n  filters.listStatus({ attribute: 'stage', status: 'Interview' }),\n);\n```\n\n`filters.between` is inclusive at the start and exclusive at the end. The `parentRecordId`, `parentRecordContains`, and `listStatus` helpers cover common list-entry relationship filters without hand-building path objects.\n\n### Value Helpers\n\nThe `value` namespace provides factory functions that build correctly shaped field-value arrays for record creation and updates. Each helper validates its input with Zod before returning, so typos and bad data fail fast at the call site rather than in the API response.\n\n```typescript\nimport { value } from 'attio-ts-sdk';\n```\n\n| Helper | Signature | Description |\n| --- | --- | --- |\n| `value.string` | `(value: string) => ValueInput[]` | Non-empty string field. |\n| `value.text` | `(value: string) => ValueInput[]` | Alias for raw text fields. |\n| `value.number` | `(value: number) => ValueInput[]` | Finite numeric field. |\n| `value.boolean` | `(value: boolean) => ValueInput[]` | Boolean field. |\n| `value.domain` | `(value: string) => ValueInput[]` | Domain field (non-empty string). |\n| `value.email` | `(value: string) => ValueInput[]` | Email field (validated format). |\n| `value.phone` | `(value: string, countryCode?: string) => ValueInput[]` | Phone field, with optional ISO country code. |\n| `value.personalName` | `(input: ValuePersonalNameInput) => ValueInput[]` | Personal name values. |\n| `value.status` | `(value: string) => ValueInput[]` | Status by title or ID. |\n| `value.select` | `(value: string) => ValueInput[]` | Select option by title or ID. |\n| `value.recordReference` | `(input: ValueRecordReferenceInput) => ValueInput[]` | Record-reference value. |\n| `value.location` | `(input: ValueLocationInput) => ValueInput[]` | Location value with missing fields filled as `null`. |\n| `value.currency` | `(value: number, currencyCode?: string) => ValueInput[]` | Currency field. `currencyCode` is an optional ISO 4217 code (e.g. `\"USD\"`). |\n\n```typescript\nconst values = {\n  name: value.string('Acme Corp'),\n  domains: value.domain('acme.com'),\n  contact_email: value.email('hello@acme.com'),\n  phone_numbers: value.phone('+15551234567'),\n  status: value.status('Customer'),\n  employee_count: value.number(150),\n  is_customer: value.boolean(true),\n  annual_revenue: value.currency(50000, 'USD'),\n  headquarters: value.location({ locality: 'San Francisco', countryCode: 'US' }),\n};\n\nawait sdk.records.create({ object: 'companies', values });\n```\n\nFor metadata-aware writes, create a schema and use `buildValues`. It accepts\nattribute titles or `api_slug`s, rejects non-writable attributes, validates\nselect/status values against metadata, and serializes native JavaScript values:\n\n```typescript\nconst schema = await createSchema({\n  client,\n  target: 'objects',\n  identifier: 'companies',\n});\n\nconst values = await schema.buildValues({\n  Name: 'Acme Corp',\n  Website: 'acme.com',\n  Stage: 'Customer',\n  owner_company: {\n    targetObject: 'companies',\n    targetRecordId: 'rec_123',\n  },\n});\n\nawait sdk.records.create({ object: 'companies', values });\n```\n\n### Record Value Accessors\n\n`getValue` and `getFirstValue` extract attribute values from a record object. Pass an optional Zod schema to get typed, validated results.\n\n```typescript\nimport { getFirstValue, getValue } from 'attio-ts-sdk';\n\n// Untyped — returns unknown\nconst name = getFirstValue(company, 'name');\nconst domains = getValue(company, 'domains');\n\n// Typed — returns parsed values or throws on mismatch\nimport { z } from 'zod';\n\nconst nameSchema = z.object({ value: z.string() });\nconst typedName = getFirstValue(company, 'name', { schema: nameSchema });\n//    ^? { value: string } | undefined\n```\n\nCommon value readers are exported for response shapes you usually do not want to parse by hand:\n\n```typescript\nimport {\n  getFirstEmail,\n  getFirstPhone,\n  getRecordReferenceIds,\n  getSelectTitles,\n} from 'attio-ts-sdk';\n\nconst email = getFirstEmail(person, 'email_addresses');\nconst phone = getFirstPhone(person, 'phone_numbers');\nconst segmentTitles = getSelectTitles(company, 'segments');\nconst companyIds = getRecordReferenceIds(person, 'company');\n```\n\n### Schema Helpers\n\nCreate a schema from cached metadata and use accessors to reduce raw string keys:\n\n```typescript\nimport { createSchema } from 'attio-ts-sdk';\n\nconst schema = await createSchema({\n  client,\n  target: 'objects',\n  identifier: 'companies',\n});\n\nconst name = schema.getAccessorOrThrow('name').getFirstValue(company);\n```\n\nBranded identifier factories and schemas are exported for validating IDs from forms, URLs, and job payloads before you call the SDK:\n\n```typescript\nimport { createListId, listIdSchema, recordIdSchema } from 'attio-ts-sdk';\n\nconst salesListId = createListId('sales-pipeline');\nconst listId = listIdSchema.parse(formData.get('listId'));\nconst recordId = recordIdSchema.parse(params.recordId);\n```\n\nIdentifier schemas are exported for records (`recordIdSchema`, `recordObjectIdSchema`, `matchingAttributeSchema`), lists (`listIdSchema`, `entryIdSchema`, `parentObjectIdSchema`, `parentRecordIdSchema`), objects (`objectSlugSchema`, `objectApiSlugSchema`, `objectNounSchema`), notes, tasks, and workspace members.\n\n### Client Configuration\n\n```typescript\nimport { createAttioClient } from 'attio-ts-sdk';\n\nconst client = createAttioClient({\n  apiKey: process.env.ATTIO_API_KEY,\n  baseUrl: 'https://api.attio.com',\n  timeoutMs: 20_000,\n  retry: { maxRetries: 4 },\n  cache: { enabled: true },\n});\n```\n\nPass an `AbortSignal` when request or pagination work needs to be cancellable:\n\n```typescript\nimport { queryRecords } from 'attio-ts-sdk';\n\nconst controller = new AbortController();\n\nconst recordsPromise = queryRecords({\n  client,\n  object: 'companies',\n  paginate: true,\n  signal: controller.signal,\n});\n\nsetTimeout(() => controller.abort(), 0);\n\n// Abort before awaiting so pending request or pagination work can be cancelled.\nconst records = await recordsPromise;\n```\n\n### Error Handling\n\nAll errors thrown by the convenience layer and `createAttioSdk` are normalized into a hierarchy rooted at `AttioError`:\n\n| Class | Default Code | When |\n| --- | --- | --- |\n| `AttioApiError` | *(from response)* | HTTP error responses (4xx / 5xx). Includes `response`, `requestId`, and optional `retryAfterMs`. |\n| `AttioNetworkError` | *(from cause)* | Connection failures, DNS errors, timeouts. |\n| `AttioRetryError` | `RETRY_ERROR` | All retry attempts exhausted. |\n| `AttioResponseError` | `RESPONSE_ERROR` | Response body failed Zod validation. |\n| `AttioConfigError` | `CONFIG_ERROR` | Invalid client configuration. |\n| `AttioBatchError` | `BATCH_ERROR` | A batch operation partially or fully failed. |\n\nEvery `AttioError` carries these optional fields:\n\n```typescript\nerror.status       // HTTP status code\nerror.code         // machine-readable error code\nerror.requestId    // Attio x-request-id header\nerror.retryAfterMs // parsed Retry-After (milliseconds)\nerror.suggestions  // fuzzy-match suggestions for value mismatches (see below)\n```\n\n#### Catching errors from the convenience layer\n\n```typescript\nimport { createAttioClient, createRecord, isAttioError } from 'attio-ts-sdk';\n\nconst client = createAttioClient({ apiKey: process.env.ATTIO_API_KEY });\n\ntry {\n  await createRecord({\n    client,\n    object: 'companies',\n    values: { stage: [{ value: 'Prospectt' }] },\n  });\n} catch (err) {\n  if (isAttioError(err)) {\n    console.log(err.status, err.code, err.requestId, err.suggestions);\n  } else {\n    // Re-throw if it's not an error we specifically handle\n    throw err;\n  }\n}\n```\n\nStable helpers are available when `instanceof` is unreliable across bundled or test environments:\n\n```typescript\nimport {\n  getAttioErrorStatus,\n  isAttioNotFound,\n  isRetryableAttioError,\n} from 'attio-ts-sdk';\n\nif (isAttioNotFound(err)) return undefined;\nif (isRetryableAttioError(err)) console.log(getAttioErrorStatus(err));\n```\n\n#### Smart suggestions for value mismatches\n\nWhen an API error indicates a select option or status mismatch, the SDK automatically attaches a `suggestions` object with up to three fuzzy-matched alternatives:\n\n```typescript\nerror.suggestions\n// {\n//   field: 'stage',\n//   attempted: 'Prospectt',\n//   bestMatch: 'Prospect',\n//   matches: ['Prospect', 'Prospecting', 'Closed']\n// }\n```\n\n#### Response helpers for generated endpoints\n\nWhen using the generated endpoints directly, use `assertOk` or `toResult` to unwrap responses:\n\n```typescript\nimport { assertOk, toResult, getV2Objects } from 'attio-ts-sdk';\n\n// Throws on error, returns the data payload\nconst objects = assertOk(await getV2Objects({ client }));\n\n// Returns a discriminated union { ok: true, value } | { ok: false, error }\nconst result = toResult(await getV2Objects({ client }));\nif (result.ok) {\n  console.log(result.value);\n} else {\n  console.error(result.error);\n}\n```\n\n#### throwOnError mode\n\nYou can also opt into exceptions at the client level:\n\n```typescript\nconst client = createAttioClient({\n  apiKey: process.env.ATTIO_API_KEY,\n  throwOnError: true,\n});\n\n// Generated endpoints now throw instead of returning { error }\nconst { data } = await postV2ObjectsByObjectRecords({\n  client,\n  path: { object: 'companies' },\n  body: { data: { values: { name: [{ value: 'Test' }] } } },\n});\n```\n\n### Pagination Helpers\n\nThe SDK provides multiple approaches to pagination, from simple convenience options to low-level helpers for full control.\n\n#### Using `queryRecords` with auto-pagination (recommended)\n\nThe simplest way to paginate record queries is using the `paginate` option on `queryRecords`:\n\n```typescript\nimport { createAttioClient, filters, queryRecords } from 'attio-ts-sdk';\n\nconst client = createAttioClient({ apiKey: process.env.ATTIO_API_KEY });\n\n// Collect all pages automatically into an array\nconst allCompanies = await queryRecords({\n  client,\n  object: 'companies',\n  filter: filters.contains('name', 'Acme'),\n  sorts: [{ attribute: 'created_at', direction: 'desc' }],\n  paginate: true,\n  maxItems: 10000,  // Optional: limit total items\n});\n\n// Stream records one at a time (memory-efficient for large datasets)\nfor await (const company of queryRecords({\n  client,\n  object: 'companies',\n  paginate: 'stream',\n})) {\n  console.log(company.id);\n}\n```\n\nThe same pattern works with `queryListEntries` / `sdk.lists.queryEntries`.\n\n#### Fetching many records by ID\n\nUse `getManyRecords` or `sdk.records.getMany` when you already have record IDs. The helper chunks `$in` queries, runs them with bounded concurrency, and can preserve input order.\n\n```typescript\nconst companies = await sdk.records.getMany({\n  object: 'companies',\n  recordIds: ['rec_1', 'rec_2', 'rec_3'],\n  preserveOrder: true,\n  notFound: 'throw',\n});\n```\n\n#### Using low-level pagination helpers\n\nFor more control or when working directly with generated endpoints, use `paginateOffset` (offset-based) or `paginate` (cursor-based):\n\n| Strategy | Helper | Endpoints |\n| --- | --- | --- |\n| **Offset-based** | `paginateOffset` | Record queries (`postV2ObjectsByObjectRecordsQuery`), list entry queries (`postV2ListsByListEntriesQuery`), notes (`getV2Notes`), tasks (`getV2Tasks`) |\n| **Cursor-based** | `paginate` | Meetings (`getV2Meetings`), webhooks, and most `GET` list endpoints |\n\nBoth helpers automatically extract items and pagination metadata from raw API responses.\n\n#### Paginating record queries with `paginateOffset`\n\n```typescript\nimport {\n  createAttioClient,\n  filters,\n  paginateOffset,\n  postV2ObjectsByObjectRecordsQuery,\n} from 'attio-ts-sdk';\n\nconst client = createAttioClient({ apiKey: process.env.ATTIO_API_KEY });\n\n// Collect all companies matching a filter across every page\nconst allCompanies = await paginateOffset(async (offset, limit) => {\n  return postV2ObjectsByObjectRecordsQuery({\n    client,\n    path: { object: 'companies' },\n    body: {\n      offset,\n      limit,\n      filter: filters.contains('name', 'Acme'),\n      sorts: [{ attribute: 'created_at', direction: 'desc' }],\n    },\n  });\n});\n```\n\n#### Paginating list entry queries with `paginateOffset`\n\n```typescript\nimport { filters, paginateOffset, postV2ListsByListEntriesQuery } from 'attio-ts-sdk';\n\nconst allEntries = await paginateOffset(async (offset, limit) => {\n  return postV2ListsByListEntriesQuery({\n    client,\n    path: { list: 'sales-pipeline' },\n    body: {\n      offset,\n      limit,\n      filter: filters.listStatus({ attribute: 'stage', status: 'negotiation' }),\n    },\n  });\n});\n```\n\n#### Type-safe response validation with itemSchema\n\nThe convenience functions `queryListEntries` and `queryRecords` support an optional `itemSchema` parameter for type-safe validation of API responses. The schema validates raw items before normalization.\n\n```typescript\nimport { z } from 'zod';\nimport { queryListEntries, createListId } from 'attio-ts-sdk';\n\n// Define a schema that matches your expected item structure\nconst entrySchema = z.object({\n  id: z.object({ entry_id: z.string() }),\n  values: z.object({\n    stage: z.array(z.object({ status: z.string() })),\n    deal_value: z.array(z.object({ currency_value: z.number() })).optional(),\n  }),\n});\n\ntype SalesEntry = z.infer<typeof entrySchema>;\n\n// Create a typed ListId using the factory function\nconst salesListId = createListId('sales-pipeline');\n\n// TypeScript infers the return type from itemSchema\nconst entries = await queryListEntries<SalesEntry>({\n  client,\n  list: salesListId,\n  itemSchema: entrySchema,\n  paginate: true,\n});\n\n// entries is SalesEntry[] with full type safety\nfor (const entry of entries) {\n  console.log(entry.values.stage[0].status);\n}\n```\n\nWhen using streaming pagination, the same type safety applies:\n\n```typescript\nconst stream = queryListEntries<SalesEntry>({\n  client,\n  list: salesListId,\n  itemSchema: entrySchema,\n  paginate: 'stream',\n});\n\nfor await (const entry of stream) {\n  console.log(entry.values.stage[0].status);\n}\n```\n\n#### Paginating cursor-based endpoints\n\n```typescript\nimport { paginate, getV2Meetings } from 'attio-ts-sdk';\n\nconst allMeetings = await paginate(async (cursor) => {\n  return getV2Meetings({ client, query: { cursor } });\n});\n```\n\n#### Pagination options\n\nBoth helpers accept an options object to control limits:\n\n```typescript\n// Offset-based options\nconst records = await paginateOffset(fetchPage, {\n  offset: 0,         // starting offset (default: 0)\n  limit: 100,        // items per page (default: 50)\n  maxPages: 5,       // stop after N pages\n  maxItems: 200,     // stop after N total items\n});\n\n// Cursor-based options\nconst meetings = await paginate(fetchPage, {\n  cursor: null,      // starting cursor (default: null)\n  maxPages: 10,      // stop after N pages\n  maxItems: 500,     // stop after N total items\n});\n```\n\n### Caching\n\nThe SDK includes two levels of caching to reduce API calls and improve performance:\n\n#### Metadata Caching\n\nAttribute metadata (attributes, select options, and statuses) is automatically cached with a 5-minute TTL. This reduces redundant API calls when working with the same objects repeatedly.\n\n```typescript\nimport { getAttributeOptions, getAttributeStatuses, listAttributes } from 'attio-ts-sdk';\n\n// These calls are cached for 5 minutes\nconst options = await getAttributeOptions({\n  client,\n  target: 'objects',\n  identifier: 'companies',\n  attribute: 'stage',\n});\n\n// Subsequent calls with the same parameters return cached data\nconst optionsAgain = await getAttributeOptions({\n  client,\n  target: 'objects',\n  identifier: 'companies',\n  attribute: 'stage',\n}); // Returns cached result, no API call\n```\n\nThe metadata caches have the following defaults:\n- **Attributes cache**: 200 entries max\n- **Options cache**: 500 entries max\n- **Statuses cache**: 500 entries max\n\nWhen a cache reaches its limit, the oldest entry is evicted.\n\nYou can customize TTL, max entries, and adapters per client:\n\n```typescript\nconst client = createAttioClient({\n  apiKey: process.env.ATTIO_API_KEY,\n  cache: {\n    enabled: true,\n    metadata: {\n      ttlMs: 2 * 60 * 1000,\n      maxEntries: { attributes: 300, options: 800, statuses: 800 },\n      adapter: {\n        create: ({ scope, ttlMs, maxEntries }) =>\n          new YourCacheAdapter({ scope, ttlMs, maxEntries }),\n      },\n    },\n  },\n});\n\n// Clear metadata caches for this client\nclient.cache.clear();\n```\n\n#### Client Instance Caching\n\nYou can cache `AttioClient` instances to reuse them across your application. This is useful when you want to avoid creating new client instances for repeated operations.\n\n```typescript\nimport { getAttioClient } from 'attio-ts-sdk';\n\n// With cache.key set, the client instance is cached and reused\nconst client = getAttioClient({\n  apiKey: process.env.ATTIO_API_KEY,\n  cache: { key: 'my-app' },\n});\n\n// Returns the same cached client instance\nconst sameClient = getAttioClient({\n  apiKey: process.env.ATTIO_API_KEY,\n  cache: { key: 'my-app' },\n});\n\n// Disable caching if needed\nconst freshClient = getAttioClient({\n  apiKey: process.env.ATTIO_API_KEY,\n  cache: { enabled: false },\n});\n```\n\n### Debug Hooks\n\nYou can tap into request/response/error lifecycles for logging and tracing.\n\n```typescript\nconst client = createAttioClient({\n  apiKey: process.env.ATTIO_API_KEY,\n  hooks: {\n    onRequest: ({ request }) => console.log(\"request\", request.method, request.url),\n    onResponse: ({ response }) => console.log(\"response\", response.status),\n    onError: ({ error }) => console.error(\"error\", error.message),\n  },\n});\n\n// Or wire a logger (debug/info/warn/error)\nconst clientWithLogger = createAttioClient({\n  apiKey: process.env.ATTIO_API_KEY,\n  logger: console,\n});\n```\n\nNote: `createAttioClient` always creates a new client instance. Use `getAttioClient` when you want caching behavior.\n\n### Metadata Helpers\n\n```typescript\nimport {\n  createAttioClient,\n  findAttribute,\n  getAttributeOptions,\n  listAllowedValues,\n} from 'attio-ts-sdk';\n\nconst client = createAttioClient({ apiKey: process.env.ATTIO_API_KEY });\n\nconst options = await getAttributeOptions({\n  client,\n  target: 'objects',\n  identifier: 'companies',\n  attribute: 'stage',\n});\n\nconst statusAttribute = await findAttribute({\n  client,\n  target: 'objects',\n  identifier: 'companies',\n  type: 'status',\n  title: 'Stage',\n});\n\nconst allowedValues = await listAllowedValues({\n  client,\n  target: 'objects',\n  identifier: 'companies',\n  attribute: 'stage',\n});\n// [{ id, title, archived }]\n```\n\n### Working with Records\n\n```typescript\nimport {\n  createAttioClient,\n  createRecord,\n  upsertRecord,\n  getRecord,\n  deleteRecord,\n} from 'attio-ts-sdk';\n\nconst client = createAttioClient({ apiKey: process.env.ATTIO_API_KEY });\n\n// Create a new company\nconst newCompany = await createRecord({\n  client,\n  object: 'companies',\n  values: {\n    name: [{ value: 'Acme Corp' }],\n    domains: [{ domain: 'acme.com' }],\n  },\n});\n\n// Upsert a record (create or update based on matching attribute)\nconst upserted = await upsertRecord({\n  client,\n  object: 'companies',\n  matchingAttribute: 'domains',\n  values: {\n    name: [{ value: 'Acme Corp' }],\n    domains: [{ domain: 'acme.com' }],\n    description: [{ value: 'Updated description' }],\n  },\n});\n\n// Get a specific record\nconst company = await getRecord({\n  client,\n  object: 'companies',\n  recordId: 'abc-123',\n});\n\n// Delete a record\nawait deleteRecord({\n  client,\n  object: 'companies',\n  recordId: 'abc-123',\n});\n```\n\n### Using Generated Endpoints Directly\n\nYou can always call the generated endpoints for full spec coverage:\n\n```typescript\nimport { createAttioClient, getV2Objects } from 'attio-ts-sdk';\n\nconst client = createAttioClient({ apiKey: process.env.ATTIO_API_KEY });\nconst { data: objects } = await getV2Objects({ client });\n```\n\n### Managing Lists\n\n```typescript\nimport {\n  getV2Lists,\n  postV2ListsByListEntriesQuery,\n  postV2ListsByListEntries,\n} from 'attio-ts-sdk';\n\n// Get all lists\nconst { data: lists } = await getV2Lists({ client });\n\n// Query entries in a list\nconst { data: entries } = await postV2ListsByListEntriesQuery({\n  client,\n  path: { list: 'sales-pipeline' },\n  body: {\n    filter: {\n      attribute: 'stage',\n      value: 'negotiation',\n    },\n  },\n});\n\n// Add a record to a list\nconst { data: entry } = await postV2ListsByListEntries({\n  client,\n  path: { list: 'sales-pipeline' },\n  body: {\n    data: {\n      parent_record_id: 'company-record-id',\n      entry_values: {\n        stage: [{ status: 'prospecting' }],\n        deal_value: [{ currency_value: 50000 }],\n      },\n    },\n  },\n});\n```\n\n### Notes and Tasks\n\n```typescript\nimport {\n  createAttioSdk,\n  createNoteParentObjectId,\n  createNoteParentRecordId,\n} from 'attio-ts-sdk';\n\nconst sdk = createAttioSdk({ apiKey: process.env.ATTIO_API_KEY });\nconst companyObject = createNoteParentObjectId('companies');\nconst companyRecordId = createNoteParentRecordId('abc-123');\n\n// Create a note on a record.\nconst note = await sdk.notes.create({\n  parentObject: companyObject,\n  parentRecordId: companyRecordId,\n  title: 'Meeting Notes',\n  format: 'markdown',\n  content: 'Discussed Q4 roadmap...',\n});\n\n// Create a task.\nconst task = await sdk.tasks.create({\n  data: {\n    content: 'Follow up on proposal',\n    format: 'plaintext',\n    deadline_at: '2024-12-31T17:00:00Z',\n    is_completed: false,\n    linked_records: [{ target_object: 'companies', target_record_id: 'abc-123' }],\n    assignees: [],\n  },\n});\n\n// Mark task as complete.\nawait sdk.tasks.update({\n  taskId: task.id.task_id,\n  data: { is_completed: true },\n});\n```\n\n### Files\n\nUse `sdk.files` to list file entries linked to a record, fetch file metadata, and download native Attio files. The same helpers are also exported as standalone functions when you prefer to pass `{ client }` explicitly.\n\n| Method | Purpose |\n| --- | --- |\n| `sdk.files.list` / `listFiles` | List files and folders for any object record. |\n| `sdk.files.listForPerson` / `listPersonFiles` | List files and folders for a person record without passing `object: 'people'`. |\n| `sdk.files.get` / `getFile` | Fetch metadata for a single file entry. |\n| `sdk.files.download` / `downloadFile` | Download a native Attio file. |\n| `sdk.files.getDownloadUrl` / `getFileDownloadUrl` | Read the signed redirect URL when the runtime exposes it. |\n\n#### Generic record file access\n\nGeneric file listing requires the object slug or ID plus the record ID. Set `paginate: true` to collect all pages, or `paginate: 'stream'` to iterate lazily.\n\n```typescript\nimport {\n  createAttioSdk,\n  createFileObjectId,\n  createFileRecordId,\n} from 'attio-ts-sdk';\n\nconst sdk = createAttioSdk({ apiKey: process.env.ATTIO_API_KEY });\n\nconst companyFiles = await sdk.files.list({\n  object: createFileObjectId('companies'),\n  recordId: createFileRecordId('bf071e1f-6035-429d-b874-d83ea64ea13b'),\n  storageProvider: 'google-drive',\n  paginate: true,\n  limit: 100,\n});\n```\n\n#### Person file convenience methods\n\nFor person records, use `sdk.files.listForPerson` so you only provide the person's record ID. This is equivalent to `sdk.files.list({ object: createFileObjectId('people'), recordId: personId })`.\n\n```typescript\nimport {\n  createAttioSdk,\n  createFileRecordId,\n  listPersonFiles,\n} from 'attio-ts-sdk';\n\nconst sdk = createAttioSdk({ apiKey: process.env.ATTIO_API_KEY });\nconst personId = createFileRecordId('2f96e5cc-8aab-4db5-9074-5c5d510d4f38');\n\nconst personFiles = await sdk.files.listForPerson({\n  personId,\n  paginate: 'stream',\n});\n\nfor await (const file of personFiles) {\n  console.log(file.file_type, file.id.file_id);\n}\n\nconst sameFiles = await listPersonFiles({\n  client: sdk.client,\n  personId,\n  paginate: true,\n});\n```\n\n#### Metadata and downloads\n\nUse `get` for file-entry metadata, `download` for file contents, and `getDownloadUrl` when you need the signed redirect URL directly.\n\n```typescript\nimport { createFileId } from 'attio-ts-sdk';\n\nconst firstFile = companyFiles[0];\nif (firstFile) {\n  const fileId = createFileId(firstFile.id.file_id);\n  const metadata = await sdk.files.get({ fileId });\n  const bytes = await sdk.files.download({ fileId });\n  const signedUrl = await sdk.files.getDownloadUrl({ fileId });\n\n  console.log(metadata.file_type, bytes.byteLength, signedUrl);\n}\n```\n\nPass `parseAs: 'blob'`, `parseAs: 'stream'`, or `parseAs: 'text'` to `sdk.files.download` when you need a different response type. File create, upload, and delete operations remain available through generated endpoints such as `postV2Files`, `postV2FilesUpload`, and `deleteV2FilesByFileId`.\n\nThe integration token needs `file:read`, `object_configuration:read`, and `record_permission:read` scopes for file reads.\n\n### Listing and Viewing Person Notes\n\nUse `sdk.notes.list` with a branded `parentObject` for `people` and the person's branded record ID to list notes attached to a specific person. Set `paginate: true` to collect every page, or `paginate: 'stream'` to iterate notes lazily.\n\n```typescript\nimport {\n  createAttioSdk,\n  createNoteParentObjectId,\n  createNoteParentRecordId,\n} from 'attio-ts-sdk';\n\nconst sdk = createAttioSdk({ apiKey: process.env.ATTIO_API_KEY });\nconst personObject = createNoteParentObjectId('people');\nconst personRecordId = createNoteParentRecordId('person-record-id');\n\nconst personNotes = await sdk.notes.list({\n  parentObject: personObject,\n  parentRecordId: personRecordId,\n  paginate: true,\n  limit: 50,\n});\n\nconst firstNote = personNotes[0];\nif (firstNote) {\n  const note = await sdk.notes.get({ noteId: firstNote.id.note_id });\n\n  console.log(note.title);\n  console.log(note.content_markdown ?? note.content_plaintext);\n}\n```\n\nThe integration token needs `note:read`, `object_configuration:read`, and `record_permission:read` scopes for these reads.\n\nThe task wrapper exposes the generated list filters as camelCase inputs:\n\n```typescript\nconst openTasksForPerson = await sdk.tasks.list({\n  linkedRecord: { object: 'people', recordId: personRecordId },\n  assignee: 'owner@example.com',\n  isCompleted: false,\n  sort: 'created_at:desc',\n  paginate: true,\n});\n```\n\n### Webhooks\n\n```typescript\nimport { postV2Webhooks, getV2Webhooks } from 'attio-ts-sdk';\n\n// Create a webhook\nconst { data: webhook } = await postV2Webhooks({\n  client,\n  body: {\n    data: {\n      target_url: 'https://your-app.com/webhooks/attio',\n      subscriptions: [\n        { event_type: 'record.created', filter: { object: 'companies' } },\n        { event_type: 'record.updated', filter: { object: 'companies' } },\n      ],\n    },\n  },\n});\n\n// List all webhooks\nconst { data: webhooks } = await getV2Webhooks({ client });\n```\n\n## See Also\n\n- [attio-js](https://github.com/d-stoll/attio-js) - an alternative SDK generated with Speakeasy\n- [attio-tui](https://github.com/hbmartin/attio-tui) - a TUI for using Attio built with this library\n- [attio-mcp-server](https://github.com/kesslerio/attio-mcp-server) - an MCP server for using Attio from AI assistants\n\n## Development\n\n### Tools\n\n- **[Hey API](https://heyapi.dev/)**: OpenAPI client and Zod schema generation\n- **Biome**: lint and format with a single tool\n- **Vitest**: fast tests with coverage and thresholds\n- **tsdown**: dual ESM/CJS builds for Node\n- **CI**: lint, typecheck, test, coverage, and size comments/badges\n- **Deno-friendly**: `.ts` source imports for direct consumption\n- **OIDC + Provenance**: publish to npm and JSR via manual CI release\n\n### Setup\n\nInstall dependencies and run scripts:\n\n```bash\ngit clone git@github.com:hbmartin/attio-ts-sdk.git\ncd attio-ts-sdk\npnpm i\npnpm lint\npnpm test\npnpm build\n```\n\n## License\n\n[MIT](LICENSE) © [Harold Martin](https://www.linkedin.com/in/harold-martin-98526971/)\n","readmeFilename":"README.md"}