Team and invitation response projections
Use the field definition linked by the operation. IDs describe different records; none is a session token. Stored values have no additional normalization or timestamp-timezone guarantee.
Full team
| Field | Type / presence | Meaning |
|---|---|---|
| id | integer | Team ID. |
| name, description | string | URL-decoded stored team text. |
active, never_lock | boolean | Team activation and lock-prevention setting; not proof of individual access. |
| type | stored string | Team classification; operation validation defines accepted write values. |
subscription_end_date | stored timestamp / null | Team-level membership end override. |
member_limit | stored integer / null | Positive values limit counted relationships during invitation validation; count includes all statuses. |
allowed_email_regexp | decoded JSON / null | Configured domain-pattern data; validator accepts legacy separated text too. |
created_at, updated_at | timestamp strings | Record times, timezone unspecified. |
| owner | full user; only when stored user_id truthy | Team’s stored owner field, serialized without resource argument; not necessarily every owner/admin relationship. |
users_count, invites_count | integers | Counts of all associated relationships/invites, without active/available filtering. |
Public team with Pricing
Contains only id, name, description, active, type from full team, optional owner as short user, and users_count/invites_count. With requested subscription it adds subscription as a general Pricing when present, otherwise {}, not null/[]; no resource argument is supplied for this projection. It omits member_limit, dates, domain patterns and never_lock.
Team-list item
Full team plus:
| Field | Type / presence | Meaning |
|---|---|---|
| invites | array, empty [] possible | Every associated invite with usage/mail, not just available invites. |
| subscription | object / empty [] | General Pricing with plan replaced by full Plan when its lookup resolves; fallback compact plan remains. Empty [] without team Pricing. |
Invite record
| Field | Type / presence | Meaning |
|---|---|---|
| id | integer | Invite ID, different from its redeemable code. |
email, user_name | stored string / null | Intended contact/name. |
| title, description, code | stored string / null | Display text and redeemable invitation code. Protect the code; it is not a member token. |
start_date, end_date | timestamp / null | Optional activation window; not automatically a fixed lifetime. |
activations_limit | integer | Positive activation cap; zero/nonpositive bypasses cap check. |
subscription_end_date | timestamp / null | Optional membership end override. |
created_at, updated_at | timestamp strings | Stored invite times. |
| subscription | general Pricing; conditional | Added only when subscription_id is truthy and Pricing lookup resolves. Not universally null. |
ti_event_ticket | base ticket, without ti_event; conditional | Added only when ticket ID is truthy and lookup resolves. |
| team | full team; conditional | Added only when team ID is truthy and lookup resolves. |
Invite with usage and mail records
Invite record plus:
| Field | Type / presence | Meaning |
|---|---|---|
send_mails | array | Stored mail records, empty [] possible; not delivery proof. |
| activations | integer | Count of recorded activations. |
| used | array of full users / null | null until an activation is iterated; users serialized without resource argument. |
| available | boolean | Only activation count and start/end window check; does not certify email/domain/team capacity or every activation condition. |
Public invite
Only title, description, code (stored string/null) and start_date/end_date (timestamp/null) from the invite record. No ID, activation count, recipient email or usage included.
Optional validation data
When return_invite evaluates to true in a boolean check, data contains the invite-record fields plus is_user_exist (boolean lookup by stored email, false without one). No usage/mail arrays are added. JSON string values that evaluate to true can also select this branch; the field does not have to be a JSON boolean. Form input uses Boolean filtering.
Public ticket in invitation validation
| Field | Type / presence | Meaning |
|---|---|---|
| id | stored integer | Ticket-definition ID, not a purchased pass. |
| title, description | stored string / null | Ticket display text. |
| price | stored numeric | Ticket price; units unspecified. |
| currency | stored string | Currency label. |
is_private | stored flag | Visibility setting, without explicit normalization. |
ti_event | base event | Parent event; its photo array contains slug/url media objects. |
Stored mail record
| Field | Type / presence | Meaning |
|---|---|---|
id, user_id | stored integer / nullable reference | Mail record and related user. |
| type, hash, subject, body, email, status, errors | stored string / nullable | Recorded mail data; no closed status enum or delivery guarantee. |
| viewed | stored flag | Recorded view flag. |
viewed_at, created_at | timestamp / nullable | Recorded view/creation times. |
| event | object / empty [] | name, title, event_type, event_group (stored strings/null); present when event_id resolves. |
| template | object / empty [] | id (stored integer), name/subject (stored string/null), html (URL-encoded string), is_default (stored flag), created_at/updated_at (timestamps), used (boolean from event-dependency count); when template exists. |
| user | full user / empty [] | Stored user_id truthy selects user with no resource argument. |
Team detail with users and invitations
Full team plus invites (array of invite-with-usage/mail, [] possible) and users (array, [] possible). Each users item is a full user serialized without resource argument, merged with role/status (stored strings/null from that team relationship). No role/status/active filtering; no subscription field is added to the team itself. This projection is used by team create/update/detail, unlike the team-list item.
Invite-list item
Invite record plus activations (integer count) and used (array of full users without resource context or null before any activation). subscription is always present as general Pricing when resolved, otherwise null, overriding the base record's conditional omission. No send_mails or available field is added. This is distinct from invitations embedded in team list/detail.
Non-owner member-list item
Full user without resource argument, using the full user fields, plus subscriptions array ([] possible). Each subscription is a general Pricing, adding subscription_end_date (stored timestamp/null) and autorenew (stored flag from team-linked membership). No active/expiry filter. No team_relationship, role or status expansion is added by this list.
Selected member with resource context
Full user with selected resource context; use the field definitions under resource-aware user for extra/uid/resource-created-at/language/locked/active/confirm/settings/role and base full-user fields. It adds subscriptions as identity memberships and teams as identity teams, with that resource/partner visibility. last_action is not added by these team detail/update operations; no authentication fields are merged. The conditional role is resource-account role, not selected-team relationship role. No separate team_relationship is returned.