{"openapi":"3.1.0","info":{"title":"ZAIA GENERATIVE AI SERVICES","description":"User Management and Authentication API","version":"1.0.0"},"paths":{"/llm-service/health":{"get":{"tags":["general"],"summary":"Health check","description":"Verify the application is running.","operationId":"health_check_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Check Api Health Get"}}}}}}},"/llm-service/llm/configured-models":{"get":{"tags":["llm"],"summary":"List configured AI models","description":"Return the statically configured AI models from the model resolver.","operationId":"list_configured_models_api_llm_configured_models_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Configured Models Api Llm Configured Models Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/llm-service/llm/completions":{"post":{"tags":["llm"],"summary":"Create LLM completion.","description":"Execute a non-streaming LLM completion with automatic model resolution.","operationId":"create_completion_api_llm_completions_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_create_completion_api_llm_completions_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMCompletionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/llm-service/llm/completions:stream":{"post":{"tags":["llm"],"summary":"Stream LLM completion.","description":"Execute a streaming LLM completion with automatic model resolution.","operationId":"stream_completion_api_llm_completions_stream_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_stream_completion_api_llm_completions_stream_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/llm-service/audio/transcriptions":{"post":{"tags":["audio"],"summary":"Transcribe audio.","description":"Transcribe an uploaded audio file with the configured Groq audio provider.","operationId":"transcribe_audio_api_audio_transcriptions_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_transcribe_audio_api_audio_transcriptions_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioTranscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/llm-service/image/models":{"get":{"tags":["image"],"summary":"List available image generation models","description":"Return the available image generation models from all configured providers.","operationId":"list_image_models_api_image_models_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageModelsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/llm-service/image/generate":{"post":{"tags":["image"],"summary":"Generate images","description":"Generate images using Replicate API with support for reference images.","operationId":"generate_image_api_image_generate_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_image_api_image_generate_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageGenerationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/llm-service/image/jobs":{"post":{"tags":["image"],"summary":"Submit an image generation job","description":"Enqueue an image generation request and return a job_id immediately. Poll GET /image/jobs/{job_id} for the result. Use this instead of POST /image/generate for slow models to avoid long-lived HTTP connections.","operationId":"submit_image_job_api_image_jobs_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_submit_image_job_api_image_jobs_post"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageJobSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/llm-service/image/jobs/{job_id}":{"get":{"tags":["image"],"summary":"Get image generation job status","description":"Return the current status of a previously submitted image generation job. Terminal states populate either 'result' (completed) or 'error'/'error_status' (failed). Returns 404 once the job's TTL has expired.","operationId":"get_image_job_api_image_jobs__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageJobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/llm-service/docx/extract-markers":{"post":{"tags":["docx"],"summary":"Extract markers from DOCX","description":"Extract all marker blocks from a DOCX document.","operationId":"extract_markers_api_docx_extract_markers_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_extract_markers_api_docx_extract_markers_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractMarkersResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/llm-service/docx/replace-markers":{"post":{"tags":["docx"],"summary":"Replace markers in DOCX","description":"Replace marker blocks with given values and return processed DOCX.","operationId":"replace_markers_api_docx_replace_markers_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_replace_markers_api_docx_replace_markers_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/llm-service/docx/validate":{"post":{"tags":["docx"],"summary":"Validate DOCX markers","description":"Validate that all required markers are present in the document.","operationId":"validate_markers_api_docx_validate_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_validate_markers_api_docx_validate_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/llm-service/docx/preview":{"post":{"tags":["docx"],"summary":"Preview DOCX replacements","description":"Preview which markers will be replaced (dry-run).","operationId":"preview_replacements_api_docx_preview_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_preview_replacements_api_docx_preview_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/llm-service/files/upload":{"post":{"tags":["files"],"summary":"Upload a file","description":"Upload a file to storage in a specified folder path.","operationId":"upload_file_api_files_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_file_api_files_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Upload File Api Files Upload Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/llm-service/files/{path}":{"get":{"tags":["files"],"summary":"Download a file","description":"Download a file by its storage path.","operationId":"download_file_api_files__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["files"],"summary":"Delete a file","description":"Delete a file by its storage path.","operationId":"delete_file_api_files__path__delete","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete File Api Files  Path  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"tags":["files"],"summary":"Check if file exists","description":"Check if a file exists by its storage path.","operationId":"check_file_exists_api_files__path__head","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/llm-service/folders/{folder_path}":{"get":{"tags":["folders"],"summary":"List folder contents","description":"List all files in a folder.","operationId":"list_folder_api_folders__folder_path__get","parameters":[{"name":"folder_path","in":"path","required":true,"schema":{"type":"string","title":"Folder Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Folder Api Folders  Folder Path  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["folders"],"summary":"Delete folder","description":"Delete all files in a folder.","operationId":"delete_folder_api_folders__folder_path__delete","parameters":[{"name":"folder_path","in":"path","required":true,"schema":{"type":"string","title":"Folder Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Folder Api Folders  Folder Path  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AudioTranscriptionResponse":{"properties":{"text":{"type":"string","title":"Text","description":"The transcribed text."},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","description":"Detected or requested language code when reported by the provider."},"duration_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration Seconds","description":"Total transcribed audio duration in seconds when reported."}},"type":"object","required":["text"],"title":"AudioTranscriptionResponse","description":"Response schema for audio transcription."},"Body_create_completion_api_llm_completions_post":{"properties":{"task_context":{"type":"string","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/TaskContextRequest"},"title":"Task Context","description":"Task context."},"system_prompt":{"type":"string","title":"System Prompt","description":"The system prompt that sets the behavior and context for the LLM.","default":"You are a helpful assistant."},"user_prompt":{"type":"string","title":"User Prompt","description":"The user's input prompt or question.","default":"What is the capital of France?"},"provider_name":{"type":"string","title":"Provider Name","description":"The LLM provider name (e.g., 'openai', 'anthropic', 'google', 'meta', 'groq').","default":"openai"},"model_type":{"type":"string","title":"Model Type","description":"The model type variant ('standard' or 'extended').","default":"standard"},"context_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context Data","description":"Optional context data as JSON string."},"output_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Format","description":"Optional JSON schema describing the expected output format."},"language":{"type":"string","title":"Language","description":"Response language code (e.g., 'en', 'es', 'fr').","default":"en"},"temperature":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.0},{"type":"null"}],"title":"Temperature","description":"Sampling temperature for response generation.","default":1.0},"max_tokens":{"anyOf":[{"type":"integer","exclusiveMinimum":10.0},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens in the response.","default":4096},"files":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Files","description":"Optional JSON array of base64 file objects, e.g. '[{\"base64_data\":\"...\",\"mime_type\":\"image/png\"}]'."},"web_search":{"type":"boolean","title":"Web Search","description":"Whether to use web search (if supported by provider).","default":false},"search_domain_filter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search Domain Filter","description":"Optional JSON array string of domains to restrict search results to."},"search_recency_filter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search Recency Filter","description":"Optional time filter for search results (e.g., 'month', 'week')."}},"type":"object","required":["task_context"],"title":"Body_create_completion_api_llm_completions_post"},"Body_extract_markers_api_docx_extract_markers_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"start_marker":{"type":"string","title":"Start Marker","default":"<sz>"},"end_marker":{"type":"string","title":"End Marker","default":"<ez>"},"separator":{"type":"string","title":"Separator","default":"="},"include_headers":{"type":"boolean","title":"Include Headers","default":true},"include_footers":{"type":"boolean","title":"Include Footers","default":true}},"type":"object","required":["file"],"title":"Body_extract_markers_api_docx_extract_markers_post"},"Body_generate_image_api_image_generate_post":{"properties":{"task_context":{"type":"string","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/TaskContextRequest"},"title":"Task Context","description":"Task context."},"prompt":{"type":"string","title":"Prompt","description":"Text description of the image to generate."},"model":{"type":"string","title":"Model","description":"Full model identifier (e.g., 'black-forest-labs/flux-schnell')."},"aspect_ratio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aspect Ratio","description":"Aspect ratio (1:1, 16:9, 9:16, 4:3, 3:4, etc.)."},"num_images":{"anyOf":[{"type":"string"},{"type":"integer"}],"title":"Num Images","description":"Number of images to generate (1-4).","default":1},"strength":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}],"title":"Strength","description":"Denoising strength for img2img (0.0-1.0). Lower keeps output closer to input."},"guidance_scale":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}],"title":"Guidance Scale","description":"How closely to follow the prompt (1.0-20.0)."},"disable_safety_checker":{"type":"boolean","title":"Disable Safety Checker","description":"Disable the safety checker.","default":false},"reference_images":{"items":{"type":"string","format":"binary"},"type":"array","title":"Reference Images","description":"Reference images for image-to-image generation (multipart upload).","default":[]}},"type":"object","required":["task_context","prompt","model"],"title":"Body_generate_image_api_image_generate_post"},"Body_preview_replacements_api_docx_preview_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"values":{"type":"string","title":"Values","description":"JSON string met voorgestelde waarden"},"start_marker":{"type":"string","title":"Start Marker","default":"<sz>"},"end_marker":{"type":"string","title":"End Marker","default":"<ez>"},"separator":{"type":"string","title":"Separator","default":"="}},"type":"object","required":["file","values"],"title":"Body_preview_replacements_api_docx_preview_post"},"Body_replace_markers_api_docx_replace_markers_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"values":{"type":"string","title":"Values","description":"JSON string met field_name -> value"},"start_marker":{"type":"string","title":"Start Marker","default":"<sz>"},"end_marker":{"type":"string","title":"End Marker","default":"<ez>"},"separator":{"type":"string","title":"Separator","default":"="}},"type":"object","required":["file","values"],"title":"Body_replace_markers_api_docx_replace_markers_post"},"Body_stream_completion_api_llm_completions_stream_post":{"properties":{"task_context":{"type":"string","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/TaskContextRequest"},"title":"Task Context","description":"Task context."},"system_prompt":{"type":"string","title":"System Prompt","description":"The system prompt that sets the behavior and context for the LLM."},"user_prompt":{"type":"string","title":"User Prompt","description":"The user's input prompt or question."},"provider_name":{"type":"string","title":"Provider Name","description":"The LLM provider name (e.g., 'openai', 'anthropic', 'google', 'meta', 'groq')."},"model_type":{"type":"string","title":"Model Type","description":"The model type variant ('standard' or 'extended')."},"context_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context Data","description":"Optional context data as JSON string."},"output_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Format","description":"Optional JSON schema describing the expected output format."},"language":{"type":"string","title":"Language","description":"Response language code (e.g., 'en', 'es', 'fr').","default":"en"},"temperature":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.0},{"type":"null"}],"title":"Temperature","description":"Sampling temperature for response generation."},"max_tokens":{"anyOf":[{"type":"integer","exclusiveMinimum":10.0},{"type":"null"}],"title":"Max Tokens","description":"Maximum number of tokens in the response.","default":4096},"files":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Files","description":"Optional JSON array of base64 file objects, e.g. '[{\"base64_data\":\"...\",\"mime_type\":\"image/png\"}]'."},"web_search":{"type":"boolean","title":"Web Search","description":"Whether to use web search (if supported by provider).","default":false},"search_domain_filter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search Domain Filter","description":"Optional JSON array string of domains to restrict search results to."},"search_recency_filter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search Recency Filter","description":"Optional time filter for search results (e.g., 'month', 'week')."}},"type":"object","required":["task_context","system_prompt","user_prompt","provider_name","model_type"],"title":"Body_stream_completion_api_llm_completions_stream_post"},"Body_submit_image_job_api_image_jobs_post":{"properties":{"task_context":{"type":"string","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/TaskContextRequest"},"title":"Task Context","description":"Task context."},"prompt":{"type":"string","title":"Prompt","description":"Text description of the image to generate."},"model":{"type":"string","title":"Model","description":"Full model identifier."},"aspect_ratio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aspect Ratio","description":"Aspect ratio."},"num_images":{"anyOf":[{"type":"string"},{"type":"integer"}],"title":"Num Images","description":"Number of images (1-4).","default":1},"strength":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}],"title":"Strength","description":"Denoising strength for img2img."},"guidance_scale":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}],"title":"Guidance Scale","description":"Guidance scale."},"disable_safety_checker":{"type":"boolean","title":"Disable Safety Checker","description":"Disable safety checker.","default":false},"reference_images":{"items":{"type":"string","format":"binary"},"type":"array","title":"Reference Images","description":"Reference images for img2img.","default":[]}},"type":"object","required":["task_context","prompt","model"],"title":"Body_submit_image_job_api_image_jobs_post"},"Body_transcribe_audio_api_audio_transcriptions_post":{"properties":{"task_context":{"type":"string","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/TaskContextRequest"},"title":"Task Context","description":"Task context."},"file":{"type":"string","format":"binary","title":"File"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"}},"type":"object","required":["task_context","file"],"title":"Body_transcribe_audio_api_audio_transcriptions_post"},"Body_upload_file_api_files_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"folder_path":{"type":"string","title":"Folder Path","description":"Target folder path (e.g., 'module/user/project')"}},"type":"object","required":["file","folder_path"],"title":"Body_upload_file_api_files_upload_post"},"Body_validate_markers_api_docx_validate_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"required_markers":{"type":"string","title":"Required Markers","description":"JSON array van vereiste marker namen"},"start_marker":{"type":"string","title":"Start Marker","default":"<sz>"},"end_marker":{"type":"string","title":"End Marker","default":"<ez>"},"separator":{"type":"string","title":"Separator","default":"="}},"type":"object","required":["file","required_markers"],"title":"Body_validate_markers_api_docx_validate_post"},"ExtractMarkersResponse":{"properties":{"markers":{"items":{"$ref":"#/components/schemas/MarkerResponse"},"type":"array","title":"Markers"},"count":{"type":"integer","title":"Count"},"markers_dict":{"additionalProperties":{"type":"string"},"type":"object","title":"Markers Dict"}},"type":"object","required":["markers","count","markers_dict"],"title":"ExtractMarkersResponse","description":"Response voor marker extractie."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImageGenerationResponse":{"properties":{"images":{"items":{"type":"string"},"type":"array","title":"Images","description":"List of generated images as base64 data URLs"},"model":{"type":"string","title":"Model","description":"The model identifier used for generation"},"provider":{"type":"string","title":"Provider","description":"The provider name (e.g., 'replicate')"},"usage":{"anyOf":[{"$ref":"#/components/schemas/ImageGenerationUsageResponse"},{"type":"null"}],"description":"Usage and cost statistics for this generation (null when unavailable)"}},"type":"object","required":["images","model","provider"],"title":"ImageGenerationResponse","description":"Response schema for image generation.\n\nAttributes:\n    images: List of generated images as base64 data URLs.\n    model: The model identifier used for generation.\n    provider: The provider name (e.g., 'replicate').","examples":[{"images":["data:image/png;base64,iVBORw0KGgo..."],"model":"black-forest-labs/flux-schnell","provider":"replicate","usage":{"cost":0.003,"is_estimated":true,"model":"black-forest-labs/flux-schnell","num_images":1,"provider":"replicate"}}]},"ImageGenerationUsageResponse":{"properties":{"model":{"type":"string","title":"Model","description":"Model identifier used"},"provider":{"type":"string","title":"Provider","description":"Provider name"},"num_images":{"type":"integer","title":"Num Images","description":"Number of images generated"},"cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost","description":"Total cost in USD (null if unknown)"},"prompt_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Prompt Tokens","description":"Prompt tokens (provider-reported)"},"completion_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Completion Tokens","description":"Completion tokens (provider-reported)"},"total_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Tokens","description":"Total tokens used"},"is_estimated":{"type":"boolean","title":"Is Estimated","description":"True when cost is estimated from a static pricing table","default":false}},"type":"object","required":["model","provider","num_images"],"title":"ImageGenerationUsageResponse","description":"Usage and cost statistics for an image generation operation."},"ImageJobStatusResponse":{"properties":{"job_id":{"type":"string","title":"Job Id","description":"Job identifier"},"status":{"type":"string","title":"Status","description":"One of: 'pending', 'running', 'completed', 'failed'"},"result":{"anyOf":[{"$ref":"#/components/schemas/ImageGenerationResponse"},{"type":"null"}],"description":"Generation result, only present when status='completed'"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Human-readable error message, only present when status='failed'"},"error_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Error Status","description":"HTTP status code that would have been returned by the legacy sync endpoint"}},"type":"object","required":["job_id","status"],"title":"ImageJobStatusResponse","description":"Polled status of an image generation job.\n\nTerminal states populate either ``result`` (status='completed') or\n``error``/``error_status`` (status='failed'). Non-terminal states leave both unset."},"ImageJobSubmitResponse":{"properties":{"job_id":{"type":"string","title":"Job Id","description":"Identifier used to poll for status and result"},"status":{"type":"string","title":"Status","description":"Initial status, always 'pending'"}},"type":"object","required":["job_id","status"],"title":"ImageJobSubmitResponse","description":"Response from submitting a new image generation job."},"ImageModelInfoResponse":{"properties":{"model_id":{"type":"string","title":"Model Id","description":"Full model identifier (e.g., 'black-forest-labs/flux-schnell')"},"name":{"type":"string","title":"Name","description":"Human-readable model name"},"provider":{"type":"string","title":"Provider","description":"Provider serving this model (e.g., 'replicate', 'openrouter')"},"description":{"type":"string","title":"Description","description":"Brief description of the model's capabilities","default":""},"supported_aspect_ratios":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Supported Aspect Ratios","description":"List of supported aspect ratios (e.g., ['1:1', '16:9'])"},"supports_image_input":{"type":"boolean","title":"Supports Image Input","description":"Whether the model supports image-to-image generation","default":false},"default":{"type":"boolean","title":"Default","description":"Whether this is the default model for its provider","default":false}},"type":"object","required":["model_id","name","provider"],"title":"ImageModelInfoResponse","description":"Schema describing an available image generation model."},"ImageModelsListResponse":{"properties":{"count":{"type":"integer","title":"Count","description":"Total number of available models"},"active_provider":{"type":"string","title":"Active Provider","description":"The provider used for image generation (selected via IMAGE_PROVIDER env var)"},"models":{"items":{"$ref":"#/components/schemas/ImageModelInfoResponse"},"type":"array","title":"Models","description":"List of available image generation models from all configured providers"}},"type":"object","required":["count","active_provider","models"],"title":"ImageModelsListResponse","description":"Response schema for listing available image models."},"LLMCitation":{"properties":{"url":{"type":"string","title":"Url"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"start_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Start Index"},"end_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"End Index"}},"type":"object","required":["url"],"title":"LLMCitation","description":"Normalised citation/source reference from an LLM provider."},"LLMCompletionContent":{"properties":{"model":{"type":"string","title":"Model"},"message":{"$ref":"#/components/schemas/LLMMessage"}},"type":"object","required":["model","message"],"title":"LLMCompletionContent","description":"Contains the core content of a completion response (model and message)."},"LLMCompletionMetadata":{"properties":{"tool_calls":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Tool Calls"},"citations":{"anyOf":[{"items":{"$ref":"#/components/schemas/LLMCitation"},"type":"array"},{"type":"null"}],"title":"Citations"}},"type":"object","title":"LLMCompletionMetadata","description":"Contains metadata/details of a completion response (tool_calls, citations)."},"LLMCompletionResponse":{"properties":{"content":{"$ref":"#/components/schemas/LLMCompletionContent"},"metadata":{"$ref":"#/components/schemas/LLMCompletionMetadata"}},"type":"object","required":["content","metadata"],"title":"LLMCompletionResponse","description":"Full response for a non-streaming LLM completion."},"LLMMessage":{"properties":{"role":{"type":"string","title":"Role"},"parts":{"items":{"$ref":"#/components/schemas/LLMMessageContent"},"type":"array","title":"Parts"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"tool_call_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Call Id"}},"type":"object","required":["role","parts"],"title":"LLMMessage","description":"Represents a single message in the conversation history."},"LLMMessageContent":{"properties":{"type":{"type":"string","title":"Type"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"base64_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base64 Data"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime Type"}},"type":"object","required":["type"],"title":"LLMMessageContent","description":"Represents a multimodal content part for an LLM message."},"MarkerResponse":{"properties":{"field_name":{"type":"string","title":"Field Name"},"instruction":{"type":"string","title":"Instruction"},"marker_type":{"type":"string","title":"Marker Type"},"location":{"type":"string","title":"Location"}},"type":"object","required":["field_name","instruction","marker_type","location"],"title":"MarkerResponse","description":"Geëxtraheerde marker informatie."},"PreviewResponse":{"properties":{"markers_to_replace":{"items":{"$ref":"#/components/schemas/MarkerResponse"},"type":"array","title":"Markers To Replace"},"values_provided":{"items":{"type":"string"},"type":"array","title":"Values Provided"},"unmatched_markers":{"items":{"type":"string"},"type":"array","title":"Unmatched Markers"},"unmatched_values":{"items":{"type":"string"},"type":"array","title":"Unmatched Values"}},"type":"object","required":["markers_to_replace","values_provided","unmatched_markers","unmatched_values"],"title":"PreviewResponse","description":"Response voor replacement preview."},"TaskContextRequest":{"properties":{"task_id":{"type":"string","format":"uuid","title":"Task Id","description":"ID of the task"},"task_version":{"type":"integer","title":"Task Version","description":"Version of the task"},"roz":{"type":"integer","title":"Roz","description":"ROZ of the task"},"step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Step","description":"Step of the task"}},"type":"object","required":["task_id","task_version","roz"],"title":"TaskContextRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"ValidationResponse":{"properties":{"is_valid":{"type":"boolean","title":"Is Valid"},"found_markers":{"items":{"type":"string"},"type":"array","title":"Found Markers"},"missing_markers":{"items":{"type":"string"},"type":"array","title":"Missing Markers"},"extra_markers":{"items":{"type":"string"},"type":"array","title":"Extra Markers"}},"type":"object","required":["is_valid","found_markers","missing_markers","extra_markers"],"title":"ValidationResponse","description":"Response voor marker validatie."}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}},"tags":[{"name":"general","description":"General operations."}],"servers":[{"url":"https://api.heyzaia.com","description":"Gateway Server"}]}