Schema discovery¶
The v3 API exposes its generated JSON schemas so clients can discover what each content type accepts and returns, without hand-copying field definitions. Schema discovery requires an authenticated request.
Listing registered content types¶
The /schema/ endpoint lists the content types registered with the API. Each entry has a name (the exact Django model label, or the generic pages) and a label (a human-readable name):
curl -H "Authorization: Bearer $TOKEN" "https://example.com/api/v3/schema/"
{
"types": [
{"name": "pages", "label": "Pages"},
{"name": "tests.BlogPage", "label": "Blog page"},
{"name": "mymodels.Advert", "label": "Advert"}
]
}
The registered types depend on the project’s installed apps and registered models, so the exact list is specific to each site.
Reading the schemas for a content type¶
The /schema/{type_name}/ endpoint returns the JSON schemas for a single content type, split by direction: read, create, and patch:
The
readschema describes what the API returns for that type.The
createschema describes what you can submit to create an instance.The
patchschema describes what you can submit to update an instance.
curl -H "Authorization: Bearer $TOKEN" \
"https://example.com/api/v3/schema/tests.BlogPage/"
An unknown content type returns 404.
How schemas are generated¶
Schemas are generated at runtime from the project’s models and panels, not hand-written. The read side comes from a model’s api_fields, and the write side additionally requires a field to be a real editable model field declared APIField(..., writable=True). A field that is readable but not exposed as writable appears in read but not in create or patch.
Because the generic pages entry is for discovery across all page types, only its read schema is populated today: its create and patch directions fall back to a Not yet available placeholder. Use a concrete page type registration (for example tests.BlogPage) to get actionable create and patch schemas.
Compared with the v2 API¶
The v2 API exposes fields through a dynamic ?fields= query projection. The v3 API instead uses these fixed generated schemas and does not support ?fields= projection. The v2 to v3 migration guide describes the practical differences in detail.