Every page after this one hands you a prompt instead of code to type. This is the one-time setup that makes those prompts land.
Why this repo behaves differently
Claude Code reads a file called CLAUDE.md from the project root before it answers anything, and this repo ships 673 lines of it. The file says what it is in its own opening lines:
This file is the architectural contract for the codebase. It is also loaded as Claude Code's project context, so AI assistants read it on every session.
Underneath that: a 6-step recipe for adding an endpoint, five worked endpoints to copy from, an 11-row table naming the exact module that answers each common question, and a boundary map marking the fourteen framework apps your agent must not edit.
That last one matters more here than in most projects. This codebase holds a credit ledger, hashed API keys, and OAuth tokens. An agent left to its own judgement will happily "improve" the billing code; this file tells it, before it writes anything, that billing is not its to touch.
1. Install Claude Code
Windows (PowerShell):
irm https://claude.ai/install.ps1 | iexmacOS / Linux / WSL:
curl -fsSL https://claude.ai/install.sh | bashHomebrew and WinGet work too, and signing in is covered in Anthropic's quickstart. You need a Claude subscription or a Console account.
2. Open the repo
From the folder you cloned in Get the Code:
cd my-api
claudeThere is nothing to configure. CLAUDE.md is in the root, so it is already loaded.
On your computer, not inside Docker
Your agent edits files on your machine. The Docker stack you started on the last page builds its image from those files, so nothing you change reaches the running app until you reload it. Every page from here says when to reload.
3. Make it prove it read the file
Do not start with a feature. Start with a question whose answer you can check.
Read CLAUDE.md and tell me in your own words: exactly where a new endpoint's files go and what each file is called, which single line registers it, how an endpoint charges credits, and which folders in this repo you are not allowed to edit. Do not write any code yet.
A good answer puts a new endpoint in apps/app_endpoints/<slug>/ as four files (__init__.py, apps.py, endpoints.py, tests.py), registers it with one dotted path in config/settings/base.py, says credits are charged by passing credits_cost=N to the @endpoint(...) decorator rather than by writing billing code inside run(), and names framework apps such as apps/core/, apps/billing/ and apps/api_keys/ as off-limits.
A bad answer reaches for @mcp.tool() and a FastMCP() server object, offers you a views.py and a urls.py, or proposes editing apps/billing/ to handle the charging. That is the generic Python-and-MCP answer out of its training data, and it is the exact shape this repo exists to replace. Left uncorrected it will build you a second MCP server next to the one you already own.
That is the generic FastMCP pattern, not this repo's. Open CLAUDE.md in the project root, read the endpoint authoring recipe and the framework boundary section, and answer again using only what is written there.
Thirty seconds spent here is what stops the next ten endpoints drifting.
One line in CLAUDE.md is stale, and your agent will repeat it faithfully
Step 3 of the endpoint recipe says to add your endpoint to a list called LOCAL_APPS. In config/settings/base.py that list is actually called INSTALLED_APPS, with the example endpoints sitting in it just below "apps.docs". The manage.py new_endpoint scaffolder prints the same old name in its closing hint.
So if your agent says LOCAL_APPS, it read the file correctly and the file is out of date. Add your line to INSTALLED_APPS and carry on. It is worth knowing this failure mode in general: an agent that quotes a file confidently is only ever as right as the file.
If you use Cursor or Copilot instead
Everything in these docs still applies. The difference is loading: neither tool picks up CLAUDE.md by convention the way Claude Code does, so say it once at the start of a session.
Read CLAUDE.md in the project root and follow it for everything in this session. It overrides your defaults for this codebase.
Next: Build Your First Endpoint. This is the fun part.