> This page is for Spain Public Administration Flow.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://infonite.dev/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://infonite.dev/_mcp/server.

# On Partial Results (Experience Closed)

POST 

Triggered when the user is done and the widget closes, but **one or more sources are still working**. Some administrations do not answer in real time — the CIRBE report from the Banco de España is the usual case — so the session keeps running in the background instead of holding your user in front of a spinner.

This event hands you **everything retrieved so far**.

The payload of this event always carries **`is_closed: false`** at the top, with an `aes_key` or without one — that field is how you tell partial from final, wherever you read it. Sources that had not answered yet are simply **absent** from the data: not empty, not null — absent.

The session is still open. Do not treat this as the outcome of the verification and do not close the case on it.

The **complete** data arrives afterwards in [On Flow Ended](/flows/spain-public-administration/api-reference/spain-public-administration-api/webhooks/webhook-es-public-administration-ended), whose payload carries `is_closed: true`. That is the only event that means the session is finished.

## The payload

It is the **same schema as the end event** — `FlowResultsSchema` — so you parse it with the same code you already wrote. The only difference is what is in it: the sources that finished, and nothing else.

**The schema below describes `data` decrypted — on purpose**, so this reference has a model you can read and code against. What arrives at your endpoint depends on how the session was created:

* **With an `aes_key`**: `data` is a single string, `aes::Base64(IV + Ciphertext + Tag)`. Decrypt it and you get exactly the object documented below. The walkthrough and the code are in [Payload Encryption](/guides/payload-encryption).
* **Without an `aes_key`**: `data` is **not in the body at all** — absent, not `null`. Somebody's records are never put on the wire unencrypted, so the event tells you what happened and you read the content from [Get Session Results](https://infonite.dev/flows/spain-public-administration/api-reference/spain-public-administration-api/sessions-results/flows-es-public-administration-v-1-session-results) when it arrives.

## What it is for

Use it to move early: show your user what you already have, or start the work that does not depend on the slow source. Then **wait for `es-public-administration:ended`** before treating the verification as complete.

You receive this event **once per session**, even though the flow may move in and out of the waiting state several times while the remaining sources finish.

As with every webhook, make your endpoint idempotent: a network-level retry must never create the record twice on your side.

&#x20;**`messages`: what the session found, beside what it read.** The payload carries a `messages` list — situations the session detected while it ran; most sessions carry none. The one to route is **`flag`**: it never means something failed on our side, it means the session found something about the person or the data that deserves a decision on yours. `location` is a `loc` list (`["data", "customer", "profile"]`) pointing at the part of this document the message is about, and `message_id` is the stable name of the situation — **automate on that, never on the wording**.

