Skip to content

Update a legal entity

The entities.update operation: PATCH /api/v1/entities/{id} in the REST API and the entities_update tool in the MCP server.

PATCH/api/v1/entities/{id}

Changes a legal entity's slug, legal and trading name, address, company registry ID, home tax ID, default currency, time zone or invoice settings (number format, language, footer, bank transfer details). Send only the fields to change; null removes an optional value.

The establishment country can't change: a company in another country is another legal entity. A new home tax ID resets the verification to unverified. Needs entities:write (organization owners and admins).

At a glance

  • REST: PATCH /api/v1/entities/{id}
  • MCP tool: entities_update
  • Operation ID: entities.update
  • Scope: Organization, or one of its legal entities or brands
  • Permission: entities:write
  • Risk tier: write
  • Dry run: Supported (send Ownrecord-Dry-Run: true)
  • Idempotency: Idempotency-Key optional
  • Modes: Test and live
  • Authentication: API key with the entities:write scope
  • Since: M1

Request

Path parameters

FieldTypeDescription
ident_… ID

Body

A JSON object (Content-Type: application/json):

FieldTypeRequiredDescription
slugstringNo
legalNamestringNo
tradingNamestring or nullNo
establishmentobjectNo
establishment.subdivisionstring or nullNo
establishment.addressobjectNo
establishment.address.line1stringYes
establishment.address.line2stringNo
establishment.address.citystringYes
establishment.address.postalCodestringNo
establishment.address.regionstringNo
establishment.address.countrystringNo
establishment.companyRegistryIdstringNo
establishment.euVatEstablishedbooleanNo
homeTaxIdobjectNo
homeTaxId.typestringYes
homeTaxId.valuestringYes
defaultCurrencystringNo
timezonestringNo
invoiceSettingsobjectNo
invoiceSettings.numberFormatstringNo
invoiceSettings.sequenceResetYearlybooleanNo
invoiceSettings.languagestringNo
invoiceSettings.bilingualstring or nullNo
invoiceSettings.footerTextstring or nullNo
invoiceSettings.bankTransferobject or nullNo

Response

200 OK with a JSON object:

FieldTypeDescription
ident_… ID
object"legal_entity"
orgIdorg_… ID
slugstring
legalNamestring
tradingNamestring or null
establishmentobject
establishment.countrystring
establishment.subdivisionstring or null
establishment.addressobject
establishment.address.line1string
establishment.address.line2string or null
establishment.address.citystring
establishment.address.postalCodestring or null
establishment.address.regionstring or null
establishment.address.countrystring
establishment.companyRegistryIdstring
establishment.euVatEstablishedboolean
homeTaxIdobject
homeTaxId.typestring
homeTaxId.valuestring
verificationobject
verification.statusone of unverified, pending_review, verified, rejected
verification.methodone of vies, hmrc, ch_uid, document
verification.checkedAtdate-time or null
defaultCurrencystring
timezonestring
invoiceSettingsobject
invoiceSettings.numberFormatstring
invoiceSettings.sequenceResetYearlyboolean
invoiceSettings.languagestring
invoiceSettings.bilingualstring or null
invoiceSettings.footerTextstring or null
invoiceSettings.bankTransferobject or null
statusone of onboarding, active, suspended, archived
createdAtdate-time
updatedAtdate-time

Examples

Add bank transfer details for invoices

HTTP
PATCH /api/v1/entities/ent_01m4tx5nj8emwbyf7y9vcf47x2
Authorization: Bearer or_test_…
Content-Type: application/json

{
  "invoiceSettings": {
    "bankTransfer": {
      "iban": "HR1210010051863000160",
      "bic": "ZABAHR2X",
      "bankName": "Zagrebačka banka",
      "accountHolder": "Acme Digital d.o.o."
    }
  }
}

Response (200):

JSON
{
  "id": "ent_01m4tx5nj8emwbyf7y9vcf47x2",
  "object": "legal_entity",
  "orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
  "slug": "acme-hr",
  "legalName": "Acme Digital d.o.o.",
  "tradingName": null,
  "establishment": {
    "country": "HR",
    "subdivision": null,
    "address": {
      "line1": "Ilica 1",
      "line2": null,
      "city": "Zagreb",
      "postalCode": "10000",
      "region": null,
      "country": "HR"
    },
    "companyRegistryId": "080000000",
    "euVatEstablished": true
  },
  "homeTaxId": {
    "type": "eu_vat",
    "value": "HR12345678901"
  },
  "verification": {
    "status": "unverified",
    "method": "vies",
    "checkedAt": null
  },
  "defaultCurrency": "EUR",
  "timezone": "Europe/Zagreb",
  "invoiceSettings": {
    "numberFormat": "{series}-{year}-{seq:06}",
    "sequenceResetYearly": true,
    "language": "en",
    "bilingual": null,
    "footerText": null,
    "bankTransfer": {
      "iban": "HR1210010051863000160",
      "bic": "ZABAHR2X",
      "bankName": "Zagrebačka banka",
      "accountHolder": "Acme Digital d.o.o."
    }
  },
  "status": "onboarding",
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-14T09:30:00.000Z"
}

Errors

CodeHTTP statusWhenWhat to do
validation_failed400No field to change was sent, or one is malformed.Fix the fields listed in details.issues and send the request again.
slug_invalid400The slug has the wrong format or is a reserved word.Choose a slug such as acme or acme-app. Reserved words such as api, console and docs can't be used.
slug_taken409Another entity of this organization already uses this slug.Choose another slug. Organization and brand slugs are unique across Ownrecord; entity slugs are unique within an organization.
resource_not_found404No entity with this ID is visible to the request.Check the ID and that your credentials are scoped to the right organization, entity, brand and mode.
version_conflict409The entity changed at the same time; retry.Fetch the object again and retry the change.
permission_denied403You can't change legal entities here.Ask an organization owner or admin for a role or scope that allows this action.

It can also return these common errors: api_version_unsupported, invalid_json, unsupported_media_type, authentication_required, api_key_invalid, idempotency_key_reused, idempotency_in_progress, approval_required, approval_rejected, approval_expired, stale_approval, approval_policy_denied, rate_limited, internal_error.