---
title: "Update account personalization"
method: PATCH
path: "/companies/{company}/personalization"
tags: ["Account"]
---

# Update account personalization

`PATCH /companies/{company}/personalization`

## Request

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

Set the invoice-emission language, PDF template and accent color of the company in one partial update; omitted fields keep their value. `language` is one of `es`, `en`, `ca`; `pdf_template` is a slug from the `PdfTemplate` catalog; `accent_color` is a `#RRGGBB` hex color. Returns the updated `Account` resource.

## Path parameters

- `company` string, uuid, required

## Headers

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

## Request body

- UpdateAccountPersonalizationRequest: Partial update of the account personalization; only the fields present in the body are applied. `language` is one of `es`, `en`, `ca`; `pdf_template` is a template slug; `accent_color` is a `#RRGGBB` hex color. Values outside the catalog return 422 with the accepted values. Accent colors and advanced templates require the PDF editor; otherwise 403 feature_not_available_in_plan is returned without applying any field.
  - `language` 'es' | 'en' | 'ca' | 'null', nullable: Account issuing language: `es`, `en` or `ca`.
  - `pdf_template` 'classic' | 'modern' | 'minimal' | 'corporative' | 'premium' | 'null', nullable: Invoice PDF template (slug from the template catalog).
  - `accent_color` string, nullable: PDF accent color in hexadecimal (#RRGGBB).

## Response `200`

- object
  - `data` Account, required: Snapshot of the company, plan, Developer API entitlement, personalization and metadata of the API key used to make the request. To introspect the calling credential and its scope of tax IDs, use `GET /v1/me` instead, which returns the `Me` resource.
    - `object` 'account', required: Stripe-like discriminator. Always `account` for this resource.
    - `company` object, required
      - `id` string, required
      - `name` string, required
      - `tax_id` string, required: Spanish fiscal identifier (NIF, CIF, NIE). Structural format: NIF `^\d{8}[A-Z]$`, NIE `^[XYZ]\d{7}[A-Z]$`, CIF `^[A-Z]\d{7}[A-Z0-9]$`. AEAT control-digit (checksum) validation is enforced when the request opts in via the `Factuarea-Version` header on or after the activation version; without that opt-in the legacy permissive behaviour is preserved.
    - `plan` object, required
      - `slug` string, required: Plan identifier (e.g. `emprendedor`, `empresario`, `integral`, `enterprise`).
      - `name` string, required
    - `addon` object, required: Developer API entitlement derived from the company plan. The `addon` property name is retained for backwards compatibility.
      - `active` boolean, required: true when the company plan includes Developer API access.
      - `in_grace` boolean, required: Legacy compatibility field. The plan-based entitlement does not grant an add-on grace period.
      - `expires_at` string, date-time, nullable, required: Legacy compatibility field. Always null for the canonical plan-based entitlement.
    - `api_key` object, required: Metadata of the API key used to authenticate the request. The secret is never returned (it is only shown once at creation time).
      - `id` string, required
      - `name` string, required: Human-friendly label assigned at creation time.
      - `prefix` string, required: First chars of the key (e.g. `fact_live_1N0Fnyhh`) — safe to log.
      - `scopes` string[], required: Authorized scopes. `*` means super scope (full access).
      - `tier` string, required: Rate-limit tier (`free`, `starter`, `pro`, `scale`). Derived from the company plan (or preserved by historical grandfathering).
      - `environment` 'live' | 'test', required: Environment of the authenticated key: `live` (`fact_live_` prefix, real side effects) or `test` (`fact_test_` prefix, sandbox company, no real-world effects).
      - `created_at` string, date-time, required
      - `last_used_at` string, date-time, nullable, required
      - `expires_at` string, date-time, nullable, required
    - `personalization` object, required: Account personalization: invoice-emission language and PDF template/accent color. Mutable via `PATCH /v1/companies/{company}/personalization`.
      - `pdf_capabilities` PdfCapabilities, required: Read-only document branding capabilities of the effective account.
        - `can_upload_logo` boolean, required
        - `can_customize` boolean, required
        - `can_upload_brand_image` boolean, required
        - `requires_attribution` boolean, required
        - `available_templates` string[], required
        - `upgrade_plan` string, nullable, required
      - `language` 'es' | 'en' | 'ca', required: Invoice-emission language of the account. One of `es`, `en`, `ca`.
      - `pdf_template` 'classic' | 'modern' | 'minimal' | 'corporative' | 'premium', required: Slug of the invoice PDF template (closed `PdfTemplate` catalog).
      - `accent_color` string, nullable, required: Accent color of the PDF in `#RRGGBB` hex, or null when not configured.

## 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. `profile_not_found`: the company in the path does not exist, is not in the API key scope or belongs to the other environment (live or test).
- `422`: Validation failed — e.g. the API key plan limit was reached, or an invoice language outside the allowed catalog (`es`, `en`, `ca`). The `error.param` field identifies which input is invalid, if any.
- `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)