Expand [`messages`](/flows/spain-public-administration/api-reference/spain-public-administration-api/sessions-results/flows-es-public-administration-v-1-session-results#response.body.messages) in the response explorer to see the object, and [Get Session Results](https://infonite.dev/flows/spain-public-administration/api-reference/spain-public-administration-api/sessions-results/flows-es-public-administration-v-1-session-results) for what each type means and what to do with them.

**Answer `2xx` as soon as the payload reaches you**, whatever your processing does with it afterwards: any other status is recorded as a failed delivery even though the event arrived. [Answering a delivery](/guides/webhooks#answering-a-delivery) has the handler to copy.

Reference: https://infonite.dev/flows/spain-public-administration/api-reference/spain-public-administration-api/webhooks/webhook-es-public-administration-partial

## Request

### Payload

- `event_class` ("EsPublicAdministrationV1FlowEvent", required) — Payload class discriminator — always this value for Spain Public Administration events.
- `app_id` (string, required)
- `customer_id` (string, required)
- `session_id` (string, required)
- `producer` ("es-public-administration", required) — The flow that produced the event.
- `event` ("es-public-administration:partial", required) — The event type: `partial`.
- `status_code` (enum, required) — Describes the status of a flow.
  - Allowed values: `READY`, `WAITING`, `COMPLETED`, `FAILED`, `SYSTEM_CANCELLED`, `CLIENT_CANCELLED`, `CUSTOMER_CANCELLED`, `TIMED_OUT`, `CONFIGURATION_ERROR`
- `is_closed` (false, required) — Always `false`: the experience is over and the sources are still working, so the results are partial — whether `data` travels or not. `ended` brings them complete.
- `date` (string, optional)
- `status_message` (string, optional, nullable)
- `data` (FlowResultsSchema, optional) — Partial results: everything retrieved at the moment the user closed the experience. - It is the **same payload as the `ended` event**, `FlowResultsSchema`, with the sources that had not answered yet simply absent. Parse it with the same code; do not expect every field to be present. - **Documented decrypted, delivered encrypted.** With an `aes_key` on the session this field is the `aes::Base64(IV + Ciphertext + Tag)` string of the object described here; without one it is not in the body at all, and the partial results are read from the session results endpoint instead. - **This is not the end of the session.** The pending sources keep working and the complete results arrive later, in `ended`. Treat this as an early view, not as a final answer, and do not close the case on it.

## Types

### FlowResultsSchema

- `is_closed` (boolean, required) — Indicates if the flow session has been finalized.
- `status_code` (enum, required) — The final execution status code of the session.
  - Allowed values: `READY`, `WAITING`, `COMPLETED`, `FAILED`, `SYSTEM_CANCELLED`, `CLIENT_CANCELLED`, `CUSTOMER_CANCELLED`, `TIMED_OUT`, `CONFIGURATION_ERROR`
- `cursor` (enum, required) — The last screen of the widget experience where the user interacted.
  - Allowed values: `es-public-administration:welcome:init`, `es-public-administration:welcome:consent`, `es-public-administration:connect:source`, `es-public-administration:connect:wait`, `es-public-administration:bye:completed`, `es-public-administration:bye:failure`
- `connections` (map from string to string, required) — A mapping of internal connection identifiers to the engine references executed.
- `consent` (ConsentOutput, optional) — The structured consent audit trail and accepted document versions signed by the user.
- `retrieved_features` (list of enum, optional) — The list of features successfully extracted from the official portals during the session.
  - Allowed values: `accounts_read`, `cards_read`, `deposits_read`, `loans_read`, `credits_read`, `investment_accounts_read`, `funds_read`, `stocks_read`, `pensions_read`, `accounts_certificates`, `direct_debits_read`, `customer_information_read`, `source_contracts_read`, `cloud_resource_read`, `supplier_invoices_read`, `client_invoices_read`, `labor_check`, `public_pensions`, `public_document_verification`, `yearly_individual_tax`, `vehicles_data`, `driver_data`, `academic_data`, `properties_data`, `credit_registry_data`
- `data` (PublicGlobalPositionSchema, optional) — The retrieved public administration records, conforming to the PublicGlobalPositionSchema.
- `messages` (list of MessageOutput, optional, default: []) — What the session has to say about itself and about the data it read, oldest first. Most sessions say nothing and the list is empty. When it is not, each entry is a situation that was detected while the session ran: an `error` or a `warning` about a read, an `info` note, or a `flag` — the type raised for you. A flag never means something of ours failed; it means the session found something worth a decision on your side, and `location` points at the part of this document it is about. A situation is reported ONCE however many times it occurred, so this list is a set of facts and not a log: automate on `message_id`, which is stable, and treat `message` as text for a person.

### ConsentOutput

The structured consent information, including device audit trail and accepted documents.

- `accepted_date` (string, optional) — The timestamp when the user explicitly submitted consent.
- `accepted_features` (list of enum, optional, default: []) — The list of features that the user explicitly authorized for extraction.
  - Allowed values: `accounts_read`, `cards_read`, `deposits_read`, `loans_read`, `credits_read`, `investment_accounts_read`, `funds_read`, `stocks_read`, `pensions_read`, `accounts_certificates`, `direct_debits_read`, `customer_information_read`, `source_contracts_read`, `cloud_resource_read`, `supplier_invoices_read`, `client_invoices_read`, `labor_check`, `public_pensions`, `public_document_verification`, `yearly_individual_tax`, `vehicles_data`, `driver_data`, `academic_data`, `properties_data`, `credit_registry_data`
- `user_ip` (string, optional) — The IP address of the customer device that provided consent.
- `user_agent` (string, optional) — The browser user agent string of the customer device.
- `origin` (string, optional) — The origin website URL where the customer loaded the widget.
- `accepted_documents` (map from string to AcceptedDocumentSchema, optional, default: {}) — A dictionary mapping document identifiers to their structured acceptance metadata.

### PublicGlobalPositionSchema

- `customer` (CustomerFamily, optional) — Customer family
- `academic` (AcademicFamily, optional) — Academic family
- `driver` (DriverFamily, optional) — Driver & vehicles family
- `employment` (EmploymentFamily, optional) — Employment family
- `tax` (TaxesFamily, optional) — Tax family
- `properties` (PropertiesFamily, optional) — Properties family
- `credit` (CreditFamily, optional) — Credit registry family

### MessageOutput

Something the session has to say about itself or about what it read.

- `type` (enum, required) — The kind of message: `error`, `warning`, `flag` or `info`. A `flag` is the one raised for you to act on rather than for us: nothing failed on our side and the session still found something that deserves a decision.
  - Allowed values: `error`, `warning`, `info`, `flag`
- `message_id` (string, required) — The stable identifier of the SITUATION, such as `profile_identity_mismatch`. Automate on this value: the wording of `message` may change without the situation becoming a different one.
- `date_created` (string, required) — When the situation was first detected during the session.
- `location` (list of MessageOutputLocationItems, optional, default: []) — Where in this results document the message applies, as a `loc` list — the same shape as the `loc` of a validation error, with strings for fields and integers for array positions (`["data", "driver", "vehicles", 0, "license_plate"]`). An empty list means the message is about the session as a whole.
- `message` (string, optional) — A human-readable description of the situation, when there is one to add.

### AcceptedDocumentSchema

- `version` (string, required) — The version tag of the legal document template accepted by the user.
- `hash` (string, optional) — The SHA-256 cryptographic hash of the accepted document content.
- `sign_date` (string, optional) — The timestamp when the user signed the document. Absent on a document that was only read: mandatory reading keeps the version and the hash of the text the user read to its end, and nothing else — the consent's own date is when it was accepted.
- `signature_provider` (string, optional) — The digital signature mechanism or provider used to complete the acceptance.
- `signature_metadata` (map from string to any, optional) — Additional metadata collected during the signature process.

### CustomerFamily

- `profile` (CustomerProfileSchema, optional) — Customer profile

### AcademicFamily

- `higher_education_degrees` (list of HigherEducationSchema, optional) — Higher education degrees:
- `secondary_education` (list of SecondaryEducationSchema, optional) — Secondary education

### DriverFamily

- `data` (EUDriverDataSchema, optional) — Driver data
- `vehicles` (list of EUOwnedVehicleSchema, optional) — Officially owned vehicles

### EmploymentFamily

- `labor_check` (TGSSSpainLaborCheckSchema, optional) — Labor check
- `pensions` (list of TGSSSpainPublicPensionSchema, optional) — Public Pensions

### TaxesFamily

- `individual_yearly` (list of YearlyPersonalTaxSituationSchema, optional) — Yearly individual tax situations

### PropertiesFamily

- `es` (list of ESOwnedPropertySchema, optional) — Officially owned properties

### CreditFamily

- `registry` (list of EUCreditRegistryDataSchema, optional) — Credit registry data

### MessageOutputLocationItems

- string
- integer

### CustomerProfileSchema

The customer's identity as the connected institution knows it: names, identification documents, birth and nationality, contact details (emails, phones, addresses) and declared situation (civil status, children, membership age). Use it to verify identity and to cross-check data the user typed against what their institution knows about them. **One profile describes both persons and companies** — `type` tells you which one you are reading. Some fields switch meaning accordingly (`name`, `birth_date`, `nationality_country`, `residence_country` — each one says how); the strictly person-only fields behave predictably for companies: `name_extra` and `number_of_children` come empty, and `gender` / `civil_status` come as `unknown`.

- `product` ("customer_information", required) — The product type identifier. Always `customer_information` for this product.
- `sub_family` ("customer_information:user_profile", required) — The sub-family identifier: `customer_information:user_profile`, the customer's profile at the institution.
- `fetch_date` (string, required) — Date this information was fetched.
- `type` (enum, required) — The kind of customer: a person or a company. This is the switch that tells you how to read the rest of the profile.
  - Allowed values: `person`, `company`, `unknown`
- `identification_numbers` (list of IdentificationNumberSchema, required) — The customer's identification documents as the institution registers them — for persons a DNI/NIE, passport or Social Security number; for companies the tax ID (CIF). Each entry carries its type, its value, and whether the value passed validation.
- `gender` (enum, required) — **Persons only** — gender as declared at the institution. `unknown` for companies, and for persons whose source does not disclose it.
  - Allowed values: `male`, `female`, `rather_not_say`, `unknown`
- `civil_status` (enum, required) — **Persons only** — civil status as declared at the institution. `unknown` for companies, and for persons whose source does not disclose it.
  - Allowed values: `single`, `married`, `divorced`, `widowed`, `separated`, `unknown`
- `emails` (list of string, required) — Email addresses of the customer, as they appear at the source.
- `phones` (list of string, required) — Phone numbers of the customer, as they appear at the source.
- `addresses` (list of AddressSchema, required) — Postal addresses of the customer, as they appear at the source.
- `name` (string, optional) — For persons, the given name(s); for companies, the registered legal name (razón social).
- `name_extra` (string, optional) — **Persons only** — the rest of the legal name; Spanish institutions report both surnames here. Empty for companies.
- `alias` (string, optional) — How the institution addresses the customer when it differs from the legal name — a chosen or commercial name.
- `birth_date` (date, optional) — For persons, the date of birth; for companies, the date of incorporation, when the source provides it.
- `birth_country` (string, optional) — Country of birth, as a two-letter ISO code.
- `nationality_country` (string, optional) — For persons, the country of nationality; for companies, the country of the registered seat. Two-letter ISO code.
- `residence_country` (string, optional) — For persons, the country of residence; for companies, the country of its tax residence. Two-letter ISO code.
- `number_of_children` (integer, optional) — **Persons only** — number of children, when the institution records it. Empty for companies.
- `language` (string, optional) — The customer's preferred language, as an ISO language code.
- `member_since` (date, optional) — Date the customer's relationship with the institution began, when the source reports it.

### HigherEducationSchema

- `product` ("academic_data", required)
- `sub_family` (enum, required)
  - Allowed values: `academic_data:higher_bachelor`, `academic_data:higher_master`, `academic_data:higher_doctorate`
- `fetch_date` (string, required) — Date this product was fetched
- `qualification_name` (string, required) — Qualification name.
- `institution_name` (string, required) — Institution name.
- `institution_country` (string, required) — Country of the institution.
- `completion_status` (string, required) — Completion status
- `total_credits` (string, required) — ECTS credits (Common in Europe)
- `grade_average` (string, required) — GPA or local scale (e.g., 0-10 in Spain)
- `issue_date` (date, optional) — Date when the qualification was issued.
- `start_date` (date, optional) — Date when the education started.
- `end_date` (date, optional) — Date when the education ended.
- `official_id` (string, optional) — National registry number / Diploma serial number.
- `verification_url` (string, optional) — Link to public administration validator.
- `thesis_title` (string, optional) — Thesis title - Mandatory for PhD, common for Master
- `field_of_study` (string, optional) — ISCED-F code or name (e.g., "061 ICTs")

### SecondaryEducationSchema

- `product` ("academic_data", required)
- `sub_family` (enum, required)
  - Allowed values: `academic_data:secondary_general`, `academic_data:secondary_vocational`, `academic_data:professional_certification`
- `fetch_date` (string, required) — Date this product was fetched
- `qualification_name` (string, required) — Qualification name.
- `institution_name` (string, required) — Institution name.
- `institution_country` (string, required) — Country of the institution.
- `completion_status` (string, required) — Completion status
- `institution_code` (string, optional) — Local school ID or center code.
- `region` (string, optional) — State, Province, or Autonomous Community.
- `issue_date` (date, optional) — Date when the qualification was issued.
- `start_date` (date, optional) — Date when the education started.
- `end_date` (date, optional) — Date when the education ended.
- `official_id` (string, optional) — National registry number / Diploma serial number.
- `verification_url` (string, optional) — Link to public administration validator.
- `study_framework` (string, optional) — Education system/law (e.g., "LOE", "K-12", "GCSE")
- `national_registry_id` (string, optional) — National level ID (e.g., MEC in Spain)
- `regional_registry_id` (string, optional) — State/Regional level ID
- `archive_volume` (string, optional) — Book/Volume number (Libro)
- `archive_entry` (string, optional) — Entry or order number (Folio/Orden)

### EUDriverDataSchema

- `product` ("driver_data", required)
- `sub_family` ("driver_data:eu_driver_data", required)
- `fetch_date` (string, required) — Date this product was fetched
- `country` (string, required) — Country that expired the license.
- `licences` (list of DrivingLicenseSchema, required) — List of driving licenses.
- `point_balance` (integer, optional) — Balance of the driver in points.
- `name` (string, optional) — First name of the driver
- `name_extra` (string, optional) — Last name of the driver.
- `identifier` (IdentificationNumberSchema, optional) — NIF of the driver.
- `dangerous_goods_authorized` (boolean, optional) — Whether the driver is authorized to transport dangerous goods.
- `school_transport_authorized` (boolean, optional) — Whether the driver is authorized to transport school goods.
- `address` (string, optional) — Address of the driver.
- `point_movements` (list of PointMovementSchema, optional) — List of movements. If not present means the data was not consulted.
- `attachments` (list of FileAttachmentSchema, optional, default: []) — Supporting documents of this driver record. With the DGT's own connection, the person's photograph as the DGT holds it (`attachment:person-certified-photo`), when they are registered there — that is, when they hold a driving licence.

### EUOwnedVehicleSchema

- `product` ("driver_data", required)
- `sub_family` ("driver_data:eu_owned_vehicle", required)
- `fetch_date` (string, required) — Date this product was fetched
- `country` (string, required) — Country where the vehicle is registered.
- `registration_date` (date, required, deprecated) — **Deprecated: read `last_registration_date` and `first_registration_date` instead.** A registration date as the source reports it, which is not always the same registration: the one in `country` when the source gives it, the vehicle's first registration when the source gives only that one. Still present, and filled as before.
- `first_registration_date` (date, optional) — Date the vehicle was registered for the first time, in any country: for an imported vehicle, its original registration abroad. It belongs to the vehicle, not to its owner — a vehicle bought second hand keeps it — and it is the date that tells the vehicle's age. Equal to `last_registration_date` when the vehicle was first registered in `country`. Absent when the source consulted does not give it — and then `last_registration_date` may well be the first registration too: the absence only says the source does not tell.
- `last_registration_date` (date, optional) — Date the vehicle was registered in `country`: the registration in force. Equal to `first_registration_date` for a vehicle first registered there, later for one registered abroad before. It belongs to the vehicle, not to its owner — a change of owner leaves it as it was. Absent when the source consulted does not give it — and then `first_registration_date` may well be the registration in `country` too: the absence only says the source does not tell.
- `inspection_expiry_date` (date, optional) — Expiry date of the vehicle inspection.
- `inspection_pending` (boolean, optional) — If true, the vehicle has failed the previous inspection or is pending to be inspected.
- `license_plate` (string, optional) — License plate number of the vehicle.
- `administrative_situation` (string, optional) — Current administrative situation of the vehicle.
- `vin` (string, optional) — Vehicle Identification Number.
- `make` (string, optional) — Vehicle manufacturer.
- `model` (string, optional) — Vehicle model name.
- `trim` (string, optional) — Specific vehicle trim/variant.
- `color` (string, optional) — Color of the vehicle.
- `mileage` (integer, optional)
- `mileage_date` (date, optional) — Date when the mileage was recorded.
- `fuel_type` (string, optional) — Fuel type of the vehicle.
- `emission_class` (string, optional) — Emission class of the vehicle.
- `insurance` (VehicleInsuranceSchema, optional) — Vehicle insurance policy.
- `simple_vehicle_report` (SimpleVehicleReport, optional) — Whether the vehicle has incidents, and which ones. Present only when `vehicles_data` is requested with `simple_vehicle_report: true` in its configurations.

### TGSSSpainLaborCheckSchema

The person's labor life with the Spanish Social Security (TGSS). It answers three questions: who they have worked for and when (`work_relations_history`), what they have contributed month by month per employer account (`contribution_base_by_company`), and what that means today — a guaranteed minimum NET income floor (`income_floor`, a lower bound derived from the contribution bases, never a salary estimate) and the person's current work statuses (`current_work_types`). Use it to verify employment, gauge income stability and assess risk; the source reports the data was read from travel in `attachments`, and the holder they name in `holder_name` and `identifier`.

- `product` ("social_security", required) — The product type identifier. Always `social_security` for this product.
- `sub_family` ("social_security:spain_labor_check", required) — The sub-family identifier: `social_security:spain_labor_check`, the Spanish Social Security (TGSS) labor life check.
- `fetch_date` (string, required) — Date this product was fetched.
- `work_relations_history` (list of WorkRelationSchema, required) — Work relation history: ongoing relations first, then the finished ones from the most recently ended backwards — including situations assimilated to registration such as benefit periods.
- `contribution_base_history` (list of MonthlyBaseSchema, required, deprecated) — Flat monthly contribution-base history, most recent first. Months only — company attribution lives in `contribution_base_by_company`, which groups these same months per employer account.
- `holder_name` (string, optional) — The holder's full name, as printed on the official Social Security reports (the PDFs). ⚠️ **When it is not reported, review this product carefully before you rely on it**: the two reports print different names for the same holder, or no report could be used.
- `identifier` (IdentificationNumberSchema, optional) — The holder's identity document (DNI or NIE), as printed on the official reports; when both are read, they must agree on it. Not reported when no report could be used (not available, not readable, or disagreeing on the identity numbers). When the labor check is retrieved by connecting to the Social Security, both reports are read whether or not you ask for them as attachments, and without a usable one the rest of the data may come from its web pages instead.
- `currently_active` (boolean, optional) — True when the person is actually WORKING right now: at least one entry in `current_work_types` is real work (`employee`, `self_employed` or `public_employee`). Receiving an unemployment benefit is not active employment. Neither is a hire scheduled for a future date: Social Security reports such a person as registered ("alta programada"), but this field stays `false` until the job actually starts. `false` means the person's current situation is known and includes no active job; `null` means the work history could not be recovered, so nothing is claimed either way. The value is deliberately cautious — it is designed for risk decisions — so only clearly identified work counts: in the rare case where an ongoing relation cannot be classified you get `false` plus a `current_work_type_unknown` warning, never an optimistic `true`.
- `current_work_types` (list of enum, optional) — The person's current work statuses: one entry per ongoing relation, so repeated values reveal simultaneous jobs (two `employee` entries = two concurrent employments). An ongoing benefit shows as `unemployment_benefits`. An empty list means nothing ongoing — no job and no benefit.
  - Allowed values: `unknown`, `employee`, `self_employed`, `public_employee`, `vacations`, `unemployment_benefits`, `other`
- `social_security_days` (integer, optional) — Total days effectively counted by Social Security over the whole career. Simultaneous employments are counted once, so this is NOT the sum of the per-relation day counts.
- `contribution_base_by_company` (list of CompanyContributionsSchema, optional, default: []) — Contribution-base history grouped per employer account, most recent first. Join each group to its work relation through the `ccc` code.
- `income_floor` (IncomeFloorSchema, optional) — Guaranteed minimum NET income derived from the certified contribution bases (the certified gross lower bound travels alongside it). A floor for risk assessment, never a salary estimate.
- `attachments` (list of FileAttachmentSchema, optional, default: []) — List of attached supporting documents (e.g. the original TGSS PDF reports this product was extracted from).

### TGSSSpainPublicPensionSchema

- `product` ("social_security", required)
- `sub_family` ("social_security:spain_public_pension", required)
- `fetch_date` (string, required) — Date this product was fetched
- `product_name` (string, required) — Product name
- `start_date` (date, required) — Pension start date, when applicable
- `amounts` (PublicPensionAmountsSchema, required) — Amounts of the pension, when active
- `product_alias` (string, optional) — Product alias
- `regime` (string, optional) — Pension regime

### YearlyPersonalTaxSituationSchema

- `product` ("tax_information", required)
- `sub_family` ("tax_information:persons_yearly_fiscal_data", required)
- `fetch_date` (string, required) — Date this product was fetched
- `primary_taxpayer` (string, required) — National identifier of the taxpayer
- `address` (AddressSchema, required) — Fiscal address for the exercise
- `address_reference` (string, required) — Cadastral reference for the main home
- `country_code` (string, required) — Country code for the tax declaration
- `currency` (string, required) — Currency for the tax declaration
- `tax_agency` (string, required) — Tax agency for the tax declaration
- `fiscal_year_start` (date, required) — Start date of the fiscal year
- `fiscal_year_end` (date, required) — End date of the fiscal year
- `status` (enum, required) — Status of the fiscal data
  - Allowed values: `unknown`, `data`, `draft`, `submitted`, `not_required`, `amended`
- `filing_category` (enum, required) — Category of the tax filing
  - Allowed values: `individual`, `joint`
- `taxable_base` (map from string to string, required) — Total taxable base
- `total_tax_paid` (map from string to string, required) — Total tax paid or withheld
- `final_tax_result` (map from string to string, required) — Final tax result (to be paid or refunded)
- `income` (IncomeDetails, required) — Detailed breakdown of income
- `deductions` (DeductionDetails, required) — Detailed breakdown of deductions
- `liabilities` (LiabilityDetails, required) — Detailed breakdown of liabilities
- `joint_taxpayers` (list of string, optional) — List of national identifiers for joint taxpayers
- `attachments` (list of FileAttachmentSchema, optional, default: []) — List of attached supporting documents

### ESOwnedPropertySchema

- `product` ("owned_property", required)
- `sub_family` ("owned_property:es_owned_property", required)
- `fetch_date` (string, required) — Date this product was fetched
- `country` (string, required) — Country of the property.
- `owners` (list of PropertyOwnerSchema, required) — Every holder of the property, the person included, each with their share.
- `cadastral_reference` (string, optional) — Unique cadastral reference identifier.
- `address` (string, optional) — Full address of the property.
- `property_type` (string, optional) — Type of property (e.g., Urban, Rustic).
- `property_use` (string, optional) — Main use of the property (e.g., Residential).
- `assessment_year` (string, optional) — Year of the catastral assessment.
- `assessed_value` (map from string to string, optional) — Total cadastral value: the value for tax purposes, usually below the market price.
- `land_value` (map from string to string, optional) — Assessed land value.
- `construction_value` (map from string to string, optional) — Assessed construction value.
- `cartography_link` (string, optional) — Link to the cartography map.
- `download_info` (CadastralDownloadInfoSchema, optional) — Internal metadata for downloading documents.

### EUCreditRegistryDataSchema

The holder's risk position at a central credit register: in Spain, the Bank of Spain's CIRBE report, detailed (one row per operation and entity) or aggregated (operations grouped, no entities). Every key the register prints comes twice: as its meaning (an enum, the same whatever the report's period) and as the printed code (the `*_code` fields). Every amount is always present. One the report did not give — when the report could not be read — comes with currency `***` and amount `NaN`: unknown, never zero.

- `product` ("credit_registry_data", required) — The product type identifier.
- `sub_family` (enum, required) — Which report this is: detailed or aggregated — what the document turned out to be, not what was requested. A holder with nothing declared to the register only ever gets the aggregated report.
  - Allowed values: `credit_registry_data:es_cirbe_detailed`, `credit_registry_data:es_cirbe_aggregated`
- `fetch_date` (string, required) — Date this product was fetched.
- `country` (string, required) — Country of the credit registry.
- `report_month` (string, required) — Period the operations correspond to, `MM-YYYY`.
- `holder_code` (string, optional) — The holder's code exactly as the report prints it (e.g. `ES44444444A`). Not reported when the report could not be read.
- `holder_name` (string, optional) — Full name or business name of the holder, as the report prints it. Not reported when the report could not be read: the attached report is then the only reference.
- `identifier` (IdentificationNumberSchema, optional) — The holder's national identifier, from the report's holder code. Not reported when the report could not be read.
- `consultation_date` (string, optional, nullable) — When the register's data was taken, as the report states it.
- `total_drawn` (CurrencyAmountSchema, optional) — Total drawn across every operation in the system. In an aggregated report, exact to the thousand.
- `total_overdue` (CurrencyAmountSchema, optional) — Total overdue across every operation in the system.
- `total_arrears` (CurrencyAmountSchema, optional) — Total default interest and enforceable expenses in the system.
- `total_risk_available` (CurrencyAmountSchema, optional) — Total still available to draw in the system.
- `operations` (list of OperationSchema, optional, default: []) — The operations: one per operation in a detailed report, one per group in an aggregated one.
- `minor_risks` (list of MinorRiskSchema, optional, default: []) — Entities whose accumulated risk is below the reporting threshold. Detailed reports only.
- `attachments` (list of FileAttachmentSchema, optional, default: []) — The original report (PDF).

### IdentificationNumberSchema

One identification document: its type, its value, and whether the value passed validation.

- `type` (enum, required) — Kind of document the number belongs to (e.g. a national ID, passport, tax ID, or Social Security number).
  - Allowed values: `unknown`, `es:dni`, `es:nie`, `es:cif`, `es:ssn`, `co:cc`, `co:ce`, `co:nit`, `co:ti`
- `value` (string, required) — The number itself, as reported by the source.
- `validated` (boolean, required) — True when the value passed the platform's format and check-digit validation. It vouches for the NUMBER being well-formed — not for the official status of the document behind it.
- `country` (string, optional, nullable) — Country that issued the number, as a two-letter ISO code.
- `valid_until` (date, optional) — Expiry date of the document, when the source reports it.

### AddressSchema

A postal address. It is reused wherever the platform reports one — a person's home, a company's registered office, a property's location — so these fields describe the address itself; what it belongs to is told by the object carrying it.

- `title` (string, optional, nullable) — Free label for the address (e.g. `Headquarter`, `Domicilio`).
- `street` (string, optional, nullable) — Street line: name and number.
- `street_extra` (string, optional, nullable) — Second street line: floor, suite, staircase, apartment...
- `municipality` (string, optional, nullable) — Municipality the address belongs to.
- `city` (string, optional, nullable) — City or town.
- `state` (string, optional, nullable) — State or province code.
- `country` (string, optional, nullable) — Country, as a two-letter ISO code.
- `zip_code` (string, optional, nullable) — Postal code.

### DrivingLicenseSchema

- `category` (string, required) — Class of driving license.
- `date` (date, required) — Granted date.
- `expires` (date, optional) — Expiry date.

### PointMovementSchema

- `description` (string, required) — Description of the movement.
- `date` (date, required) — Date of firmness (legal date).
- `points_delta` (integer, required) — Points added or subtracted (signed integer).
- `balance_after` (integer, required) — Balance after the movement.
- `effective_date` (date, optional) — Effective date of the movement.
- `infraction_reference` (string, optional) — Reference number of the infraction.
- `infraction_date` (date, optional) — Date of the infraction.
- `authority_name` (string, optional) — Name of the authority.
- `authority_code` (string, optional) — Code of the authority.

### FileAttachmentSchema

A document attached to a result — an official report, a receipt, an invoice... The entry describes the file; its bytes are downloaded with `id`, through the attachments endpoint of the API that returned the result.

- `sub_family` (enum, required) — What kind of document this is (e.g. `attachment:es-tgss-life-report`).
  - Allowed values: `attachment:attachment`, `attachment:supplier_invoice`, `attachment:client_invoice`, `attachment:es-tgss-life-report`, `attachment:es-tgss-contribution-base-report`, `attachment:es-aeat-model-100`, `attachment:es-cirbe-report`, `attachment:sepa-direct-debit-bill`, `attachment:person-certified-photo`
- `id` (string, required) — Attachment identifier — what the attachments endpoint of the API that returned the result takes to download the file.
- `content_name` (string, required) — File name of the document.
- `content_type` (string, required) — MIME type of the content.
- `metadata` (map from string to any, required) — Extra facts about the document, as simple key-value pairs (e.g. its official verification code, its issue date).
- `product` ("attachment", optional, default: attachment) — The product type identifier. Always `attachment`.
- `content_hash` (string, optional) — Fingerprint of the content, to verify its integrity.

### VehicleInsuranceSchema

Vehicle insurance policy.

- `is_active` (boolean, required) — Whether the vehicle has an active insurance policy.
- `company` (string, optional) — Name of the insurance company.
- `start_date` (date, optional) — Start date of the insurance policy.
- `end_date` (date, optional) — End date of the insurance policy.

### SimpleVehicleReport

Whether the vehicle has incidents, and which ones. Present only when `vehicles_data` is requested with `simple_vehicle_report: true` in its configurations.

- `report_date` (string, required) — Date when the information was consulted.
- `has_incidents` (boolean, required) — Whether the vehicle has incidents, meaning that at the time of the inquiry, there are one or more annotations that prevent administrative processing or the circulation of the vehicle. For your safety, request a full vehicle report to know the details of all the information held in the Registry regarding the vehicle consulted. Always `true` when `flags` names any — an expired inspection included.
- `flags` (list of enum, optional) — The incidents that make this vehicle a risk to buy, finance or insure: what the registry flags on it — a seizure, a seal, a financing charge, a deregistration — and `inspection_expired` when its inspection (ITV) had expired at the time of the report. Each code appears once, in no particular order. Absent when the source does not say; empty when it says there are none. A vehicle can have incidents no flag names, so an empty list does not mean `has_incidents` is `false`.
  - Allowed values: `seizure`, `seal`, `financing_charge`, `temporary_deregistration`, `permanent_deregistration`, `theft_deregistration`, `transfer_deregistration`, `inspection_expired`

### WorkRelationSchema

One period of the person's labor life: an employment, a self-employment stretch, or a situation that counts for Social Security without being a job.

- `activity_start` (date, required) — Activity start date — the date the TGSS counts contributed days from.
- `name` (string, required) — Display name of the relation: the employer's name for employees, the regime for self-employment, and the situation description for benefit periods.
- `work_type` (enum, required) — Work type of this relation (e.g. `employee`, `self_employed`, `unemployment_benefits`).
  - Allowed values: `unknown`, `employee`, `self_employed`, `public_employee`, `vacations`, `unemployment_benefits`, `other`
- `contract_type` (enum, required) — Contract type as mapped from the TGSS classification; `unknown` when the source key has no mapping.
  - Allowed values: `unknown`, `permanent`, `temporary`, `training`, `professional_practices`, `fixed_discontinuous`
- `work_schedule` (enum, required) — Work schedule: `full_time`, `part_time`, or `unknown`.
  - Allowed values: `unknown`, `full_time`, `part_time`
- `activity_end` (date, optional) — Activity end date. Empty while the relation is ongoing.
- `regime` (string, optional) — Social Security regime of this relation.
- `ccc` (string, optional) — Employer contribution account code (CCC) — the join key to `contribution_base_by_company`. Absent for self-employment, which has no employer account.
- `assimilated` (boolean, optional, default: false) — True for situations assimilated to registration (benefit periods, paid untaken vacations...) — periods that count for Social Security but are not an actual job. Skip them when reasoning about employment or earned income.
- `contribution_group` (string, optional) — Contribution group of the worker in this relation.
- `collective_agreement` (string, optional) — Collective agreement governing this relation, when declared.
- `social_security_days` (integer, optional) — Days this relation counts for Social Security. Simultaneous relations each count their own days, so summing across relations overstates — the deduplicated career total is the top-level `social_security_days`.
- `currently_active` (boolean, optional) — True while this relation is ongoing (it has no end date yet).

### MonthlyBaseSchema

One month of contribution: its state and, when registered, the gross base amount.

- `date` (date, required) — Last day of the contribution month — a convenience key for date-indexed consumers; `year` and `month` carry the same information.
- `year` (integer, required) — Contribution year.
- `month` (integer, required) — Contribution month (1-12).
- `status` (enum, required) — State of the month: `registered` (base certified by the TGSS), `pending_update` (contribution reported, amount not published yet — an existing contribution, NOT a gap), `not_yet_settled` (recent month still inside the settlement lag), `no_base_registered`, or `no_alta` (not registered that month). A month absent from the list altogether means no contribution row existed for it.
  - Allowed values: `registered`, `no_alta`, `no_base_registered`, `pending_update`, `not_yet_elapsed`, `not_yet_settled`
- `base` (CurrencyAmountSchema, required) — Monthly contribution base (gross). Carries a numeric amount only when the month is `registered`; in any other state the amount is not available — unavailable, not zero.
- `provisional` (boolean, optional, default: false) — True when the base is provisional and may still be regularized by the TGSS — typical for self-employed workers until the yearly settlement.

### CompanyContributionsSchema

The month-by-month contribution history of one employer account (or regime).

- `company_name` (string, optional) — Employer or regime name, as certified by the TGSS.
- `ccc` (string, optional) — Employer contribution account code (CCC) — the join key linking this history to the matching entries in `work_relations_history`. Absent for self-employment, which has no employer account.
- `regime` (string, optional) — Social Security regime of this account.
- `is_benefit_block` (boolean, optional, default: false) — True when this entry tracks a benefit (e.g. cessation-of-activity protection for the self-employed), not an actual employer. Its bases are NOT earned income — exclude them from any income computation.
- `months` (list of MonthlyBaseSchema, optional, default: []) — Monthly contribution bases of this account, most recent first.

### IncomeFloorSchema

A guaranteed minimum NET income derived from the contribution bases — a floor for risk assessment, never a salary estimate. The certified gross lower bound travels alongside in the `gross_*` fields.

- `status` (enum, required) — Whether a floor could be asserted: `computed` (floor available), `not_currently_active` (no ongoing employment — e.g. between contracts, a scheduled future hire or an ongoing unemployment benefit; the current floor is zero), `insufficient_data` (working, but not enough certified months yet to measure a floor), or `activity_unknown` (no employment evidence either way).
  - Allowed values: `computed`, `not_currently_active`, `activity_unknown`, `insufficient_data`
- `monthly_floor` (CurrencyAmountSchema, optional) — Estimated minimum NET monthly income: the worst observed window month after worker Social Security contributions and IRPF withholding. A lower bound for risk assessment — NOT a salary estimate: every unknown in the conversion (contract type, age, family situation) is resolved toward more deductions, so real take-home pay can only be equal or higher. For self-employed workers it deliberately understates real income; combine with other signals.
- `annual_floor` (CurrencyAmountSchema, optional) — The net monthly floor, annualized.
- `gross_monthly_floor` (CurrencyAmountSchema, optional) — Guaranteed minimum GROSS monthly income, certified by the contribution bases. The net floor is minimized over months separately, so it can come from a different (net-worse) month than this gross minimum.
- `gross_annual_floor` (CurrencyAmountSchema, optional) — The gross monthly floor, annualized (x12).
- `estimated_deduction_rate` (string, optional, default: nan) — Decimal number with 4 digits precision
- `observed_months` (integer, optional, default: 0) — Number of months the floor was measured over. A month only partly worked (a start after the 1st, an end before the month's last day) is left out once at least two full months exist, so its prorated pay never passes for a monthly income. Fewer than 3 means the floor rests on little evidence — typically a recent hire.
- `companies` (list of CompanyIncomeFloorSchema, optional, default: []) — Only the companies contributing to the computed floor (ongoing, recent activity). Past employments are never listed here — their history is in `contribution_base_by_company` — so nothing in this list can be misread as a salary the person no longer earns.
- `method_version` (string, optional) — Version of the floor derivation method. Bumped whenever the algorithm changes meaning — compare floors only within the same version.

### PublicPensionAmountsSchema

- `base` (CurrencyAmountSchema, required) — Base pension amount
- `revaluation` (CurrencyAmountSchema, required) — Revaluation amount
- `total` (CurrencyAmountSchema, required) — Total pension amount: the gross amount, before any deduction
- `net_amount` (CurrencyAmountSchema, required) — Net amount of the pension, after all deductions

### IncomeDetails

- `employment` (EmploymentIncome, required) — Employment income details
- `capital` (CapitalIncome, required) — Capital income details
- `capital_gains` (CapitalGains, required) — Capital gains and losses details
- `business` (BusinessIncome, required) — Business activity income details
- `real_estate` (RealEstateIncome, required) — Real estate/rental income details

### DeductionDetails

- `donations` (list of DonationLine, required) — List of donations
- `total_donations` (_CurrencyAmount-Input, required) — Total donations
- `personal_allowance` (_CurrencyAmount-Input, required) — Personal tax-free allowance
- `family_allowance` (_CurrencyAmount-Input, required) — Family tax-free allowances (children, ascendants)
- `regional_deductions` (_CurrencyAmount-Input, required) — Total deductions applied at regional level
- `state_deductions` (_CurrencyAmount-Input, required) — Total deductions applied at state level
- `total_deductions` (_CurrencyAmount-Input, required) — Grand total of all deductions

### LiabilityDetails

- `real_estate_loans` (list of RealEstateLoanLine, optional, default: []) — List of real estate loans

### PropertyOwnerSchema

- `name` (string, required) — Full name of the owner.
- `identifier` (string, optional) — Identification number of the owner.
- `percentage` (string, optional, default: nan) — The owner's share, as a fraction: 0.59 is 59 %.

### CadastralDownloadInfoSchema

- `cn` (string, optional) — Class of nature.
- `cp` (string, optional) — Province code.
- `cm` (string, optional) — Municipality code.
- `pc1` (string, optional) — Cadastral plot 1.
- `pc2` (string, optional) — Cadastral plot 2.
- `car` (string, optional) — Cargo/charge identifier.
- `cc1` (string, optional) — Control character 1.
- `cc2` (string, optional) — Control character 2.
- `cpo` (string, optional) — Postal code.
- `cpa` (string, optional) — Postal code area.
- `refCat` (string, optional) — Full cadastral reference.

### CurrencyAmountSchema

A monetary amount together with its currency.

- `currency` (CurrencyAmountSchemaCurrency, required) — Three-letter ISO currency code — or `***` when the source did not disclose the currency.
- `amount` (string, required) — Decimal number with 2 digits precision

### OperationSchema

- `currency` (string, required) — Currency the operation is contracted in. `XXX` means "other currencies".
- `entity_name` (string, optional, nullable) — Name of the reporting entity. Detailed reports only.
- `entity_code` (string, optional, nullable) — Bank of Spain code of the reporting entity (e.g. `0182`). Detailed reports only.
- `operation_code` (string, optional, nullable) — Unique code of the operation, as the entity reports it. Detailed reports only.
- `product_type` (enum, optional, nullable) — Type of product: a loan, a lease, a guarantee… Empty only if the code is new to us; see `product_type_code`.
  - Allowed values: `securities_lending`, `trade_credit_with_recourse`, `trade_credit_without_recourse`, `trade_receivables`, `financial_credit`, `financial_lease`, `reverse_repurchase_agreement`, `debt_securities`, `financial_guarantee`, `forward_deposit`, `non_financial_guarantee`, `irrevocable_documentary_credit`, `available_in_other_commitments`, `overdraft`, `credit_card_debt`, `deposit`, `revolving_credit`, `credit_line`, `other_loans`
- `product_type_code` (string, optional, nullable) — Product code as printed (e.g. `V32`).
- `intervention_nature` (enum, optional, nullable) — How the holder takes part: as the direct obligor, or as a guarantor of someone else's operation.
  - Allowed values: `direct_holder`, `guarantor`, `bill_signatory`
- `intervention_nature_code` (string, optional, nullable) — Intervention code as printed (e.g. `T11`).
- `collective_status` (enum, optional, nullable) — Whether the holder answers jointly and severally, or collectively, with others. Empty when neither.
  - Allowed values: `joint_and_several`, `collective`, `not_joint_and_several`
- `collective_status_code` (string, optional, nullable) — Code as printed (e.g. `T33`).
- `participants_number` (integer, optional, nullable) — Number of participants in a joint and several or collective operation.
- `maturity_type` (enum, optional, nullable) — Time left to maturity at the report's date.
  - Allowed values: `up_to_three_months`, `three_months_to_one_year`, `one_to_five_years`, `over_five_years`, `indeterminate`
- `maturity_type_code` (string, optional, nullable) — Maturity code as printed (e.g. `L08`).
- `real_guarantee_type` (enum, optional, nullable) — Main real guarantee (collateral): a mortgage, a pledge… or `none`.
  - Allowed values: `none`, `financial_assets_pledge`, `real_estate_mortgage`, `other_real_guarantee`, `life_insurance_pledge`, `other_physical_collateral`, `credit_derivatives`, `financial_guarantee_other_than_credit_derivatives`, `other_protection`, `residential_real_estate`, `offices_and_commercial_premises`, `commercial_real_estate`, `debt_securities`, `gold`, `cash_and_deposits`, `loans`, `trade_receivables`, `equity_and_investment_fund_shares`
- `real_guarantee_type_code` (string, optional, nullable) — Code as printed (e.g. `G19`).
- `real_guarantee_coverage` (enum, optional, nullable) — Whether the real guarantee covers all of the risk or part of it. Empty when there is no guarantee.
  - Allowed values: `total`, `partial`
- `real_guarantee_coverage_code` (string, optional, nullable) — Code as printed (e.g. `E14`).
- `personal_guarantee_type` (enum, optional, nullable) — Main personal guarantee beyond the holders' own, or `none`.
  - Allowed values: `none`, `public_administration`, `other_personal_guarantee`, `reporting_entity`, `public_credit_insurer`, `unspecified`
- `personal_guarantee_type_code` (string, optional, nullable) — Code as printed (e.g. `G10`). Empty when there is no personal guarantee.
- `personal_guarantee_coverage` (enum, optional, nullable) — Whether the personal guarantee covers all of the risk or part of it.
  - Allowed values: `total`, `partial`
- `personal_guarantee_coverage_code` (string, optional, nullable) — Code as printed (e.g. `E15`).
- `operation_status` (enum, optional, nullable) — Special situation of the operation: refinanced, in default, written off… `standard` when none applies.
  - Allowed values: `standard`, `restructured_under_rdl_6_2012`, `refinanced_or_restructured`, `creditors_agreement`, `default_90_days_to_4_years`, `default_over_4_years`, `written_off`
- `operation_status_code` (string, optional, nullable) — Code as printed (e.g. `I19`). Empty when no special situation applies.
- `total_drawn` (CurrencyAmountSchema, optional) — Amount drawn, overdue amounts included. In an aggregated report, exact to the thousand.
- `overdue` (CurrencyAmountSchema, optional) — Part of the drawn amount that is overdue, with a first default over 90 days old.
- `arrears` (CurrencyAmountSchema, optional) — Part of the overdue amount that is default interest and enforceable expenses.
- `risk_available` (CurrencyAmountSchema, optional) — Amount still available to draw.

### MinorRiskSchema

- `entity_name` (string, required) — Name of an entity whose accumulated risk with the holder is below the reporting threshold.
- `entity_code` (string, optional, nullable) — Bank of Spain code of the entity.
- `limit_amount` (CurrencyAmountSchema, optional) — The reporting threshold: 1,000 EUR from period 01-2021, 9,000 EUR before.

### CompanyIncomeFloorSchema

One company's share of the income floor: the minimum net income it contributes.

- `company_name` (string, required) — Employer or regime this floor comes from.
- `monthly_floor` (CurrencyAmountSchema, required) — Estimated minimum NET monthly income from this company: its worst observed window month's net share, after worker Social Security contributions and IRPF withholding at that month's real income mix. Every unknown (contract type, age, family situation) is resolved toward more deductions, so real take-home pay can only be equal or higher.
- `annual_floor` (CurrencyAmountSchema, required) — Estimated minimum NET annual income from this company.
- `basis` (enum, required) — How this floor was derived (e.g. `window_minimum`: the minimum base over the trailing window of fully certified months).
  - Allowed values: `window_minimum`
- `ccc` (string, optional) — Employer contribution account code (CCC) of this company.
- `work_type` (enum, optional) — Work type behind this income.
  - Allowed values: `unknown`, `employee`, `self_employed`, `public_employee`, `vacations`, `unemployment_benefits`, `other`
- `gross_monthly_floor` (CurrencyAmountSchema, optional) — The certified GROSS monthly floor this company's net figure derives from — the minimum contribution base over the observation window.
- `gross_annual_floor` (CurrencyAmountSchema, optional) — The certified GROSS annual floor from this company (the gross monthly floor x12).
- `observed_months` (integer, optional, default: 0) — Number of certified months the floor is based on — the more months, the steadier the floor.

### EmploymentIncome

- `lines` (list of EmploymentIncomeLine, required) — List of employment income sources
- `total_gross` (_CurrencyAmount-Input, required) — Total gross employment income
- `total_withheld` (_CurrencyAmount-Input, required) — Total income tax withheld from employment
- `total_social_security` (_CurrencyAmount-Input, required) — Total social security contributions

### CapitalIncome

- `lines` (list of CapitalIncomeLine, required) — List of capital income sources
- `total_gross` (_CurrencyAmount-Input, required) — Total gross capital income
- `total_withheld` (_CurrencyAmount-Input, required) — Total tax withheld from capital income
- `total_penalization` (_CurrencyAmount-Input, required) — Total penalization
- `total_expenses` (_CurrencyAmount-Input, required) — Total deductible expenses

### CapitalGains

- `lines` (list of CapitalGainLine, required) — List of capital gain operations

### BusinessIncome

- `activities` (list of BusinessActivityLine, required) — List of business activities
- `total_income` (_CurrencyAmount-Input, required) — Total economic activities income
- `total_withheld` (_CurrencyAmount-Input, required) — Total economic activities withheld
- `social_security_contributions` (_CurrencyAmount-Input, required) — Social security contributions paid

### RealEstateIncome

- `properties` (list of RealEstateIncomeLine, required) — List of rental properties
- `total_gross_income` (_CurrencyAmount-Input, required) — Total gross rental income
- `total_net_income` (_CurrencyAmount-Input, required) — Total net rental income

### DonationLine

- `entity_id` (string, required) — Identifier of the receiving entity (NIF/CIF)
- `entity_name` (string, required) — Name of the receiving entity
- `amount` (_CurrencyAmount-Input, required) — Amount donated
- `is_recurring` (boolean, required) — Whether the donation is recurring
- `taxpayer_id` (string, required) — National identifier of the taxpayer for this line
- `donation_type` (string, optional) — Type of donation (e.g., Donativo)

### _CurrencyAmount-Input

- `currency` (CurrencyAmountInputCurrency, optional, default: ***)
- `amount` (string, optional, default: NaN) — Decimal number with 2 digits precision

### RealEstateLoanLine

- `loan_id` (string, required) — Identifier of the loan
- `lender_id` (string, required) — Identifier of the lender (NIF/CIF)
- `lender_name` (string, required) — Name of the lender
- `amortized_capital` (_CurrencyAmount-Input, required) — Total amortized capital
- `interests` (_CurrencyAmount-Input, required) — Total interests paid
- `financial_expenses` (_CurrencyAmount-Input, required) — Total financial expenses
- `taxpayer_id` (string, required) — National identifier of the taxpayer for this line
- `participation` (string, optional) — Percentage of participation in the loan
- `formalization_date` (date, optional) — Date the loan was formalized

### CurrencyAmountSchemaCurrency

Three-letter ISO currency code — or `***` when the source did not disclose the currency.

- string
- "***"

### EmploymentIncomeLine

- `employer_id` (string, required) — Identifier of the employer (NIF/CIF)
- `employer_name` (string, required) — Name of the employer
- `gross_income` (_CurrencyAmount-Input, required) — Gross income from this employer
- `tax_withheld` (_CurrencyAmount-Input, required) — Income tax withheld by this employer
- `social_security_contributions` (_CurrencyAmount-Input, required) — Social security contributions paid
- `taxpayer_id` (string, required) — National identifier of the taxpayer for this line

### CapitalIncomeLine

- `asset_type` (string, required) — Type of asset (e.g., Interests, Dividends)
- `gross_income` (_CurrencyAmount-Input, required) — Gross capital income
- `tax_withheld` (_CurrencyAmount-Input, required) — Tax withheld from capital income
- `penalization` (_CurrencyAmount-Input, required) — Penalization for early withdrawal
- `deductible_expenses` (_CurrencyAmount-Input, required) — Deductible administration or custody fees
- `taxpayer_id` (string, required) — National identifier of the taxpayer for this line
- `provider_id` (string, optional) — Identifier of the financial entity (NIF/CIF)
- `provider_name` (string, optional) — Name of the financial entity
- `account_number` (string, optional) — Account number or IBAN

### CapitalGainLine

- `asset_description` (string, required) — Description of the asset sold
- `asset_type` (string, required) — Type of asset (e.g., Shares, Crypto, Real Estate)
- `sale_value` (_CurrencyAmount-Input, required) — Total sale value (net of expenses)
- `sale_expenses` (_CurrencyAmount-Input, required) — Expenses associated with the sale
- `taxpayer_id` (string, required) — National identifier of the taxpayer for this line
- `issuer_id` (string, optional) — Identifier of the issuer
- `issuer_name` (string, optional) — Name of the issuer
- `broker_id` (string, optional) — Identifier of the broker
- `broker_name` (string, optional) — Name of the broker
- `sale_date` (date, optional) — Date of sale

### BusinessActivityLine

- `description` (string, required) — Description of the business activity
- `activity_code` (string, required) — Activity code (IAE / NACE)
- `total_income` (_CurrencyAmount-Input, required) — Total business income
- `tax_withheld` (_CurrencyAmount-Input, required) — Tax withheld from the activity
- `taxpayer_id` (string, required) — National identifier of the taxpayer for this line
- `payer_id` (string, optional) — Payer NIF

### RealEstateIncomeLine

- `address` (string, required) — Full address of the property
- `gross_income` (_CurrencyAmount-Input, required) — Gross rental income
- `deductible_expenses` (_CurrencyAmount-Input, required) — Total deductible expenses for this property
- `net_income` (_CurrencyAmount-Input, required) — Net rental income
- `taxpayer_id` (string, required) — National identifier of the taxpayer for this line
- `cadastral_reference` (string, optional) — Cadastral reference of the property

### CurrencyAmountInputCurrency

- "***"
- string