Get a specific project by ID.
Platform JWT callers must be scoped to this exact project; the
require_project_match dependency enforces JWT scope and
verifies the project exists in the caller’s tenant namespace.
Returns: The requested project.
Raises: ProjectNotFoundError: If project not found or belongs to another organization. CrossProjectAccessError: If a platform JWT is scoped to a different project than the URL path.
Successful Response
Project record stored in the tenant SurrealDB namespace.
Projects group resources within an organization. Each resource belongs to exactly one project, enabling scoped access control and isolation. Project rows live in the per-tenant SurrealDB namespace alongside resources so that lifecycle operations on a project and its resources execute inside a single tenant-scoped transaction.
Identity fields (frozen): project_id: Unique project identifier, used as SurrealDB record ID. organization_id: Owning organization, set at creation and immutable. Denormalised onto the row so platform callers can reason about the owner without re-deriving it from the namespace binding.
Metadata:
name: Display name of the project.
managed_by: Ownership tier. "platform" projects are seeded by
pragma-os itself (e.g. the platform-default project used by
platform agents). User-facing write paths reject mutations to
platform-managed projects with HTTP 403. None or "user"
indicates an ordinary user-created project.
Inherited from PragmaModel: created_at: Creation timestamp (frozen). updated_at: Last update timestamp (mutable).