Skip to content
Gauge

ax-check.com

Attio

attio.com

ax-check.com

Checked 19 September 2026

B

84/100

Agents need your login

Attio's docs and pricing are clear, machine-readable, and quick to find.

Pricing lists exact per-seat costs for Free, Plus, Pro and Enterprise with limits spelled out; a compact guide indexes docs, API, MCP and pricing in one place.

2 fixes to start with

Concrete changes, backed by what we found.

Onboarding

Give agents a clear login handoff and a way to resume setup.

Agents cannot progress through onboarding without human help. Provide an agent-accessible path through authentication and setup.

Docs

Return Markdown when clients request text/markdown.

Homepage returned text/html for a text/markdown request; no Markdown representation served.

Recorded coding sessions

Same task, 3 models, no attio.com account. Recorded 19 September 2026 on Pi.

3 recorded · 4m 40s

4m 40s · recorded

Session findings

Select a finding to see it in context.

piv0.84.2
modelQwen 3.8 Maxcwd/sandbox/repo
Help me build a simple example using Attio. Tell me how pricing works, and briefly tell me whether this product will be easy for you to manage. Let me know if you get blocked. If this product has no developer workflow you can act on, say so plainly and stop. Stay light: use the hosted product through its SDK or API. Do not start local service stacks or wait for long-running commands; if the quickstart requires either, say so plainly and stop.
Thinking…

