{"openapi":"3.1.0","info":{"title":"Mentra Headless API v1","description":"The standard interface for retrieving structured content.","version":"v1"},"paths":{"/api/v1/bulk-delete":{"post":{"tags":["Public Write API — Bulk Delete"],"summary":"Bulk Delete Content","description":"Delete multiple content items in a single request.\n\nEach item can be identified by its Mentra `id` (Firestore document ID)\nor by `externalId`. At least one must be provided.\n\n**Cascade mode** (`cascade: true` per item): For hierarchy items\n(level1–level4), setting cascade=true also deletes all descendant items.\nFor example, deleting a Level 1 with cascade will also delete its\nLevel 2, Level 3, and Level 4 children.\n\n**Dry-run mode** (`dryRun: true`): Validates the request and reports\nwhat would be deleted without actually removing any data.\n\nReturns per-item results with the number of cascade-deleted descendants.","operationId":"public_bulk_delete","parameters":[{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteRequestDto"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/import":{"post":{"tags":["Public Write API — Bulk Import"],"summary":"Bulk Import Content","description":"Bulk import content items in a single request.\n\nAccepts up to 100 items mixing standalone and hierarchy content.\nEach item must have an `externalId` for conflict resolution.\n\n**Dry-run mode** (`dryRun: true`): Runs full validation and conflict\ndetection but writes nothing to Firestore.\n\n**Conflict resolution strategies** (`onConflict`):\n- `skip`: Existing items are left unchanged\n- `update`: Existing items are updated (upsert)\n- `fail`: If ANY item already exists, the entire import is aborted with 409","operationId":"public_bulk_import","parameters":[{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkImportRequestDto"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkImportResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/export":{"get":{"tags":["Public Write API — Export"],"summary":"Export All Content","description":"Export all tenant content in bulk-import-compatible format.\n\nReturns content ordered by type (standalone, then level1→level4, then\nSection-native `node` items) with full content bodies (contentJson,\ncontentHtml, contentPlainText).\n\nThe output format is designed for round-tripping: exported items can be\nfed directly back into `POST /api/v1/import` (after setting externalIds\nif not already present).\n\n`node` items carry `sectionKey` + `nodeTypeKey` and are emitted\nparents-before-children, which is what `parentExternalId` resolution on\nimport requires. Each node appears exactly once — import rejects a request\nnaming one node twice (400 `duplicate_item_address`).\n\nSupports pagination via `page` and `pageSize` query params.\nSupports filtering by `type` (standalone, level1..level4, node).\n\n`publishedOnly` defaults to **true**: the export carries the same publish\nand `visibilityTags` filters every other v1 read applies. Pass\n`publishedOnly=false` for a full backup including drafts — that path\nrequires the `read:preview` scope and 403s without it, exactly as\n`/v1/standalone?publishedOnly=false` already does (#1853).","operationId":"public_export_content","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (1-based)","default":1,"title":"Page"},"description":"Page number (1-based)"},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page (max 100)","default":100,"title":"Pagesize"},"description":"Items per page (max 100)"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by type: standalone, level1, level2, level3, level4, node. Omit for all.","title":"Type"},"description":"Filter by type: standalone, level1, level2, level3, level4, node. Omit for all."},{"name":"publishedOnly","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Published, publicly-visible content only (default). Set false to include drafts and hidden items — requires the read:preview scope.","default":true,"title":"Publishedonly"},"description":"Published, publicly-visible content only (default). Set false to include drafts and hidden items — requires the read:preview scope."},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkExportResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/health":{"get":{"tags":["public-v1-health"],"summary":"Public API health check (no auth required)","description":"Health check endpoint for Public API v1.\n\nNo authentication required. Returns basic health status.\nIf valid API key is provided, returns tenant info including tenantName.","operationId":"public_health","parameters":[{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/upload-url":{"post":{"tags":["Public Media API"],"summary":"Upload Media from URL","description":"Download an image from a public URL, process it (compress, WebP), and store it. Returns public URLs for use in content.","operationId":"public_upload_media_url","parameters":[{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaUploadUrlRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/upload":{"post":{"tags":["Public Media API"],"summary":"Upload Media File","description":"Upload a binary image file via multipart/form-data. The image is processed (compressed, WebP) and stored.","operationId":"public_upload_media_file","parameters":[{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_public_upload_media_file"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/{media_id}":{"get":{"tags":["Public Media API"],"summary":"Get Media Metadata","description":"Retrieve metadata and public URLs for a previously uploaded media asset.","operationId":"public_get_media","parameters":[{"name":"media_id","in":"path","required":true,"schema":{"type":"string","title":"Media Id"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaMetadataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Public Media API"],"summary":"Delete Media Asset","description":"Delete a media asset, removing files from storage and decrementing the storage quota.","operationId":"public_delete_media","parameters":[{"name":"media_id","in":"path","required":true,"schema":{"type":"string","title":"Media Id"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media":{"get":{"tags":["Public Media API"],"summary":"List Media Assets","description":"List media assets for the authenticated tenant with pagination.","operationId":"public_list_media","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of items to return.","default":50,"title":"Limit"},"description":"Number of items to return."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination.","default":0,"title":"Offset"},"description":"Offset for pagination."},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by tag.","title":"Tag"},"description":"Filter by tag."},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/menus":{"get":{"tags":["public_api_v1_menus"],"summary":"List navigation menus for a tenant","description":"Get navigation menus for a tenant.\nResolves internal links (Pages, Courses, etc.) to their public paths/slugs.","operationId":"public_list_menus","parameters":[{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by menu location (e.g., 'header', 'footer')","title":"Location"},"description":"Filter by menu location (e.g., 'header', 'footer')"},{"name":"tenantId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tenant ID","title":"Tenantid"},"description":"Tenant ID"},{"name":"tenantName","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tenant Name (alternative to ID)","title":"Tenantname"},"description":"Tenant Name (alternative to ID)"},{"name":"X-Tenant-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MenuResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sections":{"get":{"tags":["Sections"],"summary":"Public List Sections","description":"List the tenant's Sections by ``key`` with their template (discovery).","operationId":"public_list_sections","parameters":[{"name":"If-None-Match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-None-Match"}},{"name":"If-Modified-Since","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-Modified-Since"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sections/{key}/tree":{"get":{"tags":["Sections"],"summary":"Public Get Section Tree","description":"Resolve a Section by ``key`` — its ordered, locale-filtered node tree.","operationId":"public_get_section_tree","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}},{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Locale code (e.g. 'en-US', 'nb-NO'); node slugs + publish state resolve prefix-aware","title":"Locale"},"description":"Locale code (e.g. 'en-US', 'nb-NO'); node slugs + publish state resolve prefix-aware"},{"name":"publishedOnly","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"title":"Publishedonly"}},{"name":"If-None-Match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-None-Match"}},{"name":"If-Modified-Since","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-Modified-Since"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__apis__public_api_v1_sections__models__SectionTreeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sections/{key}/nodes/{nodeId}":{"get":{"tags":["Sections"],"summary":"Get a structured node's full content body","description":"Fetch one structured node's full body: rendered content, SEO/schema.org\nmetadata, ancestor breadcrumbs, and the ``include=``-gated AI extensions.\n\nReachable from either handle: a ``sectionKey`` + node id, or the\n``sectionKey`` a ``/v1/content/by-slug`` hit returns. Mirrors\n``GET /v1/standalone/{id}`` — same ``include=`` vocabulary (plus\n``children`` for container nodes) and the same publish/visibility gates as\nthe tree: a node this locale must not see — or one under a hidden ancestor\n— is a 404, never a draft leak.","operationId":"public_get_section_node","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}},{"name":"nodeId","in":"path","required":true,"schema":{"type":"string","title":"Nodeid"}},{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Locale code (e.g. 'en-US', 'nb-NO'); resolves prefix-aware","title":"Locale"},"description":"Locale code (e.g. 'en-US', 'nb-NO'); resolves prefix-aware"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated: quiz, scenarios, mnemonics, video, sources, children","title":"Include"},"description":"Comma-separated: quiz, scenarios, mnemonics, video, sources, children"},{"name":"publishedOnly","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"title":"Publishedonly"}},{"name":"If-None-Match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-None-Match"}},{"name":"If-Modified-Since","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-Modified-Since"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectionNodeContentDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/content/by-slug/{slug}":{"get":{"tags":["Slug Lookup"],"summary":"Resolve content by slug and locale","description":"Resolve content by slug and locale.\n\nLooks up content across all types (or a specific type) using the\n`slugByLocale` map stored on root documents.\n\n**Fallback chain:**\n1. Search by slugByLocale.{requested locale}\n2. If locale not found, search by slugByLocale.{originalLocale}\n3. If still not found, return 404\n\nReturns minimal metadata for routing. A `standalone` hit is fetched in\nfull from `/standalone/{id}`; a structured hit (level1-4) additionally\ncarries the `sectionKey` of the Section it belongs to, so a slug-routed\nclient can fetch the node's full body via\n`/v1/sections/{sectionKey}/nodes/{id}` (or its tree via\n`/v1/sections/{sectionKey}/tree`).\n\nOnly content with a public read path is surfaced (#1186). Every level hit is\nnow a node, readable via `/v1/sections/{key}/nodes/{id}`, so the search runs\nover all five types; the standalone-only narrowing this used to apply was\nfor tenants without the `structured_sections` flag, and went with the flag\n(#1911 step 5).","operationId":"public_resolve_by_slug","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Locale code (e.g. 'en-US'). Falls back to originalLocale if not found.","title":"Locale"},"description":"Locale code (e.g. 'en-US'). Falls back to originalLocale if not found."},{"name":"contentType","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Limit search to a specific content type: standalone, level1, level2, level3, level4","title":"Contenttype"},"description":"Limit search to a specific content type: standalone, level1, level2, level3, level4"},{"name":"publishedOnly","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"title":"Publishedonly"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlugResolutionResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/standalone/summary":{"get":{"tags":["Standalone Content"],"summary":"Public List Standalone Summary","description":"Lightweight list — returns only metadata (title, slug, cover image, date).","operationId":"public_list_standalone_summary","parameters":[{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"}},{"name":"updatedSince","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO-8601 timestamp","title":"Updatedsince"},"description":"ISO-8601 timestamp"},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact-match filter on the editorial tags array (e.g. page:forside)","title":"Tag"},"description":"Exact-match filter on the editorial tags array (e.g. page:forside)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Pagesize"}},{"name":"publishedOnly","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"title":"Publishedonly"}},{"name":"If-None-Match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-None-Match"}},{"name":"If-Modified-Since","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-Modified-Since"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_StandaloneContentSummaryDto_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/standalone":{"get":{"tags":["Standalone Content"],"summary":"Public List Standalone Content","description":"Full list — returns metadata for all standalone content.","operationId":"public_list_standalone_content","parameters":[{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"}},{"name":"updatedSince","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO-8601 timestamp","title":"Updatedsince"},"description":"ISO-8601 timestamp"},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact-match filter on the editorial tags array (e.g. page:forside)","title":"Tag"},"description":"Exact-match filter on the editorial tags array (e.g. page:forside)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Pagesize"}},{"name":"publishedOnly","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"title":"Publishedonly"}},{"name":"If-None-Match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-None-Match"}},{"name":"If-Modified-Since","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-Modified-Since"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_StandaloneContentDto_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public Write API"],"summary":"Create Standalone Content","description":"Create standalone content via API key.\n\nIf `externalId` is provided and a document with that ID already exists\nfor this tenant, performs an upsert (update) and returns 200 instead of 201.\n\nContent can be provided in Markdown, HTML, or TipTap JSON format.\nUse `contentFormat` to specify, or omit for auto-detection.","operationId":"public_create_standalone","parameters":[{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandaloneContentCreateDto"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandaloneContentWriteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/standalone/{contentId}":{"get":{"tags":["Standalone Content"],"summary":"Get Standalone Content by ID","description":"Get a single standalone content item with full content body and optional AI content.","operationId":"public_get_standalone_content","parameters":[{"name":"contentId","in":"path","required":true,"schema":{"type":"string","title":"Contentid"}},{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Locale code (e.g. 'en-US', 'nb-NO')","title":"Locale"},"description":"Locale code (e.g. 'en-US', 'nb-NO')"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list: quiz, scenarios, mnemonics, video, layout, sources","title":"Include"},"description":"Comma-separated list: quiz, scenarios, mnemonics, video, layout, sources"},{"name":"publishedOnly","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"title":"Publishedonly"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandaloneContentDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Public Write API"],"summary":"Update Standalone Content","description":"Update standalone content by ID via API key.\n\nSupports partial updates — only provided fields are modified.\nContent format auto-conversion applies if contentFormat is specified.","operationId":"public_update_standalone","parameters":[{"name":"contentId","in":"path","required":true,"schema":{"type":"string","title":"Contentid"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandaloneContentUpdateDto"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandaloneContentWriteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Public Write API"],"summary":"Delete Standalone Content","description":"Delete standalone content by ID via API key.\n\nPermanently removes the document and all its translations.\nReturns 404 if the content doesn't exist or belongs to another tenant.","operationId":"public_delete_standalone","parameters":[{"name":"contentId","in":"path","required":true,"schema":{"type":"string","title":"Contentid"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandaloneContentDeleteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/surfaces":{"get":{"tags":["Surfaces"],"summary":"Public List Surfaces","description":"List the tenant's surface keys + labels (discovery for integrators).","operationId":"public_list_surfaces","parameters":[{"name":"If-None-Match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-None-Match"}},{"name":"If-Modified-Since","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-Modified-Since"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SurfaceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/surfaces/{key}":{"get":{"tags":["Surfaces"],"summary":"Public Get Surface","description":"Resolve a surface by key — the curated, ordered, currently-active content.","operationId":"public_get_surface","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}},{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Locale code (e.g. 'en-US', 'nb-NO'); placements follow the content's published locales","title":"Locale"},"description":"Locale code (e.g. 'en-US', 'nb-NO'); placements follow the content's published locales"},{"name":"If-None-Match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-None-Match"}},{"name":"If-Modified-Since","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-Modified-Since"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SurfaceContentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/level1":{"post":{"tags":["Public Write API — Hierarchy"],"summary":"Create Level 1 Content","description":"Create a Level 1 item (root of hierarchy) via API key.\n\nIf `externalId` is provided and already exists for this tenant,\nperforms an upsert (update) and returns 200 instead of 201.","operationId":"public_create_level1","parameters":[{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentCreateDto"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentWriteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/level1/{itemId}":{"put":{"tags":["Public Write API — Hierarchy"],"summary":"Update Level 1 Content","description":"Update a Level 1 item by ID via API key. Supports partial updates.","operationId":"public_update_level1","parameters":[{"name":"itemId","in":"path","required":true,"schema":{"type":"string","title":"Itemid"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentUpdateDto"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentWriteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Public Write API — Hierarchy"],"summary":"Delete Level 1 Content","description":"Delete a Level 1 item by ID via API key. Does NOT cascade-delete children.","operationId":"public_delete_level1","parameters":[{"name":"itemId","in":"path","required":true,"schema":{"type":"string","title":"Itemid"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentDeleteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/level2":{"post":{"tags":["Public Write API — Hierarchy"],"summary":"Create Level 2 Content","description":"Create a Level 2 item via API key. Requires `parentId` referencing a valid Level 1 item.","operationId":"public_create_level2","parameters":[{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentCreateDto"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentWriteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/level2/{itemId}":{"put":{"tags":["Public Write API — Hierarchy"],"summary":"Update Level 2 Content","description":"Update a Level 2 item by ID via API key. Supports partial updates and re-parenting.","operationId":"public_update_level2","parameters":[{"name":"itemId","in":"path","required":true,"schema":{"type":"string","title":"Itemid"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentUpdateDto"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentWriteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Public Write API — Hierarchy"],"summary":"Delete Level 2 Content","description":"Delete a Level 2 item by ID via API key. Does NOT cascade-delete children.","operationId":"public_delete_level2","parameters":[{"name":"itemId","in":"path","required":true,"schema":{"type":"string","title":"Itemid"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentDeleteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/level3":{"post":{"tags":["Public Write API — Hierarchy"],"summary":"Create Level 3 Content","description":"Create a Level 3 item via API key. Requires `parentId` referencing a valid Level 2 item.","operationId":"public_create_level3","parameters":[{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentCreateDto"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentWriteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/level3/{itemId}":{"put":{"tags":["Public Write API — Hierarchy"],"summary":"Update Level 3 Content","description":"Update a Level 3 item by ID via API key. Supports partial updates and re-parenting.","operationId":"public_update_level3","parameters":[{"name":"itemId","in":"path","required":true,"schema":{"type":"string","title":"Itemid"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentUpdateDto"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentWriteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Public Write API — Hierarchy"],"summary":"Delete Level 3 Content","description":"Delete a Level 3 item by ID via API key. Does NOT cascade-delete children.","operationId":"public_delete_level3","parameters":[{"name":"itemId","in":"path","required":true,"schema":{"type":"string","title":"Itemid"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentDeleteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/level4":{"post":{"tags":["Public Write API — Hierarchy"],"summary":"Create Level 4 Content","description":"Create a Level 4 item via API key. Requires `parentId` referencing a valid Level 3 item.","operationId":"public_create_level4","parameters":[{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentCreateDto"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentWriteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/level4/{itemId}":{"put":{"tags":["Public Write API — Hierarchy"],"summary":"Update Level 4 Content","description":"Update a Level 4 item by ID via API key. Supports partial updates and re-parenting.","operationId":"public_update_level4","parameters":[{"name":"itemId","in":"path","required":true,"schema":{"type":"string","title":"Itemid"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentUpdateDto"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentWriteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Public Write API — Hierarchy"],"summary":"Delete Level 4 Content","description":"Delete a Level 4 item by ID via API key.","operationId":"public_delete_level4","parameters":[{"name":"itemId","in":"path","required":true,"schema":{"type":"string","title":"Itemid"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyContentDeleteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sections/{sectionKey}/nodes":{"post":{"tags":["Public Write API — Hierarchy"],"summary":"Create a Section Node","description":"Create a node in a Section via API key.\n\n`nodeTypeKey` must be a node type of the Section's template. Omit\n`parentId` to create at the Section root; otherwise it must reference a\nnode in the same Section whose type allows this one as a child.\n\nIf `externalId` is provided and already exists for this Section and node\ntype, performs an upsert (update) and returns 200 instead of 201.","operationId":"public_create_section_node","parameters":[{"name":"sectionKey","in":"path","required":true,"schema":{"type":"string","title":"Sectionkey"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectionNodeCreateDto"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectionNodeWriteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sections/{sectionKey}/nodes/{nodeId}":{"put":{"tags":["Public Write API — Hierarchy"],"summary":"Update a Section Node","description":"Update a node in a Section by ID via API key. Supports partial updates.\n\nA node's type is immutable and moves are not supported here — changing\n`parentId` returns 400 (`reparent_unsupported`).","operationId":"public_update_section_node","parameters":[{"name":"sectionKey","in":"path","required":true,"schema":{"type":"string","title":"Sectionkey"}},{"name":"nodeId","in":"path","required":true,"schema":{"type":"string","title":"Nodeid"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectionNodeUpdateDto"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectionNodeWriteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Public Write API — Hierarchy"],"summary":"Delete a Section Node","description":"Delete a node in a Section by ID via API key.\n\nDoes NOT cascade — a node that still has children returns 409\n(`node_has_children`).","operationId":"public_delete_section_node","parameters":[{"name":"sectionKey","in":"path","required":true,"schema":{"type":"string","title":"Sectionkey"}},{"name":"nodeId","in":"path","required":true,"schema":{"type":"string","title":"Nodeid"}},{"name":"X-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Authorization"}},{"name":"X-Dbtn-Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dbtn-Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectionNodeDeleteResponseDto"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AuthorDto":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"bio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bio"},"avatarUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatarurl"}},"type":"object","required":["id","name"],"title":"AuthorDto","description":"DTO for Author information."},"Body_public_upload_media_file":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Image file to upload."},"alt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alt","description":"Alt text for accessibility."},"tags":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tags","description":"Comma-separated tags for categorization."}},"type":"object","required":["file"],"title":"Body_public_upload_media_file"},"BulkDeleteItemDto":{"properties":{"type":{"type":"string","title":"Type"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalid"},"cascade":{"type":"boolean","title":"Cascade","default":false}},"additionalProperties":false,"type":"object","required":["type"],"title":"BulkDeleteItemDto","description":"A single item in a bulk delete request."},"BulkDeleteItemResultDto":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalid"},"type":{"type":"string","title":"Type"},"action":{"type":"string","title":"Action"},"cascadeDeleted":{"type":"integer","title":"Cascadedeleted","default":0},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["type","action"],"title":"BulkDeleteItemResultDto","description":"Result for a single item in a bulk delete response."},"BulkDeleteRequestDto":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BulkDeleteItemDto"},"type":"array","title":"Items"},"dryRun":{"type":"boolean","title":"Dryrun","default":false}},"additionalProperties":false,"type":"object","required":["items"],"title":"BulkDeleteRequestDto","description":"Request body for bulk delete endpoint."},"BulkDeleteResponseDto":{"properties":{"totalItems":{"type":"integer","title":"Totalitems"},"deleted":{"type":"integer","title":"Deleted"},"notFound":{"type":"integer","title":"Notfound"},"failed":{"type":"integer","title":"Failed"},"dryRun":{"type":"boolean","title":"Dryrun","default":false},"results":{"items":{"$ref":"#/components/schemas/BulkDeleteItemResultDto"},"type":"array","title":"Results"}},"type":"object","required":["totalItems","deleted","notFound","failed","results"],"title":"BulkDeleteResponseDto","description":"Response body for bulk delete endpoint."},"BulkExportItemDto":{"properties":{"type":{"type":"string","title":"Type"},"id":{"type":"string","title":"Id"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalid"},"title":{"type":"string","title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"contentJson":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Contentjson"},"contentHtml":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contenthtml"},"contentFormat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contentformat","default":"json"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"coverImageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverimageurl"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order"},"parentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentid"},"parentExternalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentexternalid"},"visibilityTags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Visibilitytags"},"seoMetadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Seometadata"},"isPublished":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ispublished"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Createdat"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updatedat"},"sectionKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sectionkey"},"nodeTypeKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nodetypekey"},"parentNodeTypeKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentnodetypekey"}},"type":"object","required":["type","id","title"],"title":"BulkExportItemDto","description":"A single item in a bulk export response.\n\nMirror of BulkImportItemDto so exported data can be round-tripped\nback through the import endpoint.\n\nSection-addressed items (#1248) are typed ``node`` and carry ``sectionKey``\n+ ``nodeTypeKey``, the same address the import item uses — a node's identity\nis ``(sectionKey, nodeTypeKey, externalId)``, not ``externalId`` alone, so\nall three are needed for the re-import to land in the right place.\n\n``parentId`` is null on a ``node`` item by design: import gives it\nprecedence over ``parentExternalId``, and the exported value is a\nsource-tenant Firestore id that names nothing in the target. See\n``export_section_nodes`` for the full rationale."},"BulkExportResponseDto":{"properties":{"totalItems":{"type":"integer","title":"Totalitems"},"items":{"items":{"$ref":"#/components/schemas/BulkExportItemDto"},"type":"array","title":"Items"},"page":{"type":"integer","title":"Page"},"pageSize":{"type":"integer","title":"Pagesize"},"hasNext":{"type":"boolean","title":"Hasnext"},"nextPage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nextpage"}},"type":"object","required":["totalItems","items","page","pageSize","hasNext"],"title":"BulkExportResponseDto","description":"Response body for the content export endpoint."},"BulkImportItemDto":{"properties":{"type":{"type":"string","title":"Type"},"externalId":{"type":"string","title":"Externalid"},"title":{"type":"string","title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"contentFormat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contentformat"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"coverImageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverimageurl"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale","default":"en"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order"},"parentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentid"},"parentExternalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentexternalid"},"visibilityTags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Visibilitytags"},"seoMetadata":{"anyOf":[{"$ref":"#/components/schemas/PublicSeoMetadataInput"},{"type":"null"}]},"sectionKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sectionkey"},"nodeTypeKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nodetypekey"},"parentNodeTypeKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentnodetypekey"}},"additionalProperties":false,"type":"object","required":["type","externalId","title"],"title":"BulkImportItemDto","description":"A single item in a bulk import request.\n\nEach item specifies its type, along with the standard content fields.\nThe externalId field is REQUIRED for bulk import to enable\nidempotent upsert and conflict resolution.\n\nTwo ways to address structured content (#1231):\n\n- **Level-addressed** — ``level1``..``level4``. The Curriculum ladder only,\n  kept working unchanged for existing integrators.\n- **Section-addressed** — ``node``, plus ``sectionKey`` and ``nodeTypeKey``.\n  Names a Section by its public key and a node type by the Section's own\n  template key, so a branching, flat, deeper-than-four, or tenant-authored\n  template is importable at whatever depth it permits.\n\n``sectionKey`` / ``nodeTypeKey`` are accepted **only** with ``type: \"node\"``\n— sending them on a ``level*`` item is rejected rather than ignored, since\na client that names a Section means it."},"BulkImportItemResultDto":{"properties":{"externalId":{"type":"string","title":"Externalid"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"type":{"type":"string","title":"Type"},"action":{"type":"string","title":"Action"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"sectionKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sectionkey"},"nodeTypeKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nodetypekey"}},"type":"object","required":["externalId","type","action"],"title":"BulkImportItemResultDto","description":"Result for a single item in a bulk import response."},"BulkImportRequestDto":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BulkImportItemDto"},"type":"array","title":"Items"},"onConflict":{"type":"string","title":"Onconflict","default":"update"},"dryRun":{"type":"boolean","title":"Dryrun","default":false}},"additionalProperties":false,"type":"object","required":["items"],"title":"BulkImportRequestDto","description":"Request body for bulk import endpoint.\n\nAccepts an array of items with a conflict resolution strategy:\n- 'skip': If externalId exists, skip the item (no update)\n- 'update': If externalId exists, update the existing item (upsert)\n- 'fail': If any externalId exists, abort the entire import\n\nSet dryRun=true to validate the import without writing any data."},"BulkImportResponseDto":{"properties":{"totalItems":{"type":"integer","title":"Totalitems"},"created":{"type":"integer","title":"Created"},"updated":{"type":"integer","title":"Updated"},"skipped":{"type":"integer","title":"Skipped"},"failed":{"type":"integer","title":"Failed"},"dryRun":{"type":"boolean","title":"Dryrun","default":false},"results":{"items":{"$ref":"#/components/schemas/BulkImportItemResultDto"},"type":"array","title":"Results"}},"type":"object","required":["totalItems","created","updated","skipped","failed","results"],"title":"BulkImportResponseDto","description":"Response body for bulk import endpoint.\n\nProvides a summary of the import operation plus per-item results.\nWhen dryRun=true, no data is written and actions use would_* prefixes."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status","default":"ok"},"timestamp":{"type":"string","title":"Timestamp"},"version":{"type":"string","title":"Version","default":"1.0.0"},"ok":{"type":"boolean","title":"Ok","default":true},"tenantId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenantid"},"tenantName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenantname"},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes"}},"type":"object","required":["timestamp"],"title":"HealthResponse","description":"Health check response."},"HierarchyContentCreateDto":{"properties":{"title":{"type":"string","title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"contentFormat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contentformat"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"coverImageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverimageurl"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale","default":"en"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalid"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order"},"parentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentid"},"visibilityTags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Visibilitytags"},"seoMetadata":{"anyOf":[{"$ref":"#/components/schemas/PublicSeoMetadataInput"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["title"],"title":"HierarchyContentCreateDto","description":"Public DTO for creating structured hierarchy content (Level 1-4) via API key.\n\nAccepts content in multiple formats (Markdown, HTML, or JSON).\nIf externalId is provided and already exists, performs upsert (update).\nFor Level 2-4, the parentId field is required to place content in the hierarchy."},"HierarchyContentDeleteResponseDto":{"properties":{"id":{"type":"string","title":"Id"},"level":{"type":"integer","title":"Level"},"deleted":{"type":"boolean","title":"Deleted","default":true}},"type":"object","required":["id","level"],"title":"HierarchyContentDeleteResponseDto","description":"Public DTO returned after delete operations on hierarchy content."},"HierarchyContentUpdateDto":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"contentFormat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contentformat"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"coverImageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverimageurl"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalid"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order"},"parentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentid"},"visibilityTags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Visibilitytags"},"seoMetadata":{"anyOf":[{"$ref":"#/components/schemas/PublicSeoMetadataInput"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"HierarchyContentUpdateDto","description":"Public DTO for updating structured hierarchy content (Level 1-4) via API key.\n\nAll fields are optional for partial updates.\nContent format auto-conversion applies if contentFormat is specified."},"HierarchyContentWriteResponseDto":{"properties":{"id":{"type":"string","title":"Id"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalid"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"level":{"type":"integer","title":"Level"},"parentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentid"},"locale":{"type":"string","title":"Locale"},"action":{"type":"string","title":"Action"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Createdat"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updatedat"}},"type":"object","required":["id","level","locale","action"],"title":"HierarchyContentWriteResponseDto","description":"Public DTO returned after create/update operations on hierarchy content.\n\nIncludes the content ID, external ID, parent reference, and key metadata.\nThe 'action' field indicates whether the item was created or updated (for upsert)."},"MediaDeleteResponse":{"properties":{"mediaId":{"type":"string","title":"Mediaid"},"deleted":{"type":"boolean","title":"Deleted"},"message":{"type":"string","title":"Message"},"bytesFreed":{"type":"integer","title":"Bytesfreed","description":"Bytes removed from storage quota.","default":0}},"type":"object","required":["mediaId","deleted","message"],"title":"MediaDeleteResponse","description":"Response for DELETE media."},"MediaListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MediaMetadataResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"MediaListResponse","description":"Response for listing media assets."},"MediaMetadataResponse":{"properties":{"mediaId":{"type":"string","title":"Mediaid"},"tenantId":{"type":"string","title":"Tenantid"},"originalUrl":{"type":"string","title":"Originalurl","description":"Public URL of the original image in Firebase Storage."},"processedUrl":{"type":"string","title":"Processedurl","description":"Storage URL (legacy, same as originalUrl). Use cdnUrl for optimized delivery."},"cdnUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cdnurl","description":"ImageKit CDN URL for optimized delivery with on-the-fly transforms. Recommended for display."},"filename":{"type":"string","title":"Filename"},"contentType":{"type":"string","title":"Contenttype"},"sizeBytes":{"type":"integer","title":"Sizebytes"},"alt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alt"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"createdAt":{"type":"string","title":"Createdat"},"source":{"type":"string","title":"Source","description":"Upload source: 'api_url' or 'api_file'.","default":"api"}},"type":"object","required":["mediaId","tenantId","originalUrl","processedUrl","filename","contentType","sizeBytes","createdAt"],"title":"MediaMetadataResponse","description":"Response for GET media metadata."},"MediaUploadResponse":{"properties":{"mediaId":{"type":"string","title":"Mediaid","description":"Unique media asset ID for retrieval and deletion."},"originalUrl":{"type":"string","title":"Originalurl","description":"Public URL of the original image in Firebase Storage."},"processedUrl":{"type":"string","title":"Processedurl","description":"Storage URL (legacy, same as originalUrl). Use cdnUrl for optimized delivery."},"cdnUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cdnurl","description":"ImageKit CDN URL for optimized delivery with on-the-fly transforms. Recommended for display."},"filename":{"type":"string","title":"Filename","description":"Sanitized filename used for storage."},"contentType":{"type":"string","title":"Contenttype","description":"MIME type of the uploaded image."},"sizeBytes":{"type":"integer","title":"Sizebytes","description":"Total bytes stored."},"alt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alt","description":"Alt text if provided."},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"Tags if provided."},"createdAt":{"type":"string","title":"Createdat","description":"ISO-8601 timestamp of upload."}},"type":"object","required":["mediaId","originalUrl","processedUrl","filename","contentType","sizeBytes","createdAt"],"title":"MediaUploadResponse","description":"Response returned after a successful media upload."},"MediaUploadUrlRequest":{"properties":{"sourceUrl":{"type":"string","title":"Sourceurl","description":"Public URL of the image to download and process."},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename","description":"Optional filename override. If omitted, derived from URL."},"alt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alt","description":"Alt text for accessibility."},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"Optional tags for categorization."}},"type":"object","required":["sourceUrl"],"title":"MediaUploadUrlRequest","description":"Request body for URL-based media upload."},"MenuResponse":{"properties":{"menus":{"items":{"$ref":"#/components/schemas/NavigationMenuDto"},"type":"array","title":"Menus"}},"type":"object","required":["menus"],"title":"MenuResponse"},"NavigationMenuDto":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"location":{"type":"string","title":"Location"},"items":{"items":{"$ref":"#/components/schemas/NavigationMenuItemDto"},"type":"array","title":"Items"}},"type":"object","required":["id","name","location","items"],"title":"NavigationMenuDto"},"NavigationMenuItemDto":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"type":{"type":"string","title":"Type"},"targetType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Targettype"},"targetId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Targetid"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"sectionKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sectionkey"},"openInNewTab":{"type":"boolean","title":"Openinnewtab","default":false},"children":{"items":{"$ref":"#/components/schemas/NavigationMenuItemDto"},"type":"array","title":"Children","default":[]}},"type":"object","required":["id","label","type"],"title":"NavigationMenuItemDto"},"NodeBreadcrumbDto":{"properties":{"id":{"type":"string","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}},"type":"object","required":["id"],"title":"NodeBreadcrumbDto","description":"One ancestor on the path to a node — its id, title, and per-locale slug.\n\nRoot→parent order (the node itself is not included). A typed companion to\nthe ``BreadcrumbList`` schema.org block in ``seoMetadata``, so a consuming\nsite can render breadcrumbs without parsing JSON-LD."},"NodeTypeSummaryDto":{"properties":{"key":{"type":"string","title":"Key"},"singular":{"type":"string","title":"Singular"},"plural":{"type":"string","title":"Plural"},"capabilities":{"items":{"type":"string"},"type":"array","title":"Capabilities"}},"type":"object","required":["key","singular","plural","capabilities"],"title":"NodeTypeSummaryDto"},"PaginatedResponse_StandaloneContentDto_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/StandaloneContentDto"},"type":"array","title":"Items"},"page":{"type":"integer","title":"Page"},"pageSize":{"type":"integer","title":"Pagesize"},"total":{"type":"integer","title":"Total"},"hasNext":{"type":"boolean","title":"Hasnext"},"nextPage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nextpage"}},"type":"object","required":["items","page","pageSize","total","hasNext"],"title":"PaginatedResponse[StandaloneContentDto]"},"PaginatedResponse_StandaloneContentSummaryDto_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/StandaloneContentSummaryDto"},"type":"array","title":"Items"},"page":{"type":"integer","title":"Page"},"pageSize":{"type":"integer","title":"Pagesize"},"total":{"type":"integer","title":"Total"},"hasNext":{"type":"boolean","title":"Hasnext"},"nextPage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nextpage"}},"type":"object","required":["items","page","pageSize","total","hasNext"],"title":"PaginatedResponse[StandaloneContentSummaryDto]"},"PublicOpenGraphMetadata":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"siteName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sitename"}},"additionalProperties":true,"type":"object","title":"PublicOpenGraphMetadata","description":"Open Graph metadata for social media sharing."},"PublicResearchSourceDto":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"url":{"type":"string","title":"Url"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},"type":"object","required":["url"],"title":"PublicResearchSourceDto","description":"A research source (citation) behind a content piece.\n\nPublic-safe projection of the research context saved on the item by the\neditor / deep research: only the source's title, URL, and kind are\nexposed — never the fetched page text, internal notes, uploaded files,\nor research chat history."},"PublicSeoMetadata":{"properties":{"metaTitle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metatitle"},"metaDescription":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metadescription"},"focusKeyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Focuskeyword"},"focusKeyphrase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Focuskeyphrase"},"focusKeywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Focuskeywords"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"suggestedSlug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggestedslug"},"canonicalUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canonicalurl"},"readingTime":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Readingtime"},"ogTitle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ogtitle"},"ogDescription":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ogdescription"},"ogImage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ogimage"},"twitterCard":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twittercard"},"twitterTitle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twittertitle"},"twitterDescription":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twitterdescription"},"twitterImage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twitterimage"},"metaTags":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metatags"},"structuredData":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Structureddata"},"openGraph":{"anyOf":[{"$ref":"#/components/schemas/PublicOpenGraphMetadata"},{"type":"null"}]},"twitterCardMetadata":{"anyOf":[{"$ref":"#/components/schemas/PublicTwitterCardMetadata"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"PublicSeoMetadata","description":"SEO metadata for content items."},"PublicSeoMetadataInput":{"properties":{"metaTitle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metatitle"},"metaDescription":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metadescription"},"focusKeyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Focuskeyword"},"focusKeywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Focuskeywords"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"canonicalUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canonicalurl"},"readingTime":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Readingtime"}},"additionalProperties":false,"type":"object","title":"PublicSeoMetadataInput","description":"SEO metadata input for public write API."},"PublicTwitterCardMetadata":{"properties":{"card":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image"},"site":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site"},"creator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator"}},"additionalProperties":true,"type":"object","title":"PublicTwitterCardMetadata","description":"Twitter Card metadata for social media sharing."},"SectionListItemDto":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"templateId":{"type":"string","title":"Templateid"},"basePath":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Basepath"},"template":{"anyOf":[{"$ref":"#/components/schemas/TemplateSummaryDto"},{"type":"null"}]}},"type":"object","required":["key","label","templateId"],"title":"SectionListItemDto","description":"Discovery entry — the ``key`` is the contract a consuming site renders."},"SectionListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SectionListItemDto"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"SectionListResponse"},"SectionMetaDto":{"properties":{"key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"templateId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Templateid"},"basePath":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Basepath"}},"type":"object","title":"SectionMetaDto"},"SectionNodeContentDto":{"properties":{"id":{"type":"string","title":"Id"},"sectionKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sectionkey"},"nodeTypeKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nodetypekey"},"parentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentid"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"},"coverImageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverimageurl"},"media":{"anyOf":[{},{"type":"null"}],"title":"Media"},"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"depth":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Depth"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Createdat"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updatedat"},"publishedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publishedat"},"breadcrumbs":{"items":{"$ref":"#/components/schemas/NodeBreadcrumbDto"},"type":"array","title":"Breadcrumbs"},"seoMetadata":{"anyOf":[{"$ref":"#/components/schemas/PublicSeoMetadata"},{"type":"null"}]},"contentHtml":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contenthtml"},"contentJson":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Contentjson"},"contentPlainText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contentplaintext"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"mnemonicSteps":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Mnemonicsteps"},"quizData":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Quizdata"},"scenarios":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Scenarios"},"fullStoryVideoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fullstoryvideourl"},"fullStoryVideoUrls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fullstoryvideourls"},"morphVideoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Morphvideourl"},"researchSources":{"anyOf":[{"items":{"$ref":"#/components/schemas/PublicResearchSourceDto"},"type":"array"},{"type":"null"}],"title":"Researchsources"},"children":{"anyOf":[{"items":{"$ref":"#/components/schemas/SectionTreeNodeDto"},"type":"array"},{"type":"null"}],"title":"Children"}},"type":"object","required":["id"],"title":"SectionNodeContentDto","description":"A structured node's full content body — the structured peer of\n``StandaloneContentDto`` (#1186).\n\nNavigation (id/title/slug/children) comes from the tree read; this is the\nper-node detail: the rendered body, SEO/schema.org metadata, ancestor\nbreadcrumbs, and the same ``include=``-gated AI extensions the standalone\ndetail exposes. A container node with no attached content still resolves —\nbody fields are null, but ``title`` / ``breadcrumbs`` / ``seoMetadata``\n(and ``children`` when requested) make it a renderable index page."},"SectionNodeCreateDto":{"properties":{"nodeTypeKey":{"type":"string","title":"Nodetypekey"},"title":{"type":"string","title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"contentFormat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contentformat"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"coverImageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverimageurl"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale","default":"en"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalid"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order"},"parentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentid"},"visibilityTags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Visibilitytags"},"seoMetadata":{"anyOf":[{"$ref":"#/components/schemas/PublicSeoMetadataInput"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["nodeTypeKey","title"],"title":"SectionNodeCreateDto","description":"Public DTO for creating a node inside a named Section via API key.\n\n`nodeTypeKey` must be a node type of the Section's template. Omit\n`parentId` to create at the Section root (valid only for a root type of\nthat template); otherwise it must reference a node in the same Section\nwhose type allows this one as a child.\nIf externalId is provided and already exists in this Section for this node\ntype, performs upsert (update)."},"SectionNodeDeleteResponseDto":{"properties":{"id":{"type":"string","title":"Id"},"sectionKey":{"type":"string","title":"Sectionkey"},"nodeTypeKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nodetypekey"},"deleted":{"type":"boolean","title":"Deleted","default":true}},"type":"object","required":["id","sectionKey"],"title":"SectionNodeDeleteResponseDto","description":"Public DTO returned after deleting a Section node."},"SectionNodeUpdateDto":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"contentFormat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contentformat"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"coverImageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverimageurl"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalid"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order"},"parentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentid"},"visibilityTags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Visibilitytags"},"seoMetadata":{"anyOf":[{"$ref":"#/components/schemas/PublicSeoMetadataInput"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"SectionNodeUpdateDto","description":"Public DTO for updating a node inside a named Section via API key.\n\nAll fields optional for partial updates. A node's type is immutable, so\n`nodeTypeKey` is not accepted here. `parentId` may be echoed back\nunchanged; changing it is refused (`reparent_unsupported`). No surface\nmoves a node between parents — re-deriving a subtree's ancestry is the\nwork that was never built (#1911 step 2)."},"SectionNodeWriteResponseDto":{"properties":{"id":{"type":"string","title":"Id"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalid"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"sectionKey":{"type":"string","title":"Sectionkey"},"nodeTypeKey":{"type":"string","title":"Nodetypekey"},"parentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentid"},"depth":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Depth"},"locale":{"type":"string","title":"Locale"},"action":{"type":"string","title":"Action"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Createdat"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updatedat"}},"type":"object","required":["id","sectionKey","nodeTypeKey","locale","action"],"title":"SectionNodeWriteResponseDto","description":"Public DTO returned after create/update operations on a Section node.\n\nCarries `sectionKey` + `nodeTypeKey` + `depth` where the level-addressed\nresponse carries `level` — the same information generalized past four."},"SectionTreeNodeDto":{"properties":{"id":{"type":"string","title":"Id"},"nodeTypeKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nodetypekey"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"children":{"items":{"$ref":"#/components/schemas/SectionTreeNodeDto"},"type":"array","title":"Children"}},"type":"object","required":["id"],"title":"SectionTreeNodeDto"},"SlugResolutionResult":{"properties":{"id":{"type":"string","title":"Id"},"contentType":{"type":"string","title":"Contenttype"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"resolvedLocale":{"type":"string","title":"Resolvedlocale"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"coverImageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverimageurl"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalid"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Createdat"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updatedat"},"publishedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publishedat"},"sectionKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sectionkey"}},"type":"object","required":["id","contentType","resolvedLocale"],"title":"SlugResolutionResult","description":"Result of resolving a slug to a content item."},"StandaloneContentCreateDto":{"properties":{"title":{"type":"string","title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"contentFormat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contentformat"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"coverImageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverimageurl"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale","default":"en"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalid"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"visibilityTags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Visibilitytags"},"seoMetadata":{"anyOf":[{"$ref":"#/components/schemas/PublicSeoMetadataInput"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["title"],"title":"StandaloneContentCreateDto","description":"Public DTO for creating standalone content via API key.\n\nAccepts content in multiple formats (Markdown, HTML, or JSON).\nIf externalId is provided and already exists, performs upsert (update)."},"StandaloneContentDeleteResponseDto":{"properties":{"id":{"type":"string","title":"Id"},"deleted":{"type":"boolean","title":"Deleted","default":true}},"type":"object","required":["id"],"title":"StandaloneContentDeleteResponseDto","description":"Public DTO returned after delete operations."},"StandaloneContentDto":{"properties":{"id":{"type":"string","title":"Id"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalid"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"coverImageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverimageurl"},"media":{"anyOf":[{},{"type":"null"}],"title":"Media"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"visibilityTags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Visibilitytags"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Createdat"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updatedat"},"publishedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publishedat"},"seoMetadata":{"anyOf":[{"$ref":"#/components/schemas/PublicSeoMetadata"},{"type":"null"}]},"author":{"anyOf":[{"$ref":"#/components/schemas/AuthorDto"},{"type":"null"}]},"contentHtml":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contenthtml"},"contentJson":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Contentjson"},"contentPlainText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contentplaintext"},"fullStoryVideoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fullstoryvideourl"},"fullStoryVideoUrls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fullstoryvideourls"},"morphVideoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Morphvideourl"},"mnemonicSteps":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Mnemonicsteps"},"quizData":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Quizdata"},"scenarios":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Scenarios"},"templateId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Templateid"},"layout":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Layout"},"researchSources":{"anyOf":[{"items":{"$ref":"#/components/schemas/PublicResearchSourceDto"},"type":"array"},{"type":"null"}],"title":"Researchsources"}},"type":"object","required":["id"],"title":"StandaloneContentDto","description":"DTO for standalone content not tied to hierarchy."},"StandaloneContentSummaryDto":{"properties":{"id":{"type":"string","title":"Id"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalid"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"coverImageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverimageurl"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"visibilityTags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Visibilitytags"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Createdat"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updatedat"},"publishedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publishedat"},"author":{"anyOf":[{"$ref":"#/components/schemas/AuthorDto"},{"type":"null"}]}},"type":"object","required":["id"],"title":"StandaloneContentSummaryDto","description":"Lightweight DTO for standalone content list views."},"StandaloneContentUpdateDto":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"contentFormat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contentformat"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"coverImageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverimageurl"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalid"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"visibilityTags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Visibilitytags"},"seoMetadata":{"anyOf":[{"$ref":"#/components/schemas/PublicSeoMetadataInput"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"StandaloneContentUpdateDto","description":"Public DTO for updating standalone content via API key.\n\nAll fields are optional for partial updates.\nContent format auto-conversion applies if contentFormat is specified."},"StandaloneContentWriteResponseDto":{"properties":{"id":{"type":"string","title":"Id"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalid"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"locale":{"type":"string","title":"Locale"},"action":{"type":"string","title":"Action"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Createdat"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updatedat"}},"type":"object","required":["id","locale","action"],"title":"StandaloneContentWriteResponseDto","description":"Public DTO returned after create/update operations.\n\nIncludes the content ID, external ID, and key metadata.\nThe 'action' field indicates whether the item was created or updated (for upsert)."},"SurfaceContentResponse":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"maxItems":{"type":"integer","title":"Maxitems"},"ordering":{"type":"string","title":"Ordering"},"items":{"items":{"$ref":"#/components/schemas/SurfaceItemDto"},"type":"array","title":"Items"}},"type":"object","required":["key","label","maxItems","ordering","items"],"title":"SurfaceContentResponse","description":"A resolved surface: metadata plus the ordered, currently-active items.\n\n``items`` may be empty (all placements expired / unpublished / removed)\n— still a 200, so sites can render or hide the section deterministically."},"SurfaceItemDto":{"properties":{"id":{"type":"string","title":"Id"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Externalid"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"coverImageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverimageurl"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"visibilityTags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Visibilitytags"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Createdat"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updatedat"},"publishedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publishedat"},"author":{"anyOf":[{"$ref":"#/components/schemas/AuthorDto"},{"type":"null"}]},"targetKind":{"type":"string","title":"Targetkind","default":"standalone"},"sectionKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sectionkey"}},"type":"object","required":["id"],"title":"SurfaceItemDto","description":"A resolved surface item — a standalone teaser or a node teaser (#1147).\n\nSuperset of the standalone summary shape so a mixed surface serves one\nuniformly-typed, ordered list. ``targetKind`` discriminates; ``sectionKey``\nis populated only for ``node`` teasers, carrying the handle a site uses to\ndeep-link into the Section the entry node belongs to (``None`` for\nstandalone items, and for a node whose Section predates keys)."},"SurfaceListItemDto":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"}},"type":"object","required":["key","label"],"title":"SurfaceListItemDto","description":"Discovery entry — the key is the contract a consuming site renders."},"SurfaceListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SurfaceListItemDto"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"SurfaceListResponse"},"TemplateSummaryDto":{"properties":{"vocabulary":{"additionalProperties":true,"type":"object","title":"Vocabulary"},"depth":{"type":"integer","title":"Depth"},"nodeTypes":{"items":{"$ref":"#/components/schemas/NodeTypeSummaryDto"},"type":"array","title":"Nodetypes"}},"type":"object","required":["vocabulary","depth","nodeTypes"],"title":"TemplateSummaryDto"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"app__apis__public_api_v1_sections__models__SectionTreeResponse":{"properties":{"section":{"$ref":"#/components/schemas/SectionMetaDto"},"vocabulary":{"additionalProperties":true,"type":"object","title":"Vocabulary"},"nodes":{"items":{"$ref":"#/components/schemas/SectionTreeNodeDto"},"type":"array","title":"Nodes"},"nodeCount":{"type":"integer","title":"Nodecount"}},"type":"object","required":["section","vocabulary","nodes","nodeCount"],"title":"SectionTreeResponse"}},"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"API key for authentication. Obtain from the Mentra CMS under Admin > API Keys. Keys are scoped: read:content, write:content, write:media."}}},"servers":[{"url":"https://api.mentra.systems","description":"Mentra Production API"}]}