Request Schema
{
"$defs": {
"ContentBlock": {
"description": "Model for a content block within a page.\n\nCRITICAL: The 'embed' field has TWO DISTINCT PURPOSES:\n\n1. INDEXING PHASE (importer.py):\n - embed=True: Create vector embedding in langchain_pg_embedding table\n - embed=False: Store in documents table ONLY (no vector embedding)\n\n2. RETRIEVAL PHASE (keyword.py, vector.py, prompt_generator.py):\n - The embed field MUST BE IGNORED completely during:\n * BM25 keyword search content extraction\n * Vector search result processing\n * LLM prompt generation\n - ALL blocks should be included regardless of embed value\n\nNEVER skip blocks based on embed=False during retrieval/search operations!",
"properties": {
"index": {
"default": 0,
"description": "Order index of the content block",
"title": "Index",
"type": "integer"
},
"titel": {
"default": "De titel van de content block",
"description": "Title of the content block",
"title": "Titel",
"type": "string"
},
"content": {
"default": "De inhoud van de content block",
"description": "Content text",
"title": "Content",
"type": "string"
},
"embed": {
"default": true,
"description": "Controls vector embedding creation during INDEXING only. True=create embedding, False=no embedding (context-only). MUST BE IGNORED during retrieval/search/prompt generation!",
"title": "Embed",
"type": "boolean"
},
"property_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Source property name from Umbraco JSON for context labeling",
"title": "Property Name"
}
},
"title": "ContentBlock",
"type": "object"
}
},
"description": "Request model for uploading/updating page content.\n\nSupports both legacy URL-based identification and modern Umbraco GUID-based identification.\nThe umbraco_id field is preferred when available as it provides stable, unique identification\nacross URL changes and redirects.",
"properties": {
"api_key": {
"default": "PAgOD9hk1uOsifLzz5XuTzLRIgfDCSf3",
"description": "API key for authentication",
"title": "Api Key",
"type": "string"
},
"umbraco_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Stable Umbraco node GUID (preferred identifier). Use this for reliable page identification.",
"examples": [
"f4762b01-e4b3-47bf-b030-67e5fb8dc08f"
],
"title": "Umbraco Id"
},
"url": {
"description": "URL path of the page (required for display, fallback for legacy)",
"example": "/behandelingen/operatie-aan-de-stembanden/",
"title": "Url",
"type": "string"
},
"title": {
"description": "Page title",
"example": "Operatie aan de stembanden",
"title": "Title",
"type": "string"
},
"summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Page summary",
"title": "Summary"
},
"content": {
"description": "List of content blocks",
"items": {
"$ref": "#/$defs/ContentBlock"
},
"title": "Content",
"type": "array"
},
"categories": {
"description": "Page categories",
"items": {
"type": "string"
},
"title": "Categories",
"type": "array"
},
"force_update": {
"default": true,
"description": "Force update even if page exists",
"title": "Force Update",
"type": "boolean"
},
"seoIndex": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "SEO index value",
"title": "Seoindex"
},
"contentType": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Content type",
"title": "Contenttype"
},
"createDate": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Creation date",
"title": "Createdate"
},
"updateDate": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Last update date",
"title": "Updatedate"
},
"publicationDate": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Publication date",
"title": "Publicationdate"
},
"snippet": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Short snippet",
"title": "Snippet"
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Page status",
"title": "Status"
},
"pageSummary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Page summary",
"title": "Pagesummary"
},
"ai_content_description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "AI-generated content inventory (200-300 chars)",
"title": "Ai Content Description"
},
"ai_page_purpose": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "AI-generated page purpose/utility (50-100 chars)",
"title": "Ai Page Purpose"
},
"ai_data_extraction": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "AI-extracted structured data from page content",
"title": "Ai Data Extraction"
},
"full_page_content": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Clean combined page content without markdown titles or duplicates (for LLM prompts)",
"title": "Full Page Content"
},
"keywords": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Unified keywords structure: {'primary': [...], 'secondary': [...], 'hidden_intent': [...], 'umbraco': [...]}",
"title": "Keywords"
},
"u_facets": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Umbraco facets",
"title": "U Facets"
},
"u_boost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Search boost value",
"title": "U Boost"
},
"u_indexable": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Whether page is indexable and visible in search results",
"title": "U Indexable"
},
"u_use_for_llm_answer": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": true,
"description": "Whether page content is used in LLM answer generation (defaults to True)",
"title": "U Use For Llm Answer"
},
"is_nested_content": {
"default": false,
"description": "Whether this is nested content from a parent document",
"title": "Is Nested Content",
"type": "boolean"
},
"parent_umbraco_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Parent document's Umbraco GUID if this is nested content",
"title": "Parent Umbraco Id"
},
"nested_property_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Property name that contains this nested content",
"title": "Nested Property Name"
},
"metadata": {
"additionalProperties": true,
"description": "Auto-extracted metadata fields from content properties",
"title": "Metadata",
"type": "object"
},
"website": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Website identifier from route.startItem.path (e.g., 'rioned', 'rioolinfo')",
"title": "Website"
}
},
"required": [
"url",
"title",
"content",
"categories"
],
"title": "UploadRequest",
"type": "object"
}