[Objects](https://oods-foundry.com/objects) / Organization

# Organization

Canonical account record for tenant and workspace governance across the platform.

Maturity not declared 9 traits · 7 contexts · 46 fields [Organization.object.yaml](#file) [How objects work](https://oods-foundry.com/guides/objects-and-traits)

Generated from @oods/foundry 0.10.2

## Screens

Every screen below was generated from this object by OODS Foundry 0.10.2, 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.

[Organization detail screen generated by OODS Foundry in React](https://oods-foundry.com/objects/organization/screens/detail-react)

React app · sample records Maturity: not declared `sha256:466706866746…` [Open full size: Organization detail screen generated by OODS Foundry in React](https://oods-foundry.com/objects/organization/screens/detail-react)

Vue app · sample records Maturity: not declared `sha256:41ee692d951a…` [Open full size: Organization detail screen generated by OODS Foundry in Vue](https://oods-foundry.com/objects/organization/screens/detail-vue)

React app · sample records Maturity: not declared `sha256:211321fda0fc…` [Open full size: Organization list screen generated by OODS Foundry in React](https://oods-foundry.com/objects/organization/screens/list-react)

Vue app · sample records Maturity: not declared `sha256:e65d38c2bb40…` [Open full size: Organization list screen generated by OODS Foundry in Vue](https://oods-foundry.com/objects/organization/screens/list-vue)

React app · sample records Maturity: not declared `sha256:360765c2e203…` [Open full size: Organization form screen generated by OODS Foundry in React](https://oods-foundry.com/objects/organization/screens/form-react)

Vue app · sample records Maturity: not declared `sha256:eb1534758ae1…` [Open full size: Organization form screen generated by OODS Foundry in Vue](https://oods-foundry.com/objects/organization/screens/form-vue)

React app · sample records Maturity: not declared `sha256:65de738aaa45…` [Open full size: Organization timeline screen generated by OODS Foundry in React](https://oods-foundry.com/objects/organization/screens/timeline-react)

Vue app · sample records Maturity: not declared `sha256:88f981578d2c…` [Open full size: Organization timeline screen generated by OODS Foundry in Vue](https://oods-foundry.com/objects/organization/screens/timeline-vue)

React app · sample records Maturity: not declared `sha256:70641c868766…` [Open full size: Organization card screen generated by OODS Foundry in React](https://oods-foundry.com/objects/organization/screens/card-react)

Vue app · sample records Maturity: not declared `sha256:0fdad17afa9f…` [Open full size: Organization card screen generated by OODS Foundry in Vue](https://oods-foundry.com/objects/organization/screens/card-vue)

React app · sample records Maturity: not declared `sha256:985771c90d7f…` [Open full size: Organization inline screen generated by OODS Foundry in React](https://oods-foundry.com/objects/organization/screens/inline-react)

Vue app · sample records Maturity: not declared `sha256:ca7f32c09f01…` [Open full size: Organization inline screen generated by OODS Foundry in Vue](https://oods-foundry.com/objects/organization/screens/inline-vue)

React app · sample records Maturity: not declared `sha256:d7d22b2a13da…` [Open full size: Organization workflow screen generated by OODS Foundry in React](https://oods-foundry.com/objects/organization/screens/workflow-react)

Vue app · sample records Maturity: not declared `sha256:5222ffca5e95…` [Open full size: Organization workflow screen generated by OODS Foundry in Vue](https://oods-foundry.com/objects/organization/screens/workflow-vue)

The calls that made the Organization detail apps, in React and Vue

3 calls, as the pipeline sent them

```
design_compose {
  "object": "Organization",
  "context": "detail",
  "preferences": {
    "brand": "Aquex",
    "theme": "light"
  }
}

code_generate {
  "schemaRef": "compose-d406ee46",
  "framework": "react",
  "profile": "build",
  "options": {
    "output": "application",
    "brand": "Aquex",
    "theme": "light",
    "payloadMode": "file"
  }
}

code_generate {
  "schemaRef": "compose-d406ee46",
  "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

3 calls, as the pipeline sent them

```
design_compose {
  "object": "Organization",
  "context": "list",
  "preferences": {
    "brand": "Aquex",
    "theme": "light"
  }
}

code_generate {
  "schemaRef": "compose-a712281d",
  "framework": "react",
  "profile": "build",
  "options": {
    "output": "application",
    "brand": "Aquex",
    "theme": "light",
    "payloadMode": "file"
  }
}

code_generate {
  "schemaRef": "compose-a712281d",
  "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

3 calls, as the pipeline sent them

```
design_compose {
  "object": "Organization",
  "context": "form",
  "preferences": {
    "brand": "Aquex",
    "theme": "light"
  }
}

code_generate {
  "schemaRef": "compose-ebdae614",
  "framework": "react",
  "profile": "build",
  "options": {
    "output": "application",
    "brand": "Aquex",
    "theme": "light",
    "payloadMode": "file"
  }
}

code_generate {
  "schemaRef": "compose-ebdae614",
  "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

3 calls, as the pipeline sent them

```
design_compose {
  "object": "Organization",
  "context": "timeline",
  "preferences": {
    "brand": "Aquex",
    "theme": "light"
  }
}

code_generate {
  "schemaRef": "compose-d5a8dbd3",
  "framework": "react",
  "profile": "build",
  "options": {
    "output": "application",
    "brand": "Aquex",
    "theme": "light",
    "payloadMode": "file"
  }
}

code_generate {
  "schemaRef": "compose-d5a8dbd3",
  "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

3 calls, as the pipeline sent them

```
design_compose {
  "object": "Organization",
  "context": "card",
  "preferences": {
    "brand": "Aquex",
    "theme": "light"
  }
}

code_generate {
  "schemaRef": "compose-70643aea",
  "framework": "react",
  "profile": "build",
  "options": {
    "output": "application",
    "brand": "Aquex",
    "theme": "light",
    "payloadMode": "file"
  }
}

code_generate {
  "schemaRef": "compose-70643aea",
  "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

3 calls, as the pipeline sent them

```
design_compose {
  "object": "Organization",
  "context": "inline",
  "preferences": {
    "brand": "Aquex",
    "theme": "light"
  }
}

code_generate {
  "schemaRef": "compose-18eeb616",
  "framework": "react",
  "profile": "build",
  "options": {
    "output": "application",
    "brand": "Aquex",
    "theme": "light",
    "payloadMode": "file"
  }
}

code_generate {
  "schemaRef": "compose-18eeb616",
  "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

3 calls, as the pipeline sent them

```
design_compose {
  "object": "Organization",
  "context": "workflow",
  "preferences": {
    "brand": "Aquex",
    "theme": "light"
  }
}

code_generate {
  "schemaRef": "compose-e48b667c",
  "framework": "react",
  "profile": "build",
  "options": {
    "output": "application",
    "brand": "Aquex",
    "theme": "light",
    "payloadMode": "file"
  }
}

code_generate {
  "schemaRef": "compose-e48b667c",
  "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 |
| - | - | - |
| `label` required | 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. |
| `status` required | 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_id` required | string | Identifier of the owning principal scoped by owner_type. |
| `owner_type` required | 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_at` required | datetime | Timestamp recording when the entity was first created. |
| `updated_at` | datetime | Timestamp for the most recent modification, when available. |
| `last_event` required | 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_count` required | 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_roles` required | 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_document` required | PreferenceDocument | Normalized preference payload captured by PreferenceStore (version, preferences map, metadata). |
| `preference_metadata` required | PreferenceMetadata | Tracks schema version, lastUpdated timestamp, migration records, and source. |
| `preference_version` required | string | SemVer mirror of preference_document.version for indexing and analytics. |
| `preference_namespaces` required | string\[] | Materialized namespace list resolved from parameters/registry for auditing. |
| `preference_mutations` | number | Monotonic counter incremented whenever preferences mutate (invalidates caches). |
| `role_catalog` required | AuthzRoleDocument\[] | Canonical RBAC roles (R21.2 Part 4.2 TABLE 1). |
| `permission_catalog` required | AuthzPermissionDocument\[] | Atomic permissions following resource:action notation (TABLE 2). |
| `role_permissions` required | Record\<string, string\[]> | Junction map for role→permission edges (TABLE 3). |
| `membership_records` required | 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_catalog` required | Channel\[] | Provider configuration for each channel (SMTP/Twilio/FCM/Webhook). |
| `template_catalog` required | Template\[] | Localized template definitions with declared variables per R20.1 Part 2.3. |
| `delivery_policies` required | 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_id` required | uuid | Primary identifier for the organization tenant. |
| `domain` required | string | Verified root domain associated with the organization. |
| `plan_tier` required | string (free, growth, enterprise) | Billing plan currently assigned to the organization. |
| `billing_status` required | 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` | 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.

- [Labelled as OrganizationLabel](https://oods-foundry.com/traits/labelled)
- [Stateful](https://oods-foundry.com/traits/stateful)
- [Ownerable](https://oods-foundry.com/traits/ownerable)
- [Timestampable](https://oods-foundry.com/traits/timestampable)
- [Taggable](https://oods-foundry.com/traits/taggable)
- [Addressable as OrganizationLocations](https://oods-foundry.com/traits/addressable)
- [Preferenceable as OrganizationPreferences](https://oods-foundry.com/traits/preferenceable)
- [Authable as OrganizationAuthz](https://oods-foundry.com/traits/authable)
- [Communicable as OrganizationCommunications](https://oods-foundry.com/traits/communicable)

## 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'
```
