Objects / Organization
Organization
Canonical account record for tenant and workspace governance across the platform.
Generated from @oods/foundry 0.10.1
Screens
Every screen below was generated from this object by OODS Foundry 0.10.1, in React and Vue, and shows the calls that made it and its content hash. Each runs as its generated app runs, in this site's brand, Aquex, in the theme you choose, with the sample records this object's own file carries. A value no record gives shows as a neutral one, such as an empty value or "Not recorded"; OODS Foundry invents none.
sha256:466706866746…Open full size: Organization detail screen generated by OODS Foundry in Reactsha256:41ee692d951a…Open full size: Organization detail screen generated by OODS Foundry in Vuesha256:211321fda0fc…Open full size: Organization list screen generated by OODS Foundry in Reactsha256:e65d38c2bb40…Open full size: Organization list screen generated by OODS Foundry in Vuesha256:360765c2e203…Open full size: Organization form screen generated by OODS Foundry in Reactsha256:eb1534758ae1…Open full size: Organization form screen generated by OODS Foundry in Vuesha256:65de738aaa45…Open full size: Organization timeline screen generated by OODS Foundry in Reactsha256:88f981578d2c…Open full size: Organization timeline screen generated by OODS Foundry in Vuesha256:70641c868766…Open full size: Organization card screen generated by OODS Foundry in Reactsha256:0fdad17afa9f…Open full size: Organization card screen generated by OODS Foundry in Vuesha256:985771c90d7f…Open full size: Organization inline screen generated by OODS Foundry in Reactsha256:ca7f32c09f01…Open full size: Organization inline screen generated by OODS Foundry in Vuesha256:d7d22b2a13da…Open full size: Organization workflow screen generated by OODS Foundry in Reactsha256:5222ffca5e95…Open full size: Organization workflow screen generated by OODS Foundry in VueThe calls that made the Organization detail apps, in React and Vue
design_compose {
"object": "Organization",
"context": "detail",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-2d577e1b",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-2d577e1b",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:466706866746b02c4db8dae906aa15fcca72914a608004fd2ed1f3c1d62ed083. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:41ee692d951a25392685af6bc0937726daba0b527b7750384670ada1a4183155. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Organization list apps, in React and Vue
design_compose {
"object": "Organization",
"context": "list",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-49dadc0a",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-49dadc0a",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:211321fda0fcb1aacbf0b4ce2f42c1968a09a4ba74d00f7d94a1369c502aceb5. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:e65d38c2bb40d320db938efb89a389f06ab349bbdce667d724f2502664116be9. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Organization form apps, in React and Vue
design_compose {
"object": "Organization",
"context": "form",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-a7e919a8",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-a7e919a8",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:360765c2e2038f67481e04a6a023dab439fbf5d633d31719e0a656251e4e68ff. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:eb1534758ae17eaa94741c08c1bf7482653e7fe6d6091903b96cac6fe9e689fe. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Organization timeline apps, in React and Vue
design_compose {
"object": "Organization",
"context": "timeline",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-c9f5a6d7",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-c9f5a6d7",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:65de738aaa45a4c9d88d29d406d051b389af4122092a4c268f98c9fc7ecabf67. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:88f981578d2cf228a7bfd29a5c26cb1519e2c763587cecbfb085cdc940cf51db. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Organization card apps, in React and Vue
design_compose {
"object": "Organization",
"context": "card",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-15b3f07e",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-15b3f07e",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:70641c868766081fd837f5046f462c14d3fd09630cfc0cb40d0e70bcc4d68807. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:0fdad17afa9ff16b6578b712b648de242a0a3cb1d5067d115225ac8802602f6a. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Organization inline apps, in React and Vue
design_compose {
"object": "Organization",
"context": "inline",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-b390aa70",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-b390aa70",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:985771c90d7fcab2d302776638549cddff225c6fd5ba34c6e1583972659b6416. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:ca7f32c09f0116eafcdacef1515907dd9e004f6701d1e4c41b580bd594c012ef. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Organization workflow apps, in React and Vue
design_compose {
"object": "Organization",
"context": "workflow",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-02e0b3ff",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-02e0b3ff",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:d7d22b2a13da949efeb518d5757eb7efc1d1d5add8b9a0838e61edaefb753e6d. Its src/ folder: App.tsx, actions.ts, app.css, application.ts, main.tsx, oods-brand-aquex.css, sample-data.ts, screens/, ssr.tsx, store.ts
The Vue app's content hash: sha256:5222ffca5e958f8b2739c6be46a3eb898901b6ae1dad6ea0511dd2e30bd4788c. Its src/ folder: App.vue, actions.ts, app.css, application.ts, main.ts, oods-brand-aquex.css, sample-data.ts, screens/, ssr.ts, store.ts
Fields
| Field | Type | Description |
|---|---|---|
labelrequired | string | Human-readable display name rendered in primary surfaces. |
description | string | Supporting description used in detail and card contexts. |
placeholder | string | Hint copy surfaced in form fields when the label is empty. |
statusrequired | string | Canonical lifecycle state derived from the states parameter. MoreThis is the single source of truth for the entity's current lifecycle position. Consumed by Colorized to resolve visual tokens, and by view extensions to render StatusBadge and StatusTimeline. |
state_history | StateTransition[] | Chronological log of state transitions. MoreEach entry records the before/after states, timestamp, and (when governance is enabled) the actor, reason, and transition metadata. Rendered by StatusTimeline in the detail and timeline views. Entry structure: - from: string (previous state) - to: string (new state) - timestamp: ISO 8601 datetime - actor_id: string (user/system who triggered the transition, optional) - reason: string (human-readable justification, required when requireTransitionReason is true) - transition_metadata: Record<string, unknown> (arbitrary context, optional) |
allowed_transitions | string[] | Materialized list of valid next states from the current status, computed from the
transitionRules parameter. MoreWhen transitionRules is null (open model), this contains all states except the current one. Used by StatusSelector to disable invalid options and by StatusBadge to indicate available paths. |
owner_idrequired | string | Identifier of the owning principal scoped by owner_type. |
owner_typerequired | string | Categorical owner type sourced from the ownerTypes parameter. |
ownership_role | string | Optional role name describing how the owner governs the entity. |
ownership_transferred_at | datetime | Timestamp recording when ownership was last transferred. |
created_atrequired | datetime | Timestamp recording when the entity was first created. |
updated_at | datetime | Timestamp for the most recent modification, when available. |
last_eventrequired | string | Lifecycle event associated with the most recent timestamp mutation. |
last_event_at | datetime | Timestamp for the lifecycle event captured in last_event. |
tags | string[] | Ordered list of tags assigned to the entity. |
tag_countrequired | number | Computed number of tags assigned to the entity. |
tag_metadata | object[] | Per-tag governance metadata. MoreEach entry corresponds to a tag in the tags array and tracks provenance and usage for taxonomy health monitoring. Entry structure: - tag: string (the tag value, matches entry in tags array) - created_at: ISO 8601 datetime - created_by: string (user ID or "system" for allow-list tags) - usage_count: number (how many entities use this tag, computed) - moderation_status: "approved" | "pending" | "rejected" (when allowTagModeration is true) - canonical_form: string (resolved synonym target, when synonymResolution is enabled) |
address_rolesrequired | string[] | Ordered list of roles that currently have address entries. |
default_address_role | string | Role surfaced in UI contexts when one address must be highlighted. |
addresses | AddressableEntry[] | Collection of { role, address, metadata } entries keyed by role. |
preference_documentrequired | PreferenceDocument | Normalized preference payload captured by PreferenceStore (version, preferences map, metadata). |
preference_metadatarequired | PreferenceMetadata | Tracks schema version, lastUpdated timestamp, migration records, and source. |
preference_versionrequired | string | SemVer mirror of preference_document.version for indexing and analytics. |
preference_namespacesrequired | string[] | Materialized namespace list resolved from parameters/registry for auditing. |
preference_mutations | number | Monotonic counter incremented whenever preferences mutate (invalidates caches). |
role_catalogrequired | AuthzRoleDocument[] | Canonical RBAC roles (R21.2 Part 4.2 TABLE 1). |
permission_catalogrequired | AuthzPermissionDocument[] | Atomic permissions following resource:action notation (TABLE 2). |
role_permissionsrequired | Record<string, string[]> | Junction map for role→permission edges (TABLE 3). |
membership_recordsrequired | AuthzMembershipDocument[] | SaaS membership triple (user_id, organization_id, role_id) with UNIQUE constraint (TABLE 4). |
role_hierarchy_edges | AuthzRoleHierarchyEdge[] | Parent→child adjacency list for hierarchical RBAC (Part 3.1). |
session_roles | string[] | Materialized roles granted within the current session/token exchange. |
channel_catalogrequired | Channel[] | Provider configuration for each channel (SMTP/Twilio/FCM/Webhook). |
template_catalogrequired | Template[] | Localized template definitions with declared variables per R20.1 Part 2.3. |
delivery_policiesrequired | DeliveryPolicy[] | Retry/throttle/quiet-hour policies (R20.1 Part 3 lifecycle). |
messages | Message[] | Atomic message payloads queued for delivery (R20.6 Part 1.2 primitives). |
conversations | Conversation[] | Multi-party threaded conversations with membership metadata (R20.6 Part 3.3). |
message_statuses | MessageStatusEntry[] | Delivery state machine transitions (queued → sent → delivered → failed → retried → read). |
organization_idrequired | uuid | Primary identifier for the organization tenant. |
domainrequired | string | Verified root domain associated with the organization. |
plan_tierrequired | string (free, growth, enterprise) | Billing plan currently assigned to the organization. |
billing_statusrequired | string (good_standing, past_due, unpaid, suspended) | Coarse account-level financial standing used by the billing subsystem. MoreIntentionally coarser than the subscription lifecycle: this is a 4-state account vocabulary {good_standing, past_due, unpaid, suspended}, NOT the 8-state billing.subscription.status set. See docs/billing/lifecycle-states.md. |
industry | string | Optional NAICS-derived industry tag. |
employee_count | number | Reported number of active employees. |
billing_contact_email | Primary contact email for invoicing and finance escalations. | |
data_residency | string (us, eu, apac, latam) | Preferred data residency region selected during onboarding. |
owner_name | string | Display name of the owning principal (parent organization, reseller or platform team). |
Traits
Each trait adds fields and behaviour. Every object with the trait gets the same.
Relationships
These arrows show declared relationships between object types. They don't join live records.
The object file
The Organization object definition in YAML: objects/core/Organization.object.yaml
object:
name: Organization
version: 1.2.0
domain: core.account
description: Canonical account record for tenant and workspace governance across the platform.
tags:
- universal
- organization
- tenant
traits:
- name: content/Labelled
alias: OrganizationLabel
- name: lifecycle/Stateful
parameters:
states:
- prospect
- onboarding
- active
- churned
initialState: prospect
- name: structural/Ownerable
parameters:
ownerTypes:
- parent_organization
- reseller
- platform
primaryOwnerType: parent_organization
allowTransfer: true
- name: lifecycle/Timestampable
parameters:
recordedEvents:
- created
- plan_upgraded
- plan_downgraded
- ownership_transferred
timezone: UTC
- name: behavioral/Taggable
parameters:
maxTags: 16
allowCustomTags: false
allowedTags:
- enterprise
- smb
- nonprofit
- startup
- strategic
caseSensitive: false
- name: core/Addressable
alias: OrganizationLocations
parameters:
roles:
- headquarters
- office
- warehouse
- branch
defaultRole: headquarters
- name: core/Preferenceable
alias: OrganizationPreferences
parameters:
namespaces:
- notifications
- display
- privacy
schemaVersion: 2.0.0
registryNamespace: org-preferences
- name: core/Authable
alias: OrganizationAuthz
parameters:
hierarchyDepthLimit: 5
- name: core/Communicable
alias: OrganizationCommunications
schema:
organization_id:
type: uuid
required: true
description: Primary identifier for the organization tenant.
domain:
type: string
required: true
description: Verified root domain associated with the organization.
validation:
format: hostname
plan_tier:
type: string
required: true
description: Billing plan currently assigned to the organization.
validation:
enum:
- free
- growth
- enterprise
billing_status:
type: string
required: true
default: good_standing
description: >-
Coarse account-level financial standing used by the billing subsystem.
Intentionally coarser than the subscription lifecycle: this is a 4-state
account vocabulary {good_standing, past_due, unpaid, suspended}, NOT the
8-state billing.subscription.status set. See docs/billing/lifecycle-states.md.
validation:
enum:
- good_standing
- past_due
- unpaid
- suspended
industry:
type: string
required: false
description: Optional NAICS-derived industry tag.
employee_count:
type: number
required: false
description: Reported number of active employees.
validation:
minimum: 0
billing_contact_email:
type: email
required: false
description: Primary contact email for invoicing and finance escalations.
data_residency:
type: string
required: false
description: Preferred data residency region selected during onboarding.
validation:
enum:
- us
- eu
- apac
- latam
owner_name:
type: string
required: false
description: Display name of the owning principal (parent organization, reseller or platform team).
semantics:
# The one-line summary under the organization's name in lists (content/Labelled's description, marked as the summary).
description:
semantic_type: text.summary
token_mapping: tokenMap(text.body.*)
ui_hints:
component: TextBody
maxLengthParameter: maxDescriptionLength
# structural/Ownerable's owner reference, named by owner_name.
owner_id:
semantic_type: ownership.owner.id
token_mapping: tokenMap(ownership.owner.id)
ui_hints:
component: OwnerReference
ownerTypeField: owner_type
displayLabelField: owner_name
organization_id:
semantic_type: organization.id
token_mapping: tokenMap(organization.id.primary)
domain:
semantic_type: organization.domain
token_mapping: tokenMap(organization.domain.primary)
plan_tier:
semantic_type: organization.plan.tier
token_mapping: tokenMap(organization.plan.tier)
billing_status:
semantic_type: billing.account.status
token_mapping: tokenMap(billing.account.status)
employee_count:
semantic_type: organization.metrics.employee_count
token_mapping: tokenMap(metric.count.primary)
tokens:
organization.id.primary: "var(--text-strong)"
organization.domain.primary: "var(--text-strong)"
billing.account.status.good: "var(--status-success)"
billing.account.status.risk: "var(--status-warning)"
metadata:
owners:
- customer-success@oods.systems
- billing@oods.systems
steward: platform@oods.systems
changelog:
- version: 1.2.0
date: "2025-11-20"
description: Added Authable trait to expose membership and entitlement exports for tenant governance.
- version: 1.1.0
date: "2025-11-18"
description: Added Addressable trait for headquarters, branch, office, and warehouse roles.
- version: 1.0.0
date: "2025-10-16"
description: Initial Universal Quintet baseline.
# Eight authored sample organizations. Each is one coherent account: the same names appear as the customers on the
# Subscription, Invoice, Transaction and Usage samples. Its lifecycle follows its plan: a prospect is on Free, an
# onboarding account is trialling a paid plan, an active account pays, and a churned account is back on Free.
samples:
- organization_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a01
label: Northwind Traders
description: Wholesale food distributor in Chicago
domain: northwind.example
plan_tier: growth
billing_status: good_standing
industry: Wholesale trade
employee_count: 85
billing_contact_email: billing@northwind.example
data_residency: us
owner_id: org_northwind_group
owner_type: parent_organization
owner_name: Northwind Group
ownership_role: Parent account
tags: [strategic]
tag_count: 1
status: active
state_history:
- { title: Signed up, from: null, to: prospect, at: '2026-02-02T15:00:00Z', reason: Created a workspace on the Free plan }
- { title: Trial started, from: prospect, to: onboarding, at: '2026-02-16T15:00:00Z', reason: Started a 14-day Team trial }
- { title: Went live, from: onboarding, to: active, at: '2026-03-02T15:00:00Z', reason: Trial converted to the Team plan }
created_at: '2026-02-02T15:00:00Z'
updated_at: '2026-06-16T15:00:00Z'
last_event: plan_upgraded
last_event_at: '2026-06-16T15:00:00Z'
- organization_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a02
label: Blue Harbor Studio
description: Packaging design studio in Portland
domain: blueharbor.example
plan_tier: growth
billing_status: good_standing
industry: Design services
employee_count: 12
billing_contact_email: accounts@blueharbor.example
data_residency: us
owner_id: platform_self_serve
owner_type: platform
owner_name: Self-serve
ownership_role: Direct customer
tags: [smb, startup]
tag_count: 2
status: onboarding
state_history:
- { title: Signed up, from: null, to: prospect, at: '2026-09-19T10:00:00Z', reason: Signed up from the pricing page }
- { title: Trial started, from: prospect, to: onboarding, at: '2026-09-21T09:00:00Z', reason: Started a 14-day Team trial }
created_at: '2026-09-19T10:00:00Z'
updated_at: '2026-09-21T09:00:00Z'
last_event: plan_upgraded
last_event_at: '2026-09-21T09:00:00Z'
- organization_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a03
label: Lindqvist Bakery
description: Bakery with three shops in Gothenburg
domain: lindqvist.example
plan_tier: growth
billing_status: good_standing
industry: Food and beverage
employee_count: 18
billing_contact_email: finance@lindqvist.example
data_residency: eu
owner_id: reseller_nordic_commerce
owner_type: reseller
owner_name: Nordic Commerce Partners
ownership_role: Reseller of record
tags: [smb]
tag_count: 1
status: active
state_history:
- { title: Signed up, from: null, to: prospect, at: '2026-01-12T08:00:00Z', reason: Referred by Nordic Commerce Partners }
- { title: Onboarding, from: prospect, to: onboarding, at: '2026-01-13T08:00:00Z', reason: Reseller set up the shops and card readers }
- { title: Went live, from: onboarding, to: active, at: '2026-01-15T08:00:00Z', reason: Subscribed to the Starter plan }
created_at: '2026-01-12T08:00:00Z'
updated_at: '2026-01-15T08:00:00Z'
last_event: plan_upgraded
last_event_at: '2026-01-15T08:00:00Z'
- organization_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a04
label: Kestrel Print Co.
description: Commercial print shop in Leeds
domain: kestrelprint.example
plan_tier: growth
billing_status: past_due
industry: Commercial printing
employee_count: 34
billing_contact_email: hello@kestrelprint.example
data_residency: eu
owner_id: platform_self_serve
owner_type: platform
owner_name: Self-serve
ownership_role: Direct customer
tags: [smb]
tag_count: 1
status: active
state_history:
- { title: Signed up, from: null, to: prospect, at: '2026-01-20T10:00:00Z', reason: Created a workspace on the Free plan }
- { title: Trial started, from: prospect, to: onboarding, at: '2026-01-20T10:30:00Z', reason: Started a 14-day Team trial }
- { title: Went live, from: onboarding, to: active, at: '2026-02-03T10:00:00Z', reason: Trial converted to the Team plan }
created_at: '2026-01-20T10:00:00Z'
updated_at: '2026-02-03T10:00:00Z'
last_event: plan_upgraded
last_event_at: '2026-02-03T10:00:00Z'
- organization_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a05
label: Tidewater Co-op
description: Farmers' cooperative in Tauranga, NZ
domain: tidewater.example
plan_tier: enterprise
billing_status: good_standing
industry: Agricultural cooperative
employee_count: 640
billing_contact_email: treasurer@tidewater.example
data_residency: apac
owner_id: platform_enterprise_sales
owner_type: platform
owner_name: Enterprise accounts
ownership_role: Account team
ownership_transferred_at: '2025-06-02T09:00:00Z'
tags: [enterprise, strategic]
tag_count: 2
status: active
state_history:
- { title: Signed up, from: null, to: prospect, at: '2024-09-16T21:00:00Z', reason: Requested an Enterprise demo }
- { title: Pilot started, from: prospect, to: onboarding, at: '2024-10-01T21:00:00Z', reason: Started a 30-day Enterprise pilot }
- { title: Went live, from: onboarding, to: active, at: '2024-10-30T14:00:00Z', reason: Signed the annual Enterprise agreement }
created_at: '2024-09-16T21:00:00Z'
updated_at: '2025-06-02T09:00:00Z'
last_event: ownership_transferred
last_event_at: '2025-06-02T09:00:00Z'
- organization_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a06
label: Marlow Yoga
description: Yoga studio in Austin, closed in July
domain: marlowyoga.example
plan_tier: free
billing_status: good_standing
industry: Fitness studio
employee_count: 6
billing_contact_email: studio@marlowyoga.example
data_residency: us
owner_id: platform_self_serve
owner_type: platform
owner_name: Self-serve
ownership_role: Direct customer
tags: [smb]
tag_count: 1
status: churned
state_history:
- { title: Signed up, from: null, to: prospect, at: '2026-01-05T10:15:00Z', reason: Created a workspace on the Free plan }
- { title: Went live, from: prospect, to: active, at: '2026-01-09T10:15:00Z', reason: Subscribed to the Starter plan }
- { title: Churned, from: active, to: churned, at: '2026-07-09T10:15:00Z', reason: Studio closed; back on the Free plan }
created_at: '2026-01-05T10:15:00Z'
updated_at: '2026-07-09T10:15:00Z'
last_event: plan_downgraded
last_event_at: '2026-07-09T10:15:00Z'
- organization_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a07
label: Summit Outfitters
description: Outdoor gear retailer in Denver
domain: summit.example
plan_tier: growth
billing_status: good_standing
industry: Outdoor retail
employee_count: 120
billing_contact_email: ap@summit.example
data_residency: us
owner_id: reseller_harbor_channel
owner_type: reseller
owner_name: Harbor Channel Partners
ownership_role: Reseller of record
tags: []
tag_count: 0
status: active
state_history:
- { title: Signed up, from: null, to: prospect, at: '2026-04-23T12:00:00Z', reason: Referred by Harbor Channel Partners }
- { title: Trial started, from: prospect, to: onboarding, at: '2026-04-23T12:30:00Z', reason: Started a 14-day Business trial }
- { title: Went live, from: onboarding, to: active, at: '2026-05-07T12:00:00Z', reason: Trial converted to the Business plan }
created_at: '2026-04-23T12:00:00Z'
updated_at: '2026-05-07T12:00:00Z'
last_event: plan_upgraded
last_event_at: '2026-05-07T12:00:00Z'
- organization_id: 3f1c2a4e-5b6d-4e7f-8a9b-0c1d2e3f4a08
label: Gale & Rowe Legal
description: Employment law practice in Boston
domain: galerowe.example
plan_tier: free
billing_status: good_standing
industry: Legal services
employee_count: 22
billing_contact_email: office@galerowe.example
data_residency: us
owner_id: platform_self_serve
owner_type: platform
owner_name: Self-serve
ownership_role: Direct customer
tags: [smb]
tag_count: 1
status: prospect
state_history:
- { title: Signed up, from: null, to: prospect, at: '2026-08-11T13:00:00Z', reason: Requested a demo }
- { title: Trial started, from: prospect, to: onboarding, at: '2026-08-25T13:00:00Z', reason: Started a 14-day Team trial }
- { title: Trial ended, from: onboarding, to: prospect, at: '2026-09-08T13:00:00Z', reason: Trial ended without a purchase }
created_at: '2026-08-11T13:00:00Z'
updated_at: '2026-09-08T13:00:00Z'
last_event: plan_downgraded
last_event_at: '2026-09-08T13:00:00Z'