Organizations tools
MCP tools for Organizations: organizations_close, organizations_closure_get, organizations_create, organizations_export, organizations_exports_list, organizations_get, organizations_list_mine, organizations_reinstate, organizations_suspend, organizations_update.
organizations_close: Close the organizationorganizations_closure_get: Get the organization's closureorganizations_create: Create an organizationorganizations_export: Export the organization's dataorganizations_exports_list: List the organization's exportsorganizations_get: Get the organizationorganizations_list_mine: List your organizationsorganizations_reinstate: Lift an abuse suspensionorganizations_suspend: Suspend an organization for abuseorganizations_update: Update the organization
organizations_close
Close the organization. Operation organizations.close · Organization level · permission org:admin · risk tier security · since M12
Starts closing the organization. It becomes closing at once:
- live brands stop taking new checkouts;
- every subscription is cancelled the way you choose: at the end of its current period, or immediately (the customers are told);
- the organization stays
closinguntil its open invoices, refunds and final filing periods are done; - then it is
closed: read-only, and you can still export its data (organizations.export).
Financial records are kept for the legal retention period (10 years by default, longer where an entity's country requires it), then deleted. Personal data not needed for financial records is pseudonymised when the organization closes. Closing can't be undone from the console.
Only an owner can close the organization, with a sign-in in the last 15 minutes, confirming with its slug.
Annotations: readOnlyHint: false · destructiveHint: true · idempotentHint: false · openWorldHint: true
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
id | ID (org_…) | yes | – |
subscriptions | one of period_end, immediate | yes | period_end: subscriptions end when their current period ends; immediate: they end now, with notice. |
reason | string | no | (at most 1000 characters) |
confirm | string | yes | The organization's slug, as confirmation. (1–64 characters) |
idempotency_key | string | no | A unique string for this change. Retrying with the same key and arguments never acts twice. When left out, the server generates one and returns it in the result's idempotency_key. (1–255 characters) |
dry_run | boolean | no | true: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false) |
- Idempotency: the result returns the
idempotency_keyused, yours or one the server generated. Retry with it: a call with the same key and arguments never acts twice (keys are kept for 24 hours). - Dry run: supported.
dry_run: truechecks permissions and rules and computes the result, then rolls everything back.
Errors
confirmation_mismatch:confirmisn't the organization's slug.owner_required: You aren't an owner of the organization.organization_not_closable: The organization is suspended, closing or closed already (details.status).resource_not_found: The ID isn't the organization of the request.version_conflict: The organization changed at the same time; retry.fresh_auth_required: Your last sign-in is older than 15 minutes.permission_denied: You can't manage this organization.
Example
Close, letting subscriptions run to the end of their period
Arguments:
{
"id": "org_01m4tx5nj7ekd958x53w4bntcg",
"subscriptions": "period_end",
"reason": "We're winding the company down.",
"confirm": "acme",
"idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}
Result output:
{
"object": "organization_closure",
"orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
"status": "closing",
"subscriptions": "period_end",
"reason": "We're winding the company down.",
"requestedAt": "2026-10-26T09:00:00.000Z",
"requestedBy": {
"type": "user",
"id": "usr_01m4tx5nj8emwbyf7y9vcf47xa"
},
"subscriptionsCancelledAt": null,
"subscriptionsEndedAt": null,
"closedAt": null,
"retainUntil": null,
"blockers": []
}
organizations_closure_get
Get the organization's closure. Operation organizations.closure.get · Organization level · permission org:read · risk tier read · since M12
Returns the organization's status and, once closing started, the closure: how subscriptions end, when they were
cancelled and ended, what still holds the closure (blockers: subscriptions not ended yet, open invoices,
pending refunds, final filing periods not submitted), when it closed and until when its financial records are
kept. closure is null for an organization that isn't closing.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
id | ID (org_…) | yes | – |
- Read-only: changes nothing;
idempotency_keyis ignored.
Errors
resource_not_found: The ID isn't the organization of the request.permission_denied: You can't read this organization.
Example
Closing, subscriptions still running
Arguments:
{
"id": "org_01m4tx5nj7ekd958x53w4bntcg"
}
Result output:
{
"object": "organization_closure_status",
"orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
"status": "closing",
"closure": {
"object": "organization_closure",
"orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
"status": "closing",
"subscriptions": "period_end",
"reason": "We're winding the company down.",
"requestedAt": "2026-10-26T09:00:00.000Z",
"requestedBy": {
"type": "user",
"id": "usr_01m4tx5nj8emwbyf7y9vcf47xa"
},
"subscriptionsCancelledAt": null,
"subscriptionsEndedAt": null,
"closedAt": null,
"retainUntil": null,
"blockers": [
{
"blocker": "subscriptions",
"count": 12
}
]
}
}
organizations_create
Create an organization. Operation organizations.create · Platform level · permission account:write · risk tier write · since M1
Creates an organization (the account and the boundary for all its data) and makes you its owner
(org_owner). The slug appears in console URLs (/console/{slug}) and is unique across Ownrecord:
3 to 40 lowercase letters, digits and single hyphens.
Who can call it: any signed-in user, from the console. API keys belong to an organization, so they can't create one.
New organizations start on Ownrecord's free sandbox plan (test mode only): Ownrecord creates the
organization's billing account and subscription right after. Upgrade in Organization → Billing
(platform_billing.change_plan) to take live payments. Add a legal entity next, then a brand.
Annotations: readOnlyHint: false · destructiveHint: false · idempotentHint: false · openWorldHint: false
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
name | string | yes | (1–120 characters) |
slug | string | yes | (3–40 characters) |
country | string | yes | – |
idempotency_key | string | no | A unique string for this change. Retrying with the same key and arguments never acts twice. When left out, the server generates one and returns it in the result's idempotency_key. (1–255 characters) |
dry_run | boolean | no | true: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false) |
- Idempotency: the result returns the
idempotency_keyused, yours or one the server generated. Retry with it: a call with the same key and arguments never acts twice (keys are kept for 24 hours). - Dry run: supported.
dry_run: truechecks permissions and rules and computes the result, then rolls everything back.
Errors
validation_failed: The name, slug or country is missing or malformed.slug_invalid: The slug has the wrong format or is a reserved word such asapi.slug_taken: Another organization already uses this slug.permission_denied: The caller isn't a signed-in user (for example, an API key).
Example
Create an organization
Arguments:
{
"name": "Acme",
"slug": "acme",
"country": "HR",
"idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}
Result output:
{
"id": "org_01m4tx5nj7ekd958x53w4bntcg",
"object": "organization",
"slug": "acme",
"name": "Acme",
"country": "HR",
"status": "active",
"isPlatform": false,
"supportAccess": "on_request",
"requireMfa": false,
"entitlements": {
"livemode": true,
"entities.max": 2,
"brands.max": 3,
"members.max": 10,
"jurisdictions.registered.max": 10,
"subscriptions.enabled": true,
"usage_billing.enabled": true,
"einvoicing.enabled": true,
"processors.secondary": false,
"custom_domains.max": 2,
"api.rate_limit_rps": 100,
"audit.retention_days": 90,
"support.level": "email",
"filing.reports": "full",
"sso.enabled": false,
"assistant.enabled": true,
"assistant.messages_per_month": 1000
},
"plan": {
"status": "none",
"override": {
"reason": "Temporary Growth entitlements until platform billing (M12)",
"expiresAt": null
}
},
"createdBy": "usr_01m4tx5nj8emwbyf7y9vcf47xa",
"createdAt": "2026-10-13T12:00:00.000Z",
"updatedAt": "2026-10-13T12:00:00.000Z"
}
organizations_export
Export the organization's data. Operation organizations.export · Organization level · permission org:admin · risk tier security · since M12
Requests an export of everything in the organization: one JSON file per kind of record (legal entities, brands, customers, subscriptions, invoices, the ledger, registrations, filings and the rest, both modes), plus the PDFs of its invoices and credit notes, in one ZIP archive. Secrets, hashes and tokens are left out.
It's built in the background (poll organizations.exports.list until status is ready) and can be
downloaded from the console for 7 days. One export is built at a time. Closed organizations can still export.
Needs org:admin (organization owners and admins). Security tier for agents: it holds all of the
organization's data.
Annotations: readOnlyHint: false · destructiveHint: false · idempotentHint: false · openWorldHint: false
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
id | ID (org_…) | yes | – |
idempotency_key | string | no | A unique string for this change. Retrying with the same key and arguments never acts twice. When left out, the server generates one and returns it in the result's idempotency_key. (1–255 characters) |
dry_run | boolean | no | true: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false) |
- Idempotency: the result returns the
idempotency_keyused, yours or one the server generated. Retry with it: a call with the same key and arguments never acts twice (keys are kept for 24 hours). - Dry run: supported.
dry_run: truechecks permissions and rules and computes the result, then rolls everything back.
Errors
organization_export_in_progress: An export is already queued or being built.resource_not_found: The ID isn't the organization of the request.permission_denied: You can't export this organization.
Example
Request an export
Arguments:
{
"id": "org_01m4tx5nj7ekd958x53w4bntcg",
"idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}
Result output:
{
"id": "exp_01m4tx5nj8emwbyf7y9vcf47xf",
"object": "organization_export",
"status": "queued",
"requestedBy": {
"type": "user",
"id": "usr_01m4tx5nj8emwbyf7y9vcf47xa"
},
"file": null,
"failure": null,
"readyAt": null,
"expiresAt": null,
"createdAt": "2026-10-26T09:00:00.000Z",
"updatedAt": "2026-10-26T09:00:00.000Z"
}
organizations_exports_list
List the organization's exports. Operation organizations.exports.list · Organization level · permission org:admin · risk tier read · since M12
Lists the organization's data exports, newest first (at most 20): queued, running, ready with the archive
(downloadable from the console for 7 days, then expired) or failed with the reason.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
id | ID (org_…) | yes | – |
- Read-only: changes nothing;
idempotency_keyis ignored.
Errors
resource_not_found: The ID isn't the organization of the request.permission_denied: You can't export this organization.
Example
A ready export
Arguments:
{
"id": "org_01m4tx5nj7ekd958x53w4bntcg"
}
Result output:
{
"object": "list",
"data": [
{
"id": "exp_01m4tx5nj8emwbyf7y9vcf47xf",
"object": "organization_export",
"status": "ready",
"requestedBy": {
"type": "user",
"id": "usr_01m4tx5nj8emwbyf7y9vcf47xa"
},
"file": {
"fileId": "file_01m4tx5nj8emwbyf7y9vcf47xg",
"filename": "ownrecord-export-2026-10-26.zip",
"contentType": "application/zip",
"size": 482113,
"sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
"documents": 1204
},
"failure": null,
"readyAt": "2026-10-26T09:00:00.000Z",
"expiresAt": "2026-11-02T09:00:00.000Z",
"createdAt": "2026-10-26T09:00:00.000Z",
"updatedAt": "2026-10-26T09:00:00.000Z"
}
]
}
organizations_get
Get the organization. Operation organizations.get · Organization level · permission org:read · risk tier read · since M1
Returns the organization of the request: name, slug, country, status, support-access policy and its
effective plan entitlements (entitlements: the plan's values with any active override applied), which
decide limits such as entities.max and brands.max.
id must be the organization the credentials belong to; any other ID is resource_not_found. Readable by
organization-level members and org management keys.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
id | ID (org_…) | yes | – |
- Read-only: changes nothing;
idempotency_keyis ignored.
Errors
resource_not_found: The ID isn't the organization of the request.permission_denied: You can't read this organization's settings.
Example
Read the organization
Arguments:
{
"id": "org_01m4tx5nj7ekd958x53w4bntcg"
}
Result output:
{
"id": "org_01m4tx5nj7ekd958x53w4bntcg",
"object": "organization",
"slug": "acme",
"name": "Acme",
"country": "HR",
"status": "active",
"isPlatform": false,
"supportAccess": "on_request",
"requireMfa": false,
"entitlements": {
"livemode": true,
"entities.max": 2,
"brands.max": 3,
"members.max": 10,
"jurisdictions.registered.max": 10,
"subscriptions.enabled": true,
"usage_billing.enabled": true,
"einvoicing.enabled": true,
"processors.secondary": false,
"custom_domains.max": 2,
"api.rate_limit_rps": 100,
"audit.retention_days": 90,
"support.level": "email",
"filing.reports": "full",
"sso.enabled": false,
"assistant.enabled": true,
"assistant.messages_per_month": 1000
},
"plan": {
"status": "none",
"override": {
"reason": "Temporary Growth entitlements until platform billing (M12)",
"expiresAt": null
}
},
"createdBy": "usr_01m4tx5nj8emwbyf7y9vcf47xa",
"createdAt": "2026-10-13T12:00:00.000Z",
"updatedAt": "2026-10-13T12:00:00.000Z"
}
organizations_list_mine
List your organizations. Operation organizations.list_mine · Platform level · permission account:read · risk tier read · since M1
Lists the organizations you belong to, with each of your memberships there: the role, the scope (the
whole organization, one legal entity or one brand, with its slug and name) and whether it has live-mode
access. The console uses it for the organization switcher. Sorted by name; limit (1–100, default 100) and starting_after (an organization ID, the next_cursor of the previous page) paginate.
Who can call it: any signed-in user. API keys can't (a key belongs to one organization; use
organizations.get).
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
limit | integer | no | (1–100) |
starting_after | ID (org_…) | no | – |
- Read-only: changes nothing;
idempotency_keyis ignored.
Errors
permission_denied: The caller isn't a signed-in user (for example, an API key).
Example
An owner of one organization and a developer on a brand of another
Arguments:
{}
Result output:
{
"object": "list",
"data": [
{
"id": "org_01m4tx5nj7ekd958x53w4bntcg",
"object": "organization",
"slug": "acme",
"name": "Acme",
"status": "active",
"isPlatform": false,
"memberships": [
{
"id": "mem_01m4tx5nj8emwbyf7y9vcf47x6",
"role": "org_owner",
"scope": {
"type": "org"
},
"livemodeAccess": true
}
]
},
{
"id": "org_01m4tx5nj8emwbyf7y9vcf47x1",
"object": "organization",
"slug": "globex",
"name": "Globex",
"status": "active",
"isPlatform": false,
"memberships": [
{
"id": "mem_01m4tx5nj8emwbyf7y9vcf47x7",
"role": "developer",
"scope": {
"type": "brand",
"brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x5",
"brand": {
"slug": "globex-cloud",
"name": "Globex Cloud",
"entityId": "ent_01m4tx5nj8emwbyf7y9vcf47x3",
"entitySlug": "globex-us"
}
},
"livemodeAccess": false
}
]
}
],
"has_more": false,
"next_cursor": null
}
organizations_reinstate
Lift an abuse suspension. Operation organizations.reinstate · Platform level · permission platform:admin · risk tier security · since M12
Platform admins: lifts a suspension made for abuse or an AUP violation (organizations.suspend). The
organization's status is then what its Ownrecord subscription says: active when it is paid (also when it was
paid during the suspension), otherwise the stage that is due for how long it has been unpaid (restricted after
14 days, suspended after 30, by default). A suspension for non-payment isn't lifted here: it ends when the open
invoices are paid.
Security tier; audited.
Annotations: readOnlyHint: false · destructiveHint: false · idempotentHint: false · openWorldHint: false
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
orgId | ID (org_…) | yes | – |
idempotency_key | string | no | A unique string for this change. Retrying with the same key and arguments never acts twice. When left out, the server generates one and returns it in the result's idempotency_key. (1–255 characters) |
dry_run | boolean | no | true: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false) |
- Idempotency: the result returns the
idempotency_keyused, yours or one the server generated. Retry with it: a call with the same key and arguments never acts twice (keys are kept for 24 hours). - Dry run: supported.
dry_run: truechecks permissions and rules and computes the result, then rolls everything back.
Errors
fresh_auth_required: Your last sign-in is older than 15 minutes: sign in again first.organization_not_suspended: The organization has no abuse suspension.resource_not_found: No such organization.version_conflict: The organization changed at the same time; retry.permission_denied: You aren't a platform admin.
Example
Reinstate
Arguments:
{
"orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
"idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}
Result output:
{
"id": "org_01m4tx5nj7ekd958x53w4bntcg",
"object": "organization",
"slug": "acme",
"name": "Acme",
"country": "HR",
"status": "active",
"isPlatform": false,
"supportAccess": "on_request",
"requireMfa": false,
"entitlements": {
"livemode": true,
"entities.max": 2,
"brands.max": 3,
"members.max": 10,
"jurisdictions.registered.max": 10,
"subscriptions.enabled": true,
"usage_billing.enabled": true,
"einvoicing.enabled": true,
"processors.secondary": false,
"custom_domains.max": 2,
"api.rate_limit_rps": 100,
"audit.retention_days": 90,
"support.level": "email",
"filing.reports": "full",
"sso.enabled": false,
"assistant.enabled": true,
"assistant.messages_per_month": 1000
},
"plan": {
"status": "none",
"override": {
"reason": "Temporary Growth entitlements until platform billing (M12)",
"expiresAt": null
}
},
"createdBy": "usr_01m4tx5nj8emwbyf7y9vcf47xa",
"createdAt": "2026-10-13T12:00:00.000Z",
"updatedAt": "2026-10-13T12:00:00.000Z"
}
organizations_suspend
Suspend an organization for abuse. Operation organizations.suspend · Platform level · permission platform:admin · risk tier security · since M12
Platform admins: suspends an organization for abuse or a violation of the Acceptable Use Policy, with the
reason. A suspended organization takes no new live checkout sessions, but renewals of existing subscriptions,
refunds, the customer portal and filings continue, so its customers and tax authorities aren't left without
what they're owed. kind: fraud is recorded the same way; a fraud case then follows its runbook.
organizations.reinstate lifts the suspension.
Security tier; every suspension is audited.
Annotations: readOnlyHint: false · destructiveHint: true · idempotentHint: false · openWorldHint: false
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
orgId | ID (org_…) | yes | – |
kind | one of abuse, fraud | yes | – |
reason | string | yes | (1–1000 characters) |
idempotency_key | string | no | A unique string for this change. Retrying with the same key and arguments never acts twice. When left out, the server generates one and returns it in the result's idempotency_key. (1–255 characters) |
dry_run | boolean | no | true: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false) |
- Idempotency: the result returns the
idempotency_keyused, yours or one the server generated. Retry with it: a call with the same key and arguments never acts twice (keys are kept for 24 hours). - Dry run: supported.
dry_run: truechecks permissions and rules and computes the result, then rolls everything back.
Errors
fresh_auth_required: Your last sign-in is older than 15 minutes: sign in again first.organization_already_suspended: The organization is suspended already.organization_not_closable: The organization is closing or closed (details.status).resource_not_found: No such organization.version_conflict: The organization changed at the same time; retry.permission_denied: You aren't a platform admin.
Example
Suspend for an AUP violation
Arguments:
{
"orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
"kind": "abuse",
"reason": "Sells counterfeit goods (AUP report #42).",
"idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}
Result output:
{
"id": "org_01m4tx5nj7ekd958x53w4bntcg",
"object": "organization",
"slug": "acme",
"name": "Acme",
"country": "HR",
"status": "suspended",
"isPlatform": false,
"supportAccess": "on_request",
"requireMfa": false,
"entitlements": {
"livemode": true,
"entities.max": 2,
"brands.max": 3,
"members.max": 10,
"jurisdictions.registered.max": 10,
"subscriptions.enabled": true,
"usage_billing.enabled": true,
"einvoicing.enabled": true,
"processors.secondary": false,
"custom_domains.max": 2,
"api.rate_limit_rps": 100,
"audit.retention_days": 90,
"support.level": "email",
"filing.reports": "full",
"sso.enabled": false,
"assistant.enabled": true,
"assistant.messages_per_month": 1000
},
"plan": {
"status": "none",
"override": {
"reason": "Temporary Growth entitlements until platform billing (M12)",
"expiresAt": null
}
},
"createdBy": "usr_01m4tx5nj8emwbyf7y9vcf47xa",
"createdAt": "2026-10-13T12:00:00.000Z",
"updatedAt": "2026-10-13T12:00:00.000Z"
}
organizations_update
Update the organization. Operation organizations.update · Organization level · permission org:write · risk tier write · since M1
Renames the organization or changes its slug. Organization slugs are unique across Ownrecord; a new slug
moves the console URLs (/console/{slug}), and old links stop working. API keys keep working.
Needs org:write (organization owners and admins).
Annotations: readOnlyHint: false · destructiveHint: false · idempotentHint: true · openWorldHint: false
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
id | ID (org_…) | yes | – |
name | string | no | (1–120 characters) |
slug | string | no | (3–40 characters) |
idempotency_key | string | no | A unique string for this change. Retrying with the same key and arguments never acts twice. When left out, the server generates one and returns it in the result's idempotency_key. (1–255 characters) |
dry_run | boolean | no | true: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false) |
- Idempotency: the result returns the
idempotency_keyused, yours or one the server generated. Retry with it: a call with the same key and arguments never acts twice (keys are kept for 24 hours). - Dry run: supported.
dry_run: truechecks permissions and rules and computes the result, then rolls everything back.
Errors
validation_failed: Neither name nor slug was sent, or one is malformed.slug_invalid: The slug has the wrong format or is a reserved word.slug_taken: Another organization already uses this slug.resource_not_found: The ID isn't the organization of the request.version_conflict: The organization changed at the same time; retry.permission_denied: You can't change this organization's settings.
Example
Rename the organization
Arguments:
{
"id": "org_01m4tx5nj7ekd958x53w4bntcg",
"name": "Acme Group",
"idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}
Result output:
{
"id": "org_01m4tx5nj7ekd958x53w4bntcg",
"object": "organization",
"slug": "acme",
"name": "Acme Group",
"country": "HR",
"status": "active",
"isPlatform": false,
"supportAccess": "on_request",
"requireMfa": false,
"entitlements": {
"livemode": true,
"entities.max": 2,
"brands.max": 3,
"members.max": 10,
"jurisdictions.registered.max": 10,
"subscriptions.enabled": true,
"usage_billing.enabled": true,
"einvoicing.enabled": true,
"processors.secondary": false,
"custom_domains.max": 2,
"api.rate_limit_rps": 100,
"audit.retention_days": 90,
"support.level": "email",
"filing.reports": "full",
"sso.enabled": false,
"assistant.enabled": true,
"assistant.messages_per_month": 1000
},
"plan": {
"status": "none",
"override": {
"reason": "Temporary Growth entitlements until platform billing (M12)",
"expiresAt": null
}
},
"createdBy": "usr_01m4tx5nj8emwbyf7y9vcf47xa",
"createdAt": "2026-10-13T12:00:00.000Z",
"updatedAt": "2026-10-14T09:30:00.000Z"
}