This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.
This connection delivers live updates of the AI chat for the apps a white-label session can watch. It uses Socket.IO, not a raw WebSocket. Connect with io(socket_url, { path: socket_path, transports: ["websocket"], auth: { session_token } }), using the values your server received from POST /api/v1/socket-sessions. Then send join for each app to receive the app’s snapshot, followed by live events.
Available only to white-label workspaces on the Builder plan or higher, with live AI chat updates turned on. Ask your onboarding contact to turn them on for your workspace.
Send the session token in the Socket.IO CONNECT auth as session_token. A refused connection is a connect_error with message: "connection_denied" and data: { retryable }. If retryable is true, retry with backoff. Otherwise, ask your server for a new session.
One connection per session carries the events of every app it joins. In an event’s data, a missing field is unchanged and an explicit null clears it. The app.snapshot event is the exception, since it replaces the app’s state.
Every event the server sends is an object with two fields:
The app the event belongs to, as /apps/{app_id}. It is null for session.ended, which concerns the whole session.
The event’s payload. Its fields depend on the event.
Events from the server
message.updated
A chat message was added or replaced. Replace the message with the same id.
data fields
The message in full, as it now reads. ID of the message. An update carries the whole message again under the same ID.
role 'user' | 'assistant' | 'system' | null
Who sent the message. The value is user for a message a person sent and assistant for the AI’s reply. Messages with the system role are never sent.
Text of the message. Attachments and structured content are left out.
The tool calls the AI made in this message, in order. Each is updated in place as it progresses. Every shape has these fields: ID of the call. Every update to the call carries the same ID.
Whether the call has paused for the user’s answer or approval. The value becomes true once it pauses and stays true after the user answers, so read status to know whether it’s still waiting.
Whether the call skipped its approval because the app has Auto approve on. The value is true when the call needed approval but ran at once. It never paused, and its result is real.
status 'running' | 'success' | 'error' | 'stopped' | 'waiting_for_user_input' | null
State of the call. The value is running while the tool works, success or error once it finished, stopped when the user stopped the turn, or waiting_for_user_input while it waits for the user’s answer or approval.
Whether the call changed the app or its data. false means it finished without changing anything. null means the tool did not report it, so whether it changed anything is unknown.
What kind of answer the call waits for, while status is waiting_for_user_input. kind 'choice' | 'input' | 'approval'
What the call needs from the user. The value is choice to pick among options, input to supply values, or approval to approve or reject.
Why the call waits for approval, from the check that paused it. Present only while status is waiting_for_user_input. One of these shapes, told apart by guard: Show backend_function_entity_delete
Waiting for approval because testing a backend function would delete records from an entity. guard 'backend_function_entity_delete'
required
The check that paused the call.
Why the call needs approval, as the check explained it.
What the check found. Backend function under test.
Entity method the function calls.
The check could not verify the function’s source.
Waiting for approval because the AI wants to run a shell command that needs a review first. The command itself is not published. The check that paused the call.
Waiting for approval because the AI wants to change who can read or write an entity’s records. guard 'entity_rls_guard'
required
The check that paused the call.
Why the call needs approval, as the check explained it.
What the check found. Entity whose access rules change.
How the access rules change.
Access operations whose rules change.
Show exec_tool_entity_mutation
Waiting for approval because the AI’s code would update or delete records in an entity. guard 'exec_tool_entity_mutation'
required
The check that paused the call.
Why the call needs approval, as the check explained it.
What the check found. Entity method the code calls, such as delete.
The agent’s summary of what the code does.
Show exec_tool_github_repo_write
Waiting for approval because the AI’s code would write to a GitHub repository. guard 'exec_tool_github_repo_write'
required
The check that paused the call.
Why the call needs approval, as the check explained it.
What the check found. The agent’s summary of what the code does.
Show exec_tool_invite_user
Waiting for approval because the AI’s code would invite someone to the app by email. guard 'exec_tool_invite_user'
required
The check that paused the call.
Why the call needs approval, as the check explained it.
What the check found. The agent’s summary of what the code does.
Show exec_tool_send_email
Waiting for approval because the AI’s code would send an email. guard 'exec_tool_send_email'
required
The check that paused the call.
Why the call needs approval, as the check explained it.
What the check found. The agent’s summary of what the code does.
Waiting for approval because the AI’s code would send a text message. guard 'exec_tool_send_sms'
required
The check that paused the call.
Why the call needs approval, as the check explained it.
What the check found. The agent’s summary of what the code does.
Waiting for approval from a check that publishes only its name. The check that paused the call. Any value not matched by the other shapes.
Each shape adds its own fields, told apart by name: Show ask_clarifying_questions
The AI asks the user questions before it goes on. The call waits until the user answers. name 'ask_clarifying_questions'
required
The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. Questions presented to the user. Question category, such as text.
More than one answer may be selected.
Plan section the question covers.
Selectable options. A bare string is its label. The user’s answer to the call, once given, for tools that take one. Answers supplied to the question card. Zero-based question index.
Label selected for a single-select question.
Labels selected for a multi-select question.
Free-text answer. Structural filtering does not redact prose.
The AI asks the user questions that shape the plan, in plan mode. The call waits until the user answers. name 'ask_plan_questions'
required
The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. Questions presented to the user. Question category, such as text.
More than one answer may be selected.
Plan section the question covers.
Selectable options. A bare string is its label. The user’s answer to the call, once given, for tools that take one. Answers supplied to the question card. Zero-based question index.
Label selected for a single-select question.
Labels selected for a multi-select question.
Free-text answer. Structural filtering does not redact prose.
The AI runs a shell command in the app’s sandbox. The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Reviewed activity summary. Commands and output are never included.
Show create_entity_records
The AI adds records to one of the app’s entities. name 'create_entity_records'
required
The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Entity type. Records and query values are never included.
Number of records created.
The AI deletes records from one of the app’s entities. name 'delete_entities'
required
The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. The agent’s summary of the change. Queries and record values are never included.
What the tool touched, for showing its progress. Never file contents or commands. Entity type. Records and query values are never included.
The AI deletes a file from the app. The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Changed file paths. Source bodies and diffs are never included.
A write intentionally used empty content.
The AI edits a file in the imported repository. The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Changed file paths. Source bodies and diffs are never included.
A write intentionally used empty content.
The AI runs code against the app’s data and integrations. The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Reviewed activity summary. Code and output are never included.
The code changed entity data, so refresh the preview.
The AI edits files by replacing text in them. The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Changed file paths. Source bodies and diffs are never included.
A write intentionally used empty content.
Show generate_game_background
The AI generates a background image for a game. An image.resolved event follows when it is ready. name 'generate_game_background'
required
The tool that was called.
The tool’s result, narrowed to what this tool publishes. Absent while the call waits for approval.
The AI generates an image asset for a game. An image.resolved event follows when it is ready. name 'generate_game_image'
required
The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. Requested aspect ratio, such as 1:1.
The tool’s result, narrowed to what this tool publishes. Absent while the call waits for approval.
The AI generates an image for the app. An image.resolved event follows when it is ready. The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. Requested aspect ratio, such as 16:9.
The tool’s result, narrowed to what this tool publishes. Absent while the call waits for approval. Placeholder URL, used to associate an image.resolved event with this tool.
status 'pending' | 'completed' | 'failed'
Current generation status.
Generated image URL, once available.
The AI writes down the plan it settled with the user. In plan mode this call carries the plan itself. The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. What is being built and why.
Who uses it and their roles.
Specific technical requirements.
Build or plan declaration, when the AI asks for one.
Store platform settled in planning, for e-commerce plans.
Engine settled in planning, for game plans.
The AI generates a video for the app. The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. Requested aspect ratio, such as 16:9.
The tool’s result, narrowed to what this tool publishes. Absent while the call waits for approval.
The AI installs or removes npm packages in the app. name 'install_npm_package'
required
The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. Requested package operations. Requested operation, such as install.
Show preview_execute_code
The AI runs code inside the app preview to inspect it. name 'preview_execute_code'
required
The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Reviewed activity summary. Code and output are never included.
The code changed entity data, so refresh the preview.
The AI takes a screenshot of the app preview to check its work. name 'preview_screenshot'
required
The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Reviewed activity summary. Commands and output are never included.
The AI runs code that only reads the app’s data. name 'read_only_exec_tool'
required
The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Reviewed activity summary. Code and output are never included.
The code changed entity data, so refresh the preview.
The AI reads a file in the imported repository. The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Changed file paths. Source bodies and diffs are never included.
A write intentionally used empty content.
The AI runs a shell command in the imported repository’s sandbox. name 'run_shell_command'
required
The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Reviewed activity summary. Commands and output are never included.
The AI asks the user for secret values, such as API keys. The call waits until the user supplies them. The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. The AI updates records in one of the app’s entities. name 'update_entities'
required
The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. The agent’s summary of the change. Queries and record values are never included.
What the tool touched, for showing its progress. Never file contents or commands. Entity type. Records and query values are never included.
The AI adds settled points to the plan. The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. Plan updates in their emitted order. User-facing section label.
Base plan sections the AI considers sufficiently specified.
The AI writes a file in the app. The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Changed file paths. Source bodies and diffs are never included.
A write intentionally used empty content.
The AI writes a file in the imported repository. name 'write_repo_file'
required
The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Changed file paths. Source bodies and diffs are never included.
A write intentionally used empty content.
A call to any other tool. Only its name and progress are published. The tool that was called. Any value not matched by the other shapes.
ID of the checkpoint tied to the message. On a message a person sent it holds the app before the turn, on the AI’s final reply the app after it. Absent when the turn made no checkpoint.
When the message was created. Time the message was created, as a UTC timestamp in ISO 8601 format.
additional_message_params Flags on the message, such as plan mode. Only the flags listed here are published. Identifier the sending client attached, to match its optimistic message.
The message was sent in plan mode.
The message approves a plan.
The message expects no AI reply.
ID of the conversation the message belongs to. Each branch has its own conversation, so a viewer showing one branch can drop another branch’s messages.
ID of the branch the change belongs to. Omitted or null means the main branch.
message.removed
A chat message was removed or hidden. An id the viewer never saw is a no-op.
data fields
ID of the removed message.
ID of the conversation the message belongs to. Each branch has its own conversation, so a viewer showing one branch can drop another branch’s messages.
ID of the branch the change belongs to. Omitted or null means the main branch.
app.status_changed
The AI started, finished, or failed a turn. Null status clears it.
data fields
The new status, or null when the status was cleared. state 'ready' | 'processing' | 'error' | null
Where the app is in its build lifecycle. Ready means idle with no build in progress, processing means the app is being generated or modified, and error means the last build failed. This tracks building, not publishing.
ID of the user message whose turn the status belongs to.
Time the status was last updated, as a UTC timestamp in ISO 8601 format.
ID of the branch the change belongs to. Omitted or null means the main branch.
preview.reload_requested
Reload the app preview.
data fields
ID of the branch the change belongs to. Omitted or null means the main branch.
preview.navigation_requested
Show this page of the app in the preview.
data fields
Path of the page to show, relative to the app’s root, such as /settings.
Navigate even when the user has moved away from the page.
ID of the branch the change belongs to. Omitted or null means the main branch.
queue.updated
The whole prompt queue, after any change.
data fields
Queued prompts, in the order they will run. ID of the branch the prompt runs on, or null for the main branch.
Time the prompt was queued, as a UTC timestamp in ISO 8601 format.
Whether the queue is paused, so queued prompts wait. A person can pause it, and Base44 pauses it while the AI waits for an answer.
ID of the queued prompt the AI just picked up to run. Absent when a prompt was added, removed, or cleared.
ID of the branch the change belongs to. Omitted or null means the main branch.
task.progressed
Progress of a long-running tool, by tool_call_id.
data fields
ID of the tool call that started the task.
ID of the message that holds that tool call.
event_type 'task_started' | 'task_progress' | 'task_completed' | 'task_failed' | 'task_cancelled' | null
Kind of progress update. The value is task_started, task_progress, task_completed, task_failed, or task_cancelled.
Progress so far. Share of the work done, from 0 to 100.
ID of the branch the change belongs to. Omitted or null means the main branch.
image.resolved
A generated image finished or failed. Replace its placeholder_url wherever it appears.
data fields
status 'pending' | 'completed' | 'failed' | null
State of the image. The value is pending while the image generates, completed once image_url is ready, or failed when generation failed.
Placeholder URL the app shows while the image generates. Match it to find where the image appears.
URL of the finished image, or null while it is pending or after it failed.
conversation.changed
The conversation was rewritten by an undo, restore, or sync. Rejoin the room for a fresh snapshot.
data fields
ID of the branch the change belongs to. Omitted or null means the main branch.
files.changed
The app’s files changed outside a chat turn.
data fields
ID of the branch the change belongs to. Omitted or null means the main branch.
branch.deleted
A branch was deleted.
data fields
ID of the branch the change belongs to. Omitted or null means the main branch.
repository.changed
The imported app’s repository changed.
data fields
ID of the branch the change belongs to. Omitted or null means the main branch.
pull_request.changed
The imported app’s pull request changed.
data fields
ID of the branch the change belongs to. Omitted or null means the main branch.
session.ended
The session ended because it expired, was revoked, or was taken by a newer socket. The socket disconnects next.
data fields
reason 'expired' | 'revoked' | 'replaced'
required
Why the session ended. When it’s expired, ask your server for a new session. When it’s revoked, your server or an admin ended it, so don’t reconnect. When it’s replaced, a newer socket took the session, so stop.
room.access_denied
A join was refused because the app is not on the session’s allowlist, or the socket joins too often.
data fields
The data object is empty.
room.access_revoked
The app left the session’s allowlist, or its workspace. Events for it stop. Do not rejoin.
data fields
The data object is empty.
room.snapshot_unavailable
The join held but its snapshot failed. Live events still arrive. Rejoin later for a snapshot.
data fields
The data object is empty.
app.snapshot
The app’s current status and its last 50 public messages, after every join. Replace the app’s state with it.
data fields
The app’s build status, or null when none is recorded. state 'ready' | 'processing' | 'error' | null
Where the app is in its build lifecycle. Ready means idle with no build in progress, processing means the app is being generated or modified, and error means the last build failed. This tracks building, not publishing.
ID of the user message whose turn the status belongs to.
Time the status was last updated, as a UTC timestamp in ISO 8601 format.
The last 50 messages, oldest first. ID of the message. An update carries the whole message again under the same ID.
role 'user' | 'assistant' | 'system' | null
Who sent the message. The value is user for a message a person sent and assistant for the AI’s reply. Messages with the system role are never sent.
Text of the message. Attachments and structured content are left out.
The tool calls the AI made in this message, in order. Each is updated in place as it progresses. Every shape has these fields: ID of the call. Every update to the call carries the same ID.
Whether the call has paused for the user’s answer or approval. The value becomes true once it pauses and stays true after the user answers, so read status to know whether it’s still waiting.
Whether the call skipped its approval because the app has Auto approve on. The value is true when the call needed approval but ran at once. It never paused, and its result is real.
status 'running' | 'success' | 'error' | 'stopped' | 'waiting_for_user_input' | null
State of the call. The value is running while the tool works, success or error once it finished, stopped when the user stopped the turn, or waiting_for_user_input while it waits for the user’s answer or approval.
Whether the call changed the app or its data. false means it finished without changing anything. null means the tool did not report it, so whether it changed anything is unknown.
What kind of answer the call waits for, while status is waiting_for_user_input. kind 'choice' | 'input' | 'approval'
What the call needs from the user. The value is choice to pick among options, input to supply values, or approval to approve or reject.
Why the call waits for approval, from the check that paused it. Present only while status is waiting_for_user_input. One of these shapes, told apart by guard: Show backend_function_entity_delete
Waiting for approval because testing a backend function would delete records from an entity. guard 'backend_function_entity_delete'
required
The check that paused the call.
Why the call needs approval, as the check explained it.
What the check found. Backend function under test.
Entity method the function calls.
The check could not verify the function’s source.
Waiting for approval because the AI wants to run a shell command that needs a review first. The command itself is not published. The check that paused the call.
Waiting for approval because the AI wants to change who can read or write an entity’s records. guard 'entity_rls_guard'
required
The check that paused the call.
Why the call needs approval, as the check explained it.
What the check found. Entity whose access rules change.
How the access rules change.
Access operations whose rules change.
Show exec_tool_entity_mutation
Waiting for approval because the AI’s code would update or delete records in an entity. guard 'exec_tool_entity_mutation'
required
The check that paused the call.
Why the call needs approval, as the check explained it.
What the check found. Entity method the code calls, such as delete.
The agent’s summary of what the code does.
Show exec_tool_github_repo_write
Waiting for approval because the AI’s code would write to a GitHub repository. guard 'exec_tool_github_repo_write'
required
The check that paused the call.
Why the call needs approval, as the check explained it.
What the check found. The agent’s summary of what the code does.
Show exec_tool_invite_user
Waiting for approval because the AI’s code would invite someone to the app by email. guard 'exec_tool_invite_user'
required
The check that paused the call.
Why the call needs approval, as the check explained it.
What the check found. The agent’s summary of what the code does.
Show exec_tool_send_email
Waiting for approval because the AI’s code would send an email. guard 'exec_tool_send_email'
required
The check that paused the call.
Why the call needs approval, as the check explained it.
What the check found. The agent’s summary of what the code does.
Waiting for approval because the AI’s code would send a text message. guard 'exec_tool_send_sms'
required
The check that paused the call.
Why the call needs approval, as the check explained it.
What the check found. The agent’s summary of what the code does.
Waiting for approval from a check that publishes only its name. The check that paused the call. Any value not matched by the other shapes.
Each shape adds its own fields, told apart by name: Show ask_clarifying_questions
The AI asks the user questions before it goes on. The call waits until the user answers. name 'ask_clarifying_questions'
required
The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. Questions presented to the user. Question category, such as text.
More than one answer may be selected.
Plan section the question covers.
Selectable options. A bare string is its label. The user’s answer to the call, once given, for tools that take one. Answers supplied to the question card. Zero-based question index.
Label selected for a single-select question.
Labels selected for a multi-select question.
Free-text answer. Structural filtering does not redact prose.
The AI asks the user questions that shape the plan, in plan mode. The call waits until the user answers. name 'ask_plan_questions'
required
The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. Questions presented to the user. Question category, such as text.
More than one answer may be selected.
Plan section the question covers.
Selectable options. A bare string is its label. The user’s answer to the call, once given, for tools that take one. Answers supplied to the question card. Zero-based question index.
Label selected for a single-select question.
Labels selected for a multi-select question.
Free-text answer. Structural filtering does not redact prose.
The AI runs a shell command in the app’s sandbox. The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Reviewed activity summary. Commands and output are never included.
Show create_entity_records
The AI adds records to one of the app’s entities. name 'create_entity_records'
required
The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Entity type. Records and query values are never included.
Number of records created.
The AI deletes records from one of the app’s entities. name 'delete_entities'
required
The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. The agent’s summary of the change. Queries and record values are never included.
What the tool touched, for showing its progress. Never file contents or commands. Entity type. Records and query values are never included.
The AI deletes a file from the app. The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Changed file paths. Source bodies and diffs are never included.
A write intentionally used empty content.
The AI edits a file in the imported repository. The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Changed file paths. Source bodies and diffs are never included.
A write intentionally used empty content.
The AI runs code against the app’s data and integrations. The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Reviewed activity summary. Code and output are never included.
The code changed entity data, so refresh the preview.
The AI edits files by replacing text in them. The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Changed file paths. Source bodies and diffs are never included.
A write intentionally used empty content.
Show generate_game_background
The AI generates a background image for a game. An image.resolved event follows when it is ready. name 'generate_game_background'
required
The tool that was called.
The tool’s result, narrowed to what this tool publishes. Absent while the call waits for approval.
The AI generates an image asset for a game. An image.resolved event follows when it is ready. name 'generate_game_image'
required
The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. Requested aspect ratio, such as 1:1.
The tool’s result, narrowed to what this tool publishes. Absent while the call waits for approval.
The AI generates an image for the app. An image.resolved event follows when it is ready. The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. Requested aspect ratio, such as 16:9.
The tool’s result, narrowed to what this tool publishes. Absent while the call waits for approval. Placeholder URL, used to associate an image.resolved event with this tool.
status 'pending' | 'completed' | 'failed'
Current generation status.
Generated image URL, once available.
The AI writes down the plan it settled with the user. In plan mode this call carries the plan itself. The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. What is being built and why.
Who uses it and their roles.
Specific technical requirements.
Build or plan declaration, when the AI asks for one.
Store platform settled in planning, for e-commerce plans.
Engine settled in planning, for game plans.
The AI generates a video for the app. The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. Requested aspect ratio, such as 16:9.
The tool’s result, narrowed to what this tool publishes. Absent while the call waits for approval.
The AI installs or removes npm packages in the app. name 'install_npm_package'
required
The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. Requested package operations. Requested operation, such as install.
Show preview_execute_code
The AI runs code inside the app preview to inspect it. name 'preview_execute_code'
required
The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Reviewed activity summary. Code and output are never included.
The code changed entity data, so refresh the preview.
The AI takes a screenshot of the app preview to check its work. name 'preview_screenshot'
required
The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Reviewed activity summary. Commands and output are never included.
The AI runs code that only reads the app’s data. name 'read_only_exec_tool'
required
The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Reviewed activity summary. Code and output are never included.
The code changed entity data, so refresh the preview.
The AI reads a file in the imported repository. The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Changed file paths. Source bodies and diffs are never included.
A write intentionally used empty content.
The AI runs a shell command in the imported repository’s sandbox. name 'run_shell_command'
required
The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Reviewed activity summary. Commands and output are never included.
The AI asks the user for secret values, such as API keys. The call waits until the user supplies them. The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. The AI updates records in one of the app’s entities. name 'update_entities'
required
The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. The agent’s summary of the change. Queries and record values are never included.
What the tool touched, for showing its progress. Never file contents or commands. Entity type. Records and query values are never included.
The AI adds settled points to the plan. The tool that was called.
What the AI asked the tool to do, narrowed to what this tool publishes. Plan updates in their emitted order. User-facing section label.
Base plan sections the AI considers sufficiently specified.
The AI writes a file in the app. The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Changed file paths. Source bodies and diffs are never included.
A write intentionally used empty content.
The AI writes a file in the imported repository. name 'write_repo_file'
required
The tool that was called.
What the tool touched, for showing its progress. Never file contents or commands. Changed file paths. Source bodies and diffs are never included.
A write intentionally used empty content.
A call to any other tool. Only its name and progress are published. The tool that was called. Any value not matched by the other shapes.
ID of the checkpoint tied to the message. On a message a person sent it holds the app before the turn, on the AI’s final reply the app after it. Absent when the turn made no checkpoint.
When the message was created. Time the message was created, as a UTC timestamp in ISO 8601 format.
additional_message_params Flags on the message, such as plan mode. Only the flags listed here are published. Identifier the sending client attached, to match its optimistic message.
The message was sent in plan mode.
The message approves a plan.
The message expects no AI reply.
The main branch’s prompt queue. Queued prompts, in the order they will run. ID of the branch the prompt runs on, or null for the main branch.
Time the prompt was queued, as a UTC timestamp in ISO 8601 format.
Whether the queue is paused, so queued prompts wait. A person can pause it, and Base44 pauses it while the AI waits for an answer.
Messages from the browser
join
Join an app’s room, once per app after every connect. An app.snapshot follows, then its live events. Refused with room.access_denied when the app is not on the session’s allowlist, or past 30 joins a minute.
The payload is a string, not an object. Pattern: ^/apps/[0-9a-f]{24}$
leave
Leave an app’s room. Its events stop.
The payload is a string, not an object. Pattern: ^/apps/[0-9a-f]{24}$