---
title: "Register a representation"
method: POST
path: "/companies/{company}/verifactu/representation"
tags: ["VeriFactu"]
---

# Register a representation

`POST /companies/{company}/verifactu/representation`

## Request

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

Register the representation that lets Factuarea remit your VeriFactu records to AEAT; send `multipart/form-data`.
- Required: `kind` (`social_collaboration_annex_i`/`aeat_power_of_attorney`), `signer_name`, `signer_tax_id`, `granted_on`, `document` (PDF, up to 5 MB).
- An active one is revoked; `remission_mode` may change. Returns 201 with `data`.

## Path parameters

- `company` string, uuid, required

## Headers

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

## Response `201`

The newly registered representation and the remission mode that results. A `Location` header points to `/v1/companies/{company}/verifactu/representation`.

- object
  - `data` CompanyRepresentation, required: The representation with which your company authorizes Factuarea to remit its VeriFactu records to AEAT on its behalf: social collaboration (annex I of the Resolution of 18-12-2024) or a power of attorney registered with AEAT. There is at most ONE active representation per company; a revoked one is kept in the history and never reactivated. The custodied document is never returned.
    - `id` string, required: UUID v7 of the representation.
    - `object` 'verifactu_representation', required
    - `kind` 'social_collaboration_annex_i' | 'aeat_power_of_attorney', required: `social_collaboration_annex_i`: the signed annex I (social collaboration). `aeat_power_of_attorney`: a power of attorney registered with AEAT.
    - `signer_name` string, required: Name of the person who signed the authorization.
    - `signer_tax_id` string, required: Tax ID (NIF) of the signer.
    - `granted_on` string, date, required: Date on which the authorization was granted.
    - `has_document` boolean, required: Whether the signed document (annex I or power-of-attorney proof) is custodied. The document itself never leaves the system.
    - `power_of_attorney_reference` string, nullable, required: Reference of the power of attorney in the AEAT register, or `null`.
    - `valid_until` string, date, nullable, required: Last day of validity (YYYY-MM-DD, Europe/Madrid), or `null` when the representation does not expire.
    - `is_expired` boolean, required: `true` once the last day of validity has passed. An expired representation does NOT enable third-party remission any more, so register a new one before it expires (you are warned 30 and 7 days ahead and when it expires).
    - `is_active` boolean, required: `true` while the representation has not been revoked, that is, it is the CURRENT one — even when it has expired. It only enables third-party remission when `is_active` is `true` AND `is_expired` is `false`.
    - `revoked_at` string, date-time, nullable, required: Instant of the revocation, or `null` while it is active.
    - `revocation_reason` string, nullable, required: Reason recorded on revocation, or `null` while it is active.
    - `created_at` string, date-time, required
  - `remission_mode` 'own_certificate' | 'social_collaborator' | 'power_of_attorney', required: Remission mode of the company AFTER registering: registering a representation moves a company that remits through a third-party mode to the mode of the new kind (or back to `own_certificate` when that mode cannot be used); with `own_certificate` it does not change.

## 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.
- `402`: The operation requires a payment that could not be completed: either no payment method is on file (`error.details.payment_setup_url` links to the Billing Portal where it can be set up), the immediate charge was declined by the payment provider, the account lacks the plan or add-on this operation bills against, the annual document limit is reached (`plan_limit_exceeded`, with `error.details.period_end` indicating the end of the period — wait until it has ended or upgrade the plan to continue now), or the account has reached its maximum usage (`storage_quota_exceeded`, raised by upload operations such as signing a delivery note or attaching a file to an expense — contact support before retrying). Nothing was created or modified — resolve the cause and retry the same request. Version note: `error.type` is `payment_required_error` from `Factuarea-Version: 2026-09-01` onwards; earlier versions receive `invalid_request_error` for the three codes that predate that cut (`payment_method_required`, `employee_seat_payment_method_required` and `employee_seat_charge_failed`; every other 402 code, such as `addon_required`, `plan_limit_exceeded` or the additional tax ID codes, is newer and always carries `payment_required_error`). `error.code` is stable across every version.
- `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).
- `409`: The request conflicts with data that already exists or with a request running at the same time. `resource_conflict`: another request was reserving identifiers for the same kind of record at that moment and this one could not complete its reservation. Nothing was written; send the request again after a few seconds.
- `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)
