wagtail-write-api 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wagtail_write_api-0.1.0/.cache/.gitignore +1 -0
- wagtail_write_api-0.1.0/.cache/10072645972605179795 +4 -0
- wagtail_write_api-0.1.0/.cache/10325993564268298323 +4 -0
- wagtail_write_api-0.1.0/.cache/10675060821914042478 +163 -0
- wagtail_write_api-0.1.0/.cache/10912539749067219395 +4 -0
- wagtail_write_api-0.1.0/.cache/11189054225042424061 +134 -0
- wagtail_write_api-0.1.0/.cache/11900175282235997040 +4 -0
- wagtail_write_api-0.1.0/.cache/12941935354395453144 +4 -0
- wagtail_write_api-0.1.0/.cache/1304805724378324159 +104 -0
- wagtail_write_api-0.1.0/.cache/13095240694210340980 +179 -0
- wagtail_write_api-0.1.0/.cache/13150952152552491771 +118 -0
- wagtail_write_api-0.1.0/.cache/13319335153632101494 +164 -0
- wagtail_write_api-0.1.0/.cache/13346532661953542659 +150 -0
- wagtail_write_api-0.1.0/.cache/14815055342921304206 +4 -0
- wagtail_write_api-0.1.0/.cache/15019832868990109487 +4 -0
- wagtail_write_api-0.1.0/.cache/15213489598760314030 +88 -0
- wagtail_write_api-0.1.0/.cache/15425721053759110411 +133 -0
- wagtail_write_api-0.1.0/.cache/17269403965210223874 +4 -0
- wagtail_write_api-0.1.0/.cache/18433219369294251335 +195 -0
- wagtail_write_api-0.1.0/.cache/3155089737826591378 +4 -0
- wagtail_write_api-0.1.0/.cache/3476900567878811119 +4 -0
- wagtail_write_api-0.1.0/.cache/4088402591079185016 +104 -0
- wagtail_write_api-0.1.0/.cache/5503702737972542691 +4 -0
- wagtail_write_api-0.1.0/.cache/5598363154102808000 +4 -0
- wagtail_write_api-0.1.0/.cache/591080664270414004 +135 -0
- wagtail_write_api-0.1.0/.cache/7337441017309058329 +4 -0
- wagtail_write_api-0.1.0/.cache/8703236121783160428 +4 -0
- wagtail_write_api-0.1.0/.cache/8947502556660863276 +317 -0
- wagtail_write_api-0.1.0/.cache/9436914337003654548 +195 -0
- wagtail_write_api-0.1.0/.github/workflows/docs.yml +29 -0
- wagtail_write_api-0.1.0/.gitignore +14 -0
- wagtail_write_api-0.1.0/LICENSE +28 -0
- wagtail_write_api-0.1.0/Makefile +14 -0
- wagtail_write_api-0.1.0/PKG-INFO +46 -0
- wagtail_write_api-0.1.0/README.md +3 -0
- wagtail_write_api-0.1.0/docs/api/authentication.md +62 -0
- wagtail_write_api-0.1.0/docs/api/images.md +142 -0
- wagtail_write_api-0.1.0/docs/api/pages.md +323 -0
- wagtail_write_api-0.1.0/docs/api/schema-discovery.md +89 -0
- wagtail_write_api-0.1.0/docs/development/contributing.md +96 -0
- wagtail_write_api-0.1.0/docs/development/example-app.md +126 -0
- wagtail_write_api-0.1.0/docs/getting-started/configuration.md +99 -0
- wagtail_write_api-0.1.0/docs/getting-started/installation.md +105 -0
- wagtail_write_api-0.1.0/docs/getting-started/quickstart.md +119 -0
- wagtail_write_api-0.1.0/docs/guides/permissions.md +85 -0
- wagtail_write_api-0.1.0/docs/guides/rich-text.md +112 -0
- wagtail_write_api-0.1.0/docs/guides/streamfield.md +138 -0
- wagtail_write_api-0.1.0/docs/guides/workflow.md +163 -0
- wagtail_write_api-0.1.0/docs/index.md +58 -0
- wagtail_write_api-0.1.0/example/Makefile +10 -0
- wagtail_write_api-0.1.0/example/example_project/__init__.py +0 -0
- wagtail_write_api-0.1.0/example/example_project/settings.py +78 -0
- wagtail_write_api-0.1.0/example/example_project/urls.py +11 -0
- wagtail_write_api-0.1.0/example/example_project/wsgi.py +6 -0
- wagtail_write_api-0.1.0/example/manage.py +14 -0
- wagtail_write_api-0.1.0/example/testapp/__init__.py +0 -0
- wagtail_write_api-0.1.0/example/testapp/management/__init__.py +0 -0
- wagtail_write_api-0.1.0/example/testapp/management/commands/__init__.py +0 -0
- wagtail_write_api-0.1.0/example/testapp/management/commands/seed_demo.py +149 -0
- wagtail_write_api-0.1.0/example/testapp/migrations/0001_initial.py +83 -0
- wagtail_write_api-0.1.0/example/testapp/migrations/__init__.py +0 -0
- wagtail_write_api-0.1.0/example/testapp/models.py +112 -0
- wagtail_write_api-0.1.0/example/testapp/wagtail_hooks.py +0 -0
- wagtail_write_api-0.1.0/pyproject.toml +69 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/__init__.py +1 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/api.py +45 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/apps.py +12 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/auth.py +16 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/converters/__init__.py +0 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/converters/rich_text.py +55 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/endpoints/__init__.py +0 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/endpoints/images.py +121 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/endpoints/pages.py +554 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/endpoints/schema_discovery.py +66 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/permissions.py +16 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/schema/__init__.py +0 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/schema/fields.py +99 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/schema/generator.py +104 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/schema/registry.py +68 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/settings.py +26 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/urls.py +7 -0
- wagtail_write_api-0.1.0/src/wagtail_write_api/utils.py +27 -0
- wagtail_write_api-0.1.0/tests/__init__.py +0 -0
- wagtail_write_api-0.1.0/tests/conftest.py +41 -0
- wagtail_write_api-0.1.0/tests/test_auth.py +36 -0
- wagtail_write_api-0.1.0/tests/test_images_api.py +102 -0
- wagtail_write_api-0.1.0/tests/test_pages_read.py +154 -0
- wagtail_write_api-0.1.0/tests/test_pages_workflow.py +108 -0
- wagtail_write_api-0.1.0/tests/test_pages_write.py +193 -0
- wagtail_write_api-0.1.0/tests/test_rich_text.py +110 -0
- wagtail_write_api-0.1.0/tests/test_schema_generation.py +83 -0
- wagtail_write_api-0.1.0/tests/test_smoke.py +18 -0
- wagtail_write_api-0.1.0/tests/test_streamfield.py +137 -0
- wagtail_write_api-0.1.0/uv.lock +1228 -0
- wagtail_write_api-0.1.0/wagtail-write-api-plan.md +1017 -0
- wagtail_write_api-0.1.0/zensical.toml +71 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": "\n<!doctype html>\n<html lang=\"en\" class=\"no-js\">\n <head>\n \n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n \n <meta name=\"description\" content=\"A read/write REST API for Wagtail CMS, built on Django Ninja\">\n \n \n <meta name=\"author\" content=\"Tom Dyson\">\n \n \n <link rel=\"canonical\" href=\"https://tomdyson.github.io/wagtail-write-api/api/images/\">\n \n \n <link rel=\"prev\" href=\"../pages/\">\n \n \n <link rel=\"next\" href=\"../schema-discovery/\">\n \n \n \n \n \n <link rel=\"icon\" href=\"../../assets/images/favicon.png\">\n <meta name=\"generator\" content=\"zensical-0.0.31\">\n \n \n \n <title>Images API - wagtail-write-api</title>\n \n \n \n \n \n \n <link rel=\"stylesheet\" href=\"../../assets/stylesheets/modern/main.53a7feaf.min.css\">\n \n \n \n \n <link rel=\"stylesheet\" href=\"../../assets/stylesheets/modern/palette.dfe2e883.min.css\">\n \n \n\n\n \n \n \n \n \n \n \n \n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Inter:300,300i,400,400i,500,500i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback\">\n <style>:root{--md-text-font:\"Inter\";--md-code-font:\"JetBrains Mono\"}</style>\n \n \n \n <script>__md_scope=new URL(\"../..\",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+\".\"+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+\".\"+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute(\"data-platform\",navigator.platform)</script>\n \n \n\n \n \n </head>\n \n \n \n \n \n \n \n \n \n <body dir=\"ltr\" data-md-color-scheme=\"default\" data-md-color-primary=\"teal\" data-md-color-accent=\"amber\">\n \n \n <input class=\"md-toggle\" data-md-toggle=\"drawer\" type=\"checkbox\" id=\"__drawer\" autocomplete=\"off\">\n <input class=\"md-toggle\" data-md-toggle=\"search\" type=\"checkbox\" id=\"__search\" autocomplete=\"off\">\n <label class=\"md-overlay\" for=\"__drawer\" aria-label=\"Navigation\"></label>\n <div data-md-component=\"skip\">\n \n \n <a href=\"#images-api\" class=\"md-skip\">\n Skip to content\n </a>\n \n </div>\n <div data-md-component=\"announce\">\n \n </div>\n \n \n \n\n \n\n<header class=\"md-header md-header--shadow\" data-md-component=\"header\">\n <nav class=\"md-header__inner md-grid\" aria-label=\"Header\">\n <a href=\"../..\" title=\"wagtail-write-api\" class=\"md-header__button md-logo\" aria-label=\"wagtail-write-api\" data-md-component=\"logo\">\n \n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\n\n </a>\n <label class=\"md-header__button md-icon\" for=\"__drawer\" aria-label=\"Navigation\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-menu\" viewBox=\"0 0 24 24\"><path d=\"M4 5h16M4 12h16M4 19h16\"/></svg>\n </label>\n <div class=\"md-header__title\" data-md-component=\"header-title\">\n <div class=\"md-header__ellipsis\">\n <div class=\"md-header__topic\">\n <span class=\"md-ellipsis\">\n wagtail-write-api\n </span>\n </div>\n <div class=\"md-header__topic\" data-md-component=\"header-topic\">\n <span class=\"md-ellipsis\">\n \n Images API\n \n </span>\n </div>\n </div>\n </div>\n \n \n <form class=\"md-header__option\" data-md-component=\"palette\">\n \n \n \n \n <input class=\"md-option\" data-md-color-media=\"none\" data-md-color-scheme=\"default\" data-md-color-primary=\"teal\" data-md-color-accent=\"amber\" aria-label=\"Switch to dark mode\" type=\"radio\" name=\"__palette\" id=\"__palette_0\">\n \n <label class=\"md-header__button md-icon\" title=\"Switch to dark mode\" for=\"__palette_1\" hidden>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-sun\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"/></svg>\n </label>\n \n \n \n \n \n <input class=\"md-option\" data-md-color-media=\"none\" data-md-color-scheme=\"slate\" data-md-color-primary=\"teal\" data-md-color-accent=\"amber\" aria-label=\"Switch to light mode\" type=\"radio\" name=\"__palette\" id=\"__palette_1\">\n \n <label class=\"md-header__button md-icon\" title=\"Switch to light mode\" for=\"__palette_0\" hidden>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-moon\" viewBox=\"0 0 24 24\"><path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"/></svg>\n </label>\n \n \n</form>\n \n \n \n <script>var palette=__md_get(\"__palette\");if(palette&&palette.color){if(\"(prefers-color-scheme)\"===palette.color.media){var media=matchMedia(\"(prefers-color-scheme: light)\"),input=document.querySelector(media.matches?\"[data-md-color-media='(prefers-color-scheme: light)']\":\"[data-md-color-media='(prefers-color-scheme: dark)']\");palette.color.media=input.getAttribute(\"data-md-color-media\"),palette.color.scheme=input.getAttribute(\"data-md-color-scheme\"),palette.color.primary=input.getAttribute(\"data-md-color-primary\"),palette.color.accent=input.getAttribute(\"data-md-color-accent\")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute(\"data-md-color-\"+key,value)}</script>\n \n \n \n \n \n <label class=\"md-header__button md-icon\" for=\"__search\" aria-label=\"Search\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-search\" viewBox=\"0 0 24 24\"><path d=\"m21 21-4.34-4.34\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/></svg>\n </label>\n <div class=\"md-search\" data-md-component=\"search\" role=\"dialog\" aria-label=\"Search\">\n <button type=\"button\" class=\"md-search__button\">\n Search\n </button>\n</div>\n \n \n <div class=\"md-header__source\">\n \n </div>\n </nav>\n \n</header>\n \n <div class=\"md-container\" data-md-component=\"container\">\n \n \n \n \n \n \n <main class=\"md-main\" data-md-component=\"main\">\n <div class=\"md-main__inner md-grid\">\n \n \n \n <div class=\"md-sidebar md-sidebar--primary\" data-md-component=\"sidebar\" data-md-type=\"navigation\" >\n <div class=\"md-sidebar__scrollwrap\">\n <div class=\"md-sidebar__inner\">\n \n\n\n\n<nav class=\"md-nav md-nav--primary\" aria-label=\"Navigation\" data-md-level=\"0\">\n <label class=\"md-nav__title\" for=\"__drawer\">\n <a href=\"../..\" title=\"wagtail-write-api\" class=\"md-nav__button md-logo\" aria-label=\"wagtail-write-api\" data-md-component=\"logo\">\n \n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\n\n </a>\n wagtail-write-api\n </label>\n \n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../..\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Home\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--section md-nav__item--nested\">\n \n \n \n <input class=\"md-nav__toggle md-toggle \" type=\"checkbox\" id=\"__nav_2\" >\n \n \n <label class=\"md-nav__link\" for=\"__nav_2\" id=\"__nav_2_label\" tabindex=\"\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Getting Started\n \n\n \n </span>\n \n \n\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n <nav class=\"md-nav\" data-md-level=\"1\" aria-labelledby=\"__nav_2_label\" aria-expanded=\"false\">\n <label class=\"md-nav__title\" for=\"__nav_2\">\n <span class=\"md-nav__icon md-icon\"></span>\n \n \n Getting Started\n \n\n </label>\n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../getting-started/installation/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Installation\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../getting-started/quickstart/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Quickstart\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../getting-started/configuration/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Configuration\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n </ul>\n </nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested\">\n \n \n \n <input class=\"md-nav__toggle md-toggle \" type=\"checkbox\" id=\"__nav_3\" checked>\n \n \n <label class=\"md-nav__link\" for=\"__nav_3\" id=\"__nav_3_label\" tabindex=\"\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n API Reference\n \n\n \n </span>\n \n \n\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n <nav class=\"md-nav\" data-md-level=\"1\" aria-labelledby=\"__nav_3_label\" aria-expanded=\"true\">\n <label class=\"md-nav__title\" for=\"__nav_3\">\n <span class=\"md-nav__icon md-icon\"></span>\n \n \n API Reference\n \n\n </label>\n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../pages/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Pages API\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--active\">\n \n \n \n \n \n \n \n <label class=\"md-nav__link md-nav__link--active\" for=\"__toc\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Images API\n \n\n \n </span>\n \n \n\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n <a href=\"././\" class=\"md-nav__link md-nav__link--active\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Images API\n \n\n \n </span>\n \n \n\n </a>\n \n \n\n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"On this page\">\n \n \n \n \n \n \n <label class=\"md-nav__title\" for=\"__toc\">\n <span class=\"md-nav__icon md-icon\"></span>\n On this page\n </label>\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\n \n <li class=\"md-nav__item\">\n <a href=\"#endpoints\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Endpoints\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#list-images\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n List images\n \n </span>\n </a>\n \n <nav class=\"md-nav\" aria-label=\"List images\">\n <ul class=\"md-nav__list\">\n \n <li class=\"md-nav__item\">\n <a href=\"#query-parameters\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Query parameters\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#response\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Response\n \n </span>\n </a>\n \n</li>\n \n </ul>\n </nav>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#get-image-detail\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Get image detail\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#upload-an-image\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Upload an image\n \n </span>\n </a>\n \n <nav class=\"md-nav\" aria-label=\"Upload an image\">\n <ul class=\"md-nav__list\">\n \n <li class=\"md-nav__item\">\n <a href=\"#example\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Example\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#response_1\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Response\n \n </span>\n </a>\n \n</li>\n \n </ul>\n </nav>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#update-image-metadata\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Update image metadata\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#delete-an-image\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Delete an image\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#renditions\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Renditions\n \n </span>\n </a>\n \n</li>\n \n </ul>\n \n</nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../schema-discovery/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Schema Discovery API\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../authentication/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Authentication\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n </ul>\n </nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--section md-nav__item--nested\">\n \n \n \n <input class=\"md-nav__toggle md-toggle \" type=\"checkbox\" id=\"__nav_4\" >\n \n \n <label class=\"md-nav__link\" for=\"__nav_4\" id=\"__nav_4_label\" tabindex=\"\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Guides\n \n\n \n </span>\n \n \n\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n <nav class=\"md-nav\" data-md-level=\"1\" aria-labelledby=\"__nav_4_label\" aria-expanded=\"false\">\n <label class=\"md-nav__title\" for=\"__nav_4\">\n <span class=\"md-nav__icon md-icon\"></span>\n \n \n Guides\n \n\n </label>\n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../guides/rich-text/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Rich Text\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../guides/streamfield/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n StreamField\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../guides/permissions/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Permissions\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../guides/workflow/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Workflow\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n </ul>\n </nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--section md-nav__item--nested\">\n \n \n \n <input class=\"md-nav__toggle md-toggle \" type=\"checkbox\" id=\"__nav_5\" >\n \n \n <label class=\"md-nav__link\" for=\"__nav_5\" id=\"__nav_5_label\" tabindex=\"\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Development\n \n\n \n </span>\n \n \n\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n <nav class=\"md-nav\" data-md-level=\"1\" aria-labelledby=\"__nav_5_label\" aria-expanded=\"false\">\n <label class=\"md-nav__title\" for=\"__nav_5\">\n <span class=\"md-nav__icon md-icon\"></span>\n \n \n Development\n \n\n </label>\n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../development/contributing/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Contributing\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../development/example-app/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Example App\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n </ul>\n </nav>\n \n </li>\n \n\n \n </ul>\n</nav>\n </div>\n </div>\n </div>\n \n \n \n <div class=\"md-sidebar md-sidebar--secondary\" data-md-component=\"sidebar\" data-md-type=\"toc\" >\n <div class=\"md-sidebar__scrollwrap\">\n \n \n \n \n \n \n \n <input class=\"md-nav__toggle md-toggle\" type=\"checkbox\" id=\"__toc\">\n <div class=\"md-sidebar-button__wrapper\">\n <label class=\"md-sidebar-button\" for=\"__toc\"></label>\n </div>\n \n \n <div class=\"md-sidebar__inner\">\n \n\n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"On this page\">\n \n \n \n \n \n \n <label class=\"md-nav__title\" for=\"__toc\">\n <span class=\"md-nav__icon md-icon\"></span>\n On this page\n </label>\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\n \n <li class=\"md-nav__item\">\n <a href=\"#endpoints\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Endpoints\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#list-images\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n List images\n \n </span>\n </a>\n \n <nav class=\"md-nav\" aria-label=\"List images\">\n <ul class=\"md-nav__list\">\n \n <li class=\"md-nav__item\">\n <a href=\"#query-parameters\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Query parameters\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#response\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Response\n \n </span>\n </a>\n \n</li>\n \n </ul>\n </nav>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#get-image-detail\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Get image detail\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#upload-an-image\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Upload an image\n \n </span>\n </a>\n \n <nav class=\"md-nav\" aria-label=\"Upload an image\">\n <ul class=\"md-nav__list\">\n \n <li class=\"md-nav__item\">\n <a href=\"#example\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Example\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#response_1\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Response\n \n </span>\n </a>\n \n</li>\n \n </ul>\n </nav>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#update-image-metadata\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Update image metadata\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#delete-an-image\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Delete an image\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#renditions\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Renditions\n \n </span>\n </a>\n \n</li>\n \n </ul>\n \n</nav>\n </div>\n </div>\n </div>\n \n \n \n <div class=\"md-content\" data-md-component=\"content\">\n \n \n\n\n\n \n\n\n <nav class=\"md-path\" aria-label=\"Navigation\" >\n <ol class=\"md-path__list\">\n \n \n \n \n <li class=\"md-path__item\">\n <a href=\"../..\" class=\"md-path__link\">\n \n <span class=\"md-ellipsis\">\n Home\n </span>\n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-path__item\">\n <a href=\"../pages/\" class=\"md-path__link\">\n \n <span class=\"md-ellipsis\">\n API Reference\n </span>\n\n </a>\n </li>\n \n \n\n \n </ol>\n </nav>\n\n \n <article class=\"md-content__inner md-typeset\">\n \n \n\n<h1 id=\"images-api\">Images API<a class=\"headerlink\" href=\"#images-api\" title=\"Permanent link\">¶</a></h1>\n<p>Upload, list, update, and delete images. Responses include rendition URLs for common sizes.</p>\n<h2 id=\"endpoints\">Endpoints<a class=\"headerlink\" href=\"#endpoints\" title=\"Permanent link\">¶</a></h2>\n<table>\n<thead>\n<tr>\n<th>Method</th>\n<th>Path</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>GET</code></td>\n<td><code>/images/</code></td>\n<td>List images</td>\n</tr>\n<tr>\n<td><code>GET</code></td>\n<td><code>/images/{id}/</code></td>\n<td>Get image detail</td>\n</tr>\n<tr>\n<td><code>POST</code></td>\n<td><code>/images/</code></td>\n<td>Upload an image</td>\n</tr>\n<tr>\n<td><code>PATCH</code></td>\n<td><code>/images/{id}/</code></td>\n<td>Update metadata</td>\n</tr>\n<tr>\n<td><code>DELETE</code></td>\n<td><code>/images/{id}/</code></td>\n<td>Delete an image</td>\n</tr>\n</tbody>\n</table>\n<hr />\n<h2 id=\"list-images\">List images<a class=\"headerlink\" href=\"#list-images\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-text highlight\"><pre><span></span><code><span id=\"__span-0-1\"><a id=\"__codelineno-0-1\" name=\"__codelineno-0-1\" href=\"#__codelineno-0-1\"></a>GET /images/\n</span></code></pre></div>\n<h3 id=\"query-parameters\">Query parameters<a class=\"headerlink\" href=\"#query-parameters\" title=\"Permanent link\">¶</a></h3>\n<table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>search</code></td>\n<td>string</td>\n<td>Filter by title</td>\n</tr>\n<tr>\n<td><code>offset</code></td>\n<td>int</td>\n<td>Pagination offset</td>\n</tr>\n<tr>\n<td><code>limit</code></td>\n<td>int</td>\n<td>Items per page</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"response\">Response<a class=\"headerlink\" href=\"#response\" title=\"Permanent link\">¶</a></h3>\n<div class=\"language-json highlight\"><pre><span></span><code><span id=\"__span-1-1\"><a id=\"__codelineno-1-1\" name=\"__codelineno-1-1\" href=\"#__codelineno-1-1\"></a><span class=\"p\">{</span>\n</span><span id=\"__span-1-2\"><a id=\"__codelineno-1-2\" name=\"__codelineno-1-2\" href=\"#__codelineno-1-2\"></a><span class=\"w\"> </span><span class=\"nt\">"items"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span>\n</span><span id=\"__span-1-3\"><a id=\"__codelineno-1-3\" name=\"__codelineno-1-3\" href=\"#__codelineno-1-3\"></a><span class=\"w\"> </span><span class=\"p\">{</span>\n</span><span id=\"__span-1-4\"><a id=\"__codelineno-1-4\" name=\"__codelineno-1-4\" href=\"#__codelineno-1-4\"></a><span class=\"w\"> </span><span class=\"nt\">"id"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">,</span>\n</span><span id=\"__span-1-5\"><a id=\"__codelineno-1-5\" name=\"__codelineno-1-5\" href=\"#__codelineno-1-5\"></a><span class=\"w\"> </span><span class=\"nt\">"title"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"Hero image"</span><span class=\"p\">,</span>\n</span><span id=\"__span-1-6\"><a id=\"__codelineno-1-6\" name=\"__codelineno-1-6\" href=\"#__codelineno-1-6\"></a><span class=\"w\"> </span><span class=\"nt\">"width"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">2000</span><span class=\"p\">,</span>\n</span><span id=\"__span-1-7\"><a id=\"__codelineno-1-7\" name=\"__codelineno-1-7\" href=\"#__codelineno-1-7\"></a><span class=\"w\"> </span><span class=\"nt\">"height"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1500</span><span class=\"p\">,</span>\n</span><span id=\"__span-1-8\"><a id=\"__codelineno-1-8\" name=\"__codelineno-1-8\" href=\"#__codelineno-1-8\"></a><span class=\"w\"> </span><span class=\"nt\">"file_url"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"/media/images/hero.jpg"</span><span class=\"p\">,</span>\n</span><span id=\"__span-1-9\"><a id=\"__codelineno-1-9\" name=\"__codelineno-1-9\" href=\"#__codelineno-1-9\"></a><span class=\"w\"> </span><span class=\"nt\">"created_at"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"2026-03-01T12:00:00"</span><span class=\"p\">,</span>\n</span><span id=\"__span-1-10\"><a id=\"__codelineno-1-10\" name=\"__codelineno-1-10\" href=\"#__codelineno-1-10\"></a><span class=\"w\"> </span><span class=\"nt\">"renditions"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span>\n</span><span id=\"__span-1-11\"><a id=\"__codelineno-1-11\" name=\"__codelineno-1-11\" href=\"#__codelineno-1-11\"></a><span class=\"w\"> </span><span class=\"nt\">"thumbnail"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"/media/images/hero.fill-100x100.jpg"</span><span class=\"p\">,</span>\n</span><span id=\"__span-1-12\"><a id=\"__codelineno-1-12\" name=\"__codelineno-1-12\" href=\"#__codelineno-1-12\"></a><span class=\"w\"> </span><span class=\"nt\">"medium"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"/media/images/hero.max-800x600.jpg"</span><span class=\"p\">,</span>\n</span><span id=\"__span-1-13\"><a id=\"__codelineno-1-13\" name=\"__codelineno-1-13\" href=\"#__codelineno-1-13\"></a><span class=\"w\"> </span><span class=\"nt\">"large"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"/media/images/hero.max-1600x1200.jpg"</span>\n</span><span id=\"__span-1-14\"><a id=\"__codelineno-1-14\" name=\"__codelineno-1-14\" href=\"#__codelineno-1-14\"></a><span class=\"w\"> </span><span class=\"p\">}</span>\n</span><span id=\"__span-1-15\"><a id=\"__codelineno-1-15\" name=\"__codelineno-1-15\" href=\"#__codelineno-1-15\"></a><span class=\"w\"> </span><span class=\"p\">}</span>\n</span><span id=\"__span-1-16\"><a id=\"__codelineno-1-16\" name=\"__codelineno-1-16\" href=\"#__codelineno-1-16\"></a><span class=\"w\"> </span><span class=\"p\">],</span>\n</span><span id=\"__span-1-17\"><a id=\"__codelineno-1-17\" name=\"__codelineno-1-17\" href=\"#__codelineno-1-17\"></a><span class=\"w\"> </span><span class=\"nt\">"meta"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span>\n</span><span id=\"__span-1-18\"><a id=\"__codelineno-1-18\" name=\"__codelineno-1-18\" href=\"#__codelineno-1-18\"></a><span class=\"w\"> </span><span class=\"nt\">"total_count"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">15</span>\n</span><span id=\"__span-1-19\"><a id=\"__codelineno-1-19\" name=\"__codelineno-1-19\" href=\"#__codelineno-1-19\"></a><span class=\"w\"> </span><span class=\"p\">}</span>\n</span><span id=\"__span-1-20\"><a id=\"__codelineno-1-20\" name=\"__codelineno-1-20\" href=\"#__codelineno-1-20\"></a><span class=\"p\">}</span>\n</span></code></pre></div>\n<hr />\n<h2 id=\"get-image-detail\">Get image detail<a class=\"headerlink\" href=\"#get-image-detail\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-text highlight\"><pre><span></span><code><span id=\"__span-2-1\"><a id=\"__codelineno-2-1\" name=\"__codelineno-2-1\" href=\"#__codelineno-2-1\"></a>GET /images/{id}/\n</span></code></pre></div>\n<p>Returns the same fields as the list item, including all configured rendition URLs.</p>\n<hr />\n<h2 id=\"upload-an-image\">Upload an image<a class=\"headerlink\" href=\"#upload-an-image\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-text highlight\"><pre><span></span><code><span id=\"__span-3-1\"><a id=\"__codelineno-3-1\" name=\"__codelineno-3-1\" href=\"#__codelineno-3-1\"></a>POST /images/\n</span><span id=\"__span-3-2\"><a id=\"__codelineno-3-2\" name=\"__codelineno-3-2\" href=\"#__codelineno-3-2\"></a>Content-Type: multipart/form-data\n</span></code></pre></div>\n<table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>file</code></td>\n<td>Yes</td>\n<td>The image file</td>\n</tr>\n<tr>\n<td><code>title</code></td>\n<td>No</td>\n<td>Image title (defaults to filename)</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"example\">Example<a class=\"headerlink\" href=\"#example\" title=\"Permanent link\">¶</a></h3>\n<div class=\"language-bash highlight\"><pre><span></span><code><span id=\"__span-4-1\"><a id=\"__codelineno-4-1\" name=\"__codelineno-4-1\" href=\"#__codelineno-4-1\"></a>curl<span class=\"w\"> </span>-X<span class=\"w\"> </span>POST<span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-4-2\"><a id=\"__codelineno-4-2\" name=\"__codelineno-4-2\" href=\"#__codelineno-4-2\"></a><span class=\"w\"> </span>-H<span class=\"w\"> </span><span class=\"s2\">"Authorization: Bearer </span><span class=\"nv\">$TOKEN</span><span class=\"s2\">"</span><span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-4-3\"><a id=\"__codelineno-4-3\" name=\"__codelineno-4-3\" href=\"#__codelineno-4-3\"></a><span class=\"w\"> </span>-F<span class=\"w\"> </span><span class=\"s2\">"file=@photo.jpg"</span><span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-4-4\"><a id=\"__codelineno-4-4\" name=\"__codelineno-4-4\" href=\"#__codelineno-4-4\"></a><span class=\"w\"> </span>-F<span class=\"w\"> </span><span class=\"s2\">"title=My Photo"</span><span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-4-5\"><a id=\"__codelineno-4-5\" name=\"__codelineno-4-5\" href=\"#__codelineno-4-5\"></a><span class=\"w\"> </span>http://localhost:8000/api/write/v1/images/\n</span></code></pre></div>\n<h3 id=\"response_1\">Response<a class=\"headerlink\" href=\"#response_1\" title=\"Permanent link\">¶</a></h3>\n<p><code>201 Created</code> with the image detail including rendition URLs.</p>\n<hr />\n<h2 id=\"update-image-metadata\">Update image metadata<a class=\"headerlink\" href=\"#update-image-metadata\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-text highlight\"><pre><span></span><code><span id=\"__span-5-1\"><a id=\"__codelineno-5-1\" name=\"__codelineno-5-1\" href=\"#__codelineno-5-1\"></a>PATCH /images/{id}/\n</span><span id=\"__span-5-2\"><a id=\"__codelineno-5-2\" name=\"__codelineno-5-2\" href=\"#__codelineno-5-2\"></a>Content-Type: application/json\n</span></code></pre></div>\n<div class=\"language-json highlight\"><pre><span></span><code><span id=\"__span-6-1\"><a id=\"__codelineno-6-1\" name=\"__codelineno-6-1\" href=\"#__codelineno-6-1\"></a><span class=\"p\">{</span>\n</span><span id=\"__span-6-2\"><a id=\"__codelineno-6-2\" name=\"__codelineno-6-2\" href=\"#__codelineno-6-2\"></a><span class=\"w\"> </span><span class=\"nt\">"title"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"Updated title"</span>\n</span><span id=\"__span-6-3\"><a id=\"__codelineno-6-3\" name=\"__codelineno-6-3\" href=\"#__codelineno-6-3\"></a><span class=\"p\">}</span>\n</span></code></pre></div>\n<hr />\n<h2 id=\"delete-an-image\">Delete an image<a class=\"headerlink\" href=\"#delete-an-image\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-text highlight\"><pre><span></span><code><span id=\"__span-7-1\"><a id=\"__codelineno-7-1\" name=\"__codelineno-7-1\" href=\"#__codelineno-7-1\"></a>DELETE /images/{id}/\n</span></code></pre></div>\n<p>Returns <code>204 No Content</code> on success.</p>\n<hr />\n<h2 id=\"renditions\">Renditions<a class=\"headerlink\" href=\"#renditions\" title=\"Permanent link\">¶</a></h2>\n<p>Rendition URLs are generated based on the <code>IMAGE_RENDITIONS</code> setting. The default configuration produces three sizes:</p>\n<table>\n<thead>\n<tr>\n<th>Name</th>\n<th>Spec</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>thumbnail</code></td>\n<td><code>fill-100x100</code></td>\n<td>Square crop, 100px</td>\n</tr>\n<tr>\n<td><code>medium</code></td>\n<td><code>max-800x600</code></td>\n<td>Fit within 800x600</td>\n</tr>\n<tr>\n<td><code>large</code></td>\n<td><code>max-1600x1200</code></td>\n<td>Fit within 1600x1200</td>\n</tr>\n</tbody>\n</table>\n<p>Customise these in your settings:</p>\n<div class=\"language-python highlight\"><span class=\"filename\">settings.py</span><pre><span></span><code><span id=\"__span-8-1\"><a id=\"__codelineno-8-1\" name=\"__codelineno-8-1\" href=\"#__codelineno-8-1\"></a><span class=\"n\">WAGTAIL_WRITE_API</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n</span><span id=\"__span-8-2\"><a id=\"__codelineno-8-2\" name=\"__codelineno-8-2\" href=\"#__codelineno-8-2\"></a> <span class=\"s2\">"IMAGE_RENDITIONS"</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n</span><span id=\"__span-8-3\"><a id=\"__codelineno-8-3\" name=\"__codelineno-8-3\" href=\"#__codelineno-8-3\"></a> <span class=\"s2\">"small"</span><span class=\"p\">:</span> <span class=\"s2\">"fill-200x200"</span><span class=\"p\">,</span>\n</span><span id=\"__span-8-4\"><a id=\"__codelineno-8-4\" name=\"__codelineno-8-4\" href=\"#__codelineno-8-4\"></a> <span class=\"s2\">"hero"</span><span class=\"p\">:</span> <span class=\"s2\">"max-1920x1080"</span><span class=\"p\">,</span>\n</span><span id=\"__span-8-5\"><a id=\"__codelineno-8-5\" name=\"__codelineno-8-5\" href=\"#__codelineno-8-5\"></a> <span class=\"p\">}</span>\n</span><span id=\"__span-8-6\"><a id=\"__codelineno-8-6\" name=\"__codelineno-8-6\" href=\"#__codelineno-8-6\"></a><span class=\"p\">}</span>\n</span></code></pre></div>\n<p>See <a href=\"https://docs.wagtail.org/en/stable/topics/images.html#generating-renditions-in-python\">Wagtail's image rendition docs</a> for available filter specs.</p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n </article>\n </div>\n \n \n <script>var tabs=__md_get(\"__tabs\");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(\".tabbed-set\")){var labels=set.querySelector(\".tabbed-labels\");for(var tab of tabs)for(var label of labels.getElementsByTagName(\"label\"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>\n\n<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith(\"__tabbed_\"))</script>\n </div>\n \n <button type=\"button\" class=\"md-top md-icon\" data-md-component=\"top\" hidden>\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-circle-arrow-up\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m16 12-4-4-4 4M12 16V8\"/></svg>\n Back to top\n</button>\n \n </main>\n \n <footer class=\"md-footer\">\n \n \n \n <nav class=\"md-footer__inner md-grid\" aria-label=\"Footer\" >\n \n \n <a href=\"../pages/\" class=\"md-footer__link md-footer__link--prev\" aria-label=\"Previous: Pages API\">\n <div class=\"md-footer__button md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-arrow-left\" viewBox=\"0 0 24 24\"><path d=\"m12 19-7-7 7-7M19 12H5\"/></svg>\n </div>\n <div class=\"md-footer__title\">\n <span class=\"md-footer__direction\">\n Previous\n </span>\n <div class=\"md-ellipsis\">\n Pages API\n </div>\n </div>\n </a>\n \n \n \n <a href=\"../schema-discovery/\" class=\"md-footer__link md-footer__link--next\" aria-label=\"Next: Schema Discovery API\">\n <div class=\"md-footer__title\">\n <span class=\"md-footer__direction\">\n Next\n </span>\n <div class=\"md-ellipsis\">\n Schema Discovery API\n </div>\n </div>\n <div class=\"md-footer__button md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-arrow-right\" viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"/></svg>\n </div>\n </a>\n \n </nav>\n \n \n <div class=\"md-footer-meta md-typeset\">\n <div class=\"md-footer-meta__inner md-grid\">\n <div class=\"md-copyright\">\n \n <div class=\"md-copyright__highlight\">\n Copyright © 2026 Tom Dyson\n </div>\n \n \n Made with\n <a href=\"https://zensical.org/\" target=\"_blank\" rel=\"noopener\">\n Zensical\n </a>\n \n</div>\n \n \n<div class=\"md-social\">\n \n \n \n \n \n \n \n \n <a href=\"https://github.com/tomdyson/wagtail-write-api\" target=\"_blank\" rel=\"noopener\" title=\"github.com\" class=\"md-social__link\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><!--! Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc.--><path fill=\"currentColor\" d=\"M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2\"/></svg>\n </a>\n \n \n \n \n \n \n \n \n <a href=\"https://pypi.org/project/wagtail-write-api/\" target=\"_blank\" rel=\"noopener\" title=\"pypi.org\" class=\"md-social__link\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><!--! Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc.--><path fill=\"currentColor\" d=\"M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6M286.2 444.7a20.4 20.4 0 1 1 0-40.7 20.4 20.4 0 1 1 0 40.7M167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4m-6.6-183.4a20.4 20.4 0 1 1 0 40.8 20.4 20.4 0 1 1 0-40.8\"/></svg>\n </a>\n \n</div>\n \n </div>\n </div>\n</footer>\n \n </div>\n <div class=\"md-dialog\" data-md-component=\"dialog\">\n <div class=\"md-dialog__inner md-typeset\"></div>\n </div>\n \n \n \n \n \n <script id=\"__config\" type=\"application/json\">{\"annotate\":null,\"base\":\"../..\",\"features\":[\"content.code.annotate\",\"content.code.copy\",\"content.code.select\",\"content.tabs.link\",\"navigation.footer\",\"navigation.indexes\",\"navigation.instant\",\"navigation.instant.prefetch\",\"navigation.path\",\"navigation.sections\",\"navigation.top\",\"navigation.tracking\",\"search.highlight\"],\"search\":\"../../assets/javascripts/workers/search.e2d2d235.min.js\",\"tags\":null,\"translations\":{\"clipboard.copied\":\"Copied to clipboard\",\"clipboard.copy\":\"Copy to clipboard\",\"search.result.more.one\":\"1 more on this page\",\"search.result.more.other\":\"# more on this page\",\"search.result.none\":\"No matching documents\",\"search.result.one\":\"1 matching document\",\"search.result.other\":\"# matching documents\",\"search.result.placeholder\":\"Type to start searching\",\"search.result.term.missing\":\"Missing\",\"select.version\":\"Select version\"},\"version\":null}</script>\n \n \n <script src=\"../../assets/javascripts/bundle.91a19a9e.min.js\"></script>\n \n \n </body>\n</html>",
|
|
3
|
+
"hash": 11338205887380808012
|
|
4
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": "\n<!doctype html>\n<html lang=\"en\" class=\"no-js\">\n <head>\n \n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n \n <meta name=\"description\" content=\"A read/write REST API for Wagtail CMS, built on Django Ninja\">\n \n \n <meta name=\"author\" content=\"Tom Dyson\">\n \n \n <link rel=\"canonical\" href=\"https://tomdyson.github.io/wagtail-write-api/api/schema-discovery/\">\n \n \n <link rel=\"prev\" href=\"../images/\">\n \n \n <link rel=\"next\" href=\"../authentication/\">\n \n \n \n \n \n <link rel=\"icon\" href=\"../../assets/images/favicon.png\">\n <meta name=\"generator\" content=\"zensical-0.0.31\">\n \n \n \n <title>Schema Discovery API - wagtail-write-api</title>\n \n \n \n \n \n \n <link rel=\"stylesheet\" href=\"../../assets/stylesheets/modern/main.53a7feaf.min.css\">\n \n \n \n \n <link rel=\"stylesheet\" href=\"../../assets/stylesheets/modern/palette.dfe2e883.min.css\">\n \n \n\n\n \n \n \n \n \n \n \n \n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Inter:300,300i,400,400i,500,500i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback\">\n <style>:root{--md-text-font:\"Inter\";--md-code-font:\"JetBrains Mono\"}</style>\n \n \n \n <script>__md_scope=new URL(\"../..\",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+\".\"+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+\".\"+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute(\"data-platform\",navigator.platform)</script>\n \n \n\n \n \n </head>\n \n \n \n \n \n \n \n \n \n <body dir=\"ltr\" data-md-color-scheme=\"default\" data-md-color-primary=\"teal\" data-md-color-accent=\"amber\">\n \n \n <input class=\"md-toggle\" data-md-toggle=\"drawer\" type=\"checkbox\" id=\"__drawer\" autocomplete=\"off\">\n <input class=\"md-toggle\" data-md-toggle=\"search\" type=\"checkbox\" id=\"__search\" autocomplete=\"off\">\n <label class=\"md-overlay\" for=\"__drawer\" aria-label=\"Navigation\"></label>\n <div data-md-component=\"skip\">\n \n \n <a href=\"#schema-discovery-api\" class=\"md-skip\">\n Skip to content\n </a>\n \n </div>\n <div data-md-component=\"announce\">\n \n </div>\n \n \n \n\n \n\n<header class=\"md-header md-header--shadow\" data-md-component=\"header\">\n <nav class=\"md-header__inner md-grid\" aria-label=\"Header\">\n <a href=\"../..\" title=\"wagtail-write-api\" class=\"md-header__button md-logo\" aria-label=\"wagtail-write-api\" data-md-component=\"logo\">\n \n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\n\n </a>\n <label class=\"md-header__button md-icon\" for=\"__drawer\" aria-label=\"Navigation\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-menu\" viewBox=\"0 0 24 24\"><path d=\"M4 5h16M4 12h16M4 19h16\"/></svg>\n </label>\n <div class=\"md-header__title\" data-md-component=\"header-title\">\n <div class=\"md-header__ellipsis\">\n <div class=\"md-header__topic\">\n <span class=\"md-ellipsis\">\n wagtail-write-api\n </span>\n </div>\n <div class=\"md-header__topic\" data-md-component=\"header-topic\">\n <span class=\"md-ellipsis\">\n \n Schema Discovery API\n \n </span>\n </div>\n </div>\n </div>\n \n \n <form class=\"md-header__option\" data-md-component=\"palette\">\n \n \n \n \n <input class=\"md-option\" data-md-color-media=\"none\" data-md-color-scheme=\"default\" data-md-color-primary=\"teal\" data-md-color-accent=\"amber\" aria-label=\"Switch to dark mode\" type=\"radio\" name=\"__palette\" id=\"__palette_0\">\n \n <label class=\"md-header__button md-icon\" title=\"Switch to dark mode\" for=\"__palette_1\" hidden>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-sun\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"/></svg>\n </label>\n \n \n \n \n \n <input class=\"md-option\" data-md-color-media=\"none\" data-md-color-scheme=\"slate\" data-md-color-primary=\"teal\" data-md-color-accent=\"amber\" aria-label=\"Switch to light mode\" type=\"radio\" name=\"__palette\" id=\"__palette_1\">\n \n <label class=\"md-header__button md-icon\" title=\"Switch to light mode\" for=\"__palette_0\" hidden>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-moon\" viewBox=\"0 0 24 24\"><path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"/></svg>\n </label>\n \n \n</form>\n \n \n \n <script>var palette=__md_get(\"__palette\");if(palette&&palette.color){if(\"(prefers-color-scheme)\"===palette.color.media){var media=matchMedia(\"(prefers-color-scheme: light)\"),input=document.querySelector(media.matches?\"[data-md-color-media='(prefers-color-scheme: light)']\":\"[data-md-color-media='(prefers-color-scheme: dark)']\");palette.color.media=input.getAttribute(\"data-md-color-media\"),palette.color.scheme=input.getAttribute(\"data-md-color-scheme\"),palette.color.primary=input.getAttribute(\"data-md-color-primary\"),palette.color.accent=input.getAttribute(\"data-md-color-accent\")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute(\"data-md-color-\"+key,value)}</script>\n \n \n \n \n \n <label class=\"md-header__button md-icon\" for=\"__search\" aria-label=\"Search\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-search\" viewBox=\"0 0 24 24\"><path d=\"m21 21-4.34-4.34\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/></svg>\n </label>\n <div class=\"md-search\" data-md-component=\"search\" role=\"dialog\" aria-label=\"Search\">\n <button type=\"button\" class=\"md-search__button\">\n Search\n </button>\n</div>\n \n \n <div class=\"md-header__source\">\n \n </div>\n </nav>\n \n</header>\n \n <div class=\"md-container\" data-md-component=\"container\">\n \n \n \n \n \n \n <main class=\"md-main\" data-md-component=\"main\">\n <div class=\"md-main__inner md-grid\">\n \n \n \n <div class=\"md-sidebar md-sidebar--primary\" data-md-component=\"sidebar\" data-md-type=\"navigation\" >\n <div class=\"md-sidebar__scrollwrap\">\n <div class=\"md-sidebar__inner\">\n \n\n\n\n<nav class=\"md-nav md-nav--primary\" aria-label=\"Navigation\" data-md-level=\"0\">\n <label class=\"md-nav__title\" for=\"__drawer\">\n <a href=\"../..\" title=\"wagtail-write-api\" class=\"md-nav__button md-logo\" aria-label=\"wagtail-write-api\" data-md-component=\"logo\">\n \n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\n\n </a>\n wagtail-write-api\n </label>\n \n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../..\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Home\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--section md-nav__item--nested\">\n \n \n \n <input class=\"md-nav__toggle md-toggle \" type=\"checkbox\" id=\"__nav_2\" >\n \n \n <label class=\"md-nav__link\" for=\"__nav_2\" id=\"__nav_2_label\" tabindex=\"\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Getting Started\n \n\n \n </span>\n \n \n\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n <nav class=\"md-nav\" data-md-level=\"1\" aria-labelledby=\"__nav_2_label\" aria-expanded=\"false\">\n <label class=\"md-nav__title\" for=\"__nav_2\">\n <span class=\"md-nav__icon md-icon\"></span>\n \n \n Getting Started\n \n\n </label>\n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../getting-started/installation/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Installation\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../getting-started/quickstart/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Quickstart\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../getting-started/configuration/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Configuration\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n </ul>\n </nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested\">\n \n \n \n <input class=\"md-nav__toggle md-toggle \" type=\"checkbox\" id=\"__nav_3\" checked>\n \n \n <label class=\"md-nav__link\" for=\"__nav_3\" id=\"__nav_3_label\" tabindex=\"\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n API Reference\n \n\n \n </span>\n \n \n\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n <nav class=\"md-nav\" data-md-level=\"1\" aria-labelledby=\"__nav_3_label\" aria-expanded=\"true\">\n <label class=\"md-nav__title\" for=\"__nav_3\">\n <span class=\"md-nav__icon md-icon\"></span>\n \n \n API Reference\n \n\n </label>\n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../pages/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Pages API\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../images/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Images API\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--active\">\n \n \n \n \n \n \n \n <label class=\"md-nav__link md-nav__link--active\" for=\"__toc\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Schema Discovery API\n \n\n \n </span>\n \n \n\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n <a href=\"././\" class=\"md-nav__link md-nav__link--active\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Schema Discovery API\n \n\n \n </span>\n \n \n\n </a>\n \n \n\n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"On this page\">\n \n \n \n \n \n \n <label class=\"md-nav__title\" for=\"__toc\">\n <span class=\"md-nav__icon md-icon\"></span>\n On this page\n </label>\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\n \n <li class=\"md-nav__item\">\n <a href=\"#endpoints\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Endpoints\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#list-page-types\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n List page types\n \n </span>\n </a>\n \n <nav class=\"md-nav\" aria-label=\"List page types\">\n <ul class=\"md-nav__list\">\n \n <li class=\"md-nav__item\">\n <a href=\"#response\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Response\n \n </span>\n </a>\n \n</li>\n \n </ul>\n </nav>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#get-page-type-schema\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Get page type schema\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#openapi-specification\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n OpenAPI specification\n \n </span>\n </a>\n \n</li>\n \n </ul>\n \n</nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../authentication/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Authentication\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n </ul>\n </nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--section md-nav__item--nested\">\n \n \n \n <input class=\"md-nav__toggle md-toggle \" type=\"checkbox\" id=\"__nav_4\" >\n \n \n <label class=\"md-nav__link\" for=\"__nav_4\" id=\"__nav_4_label\" tabindex=\"\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Guides\n \n\n \n </span>\n \n \n\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n <nav class=\"md-nav\" data-md-level=\"1\" aria-labelledby=\"__nav_4_label\" aria-expanded=\"false\">\n <label class=\"md-nav__title\" for=\"__nav_4\">\n <span class=\"md-nav__icon md-icon\"></span>\n \n \n Guides\n \n\n </label>\n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../guides/rich-text/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Rich Text\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../guides/streamfield/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n StreamField\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../guides/permissions/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Permissions\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../guides/workflow/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Workflow\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n </ul>\n </nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--section md-nav__item--nested\">\n \n \n \n <input class=\"md-nav__toggle md-toggle \" type=\"checkbox\" id=\"__nav_5\" >\n \n \n <label class=\"md-nav__link\" for=\"__nav_5\" id=\"__nav_5_label\" tabindex=\"\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Development\n \n\n \n </span>\n \n \n\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n <nav class=\"md-nav\" data-md-level=\"1\" aria-labelledby=\"__nav_5_label\" aria-expanded=\"false\">\n <label class=\"md-nav__title\" for=\"__nav_5\">\n <span class=\"md-nav__icon md-icon\"></span>\n \n \n Development\n \n\n </label>\n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../development/contributing/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Contributing\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../development/example-app/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Example App\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n </ul>\n </nav>\n \n </li>\n \n\n \n </ul>\n</nav>\n </div>\n </div>\n </div>\n \n \n \n <div class=\"md-sidebar md-sidebar--secondary\" data-md-component=\"sidebar\" data-md-type=\"toc\" >\n <div class=\"md-sidebar__scrollwrap\">\n \n \n \n \n \n \n \n <input class=\"md-nav__toggle md-toggle\" type=\"checkbox\" id=\"__toc\">\n <div class=\"md-sidebar-button__wrapper\">\n <label class=\"md-sidebar-button\" for=\"__toc\"></label>\n </div>\n \n \n <div class=\"md-sidebar__inner\">\n \n\n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"On this page\">\n \n \n \n \n \n \n <label class=\"md-nav__title\" for=\"__toc\">\n <span class=\"md-nav__icon md-icon\"></span>\n On this page\n </label>\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\n \n <li class=\"md-nav__item\">\n <a href=\"#endpoints\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Endpoints\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#list-page-types\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n List page types\n \n </span>\n </a>\n \n <nav class=\"md-nav\" aria-label=\"List page types\">\n <ul class=\"md-nav__list\">\n \n <li class=\"md-nav__item\">\n <a href=\"#response\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Response\n \n </span>\n </a>\n \n</li>\n \n </ul>\n </nav>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#get-page-type-schema\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Get page type schema\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#openapi-specification\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n OpenAPI specification\n \n </span>\n </a>\n \n</li>\n \n </ul>\n \n</nav>\n </div>\n </div>\n </div>\n \n \n \n <div class=\"md-content\" data-md-component=\"content\">\n \n \n\n\n\n \n\n\n <nav class=\"md-path\" aria-label=\"Navigation\" >\n <ol class=\"md-path__list\">\n \n \n \n \n <li class=\"md-path__item\">\n <a href=\"../..\" class=\"md-path__link\">\n \n <span class=\"md-ellipsis\">\n Home\n </span>\n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-path__item\">\n <a href=\"../pages/\" class=\"md-path__link\">\n \n <span class=\"md-ellipsis\">\n API Reference\n </span>\n\n </a>\n </li>\n \n \n\n \n </ol>\n </nav>\n\n \n <article class=\"md-content__inner md-typeset\">\n \n \n\n<h1 id=\"schema-discovery-api\">Schema Discovery API<a class=\"headerlink\" href=\"#schema-discovery-api\" title=\"Permanent link\">¶</a></h1>\n<p>Discover what page types exist, what fields they accept, and their parent/child constraints. Useful for building dynamic editors that adapt to the site's content model.</p>\n<h2 id=\"endpoints\">Endpoints<a class=\"headerlink\" href=\"#endpoints\" title=\"Permanent link\">¶</a></h2>\n<table>\n<thead>\n<tr>\n<th>Method</th>\n<th>Path</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>GET</code></td>\n<td><code>/schema/page-types/</code></td>\n<td>List all page types</td>\n</tr>\n<tr>\n<td><code>GET</code></td>\n<td><code>/schema/page-types/{type}/</code></td>\n<td>Full schema for a page type</td>\n</tr>\n</tbody>\n</table>\n<hr />\n<h2 id=\"list-page-types\">List page types<a class=\"headerlink\" href=\"#list-page-types\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-text highlight\"><pre><span></span><code><span id=\"__span-0-1\"><a id=\"__codelineno-0-1\" name=\"__codelineno-0-1\" href=\"#__codelineno-0-1\"></a>GET /schema/page-types/\n</span></code></pre></div>\n<h3 id=\"response\">Response<a class=\"headerlink\" href=\"#response\" title=\"Permanent link\">¶</a></h3>\n<div class=\"language-json highlight\"><pre><span></span><code><span id=\"__span-1-1\"><a id=\"__codelineno-1-1\" name=\"__codelineno-1-1\" href=\"#__codelineno-1-1\"></a><span class=\"p\">{</span>\n</span><span id=\"__span-1-2\"><a id=\"__codelineno-1-2\" name=\"__codelineno-1-2\" href=\"#__codelineno-1-2\"></a><span class=\"w\"> </span><span class=\"nt\">"page_types"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span>\n</span><span id=\"__span-1-3\"><a id=\"__codelineno-1-3\" name=\"__codelineno-1-3\" href=\"#__codelineno-1-3\"></a><span class=\"w\"> </span><span class=\"p\">{</span>\n</span><span id=\"__span-1-4\"><a id=\"__codelineno-1-4\" name=\"__codelineno-1-4\" href=\"#__codelineno-1-4\"></a><span class=\"w\"> </span><span class=\"nt\">"type"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"blog.BlogPage"</span><span class=\"p\">,</span>\n</span><span id=\"__span-1-5\"><a id=\"__codelineno-1-5\" name=\"__codelineno-1-5\" href=\"#__codelineno-1-5\"></a><span class=\"w\"> </span><span class=\"nt\">"verbose_name"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"blog page"</span><span class=\"p\">,</span>\n</span><span id=\"__span-1-6\"><a id=\"__codelineno-1-6\" name=\"__codelineno-1-6\" href=\"#__codelineno-1-6\"></a><span class=\"w\"> </span><span class=\"nt\">"allowed_parent_types"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">"blog.BlogIndexPage"</span><span class=\"p\">],</span>\n</span><span id=\"__span-1-7\"><a id=\"__codelineno-1-7\" name=\"__codelineno-1-7\" href=\"#__codelineno-1-7\"></a><span class=\"w\"> </span><span class=\"nt\">"allowed_subpage_types"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[],</span>\n</span><span id=\"__span-1-8\"><a id=\"__codelineno-1-8\" name=\"__codelineno-1-8\" href=\"#__codelineno-1-8\"></a><span class=\"w\"> </span><span class=\"nt\">"fields_summary"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">"id"</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s2\">"title"</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s2\">"slug"</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s2\">"published_date"</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s2\">"body"</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s2\">"authors"</span><span class=\"p\">]</span>\n</span><span id=\"__span-1-9\"><a id=\"__codelineno-1-9\" name=\"__codelineno-1-9\" href=\"#__codelineno-1-9\"></a><span class=\"w\"> </span><span class=\"p\">},</span>\n</span><span id=\"__span-1-10\"><a id=\"__codelineno-1-10\" name=\"__codelineno-1-10\" href=\"#__codelineno-1-10\"></a><span class=\"w\"> </span><span class=\"p\">{</span>\n</span><span id=\"__span-1-11\"><a id=\"__codelineno-1-11\" name=\"__codelineno-1-11\" href=\"#__codelineno-1-11\"></a><span class=\"w\"> </span><span class=\"nt\">"type"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"blog.BlogIndexPage"</span><span class=\"p\">,</span>\n</span><span id=\"__span-1-12\"><a id=\"__codelineno-1-12\" name=\"__codelineno-1-12\" href=\"#__codelineno-1-12\"></a><span class=\"w\"> </span><span class=\"nt\">"verbose_name"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"blog index page"</span><span class=\"p\">,</span>\n</span><span id=\"__span-1-13\"><a id=\"__codelineno-1-13\" name=\"__codelineno-1-13\" href=\"#__codelineno-1-13\"></a><span class=\"w\"> </span><span class=\"nt\">"allowed_parent_types"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">"wagtailcore.Page"</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s2\">"home.HomePage"</span><span class=\"p\">],</span>\n</span><span id=\"__span-1-14\"><a id=\"__codelineno-1-14\" name=\"__codelineno-1-14\" href=\"#__codelineno-1-14\"></a><span class=\"w\"> </span><span class=\"nt\">"allowed_subpage_types"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">"blog.BlogPage"</span><span class=\"p\">],</span>\n</span><span id=\"__span-1-15\"><a id=\"__codelineno-1-15\" name=\"__codelineno-1-15\" href=\"#__codelineno-1-15\"></a><span class=\"w\"> </span><span class=\"nt\">"fields_summary"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">"id"</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s2\">"title"</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s2\">"slug"</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s2\">"intro"</span><span class=\"p\">]</span>\n</span><span id=\"__span-1-16\"><a id=\"__codelineno-1-16\" name=\"__codelineno-1-16\" href=\"#__codelineno-1-16\"></a><span class=\"w\"> </span><span class=\"p\">}</span>\n</span><span id=\"__span-1-17\"><a id=\"__codelineno-1-17\" name=\"__codelineno-1-17\" href=\"#__codelineno-1-17\"></a><span class=\"w\"> </span><span class=\"p\">]</span>\n</span><span id=\"__span-1-18\"><a id=\"__codelineno-1-18\" name=\"__codelineno-1-18\" href=\"#__codelineno-1-18\"></a><span class=\"p\">}</span>\n</span></code></pre></div>\n<p>The <code>allowed_parent_types</code> and <code>allowed_subpage_types</code> reflect the page model's <code>parent_page_types</code> and <code>subpage_types</code> attributes. Use these to build a valid page creation UI -- a client knows which page types can be created under a given parent.</p>\n<hr />\n<h2 id=\"get-page-type-schema\">Get page type schema<a class=\"headerlink\" href=\"#get-page-type-schema\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-text highlight\"><pre><span></span><code><span id=\"__span-2-1\"><a id=\"__codelineno-2-1\" name=\"__codelineno-2-1\" href=\"#__codelineno-2-1\"></a>GET /schema/page-types/blog.BlogPage/\n</span></code></pre></div>\n<p>Returns the full JSON Schema for the create, patch, and read schemas:</p>\n<div class=\"language-json highlight\"><pre><span></span><code><span id=\"__span-3-1\"><a id=\"__codelineno-3-1\" name=\"__codelineno-3-1\" href=\"#__codelineno-3-1\"></a><span class=\"p\">{</span>\n</span><span id=\"__span-3-2\"><a id=\"__codelineno-3-2\" name=\"__codelineno-3-2\" href=\"#__codelineno-3-2\"></a><span class=\"w\"> </span><span class=\"nt\">"type"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"blog.BlogPage"</span><span class=\"p\">,</span>\n</span><span id=\"__span-3-3\"><a id=\"__codelineno-3-3\" name=\"__codelineno-3-3\" href=\"#__codelineno-3-3\"></a><span class=\"w\"> </span><span class=\"nt\">"create_schema"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span>\n</span><span id=\"__span-3-4\"><a id=\"__codelineno-3-4\" name=\"__codelineno-3-4\" href=\"#__codelineno-3-4\"></a><span class=\"w\"> </span><span class=\"nt\">"title"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"BlogPageCreate"</span><span class=\"p\">,</span>\n</span><span id=\"__span-3-5\"><a id=\"__codelineno-3-5\" name=\"__codelineno-3-5\" href=\"#__codelineno-3-5\"></a><span class=\"w\"> </span><span class=\"nt\">"type"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"object"</span><span class=\"p\">,</span>\n</span><span id=\"__span-3-6\"><a id=\"__codelineno-3-6\" name=\"__codelineno-3-6\" href=\"#__codelineno-3-6\"></a><span class=\"w\"> </span><span class=\"nt\">"properties"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span>\n</span><span id=\"__span-3-7\"><a id=\"__codelineno-3-7\" name=\"__codelineno-3-7\" href=\"#__codelineno-3-7\"></a><span class=\"w\"> </span><span class=\"nt\">"type"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"nt\">"type"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"string"</span><span class=\"p\">},</span>\n</span><span id=\"__span-3-8\"><a id=\"__codelineno-3-8\" name=\"__codelineno-3-8\" href=\"#__codelineno-3-8\"></a><span class=\"w\"> </span><span class=\"nt\">"parent"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"nt\">"type"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"integer"</span><span class=\"p\">},</span>\n</span><span id=\"__span-3-9\"><a id=\"__codelineno-3-9\" name=\"__codelineno-3-9\" href=\"#__codelineno-3-9\"></a><span class=\"w\"> </span><span class=\"nt\">"title"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"nt\">"type"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"string"</span><span class=\"p\">},</span>\n</span><span id=\"__span-3-10\"><a id=\"__codelineno-3-10\" name=\"__codelineno-3-10\" href=\"#__codelineno-3-10\"></a><span class=\"w\"> </span><span class=\"nt\">"slug"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"nt\">"anyOf"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[{</span><span class=\"nt\">"type"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"string"</span><span class=\"p\">},</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"nt\">"type"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"null"</span><span class=\"p\">}]},</span>\n</span><span id=\"__span-3-11\"><a id=\"__codelineno-3-11\" name=\"__codelineno-3-11\" href=\"#__codelineno-3-11\"></a><span class=\"w\"> </span><span class=\"nt\">"published_date"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"nt\">"anyOf"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[{</span><span class=\"nt\">"type"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"string"</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"nt\">"format"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"date"</span><span class=\"p\">},</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"nt\">"type"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"null"</span><span class=\"p\">}]},</span>\n</span><span id=\"__span-3-12\"><a id=\"__codelineno-3-12\" name=\"__codelineno-3-12\" href=\"#__codelineno-3-12\"></a><span class=\"w\"> </span><span class=\"nt\">"body"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"nt\">"type"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"array"</span><span class=\"p\">},</span>\n</span><span id=\"__span-3-13\"><a id=\"__codelineno-3-13\" name=\"__codelineno-3-13\" href=\"#__codelineno-3-13\"></a><span class=\"w\"> </span><span class=\"nt\">"authors"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"nt\">"type"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"array"</span><span class=\"p\">}</span>\n</span><span id=\"__span-3-14\"><a id=\"__codelineno-3-14\" name=\"__codelineno-3-14\" href=\"#__codelineno-3-14\"></a><span class=\"w\"> </span><span class=\"p\">},</span>\n</span><span id=\"__span-3-15\"><a id=\"__codelineno-3-15\" name=\"__codelineno-3-15\" href=\"#__codelineno-3-15\"></a><span class=\"w\"> </span><span class=\"nt\">"required"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">"type"</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s2\">"parent"</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s2\">"title"</span><span class=\"p\">]</span>\n</span><span id=\"__span-3-16\"><a id=\"__codelineno-3-16\" name=\"__codelineno-3-16\" href=\"#__codelineno-3-16\"></a><span class=\"w\"> </span><span class=\"p\">},</span>\n</span><span id=\"__span-3-17\"><a id=\"__codelineno-3-17\" name=\"__codelineno-3-17\" href=\"#__codelineno-3-17\"></a><span class=\"w\"> </span><span class=\"nt\">"patch_schema"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"err\">...</span><span class=\"w\"> </span><span class=\"p\">},</span>\n</span><span id=\"__span-3-18\"><a id=\"__codelineno-3-18\" name=\"__codelineno-3-18\" href=\"#__codelineno-3-18\"></a><span class=\"w\"> </span><span class=\"nt\">"read_schema"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"err\">...</span><span class=\"w\"> </span><span class=\"p\">}</span>\n</span><span id=\"__span-3-19\"><a id=\"__codelineno-3-19\" name=\"__codelineno-3-19\" href=\"#__codelineno-3-19\"></a><span class=\"p\">}</span>\n</span></code></pre></div>\n<p>These schemas are the Pydantic models' JSON Schema representation, generated automatically from your Wagtail page models.</p>\n<hr />\n<h2 id=\"openapi-specification\">OpenAPI specification<a class=\"headerlink\" href=\"#openapi-specification\" title=\"Permanent link\">¶</a></h2>\n<p>Django Ninja also generates a full OpenAPI 3.x specification at:</p>\n<div class=\"language-text highlight\"><pre><span></span><code><span id=\"__span-4-1\"><a id=\"__codelineno-4-1\" name=\"__codelineno-4-1\" href=\"#__codelineno-4-1\"></a>GET /api/write/v1/openapi.json\n</span></code></pre></div>\n<p>This can be imported into tools like Postman, Insomnia, or used to generate client SDKs.</p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n </article>\n </div>\n \n \n <script>var tabs=__md_get(\"__tabs\");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(\".tabbed-set\")){var labels=set.querySelector(\".tabbed-labels\");for(var tab of tabs)for(var label of labels.getElementsByTagName(\"label\"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>\n\n<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith(\"__tabbed_\"))</script>\n </div>\n \n <button type=\"button\" class=\"md-top md-icon\" data-md-component=\"top\" hidden>\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-circle-arrow-up\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m16 12-4-4-4 4M12 16V8\"/></svg>\n Back to top\n</button>\n \n </main>\n \n <footer class=\"md-footer\">\n \n \n \n <nav class=\"md-footer__inner md-grid\" aria-label=\"Footer\" >\n \n \n <a href=\"../images/\" class=\"md-footer__link md-footer__link--prev\" aria-label=\"Previous: Images API\">\n <div class=\"md-footer__button md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-arrow-left\" viewBox=\"0 0 24 24\"><path d=\"m12 19-7-7 7-7M19 12H5\"/></svg>\n </div>\n <div class=\"md-footer__title\">\n <span class=\"md-footer__direction\">\n Previous\n </span>\n <div class=\"md-ellipsis\">\n Images API\n </div>\n </div>\n </a>\n \n \n \n <a href=\"../authentication/\" class=\"md-footer__link md-footer__link--next\" aria-label=\"Next: Authentication\">\n <div class=\"md-footer__title\">\n <span class=\"md-footer__direction\">\n Next\n </span>\n <div class=\"md-ellipsis\">\n Authentication\n </div>\n </div>\n <div class=\"md-footer__button md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-arrow-right\" viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"/></svg>\n </div>\n </a>\n \n </nav>\n \n \n <div class=\"md-footer-meta md-typeset\">\n <div class=\"md-footer-meta__inner md-grid\">\n <div class=\"md-copyright\">\n \n <div class=\"md-copyright__highlight\">\n Copyright © 2026 Tom Dyson\n </div>\n \n \n Made with\n <a href=\"https://zensical.org/\" target=\"_blank\" rel=\"noopener\">\n Zensical\n </a>\n \n</div>\n \n \n<div class=\"md-social\">\n \n \n \n \n \n \n \n \n <a href=\"https://github.com/tomdyson/wagtail-write-api\" target=\"_blank\" rel=\"noopener\" title=\"github.com\" class=\"md-social__link\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><!--! Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc.--><path fill=\"currentColor\" d=\"M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2\"/></svg>\n </a>\n \n \n \n \n \n \n \n \n <a href=\"https://pypi.org/project/wagtail-write-api/\" target=\"_blank\" rel=\"noopener\" title=\"pypi.org\" class=\"md-social__link\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><!--! Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc.--><path fill=\"currentColor\" d=\"M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6M286.2 444.7a20.4 20.4 0 1 1 0-40.7 20.4 20.4 0 1 1 0 40.7M167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4m-6.6-183.4a20.4 20.4 0 1 1 0 40.8 20.4 20.4 0 1 1 0-40.8\"/></svg>\n </a>\n \n</div>\n \n </div>\n </div>\n</footer>\n \n </div>\n <div class=\"md-dialog\" data-md-component=\"dialog\">\n <div class=\"md-dialog__inner md-typeset\"></div>\n </div>\n \n \n \n \n \n <script id=\"__config\" type=\"application/json\">{\"annotate\":null,\"base\":\"../..\",\"features\":[\"content.code.annotate\",\"content.code.copy\",\"content.code.select\",\"content.tabs.link\",\"navigation.footer\",\"navigation.indexes\",\"navigation.instant\",\"navigation.instant.prefetch\",\"navigation.path\",\"navigation.sections\",\"navigation.top\",\"navigation.tracking\",\"search.highlight\"],\"search\":\"../../assets/javascripts/workers/search.e2d2d235.min.js\",\"tags\":null,\"translations\":{\"clipboard.copied\":\"Copied to clipboard\",\"clipboard.copy\":\"Copy to clipboard\",\"search.result.more.one\":\"1 more on this page\",\"search.result.more.other\":\"# more on this page\",\"search.result.none\":\"No matching documents\",\"search.result.one\":\"1 matching document\",\"search.result.other\":\"# matching documents\",\"search.result.placeholder\":\"Type to start searching\",\"search.result.term.missing\":\"Missing\",\"select.version\":\"Select version\"},\"version\":null}</script>\n \n \n <script src=\"../../assets/javascripts/bundle.91a19a9e.min.js\"></script>\n \n \n </body>\n</html>",
|
|
3
|
+
"hash": 6839597912910280110
|
|
4
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": {
|
|
3
|
+
"meta": {},
|
|
4
|
+
"content": "<h1 id=\"quickstart\">Quickstart<a class=\"headerlink\" href=\"#quickstart\" title=\"Permanent link\">¶</a></h1>\n<p>A complete walkthrough: install the plugin, create a page via the API, publish it, and read it back.</p>\n<h2 id=\"1-set-up\">1. Set up<a class=\"headerlink\" href=\"#1-set-up\" title=\"Permanent link\">¶</a></h2>\n<p>Follow the <a href=\"../installation/\">Installation</a> instructions, then create a token:</p>\n<div class=\"language-bash highlight\"><pre><span></span><code><span id=\"__span-0-1\"><a id=\"__codelineno-0-1\" name=\"__codelineno-0-1\" href=\"#__codelineno-0-1\"></a>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>drf_create_token<span class=\"w\"> </span>admin\n</span></code></pre></div>\n<p>Save the token for the examples below. We'll use <code>$TOKEN</code> as a placeholder.</p>\n<h2 id=\"2-list-pages\">2. List pages<a class=\"headerlink\" href=\"#2-list-pages\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-bash highlight\"><pre><span></span><code><span id=\"__span-1-1\"><a id=\"__codelineno-1-1\" name=\"__codelineno-1-1\" href=\"#__codelineno-1-1\"></a>curl<span class=\"w\"> </span>-s<span class=\"w\"> </span>-H<span class=\"w\"> </span><span class=\"s2\">"Authorization: Bearer </span><span class=\"nv\">$TOKEN</span><span class=\"s2\">"</span><span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-1-2\"><a id=\"__codelineno-1-2\" name=\"__codelineno-1-2\" href=\"#__codelineno-1-2\"></a><span class=\"w\"> </span>http://localhost:8000/api/write/v1/pages/<span class=\"w\"> </span><span class=\"p\">|</span><span class=\"w\"> </span>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>json.tool\n</span></code></pre></div>\n<div class=\"language-json highlight\"><pre><span></span><code><span id=\"__span-2-1\"><a id=\"__codelineno-2-1\" name=\"__codelineno-2-1\" href=\"#__codelineno-2-1\"></a><span class=\"p\">{</span>\n</span><span id=\"__span-2-2\"><a id=\"__codelineno-2-2\" name=\"__codelineno-2-2\" href=\"#__codelineno-2-2\"></a><span class=\"w\"> </span><span class=\"nt\">"items"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span>\n</span><span id=\"__span-2-3\"><a id=\"__codelineno-2-3\" name=\"__codelineno-2-3\" href=\"#__codelineno-2-3\"></a><span class=\"w\"> </span><span class=\"p\">{</span>\n</span><span id=\"__span-2-4\"><a id=\"__codelineno-2-4\" name=\"__codelineno-2-4\" href=\"#__codelineno-2-4\"></a><span class=\"w\"> </span><span class=\"nt\">"id"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">2</span><span class=\"p\">,</span>\n</span><span id=\"__span-2-5\"><a id=\"__codelineno-2-5\" name=\"__codelineno-2-5\" href=\"#__codelineno-2-5\"></a><span class=\"w\"> </span><span class=\"nt\">"title"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"Home"</span><span class=\"p\">,</span>\n</span><span id=\"__span-2-6\"><a id=\"__codelineno-2-6\" name=\"__codelineno-2-6\" href=\"#__codelineno-2-6\"></a><span class=\"w\"> </span><span class=\"nt\">"slug"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"home"</span><span class=\"p\">,</span>\n</span><span id=\"__span-2-7\"><a id=\"__codelineno-2-7\" name=\"__codelineno-2-7\" href=\"#__codelineno-2-7\"></a><span class=\"w\"> </span><span class=\"nt\">"meta"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span>\n</span><span id=\"__span-2-8\"><a id=\"__codelineno-2-8\" name=\"__codelineno-2-8\" href=\"#__codelineno-2-8\"></a><span class=\"w\"> </span><span class=\"nt\">"type"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">"wagtailcore.Page"</span><span class=\"p\">,</span>\n</span><span id=\"__span-2-9\"><a id=\"__codelineno-2-9\" name=\"__codelineno-2-9\" href=\"#__codelineno-2-9\"></a><span class=\"w\"> </span><span class=\"nt\">"live"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"kc\">true</span><span class=\"p\">,</span>\n</span><span id=\"__span-2-10\"><a id=\"__codelineno-2-10\" name=\"__codelineno-2-10\" href=\"#__codelineno-2-10\"></a><span class=\"w\"> </span><span class=\"nt\">"has_unpublished_changes"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"kc\">false</span><span class=\"p\">,</span>\n</span><span id=\"__span-2-11\"><a id=\"__codelineno-2-11\" name=\"__codelineno-2-11\" href=\"#__codelineno-2-11\"></a><span class=\"w\"> </span><span class=\"nt\">"parent_id"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span>\n</span><span id=\"__span-2-12\"><a id=\"__codelineno-2-12\" name=\"__codelineno-2-12\" href=\"#__codelineno-2-12\"></a><span class=\"w\"> </span><span class=\"p\">}</span>\n</span><span id=\"__span-2-13\"><a id=\"__codelineno-2-13\" name=\"__codelineno-2-13\" href=\"#__codelineno-2-13\"></a><span class=\"w\"> </span><span class=\"p\">}</span>\n</span><span id=\"__span-2-14\"><a id=\"__codelineno-2-14\" name=\"__codelineno-2-14\" href=\"#__codelineno-2-14\"></a><span class=\"w\"> </span><span class=\"p\">],</span>\n</span><span id=\"__span-2-15\"><a id=\"__codelineno-2-15\" name=\"__codelineno-2-15\" href=\"#__codelineno-2-15\"></a><span class=\"w\"> </span><span class=\"nt\">"meta"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span>\n</span><span id=\"__span-2-16\"><a id=\"__codelineno-2-16\" name=\"__codelineno-2-16\" href=\"#__codelineno-2-16\"></a><span class=\"w\"> </span><span class=\"nt\">"total_count"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span>\n</span><span id=\"__span-2-17\"><a id=\"__codelineno-2-17\" name=\"__codelineno-2-17\" href=\"#__codelineno-2-17\"></a><span class=\"w\"> </span><span class=\"p\">}</span>\n</span><span id=\"__span-2-18\"><a id=\"__codelineno-2-18\" name=\"__codelineno-2-18\" href=\"#__codelineno-2-18\"></a><span class=\"p\">}</span>\n</span></code></pre></div>\n<h2 id=\"3-create-a-page\">3. Create a page<a class=\"headerlink\" href=\"#3-create-a-page\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-bash highlight\"><pre><span></span><code><span id=\"__span-3-1\"><a id=\"__codelineno-3-1\" name=\"__codelineno-3-1\" href=\"#__codelineno-3-1\"></a>curl<span class=\"w\"> </span>-s<span class=\"w\"> </span>-X<span class=\"w\"> </span>POST<span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-3-2\"><a id=\"__codelineno-3-2\" name=\"__codelineno-3-2\" href=\"#__codelineno-3-2\"></a><span class=\"w\"> </span>-H<span class=\"w\"> </span><span class=\"s2\">"Authorization: Bearer </span><span class=\"nv\">$TOKEN</span><span class=\"s2\">"</span><span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-3-3\"><a id=\"__codelineno-3-3\" name=\"__codelineno-3-3\" href=\"#__codelineno-3-3\"></a><span class=\"w\"> </span>-H<span class=\"w\"> </span><span class=\"s2\">"Content-Type: application/json"</span><span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-3-4\"><a id=\"__codelineno-3-4\" name=\"__codelineno-3-4\" href=\"#__codelineno-3-4\"></a><span class=\"w\"> </span>-d<span class=\"w\"> </span><span class=\"s1\">'{</span>\n</span><span id=\"__span-3-5\"><a id=\"__codelineno-3-5\" name=\"__codelineno-3-5\" href=\"#__codelineno-3-5\"></a><span class=\"s1\"> "type": "myapp.SimplePage",</span>\n</span><span id=\"__span-3-6\"><a id=\"__codelineno-3-6\" name=\"__codelineno-3-6\" href=\"#__codelineno-3-6\"></a><span class=\"s1\"> "parent": 2,</span>\n</span><span id=\"__span-3-7\"><a id=\"__codelineno-3-7\" name=\"__codelineno-3-7\" href=\"#__codelineno-3-7\"></a><span class=\"s1\"> "title": "Hello from the API",</span>\n</span><span id=\"__span-3-8\"><a id=\"__codelineno-3-8\" name=\"__codelineno-3-8\" href=\"#__codelineno-3-8\"></a><span class=\"s1\"> "body": {</span>\n</span><span id=\"__span-3-9\"><a id=\"__codelineno-3-9\" name=\"__codelineno-3-9\" href=\"#__codelineno-3-9\"></a><span class=\"s1\"> "format": "markdown",</span>\n</span><span id=\"__span-3-10\"><a id=\"__codelineno-3-10\" name=\"__codelineno-3-10\" href=\"#__codelineno-3-10\"></a><span class=\"s1\"> "content": "This page was created via the **write API**."</span>\n</span><span id=\"__span-3-11\"><a id=\"__codelineno-3-11\" name=\"__codelineno-3-11\" href=\"#__codelineno-3-11\"></a><span class=\"s1\"> }</span>\n</span><span id=\"__span-3-12\"><a id=\"__codelineno-3-12\" name=\"__codelineno-3-12\" href=\"#__codelineno-3-12\"></a><span class=\"s1\"> }'</span><span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-3-13\"><a id=\"__codelineno-3-13\" name=\"__codelineno-3-13\" href=\"#__codelineno-3-13\"></a><span class=\"w\"> </span>http://localhost:8000/api/write/v1/pages/<span class=\"w\"> </span><span class=\"p\">|</span><span class=\"w\"> </span>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>json.tool\n</span></code></pre></div>\n<p>The response returns the created page with <code>\"live\": false</code> -- it's a draft by default.</p>\n<h2 id=\"4-publish-the-page\">4. Publish the page<a class=\"headerlink\" href=\"#4-publish-the-page\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-bash highlight\"><pre><span></span><code><span id=\"__span-4-1\"><a id=\"__codelineno-4-1\" name=\"__codelineno-4-1\" href=\"#__codelineno-4-1\"></a>curl<span class=\"w\"> </span>-s<span class=\"w\"> </span>-X<span class=\"w\"> </span>POST<span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-4-2\"><a id=\"__codelineno-4-2\" name=\"__codelineno-4-2\" href=\"#__codelineno-4-2\"></a><span class=\"w\"> </span>-H<span class=\"w\"> </span><span class=\"s2\">"Authorization: Bearer </span><span class=\"nv\">$TOKEN</span><span class=\"s2\">"</span><span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-4-3\"><a id=\"__codelineno-4-3\" name=\"__codelineno-4-3\" href=\"#__codelineno-4-3\"></a><span class=\"w\"> </span>http://localhost:8000/api/write/v1/pages/3/publish/<span class=\"w\"> </span><span class=\"p\">|</span><span class=\"w\"> </span>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>json.tool\n</span></code></pre></div>\n<p>The page is now live. You can also publish on creation by adding <code>\"action\": \"publish\"</code> to the POST body.</p>\n<h2 id=\"5-update-the-page\">5. Update the page<a class=\"headerlink\" href=\"#5-update-the-page\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-bash highlight\"><pre><span></span><code><span id=\"__span-5-1\"><a id=\"__codelineno-5-1\" name=\"__codelineno-5-1\" href=\"#__codelineno-5-1\"></a>curl<span class=\"w\"> </span>-s<span class=\"w\"> </span>-X<span class=\"w\"> </span>PATCH<span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-5-2\"><a id=\"__codelineno-5-2\" name=\"__codelineno-5-2\" href=\"#__codelineno-5-2\"></a><span class=\"w\"> </span>-H<span class=\"w\"> </span><span class=\"s2\">"Authorization: Bearer </span><span class=\"nv\">$TOKEN</span><span class=\"s2\">"</span><span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-5-3\"><a id=\"__codelineno-5-3\" name=\"__codelineno-5-3\" href=\"#__codelineno-5-3\"></a><span class=\"w\"> </span>-H<span class=\"w\"> </span><span class=\"s2\">"Content-Type: application/json"</span><span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-5-4\"><a id=\"__codelineno-5-4\" name=\"__codelineno-5-4\" href=\"#__codelineno-5-4\"></a><span class=\"w\"> </span>-d<span class=\"w\"> </span><span class=\"s1\">'{"title": "Updated title"}'</span><span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-5-5\"><a id=\"__codelineno-5-5\" name=\"__codelineno-5-5\" href=\"#__codelineno-5-5\"></a><span class=\"w\"> </span>http://localhost:8000/api/write/v1/pages/3/<span class=\"w\"> </span><span class=\"p\">|</span><span class=\"w\"> </span>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>json.tool\n</span></code></pre></div>\n<p>PATCH creates a new revision. Only the fields you send are updated; others are preserved.</p>\n<h2 id=\"6-read-the-page-detail\">6. Read the page detail<a class=\"headerlink\" href=\"#6-read-the-page-detail\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-bash highlight\"><pre><span></span><code><span id=\"__span-6-1\"><a id=\"__codelineno-6-1\" name=\"__codelineno-6-1\" href=\"#__codelineno-6-1\"></a>curl<span class=\"w\"> </span>-s<span class=\"w\"> </span>-H<span class=\"w\"> </span><span class=\"s2\">"Authorization: Bearer </span><span class=\"nv\">$TOKEN</span><span class=\"s2\">"</span><span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-6-2\"><a id=\"__codelineno-6-2\" name=\"__codelineno-6-2\" href=\"#__codelineno-6-2\"></a><span class=\"w\"> </span>http://localhost:8000/api/write/v1/pages/3/<span class=\"w\"> </span><span class=\"p\">|</span><span class=\"w\"> </span>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>json.tool\n</span></code></pre></div>\n<p>By default, the detail endpoint returns the latest draft content. Add <code>?version=live</code> to get the published version instead.</p>\n<h2 id=\"7-upload-an-image\">7. Upload an image<a class=\"headerlink\" href=\"#7-upload-an-image\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-bash highlight\"><pre><span></span><code><span id=\"__span-7-1\"><a id=\"__codelineno-7-1\" name=\"__codelineno-7-1\" href=\"#__codelineno-7-1\"></a>curl<span class=\"w\"> </span>-s<span class=\"w\"> </span>-X<span class=\"w\"> </span>POST<span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-7-2\"><a id=\"__codelineno-7-2\" name=\"__codelineno-7-2\" href=\"#__codelineno-7-2\"></a><span class=\"w\"> </span>-H<span class=\"w\"> </span><span class=\"s2\">"Authorization: Bearer </span><span class=\"nv\">$TOKEN</span><span class=\"s2\">"</span><span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-7-3\"><a id=\"__codelineno-7-3\" name=\"__codelineno-7-3\" href=\"#__codelineno-7-3\"></a><span class=\"w\"> </span>-F<span class=\"w\"> </span><span class=\"s2\">"file=@photo.jpg"</span><span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-7-4\"><a id=\"__codelineno-7-4\" name=\"__codelineno-7-4\" href=\"#__codelineno-7-4\"></a><span class=\"w\"> </span>-F<span class=\"w\"> </span><span class=\"s2\">"title=My Photo"</span><span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-7-5\"><a id=\"__codelineno-7-5\" name=\"__codelineno-7-5\" href=\"#__codelineno-7-5\"></a><span class=\"w\"> </span>http://localhost:8000/api/write/v1/images/<span class=\"w\"> </span><span class=\"p\">|</span><span class=\"w\"> </span>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>json.tool\n</span></code></pre></div>\n<h2 id=\"8-delete-a-page\">8. Delete a page<a class=\"headerlink\" href=\"#8-delete-a-page\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-bash highlight\"><pre><span></span><code><span id=\"__span-8-1\"><a id=\"__codelineno-8-1\" name=\"__codelineno-8-1\" href=\"#__codelineno-8-1\"></a>curl<span class=\"w\"> </span>-s<span class=\"w\"> </span>-X<span class=\"w\"> </span>DELETE<span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-8-2\"><a id=\"__codelineno-8-2\" name=\"__codelineno-8-2\" href=\"#__codelineno-8-2\"></a><span class=\"w\"> </span>-H<span class=\"w\"> </span><span class=\"s2\">"Authorization: Bearer </span><span class=\"nv\">$TOKEN</span><span class=\"s2\">"</span><span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-8-3\"><a id=\"__codelineno-8-3\" name=\"__codelineno-8-3\" href=\"#__codelineno-8-3\"></a><span class=\"w\"> </span>http://localhost:8000/api/write/v1/pages/3/\n</span></code></pre></div>\n<p>Returns <code>204 No Content</code> on success.</p>\n<h2 id=\"next-steps\">Next steps<a class=\"headerlink\" href=\"#next-steps\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li><a href=\"../configuration/\">Configuration</a> -- customise settings</li>\n<li><a href=\"../../api/pages/\">Pages API</a> -- full endpoint reference</li>\n<li><a href=\"../../guides/rich-text/\">Rich text guide</a> -- Markdown, HTML, and Wagtail format</li>\n<li><a href=\"../../guides/streamfield/\">StreamField guide</a> -- working with StreamField data</li>\n</ul>",
|
|
5
|
+
"search": [
|
|
6
|
+
{
|
|
7
|
+
"location": null,
|
|
8
|
+
"level": 1,
|
|
9
|
+
"title": "Quickstart",
|
|
10
|
+
"text": "<p>A complete walkthrough: install the plugin, create a page via the API, publish it, and read it back.</p>",
|
|
11
|
+
"path": [],
|
|
12
|
+
"tags": []
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"location": "1-set-up",
|
|
16
|
+
"level": 2,
|
|
17
|
+
"title": "1. Set up",
|
|
18
|
+
"text": "<p>Follow the Installation instructions, then create a token:</p> <pre><code>python manage.py drf_create_token admin\n</code></pre> <p>Save the token for the examples below. We'll use <code>$TOKEN</code> as a placeholder.</p>",
|
|
19
|
+
"path": [],
|
|
20
|
+
"tags": []
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"location": "2-list-pages",
|
|
24
|
+
"level": 2,
|
|
25
|
+
"title": "2. List pages",
|
|
26
|
+
"text": "<pre><code>curl -s -H \"Authorization: Bearer $TOKEN\" \\\n http://localhost:8000/api/write/v1/pages/ | python -m json.tool\n</code></pre> <pre><code>{\n \"items\": [\n {\n \"id\": 2,\n \"title\": \"Home\",\n \"slug\": \"home\",\n \"meta\": {\n \"type\": \"wagtailcore.Page\",\n \"live\": true,\n \"has_unpublished_changes\": false,\n \"parent_id\": 1\n }\n }\n ],\n \"meta\": {\n \"total_count\": 1\n }\n}\n</code></pre>",
|
|
27
|
+
"path": [],
|
|
28
|
+
"tags": []
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"location": "3-create-a-page",
|
|
32
|
+
"level": 2,
|
|
33
|
+
"title": "3. Create a page",
|
|
34
|
+
"text": "<pre><code>curl -s -X POST \\\n -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"type\": \"myapp.SimplePage\",\n \"parent\": 2,\n \"title\": \"Hello from the API\",\n \"body\": {\n \"format\": \"markdown\",\n \"content\": \"This page was created via the **write API**.\"\n }\n }' \\\n http://localhost:8000/api/write/v1/pages/ | python -m json.tool\n</code></pre> <p>The response returns the created page with <code>\"live\": false</code> -- it's a draft by default.</p>",
|
|
35
|
+
"path": [],
|
|
36
|
+
"tags": []
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"location": "4-publish-the-page",
|
|
40
|
+
"level": 2,
|
|
41
|
+
"title": "4. Publish the page",
|
|
42
|
+
"text": "<pre><code>curl -s -X POST \\\n -H \"Authorization: Bearer $TOKEN\" \\\n http://localhost:8000/api/write/v1/pages/3/publish/ | python -m json.tool\n</code></pre> <p>The page is now live. You can also publish on creation by adding <code>\"action\": \"publish\"</code> to the POST body.</p>",
|
|
43
|
+
"path": [],
|
|
44
|
+
"tags": []
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"location": "5-update-the-page",
|
|
48
|
+
"level": 2,
|
|
49
|
+
"title": "5. Update the page",
|
|
50
|
+
"text": "<pre><code>curl -s -X PATCH \\\n -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"title\": \"Updated title\"}' \\\n http://localhost:8000/api/write/v1/pages/3/ | python -m json.tool\n</code></pre> <p>PATCH creates a new revision. Only the fields you send are updated; others are preserved.</p>",
|
|
51
|
+
"path": [],
|
|
52
|
+
"tags": []
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"location": "6-read-the-page-detail",
|
|
56
|
+
"level": 2,
|
|
57
|
+
"title": "6. Read the page detail",
|
|
58
|
+
"text": "<pre><code>curl -s -H \"Authorization: Bearer $TOKEN\" \\\n http://localhost:8000/api/write/v1/pages/3/ | python -m json.tool\n</code></pre> <p>By default, the detail endpoint returns the latest draft content. Add <code>?version=live</code> to get the published version instead.</p>",
|
|
59
|
+
"path": [],
|
|
60
|
+
"tags": []
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"location": "7-upload-an-image",
|
|
64
|
+
"level": 2,
|
|
65
|
+
"title": "7. Upload an image",
|
|
66
|
+
"text": "<pre><code>curl -s -X POST \\\n -H \"Authorization: Bearer $TOKEN\" \\\n -F \"file=@photo.jpg\" \\\n -F \"title=My Photo\" \\\n http://localhost:8000/api/write/v1/images/ | python -m json.tool\n</code></pre>",
|
|
67
|
+
"path": [],
|
|
68
|
+
"tags": []
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"location": "8-delete-a-page",
|
|
72
|
+
"level": 2,
|
|
73
|
+
"title": "8. Delete a page",
|
|
74
|
+
"text": "<pre><code>curl -s -X DELETE \\\n -H \"Authorization: Bearer $TOKEN\" \\\n http://localhost:8000/api/write/v1/pages/3/\n</code></pre> <p>Returns <code>204 No Content</code> on success.</p>",
|
|
75
|
+
"path": [],
|
|
76
|
+
"tags": []
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"location": "next-steps",
|
|
80
|
+
"level": 2,
|
|
81
|
+
"title": "Next steps",
|
|
82
|
+
"text": "<ul> <li>Configuration -- customise settings</li> <li>Pages API -- full endpoint reference</li> <li>Rich text guide -- Markdown, HTML, and Wagtail format</li> <li>StreamField guide -- working with StreamField data</li> </ul>",
|
|
83
|
+
"path": [],
|
|
84
|
+
"tags": []
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"title": "Quickstart",
|
|
88
|
+
"toc": [
|
|
89
|
+
{
|
|
90
|
+
"title": "Quickstart",
|
|
91
|
+
"id": "quickstart",
|
|
92
|
+
"url": "#quickstart",
|
|
93
|
+
"children": [
|
|
94
|
+
{
|
|
95
|
+
"title": "1. Set up",
|
|
96
|
+
"id": "1-set-up",
|
|
97
|
+
"url": "#1-set-up",
|
|
98
|
+
"children": [],
|
|
99
|
+
"level": 2
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"title": "2. List pages",
|
|
103
|
+
"id": "2-list-pages",
|
|
104
|
+
"url": "#2-list-pages",
|
|
105
|
+
"children": [],
|
|
106
|
+
"level": 2
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"title": "3. Create a page",
|
|
110
|
+
"id": "3-create-a-page",
|
|
111
|
+
"url": "#3-create-a-page",
|
|
112
|
+
"children": [],
|
|
113
|
+
"level": 2
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"title": "4. Publish the page",
|
|
117
|
+
"id": "4-publish-the-page",
|
|
118
|
+
"url": "#4-publish-the-page",
|
|
119
|
+
"children": [],
|
|
120
|
+
"level": 2
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"title": "5. Update the page",
|
|
124
|
+
"id": "5-update-the-page",
|
|
125
|
+
"url": "#5-update-the-page",
|
|
126
|
+
"children": [],
|
|
127
|
+
"level": 2
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"title": "6. Read the page detail",
|
|
131
|
+
"id": "6-read-the-page-detail",
|
|
132
|
+
"url": "#6-read-the-page-detail",
|
|
133
|
+
"children": [],
|
|
134
|
+
"level": 2
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"title": "7. Upload an image",
|
|
138
|
+
"id": "7-upload-an-image",
|
|
139
|
+
"url": "#7-upload-an-image",
|
|
140
|
+
"children": [],
|
|
141
|
+
"level": 2
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"title": "8. Delete a page",
|
|
145
|
+
"id": "8-delete-a-page",
|
|
146
|
+
"url": "#8-delete-a-page",
|
|
147
|
+
"children": [],
|
|
148
|
+
"level": 2
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"title": "Next steps",
|
|
152
|
+
"id": "next-steps",
|
|
153
|
+
"url": "#next-steps",
|
|
154
|
+
"children": [],
|
|
155
|
+
"level": 2
|
|
156
|
+
}
|
|
157
|
+
],
|
|
158
|
+
"level": 1
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
},
|
|
162
|
+
"hash": 12783496220452379680
|
|
163
|
+
}
|