> For the complete documentation index, see [llms.txt](https://docs.scaleconnect.com.au/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.scaleconnect.com.au/api/rest-api/scaleai-rest-api/models.md).

# Models

## The ActionItem object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"ActionItem":{"properties":{"text":{"type":"string","title":"Text"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"}},"type":"object","required":["text"],"title":"ActionItem"}}}}
```

## The ActionResult object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"ActionResult":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether the action succeeded"},"action":{"type":"string","title":"Action","description":"The action type that was executed"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Error message if action failed"},"messageId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Messageid","description":"ID of the sent message"},"eventId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eventid","description":"ID of the created event"},"meetLink":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meetlink","description":"Google Meet link for the event"},"suggestedTimes":{"anyOf":[{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},{"type":"null"}],"title":"Suggestedtimes","description":"Alternative time slots if broker is unavailable"},"sessionId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sessionid","description":"ID of the closed session"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional metadata"}},"type":"object","required":["success","action"],"title":"ActionResult","description":"Result from executing an action."}}}}
```

## The Attendee object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"Attendee":{"properties":{"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"userId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Userid"}},"type":"object","required":["email"],"title":"Attendee"}}}}
```

## The CandidateMemory object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"CandidateMemory":{"properties":{"kind":{"type":"string","enum":["broker","client"],"title":"Kind","description":"client = about the client in a client meeting; broker = about the broker, practice, lender or partner","default":"broker"},"text":{"type":"string","title":"Text","description":"One durable sentence; no live numbers, no action items"},"clientId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clientid","description":"Reserved: the engine does not resolve clients; the backend sets this when the meeting's client is certain"},"agentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agentid","description":"Reserved for kind=agent; never emitted by the summariser"}},"type":"object","required":["text"],"title":"CandidateMemory","description":"One suggested memory from the meeting (KB-9). The backend writes it as\nstatus=suggested via its suggest path; the engine never confirms anything."}}}}
```

## The ChatRequest object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"ChatRequest":{"properties":{"message":{"type":"string","title":"Message","description":"User's message"},"conversation_history":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Conversation History","description":"Previous conversation messages"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"LLM model to use","default":"claude-opus-4-5-20251101"},"jwt_token":{"type":"string","minLength":1,"description":"Downstream user JWT, separate from the service bearer token."},"strategy_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Strategy Id","description":"Strategy/sub-control-centre ID"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"User ID for admin access"},"mentions":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Mentions","description":"Chips the broker attached in the composer, each {kind, id, label}. kind is one of client | strategy | team | agent | artefact | doc | file | task | note | meeting | calendar | property | ai-review. Rendered into the system prompt as the scope of the turn so the model uses the ids with tools instead of searching by name."},"environment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment","description":"Environment: 'local', 'dev', or 'prod'","default":"dev"},"context_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context Type","description":"Chat context type: 'broker_brain', 'client_assistant', 'client_review', 'support', 'simulator'. Picks the AgentSpec and persona overlay."},"web_access":{"type":"boolean","title":"Web Access","description":"When true, attach Anthropic web_search for this turn if AgentSpec.web_access allows it. Globe off / omitted means no web tool.","default":false},"chat_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat Id","description":"scale-backend ai_chat.id for this thread, when the caller has one. Stamped as sourceRef on memories the post-turn extractor suggests; omitted means no sourceRef."},"tool_call":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tool Call","description":"A tool the browser asks to run before the model turn: {name, input}. Today only the write gate's approval card posts {name: 'confirm_writes', input: {set_key, item_keys?}}. Runs first, streams as tool_status/tool_result, and its report is folded into the message as context for the model."},"timezone":{"type":"string","title":"Timezone","description":"The broker's IANA timezone, read from the browser with Intl.DateTimeFormat().resolvedOptions().timeZone. Every date the prompt states and every calendar write the turn drafts is stamped with it.","default":"Australia/Sydney"},"attachments":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Attachments","description":"Files the broker attached in the composer for this turn, each {filename, media_type, data} with data as base64. Extracted to text and read for this message only — nothing is stored or indexed, so a later turn cannot see it unless the broker re-attaches it. Supports PDF, plain text, Word (.docx) and Excel (.xlsx)."}},"type":"object","required":["message","jwt_token"],"title":"ChatRequest","description":"Request model for chat endpoints."}}}}
```

## The ChatResponse object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"ChatResponse":{"properties":{"response":{"type":"string","title":"Response","description":"AI response text"},"conversation_history":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Conversation History","description":"Updated conversation history"},"usage":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Usage","description":"Token usage statistics"}},"type":"object","required":["response","conversation_history"],"title":"ChatResponse","description":"Response model for non-streaming chat."}}}}
```

## The ConfigResponse object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"ConfigResponse":{"properties":{"environments":{"additionalProperties":{"type":"string"},"type":"object","title":"Environments"},"default_environment":{"type":"string","title":"Default Environment"}},"type":"object","required":["environments","default_environment"],"title":"ConfigResponse","description":"Response model for configuration."}}}}
```

## The EmbedRequest object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"EmbedRequest":{"properties":{"text":{"type":"string","title":"Text","description":"One memory sentence to embed","default":""}},"type":"object","title":"EmbedRequest"}}}}
```

## The EmbedResponse object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"EmbedResponse":{"properties":{"embedding":{"items":{"type":"number"},"type":"array","title":"Embedding","description":"Vector for `text`; length is the engine's embedding dimension (1536)"},"model":{"type":"string","title":"Model","description":"Embedding model the engine used (informational; the backend must not depend on it)"},"dimensions":{"type":"integer","title":"Dimensions"}},"type":"object","required":["embedding","model","dimensions"],"title":"EmbedResponse"}}}}
```

## The HTTPValidationError object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"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"}}}}
```

## The HealthResponse object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"HealthResponse":{"properties":{"status":{"type":"string","title":"Status"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["status","timestamp"],"title":"HealthResponse","description":"Response model for health check."}}}}
```

## The JSONReviewRequest object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"JSONReviewRequest":{"properties":{"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Custom review request message or additional context"},"review_type":{"type":"string","title":"Review Type","description":"Review type: 'comprehensive', 'quick', 'detailed', 'focused'","default":"comprehensive"},"template_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template Mode","description":"Template mode for generation","default":"Start from scratch"},"client_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Type","description":"Client type: 'First Home Buyer', 'Existing Home Owner', 'Investor', 'Downsizer'","default":"First Home Buyer"},"template_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template Name","description":"Template name for the review"},"frequency":{"type":"string","title":"Frequency","description":"Review frequency: 'monthly', 'quarterly', 'yearly'","default":"monthly"},"output_sections":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Output Sections","description":"Additional user-selected sections to include in the review"},"addition_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Addition Context","description":"Additional context for the review"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"LLM model to use","default":"claude-opus-4-5-20251101"},"jwt_token":{"type":"string","minLength":1,"description":"Downstream user JWT, separate from the service bearer token."},"strategy_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Strategy Id","description":"Strategy/sub-control-centre ID"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"User ID for admin access"},"environment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment","description":"Environment: 'local', 'development', or 'production'","default":"development"}},"type":"object","title":"JSONReviewRequest","description":"Request model for structured JSON review endpoint.","required":["jwt_token"]}}}}
```

## The JSONReviewResponse object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"JSONReviewResponse":{"properties":{"portfolio_composition":{"type":"string","title":"Portfolio Composition","description":"Brief factual bullets about users, properties, and loans"},"summary":{"type":"string","title":"Summary","description":"Current month facts (3-5 bullets)"},"portfolio_snapshot":{"type":"string","title":"Portfolio Snapshot","description":"4-8 bullets with portfolio performance overview"},"property_overview":{"type":"string","title":"Property Overview","description":"Property details with values, loans, equity, and LVR"},"observations":{"type":"string","title":"Observations","description":"Factual observations about performance, loans, cashflow, etc."},"key_drivers":{"type":"string","title":"Key Drivers","description":"Upcoming milestones and recent updates"},"goal_progress":{"type":"string","title":"Goal Progress","description":"Progress toward goals (max 6 bullets)"},"next_steps_ai_summary":{"type":"string","title":"Next Steps Ai Summary","description":"Broker-facing operational next steps"},"output_sections":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Output Sections","description":"User-selected additional sections with AI-generated content"},"phases_analyzed":{"type":"integer","title":"Phases Analyzed","description":"Number of data collection phases completed","default":0},"data_collection_success_rate":{"type":"number","title":"Data Collection Success Rate","description":"Percentage of successful data tool executions","default":0},"validation_quality_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Validation Quality Score","description":"Quality score from review validation (0-100%)"},"validation_passed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Validation Passed","description":"Whether the review passed validation checks"},"validation_issues_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Validation Issues Count","description":"Number of validation issues found"}},"type":"object","required":["portfolio_composition","summary","portfolio_snapshot","property_overview","observations","key_drivers","goal_progress","next_steps_ai_summary"],"title":"JSONReviewResponse","description":"Response model for structured JSON review.\n\nContains 8 fixed system sections plus any user-selected output_sections."}}}}
```

## The JWTValidateResponse object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"JWTValidateResponse":{"properties":{"valid":{"type":"boolean","title":"Valid"},"user":{"anyOf":[{"$ref":"#/components/schemas/UserInfo"},{"type":"null"}]},"onboarding":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Onboarding"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["valid"],"title":"JWTValidateResponse","description":"Response model for JWT validation."},"UserInfo":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"phoneNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phonenumber"},"personalDetails":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Personaldetails"},"controlCentres":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Controlcentres","default":[]}},"type":"object","title":"UserInfo","description":"User information returned from JWT validation."}}}}
```

## The MeetingActionData object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"MeetingActionData":{"properties":{"action":{"type":"string","title":"Action","description":"Action type: send_message, create_event_and_send_message, close_session, send_message_and_close_session"},"chatId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chatid","description":"UUID of the chat"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Message content for send_message actions"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Event title for create_event"},"startTime":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Starttime","description":"Event start time (ISO 8601 format with timezone)"},"endTime":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endtime","description":"Event end time (ISO 8601 format with timezone)"},"client_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Email","description":"Client's email address for calendar invite"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Event description"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"IANA timezone (e.g., 'Australia/Sydney')"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location","description":"Event location"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content","description":"Message to send after event creation"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date","description":"Meeting date for create_event (deprecated, use startTime/endTime)"},"duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Minutes","description":"Meeting duration (deprecated, use startTime/endTime)"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Reason for close_session"}},"type":"object","required":["action"],"title":"MeetingActionData","description":"Action data returned by the meeting scheduler."}}}}
```

## The MeetingSchedulerRequest object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"MeetingSchedulerRequest":{"properties":{"message":{"type":"string","title":"Message","description":"User's message"},"conversation_history":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Conversation History","description":"Previous conversation messages"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"LLM model to use","default":"claude-sonnet-4-20250514"},"jwt_token":{"type":"string","minLength":1,"description":"Downstream user JWT, separate from the service bearer token."},"chat_id":{"type":"string","title":"Chat Id","description":"UUID of the chat (used to lookup broker for calendar operations)"},"client_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Email","description":"Client's email for calendar invites (optional)"},"ask_email":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ask Email","description":"Whether to ask for email if not provided","default":false},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"Client user ID"},"environment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment","description":"Environment: 'local', 'dev', or 'prod'","default":"dev"}},"type":"object","required":["message","chat_id","jwt_token"],"title":"MeetingSchedulerRequest","description":"Request model for meeting scheduler endpoints."}}}}
```

## The MeetingSchedulerResponse object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"MeetingSchedulerResponse":{"properties":{"response":{"type":"string","title":"Response","description":"AI response text"},"action":{"$ref":"#/components/schemas/MeetingActionData","description":"Action data"},"action_result":{"anyOf":[{"$ref":"#/components/schemas/ActionResult"},{"type":"null"}],"description":"Result of action execution"},"conversation_history":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Conversation History","description":"Updated conversation history"},"session_ended":{"type":"boolean","title":"Session Ended","description":"Whether the session has ended","default":false},"usage":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Usage","description":"Token usage statistics"}},"type":"object","required":["response","action","conversation_history"],"title":"MeetingSchedulerResponse","description":"Response model for non-streaming meeting scheduler."},"MeetingActionData":{"properties":{"action":{"type":"string","title":"Action","description":"Action type: send_message, create_event_and_send_message, close_session, send_message_and_close_session"},"chatId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chatid","description":"UUID of the chat"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Message content for send_message actions"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Event title for create_event"},"startTime":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Starttime","description":"Event start time (ISO 8601 format with timezone)"},"endTime":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endtime","description":"Event end time (ISO 8601 format with timezone)"},"client_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Email","description":"Client's email address for calendar invite"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Event description"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"IANA timezone (e.g., 'Australia/Sydney')"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location","description":"Event location"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content","description":"Message to send after event creation"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date","description":"Meeting date for create_event (deprecated, use startTime/endTime)"},"duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Minutes","description":"Meeting duration (deprecated, use startTime/endTime)"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Reason for close_session"}},"type":"object","required":["action"],"title":"MeetingActionData","description":"Action data returned by the meeting scheduler."},"ActionResult":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether the action succeeded"},"action":{"type":"string","title":"Action","description":"The action type that was executed"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Error message if action failed"},"messageId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Messageid","description":"ID of the sent message"},"eventId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eventid","description":"ID of the created event"},"meetLink":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meetlink","description":"Google Meet link for the event"},"suggestedTimes":{"anyOf":[{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},{"type":"null"}],"title":"Suggestedtimes","description":"Alternative time slots if broker is unavailable"},"sessionId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sessionid","description":"ID of the closed session"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional metadata"}},"type":"object","required":["success","action"],"title":"ActionResult","description":"Result from executing an action."}}}}
```

## The MessageSuggestionRequest object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"MessageSuggestionRequest":{"properties":{"current_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Message"},"conversation_history":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Conversation History","default":[]},"number_of_suggestions":{"type":"integer","title":"Number Of Suggestions","default":3},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","default":"claude-haiku-4-5-20251001"},"jwt_token":{"type":"string","minLength":1,"description":"Downstream user JWT, separate from the service bearer token."},"strategy_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Strategy Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"environment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment","default":"dev"}},"type":"object","title":"MessageSuggestionRequest","description":"Request model for message suggestions.","required":["jwt_token"]}}}}
```

## The MessageSuggestionResponse object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"MessageSuggestionResponse":{"properties":{"suggestions":{"items":{"type":"string"},"type":"array","title":"Suggestions"},"raw_response":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Response"},"usage":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Usage"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["suggestions"],"title":"MessageSuggestionResponse","description":"Response model for non-streaming suggestions."}}}}
```

## The ReviewRequest object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"ReviewRequest":{"properties":{"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Custom review request message"},"conversation_history":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Conversation History","description":"Previous conversation messages"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"LLM model to use","default":"claude-opus-4-5-20251101"},"jwt_token":{"type":"string","minLength":1,"description":"Downstream user JWT, separate from the service bearer token."},"strategy_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Strategy Id","description":"Strategy/sub-control-centre ID"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"User ID for admin access"},"environment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment","description":"Environment: 'local', 'dev', or 'prod'","default":"dev"},"template_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template Mode","description":"Review template: 'comprehensive', 'quick_insights', 'goal_focused', 'risk_analysis'","default":"comprehensive"},"client_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Type","description":"Client type: 'individual', 'couple', 'business'","default":"individual"},"frequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Frequency","description":"Review frequency: 'monthly', 'quarterly', 'annual'","default":"quarterly"},"review_tier":{"anyOf":[{"type":"string","enum":["check_in","rate_review","strategy_review"]},{"type":"null"}],"title":"Review Tier","description":"Review sophistication tier: 'check_in' (short update, no headings), 'rate_review' (one to two pages on what moved), 'strategy_review' (the full pack). None = legacy behaviour."},"output_sections":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Output Sections","description":"Section names to write, in order; the sophistication dial. None = the fixed default structure."}},"type":"object","title":"ReviewRequest","description":"Request model for portfolio review endpoints.","required":["jwt_token"]}}}}
```

## The ReviewResponse object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"ReviewResponse":{"properties":{"response":{"type":"string","title":"Response","description":"Review report text"},"conversation_history":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Conversation History","description":"Updated conversation history"},"phases_analyzed":{"type":"integer","title":"Phases Analyzed","description":"Number of tool calls that returned data (0 = the review has no data behind it)","default":0},"ok":{"type":"boolean","title":"Ok","description":"False when no tool call returned data; the caller must not save or notify on the text","default":true},"usage":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Usage","description":"Token usage statistics"}},"type":"object","required":["response","conversation_history"],"title":"ReviewResponse","description":"Response model for non-streaming review."}}}}
```

## The RootResponse object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"RootResponse":{"properties":{"status":{"type":"string","title":"Status"},"service":{"type":"string","title":"Service"},"version":{"type":"string","title":"Version"},"timestamp":{"type":"string","title":"Timestamp"},"endpoints":{"additionalProperties":{"type":"string"},"type":"object","title":"Endpoints"}},"type":"object","required":["status","service","version","timestamp","endpoints"],"title":"RootResponse","description":"Response model for root endpoint."}}}}
```

## The SummariseRequest object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"SummariseRequest":{"properties":{"noteId":{"type":"string","title":"Noteid","description":"scale-backend note id the summary will be stored on"},"title":{"type":"string","title":"Title","description":"Meeting title","default":"Untitled meeting"},"segments":{"items":{"$ref":"#/components/schemas/TranscriptSegment"},"type":"array","title":"Segments","description":"Transcript segments in order"},"tag":{"type":"string","enum":["client","team","external","other"],"title":"Tag","description":"client | team | external | other","default":"other"},"clientName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clientname","description":"Resolved client name for client meetings"},"attendees":{"items":{"$ref":"#/components/schemas/Attendee"},"type":"array","title":"Attendees","description":"Calendar invitees, matched to team members where possible"},"teamId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Teamid","description":"Broker's team id (usage meter)"},"brokerUserId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brokeruserid","description":"Broker's user id (usage meter)"},"environment":{"type":"string","enum":["local","dev","prod"],"title":"Environment","description":"Which scale-backend the meter posts to","default":"prod"}},"type":"object","required":["noteId","segments"],"title":"SummariseRequest","description":"Body scale-backend sends from createTranscriptNote once the media webhook lands."},"TranscriptSegment":{"properties":{"speaker":{"type":"string","title":"Speaker","description":"Speaker label as transcribed","default":"Speaker"},"start":{"type":"number","title":"Start","description":"Start offset in seconds","default":0},"end":{"type":"number","title":"End","description":"End offset in seconds","default":0},"text":{"type":"string","title":"Text","description":"What was said","default":""}},"type":"object","title":"TranscriptSegment","description":"One diarised span of the meeting, as stored on the note's transcriptSegments."},"Attendee":{"properties":{"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"userId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Userid"}},"type":"object","required":["email"],"title":"Attendee"}}}}
```

## The SummariseResponse object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"SummariseResponse":{"properties":{"summary_markdown":{"type":"string","title":"Summary Markdown","description":"Recap / Decisions / Action items / Follow-ups, markdown"},"action_items":{"items":{"$ref":"#/components/schemas/ActionItem"},"type":"array","title":"Action Items"},"candidate_memories":{"items":{"$ref":"#/components/schemas/CandidateMemory"},"type":"array","title":"Candidate Memories","description":"Zero to five suggested memories; empty on any parse failure"}},"type":"object","required":["summary_markdown"],"title":"SummariseResponse"},"ActionItem":{"properties":{"text":{"type":"string","title":"Text"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"}},"type":"object","required":["text"],"title":"ActionItem"},"CandidateMemory":{"properties":{"kind":{"type":"string","enum":["broker","client"],"title":"Kind","description":"client = about the client in a client meeting; broker = about the broker, practice, lender or partner","default":"broker"},"text":{"type":"string","title":"Text","description":"One durable sentence; no live numbers, no action items"},"clientId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clientid","description":"Reserved: the engine does not resolve clients; the backend sets this when the meeting's client is certain"},"agentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agentid","description":"Reserved for kind=agent; never emitted by the summariser"}},"type":"object","required":["text"],"title":"CandidateMemory","description":"One suggested memory from the meeting (KB-9). The backend writes it as\nstatus=suggested via its suggest path; the engine never confirms anything."}}}}
```

## The TranscriptSegment object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"TranscriptSegment":{"properties":{"speaker":{"type":"string","title":"Speaker","description":"Speaker label as transcribed","default":"Speaker"},"start":{"type":"number","title":"Start","description":"Start offset in seconds","default":0},"end":{"type":"number","title":"End","description":"End offset in seconds","default":0},"text":{"type":"string","title":"Text","description":"What was said","default":""}},"type":"object","title":"TranscriptSegment","description":"One diarised span of the meeting, as stored on the note's transcriptSegments."}}}}
```

## The UserInfo object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"UserInfo":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"phoneNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phonenumber"},"personalDetails":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Personaldetails"},"controlCentres":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Controlcentres","default":[]}},"type":"object","title":"UserInfo","description":"User information returned from JWT validation."}}}}
```

## The ValidationError object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"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"}}}}
```

## The StrategiesResponse object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"StrategiesResponse":{"type":"object","properties":{"strategies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["strategies"]}}}}
```

## The AvailableModelsResponse object

```json
{"openapi":"3.1.0","info":{"title":"ScaleAI r16 API","version":"2.0.0"},"components":{"schemas":{"AvailableModelsResponse":{"type":"object","description":"Models grouped by providers that have configured API keys.","additionalProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"number"},"output":{"type":"number"}},"required":["input","output"]}},"required":["id","name","pricing"]}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.scaleconnect.com.au/api/rest-api/scaleai-rest-api/models.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
