Migration
059 created the default project for every existing organization and
backfilled every account kit, child project, connection, vault entry and approval
into it. Nothing written before projects existed changes behaviour — see
Projects (architecture).CLI first
Create a project
company_id is the deprecated spelling of the same id, returned so a caller
written against the old name does not have to be rewritten.
Parameters
Work inside a project
forProject("default") declines to name a project rather than naming the
default one: on an un-pinned key it resolves to the organization’s default
project, and on a key pinned to another project it resolves to the pin.
naive.forUser(id) is the same resolution without writing the sentinel.
Pin a key to a project
An API key can be pinned to a project at creation (active_project_id), the way
it can be sealed to a subject. A pinned key can only act inside its project: a
request naming a different one is a 403 key_project_mismatch, never a
redirect. Leave the project off the path (or use default) to act inside the pin.
Delete a project
Error handling
Back-compat
Every old spelling keeps working and resolves to the default project:naive.forUser(id), naive.users, naive.accountKits,
naive use <child_project_id>, /v1/users/..., /v1/company, and MCP tools
called with user_id and no project_id.