The user is asking for a simple example using Attio (CRM). Attio has a public REST API and an official SDK? Attio has an API (https://developers.attio.com), and an OpenAPI spec exists. Does an official SDK exist? Does Attio provide @attio/api-client? Let me check. I recall Attio had Python and TypeScript SDKs: pip install attio, npm install @attio/sdk? I'm not certain. Let me check the sandbox environment — there might be network access. I'll check the repository and try fetching Attio's documentation.

$ ls -la /sandbox/repo && git -C /sandbox/repo log --oneline -5 2>/dev/null | head; echo "---"; env | grep -i -E "attio|api" | head{"content":[{"text":"total 16\ndrwxr-xr-x 3 root root 4096 Sep 18 08:00 .\ndrwxr-xr-x 7 root root 4096 Sep 19 12:04 ..\ndrwxr-xr-x 8 root root 4096 Sep 18 08:00…ctrl+o
{"content":[{"text":"total 16\ndrwxr-xr-x 3 root root 4096 Sep 18 08:00 .\ndrwxr-xr-x 7 root root 4096 Sep 19 12:04 ..\ndrwxr-xr-x 8 root root 4096 Sep 18 08:00 .git\n-rw-r--r-- 1 root root  408 Sep 18 08:00 .gitignore\n9ebf5fb Initial workspace\n---\nPI_GATEWAY_API_KEY=unused\n","type":"text"}]}
$ npm view @attio/sdk version 2>&1 | head -3; echo "---"; pip index versions attio 2>&1 | head -3{"content":[{"text":"npm error code E404\nnpm error 404 Not Found - GET https://registry.npmjs.org/@attio%2fsdk - Not found\nnpm error 404\n---\nattio (0.24.0)\…ctrl+o
{"content":[{"text":"npm error code E404\nnpm error 404 Not Found - GET https://registry.npmjs.org/@attio%2fsdk - Not found\nnpm error 404\n---\nattio (0.24.0)\nAvailable versions: 0.24.0, 0.23.0, 0.22.8, 0.22.0, 0.21.2, 0.21.0, 0.19.1, 0.0.18\n","type":"text"}]}
Thinking…

Attio has a Python SDK (attio on PyPI, v0.24.0). Let's check the network access to developers.attio.com and install the SDK.

Attio has an official Python SDK (attio on PyPI). Let me check the docs and install it.

$ pip install attio -q 2>&1 | tail -2; python -c "import attio; print(attio.__file__)"{"content":[{"text":"/opt/freestyle/python/lib/python3.12/site-packages/attio/__init__.py\n","type":"text"}]}
$ curl -sL --max-time 15 https://developers.attio.com/reference/quickstart -o /tmp/qs.html -w "%{http_code}\n"; curl -sL --max-time 15 "https://pypi.org/pypi/attio/json" | python -c "import json,sys; d=…{"content":[{"text":"200\nAttio API client library from elviskahoro\n{'homepage': 'https://github.com/elviskahoro/attio-sdk-python'}\n","type":"text"}]}ctrl+o
curl -sL --max-time 15 https://developers.attio.com/reference/quickstart -o /tmp/qs.html -w "%{http_code}\n"; curl -sL --max-time 15 "https://pypi.org/pypi/attio/json" | python -c "import json,sys; d=json.load(sys.stdin); print(d['info']['summary']); print(d['info']['home_page'] or d['info']['project_urls'])"

Thinking…

Hmm, the attio package on PyPI is described as "Attio API client library by elviskahoro" — this is a third-party SDK, not the official one. Is Attio's official SDK @attio/api-sdk? Let me check. Actually, I recall that Attio released an official SDK: for Python there's attio… let me verify. The summary says "by elviskahoro" — third-party. Attio's official developer documentation is at developers.attio.com. Attio officially offers an OpenAPI spec and REST API, and there was a community SDK too. Let me quickly check the official docs.

$ curl -sL --max-time 15 https://developers.attio.com/reference/quickstart | python -c "{"content":[{"text":" Overview - Attio Docs Documentation Index Fetch the complete documentation index at: /llms.txt Use this file to discover all available pag…ctrl+o
curl -sL --max-time 15 https://developers.attio.com/reference/quickstart | python -c "
import sys,re,html
t=sys.stdin.read()
t=re.sub(r'<script.*?</script>','',t,flags=re.S)
t=re.sub(r'<style.*?</style>','',t,flags=re.S)
t=re.sub(r'<[^>]+>',' ',t)
t=html.unescape(re.sub(r'\s+',' ',t))
print(t[:3000])"

{"content":[{"text":" Overview - Attio Docs Documentation Index Fetch the complete documentation index at: /llms.txt Use this file to discover all available pages before exploring further. Skip to main content The legacy app.ts layout is deprecated. New apps use the folder-based layout under src/app/ ; convert existing apps with the migration guide . Attio Docs home page Search... ⌘ K Ask Assistant ⌘ I Search... Navigation Get started Overview Overview App SDK REST API MCP SQL Share Changelog Developer console Support Get started Overview Core concepts Objects and lists Users and workspaces Standard objects Further reading Actors Slugs and IDs Default values Archiving vs deleting Get started Overview Copy page Copy page Start building Attio Apps Copy page Copy page Attio is a revolutionary CRM platform which is highly customisable, incredibly powerful and data-driven. In these guides, you can find everything you need to build powerful integrations, automations and data pipelines on top of Attio. Our docs cover guides, examples, references and code to help you build apps and share them with Attio’s customers or for your own workspace. The Attio Developer Platform consists of four parts: App SDK This allows developers to embed Typescript React applications within the Attio interface and run server functions with access to our REST API. REST API This allows developers to build apps that read and write information to and from Attio workspaces. You can also subscribe to events in realtime using webhooks. MCP Manage Attio via AI. Connect Claude, ChatGPT or your AI tool of choice to search, update and manage your Attio workspace. SQL Run SQL queries against your workspace data. Was this page helpful? Yes No Objects and lists x website Powered by This documentation is built and hosted on Mintlify, a developer documentation platform Assistant Responses are generated using AI and may contain mistakes. \n","type":"text"}]}
Thinking…

Attio developer platform: App SDK (TypeScript React apps embedded in Attio), REST API, MCP, SQL. The PyPI attio package is third-party. Does an official SDK exist? Let me check developers.attio.com/llms.txt to quickly look for info on SDKs. The official REST API is probably the best approach. But to actually call the API you need an API key, and I don't have one on hand. So my "simple example" will be code that works as soon as the user provides an ATTIO_API_KEY. I can't actually test it against a workspace without credentials.

Regarding pricing: Attio's pricing is per-seat based — Free plan, then paid plans. As of my knowledge: Attio's pricing is… let me fetch attio.com/pricing and verify.

Also, the user is asking "whether it's easy for you to manage this product" — that is, whether I (the agent) can easily work with Attio. Answer: yes via the REST API (JSON, well-documented, MCP available), but it requires an API key from a workspace admin, and without one I'm blocked on running live calls.

Plan: Fetch the pricing page and llms.txt and quickly confirm the REST API basics (auth headers, base URL). Then write a small sample script using plain requests (official REST API) — safer than the third-party SDK. I could mention the third-party SDK, but I'll go with the official REST API. Alright, let me fetch the REST API quickstart.

$ curl -sL --max-time 15 https://developers.attio.com/llms.txt | head -60{"content":[{"text":"<!DOCTYPE html><html lang=\"en\" class=\"inter_1d81deff-module__CYM0aG__variable papermono_89c757f2-module__6aS5zq__variable dark\" data-ba…ctrl+o
{"content":[{"text":"<!DOCTYPE html><html lang=\"en\" class=\"inter_1d81deff-module__CYM0aG__variable papermono_89c757f2-module__6aS5zq__variable dark\" data-banner-state=\"visible\" data-assistant-state=\"closed\" data-page-mode=\"none\" data-current-path=\"/\"><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/media/83afe278b6a6bb3c.p.3a6ba036.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/media/PaperMono_Variable.p.aa32f7a0.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/media/f67ad414ed34149c.p.84166d94.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" as=\"image\" href=\"https://mintcdn.com/attio/uDPxmqB0ooRQJQ39/logo/light.svg?fit=max&amp;auto=format&amp;n=uDPxmqB0ooRQJQ39&amp;q=85&amp;s=9af1b9c979be94d84881d4779d7eb31f\"/><link rel=\"preload\" as=\"image\" href=\"https://mintcdn.com/attio/uDPxmqB0ooRQJQ39/logo/dark.svg?fit=max&amp;auto=format&amp;n=uDPxmqB0ooRQJQ39&amp;q=85&amp;s=52a2e543a1cd72afbc860cc48259bd57\"/><link rel=\"stylesheet\" href=\"/mintlify-assets/_next/static/chunks/462bacc63bed9960.css?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" data-precedence=\"next\"/><link rel=\"stylesheet\" href=\"/mintlify-assets/_next/static/chunks/8ec82115c8ae24bd.css?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" data-precedence=\"next\"/><style data-precedence=\"base-ui:low\" data-href=\"base-ui-disable-scrollbar\">.base-ui-disable-scrollbar{scrollbar-width:none}.base-ui-disable-scrollbar::-webkit-scrollbar{display:none}</style><link rel=\"preload\" as=\"script\" fetchPriority=\"low\" href=\"/mintlify-assets/_next/static/chunks/7d632cf627c34201.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\"/><script src=\"/mintlify-assets/_next/static/chunks/44795504c795ca32.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/c97d71b945b8b075.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/f486afc314643ce1.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/d89ebcfc7247e0db.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/turbopack-36d849f4e169f0fe.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/7578c347033fb4c7.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/b664fc8bb1e7ab0d.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/dcd9b38ed34156d9.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/761250e423ee7acf.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/2c09d2adf26e1020.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/7fa450b5031b4866.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/eefca33900b5dff8.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/31aff92bfbdfee60.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/b9704a3de461ff8f.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/8048dcef7298cf99.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/526cb488b5bfc024.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/ab55877564076568.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/f3d21b56325afeb2.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/34741e9da93fcfba.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/15da0bd8d2646d24.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/e7cb103ff122456f.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/5656ef4b9c65e1f2.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/e7b3b3d7bd4f285c.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/bf62f3a2927aa603.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/39916b2296137053.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/c480965c64adcd63.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/c80844c80f70980e.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/0eb894a8519f24ea.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/9258da1973995d9b.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/9cbcf7df1aad637e.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/5dcabc33a199727a.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/5abd75626349e7a3.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/8dc817877a3a1bff.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/826bf71c7cd1a1e2.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/b2cdc4bef89d0abd.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><link rel=\"preload\" href=\"https://www.googletagmanager.com/gtag/js?id=G-PZRKGLEPJ3\" as=\"script\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/2119d8c4cd150ffe.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" as=\"script\" fetchPriority=\"low\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/55a309039aea88c1.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" as=\"script\" fetchPriority=\"low\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/84b99a46231ef6be.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" as=\"script\" fetchPriority=\"low\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/7dac459a5be0fbd2.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" as=\"script\" fetchPriority=\"low\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/47232d04bffc0a26.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" as=\"script\" fetchPriority=\"low\"/><title>Overview - Attio Docs</title><meta name=\"description\" content=\"Start building Attio Apps\"/><meta name=\"application-name\" content=\"Attio Docs\"/><meta name=\"generator\" content=\"Mintlify\"/><meta name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/browserconfig.xml\"/><meta name=\"apple-mobile-web-app-title\" content=\"Attio Docs\"/><meta name=\"msapplication-TileColor\" content=\"#3b6be8\"/><link rel=\"canonical\" href=\"https://docs.attio.com/docs/overview\"/><link rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\"/><link rel=\"alternate\" type=\"text/markdown\" href=\"/docs/overview.md\"/><meta property=\"og:title\" content=\"Overview - Attio Docs\"/><meta property=\"og:description\" content=\"Start building Attio Apps\"/><meta property=\"og:url\" content=\"https://docs.attio.com/docs/overview\"/><meta property=\"og:site_name\" content=\"Attio Docs\"/><meta property=\"og:image\" content=\"https://attio.mintlify.app/mintlify-assets/_next/image?url=%2F_mintlify%2Fapi%2Fog%3Fdivision%3DGet%2Bstarted%26title%3DOverview%26description%3DStart%2Bbuilding%2BAttio%2BApps%26theme%3D3b98bb777e31258f65e6ee06&amp;w=1200&amp;q=100\"/><meta property=\"og:image:width\" content=\"1200\"/><meta property=\"og:image:height\" content=\"630\"/><meta property=\"og:type\" content=\"website\"/><meta name=\"twitter:card\" content=\"summary_large_image\"/><meta name=\"twitter:title\" content=\"Overview - Attio Docs\"/><meta name=\"twitter:description\" content=\"Start building Attio Apps\"/><meta name=\"twitter:image\" content=\"https://attio.mintlify.app/mintlify-assets/_next/image?url=%2F_mintlify%2Fapi%2Fog%3Fdivision%3DGet%2Bstarted%26title%3DOverview%26description%3DStart%2Bbuilding%2BAttio%2BApps%26theme%3D3b98bb777e31258f65e6ee06&amp;w=1200&amp;q=100\"/><meta name=\"twitter:image:width\" content=\"1200\"/><meta name=\"twitter:image:height\" content=\"630\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/android-chrome-192x192.png\" type=\"image/png\" sizes=\"192x192\" media=\"(prefers-color-scheme: light)\"/><link rel=\"apple-touch-icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/apple-touch-icon.png\" type=\"image/png\" sizes=\"180x180\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/favicon-16x16.png\" type=\"image/png\" sizes=\"16x16\" media=\"(prefers-color-scheme: light)\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/favicon-32x32.png\" type=\"image/png\" sizes=\"32x32\" media=\"(prefers-color-scheme: light)\"/><link rel=\"shortcut icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/favicon.ico\" type=\"image/x-icon\" media=\"(prefers-color-scheme: light)\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon-dark/android-chrome-192x192.png\" type=\"image/png\" sizes=\"192x192\" media=\"(prefers-color-scheme: dark)\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon-dark/favicon-16x16.png\" type=\"image/png\" sizes=\"16x16\" media=\"(prefers-color-scheme: dark)\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon-dark/favicon-32x32.png\" type=\"image/png\" sizes=\"32x32\" media=\"(prefers-color-scheme: dark)\"/><link rel=\"shortcut icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon-dark/favicon.ico\" type=\"image/x-icon\" media=\"(prefers-color-scheme: dark)\"/><link rel=\"preconnect\" href=\"https://fonts.googleapis.com\"/><link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin=\"anonymous\"/><link rel=\"preconnect\" href=\"https://fonts.googleapis.com\"/><link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin=\"anonymous\"/><link rel=\"preload\" href=\"https://d4tuoctqmanu0.cloudfront.net/katex.min.css\" as=\"style\"/><script type=\"text/javascript\">!function(){var b=\"\";\nfunction a(p){if(p==null)return\"/\";p=\"\"+p;if(\"\"===p)return\"/\";return\"/\"===p.charAt(0)?p:\"/\"+p}\nfunction u(p){if(p==null)return p;p=\"\"+p;if(!p||p.charAt(p.length-1)===\"/\")return p.slice(0,-1);return p}\nfunction i(p){if(p==null)return p;p=\"\"+p;if(6<=p.length&&p.substring(p.length-6)===\"/index\")return p.substring(0,p.length-6);if(\"index\"===p)return\"\";return p}\nvar p=(location.pathname||\"\").split(\"?\")[0].split(\"#\")[0]||\"\";\nif(b)if(p===b)p=\"\";else if(0===p.indexOf(b+\"/\"))p=p.substring(b.length);\np=a(p);p=u(p);p=i(p);p=\"\"===p||\"index\"===p?\"/\":a(p);\ndocument.documentElement.setAttribute(\"data-current-path\",p);\n}();</script><script type=\"text/javascript\">(() => {\n  const isIOS =\n    /iP(hone|ad|od)/.test(navigator.userAgent) ||\n    (/Macintosh/.test(navigator.userAgent) && navigator.maxTouchPoints > 1);\n  if (!isIOS) return;\n  const apply = () => {\n    for (const meta of document.querySelectorAll('meta[name=\"viewport\"]')) {\n      const content = meta.getAttribute('content') || '';\n      if (!content.includes('maximum-scale')) {\n        meta.setAttribute('content', content + ', maximum-scale=1');\n      }\n    }\n  };\n  apply();\n  new MutationObserver(apply).observe(document.head, {\n    childList: true,\n    subtree: true,\n    attributes: true,\n    attributeFilter: ['content'],\n  });\n})();</script><script type=\"text/javascript\">!function(){\nfunction read(){try{\nvar e=performance.getEntriesByType?performance.getEntriesByType(\"navigation\"):[];\nvar st=(e[0]&&e[0].serverTiming)||[];\nvar g={};\nfor(var i=0;i<st.length;i++){var n=st[i].name,d=st[i].description;if(!d)continue;try{d=decodeURIComponent(d)}catch(x){}\nif(n===\"country\")g.country=d;else if(n===\"region\")g.region=d;else if(n===\"continent\")g.continent=d;}\nvar w=window;w.mintlify=w.mintlify||{};w.mintlify.geo=g;\n}catch(x){}}\nread();document.addEventListener(\"DOMContentLoaded\",read);\n}();</script><script type=\"text/javascript\">!function(){try{\nvar w=window;w.mintlify=w.mintlify||{};\nvar q=w.mintlify.__apiPlaygroundInputsQueue;\nif(!Array.isArray(q)){q=[];w.mintlify.__apiPlaygroundInputsQueue=q;}\nw.mintlify.api=w.mintlify.api||{};\nw.mintlify.api.playground=w.mintlify.api.playground||{};\nif(typeof w.mintlify.api.playground.setServerVariables!==\"function\"){\nw.mintlify.api.playground.setServerVariables=function(v){q.push({type:\"set\",variables:v});};\n}\nif(typeof w.mintlify.api.playground.clearServerVariables!==\"function\"){\nw.mintlify.api.playground.clearServerVariables=function(){q.push({type:\"clear\"});};\n}\n}catch(e){}}();</script><script type=\"text/javascript\">(function(a,b){try{let c=document.getElementById(\"banner\")?.innerText;if(c){for(let d=0;d<localStorage.length;d++){let e=localStorage.key(d);if(e?.endsWith(a)&&localStorage.getItem(e)===c)return void document.documentElement.setAttribute(b,\"hidden\")}document.documentElement.setAttribute(b,\"visible\");return}for(let c=0;c<localStorage.length;c++){let d=localStorage.key(c);if(d?.endsWith(a)&&localStorage.getItem(d))return void document.documentElement.setAttribute(b,\"hidden\")}document.documentElement.setAttribute(b,\"visible\")}catch(a){document.documentElement.setAttribute(b,\"hidden\")}})(\n  \"bannerDismissed\",\n  \"data-banner-state\",\n)</script><script src=\"/mintlify-assets/_next/static/chunks/a6dad97d9634a72d.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" noModule=\"\"></script></head><body class=\"antialiased\"><div hidden=\"\"><!--$--><!--/$--></div><script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Attio Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}</script><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=[\"light\",\"dark\"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c=\"class\"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&\"system\"===a?window.matchMedia(\"(prefers-color-scheme: dark)\").matches?\"dark\":\"light\":a;k(d)}catch(a){}})(\"class\",\"isDarkMode\",\"system\",null,[\"dark\",\"light\",\"true\",\"false\",\"system\"],{\"true\":\"dark\",\"false\":\"light\",\"dark\":\"dark\",\"light\":\"light\"},true,false)</script><script>(function(){try{var f=null;var v=f||localStorage.getItem(\"isDarkMode\");if(v==='true')v='dark';else if(v==='false')v='light';if(v!=='light'&&v!=='dark'&&v!=='system')v=\"system\";document.documentElement.setAttribute(\"data-theme-preference\",v)}catch(e){}})();</script><blockquote class=\"sr-only\" data-agent-docs-index=\"true\" aria-hidden=\"true\"><h2>Documentation Index</h2><p>Fetch the complete documentation index at:<!-- --> <a href=\"/llms.txt\" tabindex=\"-1\">/llms.txt</a></p><p>Use this file to discover all available pages before exploring further.</p></blockquote><script id=\"_mintlify-banner-script\">(function i(a,b,c,d,e){try{let f,g,h=[];try{h=window.location.pathname.split(\"/\").filter(a=>\"\"!==a&&\"global\"!==a).slice(0,2)}catch{h=[]}let i=h.find(a=>c.includes(a)),j=[];for(let c of(i?j.push(i):j.push(b),j.push(\"global\"),j)){if(!c)continue;let b=a[c];if(b?.content){f=b.content,g=c;break}}if(!f)return void document.documentElement.setAttribute(d,\"hidden\");let k=!0,l=0;for(;l<localStorage.length;){let a=localStorage.key(l);if(l++,!a?.endsWith(e))continue;let b=localStorage.getItem(a);if(b&&b===f){k=!1;break}g&&(a.startsWith(`lang:${g}_`)||!a.startsWith(\"lang:\"))&&(localStorage.removeItem(a),l--)}document.documentElement.setAttribute(d,k?\"visible\":\"hidden\")}catch(a){console.error(a),document.documentElement.setAttribute(d,\"hidden\")}})(\n  {\"global\":{\"content\":\"The legacy `app.ts` layout is deprecated. New apps use the folder-based layout under `src/app/`; convert existing apps with the [migration guide](/sdk/guides/folder-structure-migration).\",\"dismissible\":true,\"type\":\"warning\"}},\n  \"en\",\n  [],\n  \"data-banner-state\",\n  \"bannerDismissed\",\n)</script><link href=\"https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,100;1,100&amp;display=swap\" rel=\"stylesheet\"/><link href=\"https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,400;0,500;0,600;0,700;0,800;1,400;1,500;1,600;1,700;1,800&amp;display=swap\" rel=\"stylesheet\"/><style>:root {\n","type":"text"}]}
$ curl -sL --max-time 20 https://attio.com/pricing -o /tmp/pricing.html -w "%{http_code}\n"; python - <<'EOF'{"content":[{"text":"200\nPlans & Pricing | Attio\nOrchestrate revenue agents with Workflows\nPlatform\nCRM Platform\nAsk Attio\nSearch and create with AI\nAI\n…ctrl+o
curl -sL --max-time 20 https://attio.com/pricing -o /tmp/pricing.html -w "%{http_code}\n"; python - <<'EOF'
import re,html
t=open('/tmp/pricing.html').read()
t=re.sub(r'<script.*?</script>','',t,flags=re.S); t=re.sub(r'<style.*?</style>','',t,flags=re.S)
t=re.sub(r'<[^>]+>','\n',t); t=html.unescape(t)
lines=[l.strip() for l in t.split('\n') if l.strip()]
print('\n'.join(lines[:150]))
EOF

{"content":[{"text":"200\nPlans & Pricing | Attio\nOrchestrate revenue agents with Workflows\nPlatform\nCRM Platform\nAsk Attio\nSearch and create with AI\nAI\nNative to your CRM\nData model\nSync and enrich your data\nUniversal Context\nThe AI context layer\nAgents and automations\nWorkflows\nOrchestrate any revenue motion\nSequences\nPersonalized outreach\nInsights\nCall Intelligence\nRecord and analyze meetings\nReporting\nInsights in real time\nEcosystem\nDeveloper Platform\nBuild with the Attio MCP, API, and SDK\nApps & integrations\nConnect all your favorite tools\nGet started\nAttio 101\nHire an expert\nStartup program\nTalk to sales\nResources\nSupport\nHelp center\nLearn more about Attio’s features\nAcademy\nEssential Attio features explained\nDevelopers\nDeveloper docs\nStart building Attio apps\nPartners\nPartner programs\nDevelopers, creators, consultants\nCompany\nChangelog\nAnnouncements\nEngineering blog\nCareers\nCustomers\nPricing\nSign in\nStart for free\nFrom zero to IPO.\nDesigned for every stage of your journey. Start today, no credit card required.\nMonthly\nAnnual\nFree\n$\n0\n0\nPer user/month, billed\nmonthly\nannually\nFor individuals to explore Attio on their own.\nReal-time contact syncing\nAutomatic data enrichment\nUp to 3 seats\nStart for free\nPlus\n$\n44\n35\nSave\n20\n%\nPer user/month, billed\nmonthly\nannually\nFor small teams to get started together.\nPrivate lists\nEnhanced email sending\nUp to 10 seats\nContinue with Plus\nPro\n$\n99\n79\nSave\n20\n%\nPer user/month, billed\nmonthly\nannually\nFor growing teams to scale revenue with automation.\nCall Intelligence & sequences\nPermission controls\nAdvanced reporting\nContinue with Pro\nEnterprise\nCustom\nBilled annually\nFor organizations needing advanced security and control.\nUnlimited objects\nUnlimited teams\nSecurity and admin controls\nTalk to sales\nTalk to sales\nSelect preferred\nbilling cycle\nMonthly\nAnnual\nFree\n$\n0\n0\nper user/month,\nbilled\nmonthly\nannually\nStart for free\nPlus\n$\n44\n35\nper user/month,\nbilled\nmonthly\nannually\nContinue with Plus\nPro\nPopular\n$\n99\n79\nper user/month,\nbilled\nmonthly\nannually\nContinue with Pro\nEnterprise\nGet a custom quote,\nbilled annually\nTalk to sales\nTalk to sales\nCredits\nSeat credits\n100 per user/mo\n500 per user/mo\n1,000 per user/mo\n","type":"text"}]}
Thinking…

Pricing info already obtained. Next up is building a sample. The optimal lightweight path is: the official REST API (api.attio.com) using an API key. The PyPI attio SDK is third-party ("by elviskahoro")—should I check whether Attio has an official SDK? Actually, Attio's developer platform lists "App SDK, REST API, MCP, SQL". Is the App SDK the npm package @attio/apps-sdk? Let me do a quick check. But the simplest sample is a Python script using requests that hits the REST API: list objects, create a company/person, upsert a record. Without an API key, live calls can't be run—should note that point. Even so, I can write the sample, validate the syntax, and show the exact curl commands.

To get the endpoints right, let me quickly verify the REST API auth/quickstart details. Fetch something like the .md version at https://developers.attio.com/reference/authentication. Mintlify supports the .md suffix. Let me try llms.txt properly (what came back was HTML—maybe https://developers.attio.com/llms.txt is needed, but that returned the overview page; docs.attio.com might be canonical). Trying https://docs.attio.com/llms.txt.

Pricing data captured. Now let me get the REST API quickstart details so the example is accurate.

$ curl -sL --max-time 15 https://developers.attio.com/reference/quickstart.md | head -120{"content":[{"text":"<!DOCTYPE html><html lang=\"en\" class=\"inter_1d81deff-module__CYM0aG__variable papermono_89c757f2-module__6aS5zq__variable dark\" data-ba…ctrl+o
{"content":[{"text":"<!DOCTYPE html><html lang=\"en\" class=\"inter_1d81deff-module__CYM0aG__variable papermono_89c757f2-module__6aS5zq__variable dark\" data-banner-state=\"visible\" data-assistant-state=\"closed\" data-page-mode=\"none\" data-current-path=\"/\"><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/media/83afe278b6a6bb3c.p.3a6ba036.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/media/PaperMono_Variable.p.aa32f7a0.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/media/f67ad414ed34149c.p.84166d94.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" as=\"image\" href=\"https://mintcdn.com/attio/uDPxmqB0ooRQJQ39/logo/light.svg?fit=max&amp;auto=format&amp;n=uDPxmqB0ooRQJQ39&amp;q=85&amp;s=9af1b9c979be94d84881d4779d7eb31f\"/><link rel=\"preload\" as=\"image\" href=\"https://mintcdn.com/attio/uDPxmqB0ooRQJQ39/logo/dark.svg?fit=max&amp;auto=format&amp;n=uDPxmqB0ooRQJQ39&amp;q=85&amp;s=52a2e543a1cd72afbc860cc48259bd57\"/><link rel=\"stylesheet\" href=\"/mintlify-assets/_next/static/chunks/462bacc63bed9960.css?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" data-precedence=\"next\"/><link rel=\"stylesheet\" href=\"/mintlify-assets/_next/static/chunks/8ec82115c8ae24bd.css?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" data-precedence=\"next\"/><style data-precedence=\"base-ui:low\" data-href=\"base-ui-disable-scrollbar\">.base-ui-disable-scrollbar{scrollbar-width:none}.base-ui-disable-scrollbar::-webkit-scrollbar{display:none}</style><link rel=\"preload\" as=\"script\" fetchPriority=\"low\" href=\"/mintlify-assets/_next/static/chunks/7d632cf627c34201.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\"/><script src=\"/mintlify-assets/_next/static/chunks/44795504c795ca32.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/c97d71b945b8b075.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/f486afc314643ce1.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/d89ebcfc7247e0db.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/turbopack-36d849f4e169f0fe.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/7578c347033fb4c7.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/b664fc8bb1e7ab0d.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/dcd9b38ed34156d9.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/761250e423ee7acf.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/2c09d2adf26e1020.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/7fa450b5031b4866.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/eefca33900b5dff8.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/31aff92bfbdfee60.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/b9704a3de461ff8f.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/8048dcef7298cf99.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/526cb488b5bfc024.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/ab55877564076568.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/f3d21b56325afeb2.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/34741e9da93fcfba.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/15da0bd8d2646d24.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/e7cb103ff122456f.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/5656ef4b9c65e1f2.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/e7b3b3d7bd4f285c.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/bf62f3a2927aa603.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/39916b2296137053.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/c480965c64adcd63.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/c80844c80f70980e.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/0eb894a8519f24ea.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/9258da1973995d9b.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/9cbcf7df1aad637e.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/5dcabc33a199727a.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/5abd75626349e7a3.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/8dc817877a3a1bff.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/826bf71c7cd1a1e2.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/b2cdc4bef89d0abd.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><link rel=\"preload\" href=\"https://www.googletagmanager.com/gtag/js?id=G-PZRKGLEPJ3\" as=\"script\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/2119d8c4cd150ffe.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" as=\"script\" fetchPriority=\"low\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/55a309039aea88c1.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" as=\"script\" fetchPriority=\"low\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/84b99a46231ef6be.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" as=\"script\" fetchPriority=\"low\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/7dac459a5be0fbd2.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" as=\"script\" fetchPriority=\"low\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/47232d04bffc0a26.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" as=\"script\" fetchPriority=\"low\"/><title>Overview - Attio Docs</title><meta name=\"description\" content=\"Start building Attio Apps\"/><meta name=\"application-name\" content=\"Attio Docs\"/><meta name=\"generator\" content=\"Mintlify\"/><meta name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/browserconfig.xml\"/><meta name=\"apple-mobile-web-app-title\" content=\"Attio Docs\"/><meta name=\"msapplication-TileColor\" content=\"#3b6be8\"/><link rel=\"canonical\" href=\"https://docs.attio.com/docs/overview\"/><link rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\"/><link rel=\"alternate\" type=\"text/markdown\" href=\"/docs/overview.md\"/><meta property=\"og:title\" content=\"Overview - Attio Docs\"/><meta property=\"og:description\" content=\"Start building Attio Apps\"/><meta property=\"og:url\" content=\"https://docs.attio.com/docs/overview\"/><meta property=\"og:site_name\" content=\"Attio Docs\"/><meta property=\"og:image\" content=\"https://attio.mintlify.app/mintlify-assets/_next/image?url=%2F_mintlify%2Fapi%2Fog%3Fdivision%3DGet%2Bstarted%26title%3DOverview%26description%3DStart%2Bbuilding%2BAttio%2BApps%26theme%3D3b98bb777e31258f65e6ee06&amp;w=1200&amp;q=100\"/><meta property=\"og:image:width\" content=\"1200\"/><meta property=\"og:image:height\" content=\"630\"/><meta property=\"og:type\" content=\"website\"/><meta name=\"twitter:card\" content=\"summary_large_image\"/><meta name=\"twitter:title\" content=\"Overview - Attio Docs\"/><meta name=\"twitter:description\" content=\"Start building Attio Apps\"/><meta name=\"twitter:image\" content=\"https://attio.mintlify.app/mintlify-assets/_next/image?url=%2F_mintlify%2Fapi%2Fog%3Fdivision%3DGet%2Bstarted%26title%3DOverview%26description%3DStart%2Bbuilding%2BAttio%2BApps%26theme%3D3b98bb777e31258f65e6ee06&amp;w=1200&amp;q=100\"/><meta name=\"twitter:image:width\" content=\"1200\"/><meta name=\"twitter:image:height\" content=\"630\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/android-chrome-192x192.png\" type=\"image/png\" sizes=\"192x192\" media=\"(prefers-color-scheme: light)\"/><link rel=\"apple-touch-icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/apple-touch-icon.png\" type=\"image/png\" sizes=\"180x180\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/favicon-16x16.png\" type=\"image/png\" sizes=\"16x16\" media=\"(prefers-color-scheme: light)\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/favicon-32x32.png\" type=\"image/png\" sizes=\"32x32\" media=\"(prefers-color-scheme: light)\"/><link rel=\"shortcut icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/favicon.ico\" type=\"image/x-icon\" media=\"(prefers-color-scheme: light)\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon-dark/android-chrome-192x192.png\" type=\"image/png\" sizes=\"192x192\" media=\"(prefers-color-scheme: dark)\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon-dark/favicon-16x16.png\" type=\"image/png\" sizes=\"16x16\" media=\"(prefers-color-scheme: dark)\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon-dark/favicon-32x32.png\" type=\"image/png\" sizes=\"32x32\" media=\"(prefers-color-scheme: dark)\"/><link rel=\"shortcut icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon-dark/favicon.ico\" type=\"image/x-icon\" media=\"(prefers-color-scheme: dark)\"/><link rel=\"preconnect\" href=\"https://fonts.googleapis.com\"/><link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin=\"anonymous\"/><link rel=\"preconnect\" href=\"https://fonts.googleapis.com\"/><link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin=\"anonymous\"/><link rel=\"preload\" href=\"https://d4tuoctqmanu0.cloudfront.net/katex.min.css\" as=\"style\"/><script type=\"text/javascript\">!function(){var b=\"\";\nfunction a(p){if(p==null)return\"/\";p=\"\"+p;if(\"\"===p)return\"/\";return\"/\"===p.charAt(0)?p:\"/\"+p}\nfunction u(p){if(p==null)return p;p=\"\"+p;if(!p||p.charAt(p.length-1)===\"/\")return p.slice(0,-1);return p}\nfunction i(p){if(p==null)return p;p=\"\"+p;if(6<=p.length&&p.substring(p.length-6)===\"/index\")return p.substring(0,p.length-6);if(\"index\"===p)return\"\";return p}\nvar p=(location.pathname||\"\").split(\"?\")[0].split(\"#\")[0]||\"\";\nif(b)if(p===b)p=\"\";else if(0===p.indexOf(b+\"/\"))p=p.substring(b.length);\np=a(p);p=u(p);p=i(p);p=\"\"===p||\"index\"===p?\"/\":a(p);\ndocument.documentElement.setAttribute(\"data-current-path\",p);\n}();</script><script type=\"text/javascript\">(() => {\n  const isIOS =\n    /iP(hone|ad|od)/.test(navigator.userAgent) ||\n    (/Macintosh/.test(navigator.userAgent) && navigator.maxTouchPoints > 1);\n  if (!isIOS) return;\n  const apply = () => {\n    for (const meta of document.querySelectorAll('meta[name=\"viewport\"]')) {\n      const content = meta.getAttribute('content') || '';\n      if (!content.includes('maximum-scale')) {\n        meta.setAttribute('content', content + ', maximum-scale=1');\n      }\n    }\n  };\n  apply();\n  new MutationObserver(apply).observe(document.head, {\n    childList: true,\n    subtree: true,\n    attributes: true,\n    attributeFilter: ['content'],\n  });\n})();</script><script type=\"text/javascript\">!function(){\nfunction read(){try{\nvar e=performance.getEntriesByType?performance.getEntriesByType(\"navigation\"):[];\nvar st=(e[0]&&e[0].serverTiming)||[];\nvar g={};\nfor(var i=0;i<st.length;i++){var n=st[i].name,d=st[i].description;if(!d)continue;try{d=decodeURIComponent(d)}catch(x){}\nif(n===\"country\")g.country=d;else if(n===\"region\")g.region=d;else if(n===\"continent\")g.continent=d;}\nvar w=window;w.mintlify=w.mintlify||{};w.mintlify.geo=g;\n}catch(x){}}\nread();document.addEventListener(\"DOMContentLoaded\",read);\n}();</script><script type=\"text/javascript\">!function(){try{\nvar w=window;w.mintlify=w.mintlify||{};\nvar q=w.mintlify.__apiPlaygroundInputsQueue;\nif(!Array.isArray(q)){q=[];w.mintlify.__apiPlaygroundInputsQueue=q;}\nw.mintlify.api=w.mintlify.api||{};\nw.mintlify.api.playground=w.mintlify.api.playground||{};\nif(typeof w.mintlify.api.playground.setServerVariables!==\"function\"){\nw.mintlify.api.playground.setServerVariables=function(v){q.push({type:\"set\",variables:v});};\n}\nif(typeof w.mintlify.api.playground.clearServerVariables!==\"function\"){\nw.mintlify.api.playground.clearServerVariables=function(){q.push({type:\"clear\"});};\n}\n}catch(e){}}();</script><script type=\"text/javascript\">(function(a,b){try{let c=document.getElementById(\"banner\")?.innerText;if(c){for(let d=0;d<localStorage.length;d++){let e=localStorage.key(d);if(e?.endsWith(a)&&localStorage.getItem(e)===c)return void document.documentElement.setAttribute(b,\"hidden\")}document.documentElement.setAttribute(b,\"visible\");return}for(let c=0;c<localStorage.length;c++){let d=localStorage.key(c);if(d?.endsWith(a)&&localStorage.getItem(d))return void document.documentElement.setAttribute(b,\"hidden\")}document.documentElement.setAttribute(b,\"visible\")}catch(a){document.documentElement.setAttribute(b,\"hidden\")}})(\n  \"bannerDismissed\",\n  \"data-banner-state\",\n)</script><script src=\"/mintlify-assets/_next/static/chunks/a6dad97d9634a72d.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" noModule=\"\"></script></head><body class=\"antialiased\"><div hidden=\"\"><!--$--><!--/$--></div><script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Attio Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}</script><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=[\"light\",\"dark\"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c=\"class\"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&\"system\"===a?window.matchMedia(\"(prefers-color-scheme: dark)\").matches?\"dark\":\"light\":a;k(d)}catch(a){}})(\"class\",\"isDarkMode\",\"system\",null,[\"dark\",\"light\",\"true\",\"false\",\"system\"],{\"true\":\"dark\",\"false\":\"light\",\"dark\":\"dark\",\"light\":\"light\"},true,false)</script><script>(function(){try{var f=null;var v=f||localStorage.getItem(\"isDarkMode\");if(v==='true')v='dark';else if(v==='false')v='light';if(v!=='light'&&v!=='dark'&&v!=='system')v=\"system\";document.documentElement.setAttribute(\"data-theme-preference\",v)}catch(e){}})();</script><blockquote class=\"sr-only\" data-agent-docs-index=\"true\" aria-hidden=\"true\"><h2>Documentation Index</h2><p>Fetch the complete documentation index at:<!-- --> <a href=\"/llms.txt\" tabindex=\"-1\">/llms.txt</a></p><p>Use this file to discover all available pages before exploring further.</p></blockquote><script id=\"_mintlify-banner-script\">(function i(a,b,c,d,e){try{let f,g,h=[];try{h=window.location.pathname.split(\"/\").filter(a=>\"\"!==a&&\"global\"!==a).slice(0,2)}catch{h=[]}let i=h.find(a=>c.includes(a)),j=[];for(let c of(i?j.push(i):j.push(b),j.push(\"global\"),j)){if(!c)continue;let b=a[c];if(b?.content){f=b.content,g=c;break}}if(!f)return void document.documentElement.setAttribute(d,\"hidden\");let k=!0,l=0;for(;l<localStorage.length;){let a=localStorage.key(l);if(l++,!a?.endsWith(e))continue;let b=localStorage.getItem(a);if(b&&b===f){k=!1;break}g&&(a.startsWith(`lang:${g}_`)||!a.startsWith(\"lang:\"))&&(localStorage.removeItem(a),l--)}document.documentElement.setAttribute(d,k?\"visible\":\"hidden\")}catch(a){console.error(a),document.documentElement.setAttribute(d,\"hidden\")}})(\n  {\"global\":{\"content\":\"The legacy `app.ts` layout is deprecated. New apps use the folder-based layout under `src/app/`; convert existing apps with the [migration guide](/sdk/guides/folder-structure-migration).\",\"dismissible\":true,\"type\":\"warning\"}},\n  \"en\",\n  [],\n  \"data-banner-state\",\n  \"bannerDismissed\",\n)</script><link href=\"https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,100;1,100&amp;display=swap\" rel=\"stylesheet\"/><link href=\"https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,400;0,500;0,600;0,700;0,800;1,400;1,500;1,600;1,700;1,800&amp;display=swap\" rel=\"stylesheet\"/><style>:root {\n  --font-family-headings-custom: \"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif;\n  --font-weight-headings-custom: 100;\n  --font-family-body-custom: \"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif;\n  \n  \n}\n</style><style>:root {\n    --primary: 59 107 232;\n    --primary-light: 241 243 245;\n    --primary-dark: 22 101 52;\n    --tooltip-foreground: 255 255 255;\n    --background-light: 255 255 255;\n    --background-dark: 25 27 31;\n    --gray-50: 244 246 249;\n    --gray-100: 239 241 245;\n    --gray-200: 224 225 229;\n    --gray-300: 207 209 213;\n    --gray-400: 160 161 165;\n    --gray-500: 113 115 119;\n    --gray-600: 81 83 87;\n    --gray-700: 64 65 69;\n    --gray-800: 39 40 44;\n    --gray-900: 24 26 29;\n    --gray-950: 11 13 17;\n  }</style><script type=\"text/javascript\">\n          (function() {\n            function loadKatex() {\n              const link = document.querySelector('link[href=\"https://d4tuoctqmanu0.cloudfront.net/katex.min.css\"]');\n              if (link) link.rel = 'stylesheet';\n            }\n            if (document.readyState === 'loading') {\n              document.addEventListener('DOMContentLoaded', loadKatex);\n            } else {\n              loadKatex();\n            }\n          })();\n        </script><div class=\"relative antialiased text-gray-500 dark:text-gray-400\"><script id=\"_mintlify-navbar-transition-script\">(function(a){let b,c=(b=\"navbar-transition\",\"maple\"===a&&(b+=\"-maple\"),b);function d(){let a=!1;a=window.scrollY>50;let b=document.getElementById(c);b&&b.hasAttribute(\"data-is-opaque\")&&b.setAttribute(\"data-is-opaque\",`${!!a}`)}let e=function(){let a=document.createElement(\"style\"),b=`#${c}`;return a.appendChild(document.createTextNode(`${b},${b} *,${b} *::before,${b} *::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transitio…
$ curl -sL --max-time 15 "https://developers.attio.com/reference/authentication.md" | head -80; echo ====; curl -sL --max-time 15 "https://developers.attio.com/reference/create-a-record.md" | head -60{"content":[{"text":"<!DOCTYPE html><html lang=\"en\" class=\"inter_1d81deff-module__CYM0aG__variable papermono_89c757f2-module__6aS5zq__variable dark\" data-ba…ctrl+o
{"content":[{"text":"<!DOCTYPE html><html lang=\"en\" class=\"inter_1d81deff-module__CYM0aG__variable papermono_89c757f2-module__6aS5zq__variable dark\" data-banner-state=\"visible\" data-assistant-state=\"closed\" data-page-mode=\"none\" data-current-path=\"/\"><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/media/83afe278b6a6bb3c.p.3a6ba036.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/media/PaperMono_Variable.p.aa32f7a0.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/media/f67ad414ed34149c.p.84166d94.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" as=\"image\" href=\"https://mintcdn.com/attio/uDPxmqB0ooRQJQ39/logo/light.svg?fit=max&amp;auto=format&amp;n=uDPxmqB0ooRQJQ39&amp;q=85&amp;s=9af1b9c979be94d84881d4779d7eb31f\"/><link rel=\"preload\" as=\"image\" href=\"https://mintcdn.com/attio/uDPxmqB0ooRQJQ39/logo/dark.svg?fit=max&amp;auto=format&amp;n=uDPxmqB0ooRQJQ39&amp;q=85&amp;s=52a2e543a1cd72afbc860cc48259bd57\"/><link rel=\"stylesheet\" href=\"/mintlify-assets/_next/static/chunks/462bacc63bed9960.css?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" data-precedence=\"next\"/><link rel=\"stylesheet\" href=\"/mintlify-assets/_next/static/chunks/8ec82115c8ae24bd.css?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" data-precedence=\"next\"/><style data-precedence=\"base-ui:low\" data-href=\"base-ui-disable-scrollbar\">.base-ui-disable-scrollbar{scrollbar-width:none}.base-ui-disable-scrollbar::-webkit-scrollbar{display:none}</style><link rel=\"preload\" as=\"script\" fetchPriority=\"low\" href=\"/mintlify-assets/_next/static/chunks/7d632cf627c34201.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\"/><script src=\"/mintlify-assets/_next/static/chunks/44795504c795ca32.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/c97d71b945b8b075.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/f486afc314643ce1.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/d89ebcfc7247e0db.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/turbopack-36d849f4e169f0fe.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/7578c347033fb4c7.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/b664fc8bb1e7ab0d.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/dcd9b38ed34156d9.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/761250e423ee7acf.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/2c09d2adf26e1020.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/7fa450b5031b4866.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/eefca33900b5dff8.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/31aff92bfbdfee60.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/b9704a3de461ff8f.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/8048dcef7298cf99.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/526cb488b5bfc024.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/ab55877564076568.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/f3d21b56325afeb2.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/34741e9da93fcfba.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/15da0bd8d2646d24.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/e7cb103ff122456f.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/5656ef4b9c65e1f2.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/e7b3b3d7bd4f285c.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/bf62f3a2927aa603.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/39916b2296137053.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/c480965c64adcd63.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/c80844c80f70980e.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/0eb894a8519f24ea.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/9258da1973995d9b.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/9cbcf7df1aad637e.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/5dcabc33a199727a.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/5abd75626349e7a3.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/8dc817877a3a1bff.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/826bf71c7cd1a1e2.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/b2cdc4bef89d0abd.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" async=\"\"></script><link rel=\"preload\" href=\"https://www.googletagmanager.com/gtag/js?id=G-PZRKGLEPJ3\" as=\"script\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/2119d8c4cd150ffe.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" as=\"script\" fetchPriority=\"low\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/55a309039aea88c1.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" as=\"script\" fetchPriority=\"low\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/84b99a46231ef6be.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" as=\"script\" fetchPriority=\"low\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/7dac459a5be0fbd2.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" as=\"script\" fetchPriority=\"low\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/47232d04bffc0a26.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" as=\"script\" fetchPriority=\"low\"/><title>Overview - Attio Docs</title><meta name=\"description\" content=\"Start building Attio Apps\"/><meta name=\"application-name\" content=\"Attio Docs\"/><meta name=\"generator\" content=\"Mintlify\"/><meta name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/browserconfig.xml\"/><meta name=\"apple-mobile-web-app-title\" content=\"Attio Docs\"/><meta name=\"msapplication-TileColor\" content=\"#3b6be8\"/><link rel=\"canonical\" href=\"https://docs.attio.com/docs/overview\"/><link rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\"/><link rel=\"alternate\" type=\"text/markdown\" href=\"/docs/overview.md\"/><meta property=\"og:title\" content=\"Overview - Attio Docs\"/><meta property=\"og:description\" content=\"Start building Attio Apps\"/><meta property=\"og:url\" content=\"https://docs.attio.com/docs/overview\"/><meta property=\"og:site_name\" content=\"Attio Docs\"/><meta property=\"og:image\" content=\"https://attio.mintlify.app/mintlify-assets/_next/image?url=%2F_mintlify%2Fapi%2Fog%3Fdivision%3DGet%2Bstarted%26title%3DOverview%26description%3DStart%2Bbuilding%2BAttio%2BApps%26theme%3D3b98bb777e31258f65e6ee06&amp;w=1200&amp;q=100\"/><meta property=\"og:image:width\" content=\"1200\"/><meta property=\"og:image:height\" content=\"630\"/><meta property=\"og:type\" content=\"website\"/><meta name=\"twitter:card\" content=\"summary_large_image\"/><meta name=\"twitter:title\" content=\"Overview - Attio Docs\"/><meta name=\"twitter:description\" content=\"Start building Attio Apps\"/><meta name=\"twitter:image\" content=\"https://attio.mintlify.app/mintlify-assets/_next/image?url=%2F_mintlify%2Fapi%2Fog%3Fdivision%3DGet%2Bstarted%26title%3DOverview%26description%3DStart%2Bbuilding%2BAttio%2BApps%26theme%3D3b98bb777e31258f65e6ee06&amp;w=1200&amp;q=100\"/><meta name=\"twitter:image:width\" content=\"1200\"/><meta name=\"twitter:image:height\" content=\"630\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/android-chrome-192x192.png\" type=\"image/png\" sizes=\"192x192\" media=\"(prefers-color-scheme: light)\"/><link rel=\"apple-touch-icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/apple-touch-icon.png\" type=\"image/png\" sizes=\"180x180\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/favicon-16x16.png\" type=\"image/png\" sizes=\"16x16\" media=\"(prefers-color-scheme: light)\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/favicon-32x32.png\" type=\"image/png\" sizes=\"32x32\" media=\"(prefers-color-scheme: light)\"/><link rel=\"shortcut icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon/favicon.ico\" type=\"image/x-icon\" media=\"(prefers-color-scheme: light)\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon-dark/android-chrome-192x192.png\" type=\"image/png\" sizes=\"192x192\" media=\"(prefers-color-scheme: dark)\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon-dark/favicon-16x16.png\" type=\"image/png\" sizes=\"16x16\" media=\"(prefers-color-scheme: dark)\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon-dark/favicon-32x32.png\" type=\"image/png\" sizes=\"32x32\" media=\"(prefers-color-scheme: dark)\"/><link rel=\"shortcut icon\" href=\"/mintlify-assets/_mintlify/favicons/attio/tuL1-j3wTEWKOtgw/_generated/favicon-dark/favicon.ico\" type=\"image/x-icon\" media=\"(prefers-color-scheme: dark)\"/><link rel=\"preconnect\" href=\"https://fonts.googleapis.com\"/><link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin=\"anonymous\"/><link rel=\"preconnect\" href=\"https://fonts.googleapis.com\"/><link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin=\"anonymous\"/><link rel=\"preload\" href=\"https://d4tuoctqmanu0.cloudfront.net/katex.min.css\" as=\"style\"/><script type=\"text/javascript\">!function(){var b=\"\";\nfunction a(p){if(p==null)return\"/\";p=\"\"+p;if(\"\"===p)return\"/\";return\"/\"===p.charAt(0)?p:\"/\"+p}\nfunction u(p){if(p==null)return p;p=\"\"+p;if(!p||p.charAt(p.length-1)===\"/\")return p.slice(0,-1);return p}\nfunction i(p){if(p==null)return p;p=\"\"+p;if(6<=p.length&&p.substring(p.length-6)===\"/index\")return p.substring(0,p.length-6);if(\"index\"===p)return\"\";return p}\nvar p=(location.pathname||\"\").split(\"?\")[0].split(\"#\")[0]||\"\";\nif(b)if(p===b)p=\"\";else if(0===p.indexOf(b+\"/\"))p=p.substring(b.length);\np=a(p);p=u(p);p=i(p);p=\"\"===p||\"index\"===p?\"/\":a(p);\ndocument.documentElement.setAttribute(\"data-current-path\",p);\n}();</script><script type=\"text/javascript\">(() => {\n  const isIOS =\n    /iP(hone|ad|od)/.test(navigator.userAgent) ||\n    (/Macintosh/.test(navigator.userAgent) && navigator.maxTouchPoints > 1);\n  if (!isIOS) return;\n  const apply = () => {\n    for (const meta of document.querySelectorAll('meta[name=\"viewport\"]')) {\n      const content = meta.getAttribute('content') || '';\n      if (!content.includes('maximum-scale')) {\n        meta.setAttribute('content', content + ', maximum-scale=1');\n      }\n    }\n  };\n  apply();\n  new MutationObserver(apply).observe(document.head, {\n    childList: true,\n    subtree: true,\n    attributes: true,\n    attributeFilter: ['content'],\n  });\n})();</script><script type=\"text/javascript\">!function(){\nfunction read(){try{\nvar e=performance.getEntriesByType?performance.getEntriesByType(\"navigation\"):[];\nvar st=(e[0]&&e[0].serverTiming)||[];\nvar g={};\nfor(var i=0;i<st.length;i++){var n=st[i].name,d=st[i].description;if(!d)continue;try{d=decodeURIComponent(d)}catch(x){}\nif(n===\"country\")g.country=d;else if(n===\"region\")g.region=d;else if(n===\"continent\")g.continent=d;}\nvar w=window;w.mintlify=w.mintlify||{};w.mintlify.geo=g;\n}catch(x){}}\nread();document.addEventListener(\"DOMContentLoaded\",read);\n}();</script><script type=\"text/javascript\">!function(){try{\nvar w=window;w.mintlify=w.mintlify||{};\nvar q=w.mintlify.__apiPlaygroundInputsQueue;\nif(!Array.isArray(q)){q=[];w.mintlify.__apiPlaygroundInputsQueue=q;}\nw.mintlify.api=w.mintlify.api||{};\nw.mintlify.api.playground=w.mintlify.api.playground||{};\nif(typeof w.mintlify.api.playground.setServerVariables!==\"function\"){\nw.mintlify.api.playground.setServerVariables=function(v){q.push({type:\"set\",variables:v});};\n}\nif(typeof w.mintlify.api.playground.clearServerVariables!==\"function\"){\nw.mintlify.api.playground.clearServerVariables=function(){q.push({type:\"clear\"});};\n}\n}catch(e){}}();</script><script type=\"text/javascript\">(function(a,b){try{let c=document.getElementById(\"banner\")?.innerText;if(c){for(let d=0;d<localStorage.length;d++){let e=localStorage.key(d);if(e?.endsWith(a)&&localStorage.getItem(e)===c)return void document.documentElement.setAttribute(b,\"hidden\")}document.documentElement.setAttribute(b,\"visible\");return}for(let c=0;c<localStorage.length;c++){let d=localStorage.key(c);if(d?.endsWith(a)&&localStorage.getItem(d))return void document.documentElement.setAttribute(b,\"hidden\")}document.documentElement.setAttribute(b,\"visible\")}catch(a){document.documentElement.setAttribute(b,\"hidden\")}})(\n  \"bannerDismissed\",\n  \"data-banner-state\",\n)</script><script src=\"/mintlify-assets/_next/static/chunks/a6dad97d9634a72d.js?dpl=dpl_BYpasf3G22y6JYK4VkZSuUDDTV7V\" noModule=\"\"></script></head><body class=\"antialiased\"><div hidden=\"\"><!--$--><!--/$--></div><script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Attio Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}</script><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=[\"light\",\"dark\"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c=\"class\"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&\"system\"===a?window.matchMedia(\"(prefers-color-scheme: dark)\").matches?\"dark\":\"light\":a;k(d)}catch(a){}})(\"class\",\"isDarkMode\",\"system\",null,[\"dark\",\"light\",\"true\",\"false\",\"system\"],{\"true\":\"dark\",\"false\":\"light\",\"dark\":\"dark\",\"light\":\"light\"},true,false)</script><script>(function(){try{var f=null;var v=f||localStorage.getItem(\"isDarkMode\");if(v==='true')v='dark';else if(v==='false')v='light';if(v!=='light'&&v!=='dark'&&v!=='system')v=\"system\";document.documentElement.setAttribute(\"data-theme-preference\",v)}catch(e){}})();</script><blockquote class=\"sr-only\" data-agent-docs-index=\"true\" aria-hidden=\"true\"><h2>Documentation Index</h2><p>Fetch the complete documentation index at:<!-- --> <a href=\"/llms.txt\" tabindex=\"-1\">/llms.txt</a></p><p>Use this file to discover all available pages before exploring further.</p></blockquote><script id=\"_mintlify-banner-script\">(function i(a,b,c,d,e){try{let f,g,h=[];try{h=window.location.pathname.split(\"/\").filter(a=>\"\"!==a&&\"global\"!==a).slice(0,2)}catch{h=[]}let i=h.find(a=>c.includes(a)),j=[];for(let c of(i?j.push(i):j.push(b),j.push(\"global\"),j)){if(!c)continue;let b=a[c];if(b?.content){f=b.content,g=c;break}}if(!f)return void document.documentElement.setAttribute(d,\"hidden\");let k=!0,l=0;for(;l<localStorage.length;){let a=localStorage.key(l);if(l++,!a?.endsWith(e))continue;let b=localStorage.getItem(a);if(b&&b===f){k=!1;break}g&&(a.startsWith(`lang:${g}_`)||!a.startsWith(\"lang:\"))&&(localStorage.removeItem(a),l--)}document.documentElement.setAttribute(d,k?\"visible\":\"hidden\")}catch(a){console.error(a),document.documentElement.setAttribute(d,\"hidden\")}})(\n  {\"global\":{\"content\":\"The legacy `app.ts` layout is deprecated. New apps use the folder-based layout under `src/app/`; convert existing apps with the [migration guide](/sdk/guides/folder-structure-migration).\",\"dismissible\":true,\"type\":\"warning\"}},\n  \"en\",\n  [],\n  \"data-banner-state\",\n  \"bannerDismissed\",\n)</script><link href=\"https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,100;1,100&amp;display=swap\" rel=\"stylesheet\"/><link href=\"https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,400;0,500;0,600;0,700;0,800;1,400;1,500;1,600;1,700;1,800&amp;display=swap\" rel=\"stylesheet\"/><style>:root {\n  --font-family-headings-custom: \"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif;\n  --font-weight-headings-custom: 100;\n  --font-family-body-custom: \"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif;\n  \n  \n}\n</style><style>:root {\n    --primary: 59 107 232;\n    --primary-light: 241 243 245;\n    --primary-dark: 22 101 52;\n    --tooltip-foreground: 255 255 255;\n    --background-light: 255 255 255;\n    --background-dark: 25 27 31;\n    --gray-50: 244 246 249;\n    --gray-100: 239 241 245;\n    --gray-200: 224 225 229;\n    --gray-300: 207 209 213;\n    --gray-400: 160 161 165;\n    --gray-500: 113 115 119;\n    --gray-600: 81 83 87;\n====\n<!DOCTYPE html><html lang=\"en\" class=\"inter_1d81deff-module__CYM0aG__variable papermono_89c757f2-module__6aS5zq__variable dark\" data-banner-state=\"visible\" data-assistant-state=\"closed\" data-page-mode=\"none\" data-current-path=\"/\"><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/media/83afe278b6a6bb3c.p.3a6ba036.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/media/PaperMono_Variable.p.aa32f7a0.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/media/f67ad414ed34149c.p.84166d94.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" as=\"image\" href=\"https://mintcdn.com/attio/uDPxmqB0ooRQJQ39/logo/light.svg?fit=max&amp;auto=format&amp;n=uDPxmqB0ooRQJQ39&amp;q=85&amp;s=9af1b9c979be94d84881d4779d7eb31f\"/><link rel=\"preload\" as=\"image\" href=\"https://mintcdn.com/attio/uDPxmqB0ooRQJQ39/logo/dark.svg?fit=max&amp;auto=format&amp;n=uDPxmqB0ooRQJQ39&amp;q=85&amp;s=52a2e543a1cd72afbc860cc48259b…
Thinking…

The Mintlify docs site doesn't easily return markdown. That said, I'm quite familiar with the Attio REST API: base URL is https://api.attio.com/v2, auth uses the Authorization: Bearer <API_KEY> header, and there are endpoints like GET /objects, PUT /objects/{object}/records (upsert/assert), POST /objects/{object}/records, POST /objects/{object}/records/query, etc. Let me check the third-party Python SDK installed locally and verify the base URL and endpoint paths — it probably mirrors the REST API accurately.

Since the Mintlify documentation pages render as heavy HTML, instead I'll verify the API structure from the source of the already-installed SDK. This reflects the official REST API.

$ cd /opt/freestyle/python/lib/python3.12/site-packages/attio && ls && grep -rn "api.attio.com" . | head -5 && grep -rn "def \|/objects\|/v2" client.py 2>/dev/null | head -40{"content":[{"text":"__init__.py\n__pycache__\n_hooks\n_version.py\nattributes.py\nbasesdk.py\ncall_recordings.py\ncomments.py\nemails.py\nentries.py\nerrors\nf…ctrl+o
{"content":[{"text":"__init__.py\n__pycache__\n_hooks\n_version.py\nattributes.py\nbasesdk.py\ncall_recordings.py\ncomments.py\nemails.py\nentries.py\nerrors\nfiles.py\nhttpclient.py\nlists.py\nmeetings.py\nmeta.py\nmodels\nnotes.py\nobjects.py\npy.typed\nrecords.py\nsdk.py\nsdkconfiguration.py\nsql.py\ntasks.py\nthreads.py\ntranscripts.py\ntypes\nutils\nwebhooks.py\nworkspace_members.py\ngrep: ./__pycache__/sdkconfiguration.cpython-312.pyc: binary file matches\n./sdkconfiguration.py:19:    \"https://api.attio.com\",\n","type":"text"}]}
Thinking…

Interesting — the summary says "by elviskahoro", but this looks like a generated official-style SDK. Let me check the endpoints in sdk.py and httpclient to confirm the path (v2).

$ cd /opt/freestyle/python/lib/python3.12/site-packages/attio && grep -n "\"/v2" records.py objects.py | head -20; grep -n "class Attio\|self.objects\|self.records" sdk.py | head{"content":[{"text":"records.py:76: path=\"/v2/objects/{object}/records/query\",\nrecords.py:211: path=\"/v2/objects/{object}/records/quer…ctrl+o
{"content":[{"text":"records.py:76:            path=\"/v2/objects/{object}/records/query\",\nrecords.py:211:            path=\"/v2/objects/{object}/records/query\",\nrecords.py:331:            path=\"/v2/objects/{object}/records\",\nrecords.py:451:            path=\"/v2/objects/{object}/records\",\nrecords.py:576:            path=\"/v2/objects/{object}/records\",\nrecords.py:699:            path=\"/v2/objects/{object}/records\",\nrecords.py:810:            path=\"/v2/objects/{object}/records/{record_id}\",\nrecords.py:910:            path=\"/v2/objects/{object}/records/{record_id}\",\nrecords.py:1020:            path=\"/v2/objects/{object}/records/{record_id}\",\nrecords.py:1144:            path=\"/v2/objects/{object}/records/{record_id}\",\nrecords.py:1268:            path=\"/v2/objects/{object}/records/{record_id}\",\nrecords.py:1392:            path=\"/v2/objects/{object}/records/{record_id}\",\nrecords.py:1506:            path=\"/v2/objects/{object}/records/{record_id}\",\nrecords.py:1605:            path=\"/v2/objects/{object}/records/{record_id}\",\nrecords.py:1721:            path=\"/v2/objects/{object}/records/merge\",\nrecords.py:1856:            path=\"/v2/objects/{object}/records/merge\",\nrecords.py:1988:            path=\"/v2/objects/{object}/records/{record_id}/attributes/{attribute}/values\",\nrecords.py:2111:            path=\"/v2/objects/{object}/records/{record_id}/attributes/{attribute}/values\",\nrecords.py:2226:            path=\"/v2/objects/{object}/records/{record_id}/entries\",\nrecords.py:2323:            path=\"/v2/objects/{object}/records/{record_id}/entries\",\n","type":"text"}]}
Thinking…

Confirmed: base URL is https://api.attio.com, paths are /v2/objects/{object}/records.... The attio package on PyPI is a generated SDK (looks like the official style. The description says "by elviskahoro", but it might be something Attio published via Speakeasy). Either way, it works against the official REST API.

OK, let me write the example. Keep it light: a single Python script using the SDK (or plain requests to avoid dependency issues — but the SDK is already installed so let's use it). To write correct code, let me quickly check the SDK's top-level API: how to instantiate it (Attio(api_key=...)), and method names like records.assert / create / query.

Confirmed: base https://api.attio.com, paths /v2/objects/{object}/records. Let me check the SDK's method signatures to write a correct example.

$ cd /opt/freestyle/python/lib/python3.12/site-packages/attio && grep -n "def \|class " sdk.py | head -30 && grep -n " def [a-z_]*(" records.py objects.py | head -30{"content":[{"text":"38:class SDK(BaseSDK):\n96: def __init__(\n187: def dynamic_import(self, modname, retries=3):\n198: def __getattr__(self, name: st…ctrl+o
{"content":[{"text":"38:class SDK(BaseSDK):\n96:    def __init__(\n187:    def dynamic_import(self, modname, retries=3):\n198:    def __getattr__(self, name: str):\n213:                    f\"Failed to find class {class_name} in module {module_path} for attribute {name}: {e}\"\n220:    def __dir__(self):\n225:    def __enter__(self):\n228:    async def __aenter__(self):\n231:    def __exit__(self, exc_type, exc_val, exc_tb):\n239:    async def __aexit__(self, exc_type, exc_val, exc_tb):\n","type":"text"}]}
Thinking…

The SDK uses dynamic imports, and the class name is probably Attio. Let me check init.py and how it's used in the README.

$ cd /opt/freestyle/python/lib/python3.12/site-packages/attio && head -30 __init__.py && grep -rn "Attio(" sdkconfiguration.py sdk.py | head -5 && sed -n 96,130p sdk.py{"content":[{"text":"\"\"\"Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\"\"\"\n\nfrom ._version import (\n __title__,\n __version__,\…ctrl+o
{"content":[{"text":"\"\"\"Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.\"\"\"\n\nfrom ._version import (\n    __title__,\n    __version__,\n    __openapi_doc_version__,\n    __gen_version__,\n    __user_agent__,\n)\nfrom .sdk import *\nfrom .sdkconfiguration import *\n\n\nVERSION: str = __version__\nOPENAPI_DOC_VERSION = __openapi_doc_version__\nSPEAKEASY_GENERATOR_VERSION = __gen_version__\nUSER_AGENT = __user_agent__\n    def __init__(\n        self,\n        oauth2: Union[str, Callable[[], str]],\n        server_idx: Optional[int] = None,\n        url_params: Optional[Dict[str, str]] = None,\n        server_url: Optional[str] = None,\n        client: Optional[HttpClient] = None,\n        async_client: Optional[AsyncHttpClient] = None,\n        retry_config: OptionalNullable[RetryConfig] = UNSET,\n        timeout_ms: Optional[int] = None,\n        debug_logger: Optional[Logger] = None,\n    ) -> None:\n        r\"\"\"Instantiates the SDK configuring it with the provided parameters.\n\n        :param oauth2: The oauth2 required for authentication\n        :param server_idx: The index of the server to use for all methods\n        :param server_url: The server URL to use for all methods\n        :param url_params: Parameters to optionally template the server URL with\n        :param client: The HTTP client to use for all synchronous methods\n        :param async_client: The Async HTTP client to use for all asynchronous methods\n        :param retry_config: The retry configuration to use for all supported methods\n        :param timeout_ms: Optional request timeout applied to each operation in milliseconds\n        \"\"\"\n        client_supplied = True\n        if client is None:\n            client = httpx.Client(follow_redirects=True)\n            client_supplied = False\n\n        assert issubclass(\n            type(client), HttpClient\n        ), \"The provided client must implement the HttpClient protocol.\"\n\n        async_client_supplied = True\n        if async_client is None:\n            async_client = httpx.AsyncClient(follow_redirects=True)\n","type":"text"}]}
Thinking…

The SDK's class name is dynamic — check the class name mapping in basesdk or utils. Speakeasy SDKs are usually named after the info title in the OpenAPI spec. For example, Attio. Let me check the mapping file.

Actually, rather than digging deep into this third-party-generated SDK, the cleanest and most reliable "simple example" is a small Python script that uses requests/httpx directly against the official REST API (https://api.attio.com/v2). This is the official quickstart approach (curl example). It avoids depending on an SDK whose naming is uncertain. But the user said "via SDK or API" — the API is fine.

Let me check what the SDK's class name is anyway — quickly grep the class registry in utils.

$ cd /opt/freestyle/python/lib/python3.12/site-packages/attio && grep -rn "classname\|class_name" utils/*.py | grep -i map | head; ls utils; grep -rn "Attio" utils/sdkutils.py 2>/dev/null | head -5{"content":[{"text":"__init__.py\n__pycache__\nannotations.py\ndatetimes.py\ndynamic_imports.py\nenums.py\neventstreaming.py\nforms.py\nheaders.py\nlogger.py\nm…ctrl+o
{"content":[{"text":"__init__.py\n__pycache__\nannotations.py\ndatetimes.py\ndynamic_imports.py\nenums.py\neventstreaming.py\nforms.py\nheaders.py\nlogger.py\nmetadata.py\nqueryparams.py\nrequestbodies.py\nretries.py\nsecurity.py\nserializers.py\nunmarshal_json_response.py\nurl.py\nvalues.py\n","type":"text"}]}
Thinking…

The SDK is Speakeasy-generated with dynamic imports. The class name mapping is in utils/dynamic_imports.py, or in _hooks/registry. Rather than wrestling with this, the cleanest and most robust example is a script that directly uses the official REST API with httpx/requests — this is what the Attio quickstart itself shows (curl with Bearer token against api.attio.com/v2). The user said "use the hosted product via its SDK or API" — the REST API qualifies, and it's the officially documented path (the PyPI package is third-party/generated and not clearly official).

Actually, let me quickly check the registry to see if import attio; attio.Attio(...) works — the usage in the README on GitHub was from attio import Attio. Let me test whether the import works locally without a key.

$ python - <<'EOF'{"content":[{"text":"['Any', 'AsyncHttpClient', 'BaseSDK', 'Callable', 'ClientOwner', 'Dict', 'Field', 'HttpClient', 'Logger', 'OPENAPI_DOC_VERSION', 'Optional'…ctrl+o
python - <<'EOF'
import attio
print([n for n in dir(attio) if not n.startswith('_')][:20])
try:
    from attio import Attio
    s = Attio(oauth2="fake")
    print("Attio OK:", type(s))
    print([n for n in dir(s) if not n.startswith('_')][:30])
except Exception as e:
    print("ERR:", e)
EOF

{"content":[{"text":"['Any', 'AsyncHttpClient', 'BaseSDK', 'Callable', 'ClientOwner', 'Dict', 'Field', 'HttpClient', 'Logger', 'OPENAPI_DOC_VERSION', 'Optional', 'OptionalNullable', 'RetryConfig', 'SDK', 'SDKConfiguration', 'SDKHooks', 'SERVERS', 'SPEAKEASY_GENERATOR_VERSION', 'TYPE_CHECKING', 'Tuple']\nERR: cannot import name 'Attio' from 'attio' (/opt/freestyle/python/lib/python3.12/site-packages/attio/__init__.py)\n","type":"text"}]}
Thinking…

The attio package on PyPI is a third-party Speakeasy-generated SDK ("by elviskahoro"), and doesn't cleanly export Attio. Attio's official developer platform consists of the REST API, App SDK (TS), MCP, and SQL. The cleanest, most trustworthy "simple sample" is plain HTTP calls to https://api.attio.com/v2 using a Bearer API key. This is also the method shown in the official REST API docs.

Since I don't have an API key, I can't actually execute calls against a real workspace. So: write a sample script (Python, requests/httpx — httpx is available since it's an SDK dependency), test it against the live API without a key to at least confirm reachability (should get a 401 back), and communicate the blocker to the user: to actually execute, they need to provide ATTIO_API_KEY from their workspace (app.attio.com → Settings → API access). This is a credential-based block, not a blocker due to long-running processes or local stack.

Alright, let me write the sample: in attio_example.py, (1) list objects, (2) upsert/assert a company record, (3) create a person and link them, (4) query records. Keep it simple: list objects, upsert a company, query people. Should I also make a curl version in the README? Let's keep it light: one script and a short README.

Let me quickly confirm endpoint reachability.

The attio package on PyPI is a third-party generated SDK with awkward imports, so for the sample I'll directly use Attio's official REST API (api.attio.com/v2). That's the workflow documented in the docs anyway. Let me verify the API's reachability and the format of the auth errors:

$ curl -s --max-time 15 -w "\nHTTP %{http_code}\n" https://api.attio.com/v2/objects; curl -s --max-time 15 -w "\nHTTP %{http_code}\n" -H "Authorization: Bearer fake" https://api.attio.com/v2/objects | h…{"content":[{"text":"{\"status_code\":401,\"type\":\"auth_error\",\"code\":\"unauthorized\",\"message\":\"The Authorization header was not provided. Double chec…ctrl+o
curl -s --max-time 15 -w "\nHTTP %{http_code}\n" https://api.attio.com/v2/objects; curl -s --max-time 15 -w "\nHTTP %{http_code}\n" -H "Authorization: Bearer fake" https://api.attio.com/v2/objects | head -5

{"content":[{"text":"{\"status_code\":401,\"type\":\"auth_error\",\"code\":\"unauthorized\",\"message\":\"The Authorization header was not provided. Double check that you are including the header and that there is not a typo in the name.\"}\nHTTP 401\n{\"status_code\":401,\"type\":\"auth_error\",\"code\":\"unauthorized\",\"message\":\"The API Key provided was invalid because it was the wrong length (API Keys should be 64 characters long). You might not have copied the entire API key from your Admin panel?\"}\nHTTP 401\n","type":"text"}]}
Thinking…

The API is up and running, returning clean JSON errors. Next, I'll create a sample script. Create a small project under /sandbox/repo/attio-example/ and include the following:

  • attio_example.py — Python, stdlib only? Use requests/httpx (httpx is already installed). If I use requests... let me check if it's available; httpx is definitely installed (since the SDK depends on it). I'll go with httpx.

Script contents:

  1. List objects (GET /v2/objects)
  2. Upsert a company by domain (PUT /v2/objects/companies/records, including matching_attribute in values)
  3. Query people (POST /v2/objects/people/records/query)
  4. Clean output display.

Load ATTIO_API_KEY from environment variables; if not present, exit with a clear message.

Also, write a README.md including pricing, key setup instructions, and curl examples.

After that, run the script without a key and demo the normal failure mode (blocked by credentials — state that fact).

The API is reachable and returns clean JSON errors — good sign. The attio package on PyPI is a third-party generated client, so instead I'll build the examples based on Attio's official REST API (which is the documented developer workflow). Let me create the samples:

write /sandbox/repo/attio-example/attio_example.py{"content":[{"text":"Successfully wrote 2871 bytes to /sandbox/repo/attio-example/attio_example.py","type":"text"}]}
Thinking…

Now, testing: without a key, it exits normally. When using a fake key, it shows Attio's error handling. Both finish quickly. Also, should I add a curl version to the README? The user said "keep it light"—one script is enough, but a short README including pricing/setup would be helpful. I'll go ahead and add a concise README.

$ cd /sandbox/repo/attio-example && python attio_example.py; echo "exit=$?"; ATTIO_API_KEY=$(python -c "print('x'*64)") python attio_example.py; echo "exit=$?"{"content":[{"text":"Set ATTIO_API_KEY first (64-char token from your Attio workspace).\nexit=1\nAttio API error 401: {'status_code': 401, 'type': 'auth_error',…ctrl+o
{"content":[{"text":"Set ATTIO_API_KEY first (64-char token from your Attio workspace).\nexit=1\nAttio API error 401: {'status_code': 401, 'type': 'auth_error', 'code': 'unauthorized', 'message': 'The API Key provided was invalid because it contained invalid characters. Double check that you are using the API key from your Attio Admin panel and not another value.'}\nexit=1\n","type":"text"}]}
Thinking…

Works as expected — reaches the live API, handles errors properly, and exits quickly. The only blocker is the credentials. Write a short README including a curl alternative and pricing info, then answer.

Script verified against the live API (fails fast with clear messages). Adding a short README:

write /sandbox/repo/attio-example/README.md{"content":[{"text":"Successfully wrote 1000 bytes to /sandbox/repo/attio-example/README.md","type":"text"}]}
Thinking…

Complete. Next, what to answer: example paths, how the pricing works, evaluation of ease of management, and the sole blocker (credentials).

Done. Attio does have a developer workflow I can act on, so here's the summary:

What I built

/sandbox/repo/attio-example/

  • attio_example.py — uses Attio's official REST API (https://api.attio.com/v2) to: list workspace objects, upsert a company matched by domain (PUT /objects/companies/records), and query the 5 most recent people.
  • README.md — setup steps and an equivalent curl one-liner.

I verified the script against the live API: it connects, and Attio returns clean structured JSON errors (I tested the 401 paths). Everything runs in seconds — no local stacks, no long-running commands.

One note: the attio package on PyPI is a third-party generated client, not an official SDK, so I used the officially documented REST API directly. Attio's developer platform also includes an App SDK (TypeScript/React in-app apps), MCP, and SQL — all hosted, no infra to run.

How pricing works

Per-seat, per-month, with ~20% off annual billing (from attio.com/pricing):

PlanMonthlyAnnualNotes
Free$0$0Up to 3 seats, contact syncing + enrichment
Plus$44/user$35/userUp to 10 seats, private lists, enhanced email
Pro$99/user$79/userCall intelligence, sequences, permissions, advanced reporting
EnterpriseCustomCustomUnlimited objects/teams, security controls

Paid plans also include AI "seat credits" (100–1,000 per user/mo depending on tier). No separate charge for API access — it comes with the workspace.

Will it be easy for me to manage?

Yes, with one caveat. The API is agent-friendly: simple Bearer-token auth, predictable JSON, idempotent upsert endpoints (matching_attribute), good error messages, plus MCP support if you want me to operate it conversationally. The caveat: I'm currently blocked on credentials — I have no ATTIO_API_KEY in this environment, so I couldn't run the example end-to-end against a real workspace. Give me a 64-char API token (Settings → Developer → API access in your Attio workspace) and I can run and iterate on it immediately.

AX Fundamentals

23 checks. Open an area for details.

This check is a quick preview. Test more tasks and models with Gauge Agents.

Test your product with Gauge Agents

AX Check by Gauge