# Capa > Capa is a hybrid headless CMS: editors write and publish in the admin, and sites, apps and agents read the content through a cached, dated API. Every docs page below is also served as Markdown: add `.md` to its URL (for example https://capacms.com/docs/api/entries.md). All of them in one file: https://capacms.com/llms-full.txt ## Site - [Home](https://capacms.com/): what Capa is - [Platform overview](https://capacms.com/product): every product in one place - [Developers](https://capacms.com/developers): APIs, the SDK and agents - [Pricing](https://capacms.com/pricing): plans, priced per project - [Changelog](https://capacms.com/changelog): what shipped ## Docs - [Capa documentation](https://capacms.com/docs): Guides and reference for building with Capa, editing in it, and running it for clients. - Get started - [What is Capa](https://capacms.com/docs/get-started/what-is-capa): Projects, models, entries, drafts, keys and the CDN, on one page. - [Quickstart](https://capacms.com/docs/get-started/quickstart): Create a model, publish an entry, make a key and read it with curl. About five minutes. - [Next.js quickstart](https://capacms.com/docs/get-started/nextjs): Build a Next.js site that lists and shows your Capa entries with the SDK. - [Your first day](https://capacms.com/docs/get-started/editors): For editors. Find an entry, change it, and publish or schedule it. - Concepts - [Projects](https://capacms.com/docs/concepts/projects): A project is one site's own space, with its own content, keys, members, plan and URL. - [Content model](https://capacms.com/docs/concepts/content-model): Models, namespaces, field types and relations, and how each one comes back from the API. - [Drafts and publishing](https://capacms.com/docs/concepts/drafts-and-publishing): What a draft is, what publishing changes, and what each kind of key sees. - [Keys](https://capacms.com/docs/concepts/keys): The two key families, production and draft keys, and which key to give each site, script and browser. - [Caching](https://capacms.com/docs/concepts/caching): How published reads stay in the CDN cache, what a publish purges, and what your own site may still hold. - [Versions](https://capacms.com/docs/concepts/versions): How Capa dates the API, how to pin a version, and how to hear about the next one. - Editor guide - [Navigating the admin](https://capacms.com/docs/editor/navigating): The sidebar, workspaces and folders, search, notifications and keyboard shortcuts. - [Entries](https://capacms.com/docs/editor/entries): Find, create, edit, duplicate and delete entries, and work with linked entries and images. - [Publishing](https://capacms.com/docs/editor/publishing): Publish now, schedule, unpublish, publish many entries at once, and see what is waiting to go live. - [Media](https://capacms.com/docs/editor/media): Upload images, video and documents, write alt text, replace and delete files, and how images are resized for your site. - Content modeling - [Build a model](https://capacms.com/docs/modeling/build-a-model): Create a model, add fields and relations, and set it up before your team starts writing. - [Layout builder](https://capacms.com/docs/modeling/layout-builder): Design the entry editor your team uses, with cards, two columns, field widths and related entries edited in place. - [Change a field's type](https://capacms.com/docs/modeling/change-field-type): Convert a field on a model that already has entries, see what will convert before anything changes, and follow the change as it runs. - Developer guides - [Next.js](https://capacms.com/docs/guides/nextjs): Keep a Next.js site fresh after every publish, tag reads by model, and show drafts to editors. - [Astro](https://capacms.com/docs/guides/astro): Build an Astro site from Capa entries with plain fetch, at build time or on every request. - [Any language with fetch](https://capacms.com/docs/guides/fetch): Read Capa from any stack with plain HTTP. curl first, then JavaScript and Python, with paging and error handling. - [TypeScript](https://capacms.com/docs/guides/typescript): Generate types from your models with capa-codegen, then get reads typed from exactly what they select. - [GraphQL clients](https://capacms.com/docs/guides/graphql-clients): Use Apollo Client, urql or plain fetch with Capa's GraphQL endpoint, and keep reads cacheable with GET and persisted queries. - [Images](https://capacms.com/docs/guides/images): Resize, crop, convert and blur any image in your media library by adding parameters to its URL. - [SEO and AI exports](https://capacms.com/docs/guides/seo): Get schema.org JSON-LD, a Markdown copy of an entry, and a plain-text bundle of your content for search and retrieval. - API reference - [API reference](https://capacms.com/docs/api): The dated /api/ read API: what exists today, how a request and a response are shaped, and what an error looks like. - [Keys and scopes](https://capacms.com/docs/api/authentication): The two key families, minting a scoped key, every scope, presets, rotation, expiry and allowed origins. - [Entries](https://capacms.com/docs/api/entries): The whole read contract: the entry shape, select, filters, sorting, cursor paging, caching and every error. - [GraphQL](https://capacms.com/docs/api/graphql): The same reads as a typed GraphQL schema: names, filters, pagination, limits, cost and persisted queries. - [GraphQL Explorer](https://capacms.com/docs/api/graphql-explorer): Write and run GraphQL queries in the Capa admin, as one of your API keys, and copy them into your site. - [Versions](https://capacms.com/docs/api/versions): How dated versions work, how to pin a key to one, and how to read what changed. - [Limits](https://capacms.com/docs/api/limits): Every size, cost, rate and concurrency limit on /api/, REST and GraphQL, in one place. - [Management API](https://capacms.com/docs/api/management): The routes behind the Capa admin, for scripts: scheduled publishing, workspaces, entry layouts, field changes, API keys and projects. - Errors - [Errors](https://capacms.com/docs/errors): The /api/ error envelope and every code it can carry, with what each one means and what to do. - [persisted_query_not_found](https://capacms.com/docs/errors/persisted_query_not_found): 200 invalid_request. No document is stored for that hash. - [invalid_version](https://capacms.com/docs/errors/invalid_version): 400 invalid_request. Capa-Version names a date Capa does not serve. - [unknown_field](https://capacms.com/docs/errors/unknown_field): 400 invalid_request. A select, filter or sort names a field the model does not have. - [invalid_filter_value](https://capacms.com/docs/errors/invalid_filter_value): 400 invalid_request. A filter value does not fit the field's type, for example text for a number or a non-ISO date. - [invalid_operator](https://capacms.com/docs/errors/invalid_operator): 400 invalid_request. The filter or sort uses an operator this field type does not support. - [invalid_cursor](https://capacms.com/docs/errors/invalid_cursor): 400 invalid_request. The after or before cursor is malformed, was minted for another sort, or belongs to another parent entry. - [invalid_select](https://capacms.com/docs/errors/invalid_select): 400 invalid_request. The selection cannot be planned, for example a relation modifier where it does not apply. - [invalid_parameter](https://capacms.com/docs/errors/invalid_parameter): 400 invalid_request. A request parameter is missing or out of range: first outside 1 to 200, more than 3 sort values, a non-UUID id, bad JSON in variables. - [query_too_complex](https://capacms.com/docs/errors/query_too_complex): 400 invalid_request. The query is over a budget, and the message says which, what it measured and the limit. - [count_unavailable](https://capacms.com/docs/errors/count_unavailable): 400 invalid_request. totalCount could not be computed cheaply for this filter (a relation filter matching over 50,000 entries). - [graphql_parse_failed](https://capacms.com/docs/errors/graphql_parse_failed): 400 invalid_request. The GraphQL document has a syntax error. - [graphql_validation_failed](https://capacms.com/docs/errors/graphql_validation_failed): 400 invalid_request. The document parses but asks for something the key's schema does not have: a field, an argument, a type or a missing variable. - [persisted_query_hash_mismatch](https://capacms.com/docs/errors/persisted_query_hash_mismatch): 400 invalid_request. The sha256 sent does not match the query text sent. - [missing_key](https://capacms.com/docs/errors/missing_key): 401 authentication. The request carried no x-api-key header. - [invalid_key](https://capacms.com/docs/errors/invalid_key): 401 authentication. The key is unknown, revoked or expired. - [preview_token_invalid](https://capacms.com/docs/errors/preview_token_invalid): 401 authentication. The preview token is forged, mangled or for another project. - [preview_token_expired](https://capacms.com/docs/errors/preview_token_expired): 401 authentication. The preview token was real but has expired. - [subscription_required](https://capacms.com/docs/errors/subscription_required): 402 payment. The project's plan does not include API access right now. - [scope_missing](https://capacms.com/docs/errors/scope_missing): 403 permission. The key is valid but lacks the scope this route needs. - [origin_refused](https://capacms.com/docs/errors/origin_refused): 403 permission. The key is restricted to other origins than the one this request came from. - [edge_only](https://capacms.com/docs/errors/edge_only): 403 permission. The request reached the origin directly. - [contract_not_found](https://capacms.com/docs/errors/contract_not_found): 404 not_found. Capa-Contract names a contract this project does not have. - [model_not_found](https://capacms.com/docs/errors/model_not_found): 404 not_found. The model in the path does not exist, or this key cannot read it. - [entry_not_found](https://capacms.com/docs/errors/entry_not_found): 404 not_found. No entry with that id is visible to this key. - [page_not_found](https://capacms.com/docs/errors/page_not_found): 404 not_found. No model declares that page and no read has reported it. - [route_not_found](https://capacms.com/docs/errors/route_not_found): 404 not_found. No route under /api/ matches the method and path you sent. - [mutations_not_enabled](https://capacms.com/docs/errors/mutations_not_enabled): 405 method. The request tried to write. - [rate_limit_exceeded](https://capacms.com/docs/errors/rate_limit_exceeded): 429 rate_limited. Capa refused the request to protect the service, for one of two reasons the message names: too many reads running at once (the API's read gate, per client, per key or per project), or too many uncached requests from this key in a minute (the CDN's limit). - [internal](https://capacms.com/docs/errors/internal): 500 api_error. Capa hit an unexpected error. - [service_unavailable](https://capacms.com/docs/errors/service_unavailable): 503 api_error. The API was busy with other projects' reads for the whole database budget, or had no database connection free in time. - [query_timeout](https://capacms.com/docs/errors/query_timeout): 504 api_error. The database stopped the query at the statement timeout. - SDK - [SDK](https://capacms.com/docs/sdk): @capacms/sdk: install it, pick an entry point, and set the environment variables it reads. - [The /api/ client](https://capacms.com/docs/sdk/client): createClient from @capacms/sdk/next: entries, typed reads, the flat shape, inflate and errors. - [GraphQL in the SDK](https://capacms.com/docs/sdk/graphql): client.graphql, the typed builder, typed documents and the tool spec for explorers and assistants. - [Next.js helpers](https://capacms.com/docs/sdk/nextjs): @capacms/sdk/nextjs: cache tags, webhook revalidation, draft mode and graphql() in a server component. - [CLI: capa-codegen and capa persist](https://capacms.com/docs/sdk/cli): Generate types from your models with capa-codegen, and register persisted queries with capa persist. - [The legacy /v2 client](https://capacms.com/docs/sdk/legacy-client): createClient from @capacms/sdk for /v2/api: reads, scheduling, workspaces, layouts and webhook endpoints. - Legacy API - [Legacy API: /v2/api and /v3/api](https://capacms.com/docs/legacy): The frozen read API existing sites use: keys, routes, parameters, the response shape, caching and errors. - [Schema: /v2/schema](https://capacms.com/docs/legacy/schema): Your project's models, fields and relations as JSON, and as ready-made TypeScript types, for code generation. - [Legacy search](https://capacms.com/docs/legacy/search): Full-text search across a project with /v2/api/search and /v3/api/search. - [What changed in October 2026](https://capacms.com/docs/legacy/october-2026): Every Capa site moved to a new platform on 2026-10-01. Legacy reads answer as before. Send them to cdn.capacms.com. - [Move a page from /v2/api to /api/](https://capacms.com/docs/legacy/migrate): Port a site to the new read API one page at a time, while the legacy API keeps serving the rest. - Webhooks - [Webhooks](https://capacms.com/docs/webhooks): Have Capa call your server when content changes, signed so you can prove the request came from Capa. - [Webhook events](https://capacms.com/docs/webhooks/events): Every webhook event, when it fires, and a sample of the data it carries. - [Verify a delivery](https://capacms.com/docs/webhooks/verify): Check a webhook's signature before you trust it, with the SDK or by hand in any language. - [Retries and redelivery](https://capacms.com/docs/webhooks/delivery): What Capa does when your server is down, how an endpoint pauses itself, and how to send missed events again. - Preview - [Preview](https://capacms.com/docs/preview): Open your own site beside the editor, showing the draft being written, and click the page to edit the field behind it. - [Preview in Next.js](https://capacms.com/docs/preview/nextjs): Turn on edit mode, start the overlay and accept preview links in a Next.js site. - [The preview protocol](https://capacms.com/docs/preview/protocol): The messages between the Capa editor and your page, for stacks other than Next.js. - [Pages](https://capacms.com/docs/preview/pages): Which of your pages read which entries, what Capa suggests about them, and how preview opens a draft. - AI and agents - [AI and agents](https://capacms.com/docs/ai): What an AI agent can do with Capa today, which key it needs, and where to connect it. - [MCP server](https://capacms.com/docs/ai/mcp): Give Claude Code, Cursor, Codex or any MCP client read access to a Capa project with @capacms/mcp. - [Agent API](https://capacms.com/docs/ai/agent-api): Let an agent create models and entries with an API key on /v2/agent, with no person signed in. - Integrations - [Shopify](https://capacms.com/docs/integrations/shopify): Connect a Shopify store and sync its products, collections, pages, blogs and menus into Capa as entries. - Projects and roles - [Manage projects](https://capacms.com/docs/projects/manage): Create, switch, rename and move a project, transfer it to someone else, leave it, or delete it. - [Members and roles](https://capacms.com/docs/projects/members-and-roles): Invite people to a project, choose their role, and see exactly what each role can do. - [Agency playbook](https://capacms.com/docs/projects/agency-playbook): Set up a client project, give everyone the right role and one key per site, and hand it over cleanly. - Admin tools - [The Developers section](https://capacms.com/docs/admin/developers): Keys, the Queries and GraphQL explorers, request logs, the cache and webhooks, plus the API sheet on every list and entry. - Changelog - [Changelog](https://capacms.com/docs/changelog): What changed in Capa, in the API and in the SDK. - [API changelog](https://capacms.com/docs/changelog/api): Every dated version of /api/ and what it changed, newest first. - [SDK changelog](https://capacms.com/docs/changelog/sdk): Every release of @capacms/sdk, newest first. - [Glossary](https://capacms.com/docs/glossary): The words Capa uses, and the older API names you will meet for the same things.