---
title: "Update a tax ID of the account"
method: PATCH
path: "/accounts/{account}/companies/{company}"
tags: ["Companies"]
---

# Update a tax ID of the account

`PATCH /accounts/{account}/companies/{company}`

## Request

- Base URL: `https://api.factuarea.com/v1`
- URL: `https://api.factuarea.com/v1/accounts/{account}/companies/{company}`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Update the profile of a tax ID of the account (`name`, `business_name`, address, `email`, `phone`); partial, `""` clears a field.
- `tax_id` is immutable (sending it returns 422); only an `active` tax ID can be edited.
- Never billed (no 402); needs an owner or admin of the account, else 403 `forbidden_action`.

## Path parameters

- `account` string, uuid, required
- `company` string, uuid, required

## Headers

- `Idempotency-Key` string
- `Factuarea-Version` string, date

## Request body

- UpdateCompanyV1Request: Partial update of the profile of a company (tax ID) of your account (business name, fiscal address, contact details). Omitted fields keep their current value; send `""` to clear a field. `country_aeat_zone` is derived from the postal code, and `tax_id` is immutable after creation (sending it returns 422).
  - `name` string: Trade name of the company (1-255 characters).
  - `business_name` string, nullable: Legal/registered business name of the company.
  - `address` string, nullable: Fiscal address.
  - `city` string, nullable: City of the fiscal address.
  - `postal_code` string, nullable: Postal code (derives the AEAT zone).
  - `province` string, nullable: Province.
  - `country` string, nullable: Country.
  - `email` string, email, nullable: Contact email of the company.
  - `phone` string, nullable: Contact phone number.

## Response `200`

- object
  - `data` Company, required: A company (tax ID) of your account, registered and operated through the `/v1/accounts/{account}/companies` endpoints. `readiness` (whether it can issue right now, with the same contract as `GET /v1/accounts/{account}/companies/{company}/issuing-readiness`) is present only when the list is requested with `include=readiness`; otherwise the key is absent.
    - `id` string, uuid, required: Opaque identifier (UUID v7) of the tax ID.
    - `object` 'company', required: Always `company`.
    - `name` string, required: Commercial name of the tax ID.
    - `business_name` string, nullable, required: Legal/registered business name (razón social), or `null` if not set.
    - `tax_id` string, required: Spanish fiscal identifier (NIF/CIF/NIE). Unique within your account.
    - `status` 'active' | 'inactive' | 'archived', required: Status of the tax ID in the account: `active` (operational), `inactive` (deactivated, data preserved, can be reactivated) or `archived` (no longer accepts operations).
    - `status_since` string, date-time, nullable, required: When the tax ID entered its current `inactive` or `archived` status (ISO 8601). `null` for an `active` tax ID and for one whose change predates the lifecycle events: the date is never invented.
    - `address` string, nullable, required: Street address of the fiscal domicile, or `null`.
    - `city` string, nullable, required: City of the fiscal domicile, or `null`.
    - `postal_code` string, nullable, required: Postal code of the fiscal domicile, or `null`.
    - `province` string, nullable, required: Province of the fiscal domicile, or `null`.
    - `country_aeat_zone` 'peninsula' | 'canarias' | 'ceuta' | 'melilla' | 'null', nullable, required: AEAT territorial zone of the company (`peninsula`, `canarias`, `ceuta`, `melilla`), or `null`.
    - `country` string, nullable, required: Country of the fiscal domicile as recorded in the company profile (free text, up to 100 characters), or `null` when it was not set.
    - `email` string, email, nullable, required: Contact email, or `null`.
    - `phone` string, nullable, required: Contact phone, or `null`.
    - `logo_url` string, uri, nullable, required: Absolute URL of the company logo, or `null` if not set.
    - `paid_until` string, date-time, nullable, required: Paid coverage of this company as an additional tax ID of the account (ISO 8601): reactivating it before this date is free. `null` when it was never charged or the coverage expired.
    - `suspension_reason` 'payer_blocked' | 'management_ended' | 'null', nullable, required: Why the system suspended this `inactive` tax ID, or `null` when it is not suspended by the system (active, archived, or deactivated by the account itself). `payer_blocked`: the account paying for this managed account has its billing blocked; it resumes when the payer settles. `management_ended`: the management of this managed account ended before anyone took over the payment; it resumes when the holder of the account takes over the payment.
    - `created_at` string, date-time, required: When the tax ID was registered in the account (ISO 8601).
    - `updated_at` string, date-time, nullable, required: When the tax ID was last updated (ISO 8601), or `null`.
    - `readiness` IssuingReadiness: Whether a NIF can issue documents right now, and what stands in the way when it cannot. `can_issue` is the verdict and `blockers` the reasons: an empty `blockers` with `can_issue` false would be a bug, because a refusal that cannot be named cannot be fixed.
      - `can_issue` boolean, required: The verdict. `true` only when every condition below is met.
      - `blockers` string[], required: Machine-readable reasons the NIF cannot issue, in no particular order. Empty when `can_issue` is `true`. `verifactu_certificate_missing` means VeriFactu is enabled for the NIF but it has no valid certificate (none, revoked or expired). New reasons may be added over time: treat an unknown one as a blocker you cannot fix through the API.
      - `census_status` string, required: State of the AEAT census check for this NIF.
      - `has_default_series` boolean, required: Whether the NIF has a default document series to number with.
      - `fiscal_profile_complete` boolean, required: Whether the fiscal profile (tax id, address, territorial regime) is complete.
      - `operable` boolean, required: Whether the NIF is active and operable, as opposed to deactivated.
      - `missing_modules` string[], required: Modules the plan does not grant that issuing would need. Empty when nothing is missing.
      - `checked_at` string, date-time, required: Instant the verdict was computed (ISO 8601). It is a reading of a moment, not a stored flag.

## Other responses

- `400`: `parameter_unknown` with `subcode` `retired_active_profile_header`: the retired `X-Active-Profile` header was sent; the company goes in the path. `parameter_invalid_format` on `Factuarea-Version`: the header is not a `YYYY-MM-DD` date. `unsupported_api_version`: the `Factuarea-Version` date is not a supported version.
- `401`: Missing or invalid API key.
- `403`: The request is authenticated but not allowed: the API key lacks the required scope (`insufficient_scope`), the plan does not include the public API or this feature (`addon_not_active`, `feature_not_available_in_plan`), or the module is not available with a test key (`module_not_available_in_sandbox`).
- `404`: The requested resource does not exist or belongs to another company.
- `422`: Validation failed. The `error.param` field identifies which input is invalid.
- `429`: Rate limit exceeded. Retry after the duration in `Retry-After`.
- `500`: Unexpected server error.

---

[API](https://skmtc.dev/factuarea/apis/factuarea-public-api.md) · [All operations](https://skmtc.dev/factuarea/apis/factuarea-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/factuarea/apis/factuarea-public-api/revisions/718e77934422?raw)
