business.change_legal_name
Record an evidenced change to the registered legal name. Owner authority is required; no legal filing is made.
What it does
Change the business’s registered legal name, evidenced by the filing that changed it (source_document). The public name follows when it was the same as the legal name; a different public name is kept (change it with business.update). Owner-only by default; appends business.legal_name_changed and never rewrites history. Sending the current legal name answers no_change.
Before you send it
Requires an interactive OAuth connection; headless credentials are refused. Effective membership, application grant and token permissions still apply. Describe business.change_legal_name through GET /v1/catalog/commands/{name} before acting.
The envelope may reference a registered source document of kind source_document; this is separate from any evidence required by the input.
Inputs
Put these fields inside the envelope’s input object. The outer envelope names the command, a stable idempotency_key and effective_at; request and recovery rules explain those separately. Use exact minor-unit integer strings for monetary fields. Take existing IDs from prior reads or command results; choose a new identity only where the command asks for one.
Required means required within its containing object; an optional parent can be omitted.
| Field | Type | Required | Meaning and accepted values |
|---|---|---|---|
name | string | Yes | Maximum length: 500. Pattern: "^[^\\r\\n]*\\S[^\\r\\n]*$". Example: "Acme Robotics, Inc.". |
reason | string | Yes | Maximum length: 2000. Pattern: ".*\\S.*". Example: "Certificate of amendment filed with the Delaware Division of Corporations". |
After acceptance
When the command emits events, its documented effects and receipt are recorded in the command transaction. The response returns commandId, replayed, the command-specific result below and emitted events with their IDs and CIDs. A command is not automatically a cash movement or revenue recognition: use the behavior above to determine what this command records.
Inspect result and the affected records or reports before continuing. Save returned identifiers for later calls. Fetch GET /v1/commands/{id} with commandId to recover the accepted receipt; retry the same intent with the same idempotency key if the response was lost. Some commands can succeed with events: [] and return a transient result and commandId without persisting a receipt. A lookup of that ID can return null; retain the returned result and verify the affected record. Retrying can re-evaluate the current state rather than replay a stored result. A domain no_change is a separate success outcome with no persisted receipt.
Result fields
Required means required within its containing object; an optional parent can be omitted.
| Field | Type | Required | Meaning and accepted values |
|---|---|---|---|
demo | boolean | No | Present only on a demo business: a fictional company, its owner’s alone, that never takes a plan or reaches anyone but Economico, which it can send support requests and suggestions. Its figures are not real. Must be true. |
demoOpenedAt | string | No | On a demo business: when it was opened. Its seeded books run up to here. Format: date-time. |
name | string | No | The public name. |
legalName | string | No | The registered name agreements and documents use; a project’s is its owner’s. |
legalEntityType | string | No | Choose "unknown", "llc", "c_corp", "s_corp", "sole_proprietorship", "partnership", "nonprofit", "unincorporated", "other", "private_limited_company", "corporation", "stock_corporation", "project". |
ownership | object | No | What the legal form means for equity: the balance sheet’s equity heading, the ownership reports that apply (primary first) and the company-setup skill’s ownership recipes. |
ownership.family | string | Yes | Choose "corporation", "members", "partners", "owner", "nonprofit", "unspecified". |
ownership.equityLabel | string | Yes | |
ownership.reports | array | Yes | Each item must be "cap_table", "capital_accounts". |
ownership.recipes | array | Yes | Items: string. |
jurisdiction | string | No | |
formationDate | string | No | Format: date. |
formationDateEventId | integer | No | |
nameEventId | integer | No | |
legalNameEventId | integer | No | |
legalEntityTypeEventId | integer | No | |
jurisdictionEventId | integer | No | |
registrations | array | No | Items: object. |
registrations[].kind | string | Yes | Choose "us_ein", "sg_uen", "ca_bn", "gb_company_number". |
registrations[].number | string | Yes | |
registrations[].eventId | integer | Yes | |
description | string | No | |
address | object | No | |
address.line1 | string | Yes | Maximum length: 200. Pattern: "^[^\\r\\n]+$". |
address.line2 | string | No | Maximum length: 200. Pattern: "^[^\\r\\n]*$". |
address.city | string | Yes | Maximum length: 200. Pattern: "^[^\\r\\n]+$". |
address.region | string | No | Maximum length: 200. Pattern: "^[^\\r\\n]*$". |
address.postalCode | string | No | Maximum length: 40. Pattern: "^[^\\r\\n]*$". |
address.country | string | Yes | Pattern: "^[A-Z]{2}$". |
url | string | No | Pattern: "^https?://". |
slug | string | No | |
functionalCurrency | string | No | |
primaryLedgerId | string | No | |
successions | array | No | Incorporations in place (business.incorporate), oldest first. Items: object. |
successions[].eventId | integer | Yes | |
successions[].effectiveAt | string | Yes | |
successions[].previousName | string | No | |
successions[].previousLegalEntityType | string | Yes | |
successions[].name | string | Yes | |
successions[].legalEntityType | string | Yes | |
successions[].predecessorLedgerId | string | Yes | |
successions[].successorLedgerId | string | Yes | |
functionalCurrencyPeriods | array | No | Items: object. |
functionalCurrencyPeriods[].currency | string | Yes | |
functionalCurrencyPeriods[].ledgerId | string | Yes | |
functionalCurrencyPeriods[].effectiveFrom | string | Yes | |
functionalCurrencyPeriods[].effectiveUntil | string | No | |
functionalCurrencyPeriods[].changeEventId | integer | Yes | |
accountingFramework | object | No | |
accountingFramework.framework | string | Yes | |
accountingFramework.edition | string | No | |
accountingFramework.sizeRegime | string | No | Choose "small", "micro". |
accountingFramework.sizeEligibility | object | No | |
accountingFramework.sizeEligibility.basis | string | Yes | What the founder’s size conclusion rests on, e.g. ‘Companies Act 2006 s384A conditions met in FY2025 and FY2026’. Recorded, never computed. Minimum length: 1. Maximum length: 2000. |
accountingFramework.sizeEligibility.periodEnd | string | Yes | Period end the conclusion covers. Format: date. |
accountingFramework.reason | string | Yes | |
accountingFramework.jurisdiction | string | Yes | |
accountingFramework.evidenceDocumentId | string | Yes | |
accountingFramework.evidenceDocumentCid | string | Yes | |
accountingFramework.effectiveAt | string | Yes | |
accountingFramework.eventId | integer | No | |
accountingFrameworkHistory | array | No | Items: object. |
accountingFrameworkHistory[].framework | string | Yes | |
accountingFrameworkHistory[].edition | string | No | |
accountingFrameworkHistory[].sizeRegime | string | No | Choose "small", "micro". |
accountingFrameworkHistory[].sizeEligibility | object | No | |
accountingFrameworkHistory[].sizeEligibility.basis | string | Yes | What the founder’s size conclusion rests on, e.g. ‘Companies Act 2006 s384A conditions met in FY2025 and FY2026’. Recorded, never computed. Minimum length: 1. Maximum length: 2000. |
accountingFrameworkHistory[].sizeEligibility.periodEnd | string | Yes | Period end the conclusion covers. Format: date. |
accountingFrameworkHistory[].reason | string | Yes | |
accountingFrameworkHistory[].jurisdiction | string | Yes | |
accountingFrameworkHistory[].evidenceDocumentId | string | Yes | |
accountingFrameworkHistory[].evidenceDocumentCid | string | Yes | |
accountingFrameworkHistory[].effectiveAt | string | Yes | |
accountingFrameworkHistory[].eventId | integer | No | |
salesTaxRegistrations | array | No | Items: object. |
salesTaxRegistrations[].registrationId | string | Yes | |
salesTaxRegistrations[].regime | string | Yes | sg_gst (Singapore GST); ca_gst_hst (Canadian GST/HST), ca_qst (Quebec QST), ca_pst_bc, ca_pst_sk, ca_rst_mb (provincial sales taxes, kept apart from GST/HST); gb_vat (UK VAT). It must be a regime of the country the business is incorporated in. There is no US regime: record US state sales tax as custom codes with tax_codes.create. Choose "sg_gst", "ca_gst_hst", "ca_qst", "ca_pst_bc", "ca_pst_sk", "ca_rst_mb", "gb_vat". |
salesTaxRegistrations[].country | string | Yes | |
salesTaxRegistrations[].registrationNumber | string | Yes | |
salesTaxRegistrations[].province | string | No | |
salesTaxRegistrations[].effectiveFrom | string | Yes | Format: date. |
salesTaxRegistrations[].effectiveUntil | string | No | Format: date. |
salesTaxRegistrations[].reason | string | Yes | |
salesTaxRegistrations[].sourceDocumentId | string | Yes | |
logoUrl | string | No | The logo the business’s share pages show. Format: uri. |
logoCid | string | No | The CID in logoUrl. |
ycVerified | boolean | Yes | |
ycVerificationUrl | string | No | |
ycVerifiedAt | string | No | |
ycBatch | string | No | |
ycFounderName | string | No | |
ycVerificationPending | object | No | |
ycVerificationPending.url | string | Yes | |
ycVerificationPending.requestedAt | string | Yes | |
ycVerificationError | string | No |
All commands · Operation and errors · Reusable schemas
Keep credentials out of prompts; rehearse writes only in a disposable sandbox.
Exact request schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"name": {
"const": "business.change_legal_name"
},
"input": {
"type": "object",
"required": [
"name",
"reason"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[^\\r\\n]*\\S[^\\r\\n]*$",
"maxLength": 500
},
"reason": {
"type": "string",
"pattern": ".*\\S.*",
"maxLength": 2000
}
},
"additionalProperties": false
},
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"effective_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
},
"source_document_id": {
"description": "A registered document of kind source_document that caused this command.",
"type": "string",
"minLength": 1
}
},
"required": [
"name",
"input",
"idempotency_key",
"effective_at"
],
"additionalProperties": false
}Accepted command receipt
{
"type": "object",
"required": [
"commandId",
"replayed",
"result",
"events"
],
"properties": {
"commandId": {
"type": "string"
},
"replayed": {
"type": "boolean"
},
"imported": {
"const": true,
"description": "The command's events are history from before the business joined Economico, recorded as an import: free of monthly events."
},
"result": {
"type": "object",
"properties": {
"demo": {
"const": true,
"description": "Present only on a demo business: a fictional company, its owner's alone, that never takes a plan or reaches anyone but Economico, which it can send support requests and suggestions. Its figures are not real."
},
"demoOpenedAt": {
"type": "string",
"format": "date-time",
"description": "On a demo business: when it was opened. Its seeded books run up to here."
},
"name": {
"type": "string",
"description": "The public name."
},
"legalName": {
"type": "string",
"description": "The registered name agreements and documents use; a project's is its owner's."
},
"legalEntityType": {
"enum": [
"unknown",
"llc",
"c_corp",
"s_corp",
"sole_proprietorship",
"partnership",
"nonprofit",
"unincorporated",
"other",
"private_limited_company",
"corporation",
"stock_corporation",
"project"
]
},
"ownership": {
"type": "object",
"description": "What the legal form means for equity: the balance sheet's equity heading, the ownership reports that apply (primary first) and the company-setup skill's ownership recipes.",
"properties": {
"family": {
"enum": [
"corporation",
"members",
"partners",
"owner",
"nonprofit",
"unspecified"
]
},
"equityLabel": {
"type": "string"
},
"reports": {
"type": "array",
"items": {
"enum": [
"cap_table",
"capital_accounts"
]
}
},
"recipes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"family",
"equityLabel",
"reports",
"recipes"
]
},
"jurisdiction": {
"type": "string"
},
"formationDate": {
"type": "string",
"format": "date"
},
"formationDateEventId": {
"type": "integer"
},
"nameEventId": {
"type": "integer"
},
"legalNameEventId": {
"type": "integer"
},
"legalEntityTypeEventId": {
"type": "integer"
},
"jurisdictionEventId": {
"type": "integer"
},
"registrations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"enum": [
"us_ein",
"sg_uen",
"ca_bn",
"gb_company_number"
]
},
"number": {
"type": "string"
},
"eventId": {
"type": "integer"
}
},
"required": [
"kind",
"number",
"eventId"
]
}
},
"description": {
"type": "string"
},
"address": {
"type": "object",
"properties": {
"line1": {
"type": "string",
"maxLength": 200,
"pattern": "^[^\\r\\n]+$"
},
"line2": {
"type": "string",
"maxLength": 200,
"pattern": "^[^\\r\\n]*$"
},
"city": {
"type": "string",
"maxLength": 200,
"pattern": "^[^\\r\\n]+$"
},
"region": {
"type": "string",
"maxLength": 200,
"pattern": "^[^\\r\\n]*$"
},
"postalCode": {
"type": "string",
"maxLength": 40,
"pattern": "^[^\\r\\n]*$"
},
"country": {
"type": "string",
"pattern": "^[A-Z]{2}$"
}
},
"required": [
"line1",
"city",
"country"
],
"additionalProperties": false
},
"url": {
"type": "string",
"pattern": "^https?://"
},
"slug": {
"type": "string"
},
"functionalCurrency": {
"type": "string"
},
"primaryLedgerId": {
"type": "string"
},
"successions": {
"type": "array",
"description": "Incorporations in place (business.incorporate), oldest first.",
"items": {
"type": "object",
"properties": {
"eventId": {
"type": "integer"
},
"effectiveAt": {
"type": "string"
},
"previousName": {
"type": "string"
},
"previousLegalEntityType": {
"type": "string"
},
"name": {
"type": "string"
},
"legalEntityType": {
"type": "string"
},
"predecessorLedgerId": {
"type": "string"
},
"successorLedgerId": {
"type": "string"
}
},
"required": [
"eventId",
"effectiveAt",
"previousLegalEntityType",
"name",
"legalEntityType",
"predecessorLedgerId",
"successorLedgerId"
]
}
},
"functionalCurrencyPeriods": {
"type": "array",
"items": {
"type": "object",
"properties": {
"currency": {
"type": "string"
},
"ledgerId": {
"type": "string"
},
"effectiveFrom": {
"type": "string"
},
"effectiveUntil": {
"type": "string"
},
"changeEventId": {
"type": "integer"
}
},
"required": [
"currency",
"ledgerId",
"effectiveFrom",
"changeEventId"
]
}
},
"accountingFramework": {
"type": "object",
"required": [
"framework",
"reason",
"jurisdiction",
"evidenceDocumentId",
"evidenceDocumentCid",
"effectiveAt"
],
"properties": {
"framework": {
"type": "string"
},
"edition": {
"type": "string"
},
"sizeRegime": {
"enum": [
"small",
"micro"
]
},
"sizeEligibility": {
"type": "object",
"required": [
"basis",
"periodEnd"
],
"properties": {
"basis": {
"type": "string",
"minLength": 1,
"maxLength": 2000,
"description": "What the founder's size conclusion rests on, e.g. 'Companies Act 2006 s384A conditions met in FY2025 and FY2026'. Recorded, never computed."
},
"periodEnd": {
"type": "string",
"format": "date",
"description": "Period end the conclusion covers."
}
}
},
"reason": {
"type": "string"
},
"jurisdiction": {
"type": "string"
},
"evidenceDocumentId": {
"type": "string"
},
"evidenceDocumentCid": {
"type": "string"
},
"effectiveAt": {
"type": "string"
},
"eventId": {
"type": "integer"
}
}
},
"accountingFrameworkHistory": {
"type": "array",
"items": {
"type": "object",
"required": [
"framework",
"reason",
"jurisdiction",
"evidenceDocumentId",
"evidenceDocumentCid",
"effectiveAt"
],
"properties": {
"framework": {
"type": "string"
},
"edition": {
"type": "string"
},
"sizeRegime": {
"enum": [
"small",
"micro"
]
},
"sizeEligibility": {
"type": "object",
"required": [
"basis",
"periodEnd"
],
"properties": {
"basis": {
"type": "string",
"minLength": 1,
"maxLength": 2000,
"description": "What the founder's size conclusion rests on, e.g. 'Companies Act 2006 s384A conditions met in FY2025 and FY2026'. Recorded, never computed."
},
"periodEnd": {
"type": "string",
"format": "date",
"description": "Period end the conclusion covers."
}
}
},
"reason": {
"type": "string"
},
"jurisdiction": {
"type": "string"
},
"evidenceDocumentId": {
"type": "string"
},
"evidenceDocumentCid": {
"type": "string"
},
"effectiveAt": {
"type": "string"
},
"eventId": {
"type": "integer"
}
}
}
},
"salesTaxRegistrations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"registrationId": {
"type": "string"
},
"regime": {
"enum": [
"sg_gst",
"ca_gst_hst",
"ca_qst",
"ca_pst_bc",
"ca_pst_sk",
"ca_rst_mb",
"gb_vat"
],
"description": "sg_gst (Singapore GST); ca_gst_hst (Canadian GST/HST), ca_qst (Quebec QST), ca_pst_bc, ca_pst_sk, ca_rst_mb (provincial sales taxes, kept apart from GST/HST); gb_vat (UK VAT). It must be a regime of the country the business is incorporated in. There is no US regime: record US state sales tax as custom codes with tax_codes.create."
},
"country": {
"type": "string"
},
"registrationNumber": {
"type": "string"
},
"province": {
"type": "string"
},
"effectiveFrom": {
"type": "string",
"format": "date"
},
"effectiveUntil": {
"type": "string",
"format": "date"
},
"reason": {
"type": "string"
},
"sourceDocumentId": {
"type": "string"
}
},
"required": [
"registrationId",
"regime",
"country",
"registrationNumber",
"effectiveFrom",
"reason",
"sourceDocumentId"
]
}
},
"logoUrl": {
"type": "string",
"format": "uri",
"description": "The logo the business's share pages show."
},
"logoCid": {
"type": "string",
"description": "The CID in logoUrl."
},
"ycVerified": {
"type": "boolean"
},
"ycVerificationUrl": {
"type": "string"
},
"ycVerifiedAt": {
"type": "string"
},
"ycBatch": {
"type": "string"
},
"ycFounderName": {
"type": "string"
},
"ycVerificationPending": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"requestedAt": {
"type": "string"
}
},
"required": [
"url",
"requestedAt"
]
},
"ycVerificationError": {
"type": "string"
}
},
"required": [
"ycVerified"
]
},
"events": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"cid": {
"type": "string"
}
}
}
}
}
}Example request
{
"name": "business.change_legal_name",
"input": {
"name": "Acme Robotics, Inc.",
"reason": "Certificate of amendment filed with the Delaware Division of Corporations"
},
"effective_at": "2026-09-01T00:00:00Z",
"idempotency_key": "business.change_legal_name-example-0"
}