Fields & validation
Every field with its exact validation rule, nullability, and the database column that stores it.
Squad
| Field | Type | Required | Nullable | Rules (verbatim) | DB column |
name | string | yes | no | required|string|max:100 | squads.name |
user_id | integer | no | yes | nullable|integer|exists:users,id (admins only) | squads.user_id |
members | array | yes | no | required|array|min:1 | squads.members |
membersOverrides | object | no | yes | nullable|array | squads.members_overrides |
variableValues | object | no | yes | nullable|array | squads.variable_values |
metadata | object | no | yes | nullable|array — local-only | squads.metadata |
Member
| Field | Rules (verbatim) | Notes |
members.*.assistantId | required|string | The member assistant's public id (UUID) |
members.*.assistantOverrides | nullable|array | See override keys below |
members.*.assistantDestinations | nullable|array | Handoff targets |
members.*.position.x / .y | nullable|numeric | Visual-builder canvas position (UI-only) |
Destination keys (each entry of assistantDestinations):
| Field | Rules (verbatim) |
type | nullable|string|in:assistant |
assistantName | required|string|max:255 |
message | nullable|string|max:1000 |
description | nullable|string|max:2000 |
transferMode | nullable|string|in:rolling-history,swap-system-message-in-history,swap-system-message-in-history-and-remove-transfer-tool-messages,delete-history |
assistantId | nullable|string |
Override keys
The same override keys validate at three levels — per member (members.*.assistantOverrides), squad-wide (membersOverrides), and per destination:
| Key | Rules (verbatim) |
name | nullable|string|max:255 |
description | nullable|string |
firstMessage | nullable|string|max:1000 |
firstMessageMode | nullable|string|in:assistant-speaks-first,assistant-speaks-first-with-model-generated-message,assistant-waits-for-user |
voicemailMessage / endCallMessage | nullable|string|max:1000 |
model | nullable|array — temperature is nullable|numeric|min:0|max:2; engine selection is platform-managed |
voice / transcriber | nullable|array — engine selection is platform-managed; transcriber.language is nullable|string|max:10 |
variableValues / metadata | nullable|array |
Constraints the rules cannot express
- The first member is the entry assistant — it answers the call.
- Handoffs are assembled from
assistantDestinations at publish time; a destination’s assistantName must match another member.
metadata never leaves the platform database — it is not forwarded on publish.
- Draft saves are lenient by design; the strict ruleset applies on publish (store/update).
- On a draft update, an absent
members key resets members to [].
- The live platform is written first on publish; on failure nothing is saved locally.