{"openapi":"3.0.0","servers":[{"url":"https://app.facturadirecta.com/api"}],"info":{"version":"1.0.9","title":"FacturaDirecta 2 API Pública","contact":{"name":"Soporte API","email":"info@facturadirecta.com","url":"https://www.facturadirecta.com/ayuda/"},"description":"Software de facturación y contabilidad en la nube. Visita [FacturaDirecta](https://app.facturadirecta.com) para crear una cuenta.\n\n## Inicio rápido\n\n1. Crea una cuenta gratuita de FacturaDirecta [haciendo click aquí](https://app.facturadirecta.com)\n1. Localiza tu **companyId**.\n\n    Accede a la página de \"Ajustes > API e integraciones\" y al inicio de la página verás el \"Identificador de tu empresa en la API\" o `companyId`.\n\n    Necesitarás este `companyId` en la mayoría de las llamadas a la API.\n    \n    NOTA: Si utilizas la autorización mediante OAuth2 con las credenciales que obtengas puedes tener acceso a más de una empresa (a todas las que pueda acceder el usuario usado durante el proceso de identificación), podrás ver el `companyId` de cada una de ellas mediante la llamada `/profile`. Esta llamada no está disponible para autorizaciones mediante `API-Key` ya que cada una solo concede acceso a una única empresa y no está vinculada con ningún usuari.\n\n1. Haz click en el botón **Authorize**.\n1. Indica `facturadirecta-api` en el campo `client_id`.\n1. Deja en blanco el campo `client_secret`\n1. Selecciona el nivel de acceso seleccionando los scopes que necesites.\n1. Haz click en el botón **Authorize** e identifícate con tus credenciales en la página de inicio de FacturaDirecta.\n1. Abre una función de la API, por ejemplo `/profile` y haz click en **Try it out**.\n1. Haz click en **Execute** y mira el resultado.\n1. ¡Hecho! ¡Ahora puedes probar otras funciones!\n\n## Autorización\n\nLa API de FacturaDirecta te permite identificarte de dos formas diferentes.\n\n* Mediante \"Api-Key\": Utilizarás una clave de acceso que únicamente permite hacer llamadas a la API en la empresa para la que la creas y con los permisos que asignes\n* Mediante OAuth2: Utilizarás los permisos asociados a un usuario real con el que podrás operar en todas las empresa a las que tenga acceso con una combinación de los permisos que asignes en el momento de la autorización y los del propio usuario (se aplicarán los más restrictivos)\n\nLas dos opciones son igual de seguras, la elección de una u otra dependerá de tus preferencias o incluso del tipo de integración que quieres hacer.\n\n### Autorización mediante Api-Key\n\nPara utilizar este método de autorización tienes que acceder a la página de \"Ajustes > API e integraciones\" y crear una nueva clave de API en la página.\n\nUna vez tengas la clave de API añade la cabecera `facturadirecta-api-key: <your_api_key>` en tus llamadas a la API.\n\nA tener en cuenta con este sistema de identificación:\n\n* El acceso se controla únicamente por los niveles de acceso concedidos a la clave creada\n* Cada clave de API generada da acceso únicamente a la empresa en la que se ha creado\n* No interviene ningún usuario real en la identificación (no se puede ver afectado por tanto porque se elimine su acceso)\n\n### Autorización mediante OAuth\n\nFacturaDirecta utiliza el estándar OAuth2 de autorización con un flujo de tipo `Authorization code flow` para obtener el token necesario para autorizar las llamadas a la API.\n\nPara obtener este token únicamente tendrás que indicar el valor `facturadirecta-api` para `client_id`. No es necesario indicar ningún secreto en el campo `client_secret`.\n\nConsulta la [documentación de OAuth](https://www.oauth.com/oauth2-servers/access-tokens/authorization-code-request/) para más información.\n\nUna vez identificado añade la cabecera `Authorization: Bearer <your_token>` en tus llamadas a la API.\n\nA tener en cuenta con este sistema de identificación:\n\n* Las credenciales obtenidas están ligadas a un usuairo real del programa y por tanto conceden acceso a todas las empresas a las que estes tiene acceso.\n* El acceso se controla tanto por los niveles de acceso concedidos en el momento de hacer la identificación como por los permisos del usuario real utilizado para la identificación (se aplica el más restrictivo)\n* Si se elimina el usuario del programa o de una empresa se elimina el acceso mediante la API\n\n## Versiones\n\nLa versión a consumir de la API se debe indicar con la cabecera `Accept-version`, en caso de no indicarse una versión se accederá a la última disponible. Los cambios en la API se intentarán hacer siempre compatibles hacia atrás y en caso de que no sea posible habrá un cambio en el númeo de versión mayor y/o menor.\n\nVersión actual: `1.0.9`\n"},"paths":{"/profile":{"get":{"tags":["Usuario"],"summary":"Perfil de usuario","description":"Devuelve información de las empresas a las que se tiene acceso con las credenciales utilizadas en la identificación","operationId":"getProfile","parameters":[{"$ref":"#/components/parameters/Accept-Version"}],"responses":{"200":{"description":"Información del usuario","content":{"application/json":{"schema":{"type":"object","title":"ProfileResponse","required":["profile"],"additionalProperties":false,"properties":{"profile":{"$ref":"#/components/schemas/ProfileUser"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":[]}]}},"/{companyId}/contacts":{"get":{"tags":["Contactos"],"summary":"Lista de contactos","description":"Devuelve una lista de contactos","operationId":"getContacts","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"country","in":"query","description":"País de la dirección fiscal del contacto (Formato ISO 3166-1 Alpha-2)","schema":{"type":"string","minLength":2,"maxLength":2}},{"name":"search","in":"query","description":"Búsqueda aproximada por nombre (incluyendo apellidos y \"mostrar cómo\"/\"nombre comercial\"), email y NIF","schema":{"type":"string"}},{"name":"fiscalId","in":"query","description":"NIF o identificador fiscal del contacto","schema":{"type":"string"}},{"name":"vatEU","in":"query","description":"OBSOLETO: Usar fiscalId para buscar por identificador fiscal.\n\nNúmero de IVA intracomunitario del contacto. Se mantiene por compatibilidad.","schema":{"type":"string"}},{"name":"externalId","in":"query","description":"ID externo del contacto","schema":{"type":"string"}},{"name":"phone","in":"query","description":"Teléfono del contacto. Búsqueda parcial, sin distinción entre mayúsculas/minúsculas ni acentos.","schema":{"type":"string"}},{"name":"isClient","in":"query","description":"Contacto con rol de cliente","schema":{"type":"boolean"}},{"name":"isProvider","in":"query","description":"Contacto con rol de proveedor","schema":{"type":"boolean"}},{"name":"isEmployee","in":"query","description":"Contacto con rol de empleado","schema":{"type":"boolean"}},{"name":"allTheseTags","in":"query","description":"Listado de todas las etiquetas que debe contener el contacto para ser incluido en los resultados.\n\nRepite el parámetro tantas veces como etiquetas quieras incluir.","schema":{"type":"array","items":{"type":"string"}}},{"name":"anyOfTheseTags","in":"query","description":"Listado de cualquiera de las etiquetas que debe contener el contacto para ser incluido en los resultados.\n\nRepite el parámetro tantas veces como etiquetas quieras incluir.","schema":{"type":"array","items":{"type":"string"}}},{"name":"hasTags","in":"query","description":"Indicar este parámetro con valor 'true' para recibir solo contactos que no tengan ninguna etiqueta","schema":{"type":"boolean"}},{"$ref":"#/components/parameters/MinCreationDate"},{"$ref":"#/components/parameters/MaxCreationDate"},{"$ref":"#/components/parameters/MinModificationDate"},{"$ref":"#/components/parameters/MaxModificationDate"},{"name":"sortBy","in":"query","description":"Orden de los resultados\n\nPuedes indicar varios parámetros para ordenar por más de un criterio e indicar el caracter - delante par que el orden sea descendente.\n\nPor ejemplo, para ordenar de forma ascendente por el código de país y descendente por fecha de creación utiliza los parámetros 'sortBy=country&sortBy=-creationDate'\n\nEstán disponibles las siguientes opciones de ordenación:\n\n* title: Campo \"Mostrar cómo\" o \"Nombre comercial\"\n* country: Código del país\n* creationDate: Fecha de creación en el sistema\n* modificationDate: Fecha de última modificación en el sistema","schema":{"type":"array","items":{"type":"string","enum":["title","-title","country","-country","creationDate","-creationDate","modificationDate","-modificationDate"]}}},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Offset"},{"name":"related","in":"query","description":"Permite obtener datos adicionales relacionados con el contacto, se pueden indicar tantos valores como sea necesario entre los siguientes:\n  \n* receivePaymentMethod: Devuelve en related.objects el objeto que representa el método de cobro por defecto de este contacto (usado en clientes)\n* sendPaymentMethod: Devuelve en related.objects el objeto que representa el método de pago por defecto de este contacto (usado en proveedores)\n* paymentMethods: Devuelve en related.paymentMethods lista de los ids de todos los métodos de cobro/pago asociados a este cliente y cada uno de ellos en related.objects","schema":{"type":"array","items":{"type":"string","enum":["receivePaymentMethod","sendPaymentMethod","paymentMethods"]}}}],"responses":{"200":{"description":"Lista de contactos","content":{"application/json":{"schema":{"type":"object","title":"GetContactsResponse","required":["pagination","items"],"additionalProperties":false,"properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"items":{"type":"array","title":"Items","items":{"$ref":"#/components/schemas/ContactResponse"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["contacts:read"]},{"apiKey":[]}]},"post":{"tags":["Contactos"],"summary":"Crear contacto","description":"Crea un nuevo contacto","operationId":"createContact","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"requestBody":{"required":true,"description":"Contenido del contacto a crear","content":{"application/json":{"schema":{"type":"object","title":"CreateContactRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/ContactWrite"},"tags":{"$ref":"#/components/schemas/Tags"}}},"examples":{"clientSpainCompany":{"summary":"Ejemplo de un cliente español (empresa)","value":{"content":{"type":"contact","main":{"name":"Cliente Empresa SL","fiscalId":"B12345674","currency":"EUR","country":"ES","address":"Pza Mayor, 4","zipcode":"49004","city":"Zamora","accounts":{"client":"430000","clientCredit":"438000"}}}}},"clientSpainIndividual":{"summary":"Ejemplo de un cliente final español","value":{"content":{"type":"contact","main":{"name":"Pedro","surname":"García Gómez","fiscalId":"82931482Z","currency":"EUR","country":"ES","address":"Av. de Leopoldo Alas Clarín, 2","zipcode":"49018","city":"Zamora","endCustomer":true,"accounts":{"client":"430000","clientCredit":"438000"}}}}},"clientEU":{"summary":"Ejemplo de un cliente intracomunitario","description":"Se debe indicar el identificador fiscal en fiscalId y el tipo fiscalIdType=\"02\" (NIF-IVA intracomunitario).\n\nPara que el programa pueda tratar este contacto como intracomunitario y aplicar los impuestos automáticamente debe indicarse también que el NIF ha sido validado mediante el elemento vatEUValidation.","value":{"content":{"type":"contact","main":{"name":"Google Ireland Limited","fiscalId":"IE6388047V","fiscalIdType":"02","vatEUValidation":{"valid":true,"date":"2018-10-01T21:34:20+02:00"},"currency":"EUR","country":"IE","address":"Gordon House, Barrow Street","city":"Dublin 4","accounts":{"client":"430000","clientCredit":"438000"}}}}},"clientOtherCountry":{"summary":"Ejemplo de un cliente extracomunitario y con moneda distinta de EUR","description":"Se recomienda usar los campos estructurados (address, zipcode, city, region) para la dirección.\n\nSe puede indicar el identificador fiscal del país de origen en fiscalId con fiscalIdType=\"06\" (otro documento probatorio).","value":{"content":{"type":"contact","main":{"name":"Mailgun Technologies","fiscalId":"12-3456789","fiscalIdType":"06","currency":"USD","country":"US","address":"535 Mission St., 14th Floor","zipcode":"94105","city":"San Francisco","region":"CA","accounts":{"client":"430000","clientCredit":"438000"}}}}},"clientEULegacy":{"summary":"OBSOLETO: Cliente intracomunitario con vatEU y fullAddress","description":"Este ejemplo muestra el formato legacy que sigue funcionando por compatibilidad.\n\nPara nuevos contactos, usar el formato con fiscalId, fiscalIdType y campos estructurados de dirección (ver ejemplo clientEU).","value":{"content":{"type":"contact","main":{"name":"Google Ireland Limited","vatEU":"IE6388047V","vatEUValidation":{"valid":true,"date":"2018-10-01T21:34:20+02:00"},"currency":"EUR","country":"IE","fullAddress":"Gordon House\nBarrow Street\nDublin 4\nIreland","accounts":{"client":"430000","clientCredit":"438000"}}}}},"clientOtherCountryLegacy":{"summary":"OBSOLETO: Cliente extracomunitario con fullAddress","description":"Este ejemplo muestra el formato legacy con fullAddress que sigue funcionando por compatibilidad.\n\nPara nuevos contactos, usar el formato con campos estructurados de dirección (ver ejemplo clientOtherCountry).","value":{"content":{"type":"contact","main":{"name":"Mailgun Technologies","currency":"USD","country":"US","fullAddress":"535 Mission St., 14th Floor\nSan Francisco, CA 94105","accounts":{"client":"430000","clientCredit":"438000"}}}}}}}}},"responses":{"200":{"description":"Resultado de la creación del contacto","content":{"application/json":{"schema":{"type":"object","title":"CreateContactResponse","required":["content","tags","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/Contact"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["contacts:write"]},{"apiKey":[]}]}},"/{companyId}/contacts/{id}":{"get":{"tags":["Contactos"],"summary":"Obtener un contacto","description":"Obtiene el contenido de un contacto","operationId":"getContact","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del contacto. Formado por el prefjo \"con_\"  y un uuid v4","required":true,"schema":{"type":"string"}},{"name":"related","in":"query","description":"Permite obtener datos adicionales relacionados con el contacto, se pueden indicar tantos valores como sea necesario entre los siguientes:\n  \n* receivePaymentMethod: Devuelve en related.objects el objeto que representa el método de cobro por defecto de este contacto (usado en clientes)\n* sendPaymentMethod: Devuelve en related.objects el objeto que representa el método de pago por defecto de este contacto (usado en proveedores)\n* paymentMethods: Devuelve en related.paymentMethods lista de los ids de todos los métodos de cobro/pago asociados a este cliente y cada uno de ellos en related.objects","schema":{"type":"array","items":{"type":"string","enum":["receivePaymentMethod","sendPaymentMethod","paymentMethods"]}}}],"responses":{"200":{"description":"Contenido del contacto solicitado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["contacts:read"]},{"apiKey":[]}]},"put":{"tags":["Contactos"],"summary":"Actualizar contacto","description":"Actualiza un contacto existente","operationId":"updateContact","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del contacto. Formado por el prefjo \"con_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Contenido del contacto a actualizar","content":{"application/json":{"schema":{"type":"object","title":"UpdateContactRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/ContactWrite"},"tags":{"$ref":"#/components/schemas/Tags"},"tagsOperation":{"$ref":"#/components/schemas/TagsOperation"}}}}}},"responses":{"200":{"description":"Resultado de la actualización del contacto","content":{"application/json":{"schema":{"type":"object","title":"UpdateContactResponse","required":["content","tags","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/Contact"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["contacts:write"]},{"apiKey":[]}]},"delete":{"tags":["Contactos"],"summary":"Borrar contacto","description":"Elimina un contacto existente","operationId":"deleteContact","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del contacto. Formado por el prefjo \"con_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"$ref":"#/components/responses/DeleteResponse"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["contacts:write"]},{"apiKey":[]}]}},"/{companyId}/contacts/{id}/tags":{"put":{"tags":["Contactos"],"summary":"Actualizar etiquetas de contacto","description":"Actualiza las etiquetas de un contacto existente","operationId":"updateContactTags","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del contacto. Formado por el prefjo \"con_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Especificación de las etiquetas a modificar","content":{"application/json":{"schema":{"type":"object","title":"UpdateContactTagsRequest","required":["tags","tagsOperation"],"properties":{"tags":{"$ref":"#/components/schemas/Tags"},"tagsOperation":{"$ref":"#/components/schemas/TagsOperation"}}}}}},"responses":{"200":{"description":"Resultado de la actualización de las etiquetas del contacto","content":{"application/json":{"schema":{"type":"object","title":"UpdateContactTagsResponse","required":["tags"],"properties":{"tags":{"$ref":"#/components/schemas/Tags"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["contacts:write"]},{"apiKey":[]}]}},"/{companyId}/products":{"get":{"tags":["Productos"],"summary":"Lista de productos","description":"Devuelve una lista de productos","operationId":"getProducts","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"title","in":"query","description":"Búsqueda aproximada por nombre","schema":{"type":"string"}},{"name":"sku","in":"query","description":"Código de producto (SKU)","schema":{"type":"string"}},{"name":"externalId","in":"query","description":"ID externo del producto","schema":{"type":"string"}},{"name":"isSales","in":"query","description":"Producto de venta","schema":{"type":"boolean"}},{"name":"salesDescription","in":"query","description":"Búsqueda aproximada por descripción de venta","schema":{"type":"string"}},{"name":"isPurchases","in":"query","description":"Producto de compra","schema":{"type":"boolean"}},{"name":"purchasesDescription","in":"query","description":"Búsqueda aproximada por descripción de compra","schema":{"type":"string"}},{"name":"isDepreciable","in":"query","description":"Bien de inversión","schema":{"type":"boolean"}},{"$ref":"#/components/parameters/MinCreationDate"},{"$ref":"#/components/parameters/MaxCreationDate"},{"$ref":"#/components/parameters/MinModificationDate"},{"$ref":"#/components/parameters/MaxModificationDate"},{"name":"sortBy","in":"query","description":"Orden de los resultados\n\nPuedes indicar varios parámetros para ordenar por más de un criterio e indicar el caracter - delante par que el orden sea descendente.\n\nPor ejemplo, para ordenar de forma ascendente por el código de producto y descendente por el nombre utiliza los parámetros 'sortBy=sku&sortBy=-title'\n\nEstán disponibles las siguientes opciones de ordenación:\n\n* title: Nombre del producto\n* sku: Código de producto\n* salesDescription: Descripción para la venta del producto\n* purchasesDescription: Descripción para la compra del producto\n* creationDate: Fecha de creación en el sistema\n* modificationDate: Fecha de última modificación en el sistema","schema":{"type":"array","items":{"type":"string","enum":["title","-title","sku","-sku","salesDescription","-salesDescription","purchasesDescription","-purchasesDescription","creationDate","-creationDate","modificationDate","-modificationDate"]}}},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Offset"}],"responses":{"200":{"description":"Lista de productos","content":{"application/json":{"schema":{"type":"object","title":"GetProductsResponse","required":["pagination","items"],"additionalProperties":false,"properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"items":{"type":"array","title":"Items","items":{"type":"object","title":"Item","required":["content","creationDate","modificationDate"],"additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Product"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["products:read"]},{"apiKey":[]}]},"post":{"tags":["Productos"],"summary":"Crear producto","description":"Crea un nuevo producto","operationId":"createProduct","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"requestBody":{"required":true,"description":"Contenido del producto a crear","content":{"application/json":{"schema":{"type":"object","title":"CreateProductRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/ProductWrite"}}},"examples":{"sales":{"summary":"Producto de venta","value":{"content":{"type":"product","main":{"sku":"PV001","name":"Producto 001","currency":"EUR","sales":{"price":125,"description":"Descripción del producto 001 que aparecerá en los documentos cuando se seleccione","tax":["S_IVA_21"],"account":"700000"}}}}},"purchases":{"summary":"Producto de compra","value":{"content":{"type":"product","main":{"sku":"PC001","name":"Producto comprado 001","currency":"EUR","purchases":{"price":125,"description":"Descripción del producto de compra 001 que aparecerá en los documentos cuando se seleccione","tax":["P_IVA_21_BC"],"account":"600000"}}}}},"salesAndPurchases":{"summary":"Producto de compra y venta","value":{"content":{"type":"product","main":{"sku":"PCV009","name":"Producto 009","currency":"EUR","sales":{"price":125,"description":"Descripción del producto en los documentos de venta","tax":["S_IVA_21"],"account":"700000"},"purchases":{"price":75,"description":"Descripción del producto en los documentos de compra","tax":["P_IVA_21_BC"],"account":"600000"}}}}}}}}},"responses":{"200":{"description":"Resultado de la creación del producto","content":{"application/json":{"schema":{"type":"object","title":"CreateProductResponse","required":["content","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/Product"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["products:write"]},{"apiKey":[]}]}},"/{companyId}/products/{id}":{"get":{"tags":["Productos"],"summary":"Obtener un producto","description":"Obtiene el contenido de un producto","operationId":"getProduct","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del product. Formado por el prefjo \"pro_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Contenido del producto solicitado","content":{"application/json":{"schema":{"type":"object","title":"GetProductResponse","required":["content","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/Product"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["products:read"]},{"apiKey":[]}]},"put":{"tags":["Productos"],"summary":"Actualizar producto","description":"Actualiza un producto existente","operationId":"updateProduct","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del product. Formado por el prefjo \"pro_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Contenido del producto a actualizar","content":{"application/json":{"schema":{"type":"object","title":"UpdateProductRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/ProductWrite"}}}}}},"responses":{"200":{"description":"Resultado de la actualización del producto","content":{"application/json":{"schema":{"type":"object","title":"UpdateProductResponse","required":["content","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/Product"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["products:write"]},{"apiKey":[]}]},"delete":{"tags":["Productos"],"summary":"Borrar producto","description":"Elimina un producto existente","operationId":"deleteProduct","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del product. Formado por el prefjo \"pro_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"$ref":"#/components/responses/DeleteResponse"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["products:write"]},{"apiKey":[]}]}},"/{companyId}/invoices":{"get":{"tags":["Facturas de venta"],"summary":"Lista de facturas","description":"Devuelve una lista de facturas","operationId":"getInvoices","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"minDate","in":"query","description":"Fecha mínima de la factura en formato YYYY-MM-DD.\n\nSe incluirán en los resultados facturas con fecha mayor o igual al valor indicado","schema":{"type":"string","format":"date"}},{"name":"maxDate","in":"query","description":"Fecha máxima de la factura en formato YYYY-MM-DD.\n\nSe incluirán en los resultados facturas con fecha menor o igual al valor indicado","schema":{"type":"string","format":"date"}},{"name":"series","in":"query","description":"Serie de la factura sin aplicar posibles formatos de año (\\#\\# ó \\#\\#\\#\\#)","schema":{"type":"string"}},{"name":"formattedSeries","in":"query","description":"Serie de la factura","schema":{"type":"string"}},{"name":"minNumber","in":"query","description":"Número secuencial mínimo de la factura.\n            \nSe incluirán en los resultados facturas con número secuencial mayor o igual al valor indicado","schema":{"type":"integer"}},{"name":"maxNumber","in":"query","description":"Número secuencial máximo de la factura.\n            \nSe incluirán en los resultados facturas con número secuencial menor o igual al valor indicado","schema":{"type":"integer"}},{"name":"state","in":"query","description":"Estado de la factura","schema":{"type":"array","items":{"type":"string","enum":["draft","pending","overdue","paid","overpaid","voided"]}}},{"name":"contact","in":"query","description":"Cliente de la factura","schema":{"type":"array","items":{"type":"string"}}},{"name":"hasContact","in":"query","description":"Factura con contacto, utiliza el valor 'false' para obtener las facturas simplificadas","schema":{"type":"boolean"}},{"name":"minTotal","in":"query","description":"Importe total mínimo de la factura","schema":{"type":"number"}},{"name":"maxTotal","in":"query","description":"Importe total máxima de la factura","schema":{"type":"number"}},{"name":"currency","in":"query","description":"Moneda de la factura (Formato ISO 4217)","schema":{"type":"string","minLength":3,"maxLength":3}},{"name":"draft","in":"query","description":"Comportamiento de las facturas provisionales. Si no se indica nada se incluirán solo las facturas definitivas.\n\n* only: Se incluirán solo las facturas provisionales\n* all: Se incluirán todas las facturas (definitivas y provisionales)","schema":{"type":"string","enum":["only","all"]}},{"name":"country","in":"query","description":"País de la dirección de facturación (Formato ISO 3166-1 Alpha-2)","schema":{"type":"string","minLength":2,"maxLength":2}},{"name":"emails","in":"query","description":"Búsqueda parcial en los emails del documento (campo main.emails).\n\nLa búsqueda no es por coincidencia exacta, sino que realiza una búsqueda parcial insensible a mayúsculas/minúsculas y acentos. Cada palabra del valor proporcionado se busca de forma independiente y deben coincidir todas (operador AND).\n\nPor ejemplo, si el valor de emails del documento es `\"cliente@empresa.com, admin@empresa.com\"`:\n* `emails=empresa.com` → coincide (búsqueda parcial)\n* `emails=cliente@empresa` → coincide\n* `emails=cliente admin` → coincide (ambas palabras están presentes)\n* `emails=otro@dominio.com` → no coincide","schema":{"type":"string"}},{"name":"allTheseTags","in":"query","description":"Listado de todas las etiquetas que debe contener la factura para ser incluida en los resultados.\n      \nRepite el parámetro tantas veces como etiquetas quieras incluir.","schema":{"type":"array","items":{"type":"string"}}},{"name":"anyOfTheseTags","in":"query","description":"Listado de cualquiera de las etiquetas que debe contener la factura para ser incluida en los resultados.\n      \nRepite el parámetro tantas veces como etiquetas quieras incluir.","schema":{"type":"array","items":{"type":"string"}}},{"name":"hasTags","in":"query","description":"Indicar este parámetro con valor 'true' para recibir solo facturas que no tengan ninguna etiqueta","schema":{"type":"boolean"}},{"$ref":"#/components/parameters/MinCreationDate"},{"$ref":"#/components/parameters/MaxCreationDate"},{"$ref":"#/components/parameters/MinModificationDate"},{"$ref":"#/components/parameters/MaxModificationDate"},{"name":"sortBy","in":"query","description":"Orden de los resultados\n\nPuedes indicar varios parámetros para ordenar por más de un criterio e indicar el caracter - delante par que el orden sea descendente.\n\nPor ejemplo, para ordenar de forma descendente por fecha y luego por moneda utiliza los parámetros 'sortBy=-date&sortBy=currency'\n\nEstán disponibles las siguientes opciones de ordenación:\n\n* date: Fecha de factura\n* series: Serie de la factura sin aplicar posibles formatos de año (\\#\\# ó \\#\\#\\#\\#)\n* formattedSeries: Serie de la factura\n* number: Número secuencial mínimo de la factura \n* total: Importe total de la factura\n* currency: Moneda de la factura\n* country: País de la dirección fiscal de la factura\n* creationDate: Fecha de creación en el sistema\n* modificationDate: Fecha de última modificación en el sistema","schema":{"type":"array","items":{"type":"string","enum":["date","-date","series","-series","formattedSeries","-formattedSeries","number","-number","total","-total","currency","-currency","country","-country","creationDate","-creationDate","modificationDate","-modificationDate"]}}},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Offset"},{"name":"related","in":"query","description":"Permite obtener datos adicionales relacionados con la factura, se pueden indicar tantos valores como sea necesario entre los siguientes:\n\n* taxIds: Devuelve en related.objects detalles de las definiciones de los impuestos incluidos en la factura\n* balance: Devuelve en related.balance detalle del saldo pendiente de la factura\n* state: Devuelve en related.state el estado de la factura (draft, pending, overdue, paid, overpaid, voided)\n* journal: Devuelve en related.journal los apuntes contables que afectan al saldo de la factura (mismo shape que `GET /journal?document={id}`, incluyendo `tra_` asientos contables y `pay_` remesas SEPA)","schema":{"type":"array","items":{"type":"string","enum":["taxIds","balance","state","journal"]}}}],"responses":{"200":{"description":"Lista de facturas","content":{"application/json":{"schema":{"type":"object","title":"GetInvoicesResponse","required":["pagination","items"],"additionalProperties":false,"properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"items":{"type":"array","title":"Items","items":{"$ref":"#/components/schemas/InvoiceResponse"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["invoices:read"]},{"apiKey":[]}]},"post":{"tags":["Facturas de venta"],"summary":"Crear factura","description":"Crea una nueva factura","operationId":"createInvoice","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"requestBody":{"required":true,"description":"Contenido de la factura a crear","content":{"application/json":{"schema":{"type":"object","title":"CreateInvoiceRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/InvoiceWrite"},"tags":{"$ref":"#/components/schemas/Tags"},"payments":{"$ref":"#/components/schemas/InvoicePaymentsWrite"}}},"examples":{"minimal":{"summary":"Contenido mínimo para crear una factura","value":{"content":{"type":"invoice","main":{"docNumber":{"series":"F"},"contact":"con_10000000-0000-4000-8000-000000000000","currency":"EUR","lines":[{"quantity":1,"unitPrice":100,"tax":["S_IVA_21"],"text":"Descripción del servicio"}]}}}},"taxes":{"summary":"Factura con varios impuestos","value":{"content":{"type":"invoice","main":{"docNumber":{"series":"F"},"contact":"con_10000000-0000-4000-8000-000000000000","currency":"EUR","lines":[{"quantity":1,"unitPrice":100,"tax":["S_IVA_21"],"text":"Producto IVA 21%"},{"quantity":1,"unitPrice":50,"tax":["S_IVA_10"],"text":"Producto IVA 10%"},{"quantity":1,"unitPrice":20,"tax":["S_IVA_4"],"text":"Producto IVA 4%"}]}}}},"irpf":{"summary":"Factura con IRPF","value":{"content":{"type":"invoice","main":{"docNumber":{"series":"F"},"contact":"con_10000000-0000-4000-8000-000000000000","currency":"EUR","lines":[{"quantity":1,"unitPrice":100,"tax":["S_IVA_21","S_IRPF_15"],"text":"Servicios profesionales"}]}}}},"accounting":{"summary":"Factura contabilizada en distintas cuentas","value":{"content":{"type":"invoice","main":{"docNumber":{"series":"F"},"contact":"con_10000000-0000-4000-8000-000000000000","currency":"EUR","lines":[{"quantity":1,"unitPrice":100,"tax":["S_IVA_21"],"text":"Producto estándar","account":"700000"},{"quantity":1,"unitPrice":250,"tax":["S_IVA_21"],"text":"Producto especial contabilizado en la cuenta 700001","account":"700001"}]}}}},"suplidos":{"summary":"Factura con suplidos","value":{"content":{"type":"invoice","main":{"docNumber":{"series":"F"},"contact":"con_10000000-0000-4000-8000-000000000000","currency":"EUR","lines":[{"quantity":1,"unitPrice":100,"tax":["S_IVA_21"],"text":"Servicios profesionales"},{"quantity":1,"unitPrice":50,"tax":["S_SUPLIDOS"],"text":"Suplidos Registro Mercantil","document":"pro_suplido","account":"566000"}]}}}},"taxIncludedPrices":{"summary":"Factura con precios con impuestos incluidos","description":"Con este ejemplo se crea una factura para la venta de 2 productos de 100€ (IVA incluido) y se desglosará correctamente el IVA para que el importe total de la factura sea de 200€","value":{"content":{"type":"invoice","main":{"docNumber":{"series":"F"},"contact":"con_10000000-0000-4000-8000-000000000000","taxIncludedPrices":true,"currency":"EUR","lines":[{"quantity":2,"unitPrice":100,"tax":["S_IVA_21"],"text":"Producto PVP 100€"}]}}}},"paidInvoice":{"summary":"Factura pagada","value":{"content":{"type":"invoice","main":{"docNumber":{"series":"F"},"contact":"con_10000000-0000-4000-8000-000000000000","currency":"EUR","lines":[{"quantity":1,"unitPrice":100,"tax":["S_IVA_21"],"text":"Descripción del servicio"}]}},"payments":[{"bank":"ban_10000000-0000-4000-8000-000000000000"}]}},"paidInvoice2":{"summary":"Factura con varios pagos","description":"Con este ejemplo se crea una factura con fecha 2022-05-01 de importe 100 + 21% de IVA (Total 121€) y se generan dos pagos de 50€ (forzando el importe) con fechas 2022-04-15 y 2022-04-25 y otro por el importe pendiente en la misma fecha de factura (cuando no se indica la fecha en el propio pago este se crea con la fecha de factura)","value":{"content":{"type":"invoice","main":{"docNumber":{"series":"F"},"date":"2022-05-01","contact":"con_10000000-0000-4000-8000-000000000000","currency":"EUR","lines":[{"quantity":1,"unitPrice":100,"tax":["S_IVA_21"],"text":"Descripción del servicio"}]}},"payments":[{"date":"2022-04-15","bank":"ban_10000000-0000-4000-8000-000000000000","amount":50},{"date":"2022-04-25","bank":"ban_10000000-0000-4000-8000-000000000000","amount":50},{"bank":"ban_10000000-0000-4000-8000-000000000000"}]}}}}}},"responses":{"200":{"description":"Resultado de la creación de la factura","content":{"application/json":{"schema":{"type":"object","title":"CreateInvoiceResponse","required":["content","tags","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/Invoice"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["invoices:write"]},{"apiKey":[]}]}},"/{companyId}/invoices/substitution":{"post":{"tags":["Facturas de venta"],"summary":"Crear factura sustitutiva de simplificadas","description":"Crea una factura sustitutiva (F3 en VeriFactu) que consolida varias facturas simplificadas en una única factura completa con un cliente identificado fiscalmente.\n\nEl servidor se encarga de:\n* Copiar las líneas de las facturas simplificadas\n* Validar la consistencia de moneda e impuestos\n* Añadir la nota estándar de sustitución\n* Asignar el tipo F3 para VeriFactu\n\nLas facturas simplificadas indicadas deben cumplir:\n* Ser facturas simplificadas (sin identificación completa del destinatario)\n* No ser facturas externas\n* No estar ya incluidas en otra factura sustitutiva\n* Tener la misma moneda y el mismo valor de taxIncludedPrices","operationId":"createSubstitutionInvoice","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"requestBody":{"required":true,"description":"Datos para crear la factura sustitutiva","content":{"application/json":{"schema":{"type":"object","title":"CreateSubstitutionInvoiceRequest","required":["contact","substitutedInvoices"],"additionalProperties":false,"properties":{"contact":{"type":"string","description":"UUID del contacto con identificación fiscal (con_...)"},"substitutedInvoices":{"type":"array","minItems":1,"items":{"type":"string"},"description":"UUIDs de las facturas simplificadas a sustituir (inv_...)"},"docNumber":{"$ref":"#/components/schemas/DocNumberWrite"},"date":{"type":"string","format":"date","description":"Fecha de la factura sustitutiva en formato YYYY-MM-DD. Si no se indica se usa la fecha actual"},"notes":{"type":"string","description":"Notas adicionales. La nota estándar de sustitución se añade siempre automáticamente"},"internalNotes":{"type":"string","description":"Notas internas, no serán visibles en el documento impreso"},"tags":{"$ref":"#/components/schemas/Tags"}}},"examples":{"basic":{"summary":"Crear factura sustitutiva básica","value":{"contact":"con_10000000-0000-4000-8000-000000000000","substitutedInvoices":["inv_20000000-0000-4000-8000-000000000001","inv_20000000-0000-4000-8000-000000000002"]}},"withOptions":{"summary":"Crear factura sustitutiva con opciones","value":{"contact":"con_10000000-0000-4000-8000-000000000000","substitutedInvoices":["inv_20000000-0000-4000-8000-000000000003"],"docNumber":{"series":"FS"},"date":"2025-01-15","notes":"Sustitución solicitada por el cliente","tags":["sustitutiva"]}}}}}},"responses":{"200":{"description":"Resultado de la creación de la factura sustitutiva","content":{"application/json":{"schema":{"type":"object","title":"CreateSubstitutionInvoiceResponse","required":["content","tags","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/Invoice"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["invoices:write"]},{"apiKey":[]}]}},"/{companyId}/invoices/{id}":{"get":{"tags":["Facturas de venta"],"summary":"Obtener una factura","description":"Obtiene el contenido de una factura","operationId":"getInvoice","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura. Formado por el prefjo \"inv_\"  y un uuid v4","required":true,"schema":{"type":"string"}},{"name":"related","in":"query","description":"Permite obtener datos adicionales relacionados con la factura, se pueden indicar tantos valores como sea necesario entre los siguientes:\n\n* taxIds: Devuelve en related.objects detalles de las definiciones de los impuestos incluidos en la factura\n* balance: Devuelve en related.balance detalle del saldo pendiente de la factura\n* state: Devuelve en related.state el estado de la factura (draft, pending, overdue, paid, overpaid, voided)\n* journal: Devuelve en related.journal los apuntes contables que afectan al saldo de la factura (mismo shape que `GET /journal?document={id}`, incluyendo `tra_` asientos contables y `pay_` remesas SEPA)","schema":{"type":"array","items":{"type":"string","enum":["taxIds","balance","state","journal"]}}}],"responses":{"200":{"description":"Contenido de la factura solicitada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["invoices:read"]},{"apiKey":[]}]},"put":{"tags":["Facturas de venta"],"summary":"Actualizar factura","description":"Actualiza una factura existente","operationId":"updateInvoice","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura. Formado por el prefjo \"inv_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Contenido de la factura a actualizar","content":{"application/json":{"schema":{"type":"object","title":"UpdateInvoiceRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/InvoiceWrite"},"syncContactData":{"description":"Cuando se indica true, sincroniza automáticamente la dirección (address, country, zipcode) y los datos fiscales de la contraparte (counterpart) a partir del contacto indicado en main.contact. Si main.contact es null, elimina la dirección y la contraparte del documento. No modifica los emails, la posición fiscal, la fecha de vencimiento ni la cuenta contable","type":"boolean"},"verifactuOperation":{"type":"object","additionalProperties":false,"properties":{"subsanacion":{"description":"Selecciona esta opción para indicar que estás intentando guardar una factura con una subsanación de VeriFactu. Solo puede usarse con facturas que ya contengan información previa de VeriFactu","type":"boolean","enum":[true]}}},"tags":{"$ref":"#/components/schemas/Tags"},"tagsOperation":{"$ref":"#/components/schemas/TagsOperation"}}}}}},"responses":{"200":{"description":"Resultado de la actualización de la factura","content":{"application/json":{"schema":{"type":"object","title":"UpdateInvoiceResponse","required":["content","tags","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/Invoice"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["invoices:write"]},{"apiKey":[]}]},"delete":{"tags":["Facturas de venta"],"summary":"Borrar factura","description":"Elimina una factura existente","operationId":"deleteInvoice","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura. Formado por el prefjo \"inv_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"$ref":"#/components/responses/DeleteResponse"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["invoices:write"]},{"apiKey":[]}]}},"/{companyId}/invoices/{id}/payments":{"post":{"tags":["Facturas de venta"],"summary":"Crear pagos para una factura","description":"Crear pagos para una factura\n\nLa respuesta es la factura completa actualizada (`InvoicePaymentsWriteResponse`, mismo shape que crear o consultar la factura).\n\nPara obtener directamente en la respuesta los apuntes contables que componen el saldo (incluyendo el recién creado), pasa `related=journal` en el body. Cada apunte trae `id` polimórfico (`tra_<uuid-v4>` para asientos contables directos, `pay_<uuid-v4>` para remesas SEPA), `account`, `debit`, `credit`, `date` y campos de multicurrency cuando aplica. Útil para encadenar el cobro recién registrado con `PUT /{companyId}/statements/{id}/reconciliation` sin un round-trip extra.\n\nAlternativa: `GET /{companyId}/journal?document={id}&related=idAccounting` devuelve los mismos apuntes con más detalle (incluyendo el asiento del propio documento, su `idAccounting` completo y opcionalmente `tags`).","operationId":"createInvoicePayments","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura. Formado por el prefjo \"inv_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Especificación de los pagos a crear","content":{"application/json":{"schema":{"type":"object","title":"CreateInvoicePaymentsRequest","required":["payments"],"properties":{"payments":{"$ref":"#/components/schemas/InvoicePaymentsWrite"},"related":{"type":"array","items":{"type":"string","enum":["taxIds","balance","state","journal"]}}}}}}},"responses":{"200":{"description":"Resultado de la creación de pagos en la factura. Se devuelve la factura completa igual que en la operación de consulta de la misma","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoicePaymentsWriteResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["invoices:write"]},{"apiKey":[]}]}},"/{companyId}/invoices/{id}/tags":{"put":{"tags":["Facturas de venta"],"summary":"Actualizar etiquetas de factura","description":"Actualiza las etiquetas de una factura existente","operationId":"updateInvoiceTags","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura. Formado por el prefjo \"inv_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Especificación de las etiquetas a modificar","content":{"application/json":{"schema":{"type":"object","title":"UpdateInvoiceTagsRequest","required":["tags","tagsOperation"],"properties":{"tags":{"$ref":"#/components/schemas/Tags"},"tagsOperation":{"$ref":"#/components/schemas/TagsOperation"}}}}}},"responses":{"200":{"description":"Resultado de la actualización de las etiquetas de la factura","content":{"application/json":{"schema":{"type":"object","title":"UpdateInvoiceTagsResponse","required":["tags"],"properties":{"tags":{"$ref":"#/components/schemas/Tags"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["invoices:write"]},{"apiKey":[]}]}},"/{companyId}/invoices/{id}/send":{"put":{"tags":["Facturas de venta"],"summary":"Enviar factura por correo electrónico","description":"Envía la factura por correo electrónico con destinatarios, título y contenido obtenidos de su plantilla o bien valores personalizados indicados en la llamada","operationId":"sendInvoice","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura. Formado por el prefjo \"inv_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/SendInvoiceRequest"},"responses":{"200":{"$ref":"#/components/responses/SendInvoiceResponse"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["invoices:write"]},{"apiKey":[]}]}},"/{companyId}/invoices/{id}/pdf":{"put":{"tags":["Facturas de venta"],"summary":"Generar la factura en formato PDF","description":"Solicita la generación del documento en formato PDF. Se devuelve una URL temporal desde la que poder descargar el documento en formato PDF","operationId":"createInvoicePDF","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura. Formado por el prefjo \"inv_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/CreateDocumentPDFRequest"},"responses":{"200":{"$ref":"#/components/responses/GetDocumentPDFResponse"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["invoices:read"]},{"apiKey":[]}]}},"/{companyId}/invoices/{id}/facturae":{"put":{"tags":["Facturas de venta"],"summary":"Generar la factura en formato facturae","description":"Solicita la generación del documento en formato facturae.\n        \nSe devuelve una URL desde la que poder descargar el documento en formato facturae.\n\nEl documento en formato facturae se generará en el momento solo si aún no ha sido generado o si ha habido cambios en el documento original desde la última vez que se creó en el formato indicado.","operationId":"createInvoiceFacturae","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura. Formado por el prefjo \"inv_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"CreateInvoiceFacturaeRequest","required":["version"],"properties":{"version":{"type":"string","enum":["3.2.1"]}}}}}},"responses":{"200":{"description":"Resultado de la petición de obtención de la factura en formato facturae","content":{"application/json":{"schema":{"type":"object","title":"CreateInvoiceFacturaeResponse","required":["url","filename"],"additionalProperties":false,"properties":{"url":{"type":"string","description":"URL desde la que descargar o visualizar el archivo solicitado."},"filename":{"type":"string","description":"Nombre del archivo facturae generado. Este nombre es el que enviará el servidor a través de la cabecera Content-Disposition si se intenta descargar el documento."}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["invoices:read"]},{"apiKey":[]}]}},"/{companyId}/invoices/{id}/attachments":{"post":{"tags":["Facturas de venta"],"summary":"Vincular adjuntos a una factura","description":"Vincula uno o varios uploads previamente creados con `POST /api/{companyId}/uploads` a una factura existente, sin necesidad de reenviar el documento completo.\n\nLos uploads pasan a estado `consumed` y los archivos quedan persistidos en S3 bajo el prefijo de la empresa. Si la factura ya tiene adjuntos, los nuevos se añaden a los existentes (no los sustituyen).\n\nUn documento puede tener un máximo de **10** adjuntos.","operationId":"addInvoiceAttachments","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura. Formado por el prefjo \"inv_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"AddInvoiceAttachmentsRequest","additionalProperties":false,"required":["uploadIds"],"properties":{"uploadIds":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Lista de identificadores de upload (`upl_<uuid>`) creados con POST /api/{companyId}/uploads."}}},"examples":{"default":{"summary":"Vincular dos adjuntos","value":{"uploadIds":["upl_8a2c1234-1234-1234-1234-123456789012","upl_5f9b1234-1234-1234-1234-123456789012"]}}}}}},"responses":{"200":{"description":"Factura con los nuevos adjuntos vinculados","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["invoices:write"]},{"apiKey":[]}]},"get":{"tags":["Facturas de venta"],"summary":"Listar adjuntos de una factura de venta","operationId":"getInvoiceAttachments","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura. Formado por el prefjo \"inv_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de adjuntos de una factura de venta","content":{"application/json":{"schema":{"type":"object","title":"getInvoiceAttachmentsResponse","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["invoices:read"]},{"apiKey":[]}]}},"/{companyId}/invoices/{id}/attachments/{attachmentIndex}":{"delete":{"tags":["Facturas de venta"],"summary":"Eliminar adjunto de una factura de venta","description":"Elimina el adjunto en la posición indicada. Los índices son 0-based. El binario en S3 no se elimina para preservar URLs ya distribuidas.","operationId":"deleteInvoiceAttachment","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura. Formado por el prefjo \"inv_\"  y un uuid v4","required":true,"schema":{"type":"string"}},{"name":"attachmentIndex","in":"path","required":true,"schema":{"type":"integer","minimum":0},"description":"Índice (0-based) del adjunto a eliminar."}],"responses":{"200":{"description":"Adjunto eliminado correctamente","content":{"application/json":{"schema":{"type":"object","title":"deleteInvoiceAttachmentResponse","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["invoices:write"]},{"apiKey":[]}]}},"/{companyId}/recurring/invoices":{"get":{"tags":["Facturas de venta recurrentes"],"summary":"Lista de facturas de venta recurrentes","description":"Devuelve una lista de facturas de venta recurrentes","operationId":"getRecurringInvoices","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"minNextScheduledDate","in":"query","description":"Fecha mínima de la próxima ejecución de la factura en formato YYYY-MM-DD.\n\nSe incluirán en los resultados presupuestos con fecha mayor o igual al valor indicado","schema":{"type":"string","format":"date"}},{"name":"maxNextScheduledDate","in":"query","description":"Fecha máxima de la próxima ejecución de la factura en formato YYYY-MM-DD.\n\nSe incluirán en los resultados presupuestos con fecha menor o igual al valor indicado","schema":{"type":"string","format":"date"}},{"name":"series","in":"query","description":"Serie de la factura recurrente sin aplicar posibles formatos de año (\\#\\# ó \\#\\#\\#\\#)","schema":{"type":"string"}},{"name":"enabled","in":"query","description":"Indica si la factura recurrente está activa.","schema":{"type":"boolean"}},{"name":"freq","in":"query","description":"Unidad de la frecuencia de ejecución","schema":{"type":"string","enum":["yearly","monthly","weekly","daily"]}},{"name":"interval","in":"query","description":"Número de días/semanas/meses/años entre ejecuciones","schema":{"type":"integer","minimum":1}},{"name":"contact","in":"query","description":"Cliente de la factura recurrente","schema":{"type":"array","items":{"type":"string"}}},{"name":"hasContact","in":"query","description":"Factura recurrente con contacto, utiliza el valor 'false' para obtener facturas recurrentes sin contacto asociado","schema":{"type":"boolean"}},{"name":"minTotal","in":"query","description":"Importe total mínimo de la factura recurrente","schema":{"type":"number"}},{"name":"maxTotal","in":"query","description":"Importe total máxima de la factura recurrente","schema":{"type":"number"}},{"name":"currency","in":"query","description":"Moneda de la factura recurrente (Formato ISO 4217)","schema":{"type":"string","minLength":3,"maxLength":3}},{"name":"country","in":"query","description":"País de la dirección de facturación (Formato ISO 3166-1 Alpha-2)","schema":{"type":"string","minLength":2,"maxLength":2}},{"name":"allTheseTags","in":"query","description":"Listado de todas las etiquetas que debe contener la factura  recurrentepara ser incluida en los resultados.\n      \nRepite el parámetro tantas veces como etiquetas quieras incluir.","schema":{"type":"array","items":{"type":"string"}}},{"name":"anyOfTheseTags","in":"query","description":"Listado de cualquiera de las etiquetas que debe contener la factura  recurrentepara ser incluida en los resultados.\n      \nRepite el parámetro tantas veces como etiquetas quieras incluir.","schema":{"type":"array","items":{"type":"string"}}},{"name":"hasTags","in":"query","description":"Indicar este parámetro con valor 'true' para recibir solo facturas  recurrentesque no tengan ninguna etiqueta","schema":{"type":"boolean"}},{"$ref":"#/components/parameters/MinCreationDate"},{"$ref":"#/components/parameters/MaxCreationDate"},{"$ref":"#/components/parameters/MinModificationDate"},{"$ref":"#/components/parameters/MaxModificationDate"},{"name":"sortBy","in":"query","description":"Orden de los resultados\n\nPuedes indicar varios parámetros para ordenar por más de un criterio e indicar el caracter - delante par que el orden sea descendente.\n\nPor ejemplo, para ordenar de forma descendente por fecha y luego por moneda utiliza los parámetros 'sortBy=-series&sortBy=currency'\n\nEstán disponibles las siguientes opciones de ordenación:\n\n* nextScheduledTime: Fecha programada de próxima ejecución\n* series: Serie de la factura recurrente sin aplicar posibles formatos de año (\\#\\# ó \\#\\#\\#\\#)\n* total: Importe total de la factura recurrente\n* currency: Moneda de la factura recurrente\n* country: País de la dirección fiscal de la factura recurrente\n* creationDate: Fecha de creación en el sistema\n* modificationDate: Fecha de última modificación en el sistema","schema":{"type":"array","items":{"type":"string","enum":["nextScheduledTime","-nextScheduledTime","series","-series","total","-total","currency","-currency","country","-country","creationDate","-creationDate","modificationDate","-modificationDate"]}}},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Offset"},{"name":"related","in":"query","description":"Permite obtener datos adicionales relacionados con la factura recurrente, se pueden indicar tantos valores como sea necesario entre los siguientes:\n  \n* nextScheduledTime: Devuelve la fecha y hora prevista de próxima ejecución de la factura recurrente\n* upcomingSceheduledTimes: Devuelve un máximo de las próximas 5 fechas de ejecución programadas de la factura\n* taxIds: Devuelve en related.objects detalles de las definiciones de los impuestos incluidos en la factura recurrente","schema":{"type":"array","items":{"type":"string","enum":["taxIds","nextScheduledTime","upcomingSceheduledTimes"]}}}],"responses":{"200":{"description":"Lista de facturas de venta recurrentes","content":{"application/json":{"schema":{"type":"object","title":"GetRecurringInvoicesResponse","required":["pagination","items"],"additionalProperties":false,"properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"items":{"type":"array","title":"Items","items":{"$ref":"#/components/schemas/RecurringInvoiceResponse"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["recurring:read","invoices:read"]},{"apiKey":[]}]},"post":{"tags":["Facturas de venta recurrentes"],"summary":"Crea factura de venta recurrente","description":"Crea una nueva factura de venta recurrente","operationId":"createRecurringInvoice","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"requestBody":{"required":true,"description":"Contenido de la factura recurrente a crear","content":{"application/json":{"schema":{"type":"object","title":"CreateRecurringInvoiceRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/RecurringInvoiceWrite"},"tags":{"$ref":"#/components/schemas/Tags"}}},"examples":{"minimal":{"summary":"Contenido mínimo para crear una factura de venta recurrente","description":"Ejemplo para crear una factura recurrente que se ejecutará anual que se ejecutará 2 años a partir del año 2040 los días 10 de enero","value":{"content":{"type":"automation","main":{"title":"Ejemplo factura recurrente","enabled":true,"trigger":{"type":"recurring","rrule":{"interval":1,"freq":"yearly","bymonthday":10,"bymonth":1,"dtstart":"2040-01-01T06:00:00.000Z","until":"2042-01-02T06:00:00.000Z"}},"action":{"type":"createDocument","template":{"type":"invoice","main":{"docNumber":{"series":"FP"},"contact":"con_10000000-0000-4000-8000-000000000000","currency":"EUR","lines":[{"quantity":1,"unitPrice":100,"tax":["S_IVA_21"],"text":"Descripción del servicio"}]}}}}}}}}}}},"responses":{"200":{"description":"Resultado de la creación del presupuesto","content":{"application/json":{"schema":{"type":"object","title":"CreateRecurringInvoiceResponse","required":["content","tags","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/RecurringInvoice"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["recurring:write","invoices:write"]},{"apiKey":[]}]}},"/{companyId}/recurring/invoices/{id}":{"get":{"tags":["Facturas de venta recurrentes"],"summary":"Obtener una factura de venta recurrente","description":"Obtiene el contenido de una factura de venta recurrente","operationId":"getRecurringInvoice","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura recurrente. Formado por el prefjo \"aut_\"  y un uuid v4","required":true,"schema":{"type":"string"}},{"name":"related","in":"query","description":"Permite obtener datos adicionales relacionados con la factura recurrente, se pueden indicar tantos valores como sea necesario entre los siguientes:\n  \n* nextScheduledTime: Devuelve la fecha y hora prevista de próxima ejecución de la factura recurrente\n* upcomingSceheduledTimes: Devuelve un máximo de las próximas 5 fechas de ejecución programadas de la factura\n* taxIds: Devuelve en related.objects detalles de las definiciones de los impuestos incluidos en la factura recurrente","schema":{"type":"array","items":{"type":"string","enum":["taxIds","nextScheduledTime","upcomingSceheduledTimes"]}}}],"responses":{"200":{"description":"Contenido de la factura recurrente solicitada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecurringInvoiceResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["recurring:read","invoices:read"]},{"apiKey":[]}]},"put":{"tags":["Facturas de venta recurrentes"],"summary":"Actualizar factura recurrente","description":"Actualiza una factura recurrente existente","operationId":"updateRecurringInvoice","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura recurrente. Formado por el prefjo \"aut_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Contenido de la factura recurrente a actualizar","content":{"application/json":{"schema":{"type":"object","title":"UpdateRecurringInvoiceRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/RecurringInvoiceWrite"},"syncContactData":{"description":"Cuando se indica true, sincroniza automáticamente la dirección (address, country, zipcode) y los datos fiscales de la contraparte (counterpart) a partir del contacto indicado en main.contact. Si main.contact es null, elimina la dirección y la contraparte del documento. No modifica los emails, la posición fiscal, la fecha de vencimiento ni la cuenta contable","type":"boolean"},"tags":{"$ref":"#/components/schemas/Tags"},"tagsOperation":{"$ref":"#/components/schemas/TagsOperation"}}}}}},"responses":{"200":{"description":"Resultado de la actualización de la factura recurrente","content":{"application/json":{"schema":{"type":"object","title":"UpdateRecurringInvoiceResponse","required":["content","tags","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/RecurringInvoice"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["recurring:write","invoices:write"]},{"apiKey":[]}]},"delete":{"tags":["Facturas de venta recurrentes"],"summary":"Borrar factura de venta recurrente","description":"Elimina una factura de venta recurrente","operationId":"deleteRecurringInvoice","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura recurrente. Formado por el prefjo \"aut_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"$ref":"#/components/responses/DeleteResponse"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["recurring:write","invoices:write"]},{"apiKey":[]}]}},"/{companyId}/recurring/invoices/{id}/tags":{"put":{"tags":["Facturas de venta recurrentes"],"summary":"Actualizar etiquetas de factura de venta recurrente","description":"Actualiza las etiquetas de una factura de venta recurrente existente","operationId":"updateRecurringInvoiceTags","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura recurrente. Formado por el prefjo \"aut_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Especificación de las etiquetas a modificar","content":{"application/json":{"schema":{"type":"object","title":"UpdateRecurringInvoiceTagsRequest","required":["tags","tagsOperation"],"properties":{"tags":{"$ref":"#/components/schemas/Tags"},"tagsOperation":{"$ref":"#/components/schemas/TagsOperation"}}}}}},"responses":{"200":{"description":"Resultado de la actualización de las etiquetas de la factura recurrente","content":{"application/json":{"schema":{"type":"object","title":"UpdateRecurringInvoiceTagsResponse","required":["tags"],"properties":{"tags":{"$ref":"#/components/schemas/Tags"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["recurring:write","invoices:write"]},{"apiKey":[]}]}},"/{companyId}/recurring/invoices/{id}/pdf":{"put":{"tags":["Facturas de venta recurrentes"],"summary":"Generar muestra de la factura de venta recurrente en formato PDF","description":"Solicita la generación de una muestra del documento recurrente en formato PDF. Se devuelve una URL temporal desde la que poder descargar el documento en formato PDF","operationId":"createRecurringInvoicePDF","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura recurrente. Formado por el prefjo \"aut_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/CreateDocumentPDFRequest"},"responses":{"200":{"$ref":"#/components/responses/GetDocumentPDFResponse"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["recurring:read","invoices:read"]},{"apiKey":[]}]}},"/{companyId}/recurring/invoices/{id}/attachments":{"post":{"tags":["Facturas recurrentes"],"summary":"Vincular adjuntos a una factura recurrente","description":"Vincula uno o varios uploads a la plantilla de una factura recurrente. Los adjuntos se aplicarán a las facturas generadas en cada ejecución.\n\nMáximo **10** adjuntos por documento.","operationId":"addRecurringInvoiceAttachments","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura recurrente. Formado por el prefjo \"aut_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"AddRecurringInvoiceAttachmentsRequest","additionalProperties":false,"required":["uploadIds"],"properties":{"uploadIds":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Lista de identificadores de upload (`upl_<uuid>`) creados con POST /api/{companyId}/uploads."}}},"examples":{"default":{"summary":"Vincular un adjunto","value":{"uploadIds":["upl_8a2c1234-1234-1234-1234-123456789012"]}}}}}},"responses":{"200":{"description":"Factura recurrente con los nuevos adjuntos vinculados a su plantilla","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecurringInvoiceResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["recurring:write","invoices:write"]},{"apiKey":[]}]},"get":{"tags":["Facturas de venta recurrentes"],"summary":"Listar adjuntos de una factura recurrente","operationId":"getRecurringInvoiceAttachments","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura recurrente. Formado por el prefjo \"aut_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de adjuntos de una factura recurrente","content":{"application/json":{"schema":{"type":"object","title":"getRecurringInvoiceAttachmentsResponse","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["recurring:read"]},{"oAuth":["invoices:read"]},{"apiKey":[]}]}},"/{companyId}/recurring/invoices/{id}/attachments/{attachmentIndex}":{"delete":{"tags":["Facturas de venta recurrentes"],"summary":"Eliminar adjunto de una factura recurrente","description":"Elimina el adjunto en la posición indicada. Los índices son 0-based. El binario en S3 no se elimina para preservar URLs ya distribuidas.","operationId":"deleteRecurringInvoiceAttachment","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura recurrente. Formado por el prefjo \"aut_\"  y un uuid v4","required":true,"schema":{"type":"string"}},{"name":"attachmentIndex","in":"path","required":true,"schema":{"type":"integer","minimum":0},"description":"Índice (0-based) del adjunto a eliminar."}],"responses":{"200":{"description":"Adjunto eliminado correctamente","content":{"application/json":{"schema":{"type":"object","title":"deleteRecurringInvoiceAttachmentResponse","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["recurring:write"]},{"oAuth":["invoices:write"]},{"apiKey":[]}]}},"/{companyId}/estimates":{"get":{"tags":["Presupuestos"],"summary":"Lista de presupuestos","description":"Devuelve una lista de presupuestos","operationId":"getEstimates","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"minDate","in":"query","description":"Fecha mínima del presupuesto en formato YYYY-MM-DD.\n\nSe incluirán en los resultados presupuestos con fecha mayor o igual al valor indicado","schema":{"type":"string","format":"date"}},{"name":"maxDate","in":"query","description":"Fecha máxima del presupuesto en formato YYYY-MM-DD.\n\nSe incluirán en los resultados presupuestos con fecha menor o igual al valor indicado","schema":{"type":"string","format":"date"}},{"name":"series","in":"query","description":"Serie del presupuesto sin aplicar posibles formatos de año (\\#\\# ó \\#\\#\\#\\#)","schema":{"type":"string"}},{"name":"formattedSeries","in":"query","description":"Serie del presupuesto","schema":{"type":"string"}},{"name":"minNumber","in":"query","description":"Número secuencial mínimo del presupuesto\n            \nSe incluirán en los resultados presupuestos con número secuencial mayor o igual al valor indicado","schema":{"type":"integer"}},{"name":"maxNumber","in":"query","description":"Número secuencial máximo del presupuesto.\n            \nSe incluirán en los resultados presupuestos con número secuencial menor o igual al valor indicado","schema":{"type":"integer"}},{"name":"contact","in":"query","description":"Cliente del presupuesto","schema":{"type":"array","items":{"type":"string"}}},{"name":"hasContact","in":"query","description":"Presupuesto con contacto, utiliza el valor 'false' para obtener presupuestos sin contacto asociado","schema":{"type":"boolean"}},{"name":"minTotal","in":"query","description":"Importe total mínimo del presupuesto","schema":{"type":"number"}},{"name":"maxTotal","in":"query","description":"Importe total máxima del presupuesto","schema":{"type":"number"}},{"name":"currency","in":"query","description":"Moneda del presupuesto (Formato ISO 4217)","schema":{"type":"string","minLength":3,"maxLength":3}},{"name":"country","in":"query","description":"País de la dirección de facturación (Formato ISO 3166-1 Alpha-2)","schema":{"type":"string","minLength":2,"maxLength":2}},{"name":"emails","in":"query","description":"Búsqueda parcial en los emails del documento (campo main.emails).\n\nLa búsqueda no es por coincidencia exacta, sino que realiza una búsqueda parcial insensible a mayúsculas/minúsculas y acentos. Cada palabra del valor proporcionado se busca de forma independiente y deben coincidir todas (operador AND).\n\nPor ejemplo, si el valor de emails del documento es `\"cliente@empresa.com, admin@empresa.com\"`:\n* `emails=empresa.com` → coincide (búsqueda parcial)\n* `emails=cliente@empresa` → coincide\n* `emails=cliente admin` → coincide (ambas palabras están presentes)\n* `emails=otro@dominio.com` → no coincide","schema":{"type":"string"}},{"name":"allTheseTags","in":"query","description":"Listado de todas las etiquetas que debe contener el presupuesto para ser incluido en los resultados.\n\nRepite el parámetro tantas veces como etiquetas quieras incluir.","schema":{"type":"array","items":{"type":"string"}}},{"name":"anyOfTheseTags","in":"query","description":"Listado de cualquiera de las etiquetas que debe contener el presupuesto para ser incluido en los resultados.\n\nRepite el parámetro tantas veces como etiquetas quieras incluir.","schema":{"type":"array","items":{"type":"string"}}},{"name":"hasTags","in":"query","description":"Indicar este parámetro con valor 'true' para recibir solo presupuestos que no tengan ninguna etiqueta","schema":{"type":"boolean"}},{"$ref":"#/components/parameters/MinCreationDate"},{"$ref":"#/components/parameters/MaxCreationDate"},{"$ref":"#/components/parameters/MinModificationDate"},{"$ref":"#/components/parameters/MaxModificationDate"},{"name":"sortBy","in":"query","description":"Orden de los resultados\n\nPuedes indicar varios parámetros para ordenar por más de un criterio e indicar el caracter - delante par que el orden sea descendente.\n\nPor ejemplo, para ordenar de forma descendente por fecha y luego por moneda utiliza los parámetros 'sortBy=-date&sortBy=currency'\n\nEstán disponibles las siguientes opciones de ordenación:\n\n* date: Fecha de presupuesto\n* series: Serie del presupuesto sin aplicar posibles formatos de año (\\#\\# ó \\#\\#\\#\\#)\n* formattedSeries: Serie del presupuesto\n* number: Número secuencial mínimo del presupuesto \n* total: Importe total del presupuesto\n* currency: Moneda del presupuesto\n* country: País de la dirección fiscal del presupuesto\n* creationDate: Fecha de creación en el sistema\n* modificationDate: Fecha de última modificación en el sistema","schema":{"type":"array","items":{"type":"string","enum":["date","-date","series","-series","formattedSeries","-formattedSeries","number","-number","total","-total","currency","-currency","country","-country","creationDate","-creationDate","modificationDate","-modificationDate"]}}},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Offset"},{"name":"related","in":"query","description":"Permite obtener datos adicionales relacionados con el presupuesto, se pueden indicar tantos valores como sea necesario entre los siguientes:\n  \n* taxIds: Devuelve en related.objects detalles de las definiciones de los impuestos incluidos en el presupuesto","schema":{"type":"array","items":{"type":"string","enum":["taxIds"]}}}],"responses":{"200":{"description":"Lista de presupuestos","content":{"application/json":{"schema":{"type":"object","title":"GetEstimatesResponse","required":["pagination","items"],"additionalProperties":false,"properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"items":{"type":"array","title":"Items","items":{"$ref":"#/components/schemas/EstimateResponse"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["estimates:read"]},{"apiKey":[]}]},"post":{"tags":["Presupuestos"],"summary":"Crear presupuesto","description":"Crea un nuevo presupuesto","operationId":"createEstimate","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"requestBody":{"required":true,"description":"Contenido del presupuesto a crear","content":{"application/json":{"schema":{"type":"object","title":"CreateEstimateRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/EstimateWrite"},"tags":{"$ref":"#/components/schemas/Tags"}}},"examples":{"minimal":{"summary":"Contenido mínimo para crear un presupuesto","value":{"content":{"type":"estimate","main":{"docNumber":{"series":"P"},"baseState":"pending","contact":"con_10000000-0000-4000-8000-000000000000","currency":"EUR","lines":[{"quantity":1,"unitPrice":100,"tax":["S_IVA_21"],"text":"Descripción del servicio"}]}}}},"onlyDescription":{"summary":"Sin cantidad ni importe unitario visibles","description":"Ejemplo de creación de un presupuesto que únicamente muestra la descripción de cada línea y el precio total","value":{"content":{"type":"estimate","main":{"showProductColumn":false,"showQuantityColumn":false,"docNumber":{"series":"P"},"baseState":"pending","contact":"con_10000000-0000-4000-8000-000000000000","currency":"EUR","lines":[{"quantity":1,"unitPrice":100,"lineTotal":100,"tax":["S_IVA_21"],"text":"Descripción del servicio"}]}}}}}}}},"responses":{"200":{"description":"Resultado de la creación del presupuesto","content":{"application/json":{"schema":{"type":"object","title":"CreateEstimateResponse","required":["content","tags","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/Estimate"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["estimates:write"]},{"apiKey":[]}]}},"/{companyId}/estimates/{id}":{"get":{"tags":["Presupuestos"],"summary":"Obtener un presupuesto","description":"Obtiene el contenido de un presupuesto","operationId":"getEstimate","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del presupuesto. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}},{"name":"related","in":"query","description":"Permite obtener datos adicionales relacionados con el presupuesto, se pueden indicar tantos valores como sea necesario entre los siguientes:\n  \n* taxIds: Devuelve en related.objects detalles de las definiciones de los impuestos incluidos en el presupuesto","schema":{"type":"array","items":{"type":"string","enum":["taxIds"]}}}],"responses":{"200":{"description":"Contenido del presupuesto solicitado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["estimates:read"]},{"apiKey":[]}]},"put":{"tags":["Presupuestos"],"summary":"Actualizar presupuesto","description":"Actualiza un presupuesto existente","operationId":"updateEstimate","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del presupuesto. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Contenido del presupuesto a actualizar","content":{"application/json":{"schema":{"type":"object","title":"UpdateEstimateRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/EstimateWrite"},"syncContactData":{"description":"Cuando se indica true, sincroniza automáticamente la dirección (address, country, zipcode) y los datos fiscales de la contraparte (counterpart) a partir del contacto indicado en main.contact. Si main.contact es null, elimina la dirección y la contraparte del documento. No modifica los emails, la posición fiscal, la fecha de vencimiento ni la cuenta contable","type":"boolean"},"tags":{"$ref":"#/components/schemas/Tags"},"tagsOperation":{"$ref":"#/components/schemas/TagsOperation"}}}}}},"responses":{"200":{"description":"Resultado de la actualización del presupuesto","content":{"application/json":{"schema":{"type":"object","title":"UpdateEstimateResponse","required":["content","tags","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/Estimate"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["estimates:write"]},{"apiKey":[]}]},"delete":{"tags":["Presupuestos"],"summary":"Borrar presupuesto","description":"Elimina un presupuesto existente","operationId":"deleteEstimate","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del presupuesto. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"$ref":"#/components/responses/DeleteResponse"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["estimates:write"]},{"apiKey":[]}]}},"/{companyId}/estimates/{id}/tags":{"put":{"tags":["Presupuestos"],"summary":"Actualizar etiquetas de presupuesto","description":"Actualiza las etiquetas de un presupuesto existente","operationId":"updateEstimateTags","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del presupuesto. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Especificación de las etiquetas a modificar","content":{"application/json":{"schema":{"type":"object","title":"UpdateEstimateTagsRequest","required":["tags","tagsOperation"],"properties":{"tags":{"$ref":"#/components/schemas/Tags"},"tagsOperation":{"$ref":"#/components/schemas/TagsOperation"}}}}}},"responses":{"200":{"description":"Resultado de la actualización de las etiquetas del presupuesto","content":{"application/json":{"schema":{"type":"object","title":"UpdateEstimateTagsResponse","required":["tags"],"properties":{"tags":{"$ref":"#/components/schemas/Tags"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["estimates:write"]},{"apiKey":[]}]}},"/{companyId}/estimates/{id}/send":{"put":{"tags":["Presupuestos"],"summary":"Enviar presupuesto por correo electrónico","description":"Envía el presupuesto por correo electrónico con destinatarios, título y contenido obtenidos de su plantilla o bien valores personalizados indicados en la llamada","operationId":"sendEstimate","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del presupuesto. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/SendDocumentRequest"},"responses":{"200":{"$ref":"#/components/responses/SendDocumentResponse"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["estimates:write"]},{"apiKey":[]}]}},"/{companyId}/estimates/{id}/pdf":{"put":{"tags":["Presupuestos"],"summary":"Generar el presupuesto en formato PDF","description":"Solicita la generación del documento en formato PDF. Se devuelve una URL temporal desde la que poder descargar el documento en formato PDF","operationId":"createEstimatePDF","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del presupuesto. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/CreateDocumentPDFRequest"},"responses":{"200":{"$ref":"#/components/responses/GetDocumentPDFResponse"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["estimates:read"]},{"apiKey":[]}]}},"/{companyId}/estimates/{id}/attachments":{"post":{"tags":["Presupuestos"],"summary":"Vincular adjuntos a un presupuesto","description":"Vincula uno o varios uploads previamente creados con `POST /api/{companyId}/uploads` a un presupuesto existente. Máximo **10** adjuntos por documento.","operationId":"addEstimateAttachments","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del presupuesto. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"AddEstimateAttachmentsRequest","additionalProperties":false,"required":["uploadIds"],"properties":{"uploadIds":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Lista de identificadores de upload (`upl_<uuid>`) creados con POST /api/{companyId}/uploads."}}},"examples":{"default":{"summary":"Vincular un adjunto","value":{"uploadIds":["upl_8a2c1234-1234-1234-1234-123456789012"]}}}}}},"responses":{"200":{"description":"Presupuesto con los nuevos adjuntos vinculados","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["estimates:write"]},{"apiKey":[]}]},"get":{"tags":["Presupuestos"],"summary":"Listar adjuntos de un presupuesto","operationId":"getEstimateAttachments","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del presupuesto. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de adjuntos de un presupuesto","content":{"application/json":{"schema":{"type":"object","title":"getEstimateAttachmentsResponse","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["estimates:read"]},{"apiKey":[]}]}},"/{companyId}/estimates/{id}/attachments/{attachmentIndex}":{"delete":{"tags":["Presupuestos"],"summary":"Eliminar adjunto de un presupuesto","description":"Elimina el adjunto en la posición indicada. Los índices son 0-based. El binario en S3 no se elimina para preservar URLs ya distribuidas.","operationId":"deleteEstimateAttachment","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del presupuesto. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}},{"name":"attachmentIndex","in":"path","required":true,"schema":{"type":"integer","minimum":0},"description":"Índice (0-based) del adjunto a eliminar."}],"responses":{"200":{"description":"Adjunto eliminado correctamente","content":{"application/json":{"schema":{"type":"object","title":"deleteEstimateAttachmentResponse","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["estimates:write"]},{"apiKey":[]}]}},"/{companyId}/deliveryNotes":{"get":{"tags":["Albaranes"],"summary":"Lista de albaranes","description":"Devuelve una lista de albaranes","operationId":"getDeliveryNotes","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"minDate","in":"query","description":"Fecha mínima del albarán en formato YYYY-MM-DD.\n\nSe incluirán en los resultados albaranes con fecha mayor o igual al valor indicado","schema":{"type":"string","format":"date"}},{"name":"maxDate","in":"query","description":"Fecha máxima del albarán en formato YYYY-MM-DD.\n\nSe incluirán en los resultados albaranes con fecha menor o igual al valor indicado","schema":{"type":"string","format":"date"}},{"name":"series","in":"query","description":"Serie del albarán sin aplicar posibles formatos de año (\\#\\# ó \\#\\#\\#\\#)","schema":{"type":"string"}},{"name":"formattedSeries","in":"query","description":"Serie del albarán","schema":{"type":"string"}},{"name":"minNumber","in":"query","description":"Número secuencial mínimo del albarán\n            \nSe incluirán en los resultados albaranes con número secuencial mayor o igual al valor indicado","schema":{"type":"integer"}},{"name":"maxNumber","in":"query","description":"Número secuencial máximo del albarán.\n            \nSe incluirán en los resultados albaranes con número secuencial menor o igual al valor indicado","schema":{"type":"integer"}},{"name":"contact","in":"query","description":"Cliente del albarán","schema":{"type":"array","items":{"type":"string"}}},{"name":"hasContact","in":"query","description":"Albarán con contacto, utiliza el valor 'false' para obtener albaranes sin contacto asociado","schema":{"type":"boolean"}},{"name":"minTotal","in":"query","description":"Importe total mínimo del albarán","schema":{"type":"number"}},{"name":"maxTotal","in":"query","description":"Importe total máxima del albarán","schema":{"type":"number"}},{"name":"currency","in":"query","description":"Moneda del albarán (Formato ISO 4217)","schema":{"type":"string","minLength":3,"maxLength":3}},{"name":"country","in":"query","description":"País de la dirección de facturación (Formato ISO 3166-1 Alpha-2)","schema":{"type":"string","minLength":2,"maxLength":2}},{"name":"emails","in":"query","description":"Búsqueda parcial en los emails del documento (campo main.emails).\n\nLa búsqueda no es por coincidencia exacta, sino que realiza una búsqueda parcial insensible a mayúsculas/minúsculas y acentos. Cada palabra del valor proporcionado se busca de forma independiente y deben coincidir todas (operador AND).\n\nPor ejemplo, si el valor de emails del documento es `\"cliente@empresa.com, admin@empresa.com\"`:\n* `emails=empresa.com` → coincide (búsqueda parcial)\n* `emails=cliente@empresa` → coincide\n* `emails=cliente admin` → coincide (ambas palabras están presentes)\n* `emails=otro@dominio.com` → no coincide","schema":{"type":"string"}},{"name":"allTheseTags","in":"query","description":"Listado de todas las etiquetas que debe contener el albarán para ser incluido en los resultados.\n\nRepite el parámetro tantas veces como etiquetas quieras incluir.","schema":{"type":"array","items":{"type":"string"}}},{"name":"anyOfTheseTags","in":"query","description":"Listado de cualquiera de las etiquetas que debe contener el albarán para ser incluido en los resultados.\n\nRepite el parámetro tantas veces como etiquetas quieras incluir.","schema":{"type":"array","items":{"type":"string"}}},{"name":"hasTags","in":"query","description":"Indicar este parámetro con valor 'true' para recibir solo albaraanes que no tengan ninguna etiqueta","schema":{"type":"boolean"}},{"$ref":"#/components/parameters/MinCreationDate"},{"$ref":"#/components/parameters/MaxCreationDate"},{"$ref":"#/components/parameters/MinModificationDate"},{"$ref":"#/components/parameters/MaxModificationDate"},{"name":"sortBy","in":"query","description":"Orden de los resultados\n\nPuedes indicar varios parámetros para ordenar por más de un criterio e indicar el caracter - delante par que el orden sea descendente.\n\nPor ejemplo, para ordenar de forma descendente por fecha y luego por moneda utiliza los parámetros 'sortBy=-date&sortBy=currency'\n\nEstán disponibles las siguientes opciones de ordenación:\n\n* date: Fecha de albarán\n* series: Serie del albarán sin aplicar posibles formatos de año (\\#\\# ó \\#\\#\\#\\#)\n* formattedSeries: Serie del albarán\n* number: Número secuencial mínimo del albarán \n* total: Importe total del albarán\n* currency: Moneda del albarán\n* country: País de la dirección fiscal del albarán\n* creationDate: Fecha de creación en el sistema\n* modificationDate: Fecha de última modificación en el sistema","schema":{"type":"array","items":{"type":"string","enum":["date","-date","series","-series","formattedSeries","-formattedSeries","number","-number","total","-total","currency","-currency","country","-country","creationDate","-creationDate","modificationDate","-modificationDate"]}}},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Offset"},{"name":"related","in":"query","description":"Permite obtener datos adicionales relacionados con el albarán, se pueden indicar tantos valores como sea necesario entre los siguientes:\n  \n* taxIds: Devuelve en related.objects detalles de las definiciones de los impuestos incluidos en el albarán","schema":{"type":"array","items":{"type":"string","enum":["taxIds"]}}}],"responses":{"200":{"description":"Lista de albaranes","content":{"application/json":{"schema":{"type":"object","title":"GetDeliveryNotesResponse","required":["pagination","items"],"additionalProperties":false,"properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"items":{"type":"array","title":"Items","items":{"$ref":"#/components/schemas/DeliveryNoteResponse"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["deliveryNotes:read"]},{"apiKey":[]}]},"post":{"tags":["Albaranes"],"summary":"Crear albarán","description":"Crea un nuevo albarán","operationId":"createDeliveryNote","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"requestBody":{"required":true,"description":"Contenido del albarán a crear","content":{"application/json":{"schema":{"type":"object","title":"CreateDeliveryNoteRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/DeliveryNoteWrite"},"tags":{"$ref":"#/components/schemas/Tags"}}},"examples":{"minimal":{"summary":"Contenido mínimo para crear un albarán","value":{"content":{"type":"deliveryNote","main":{"docNumber":{"series":"AL"},"baseState":"pending","contact":"con_10000000-0000-4000-8000-000000000000","currency":"EUR","lines":[{"quantity":1,"unitPrice":50,"tax":["S_IVA_21"],"text":"Descripción del producto 1"}]}}}}}}}},"responses":{"200":{"description":"Resultado de la creación del albarán","content":{"application/json":{"schema":{"type":"object","title":"CreateDeliveryNoteResponse","required":["content","tags","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/DeliveryNote"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["deliveryNotes:write"]},{"apiKey":[]}]}},"/{companyId}/deliveryNotes/{id}":{"get":{"tags":["Albaranes"],"summary":"Obtener un albarán","description":"Obtiene el contenido de un albarán","operationId":"getDeliveryNote","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del albarán. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}},{"name":"related","in":"query","description":"Permite obtener datos adicionales relacionados con el albarán, se pueden indicar tantos valores como sea necesario entre los siguientes:\n  \n* taxIds: Devuelve en related.objects detalles de las definiciones de los impuestos incluidos en el albarán","schema":{"type":"array","items":{"type":"string","enum":["taxIds"]}}}],"responses":{"200":{"description":"Contenido del albarán solicitado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryNoteResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["deliveryNotes:read"]},{"apiKey":[]}]},"put":{"tags":["Albaranes"],"summary":"Actualizar albarán","description":"Actualiza un albarán existente","operationId":"updateDeliveryNote","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del albarán. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Contenido del albarán a crear","content":{"application/json":{"schema":{"type":"object","title":"UpdateDeliveryNoteRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/DeliveryNoteWrite"},"syncContactData":{"description":"Cuando se indica true, sincroniza automáticamente la dirección (address, country, zipcode) y los datos fiscales de la contraparte (counterpart) a partir del contacto indicado en main.contact. Si main.contact es null, elimina la dirección y la contraparte del documento. No modifica los emails, la posición fiscal, la fecha de vencimiento ni la cuenta contable","type":"boolean"},"tags":{"$ref":"#/components/schemas/Tags"},"tagsOperation":{"$ref":"#/components/schemas/TagsOperation"}}}}}},"responses":{"200":{"description":"Resultado de la actualización del albarán","content":{"application/json":{"schema":{"type":"object","title":"UpdateDeliveryNoteResponse","required":["content","tags","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/DeliveryNote"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["deliveryNotes:write"]},{"apiKey":[]}]},"delete":{"tags":["Albaranes"],"summary":"Borrar albarán","description":"Elimina un albarán existente","operationId":"deleteDeliveryNote","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del albarán. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"$ref":"#/components/responses/DeleteResponse"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["deliveryNotes:write"]},{"apiKey":[]}]}},"/{companyId}/deliveryNotes/{id}/tags":{"put":{"tags":["Albaranes"],"summary":"Actualizar etiquetas de albarán","description":"Actualiza las etiquetas de un albarán existente","operationId":"updateDeliveryNoteTags","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del albarán. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Especificación de las etiquetas a modificar","content":{"application/json":{"schema":{"type":"object","title":"UpdateDeliveryNoteTagsRequest","required":["tags","tagsOperation"],"properties":{"tags":{"$ref":"#/components/schemas/Tags"},"tagsOperation":{"$ref":"#/components/schemas/TagsOperation"}}}}}},"responses":{"200":{"description":"Resultado de la actualización de las etiquetas del albarán","content":{"application/json":{"schema":{"type":"object","title":"UpdateDeliveryNoteTagsResponse","required":["tags"],"properties":{"tags":{"$ref":"#/components/schemas/Tags"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["deliveryNotes:write"]},{"apiKey":[]}]}},"/{companyId}/deliveryNotes/{id}/send":{"put":{"tags":["Albaranes"],"summary":"Enviar albarán por correo electrónico","description":"Envía el albarán por correo electrónico con destinatarios, título y contenido obtenidos de su plantilla o bien valores personalizados indicados en la llamada","operationId":"sendDeliveryNote","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del albarán. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/SendDocumentRequest"},"responses":{"200":{"$ref":"#/components/responses/SendDocumentResponse"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["deliveryNotes:write"]},{"apiKey":[]}]}},"/{companyId}/deliveryNotes/{id}/pdf":{"put":{"tags":["Albaranes"],"summary":"Generar el albarán en formato PDF","description":"Solicita la generación del documento en formato PDF. Se devuelve una URL temporal desde la que poder descargar el documento en formato PDF","operationId":"createDeliveryNotePDF","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura. Formado por el prefjo \"inv_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/CreateDocumentPDFRequest"},"responses":{"200":{"$ref":"#/components/responses/GetDocumentPDFResponse"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["deliveryNotes:read"]},{"apiKey":[]}]}},"/{companyId}/deliveryNotes/{id}/attachments":{"post":{"tags":["Albaranes"],"summary":"Vincular adjuntos a un albarán","description":"Vincula uno o varios uploads previamente creados con `POST /api/{companyId}/uploads` a un albarán existente. Máximo **10** adjuntos por documento.","operationId":"addDeliveryNoteAttachments","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del albarán. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"AddDeliveryNoteAttachmentsRequest","additionalProperties":false,"required":["uploadIds"],"properties":{"uploadIds":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Lista de identificadores de upload (`upl_<uuid>`) creados con POST /api/{companyId}/uploads."}}},"examples":{"default":{"summary":"Vincular un adjunto","value":{"uploadIds":["upl_8a2c1234-1234-1234-1234-123456789012"]}}}}}},"responses":{"200":{"description":"Albarán con los nuevos adjuntos vinculados","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryNoteResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["deliveryNotes:write"]},{"apiKey":[]}]},"get":{"tags":["Albaranes"],"summary":"Listar adjuntos de un albarán","operationId":"getDeliveryNoteAttachments","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del albarán. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de adjuntos de un albarán","content":{"application/json":{"schema":{"type":"object","title":"getDeliveryNoteAttachmentsResponse","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["deliveryNotes:read"]},{"apiKey":[]}]}},"/{companyId}/deliveryNotes/{id}/attachments/{attachmentIndex}":{"delete":{"tags":["Albaranes"],"summary":"Eliminar adjunto de un albarán","description":"Elimina el adjunto en la posición indicada. Los índices son 0-based. El binario en S3 no se elimina para preservar URLs ya distribuidas.","operationId":"deleteDeliveryNoteAttachment","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del albarán. Formado por el prefjo \"est_\"  y un uuid v4","required":true,"schema":{"type":"string"}},{"name":"attachmentIndex","in":"path","required":true,"schema":{"type":"integer","minimum":0},"description":"Índice (0-based) del adjunto a eliminar."}],"responses":{"200":{"description":"Adjunto eliminado correctamente","content":{"application/json":{"schema":{"type":"object","title":"deleteDeliveryNoteAttachmentResponse","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["deliveryNotes:write"]},{"apiKey":[]}]}},"/{companyId}/bills":{"get":{"tags":["Facturas de compra y tickets"],"summary":"Lista de facturas de compra o tickets","description":"Devuelve una lista de facturas de compra o tickets","operationId":"getBills","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"minDate","in":"query","description":"Fecha mínima de registro de la factura de compra o ticket en formato YYYY-MM-DD.\n\nSe incluirán en los resultados facturas de compra o tickets con fecha de registro mayor o igual al valor indicado","schema":{"type":"string","format":"date"}},{"name":"maxDate","in":"query","description":"Fecha máxima de registro de la factura de compra o ticket en formato YYYY-MM-DD.\n\nSe incluirán en los resultados facturas de compra o tickets con fecha de registro menor o igual al valor indicado","schema":{"type":"string","format":"date"}},{"name":"contact","in":"query","description":"Proveedor de la factura","schema":{"type":"array","items":{"type":"string"}}},{"name":"hasContact","in":"query","description":"Factura de compra con contacto, utiliza el valor 'false' para obtener las facturas de compra o tickets sin proveedor asociado","schema":{"type":"boolean"}},{"name":"minTotal","in":"query","description":"Importe total mínimo de la factura de compra o ticket","schema":{"type":"number"}},{"name":"maxTotal","in":"query","description":"Importe total máxima de la factura de compra o ticket","schema":{"type":"number"}},{"name":"currency","in":"query","description":"Moneda de la factura de compra o ticket (Formato ISO 4217)","schema":{"type":"string","minLength":3,"maxLength":3}},{"name":"state","in":"query","description":"Estado de la factura de compra o ticket","schema":{"type":"array","items":{"type":"string","enum":["draft","pending","overdue","paid","overpaid","voided"]}}},{"name":"draft","in":"query","description":"Comportamiento de las facturas provisionales. Si no se indica nada se incluirán solo las facturas definitivas.\n\n* only: Se incluirán solo las facturas provisionales\n* all: Se incluirán todas las facturas (definitivas y provisionales)","schema":{"type":"string","enum":["only","all"]}},{"name":"country","in":"query","description":"País de la dirección fiscal del proveedor (Formato ISO 3166-1 Alpha-2)","schema":{"type":"string","minLength":2,"maxLength":2}},{"name":"allTheseTags","in":"query","description":"Listado de todas las etiquetas que debe contener la factura de compra o ticket para ser incluido en los resultados.\n\nRepite el parámetro tantas veces como etiquetas quieras incluir.","schema":{"type":"array","items":{"type":"string"}}},{"name":"anyOfTheseTags","in":"query","description":"Listado de cualquiera de las etiquetas que debe contener la factura de compra o ticket para ser incluido en los resultados.\n\nRepite el parámetro tantas veces como etiquetas quieras incluir.","schema":{"type":"array","items":{"type":"string"}}},{"name":"hasTags","in":"query","description":"Indicar este parámetro con valor 'true' para recibir solo facturas de compra o tickets que no tengan ninguna etiqueta","schema":{"type":"boolean"}},{"$ref":"#/components/parameters/MinCreationDate"},{"$ref":"#/components/parameters/MaxCreationDate"},{"$ref":"#/components/parameters/MinModificationDate"},{"$ref":"#/components/parameters/MaxModificationDate"},{"name":"sortBy","in":"query","description":"Orden de los resultados\n\nPuedes indicar varios parámetros para ordenar por más de un criterio e indicar el caracter - delante par que el orden sea descendente.\n\nPor ejemplo, para ordenar de forma descendente por fecha y luego por moneda utiliza los parámetros 'sortBy=-date&sortBy=currency'\n\nEstán disponibles las siguientes opciones de ordenación:\n\n* date: Fecha de registro de la factura de compra o ticket\n* total: Importe total de la factura de compra o ticket\n* currency: Moneda de la factura de compra o ticket\n* country: País de la dirección fiscal de la factura de compra o ticket\n* creationDate: Fecha de creación en el sistema\n* modificationDate: Fecha de última modificación en el sistema","schema":{"type":"array","items":{"type":"string","enum":["date","-date","total","-total","currency","-currency","country","-country","creationDate","-creationDate","modificationDate","-modificationDate"]}}},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Offset"},{"name":"related","in":"query","description":"Permite obtener datos adicionales relacionados con la factura de compra o ticket, se pueden indicar tantos valores como sea necesario entre los siguientes:\n\n* taxIds: Devuelve en related.objects detalles de las definiciones de los impuestos incluidos en la factura de compra o ticket\n* balance: Devuelve en related.balance detalle del saldo pendiente de la factura de compra o ticket\n* state: Devuelve en related.state el estado de la factura de compra o ticket (draft, pending, overdue, paid, overpaid, voided)\n* journal: Devuelve en related.journal los apuntes contables que afectan al saldo de la factura de compra o ticket (mismo shape que `GET /journal?document={id}`, incluyendo `tra_` asientos contables y `pay_` remesas SEPA)","schema":{"type":"array","items":{"type":"string","enum":["taxIds","balance","state","journal"]}}}],"responses":{"200":{"description":"Lista de facturas de compra o tickets","content":{"application/json":{"schema":{"type":"object","title":"GetBillsResponse","required":["pagination","items"],"additionalProperties":false,"properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"items":{"type":"array","title":"Items","items":{"$ref":"#/components/schemas/BillResponse"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["bills:read"]},{"apiKey":[]}]},"post":{"tags":["Facturas de compra y tickets"],"summary":"Crear factura de compra o ticket","description":"Crea una nueva factura de compra o ticket","operationId":"createBill","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"requestBody":{"required":true,"description":"Contenido de la factura de compra o ticket a crear","content":{"application/json":{"schema":{"type":"object","title":"CreateBillRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/BillWrite"},"tags":{"$ref":"#/components/schemas/Tags"},"fromInbox":{"type":"object","description":"Si se indica, la factura se crea vinculando un item de la bandeja de entrada (`tas_*`). El adjunto del inbox se reutiliza como adjunto de esta factura sin re-upload, y por defecto el item se archiva. Equivale al flujo agente: subir PDF a `/inbox` → escanear → crear bill desde la extracción.","required":["taskId"],"properties":{"taskId":{"type":"string","description":"Identificador del item de la bandeja (`tas_*`)."},"archive":{"type":"boolean","default":true,"description":"Si `true` (defecto) se archiva el inbox tras vincularlo."}}}}},"examples":{"services":{"summary":"Factura de compra de servicios","value":{"content":{"type":"bill","main":{"contact":"con_10000000-0000-4000-8000-000000000000","referenceNumber":"SV-YYYY-001","currency":"EUR","account":"400000","lines":[{"quantity":1,"unitPrice":100,"account":"600000","tax":["P_IVA_21_SV"],"text":"Servicio profesional"}]}}}},"goods":{"summary":"Factura de compra de bienes corrientes","value":{"content":{"type":"bill","main":{"contact":"con_10000000-0000-4000-8000-000000000000","referenceNumber":"BC-YYYY-042","currency":"EUR","account":"400000","lines":[{"quantity":1,"unitPrice":75,"account":"600000","tax":["P_IVA_21_BC"],"text":"Material de oficina"}]}}}},"lineTotal":{"summary":"Factura de compra sin desglose de cantidad (usando lineTotal)","value":{"content":{"type":"bill","main":{"contact":"con_10000000-0000-4000-8000-000000000000","referenceNumber":"LT-YYYY-018","showQuantityColumn":false,"currency":"EUR","account":"400000","lines":[{"lineTotal":250,"account":"629000","tax":["P_IVA_21_SV"],"text":"Cuota mensual servicio informático"},{"lineTotal":35,"account":"628000","tax":["P_IVA_21_SV"],"text":"Suministros"}]}}}},"multipleTaxes":{"summary":"Factura de compra con dos tipos de IVA","value":{"content":{"type":"bill","main":{"contact":"con_10000000-0000-4000-8000-000000000000","referenceNumber":"MT-YYYY-103","currency":"EUR","account":"400000","lines":[{"quantity":1,"unitPrice":100,"account":"600000","tax":["P_IVA_21_SV"],"text":"Servicio de consultoría"},{"quantity":1,"unitPrice":50,"account":"600000","tax":["P_IVA_10_SV"],"text":"Servicio de mantenimiento"}]}}}},"nonDeductible":{"summary":"Factura de compra con IVA soportado no deducible","value":{"content":{"type":"bill","main":{"contact":"con_10000000-0000-4000-8000-000000000000","referenceNumber":"ND-YYYY-007","currency":"EUR","account":"400000","lines":[{"quantity":1,"unitPrice":500,"account":"600000","tax":["P_IVA_21_SV"],"text":"Gasto con IVA no deducible","nonDeductibleTax":true}]}}}},"partiallyDeductible":{"summary":"Factura de compra con IVA parcialmente deducible","value":{"content":{"type":"bill","main":{"contact":"con_10000000-0000-4000-8000-000000000000","referenceNumber":"PD-YYYY-015","currency":"EUR","account":"400000","lines":[{"quantity":1,"unitPrice":50,"account":"600000","tax":["P_IVA_21_SV"],"text":"Parte con IVA deducible"},{"quantity":1,"unitPrice":50,"account":"600000","tax":["P_IVA_21_SV"],"text":"Parte con IVA no deducible","nonDeductibleTax":true}]}}}},"irpf":{"summary":"Factura de compra con retención de IRPF","value":{"content":{"type":"bill","main":{"contact":"con_10000000-0000-4000-8000-000000000000","referenceNumber":"IRPF-YYYY-022","currency":"EUR","account":"400000","fiscalPosition":"aut","lines":[{"quantity":1,"unitPrice":500,"account":"623000","tax":["P_IVA_21_SV","P_IRPF_15"],"text":"Servicios profesionales"}]}}}},"rent":{"summary":"Factura de compra con retención de alquileres","value":{"content":{"type":"bill","main":{"contact":"con_10000000-0000-4000-8000-000000000000","referenceNumber":"ALQ-YYYY-004","currency":"EUR","account":"400000","lines":[{"quantity":1,"unitPrice":1200,"account":"600000","tax":["P_IVA_21_SV","P_IRPF_19_URB"],"text":"Alquiler oficina"}]}}}},"reimbursements":{"summary":"Factura de compra con suplidos","value":{"content":{"type":"bill","main":{"contact":"con_10000000-0000-4000-8000-000000000000","referenceNumber":"SUP-YYYY-009","currency":"EUR","account":"400000","lines":[{"quantity":1,"unitPrice":100,"account":"600000","tax":["P_IVA_21_SV"],"text":"Servicios"},{"quantity":1,"unitPrice":4.5,"account":"566000","tax":["P_SUPLIDOS"],"text":"Tasa (suplidos)"}]}}}},"importGoods":{"summary":"Importación de bienes con IVA pendiente de repercutir en aduana","value":{"content":{"type":"bill","main":{"contact":"con_10000000-0000-4000-8000-000000000000","referenceNumber":"IMP-YYYY-031","currency":"USD","account":"400000","fiscalPosition":"emp_ex","lines":[{"quantity":1,"unitPrice":1000,"account":"600000","tax":["P_IVA_0_BC_PDUA"],"text":"Importación de productos"}]}}}},"customsAgent":{"summary":"Factura de agente de aduanas con IVA de importación","value":{"content":{"type":"bill","main":{"contact":"con_10000000-0000-4000-8000-000000000000","referenceNumber":"ADU-YYYY-031","currency":"EUR","account":"400000","lines":[{"quantity":1,"unitPrice":50,"account":"600000","tax":["P_IVA_21_SV"],"text":"Trámites de aduana"},{"quantity":1,"unitPrice":210,"account":"600000","tax":["P_IVA_21_BC_EX_AT"],"text":"IVA de productos importados por valor de 1.000€"}]}}}},"ticket":{"summary":"Ticket (factura simplificada) sin contacto","value":{"content":{"type":"bill","main":{"subtype":"ticket","contact":null,"referenceNumber":"PKG-YYYY-001","currency":"EUR","account":"400000","lines":[{"lineTotal":4.95,"account":"600000","tax":[],"text":"Parking"}]}}}}}}}},"responses":{"200":{"description":"Resultado de la creación de la factura de compra o ticket","content":{"application/json":{"schema":{"type":"object","title":"CreateBillResponse","required":["content","tags","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/Bill"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["bills:write"]},{"apiKey":[]}]}},"/{companyId}/bills/{id}":{"get":{"tags":["Facturas de compra y tickets"],"summary":"Obtener una factura de compra o ticket","description":"Obtiene el contenido de una factura de compra o ticket","operationId":"getBill","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura de compra o ticket. Formado por el prefjo \"bil_\"  y un uuid v4","required":true,"schema":{"type":"string"}},{"name":"related","in":"query","description":"Permite obtener datos adicionales relacionados con la factura de compra o ticket, se pueden indicar tantos valores como sea necesario entre los siguientes:\n\n* taxIds: Devuelve en related.objects detalles de las definiciones de los impuestos incluidos en la factura de compra o ticket\n* balance: Devuelve en related.balance detalle del saldo pendiente de la factura de compra o ticket\n* state: Devuelve en related.state el estado de la factura de compra o ticket (draft, pending, overdue, paid, overpaid, voided)\n* journal: Devuelve en related.journal los apuntes contables que afectan al saldo de la factura de compra o ticket (mismo shape que `GET /journal?document={id}`, incluyendo `tra_` asientos contables y `pay_` remesas SEPA)","schema":{"type":"array","items":{"type":"string","enum":["taxIds","balance","state","journal"]}}}],"responses":{"200":{"description":"Contenido de la factura de compra o ticket solicitada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["bills:read"]},{"apiKey":[]}]},"put":{"tags":["Facturas de compra y tickets"],"summary":"Actualizar factura de compra o ticket","description":"Actualiza una factura de compra o ticket existente","operationId":"updateBill","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura de compra o ticket. Formado por el prefjo \"bil_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Contenido de la factura de compra o ticket a actualizar","content":{"application/json":{"schema":{"type":"object","title":"UpdateBillRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/BillWrite"},"tags":{"$ref":"#/components/schemas/Tags"},"tagsOperation":{"$ref":"#/components/schemas/TagsOperation"}}}}}},"responses":{"200":{"description":"Resultado de la actualización de la factura de compra o ticket","content":{"application/json":{"schema":{"type":"object","title":"UpdateBillResponse","required":["content","tags","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/Bill"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["bills:write"]},{"apiKey":[]}]},"delete":{"tags":["Facturas de compra y tickets"],"summary":"Borrar factura de compra o ticket","description":"Elimina una factura de compra o ticket existente","operationId":"deleteBill","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura de compra o ticket. Formado por el prefjo \"bil_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"$ref":"#/components/responses/DeleteResponse"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["bills:write"]},{"apiKey":[]}]}},"/{companyId}/bills/{id}/tags":{"put":{"tags":["Facturas de compra y tickets"],"summary":"Actualizar etiquetas de factura de compra o ticket","description":"Actualiza las etiquetas de una factura de compra o ticket existente","operationId":"updateBillTags","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura de compra o ticket. Formado por el prefjo \"bil_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Especificación de las etiquetas a modificar","content":{"application/json":{"schema":{"type":"object","title":"UpdateBillTagsRequest","required":["tags","tagsOperation"],"properties":{"tags":{"$ref":"#/components/schemas/Tags"},"tagsOperation":{"$ref":"#/components/schemas/TagsOperation"}}}}}},"responses":{"200":{"description":"Resultado de la actualización de las etiquetas de la factura de compra o ticket","content":{"application/json":{"schema":{"type":"object","title":"UpdateBillTagsResponse","required":["tags"],"properties":{"tags":{"$ref":"#/components/schemas/Tags"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["bills:write"]},{"apiKey":[]}]}},"/{companyId}/bills/{id}/payments":{"post":{"tags":["Facturas de compra y tickets"],"summary":"Crear pagos para una factura de compra o ticket","description":"Crear pagos para una factura de compra o ticket\n\nLa respuesta es la factura de compra completa actualizada (`BillPaymentsWriteResponse`, mismo shape que crear o consultar la factura).\n\nPara obtener directamente en la respuesta los apuntes contables que componen el saldo (incluyendo el recién creado), pasa `related=journal` en el body. Cada apunte trae `id` polimórfico (`tra_<uuid-v4>` para asientos contables directos, `pay_<uuid-v4>` para remesas SEPA), `account`, `debit`, `credit`, `date` y campos de multicurrency cuando aplica. Útil para encadenar el pago recién registrado con `PUT /{companyId}/statements/{id}/reconciliation` sin un round-trip extra.\n\nAlternativa: `GET /{companyId}/journal?document={id}&related=idAccounting` devuelve los mismos apuntes con más detalle (incluyendo el asiento del propio documento, su `idAccounting` completo y opcionalmente `tags`).","operationId":"createBillPayments","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura de compra o ticket. Formado por el prefjo \"bil_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Especificación de los pagos a crear","content":{"application/json":{"schema":{"type":"object","title":"CreateBillPaymentsRequest","required":["payments"],"properties":{"payments":{"$ref":"#/components/schemas/BillPaymentsWrite"},"related":{"type":"array","items":{"type":"string","enum":["taxIds","balance","state","journal"]}}}}}}},"responses":{"200":{"description":"Resultado de la creación de pagos en la factura de compra o ticket. Se devuelve la factura de compra o ticket completa igual que en la operación de consulta de la misma","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillPaymentsWriteResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["bills:write"]},{"apiKey":[]}]}},"/{companyId}/bills/{id}/attachments":{"post":{"tags":["Facturas de compra y tickets"],"summary":"Vincular adjuntos a una factura de compra o ticket","description":"Vincula uno o varios adjuntos a una factura de compra o ticket existente. Los adjuntos pueden venir de dos fuentes:\n\n* **`uploadIds`**: identificadores de upload creados con `POST /api/{companyId}/uploads`. Los uploads pasan a estado `consumed` y el archivo se promueve a la ruta canónica de la empresa.\n* **`inboxIds`**: identificadores de items de la bandeja de entrada (`tas_*`). Se reutiliza el adjunto que ya tiene el inbox (sin re-upload) y por defecto el item se archiva.\n\nSe puede combinar ambos en la misma llamada. Los nuevos adjuntos se añaden a los existentes (no los sustituyen).\n\nUn documento puede tener un máximo de **10** adjuntos.","operationId":"addBillAttachments","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura de compra o ticket. Formado por el prefjo \"bil_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"AddBillAttachmentsRequest","additionalProperties":false,"description":"Debes indicar al menos uno entre `uploadIds` o `inboxIds`.","properties":{"uploadIds":{"type":"array","items":{"type":"string"},"description":"Lista de identificadores de upload (`upl_<uuid>`) creados con POST /api/{companyId}/uploads."},"inboxIds":{"type":"array","items":{"type":"string"},"description":"Lista de identificadores de items de la bandeja (`tas_<uuid>`). Se reutiliza el adjunto de cada item sin re-upload."},"archiveInbox":{"type":"boolean","default":true,"description":"Si `true` (defecto), los items vinculados vía `inboxIds` se archivan tras vincularlos. Solo aplica a `inboxIds`."}}},"examples":{"default":{"summary":"Vincular un upload","value":{"uploadIds":["upl_8a2c1234-1234-1234-1234-123456789012"]}},"fromInbox":{"summary":"Vincular un item de la bandeja","value":{"inboxIds":["tas_4b5dbc2d-3060-4fd1-92d4-69a054c7d4a2"]}}}}}},"responses":{"200":{"description":"Factura de compra o ticket con los nuevos adjuntos vinculados","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["bills:write"]},{"apiKey":[]}]},"get":{"tags":["Facturas de compra y tickets"],"summary":"Listar adjuntos de una factura de compra o ticket","operationId":"getBillAttachments","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura de compra o ticket. Formado por el prefjo \"bil_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de adjuntos de una factura de compra o ticket","content":{"application/json":{"schema":{"type":"object","title":"getBillAttachmentsResponse","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["bills:read"]},{"apiKey":[]}]}},"/{companyId}/bills/{id}/attachments/{attachmentIndex}":{"delete":{"tags":["Facturas de compra y tickets"],"summary":"Eliminar adjunto de una factura de compra o ticket","description":"Elimina el adjunto en la posición indicada. Los índices son 0-based. El binario en S3 no se elimina para preservar URLs ya distribuidas.","operationId":"deleteBillAttachment","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la factura de compra o ticket. Formado por el prefjo \"bil_\"  y un uuid v4","required":true,"schema":{"type":"string"}},{"name":"attachmentIndex","in":"path","required":true,"schema":{"type":"integer","minimum":0},"description":"Índice (0-based) del adjunto a eliminar."}],"responses":{"200":{"description":"Adjunto eliminado correctamente","content":{"application/json":{"schema":{"type":"object","title":"deleteBillAttachmentResponse","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["bills:write"]},{"apiKey":[]}]}},"/{companyId}/payrolls":{"get":{"tags":["Nóminas"],"summary":"Lista de nóminas","description":"Devuelve una lista de nóminas","operationId":"getPayrolls","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"minDate","in":"query","description":"Fecha mínima de la nómina en formato YYYY-MM-DD.\n\nSe incluirán en los resultados nóminas con fecha mayor o igual al valor indicado","schema":{"type":"string","format":"date"}},{"name":"maxDate","in":"query","description":"Fecha máxima de la nómina en formato YYYY-MM-DD.\n\nSe incluirán en los resultados nóminas con fecha menor o igual al valor indicado","schema":{"type":"string","format":"date"}},{"name":"contact","in":"query","description":"Empleado","schema":{"type":"array","items":{"type":"string"}}},{"name":"minTotal","in":"query","description":"Importe total mínimo de la nómina","schema":{"type":"number"}},{"name":"maxTotal","in":"query","description":"Importe total máxima de la nómina","schema":{"type":"number"}},{"name":"state","in":"query","description":"Estado de la nómina","schema":{"type":"array","items":{"type":"string","enum":["pending","overdue","paid","overpaid"]}}},{"name":"allTheseTags","in":"query","description":"Listado de todas las etiquetas que debe contener la nómina para ser incluido en los resultados.\n\nRepite el parámetro tantas veces como etiquetas quieras incluir.","schema":{"type":"array","items":{"type":"string"}}},{"name":"anyOfTheseTags","in":"query","description":"Listado de cualquiera de las etiquetas que debe contener la nómina para ser incluido en los resultados.\n\nRepite el parámetro tantas veces como etiquetas quieras incluir.","schema":{"type":"array","items":{"type":"string"}}},{"name":"hasTags","in":"query","description":"Indicar este parámetro con valor 'true' para recibir solo nóminas que no tengan ninguna etiqueta","schema":{"type":"boolean"}},{"$ref":"#/components/parameters/MinCreationDate"},{"$ref":"#/components/parameters/MaxCreationDate"},{"$ref":"#/components/parameters/MinModificationDate"},{"$ref":"#/components/parameters/MaxModificationDate"},{"name":"sortBy","in":"query","description":"Orden de los resultados\n\nPuedes indicar varios parámetros para ordenar por más de un criterio e indicar el caracter - delante par que el orden sea descendente.\n\nPor ejemplo, para ordenar de forma descendente por fecha y luego por importe total ascendente utiliza los parámetros 'sortBy=-date&sortBy=total'\n\nEstán disponibles las siguientes opciones de ordenación:\n\n* date: Fecha de factura\n* total: Importe total de la factura\n* creationDate: Fecha de creación en el sistema\n* modificationDate: Fecha de última modificación en el sistema","schema":{"type":"array","items":{"type":"string","enum":["date","-date","total","-total","creationDate","-creationDate","modificationDate","-modificationDate"]}}},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Offset"},{"name":"related","in":"query","description":"Permite obtener datos adicionales relacionados con la nómina, se pueden indicar tantos valores como sea necesario entre los siguientes:\n\n* balance: Devuelve en related.balance detalle del saldo pendiente de la nómina\n* state: Devuelve en related.state el estado de la nómina (pending, overdue, paid, overpaid)\n* journal: Devuelve en related.journal los apuntes contables que afectan al saldo de la nómina (mismo shape que `GET /journal?document={id}`, incluyendo `tra_` asientos contables y `pay_` remesas SEPA)","schema":{"type":"array","items":{"type":"string","enum":["balance","state","journal"]}}}],"responses":{"200":{"description":"Lista de nóminas","content":{"application/json":{"schema":{"type":"object","title":"GetPayrollsResponse","required":["pagination","items"],"additionalProperties":false,"properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"items":{"type":"array","title":"Items","items":{"$ref":"#/components/schemas/PayrollResponse"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["payrolls:read"]},{"apiKey":[]}]},"post":{"tags":["Nóminas"],"summary":"Crear nómina","description":"Crear una nueva nómina","operationId":"createPayroll","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"requestBody":{"required":true,"description":"Contenido de la nómina a crear","content":{"application/json":{"schema":{"type":"object","title":"CreatePayrollRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/PayrollWrite"},"tags":{"$ref":"#/components/schemas/Tags"},"payments":{"$ref":"#/components/schemas/PayrollPaymentsWrite"},"fromInbox":{"type":"object","description":"Si se indica, la nómina se crea vinculando un item de la bandeja de entrada (`tas_*`). El adjunto del inbox se reutiliza como adjunto de esta nómina sin re-upload, y por defecto el item se archiva. Nota: el escáner LLM puede no producir extracción útil para nóminas — el cliente (agente) construye `content` por su cuenta y `fromInbox` solo aporta el binario y la trazabilidad.","required":["taskId"],"properties":{"taskId":{"type":"string","description":"Identificador del item de la bandeja (`tas_*`)."},"archive":{"type":"boolean","default":true,"description":"Si `true` (defecto) se archiva el inbox tras vincularlo."}}}}},"examples":{"minimal":{"summary":"Contenido mínimo para crear una nómina","value":{"content":{"type":"payroll","main":{"date":"2023-05-31","contact":"con_40000000-0000-4000-8000-000000000000","modelo190":{"clavePercepcion":"A"},"lines":[{"type":"debit","label":"Percepción salarial","account":"640000","lineTotal":2000},{"type":"ss_employee","label":"Aportación Seg.Soc. trabajador","account":"476000","base":2000,"lineTotal":120},{"type":"irpf_employee","label":"Retenciones IRPF (Percepciones dinerarias)","account":"475100","base":2000,"lineTotal":240},{"type":"ss_company","label":"Aportaciones Cotización Seg.Soc. Empresa","account":"642000","base":2000,"lineTotal":600}]}}}}}}}},"responses":{"200":{"description":"Resultado de la creación de la nómina","content":{"application/json":{"schema":{"type":"object","title":"CreatePayrollResponse","required":["content","tags","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/Payroll"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["payrolls:write"]},{"apiKey":[]}]}},"/{companyId}/payrolls/{id}":{"get":{"tags":["Nóminas"],"summary":"Obtener una nómina","description":"Obtiene el contenido de una nómina","operationId":"getPayroll","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la nómina. Formado por el prefjo \"par_\"  y un uuid v4","required":true,"schema":{"type":"string"}},{"name":"related","in":"query","description":"Permite obtener datos adicionales relacionados con la nómina, se pueden indicar tantos valores como sea necesario entre los siguientes:\n\n* balance: Devuelve en related.balance detalle del saldo pendiente de la nómina\n* state: Devuelve en related.state el estado de la nómina (pending, overdue, paid, overpaid)\n* journal: Devuelve en related.journal los apuntes contables que afectan al saldo de la nómina (mismo shape que `GET /journal?document={id}`, incluyendo `tra_` asientos contables y `pay_` remesas SEPA)","schema":{"type":"array","items":{"type":"string","enum":["balance","state","journal"]}}}],"responses":{"200":{"description":"Contenido de la nómina solicitada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayrollResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["payrolls:read"]},{"apiKey":[]}]},"put":{"tags":["Nóminas"],"summary":"Actualizar nómina","description":"Actualiza una nómina existente","operationId":"updatePayroll","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la nómina. Formado por el prefjo \"par_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Contenido de la nómina a actualizar","content":{"application/json":{"schema":{"type":"object","title":"UpdatePayrollRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/PayrollWrite"},"tags":{"$ref":"#/components/schemas/Tags"},"tagsOperation":{"$ref":"#/components/schemas/TagsOperation"}}}}}},"responses":{"200":{"description":"Resultado de la actualización de la nómina","content":{"application/json":{"schema":{"type":"object","title":"UpdatePayrollResponse","required":["content","tags","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/Payroll"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["payrolls:write"]},{"apiKey":[]}]},"delete":{"tags":["Nóminas"],"summary":"Borrar nómina","description":"Elimina una nómina existente","operationId":"deletePayroll","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la nómina. Formado por el prefjo \"par_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"$ref":"#/components/responses/DeleteResponse"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["payrolls:write"]},{"apiKey":[]}]}},"/{companyId}/payrolls/{id}/payments":{"post":{"tags":["Nóminas"],"summary":"Crear pagos para una nómina","description":"Crear pagos para una nómina\n\nLa respuesta es la nómina completa actualizada (`PayrollPaymentsWriteResponse`, mismo shape que crear o consultar la nómina).\n\nPara obtener directamente en la respuesta los apuntes contables que componen el saldo (incluyendo el recién creado), pasa `related=journal` en el body. Cada apunte trae `id` polimórfico (`tra_<uuid-v4>` para asientos contables directos, `pay_<uuid-v4>` para remesas SEPA), `account`, `debit`, `credit`, `date` y campos de multicurrency cuando aplica. Útil para encadenar el pago recién registrado con `PUT /{companyId}/statements/{id}/reconciliation` sin un round-trip extra.\n\nAlternativa: `GET /{companyId}/journal?document={id}&related=idAccounting` devuelve los mismos apuntes con más detalle (incluyendo el asiento de la propia nómina, su `idAccounting` completo y opcionalmente `tags`).","operationId":"createPayrollPayments","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la nómina. Formado por el prefjo \"par_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Especificación de los pagos a crear","content":{"application/json":{"schema":{"type":"object","title":"CreatePayrollPaymentsRequest","required":["payments"],"properties":{"payments":{"$ref":"#/components/schemas/PayrollPaymentsWrite"},"related":{"type":"array","items":{"type":"string","enum":["balance","state","journal"]}}}}}}},"responses":{"200":{"description":"Resultado de la creación de pagos en la nómina. Se devuelve la nómina completa igual que en la operación de consulta de la misma","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayrollPaymentsWriteResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["payrolls:write"]},{"apiKey":[]}]}},"/{companyId}/payrolls/{id}/tags":{"put":{"tags":["Nóminas"],"summary":"Actualizar etiquetas de nómina","description":"Actualiza las etiquetas de una nómina existente","operationId":"updatePayrollTags","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la nómina. Formado por el prefjo \"par_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Especificación de las etiquetas a modificar","content":{"application/json":{"schema":{"type":"object","title":"UpdatePayrollTagsRequest","required":["tags","tagsOperation"],"properties":{"tags":{"$ref":"#/components/schemas/Tags"},"tagsOperation":{"$ref":"#/components/schemas/TagsOperation"}}}}}},"responses":{"200":{"description":"Resultado de la actualización de las etiquetas de la nómina","content":{"application/json":{"schema":{"type":"object","title":"UpdatePayrollTagsResponse","required":["tags"],"properties":{"tags":{"$ref":"#/components/schemas/Tags"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["payrolls:write"]},{"apiKey":[]}]}},"/{companyId}/payrolls/{id}/attachments":{"post":{"tags":["Nóminas"],"summary":"Vincular adjuntos a una nómina","description":"Vincula uno o varios adjuntos a una nómina existente. Los adjuntos pueden venir de dos fuentes:\n\n* **`uploadIds`**: identificadores de upload creados con `POST /api/{companyId}/uploads`. Los uploads pasan a estado `consumed` y el archivo se promueve a la ruta canónica de la empresa.\n* **`inboxIds`**: identificadores de items de la bandeja de entrada (`tas_*`). Se reutiliza el adjunto que ya tiene el inbox (sin re-upload) y por defecto el item se archiva.\n\nSe puede combinar ambos en la misma llamada. Los nuevos adjuntos se añaden a los existentes (no los sustituyen).\n\nMáximo **10** adjuntos por documento.","operationId":"addPayrollAttachments","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la nómina. Formado por el prefjo \"par_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"AddPayrollAttachmentsRequest","additionalProperties":false,"description":"Debes indicar al menos uno entre `uploadIds` o `inboxIds`.","properties":{"uploadIds":{"type":"array","items":{"type":"string"},"description":"Lista de identificadores de upload (`upl_<uuid>`) creados con POST /api/{companyId}/uploads."},"inboxIds":{"type":"array","items":{"type":"string"},"description":"Lista de identificadores de items de la bandeja (`tas_<uuid>`). Se reutiliza el adjunto de cada item sin re-upload."},"archiveInbox":{"type":"boolean","default":true,"description":"Si `true` (defecto), los items vinculados vía `inboxIds` se archivan tras vincularlos. Solo aplica a `inboxIds`."}}},"examples":{"default":{"summary":"Vincular un upload","value":{"uploadIds":["upl_8a2c1234-1234-1234-1234-123456789012"]}},"fromInbox":{"summary":"Vincular un item de la bandeja","value":{"inboxIds":["tas_4b5dbc2d-3060-4fd1-92d4-69a054c7d4a2"]}}}}}},"responses":{"200":{"description":"Nómina con los nuevos adjuntos vinculados","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayrollResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["payrolls:write"]},{"apiKey":[]}]},"get":{"tags":["Nóminas"],"summary":"Listar adjuntos de una nómina","operationId":"getPayrollAttachments","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la nómina. Formado por el prefjo \"par_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de adjuntos de una nómina","content":{"application/json":{"schema":{"type":"object","title":"getPayrollAttachmentsResponse","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["payrolls:read"]},{"apiKey":[]}]}},"/{companyId}/payrolls/{id}/attachments/{attachmentIndex}":{"delete":{"tags":["Nóminas"],"summary":"Eliminar adjunto de una nómina","description":"Elimina el adjunto en la posición indicada. Los índices son 0-based. El binario en S3 no se elimina para preservar URLs ya distribuidas.","operationId":"deletePayrollAttachment","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  de la nómina. Formado por el prefjo \"par_\"  y un uuid v4","required":true,"schema":{"type":"string"}},{"name":"attachmentIndex","in":"path","required":true,"schema":{"type":"integer","minimum":0},"description":"Índice (0-based) del adjunto a eliminar."}],"responses":{"200":{"description":"Adjunto eliminado correctamente","content":{"application/json":{"schema":{"type":"object","title":"deletePayrollAttachmentResponse","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["payrolls:write"]},{"apiKey":[]}]}},"/{companyId}/banks":{"get":{"tags":["Bancos"],"summary":"Lista de bancos","description":"Devuelve una lista de los bancos y cuentas de tesorería disponibles en la empresa","operationId":"getBanks","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"currency","in":"query","description":"Moneda del banco (Formato ISO 4217)","schema":{"type":"string","minLength":3,"maxLength":3}},{"$ref":"#/components/parameters/MinCreationDate"},{"$ref":"#/components/parameters/MaxCreationDate"},{"$ref":"#/components/parameters/MinModificationDate"},{"$ref":"#/components/parameters/MaxModificationDate"},{"name":"sortBy","in":"query","description":"Orden de los resultados\n\nPuedes indicar varios parámetros para ordenar por más de un criterio e indicar el caracter - delante par que el orden sea descendente.\n\nPor ejemplo, para ordenar de forma descendente por título y luego por fecha de creación descendente utiliza los parámetros 'sortBy=title&sortBy=-creationDate'\n\nEstán disponibles las siguientes opciones de ordenación:\n\n* title: Título del banco\n* currency: Moneda del banco\n* creationDate: Fecha de creación en el sistema\n* modificationDate: Fecha de última modificación en el sistema","schema":{"type":"array","items":{"type":"string","enum":["title","-title","currency","-currency","creationDate","-creationDate","modificationDate","-modificationDate"]}}},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Offset"}],"responses":{"200":{"description":"Lista de bancos","content":{"application/json":{"schema":{"type":"object","title":"GetBanksResponse","required":["pagination","items"],"additionalProperties":false,"properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"items":{"type":"array","title":"Items","items":{"$ref":"#/components/schemas/BankResponse"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["banks:read"]},{"apiKey":[]}]}},"/{companyId}/statements":{"get":{"tags":["Extractos bancarios"],"summary":"Lista de extractos bancarios","description":"Devuelve una lista de extractos bancarios (movimientos de banco) con sus estados de conciliación.\n\nLos extractos bancarios son los movimientos importados o sincronizados de las cuentas bancarias de la empresa. Cada extracto puede estar en uno de los siguientes estados:\n\n* **pending**: Pendiente de conciliar\n* **reconciled**: Conciliado con un documento contable\n* **ignored**: Marcado como ignorado por el usuario","operationId":"getStatements","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"minDate","in":"query","description":"Fecha mínima de la operación en formato YYYY-MM-DD","schema":{"type":"string","format":"date"}},{"name":"maxDate","in":"query","description":"Fecha máxima de la operación en formato YYYY-MM-DD","schema":{"type":"string","format":"date"}},{"name":"bank","in":"query","description":"Identificador del banco para filtrar los extractos","schema":{"type":"string"}},{"name":"currency","in":"query","description":"Moneda del extracto bancario (Formato ISO 4217)","schema":{"type":"string","minLength":3,"maxLength":3}},{"name":"minAmount","in":"query","description":"Importe mínimo del movimiento","schema":{"type":"number"}},{"name":"maxAmount","in":"query","description":"Importe máximo del movimiento","schema":{"type":"number"}},{"name":"state","in":"query","description":"Estado de conciliación del extracto:\n* pending: Pendiente de conciliar\n* reconciled: Conciliado\n* ignored: Ignorado","schema":{"type":"string","enum":["pending","reconciled","ignored"]}},{"$ref":"#/components/parameters/MinCreationDate"},{"$ref":"#/components/parameters/MaxCreationDate"},{"$ref":"#/components/parameters/MinModificationDate"},{"$ref":"#/components/parameters/MaxModificationDate"},{"name":"sortBy","in":"query","description":"Orden de los resultados.\n\nPuedes indicar varios parámetros para ordenar por más de un criterio e indicar el caracter - delante para que el orden sea descendente.\n\nPor ejemplo, para ordenar por fecha descendente y luego por importe: 'sortBy=-date&sortBy=amount'\n\nOpciones disponibles:\n\n* date: Fecha de la operación\n* amount: Importe del movimiento\n* currency: Moneda del movimiento\n* state: Estado de conciliación\n* creationDate: Fecha de creación en el sistema\n* modificationDate: Fecha de última modificación en el sistema","schema":{"type":"array","items":{"type":"string","enum":["date","-date","amount","-amount","currency","-currency","state","-state","creationDate","-creationDate","modificationDate","-modificationDate"]}}},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Offset"}],"responses":{"200":{"description":"Lista de extractos bancarios","content":{"application/json":{"schema":{"type":"object","title":"GetStatementsResponse","required":["pagination","items"],"additionalProperties":false,"properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"items":{"type":"array","title":"Items","items":{"$ref":"#/components/schemas/StatementListItem"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["statements:read"]},{"apiKey":[]}]}},"/{companyId}/statements/{id}":{"get":{"tags":["Extractos bancarios"],"summary":"Obtener un extracto bancario","description":"Obtiene el detalle de un extracto bancario","operationId":"getStatement","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del extracto bancario. Formado por el prefijo \"sta_\" y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Detalle del extracto bancario","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatementResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["statements:read"]},{"apiKey":[]}]}},"/{companyId}/statements/{id}/reconciliation":{"post":{"tags":["Extractos bancarios"],"summary":"Conciliar extracto bancario creando un nuevo asiento contable","description":"Concilia un extracto bancario creando un nuevo asiento contable (transaction) en la misma operación.\n\nSe debe indicar al menos un apunte contable en `lines` con el que se creará el asiento. El asiento se crea con la fecha del extracto bancario.\n\nSi el extracto ya está conciliado con un asiento activo, la operación fallará indicando el identificador del asiento existente. Si el asiento previamente conciliado está archivado, se permite re-conciliar.","operationId":"reconcileStatementWithNewTransaction","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del extracto bancario. Formado por el prefijo \"sta_\" y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Datos para la creación del asiento contable","content":{"application/json":{"schema":{"type":"object","title":"ReconcileWithNewTransactionRequest","required":["lines"],"additionalProperties":false,"properties":{"lines":{"type":"array","description":"Apuntes contables del asiento a crear","items":{"$ref":"#/components/schemas/AccountingLine"},"minItems":1},"title":{"type":"string","description":"Título del asiento contable. Si no se indica, se usa el concepto del extracto bancario"}}},"examples":{"reconcileReceive":{"summary":"Conciliar un ingreso (cobro de factura de venta)","value":{"lines":[{"account":"572000","document":"ban_10000000-0000-4000-8000-000000000000","debit":121,"credit":null,"currencyDebit":121,"currencyCredit":null,"currency":"EUR"},{"account":"430000","document":"inv_10000000-0000-4000-8000-000000000000","debit":null,"credit":121,"currencyDebit":null,"currencyCredit":121,"currency":"EUR"}]}},"reconcileSend":{"summary":"Conciliar un cargo (pago de factura de compra)","value":{"lines":[{"account":"572000","document":"ban_10000000-0000-4000-8000-000000000000","debit":null,"credit":121,"currencyDebit":null,"currencyCredit":121,"currency":"EUR"},{"account":"400000","document":"bil_10000000-0000-4000-8000-000000000000","debit":121,"credit":null,"currencyDebit":121,"currencyCredit":null,"currency":"EUR"}]}}}}}},"responses":{"200":{"description":"Resultado de la conciliación con el asiento contable creado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReconcileWithNewTransactionResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["statements:write"]},{"apiKey":[]}]},"put":{"tags":["Extractos bancarios"],"summary":"Conciliar extracto bancario con asiento contable existente","description":"Marca un extracto bancario como conciliado vinculándolo con un asiento contable (transaction) existente.\n\nLa conciliación vincula el movimiento bancario con el asiento contable indicado en `transactionId`. Para deshacer la conciliación utiliza la operación DELETE sobre este mismo recurso.","operationId":"reconcileStatement","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del extracto bancario. Formado por el prefijo \"sta_\" y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Datos de la conciliación","content":{"application/json":{"schema":{"type":"object","title":"ReconcileStatementRequest","required":["transactionId"],"additionalProperties":false,"properties":{"transactionId":{"type":"string","description":"Identificador del asiento contable (transaction) con el que conciliar el extracto bancario"}}},"examples":{"reconcileWithTransaction":{"summary":"Conciliar con un asiento contable de cobro","value":{"transactionId":"tra_30000000-0000-4000-8000-000000000000"}}}}}},"responses":{"200":{"description":"Resultado de la conciliación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReconcileStatementResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["statements:write"]},{"apiKey":[]}]},"delete":{"tags":["Extractos bancarios"],"summary":"Desconciliar extracto bancario","description":"Elimina la conciliación de un extracto bancario, devolviendo su estado a pendiente.\n\nSi se indica el parámetro `deleteTransaction=true`, además de desconciliar se archiva el asiento contable (transaction) asociado. En este caso el extracto debe estar conciliado con un asiento activo (no archivado) y el asiento no debe estar bloqueado por la fecha de cierre contable.","operationId":"unreconcileStatement","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del extracto bancario. Formado por el prefijo \"sta_\" y un uuid v4","required":true,"schema":{"type":"string"}},{"name":"deleteTransaction","in":"query","description":"Si es `true`, además de desconciliar se archiva el asiento contable asociado","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Resultado de la desconciliación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnreconcileStatementResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["statements:write"]},{"apiKey":[]}]}},"/{companyId}/paymentMethods":{"get":{"tags":["Métodos de pago"],"summary":"Lista de métodos de pago","description":"Devuelve una lista de los métodos de pago disponibles en la empresa.\n\nLos métodos de pago pueden ser globales o particulares de un cliente (cobros mediante recibo domiciliado o pagos mediante transferencia bancaria)","operationId":"getPaymentMethods","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"contact","in":"query","description":"Id del contacto para el que se obtendrán los métodos de pago.","schema":{"type":"string"}},{"name":"includeGlobal","in":"query","description":"Indica si quieres incluir en los resultados los métodos de pago globales (asignables a todos los clientes)","schema":{"type":"boolean"}},{"$ref":"#/components/parameters/MinCreationDate"},{"$ref":"#/components/parameters/MaxCreationDate"},{"$ref":"#/components/parameters/MinModificationDate"},{"$ref":"#/components/parameters/MaxModificationDate"},{"name":"sortBy","in":"query","description":"Orden de los resultados\n\nPuedes indicar varios parámetros para ordenar por más de un criterio e indicar el caracter - delante par que el orden sea descendente.\n\nPor ejemplo, para ordenar de forma descendente por título y luego por fecha de creación descendente utiliza los parámetros 'sortBy=title&sortBy=-creationDate'\n\nEstán disponibles las siguientes opciones de ordenación:\n\n* title: Título del banco\n* creationDate: Fecha de creación en el sistema\n* modificationDate: Fecha de última modificación en el sistema","schema":{"type":"array","items":{"type":"string","enum":["title","-title","creationDate","-creationDate","modificationDate","-modificationDate"]}}},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Offset"}],"responses":{"200":{"description":"Lista de métodos de pago","content":{"application/json":{"schema":{"type":"object","title":"GetPaymentMethodsResponse","required":["pagination","items"],"additionalProperties":false,"properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"items":{"type":"array","title":"Items","items":{"$ref":"#/components/schemas/PaymentMethodResponse"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["paymentMethods:read"]},{"apiKey":[]}]},"post":{"tags":["Métodos de pago"],"summary":"Crear método de pago","description":"Crea un nuevo método de pago","operationId":"createPaymentMethod","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"requestBody":{"required":true,"description":"Contenido del método de pago a crear","content":{"application/json":{"schema":{"type":"object","title":"CreatePaymentMethodRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/PaymentMethodWrite"}}},"examples":{"transfer":{"summary":"Método de pago global para documentos de venta","value":{"content":{"type":"paymentMethod","main":{"subtype":"manual","title":"Pago por transferencia","bank":"ban_10000000-0000-4000-8000-000000000000","details":{}}}}},"directDebit":{"summary":"Mandato para cobro por recibo domiciliado a clientes","value":{"content":{"type":"paymentMethod","main":{"subtype":"sepaDirectDebit","title":"Recibo domiciliado","direction":"receive","contact":"con_10000000-0000-4000-8000-000000000000","details":{"id":"MANDATO_01","signatureDate":"2023-04-10","instrument":"CORE","recurrent":true,"iban":"ES3011112222003333333333"}}}}},"sepaCreditTransfer":{"summary":"Pago por transferencia para proveedores","value":{"content":{"type":"paymentMethod","main":{"subtype":"sepaCreditTransfer","title":"Transferencia SEPA","direction":"send","contact":"con_20000000-0000-4000-8000-000000000000","details":{"iban":"ES9122223333304444444444"}}}}}}}}},"responses":{"200":{"description":"Resultado de la creación del método de pago","content":{"application/json":{"schema":{"type":"object","title":"CreatePaymentMethodResponse","required":["content","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/PaymentMethod"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["paymentMethods:write"]},{"apiKey":[]}]}},"/{companyId}/paymentMethods/{id}":{"get":{"tags":["Métodos de pago"],"summary":"Obtener un método de pago","description":"Obtiene el contenido de un método de pago","operationId":"getPaymentMethod","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del método de pago. Formado por el prefjo \"pam_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Contenido del método de pago solicitado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMethodResponse"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["paymentMethods:read"]},{"apiKey":[]}]},"put":{"tags":["Métodos de pago"],"summary":"Actualizar método de pago","description":"Actualiza un método de pago","operationId":"updatePaymentMethod","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del método de pago. Formado por el prefjo \"pam_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Contenido del método de pago a actualizar","content":{"application/json":{"schema":{"type":"object","title":"UpdatePaymentMethodRequest","required":["content"],"properties":{"content":{"$ref":"#/components/schemas/PaymentMethodWrite"}}}}}},"responses":{"200":{"description":"Resultado de la actualización del método de pago","content":{"application/json":{"schema":{"type":"object","title":"UpdatePaymentMethodResponse","required":["content","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/PaymentMethod"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["paymentMethods:write"]},{"apiKey":[]}]},"delete":{"tags":["Métodos de pago"],"summary":"Borrar método de pago","description":"Elimina un método de pago existente","operationId":"deletePaymentMethod","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","description":"ID  del método de pago. Formado por el prefjo \"pam_\"  y un uuid v4","required":true,"schema":{"type":"string"}}],"responses":{"200":{"$ref":"#/components/responses/DeleteResponse"},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["paymentMethods:write"]},{"apiKey":[]}]}},"/{companyId}/journal":{"get":{"tags":["Contabilidad"],"summary":"Diario contable","description":"Devuelve una lista de movimientos del diario contable de la empresa","operationId":"getJournal","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"minDate","in":"query","description":"Fecha mínima del apunte en formato YYYY-MM-DD.\n\nSe incluirán en los resultados facturas con fecha mayor o igual al valor indicado","schema":{"type":"string","format":"date"}},{"name":"maxDate","in":"query","description":"Fecha máxima del apunte en formato YYYY-MM-DD.\n\nSe incluirán en los resultados facturas con fecha menor o igual al valor indicado","schema":{"type":"string","format":"date"}},{"name":"account","in":"query","description":"Cuenta o grupo, puedes indicar entre 1 y 6 dígitos de la cuenta contable de la que deseas obtener movimientos","schema":{"type":"string","pattern":"^[0-9]{1,6}$"}},{"name":"document","in":"query","description":"Identificador del documento que actúa como subcuenta para obtener solo apuntes que afecten a su saldo","schema":{"type":"string"}},{"name":"journalPriority","in":"query","description":"Indica un valor para obtener solo asientos del diario según su tipo","schema":{"$ref":"#/components/schemas/JournalPriority"}},{"name":"allTheseTags","in":"query","description":"Listado de todas las etiquetas que debe contener el documento que contiene al apunte para ser incluido en los resultados.\n\nRepite el parámetro tantas veces como etiquetas quieras incluir.","schema":{"type":"array","items":{"type":"string"}}},{"name":"anyOfTheseTags","in":"query","description":"Listado de cualquiera de las etiquetas que debe contener el documento que contiene al apunte para ser incluido en los resultados.\n\nRepite el parámetro tantas veces como etiquetas quieras incluir.","schema":{"type":"array","items":{"type":"string"}}},{"name":"hasTags","in":"query","description":"Indicar este parámetro con valor 'true' para recibir solo apuntes producidos por documentos que no tengan ninguna etiqueta","schema":{"type":"boolean"}},{"name":"sortBy","in":"query","description":"Orden de los resultados\n\nEstán disponibles las siguientes opciones de ordenación:\n\n* date: Fecha del asiento","schema":{"type":"array","items":{"type":"string","enum":["date","-date"]}}},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Offset"},{"name":"related","in":"query","description":"Permite obtener datos adicionales relacionados con el registro del diario, se pueden indicar tantos valores como sea necesario entre los siguientes:\n\n* idAccounting: Asiento contable completo del documento que contiene este apunte\n* tags: Devuelve en el atributo \"tags\" las etiquetas asociadas al documento que origina el apunte\n* currency: Devuelve el contravalor en moneda original de los asientos en moneda distinta de EUR (atributos \"currency\", \"currencyCredit\" y \"currencyDebit\"). Disponible solo en empresas con el soporte multimoneda activado","schema":{"type":"array","items":{"type":"string","enum":["tags","currency","idAccounting"]}}}],"responses":{"200":{"description":"Lista de apuntes del diario","content":{"application/json":{"schema":{"type":"object","title":"GetJournalResponse","required":["pagination","items"],"additionalProperties":false,"properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"items":{"type":"array","title":"Items","items":{"type":"object","additionalProperties":false,"required":["id","idType","idTitle","idLineIndex","debit","credit","account","accountTitle"],"properties":{"id":{"type":"string","description":"Identificador del documento que contiene el apunte"},"idType":{"type":"string","description":"Tipo del documento que contiene el apunte.\n                                \nValores posibles:\n\n* bill: Factura de compra o ticket\n* invoice: Factura de vent\n* payroll: Nómina\n* payment: Remesa bancaria (cobro o pago)\n* taxes: Modelo de impuestos\n* transaction: Asiento contable","enum":["bill","invoice","payroll","payment","taxes","transaction"]},"idTitle":{"type":"string","description":"Título del documento que contiene el apunte"},"idSummary":{"type":"string","description":"Resument/descripción del documento que contiene el apunte. Disponible solo para facturas de venta, compras y nóminas"},"idLineIndex":{"type":"integer","description":"Número de apunte dentro del asiento del documento"},"idAccounting":{"description":"Asiento contable completo del documento que contiene el apunte. Solo se incluye en la respuesta si se solicita con related=idAccounting","allOf":[{"$ref":"#/components/schemas/Accounting"}]},"date":{"type":"string","format":"date","description":"Fecha del apunte"},"debit":{"type":"number","description":"Importe anotado en el HABER en EUR"},"credit":{"type":"number","description":"Importe anotado en el DEBE en EUR"},"currency":{"type":"string","description":"Moneda original del apunte (Formato ISO 4217). Disonible solo para empresas con el soporte multimoneda activo"},"currencyDebit":{"type":"number","description":"Importe anotado en el HABER en la moneda original del asiento. Disonible solo para empresas con el soporte multimoneda activo"},"currencyCredit":{"type":"number","description":"Importe anotado en el DEBE en la moneda original del asiento. Disonible solo para empresas con el soporte multimoneda activo"},"account":{"$ref":"#/components/schemas/AccountCode"},"accountTitle":{"type":"string","description":"Nombre de la cuenta contable en el plan de cuentas de la empresa"},"document":{"type":"string","description":"Identificador del documento que actúa como subcuenta (si existe alguno)"},"documentType":{"type":"string","description":"Tipo del documento que actúa como subcuenta (si existe alguno).\n                                \nValores posibles:\n\n* bill: Factura de compra o ticket\n* invoice: Factura de vent\n* payroll: Nómina\n* payment: Remesa bancaria (cobro o pago)\n* transaction: Asiento contable\n* bank: Banco\n* contact: Contacto\n* product: Producto","enum":["bill","invoice","payroll","payment","transaction","bank","contact","product"]},"documentitle":{"type":"string","description":"Título del documento que actúa como subcuenta (si existe alguno)"},"journalPriority":{"$ref":"#/components/schemas/JournalPriority"},"tags":{"$ref":"#/components/schemas/Tags"}}}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"409":{"$ref":"#/components/responses/ConflictError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["accounting:read"]},{"apiKey":[]}]}},"/{companyId}/settings/taxes/sales":{"get":{"tags":["Ajustes"],"summary":"Lista de impuestos de venta disponibles","description":"Devuelve una lista de los impuestos de venta disponibles en la empresa","operationId":"getSalesTaxes","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"taxGroup","in":"query","description":"Grupo de impuestos.\n\n  No se debe asumir que siempre van a existir estos valores, si hay cambios normativos pueden definirse nuevos valores en cualquier momento.\n\n  Los grupos disponibles en cada empresas pueden ser distintos según su dirección fiscal.\n  \n  * IVA: IVA\n  * IVA_RE: IVA de recargo de equivalencia\n  * IGIC: Impuesto General Indirecto Canario (Canarias)\n  * IPSI: Impuesto sobre la Producción, los Servicios y la Importación (Ceuta y Melilla)\n  * IRPF: Retención de IRPF\n  * VATEU: IVA de países de la EU distintos de España (IVA declarado en dichos países)\n  ","schema":{"type":"array","items":{"type":"string","enum":["IVA","IVA_RE","IGIC","IPSI","IRPF","VATEU"]}}}],"responses":{"200":{"description":"Lista de impuestos de venta","content":{"application/json":{"schema":{"type":"object","title":"GetSalesTaxesResponse","required":["items"],"additionalProperties":false,"properties":{"items":{"type":"array","title":"Items","items":{"$ref":"#/components/schemas/SalesTax"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["settings:read"]},{"apiKey":[]}]}},"/{companyId}/settings/taxes/purchases":{"get":{"tags":["Ajustes"],"summary":"Lista de impuestos de compra disponibles","description":"Devuelve una lista de los impuestos de compra disponibles en la empresa","operationId":"getPurchasesTaxes","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"taxGroup","in":"query","description":"Grupo de impuestos.\n\n  No se debe asumir que siempre van a existir estos valores, si hay cambios normativos pueden definirse nuevos valores en cualquier momento.\n\n  Los grupos disponibles en cada empresas pueden ser distintos según su dirección fiscal.\n  \n  * IVA: IVA\n  * IVA_RE: IVA de recargo de equivalencia\n  * IGIC: Impuesto General Indirecto Canario (Canarias)\n  * IPSI: Impuesto sobre la Producción, los Servicios y la Importación (Ceuta y Melilla)\n  * IRPF: Retención de IRPF\n  ","schema":{"type":"array","items":{"type":"string","enum":["IVA","IVA_RE","IGIC","IPSI","IRPF"]}}}],"responses":{"200":{"description":"Lista de impuestos de compra","content":{"application/json":{"schema":{"type":"object","title":"GetPurchasesTaxesResponse","required":["items"],"additionalProperties":false,"properties":{"items":{"type":"array","title":"Items","items":{"$ref":"#/components/schemas/PurchasesTax"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["settings:read"]},{"apiKey":[]}]}},"/{companyId}/settings/themes":{"get":{"tags":["Ajustes"],"summary":"Lista de plantillas de documentos disponibles","description":"Devuelve una lista de las plantillas disponibles en la empresa para documentos de venta","operationId":"getThemes","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"responses":{"200":{"description":"Lista de plantillas de documentos","content":{"application/json":{"schema":{"type":"object","title":"GetThemesResponse","required":["items"],"additionalProperties":false,"properties":{"items":{"type":"array","title":"Items","items":{"type":"object","additionalProperties":false,"required":["id","title"],"properties":{"id":{"type":"string"},"title":{"type":"string"}}}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["settings:read"]},{"apiKey":[]}]}},"/{companyId}/settings/series/{documentType}":{"get":{"tags":["Ajustes"],"summary":"Lista de series de numeración","description":"Devuelve una lista de las series de numeración definidas en la empresa para el tipo de documento indicado","operationId":"getSeries","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"documentType","in":"path","required":true,"description":"Tipo de documento\n\nValores disponibles:\n* invoice: Facturas de venta\n* estimate: Presupuestos\n* deliveryNote: Albaranes","schema":{"type":"string","enum":["invoice","estimate","deliveryNote"]}}],"responses":{"200":{"description":"Lista de series de numeración","content":{"application/json":{"schema":{"type":"object","title":"GetSeriesResponse","required":["items"],"additionalProperties":false,"properties":{"items":{"type":"array","title":"Items","items":{"type":"object","additionalProperties":false,"required":["serie","reset","notes","manual","theme"],"properties":{"serie":{"type":"string","description":"Valor de la serie\n\nPuede contener los textos \"##\" o \"####\" que se sustituyen por el año de la fecha del documento en el momento de guardarse"},"reset":{"type":"string","enum":["never","year"],"description":"Indica si la serie reinicia la numeración con el cambio de año (year) o el primer documento de un año continúa con la numeración del último del año anterior (never)"},"notes":{"type":"string","description":"Notas descriptivas de la serie"},"manual":{"type":"boolean","description":"Indica si esta serie acepta numeración manual en la interfaz de FacturaDirecta"},"invoiceType":{"type":"string","enum":["complete","complete_correction","simplified","simplified_correction","external"],"description":"Indica el tipo de facturas a las que puede aplicarse esta serie (solo para series de facturas):\n\n* complete: Facturas completas\n* complete_correction: Facturas completas rectificativas\n* simplified: Facturas simplificadas\n* simplified_correction: Facturas simplificadas rectificativas\n* external: Facturas externas (emitidas por terceros)\n"},"correction":{"type":"boolean","description":"Indica si esta serie pertenece a documentos rectificativos (De aplicación solo para series de facturas)\nOBSOLETO: Usar invoiceType"},"theme":{"type":"string","description":"Identificador de la plantilla aplicada a los documentos de esta serie si no se indica una en el momento de su creación"}}}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["settings:read"]},{"apiKey":[]}]}},"/{companyId}/webhooks/endpoints":{"get":{"tags":["Webhooks"],"summary":"Lista de endpoints de webhooks","description":"Devuelve la lista de endpoints de webhooks configurados en la empresa","operationId":"listPublicWebhookEndpoints","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"responses":{"200":{"description":"Lista de endpoints","content":{"application/json":{"schema":{"type":"object","title":"ListPublicWebhookEndpointsResponse","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["webhooks:read"]},{"apiKey":[]}]},"post":{"tags":["Webhooks"],"summary":"Crear endpoint de webhook","description":"Crea un nuevo endpoint de webhook. El `signing_secret` retornado solo se muestra una vez.","operationId":"createPublicWebhookEndpoint","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["name","url","events"],"properties":{"name":{"type":"string","description":"Nombre descriptivo del endpoint"},"url":{"type":"string","description":"URL HTTPS de destino"},"events":{"type":"array","items":{"type":"string"},"description":"Tipos de eventos a recibir"}}}}}},"responses":{"200":{"description":"Endpoint creado con el secret de firma","content":{"application/json":{"schema":{"type":"object","title":"CreatePublicWebhookEndpointResponse","additionalProperties":false,"required":["content","signing_secret"],"properties":{"content":{"$ref":"#/components/schemas/WebhookEndpoint"},"signing_secret":{"type":"string","description":"Secret de firma (formato whsec_...). Solo se muestra en la creación."}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["webhooks:write"]},{"apiKey":[]}]}},"/{companyId}/webhooks/endpoints/{endpointId}":{"get":{"tags":["Webhooks"],"summary":"Obtener endpoint de webhook","operationId":"getPublicWebhookEndpoint","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"endpointId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Detalles del endpoint","content":{"application/json":{"schema":{"type":"object","title":"GetPublicWebhookEndpointResponse","additionalProperties":false,"required":["content"],"properties":{"content":{"$ref":"#/components/schemas/WebhookEndpoint"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["webhooks:read"]},{"apiKey":[]}]},"put":{"tags":["Webhooks"],"summary":"Actualizar endpoint de webhook","operationId":"updatePublicWebhookEndpoint","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"endpointId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string"},"url":{"type":"string"},"events":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Endpoint actualizado","content":{"application/json":{"schema":{"type":"object","title":"UpdatePublicWebhookEndpointResponse","additionalProperties":false,"required":["content"],"properties":{"content":{"$ref":"#/components/schemas/WebhookEndpoint"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["webhooks:write"]},{"apiKey":[]}]},"delete":{"tags":["Webhooks"],"summary":"Eliminar endpoint de webhook","operationId":"deletePublicWebhookEndpoint","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"endpointId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Endpoint eliminado","content":{"application/json":{"schema":{"type":"object","title":"DeletePublicWebhookEndpointResponse","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["webhooks:write"]},{"apiKey":[]}]}},"/{companyId}/webhooks/endpoints/{endpointId}/enable":{"post":{"tags":["Webhooks"],"summary":"Activar endpoint de webhook","operationId":"enablePublicWebhookEndpoint","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"endpointId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Endpoint activado","content":{"application/json":{"schema":{"type":"object","title":"EnablePublicWebhookEndpointResponse","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"object","additionalProperties":false,"required":["enabled","requeued"],"properties":{"enabled":{"type":"boolean"},"requeued":{"type":"number","description":"Número de eventos fallidos reencolados"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["webhooks:write"]},{"apiKey":[]}]}},"/{companyId}/webhooks/endpoints/{endpointId}/disable":{"post":{"tags":["Webhooks"],"summary":"Desactivar endpoint de webhook","operationId":"disablePublicWebhookEndpoint","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"endpointId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Endpoint desactivado","content":{"application/json":{"schema":{"type":"object","title":"DisablePublicWebhookEndpointResponse","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"object","additionalProperties":false,"required":["enabled"],"properties":{"enabled":{"type":"boolean"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["webhooks:write"]},{"apiKey":[]}]}},"/{companyId}/webhooks/endpoints/{endpointId}/rotateSecret":{"post":{"tags":["Webhooks"],"summary":"Rotar secret de firma del endpoint","description":"Genera un nuevo secret de firma para el endpoint. El secret anterior queda invalidado.","operationId":"rotatePublicWebhookEndpointSecret","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"endpointId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Nuevo secret de firma","content":{"application/json":{"schema":{"type":"object","title":"RotatePublicWebhookEndpointSecretResponse","additionalProperties":false,"required":["signing_secret"],"properties":{"signing_secret":{"type":"string","description":"Nuevo secret de firma (formato whsec_...)"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["webhooks:write"]},{"apiKey":[]}]}},"/{companyId}/webhooks/events":{"get":{"tags":["Webhooks"],"summary":"Lista de eventos de webhook","description":"Devuelve el historial de eventos enviados a los endpoints de webhook. Usa cursor-based pagination.","operationId":"listPublicWebhookEvents","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"endpointId","in":"query","schema":{"type":"string"},"description":"Filtrar por endpoint"},{"name":"type","in":"query","schema":{"type":"string"},"description":"Filtrar por tipo de evento"},{"name":"status","in":"query","schema":{"type":"string"},"description":"Filtrar por estado (pending, delivered, failed)"},{"name":"limit","in":"query","schema":{"type":"string"},"description":"Número máximo de resultados (máx. 100)"},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Cursor de paginación"}],"responses":{"200":{"description":"Lista de eventos","content":{"application/json":{"schema":{"type":"object","title":"ListPublicWebhookEventsResponse","additionalProperties":false,"required":["items","hasMore"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEvent"}},"hasMore":{"type":"boolean","description":"Indica si hay más resultados disponibles"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["webhooks:read"]},{"apiKey":[]}]}},"/{companyId}/webhooks/events/{eventId}":{"get":{"tags":["Webhooks"],"summary":"Obtener evento de webhook","operationId":"getPublicWebhookEvent","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"eventId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Detalles del evento","content":{"application/json":{"schema":{"type":"object","title":"GetPublicWebhookEventResponse","additionalProperties":false,"required":["content"],"properties":{"content":{"$ref":"#/components/schemas/WebhookEvent"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["webhooks:read"]},{"apiKey":[]}]}},"/{companyId}/webhooks/events/{eventId}/retry":{"post":{"tags":["Webhooks"],"summary":"Reintentar entrega de evento","description":"Reencola el evento para reintento de entrega al endpoint correspondiente","operationId":"retryPublicWebhookEvent","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"eventId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Evento reencolado","content":{"application/json":{"schema":{"type":"object","title":"RetryPublicWebhookEventResponse","additionalProperties":false,"required":["queued"],"properties":{"queued":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["webhooks:write"]},{"apiKey":[]}]}},"/{companyId}/apiKeys":{"get":{"tags":["API Keys"],"summary":"Lista de API keys","description":"Devuelve la lista de API keys configuradas en la empresa (sin datos sensibles)","operationId":"listPublicApiKeys","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"responses":{"200":{"description":"Lista de API keys","content":{"application/json":{"schema":{"type":"object","title":"ListPublicApiKeysResponse","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PublicApiKeyInfo"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["apiKeys:read"]},{"apiKey":[]}]},"post":{"tags":["API Keys"],"summary":"Crear API key","description":"Crea una nueva API key. El campo `apiKey` de la respuesta contiene la clave completa y solo se muestra una vez. Las API keys creadas vía API tienen el flag `managedViaApi: true` y pueden ser eliminadas vía API.","operationId":"createPublicApiKey","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["name","scopes"],"properties":{"name":{"type":"string","description":"Nombre descriptivo de la API key"},"scopes":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Scopes a asignar a la nueva API key. Si el caller es una API key, los scopes deben ser subconjunto de los suyos."}}},"examples":{"basic":{"summary":"API key con lectura de contactos","value":{"name":"Mi API key","scopes":["contacts:read"]}}}}}},"responses":{"200":{"description":"API key creada","content":{"application/json":{"schema":{"type":"object","title":"CreatePublicApiKeyResponse","additionalProperties":false,"required":["content","apiKey"],"properties":{"content":{"$ref":"#/components/schemas/PublicApiKeyInfo"},"apiKey":{"type":"string","description":"Clave API completa (solo visible en la creación)"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["apiKeys:write"]},{"apiKey":[]}]}},"/{companyId}/apiKeys/{id}":{"get":{"tags":["API Keys"],"summary":"Obtener API key","description":"Devuelve los datos de una API key por su identificador","operationId":"getPublicApiKey","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Identificador de la API key"}],"responses":{"200":{"description":"Datos de la API key","content":{"application/json":{"schema":{"type":"object","title":"GetPublicApiKeyResponse","additionalProperties":false,"required":["content"],"properties":{"content":{"$ref":"#/components/schemas/PublicApiKeyInfo"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["apiKeys:read"]},{"apiKey":[]}]},"delete":{"tags":["API Keys"],"summary":"Eliminar API key","description":"Elimina una API key creada vía API (`managedViaApi: true`). Las API keys creadas manualmente no pueden eliminarse vía API. Una API key no puede eliminarse a sí misma.","operationId":"deletePublicApiKey","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Identificador de la API key a eliminar"}],"responses":{"200":{"description":"API key eliminada","content":{"application/json":{"schema":{"type":"object","title":"DeletePublicApiKeyResponse","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["apiKeys:write"]},{"apiKey":[]}]}},"/{companyId}/uploads":{"post":{"tags":["Uploads"],"summary":"Subir un archivo","description":"Sube un archivo a FacturaDirecta para poder vincularlo después a un documento (factura, factura de compra, presupuesto, albarán, nómina o factura recurrente).\n\nEl upload es un recurso temporal con TTL de 24 horas. Si no se vincula a un documento dentro de ese plazo, caduca y se purga automáticamente.\n\n**Modo multipart/form-data** (recomendado para clientes y agentes):\n- Envía el binario en el campo `file` de un `multipart/form-data`.\n- Tamaño máximo: **10 MB**.\n- Devuelve directamente un upload en estado `committed`, listo para vincular.\n- Si el archivo excede el límite, se devuelve un error 413 con `code: \"upload_too_large_for_multipart\"` y un `hint` apuntando al modo presigned.\n\n**Modo presigned (application/json)**:\n- Body: `{ filename, contentType }`.\n- Devuelve un `signedRequest` (URL pre-firmada de S3) para que el cliente haga `PUT` con el binario directo a S3 (sin pasar por el API).\n- Después debe llamarse a `POST /api/{companyId}/uploads/{uploadId}/commit` para sellar el upload.\n- Tamaño máximo: **25 MB** (verificado en el commit).","operationId":"createUpload","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"Contenido binario del archivo"}}}},"application/json":{"schema":{"type":"object","required":["filename"],"additionalProperties":false,"properties":{"filename":{"type":"string","description":"Nombre del archivo (incluyendo extensión)"},"contentType":{"type":"string","description":"MIME type del archivo. Si no se indica, se usa application/octet-stream."}}},"examples":{"default":{"summary":"Solicitar URL presigned","value":{"filename":"factura.pdf","contentType":"application/pdf"}}}}}},"responses":{"200":{"description":"Upload creado correctamente","content":{"application/json":{"schema":{"type":"object","title":"CreateUploadResponse","additionalProperties":false,"required":["content"],"properties":{"content":{"oneOf":[{"$ref":"#/components/schemas/PublicApiUpload"},{"$ref":"#/components/schemas/PublicApiPresignedUpload"}]}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"413":{"description":"El archivo excede el límite de subida proxyeada","content":{"application/json":{"schema":{"type":"object","title":"UploadTooLargeResponse","properties":{"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["upload_too_large_for_multipart"]},"message":{"type":"string"},"hint":{"type":"object","properties":{"alternativeMode":{"type":"string"},"alternativeEndpoint":{"type":"string"},"alternativeContentType":{"type":"string"},"maxProxySize":{"type":"integer"},"maxPresignedSize":{"type":"integer"}}}}}}}}}}},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["files:write"]},{"apiKey":[]}]}},"/{companyId}/uploads/{uploadId}/commit":{"post":{"tags":["Uploads"],"summary":"Sellar un upload presigned tras subirlo a S3","description":"Cierra un upload creado con el modo presigned: verifica que el binario está en S3, comprueba el tamaño contra el límite (25 MB), detecta automáticamente si es un Facturae y deja el upload en estado `committed`, listo para vincular a un documento.\n\nSi el archivo supera el límite se devuelve un 413 con `code: \"upload_too_large_for_presigned\"` y el upload pasa a `expired`.","operationId":"commitUpload","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"uploadId","in":"path","required":true,"schema":{"type":"string"},"description":"Identificador del upload (prefijo `upl_`) devuelto por POST /uploads en modo presigned."}],"responses":{"200":{"description":"Upload sellado correctamente","content":{"application/json":{"schema":{"type":"object","title":"CommitUploadResponse","additionalProperties":false,"required":["content"],"properties":{"content":{"$ref":"#/components/schemas/PublicApiUpload"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"413":{"description":"El archivo supera el límite del modo presigned","content":{"application/json":{"schema":{"type":"object","title":"CommitUploadTooLargeResponse"}}}},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["files:write"]},{"apiKey":[]}]}},"/{companyId}/inbox":{"get":{"tags":["Bandeja de entrada"],"summary":"Lista de items en la bandeja de entrada","description":"Devuelve los documentos subidos pendientes de procesar (o ya procesados) por el escáner. Por defecto solo se devuelven los no archivados.","operationId":"getInboxItems","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Offset"},{"name":"status","in":"query","required":false,"description":"Filtrar por estado del escaneo","schema":{"type":"string","enum":["pending","scanned","scan_failed"]}},{"name":"minDate","in":"query","required":false,"description":"Fecha mínima de creación (ISO 8601)","schema":{"type":"string","format":"date-time"}},{"name":"maxDate","in":"query","required":false,"description":"Fecha máxima de creación (ISO 8601)","schema":{"type":"string","format":"date-time"}},{"name":"archived","in":"query","required":false,"description":"Filtrar por estado de archivado: `false` (defecto, solo activos), `true` (solo archivados), `all` (ambos)","schema":{"type":"string","enum":["false","true","all"]}}],"responses":{"200":{"description":"Listado paginado","content":{"application/json":{"schema":{"type":"object","title":"GetInboxItemsResponse","additionalProperties":false,"required":["pagination","items"],"properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"items":{"type":"array","items":{"$ref":"#/components/schemas/InboxItem"}}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["inbox:read"]},{"apiKey":[]}]},"post":{"tags":["Bandeja de entrada"],"summary":"Subir un documento a la bandeja de entrada","description":"Crea un item en la bandeja de entrada que será procesado por el escáner LLM. Dos modos:\n\n**Modo JSON** — `Content-Type: application/json`. Cuerpo: `{ upload: \"upl_…\", title?: string, idempotencyKey?: string }`. Se asume que ya has subido el binario con `POST /uploads`. El upload se \"consume\" (no se podrá vincular a otro documento).\n\n**Modo multipart** — `Content-Type: multipart/form-data`. Campos: `file` (binario, obligatorio), `title` (opcional), `idempotencyKey` (opcional). One-shot: equivalente a `POST /uploads` (multipart) seguido de `POST /inbox` (JSON) en una sola llamada.\n\n**Idempotencia.** Si pasas `idempotencyKey` y ya existe un item activo (no archivado) en esta empresa con esa misma key, se devuelve el existente y no se crea uno nuevo (200 OK, no 409). Internamente se mapea a `task.main.sourceKey`.\n\n**Estado inicial.** El item se crea con `status: \"pending\"` y `scan: null`. El escaneo corre en segundo plano. El cliente puede hacer polling sobre `GET /inbox/{id}` hasta ver `status: \"scanned\"` o `\"scan_failed\"`.","operationId":"createInboxItem","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["upload"],"properties":{"upload":{"type":"string","description":"Identificador (`upl_…`) devuelto por POST /uploads"},"title":{"type":"string","description":"Título opcional. Si no se indica, se usa el nombre del archivo."},"idempotencyKey":{"type":"string","description":"Clave de idempotencia opcional. Reintentos con la misma clave devuelven el mismo item."}}},"examples":{"default":{"summary":"Crear inbox item desde un upload previo","value":{"upload":"upl_00000000-0000-4000-8000-000000000000","title":"factura.pdf"}}}},"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"Contenido binario del archivo"},"title":{"type":"string","description":"Título opcional"},"idempotencyKey":{"type":"string","description":"Clave de idempotencia opcional"}}}}}},"responses":{"200":{"description":"Item creado (o ya existente si se ha activado idempotencia)","content":{"application/json":{"schema":{"type":"object","title":"CreateInboxItemResponse","additionalProperties":false,"required":["content"],"properties":{"content":{"$ref":"#/components/schemas/InboxItem"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"409":{"$ref":"#/components/responses/ConflictError"},"413":{"description":"El archivo supera el límite de la bandeja","content":{"application/json":{"schema":{"type":"object","title":"InboxUploadTooLargeResponse"}}}},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["inbox:write"]},{"apiKey":[]}]}},"/{companyId}/inbox/{id}":{"get":{"tags":["Bandeja de entrada"],"summary":"Detalle de un item de la bandeja","description":"Devuelve el item completo, incluyendo el campo `scan.text` con el OCR crudo (omitido en el listado por tamaño).","operationId":"getInboxItem","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Identificador del item (prefijo `tas_`)"}],"responses":{"200":{"description":"Item solicitado","content":{"application/json":{"schema":{"type":"object","title":"GetInboxItemResponse","additionalProperties":false,"required":["content"],"properties":{"content":{"$ref":"#/components/schemas/InboxItem"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["inbox:read"]},{"apiKey":[]}]},"delete":{"tags":["Bandeja de entrada"],"summary":"Archivar un item de la bandeja","description":"Archiva el item (no lo borra físicamente). Sigue siendo consultable con `?archived=true` en el listado. Mismo comportamiento que `DELETE` en facturas y otros documentos.","operationId":"deleteInboxItem","parameters":[{"$ref":"#/components/parameters/Accept-Version"},{"$ref":"#/components/parameters/CompanyId"},{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Identificador del item (prefijo `tas_`)"}],"responses":{"200":{"description":"Item archivado","content":{"application/json":{"schema":{"type":"object","title":"DeleteInboxItemResponse","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"oAuth":["inbox:write"]},{"apiKey":[]}]}}},"components":{"schemas":{"AccountCode":{"type":"string","title":"AccountCode","description":"Número de cuenta contable","pattern":"^[0-9]{6}$"},"Attachment":{"type":"object","title":"Attachment","additionalProperties":false,"properties":{"name":{"type":"string"},"url":{"type":"string"},"size":{"type":"integer","minimum":0},"creationTime":{"type":"string","format":"date-time"},"contentType":{"type":"string"},"contentSubtype":{"type":"string","enum":["facturae","inboxEmailBody"]}},"required":["name","url","creationTime"]},"AttachmentWrite":{"title":"AttachmentWrite","description":"Adjunto en escritura: un Attachment ya existente (se conserva tal cual) o una referencia `{uploadId}` a un upload creado previamente con POST /api/{companyId}/uploads.","oneOf":[{"$ref":"#/components/schemas/Attachment"},{"type":"object","additionalProperties":false,"required":["uploadId"],"properties":{"uploadId":{"type":"string","description":"Identificador del upload (`upl_<uuid>`) devuelto por POST /api/{companyId}/uploads. Cada upload solo puede vincularse a un documento."}}}]},"Bank":{"type":"object","title":"Bank","required":["main","type","uuid"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["bank"]},"uuid":{"type":"string"},"main":{"type":"object","required":["name","currency","account","subtype"],"additionalProperties":false,"properties":{"title":{"type":"string"},"subtype":{"type":"string","enum":["other","iban","card"]},"name":{"type":"string"},"iban":{"type":"string","description":"IBAN completo del banco (Solo para cuentas son subtype=\"iban\" y presente si las credenciales utilizadas tienen acceso banks:readIban)"},"bic":{"type":"string"},"currency":{"type":"string"},"bankCode":{"type":"string"},"account":{"$ref":"#/components/schemas/AccountCode"},"iban4":{"type":"string","description":"Últimos 4 dígitos del IBAN de esta cuenta (Solo para cuentas son subtype=\"iban\")"}}}}},"BankResponse":{"type":"object","title":"BankResponse","required":["content","creationDate","modificationDate"],"additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Bank"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}},"Bill":{"type":"object","title":"Bill","required":["type","main","uuid"],"additionalProperties":false,"properties":{"uuid":{"type":"string"},"type":{"type":"string","enum":["bill"]},"accounting":{"$ref":"#/components/schemas/Accounting"},"books":{"$ref":"#/components/schemas/Books"},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}},"import":{"$ref":"#/components/schemas/ImportInformation"},"main":{"type":"object","title":"BillMain","required":["date","account","dueDate","total","contact","currency","fiscalPosition","lines","taxes"],"additionalProperties":false,"properties":{"subtype":{"type":"string","enum":["ticket"]},"account":{"$ref":"#/components/schemas/AccountCode"},"fiscalPosition":{"$ref":"#/components/schemas/FiscalPosition"},"contact":{"type":"string","nullable":true},"currency":{"type":"string","description":"Moneda de los importes de la factura de compra o ticket (Formato ISO 4217)"},"date":{"type":"string","format":"date","nullable":true},"transactionDate":{"type":"string","format":"date","nullable":true},"depreciable":{"type":"boolean"},"depreciationSettings":{"$ref":"#/components/schemas/DepreciationSettings"},"nonDeductibleInIRPF":{"type":"boolean"},"dueDate":{"type":"string","format":"date","nullable":true},"exchangeRate":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Tipo de cambio de la moneda original respecto a la moneda de la empresa"},"lines":{"type":"array","title":"BillLines","items":{"$ref":"#/components/schemas/BillMainLine"}},"manualAccounting":{"$ref":"#/components/schemas/BillMainManualAccounting"},"lineTotalDecimals":{"type":"number","minimum":2,"maximum":6,"multipleOf":1},"linesTotal":{"type":"number"},"mode":{"type":"string","enum":["totalProvided","calcTotal"]},"notes":{"type":"string"},"paymentMethod":{"type":"string","nullable":true},"referenceNumber":{"type":"string"},"showProductColumn":{"type":"boolean"},"showQuantityColumn":{"type":"boolean"},"showDiscountColumn":{"type":"boolean"},"taxes":{"$ref":"#/components/schemas/PurchasesDocumentTaxes"},"total":{"type":"number"},"pendingBeforeAccounting":{"type":"number"},"companyCurrencyTotal":{"type":"number"},"totalBeforeTaxes":{"type":"number"},"companyCurrencyTotalBeforeTaxes":{"type":"number"},"country":{"type":"string","description":"País de la dirección fiscal del contacto (proveedor) (Formato ISO 3166-1 Alpha-2)","nullable":true},"zipcode":{"type":"string","description":"Código postal de la dirección fiscal del contacto (proveedor)","nullable":true},"taxIncludedPrices":{"type":"boolean"},"title":{"type":"string"},"correctedBill":{"type":"string"},"manualTotals":{"type":"boolean"},"task":{"type":"string"},"installments":{"$ref":"#/components/schemas/Installments"},"draft":{"type":"boolean","description":"Indica si la factura es provisional (true) o definitiva (false). Cuando creamos una factura si no se indica la factura se creará como provisional o definitiva según la configuración de la empresa."},"voided":{"type":"boolean","description":"Indica si es una factura anulada.\n\nNOTA: Solo pueden anularse facturas en empresas que soportan el registro de facturas de compra en sistemas externos, en otro caso debe usarse la opción de borrado."},"ticketbai":{"$ref":"#/components/schemas/BillMainTicketbai"},"counterpart":{"$ref":"#/components/schemas/DocumentCounterpart"},"customFields":{"type":"object","additionalProperties":{"type":"string"},"description":"Valores de campos personalizados"}}},"meta":{"type":"object","title":"BillMeta","description":"Metadatos internos de la factura","additionalProperties":false,"properties":{"automationSource":{"type":"string"},"ticketbai":{"$ref":"#/components/schemas/BillMetaTicketbai"}},"readOnly":true}}},"DepreciationSettings":{"type":"object","title":"BillDepreciationSettings","additionalProperties":false,"properties":{"maxRate":{"type":"number","minimum":0},"startDepreciationDate":{"type":"string","format":"date"},"earlyDisposalDate":{"type":"string","format":"date"},"accumulatedDepreciationAccount":{"$ref":"#/components/schemas/AccountCode"},"provisioningDepreciationAccount":{"$ref":"#/components/schemas/AccountCode"},"amountToDepreciate":{"type":"number"},"currencyAmountToDepreciate":{"type":"number"},"depreciations":{"type":"array","title":"Depreciations","minItems":1,"items":{"$ref":"#/components/schemas/DepreciationEntry"}}},"required":["maxRate"]},"DepreciationEntry":{"type":"object","title":"BillDepreciationSettingsEntry","additionalProperties":false,"properties":{"date":{"type":"string","format":"date"},"amount":{"type":"number"},"currencyAmount":{"type":"number"},"currency":{"type":"string"}},"required":["date","amount","currencyAmount","currency"]},"BillMainLine":{"type":"object","title":"BillMainLine","additionalProperties":false,"required":["account","text","lineTotal","tax"],"properties":{"id":{"type":"string"},"text":{"type":"string"},"account":{"$ref":"#/components/schemas/AccountCode"},"document":{"type":"string","description":"Si esta línea se ha generado a partir de un producto puedes indicar aquí su ID"},"lineTotal":{"type":"number"},"nonDeductibleTax":{"type":"boolean","enum":[true]},"tax":{"type":"array","items":{"$ref":"#/components/schemas/TaxId"}},"discount":{"type":"number"},"discountRate":{"type":"number"},"quantity":{"type":"number"},"unitPrice":{"type":"number"}}},"BillMainLineWrite":{"type":"object","title":"BillMainLineWrite","additionalProperties":false,"required":["text","tax"],"properties":{"id":{"type":"string"},"text":{"type":"string"},"account":{"$ref":"#/components/schemas/AccountCode"},"document":{"type":"string","description":"Si esta línea se ha generado a partir de un producto puedes indicar aquí su ID"},"lineTotal":{"type":"number"},"nonDeductibleTax":{"type":"boolean","enum":[true]},"tax":{"type":"array","items":{"$ref":"#/components/schemas/TaxId"}},"discount":{"type":"number"},"discountRate":{"type":"number"},"quantity":{"type":"number"},"unitPrice":{"type":"number"}},"description":"Versión de la línea de factura de compra para creación del documento"},"BillMainManualAccounting":{"type":"object","title":"BillMainManualAccounting","description":"Contabilidad manual de la factura.\n\nEn este elemento pueden indicarse las líneas que se genearán en la contabilidad para esta factura a excepción de las del total del documento y las de impuestos que son generadas automáticamente por el programa","additionalProperties":false,"properties":{"lines":{"type":"array","title":"BillMainManualAccountingLines","minItems":1,"items":{"$ref":"#/components/schemas/AccountingLine"}}},"required":["lines"]},"BillMainTicketbai":{"type":"object","title":"BillMainTicketbai","description":"Parámetros de ajustes para TicketBAI","additionalProperties":false,"properties":{"batuzRentaGastos":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"object","additionalProperties":false,"properties":{"epigrafe":{"type":"string","minLength":1,"maxLength":7},"concepto":{"type":"string","minLength":2,"maxLength":5,"enum":["600","601","602","606","607","608","609","620","621","622","623","624","625","626","627","628","629","631","634","639","640","641","64201","64202","643","644","649","65","66","67","680","681","682","69"]},"referenciaBien":{"type":"string","minLength":1,"maxLength":10}}}},"batuzClaveTipoFacturaGastos":{"type":"string","minLength":2,"maxLength":2,"enum":["F1","F2","F3","F4","F5","F6","LC"]},"batuzClavesRegimenIvaOpTrascendencia":{"type":"array","minItems":1,"maxItems":3,"items":{"type":"string","enum":["01","02","03","04","05","07","08","09","12","13"]}},"batuzClaveTipoFacturaRectificativa":{"type":"string","enum":["R1","R2","R3","R4","R5"]},"batuzSerieFacturaRectificativa":{"type":"string"},"batuzIDFacturaRectificadaSustituida":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"object","additionalProperties":false,"required":["NumFactura","FechaExpedicionFactura"],"properties":{"SerieFactura":{"type":"string","minLength":1,"maxLength":20},"NumFactura":{"type":"string","minLength":1,"maxLength":20},"FechaExpedicionFactura":{"type":"string","minLength":10,"maxLength":10,"pattern":"^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-(19|20)\\d\\d$"}}}}}},"BillMetaTicketbai":{"type":"object","title":"BillMetaTicketbai","description":"Información interna relativa a TicketBAI","required":["mustBeSent","sent","batuzModel"],"properties":{"mustBeSent":{"type":"boolean"},"sent":{"type":"boolean"},"batuzModel":{"type":"object","title":"XmlBatuzModelAlta","description":"Modelo interno del contenido del XML de alta en Batuz (Aplica en Bizkaia)","additionalProperties":true},"voided":{"type":"object","title":"VoidedBill","description":"Información de TicketBAI relativa a la anulación de la factura","additionalProperties":false,"required":["mustBeSent","sent","batuzModel"],"properties":{"mustBeSent":{"type":"boolean"},"sent":{"type":"boolean"},"batuzModel":{"type":"object","title":"XmlBatuzModelAnulacion","description":"Modelo interno del contenido del XML de anulación en Batuz (Aplica en Bizkaia)","additionalProperties":true}}}}},"BillPaymentsWrite":{"type":"array","title":"BillPaymentsWrite","description":"Permite crear un pago para una factura de compra o ticket.\n\nSe pueden crear múltiples pagos e indicar el importe individual para cada uno de ellos.\n\nSi no se indica el importe (amount) se considera que con ese pago se quiere saldar todo el importe pendiente de la factura de compra o ticket, dentro del array solo puede haber un pago sin importe y debe estar en la última posición del array","items":{"type":"object","title":"BillPaymentWrite","description":"Nuevo pago de una factura de compra o ticket.","required":["bank"],"properties":{"date":{"type":"string","format":"date","description":"Fecha en la que contabilizar el pago, si no se indica se usa la fecha actual"},"bank":{"type":"string","description":"ID del banco en el que se anota el pago"},"amount":{"type":"number","description":"Importe del pago en la moneda original de la factura de compra o ticket. Si no se indica se saldará todo el importe pendiente"},"companyCurrencyAmount":{"type":"number","description":"Importe a contabilizar en euros, puede indicarse solo cuando la moneda de la factura de compra o ticket sea distinta a euros y se quiera indicar el valor exacto a contabilizar de dicho pago en euros. Si no se indica se aplicará un tipo de cambio de forma automática según la fecha del pago"},"description":{"type":"string","description":"Descripción del pago. Sustituye al título por defecto (\"Pago <factura de compra>\"). Visible en la columna \"Descripción\" de Bancos → Movimientos. Útil para almacenar una referencia operativa del pago real (p. ej. referencia de transferencia)."},"notes":{"type":"string","description":"Notas asociadas al pago. Texto libre adicional consultable desde Bancos → Movimientos. Útil cuando se quiere mantener la descripción auto-generada y registrar aparte una referencia operativa."}}}},"BillPaymentsWriteResponse":{"type":"object","title":"BillPaymentsWriteResponse","required":["content","tags","creationDate","modificationDate"],"additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Bill"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"},"related":{"type":"object","title":"BillRelated","additionalProperties":false,"properties":{"objects":{"type":"object","title":"BillRelatedObjects","description":"Mapa de objetos relacionados solicitados, cada clave de este objeto es el id de un objeto relacionado y el valor es el contenido del mismo","properties":{"object_id":{"anyOf":[{"$ref":"#/components/schemas/TaxDefinition"}]}}},"balance":{"type":"object","title":"BillBalance","description":"Saldo abierto de la factura de compra o ticket.\n\nSe devuelve el saldo contable de la factura de compra o ticket, por lo que el importe pendiente de pagar se muestra como un valor positivo. El importe se indica en la moneda de la factura en el elemento `currencyBalance` y en la moneda de la contabilidad de la empresa en el elemento `balance`\n\n```\n{\n  \"balance\": {\n    \"balance\": 28.56,\n    \"currency\": \"USD\",\n    \"currencyBalance\": 30.52\n  }\n}\n```\n\nEl ejemplo anterior corresponde a una factura de compra contabilizada en USD que tiene un importe pendiente de 30,52 USD que están contabilizados como 28,56 EUR.\n\nEn general para saber el importe pendiente de pagar de una factura de compra debe utilizarse por tanto el elemento `currencyBalance` que es el que representa el saldo pendiente en la moneda en la que se ha registrado la factura de compra o ticket.\n","required":["balance","currency","currencyBalance"],"properties":{"balance":{"type":"number","description":"Saldo pendiente de la factura de compra o ticket en EUR"},"currency":{"type":"string","description":"Moneda original del saldo pendiente de la factura de compra o ticket (Formato ISO 4217)"},"currencyBalance":{"type":"number","description":"Saldo pendiente de la factura de compra o ticket en la moneda de la factura"}}},"state":{"type":"string","enum":["draft","pending","overdue","paid","overpaid","voided"],"description":"Estado de la factura de compra o ticket.\n\n* draft: Borrador\n* pending: Pendiente de pago (Factura de compra con saldo pendiente que aún no ha alcanzado las fechas de vencimiento previstas)\n* overdue: Vencida (El saldo pendiente actual es superior al esperado según la información de vencimientos)\n* paid: Pagada (Factura de compra con saldo pendiente cero)\n* overpaid: Sobrepagada (Tiene pagos por encima del importe esperado)\n* voided: Anulada"},"journal":{"type":"array","description":"Apuntes contables de `/journal` que afectan al saldo de la factura de compra o ticket.\n\nSe devuelve una entrada por cada documento de saldo (cobros, pagos o remesas SEPA), con la misma forma reducida del endpoint `GET /{companyId}/journal?document={id}` pero sin los campos redundantes con el documento padre (`document`, `documentType`, `documentTitle`) ni los opt-in del endpoint `/journal` (`idAccounting`, `tags`).\n\nLos IDs son polimórficos:\n\n* **`tra_<uuid-v4>`** — `transaction` (asiento contable directo). Caso típico cuando el cobro/pago se ha registrado manualmente o vía transferencia convencional anotada en un banco.\n* **`pay_<uuid-v4>`** — `payment` (remesa SEPA). Aparece cuando la operación se ha agrupado en una remesa de adeudos directos o transferencias SEPA.\n\nLa lista incluye **todos** los apuntes que actualmente componen el saldo (no sólo los recién creados en una llamada). El orden es el mismo que devolvería `GET /journal?document={id}`: por fecha, prioridad contable y línea.\n\nLos campos `currency`, `currencyDebit` y `currencyCredit` sólo aparecen si la empresa tiene multicurrency activada y el apunte está en una moneda distinta a la de la contabilidad.","items":{"$ref":"#/components/schemas/RelatedJournalEntry"}}}},"paymentsInfo":{"type":"object","properties":{"total":{"type":"number","description":"Número total de pagos que modifican el saldo de la factura de compra o ticket"},"totalCreated":{"type":"number","description":"Número total de pagos creados en esta operación"}}}}},"BillResponse":{"type":"object","title":"BillResponse","required":["content","tags","creationDate","modificationDate"],"additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Bill"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"},"related":{"type":"object","title":"BillRelated","additionalProperties":false,"properties":{"objects":{"type":"object","title":"BillRelatedObjects","description":"Mapa de objetos relacionados solicitados, cada clave de este objeto es el id de un objeto relacionado y el valor es el contenido del mismo","properties":{"object_id":{"anyOf":[{"$ref":"#/components/schemas/TaxDefinition"}]}}},"balance":{"type":"object","title":"BillBalance","description":"Saldo abierto de la factura de compra o ticket.\n\nSe devuelve el saldo contable de la factura de compra o ticket, por lo que el importe pendiente de pagar se muestra como un valor positivo. El importe se indica en la moneda de la factura en el elemento `currencyBalance` y en la moneda de la contabilidad de la empresa en el elemento `balance`\n\n```\n{\n  \"balance\": {\n    \"balance\": 28.56,\n    \"currency\": \"USD\",\n    \"currencyBalance\": 30.52\n  }\n}\n```\n\nEl ejemplo anterior corresponde a una factura de compra contabilizada en USD que tiene un importe pendiente de 30,52 USD que están contabilizados como 28,56 EUR.\n\nEn general para saber el importe pendiente de pagar de una factura de compra debe utilizarse por tanto el elemento `currencyBalance` que es el que representa el saldo pendiente en la moneda en la que se ha registrado la factura de compra o ticket.\n","required":["balance","currency","currencyBalance"],"properties":{"balance":{"type":"number","description":"Saldo pendiente de la factura de compra o ticket en EUR"},"currency":{"type":"string","description":"Moneda original del saldo pendiente de la factura de compra o ticket (Formato ISO 4217)"},"currencyBalance":{"type":"number","description":"Saldo pendiente de la factura de compra o ticket en la moneda de la factura"}}},"state":{"type":"string","enum":["draft","pending","overdue","paid","overpaid","voided"],"description":"Estado de la factura de compra o ticket.\n\n* draft: Borrador\n* pending: Pendiente de pago (Factura de compra con saldo pendiente que aún no ha alcanzado las fechas de vencimiento previstas)\n* overdue: Vencida (El saldo pendiente actual es superior al esperado según la información de vencimientos)\n* paid: Pagada (Factura de compra con saldo pendiente cero)\n* overpaid: Sobrepagada (Tiene pagos por encima del importe esperado)\n* voided: Anulada"},"journal":{"type":"array","description":"Apuntes contables de `/journal` que afectan al saldo de la factura de compra o ticket.\n\nSe devuelve una entrada por cada documento de saldo (cobros, pagos o remesas SEPA), con la misma forma reducida del endpoint `GET /{companyId}/journal?document={id}` pero sin los campos redundantes con el documento padre (`document`, `documentType`, `documentTitle`) ni los opt-in del endpoint `/journal` (`idAccounting`, `tags`).\n\nLos IDs son polimórficos:\n\n* **`tra_<uuid-v4>`** — `transaction` (asiento contable directo). Caso típico cuando el cobro/pago se ha registrado manualmente o vía transferencia convencional anotada en un banco.\n* **`pay_<uuid-v4>`** — `payment` (remesa SEPA). Aparece cuando la operación se ha agrupado en una remesa de adeudos directos o transferencias SEPA.\n\nLa lista incluye **todos** los apuntes que actualmente componen el saldo (no sólo los recién creados en una llamada). El orden es el mismo que devolvería `GET /journal?document={id}`: por fecha, prioridad contable y línea.\n\nLos campos `currency`, `currencyDebit` y `currencyCredit` sólo aparecen si la empresa tiene multicurrency activada y el apunte está en una moneda distinta a la de la contabilidad.","items":{"$ref":"#/components/schemas/RelatedJournalEntry"}}}}}},"BillWrite":{"type":"object","title":"BillWrite","required":["type","main"],"additionalProperties":false,"properties":{"uuid":{"type":"string"},"type":{"type":"string","enum":["bill"]},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentWrite"},"maxItems":10},"main":{"type":"object","title":"BillMain","required":["contact","currency","lines"],"additionalProperties":false,"properties":{"subtype":{"type":"string","enum":["ticket"]},"account":{"$ref":"#/components/schemas/AccountCode"},"fiscalPosition":{"$ref":"#/components/schemas/FiscalPosition"},"contact":{"type":"string","nullable":true},"currency":{"type":"string","description":"Moneda de los importes de la factura de compra o ticket (Formato ISO 4217)"},"date":{"type":"string","format":"date","nullable":true},"transactionDate":{"type":"string","format":"date","nullable":true},"depreciable":{"type":"boolean"},"depreciationSettings":{"$ref":"#/components/schemas/DepreciationSettings"},"nonDeductibleInIRPF":{"type":"boolean"},"dueDate":{"type":"string","format":"date","nullable":true},"exchangeRate":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Tipo de cambio de la moneda original respecto a la moneda de la empresa"},"lines":{"type":"array","title":"BillLines","items":{"$ref":"#/components/schemas/BillMainLineWrite"}},"manualAccounting":{"$ref":"#/components/schemas/BillMainManualAccounting"},"lineTotalDecimals":{"type":"number","minimum":2,"maximum":6,"multipleOf":1},"linesTotal":{"type":"number"},"mode":{"type":"string","enum":["totalProvided","calcTotal"]},"notes":{"type":"string"},"paymentMethod":{"type":"string","nullable":true},"referenceNumber":{"type":"string"},"showProductColumn":{"type":"boolean"},"showQuantityColumn":{"type":"boolean"},"showDiscountColumn":{"type":"boolean"},"taxes":{"$ref":"#/components/schemas/PurchasesDocumentTaxes"},"total":{"type":"number"},"pendingBeforeAccounting":{"type":"number"},"companyCurrencyTotal":{"type":"number"},"totalBeforeTaxes":{"type":"number"},"companyCurrencyTotalBeforeTaxes":{"type":"number"},"country":{"type":"string","description":"País de la dirección fiscal del contacto (proveedor) (Formato ISO 3166-1 Alpha-2)","nullable":true},"zipcode":{"type":"string","description":"Código postal de la dirección fiscal del contacto (proveedor)","nullable":true},"taxIncludedPrices":{"type":"boolean"},"title":{"type":"string"},"correctedBill":{"type":"string"},"manualTotals":{"type":"boolean"},"task":{"type":"string"},"installments":{"$ref":"#/components/schemas/Installments"},"draft":{"type":"boolean","description":"Indica si la factura es provisional (true) o definitiva (false). Cuando creamos una factura si no se indica la factura se creará como provisional o definitiva según la configuración de la empresa."},"voided":{"type":"boolean","description":"Indica si es una factura anulada.\n\nNOTA: Solo pueden anularse facturas en empresas que soportan el registro de facturas de compra en sistemas externos, en otro caso debe usarse la opción de borrado."},"ticketbai":{"$ref":"#/components/schemas/BillMainTicketbai"},"counterpart":{"$ref":"#/components/schemas/DocumentCounterpart"},"customFields":{"type":"object","additionalProperties":{"type":"string"},"description":"Valores de campos personalizados"}}},"meta":{"type":"object","title":"BillMeta","description":"Metadatos internos de la factura","additionalProperties":false,"properties":{"automationSource":{"type":"string"},"ticketbai":{"$ref":"#/components/schemas/BillMetaTicketbai"}},"readOnly":true}},"description":"Versión simplificada de la factura de compra o ticket sin los elementos que calcula automáticamente FacturaDirecta"},"Contact":{"type":"object","title":"Contact","required":["main","type","uuid"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["contact"]},"uuid":{"type":"string"},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}},"import":{"$ref":"#/components/schemas/ImportInformation"},"main":{"type":"object","title":"ContactMain","required":["country","name","currency","accounts"],"additionalProperties":false,"properties":{"title":{"type":"string","description":"Atributo \"Mostrar como\" o \"Nombre comercial\".\n\t\t\t\t\t\nPuedes indicar aquí el nombre comercial del contacto o el nombre fiscal con algún añadido si lo necesitas para identificarlo correctamente.\n\nEste campo se genera automáticamente a partir del nombre fiscal si se guarda el contacto sin este valor indicado."},"name":{"type":"string","description":"Nombre fiscal del contacto para empresas o primer nombre para personas físicas"},"surname":{"type":"string","description":"Apellidos del contacto. Debe indicarse solo para personas físicas"},"email":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string","description":"Detalles de la dirección: calle, número, anexos..."},"zipcode":{"type":"string","description":"Código postal"},"city":{"type":"string","description":"Localidad"},"region":{"type":"string","description":"Provincia o región.\n\nPara contactos españoles se calcula automáticamente a partir del código postal."},"country":{"type":"string","description":"País de la dirección fiscal del contacto (Formato ISO 3166-1 Alpha-2)"},"fullAddress":{"type":"string","description":"Dirección completa en formato texto libre.\n\nPara contactos españoles: Se calcula automáticamente a partir de los campos estructurados (address, zipcode, city). No rellenar manualmente.\nPara otros países: Se recomienda usar los campos estructurados (address, zipcode, city, region) en lugar de fullAddress."},"fiscalId":{"type":"string","description":"Identificador fiscal del contacto.\n\nPara contatos españoles se valida el formato del mismo y debe ser introducido sin ningún separador ni caracter para dar formato"},"fiscalIdCountry":{"type":"string","description":"País del identificador fiscal (Formato ISO 3166-1 Alpha-2).\n\nEste campo permite especificar el país asociado al identificador fiscal independientemente del país de la dirección del contacto."},"notes":{"type":"string"},"website":{"type":"string"},"contaplusCode":{"type":"string"},"clientCode":{"type":"string"},"providerCode":{"type":"string"},"accounts":{"type":"object","additionalProperties":false,"title":"Accounts","description":"Cuentas contables del contacto en los diferentes roles:\n\n* client: Cuenta cuando actúa como cliente (habitualmente 430000)\n* clientCredit: Cuenta de anticipos cuando actúa como cliente (habitualmente 438000)\n* provider: Cuenta cuando actúa como proveedor (habitualmente 400000 o 410000)\n* providerCredit: Cuenta de anticipos cuando actúa como proveedor (habitualmente 407000)\n* employee: Cuenta cuanto actúa como empleado (habitualmente 465000)\n* employeeCredit: Cuenta de anticipos cuanto actúa como empleado (habitualmente 460000)\n* providerDefaultPurchases: Cuenta de gastos de un proveedor (habitualmente 600000)\n\nLas cuentas se deben indicar por pares: si se indica la cuenta principal (client, provider o employee) se recomienda indicar también la cuenta de anticipos correspondiente (clientCredit, providerCredit o employeeCredit).\n\n**Comportamiento en la API pública al crear un contacto:**\n* Si se envía vacío o no se indica, el contacto se creará como cliente con las cuentas contables por defecto de la empresa.\n* Si solo se indica la cuenta principal con el prefijo esperado (43 para client, 40/41 para provider, 46 para employee), la cuenta de anticipos se completará automáticamente con el valor por defecto de la empresa.","properties":{"client":{"$ref":"#/components/schemas/AccountCode"},"provider":{"$ref":"#/components/schemas/AccountCode"},"clientCredit":{"$ref":"#/components/schemas/AccountCode"},"providerCredit":{"$ref":"#/components/schemas/AccountCode"},"employee":{"$ref":"#/components/schemas/AccountCode"},"employeeCredit":{"$ref":"#/components/schemas/AccountCode"},"providerDefaultPurchases":{"$ref":"#/components/schemas/AccountCode"}}},"currency":{"type":"string","description":"Moneda por defecto del contacto (Formato ISO 4217)"},"externalId":{"type":"string","description":"ID externo del contacto. Debe ser único entre todos los contactos de la empresa"},"vatEU":{"type":"string","description":"OBSOLETO: Usar fiscalId con fiscalIdType=\"02\" para identificadores intracomunitarios.\n\nEste campo se mantiene por compatibilidad. Para nuevos contactos intracomunitarios, usar fiscalId junto con fiscalIdType=\"02\" (NIF-IVA intracomunitario)."},"vatEUValidation":{"type":"object","title":"VATEUValidation","description":"Información de validación del NIF intracomunitario","additionalProperties":false,"required":["valid","date"],"properties":{"valid":{"type":"boolean","description":"Indica si el NIF intracomunitario ha sido validado y es válido"},"serviceAvailable":{"type":"boolean","description":"Cuando el NIF intracomunitario no está indicado como válido este atributo es true cuando el NIF no se pudo validar porque el servicio de validación no estaba disponible en el momento de hacer la validación, el NIF podría ser válido en ese caso pero no se ha verificado."},"date":{"type":"string","format":"date-time","description":"Fecha y hora en la que se hizo la comprobación de la validez del NIF intracomunitario."},"vatEU":{"type":"string","description":"El NIF intracomunitario que fue validado. Permite detectar si el vatEU actual del contacto coincide con el que se validó."}}},"fiscalIdType":{"type":"string","enum":["NIF","02","03","04","05","06","07"],"description":"Tipo de identificador fiscal para VeriFactu.\n\nPermite especificar el tipo de documento de identificación fiscal del contacto según los códigos de VeriFactu:\n* NIF: NIF español (solo para contactos con país ES y NIF válido)\n* 02: NIF-IVA intracomunitario\n* 03: Pasaporte\n* 04: Documento oficial de identificación expedido por el país de residencia\n* 05: Certificado de residencia fiscal\n* 06: Otro documento probatorio\n* 07: No censado (solo para contactos con país ES)\n\nSi no se especifica, se infiere automáticamente del fiscalId y vatEU."},"sendPaymentMethod":{"type":"string","nullable":true},"receivePaymentMethod":{"type":"string","nullable":true},"receiveDueDateDelta":{"type":"integer","minimum":1},"receiveMonthDay":{"type":"number","description":"Primer día preferido de pago del cliente.\n\nValores especiales: \n* 0: Cualquier día\n* -1: Último día del mes\n","minimum":-1,"maximum":28},"receiveMonthDay2":{"type":"number","minimum":-1,"maximum":28,"description":"Segundo día preferido de pago del cliente.\n\nValores especiales: \n* 0: Cualquier día\n* -1: Último día del mes\n"},"dir3":{"$ref":"#/components/schemas/ContactMainDir3"},"endCustomer":{"type":"boolean"},"fiscalPositions":{"type":"object","additionalProperties":false,"title":"FiscalPositions","description":"Posiciones fiscales del contacto en los diferentes roles:\n\n* sales: Posición fiscal cuando actúa como cliente\n* purchases: Posición fiscal cuando actúa como proveedor","properties":{"sales":{"$ref":"#/components/schemas/FiscalPosition"},"purchases":{"$ref":"#/components/schemas/FiscalPosition"}}},"facturaeReceiver":{"type":"boolean","description":"Solo disponible para contactos con rol de cliente, indica que acepta facturas en formato Facturae"},"countryFormatISO":{"type":"boolean","description":"Permite mostrar el código ISO del país en lugar del nombre en los datos de facturación"},"persons":{"type":"array","title":"ContactPersons","description":"Interlocutores asociados al contacto","items":{"$ref":"#/components/schemas/ContactPerson"}},"addresses":{"type":"array","title":"ContactAddresses","description":"Direcciones asociadas al contacto","items":{"$ref":"#/components/schemas/ContactAddress"}},"customFields":{"type":"object","additionalProperties":{"type":"string"},"description":"Valores de campos personalizados"}}},"meta":{"type":"object","title":"ContactMeta","description":"Metadatos internos del contacto","additionalProperties":false,"properties":{"nifValidation":{"$ref":"#/components/schemas/ContactMetaNifValidation"}}}}},"ContactAddress":{"type":"object","title":"ContactAddress","description":"Dirección asociada al contacto","additionalProperties":false,"required":["id","label","country"],"properties":{"id":{"type":"integer","minimum":1,"description":"Identificador interno de la dirección"},"label":{"type":"string","description":"Título o descripción de la dirección"},"address":{"type":"string","description":"Detalles de la dirección: calle, número, anexos..."},"zipcode":{"type":"string","description":"Código postal"},"city":{"type":"string","description":"Localidad"},"region":{"type":"string","description":"Provincia o región"},"country":{"type":"string","description":"País de la dirección (Formato ISO 3166-1 Alpha-2)"},"fullAddress":{"type":"string","description":"Dirección completa en formato libre"},"uses":{"$ref":"#/components/schemas/ContactUses","description":"Marcadores de uso preferente para esta dirección (una dirección por uso)."}}},"ContactMainDir3":{"type":"object","title":"ContactMainDir3","additionalProperties":false,"properties":{"fiscal":{"$ref":"#/components/schemas/ContactMainDir3Centre"},"receptor":{"$ref":"#/components/schemas/ContactMainDir3Centre"},"pagador":{"$ref":"#/components/schemas/ContactMainDir3Centre"},"comprador":{"$ref":"#/components/schemas/ContactMainDir3Centre"}}},"ContactMainDir3Centre":{"type":"object","title":"ContactMainDir3Centre","additionalProperties":false,"properties":{"centreCode":{"type":"string","maxLength":10}}},"ContactMetaNifValidation":{"type":"object","title":"ContactMetaNifValidation","additionalProperties":false,"required":["nif","name","valid","resultAEAT","validationDate"],"properties":{"nif":{"type":"string","description":"NIF usado para la validación"},"name":{"type":"string","description":"Nombre usado para la validación"},"valid":{"type":"boolean","description":"Indica si el NIF ha sido identificado correctamente por la AEAT y lo damos por válido para el nombre actual del contacto"},"resultAEAT":{"type":"string","enum":["identificado","identificado-baja","identificado-revocado","no identificado-similar","no identificado"],"description":"Indica el resultado de validación de la AEAT"},"validationDate":{"type":"string","format":"date-time","description":"Fecha y hora en la que se hizo la comprobación de la validez del NIF"},"validatedName":{"type":"string","description":"Nombre devuelto por el servicio de validación cuando el NIF es válido"},"validatedNameScore":{"type":"number","description":"Grado de similitud para el nombre de una empresa devuelto por el servicio de validación cuando el NIF es válido comparado con el enviado para validar"}}},"ContactPerson":{"type":"object","title":"ContactPerson","description":"Interlocutor asociado al contacto","additionalProperties":false,"required":["id","name"],"properties":{"id":{"type":"integer","minimum":1,"description":"Identificador interno de la persona"},"name":{"type":"string","description":"Nombre del interlocutor"},"surname":{"type":"string","description":"Apellidos del interlocutor"},"jobTitle":{"type":"string","description":"Cargo o función del interlocutor"},"emails":{"type":"array","description":"Direcciones de correo electrónico del interlocutor","items":{"type":"string"},"uniqueItems":true},"phones":{"type":"array","description":"Teléfonos asociados al interlocutor","items":{"type":"string"},"uniqueItems":true},"uses":{"$ref":"#/components/schemas/ContactUses","description":"Marcadores de uso preferente para este interlocutor (por ejemplo envío de factura). Pueden existir varios interlocutores con el mismo uso."}}},"ContactResponse":{"type":"object","title":"ContactResponse","required":["content","tags","creationDate","modificationDate"],"additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Contact"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"},"related":{"type":"object","title":"ContactRelated","additionalProperties":false,"properties":{"objects":{"type":"object","title":"ContactRelatedObjects","description":"Mapa de objetos relacionados solicitados, cada clave de este objeto es el id de un objeto relacionado y el valor es el contenido del mismo","properties":{"object_id":{"anyOf":[{"$ref":"#/components/schemas/PaymentMethodResponse"}]}}},"paymentMethods":{"type":"array","title":"ContactPaymentMethods","description":"Array de ids de los métodos de pago de este contacto. Los objetos completos estarán disponibles en related.objects[id]","items":{"type":"string"}}}}}},"ContactUse":{"type":"string","title":"ContactUse","enum":["invoice","estimate","deliveryNote"],"description":"Identifica los diferentes usos para los que se puede marcar una persona o dirección."},"ContactUses":{"type":"array","title":"ContactUses","description":"Lista de usos preferidos para los que se empleará esta persona o dirección.","items":{"$ref":"#/components/schemas/ContactUse"},"uniqueItems":true,"minItems":1},"ContactWrite":{"type":"object","title":"ContactWrite","required":["main","type"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["contact"]},"uuid":{"type":"string"},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}},"import":{"$ref":"#/components/schemas/ImportInformation"},"main":{"type":"object","title":"ContactMain","required":["country","name","currency","accounts"],"additionalProperties":false,"properties":{"title":{"type":"string","description":"Atributo \"Mostrar como\" o \"Nombre comercial\".\n\t\t\t\t\t\nPuedes indicar aquí el nombre comercial del contacto o el nombre fiscal con algún añadido si lo necesitas para identificarlo correctamente.\n\nEste campo se genera automáticamente a partir del nombre fiscal si se guarda el contacto sin este valor indicado."},"name":{"type":"string","description":"Nombre fiscal del contacto para empresas o primer nombre para personas físicas"},"surname":{"type":"string","description":"Apellidos del contacto. Debe indicarse solo para personas físicas"},"email":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string","description":"Detalles de la dirección: calle, número, anexos..."},"zipcode":{"type":"string","description":"Código postal"},"city":{"type":"string","description":"Localidad"},"region":{"type":"string","description":"Provincia o región.\n\nPara contactos españoles se calcula automáticamente a partir del código postal."},"country":{"type":"string","description":"País de la dirección fiscal del contacto (Formato ISO 3166-1 Alpha-2)"},"fullAddress":{"type":"string","description":"Dirección completa en formato texto libre.\n\nPara contactos españoles: Se calcula automáticamente a partir de los campos estructurados (address, zipcode, city). No rellenar manualmente.\nPara otros países: Se recomienda usar los campos estructurados (address, zipcode, city, region) en lugar de fullAddress."},"fiscalId":{"type":"string","description":"Identificador fiscal del contacto.\n\nPara contatos españoles se valida el formato del mismo y debe ser introducido sin ningún separador ni caracter para dar formato"},"fiscalIdCountry":{"type":"string","description":"País del identificador fiscal (Formato ISO 3166-1 Alpha-2).\n\nEste campo permite especificar el país asociado al identificador fiscal independientemente del país de la dirección del contacto."},"notes":{"type":"string"},"website":{"type":"string"},"contaplusCode":{"type":"string"},"clientCode":{"type":"string"},"providerCode":{"type":"string"},"accounts":{"type":"object","additionalProperties":false,"title":"Accounts","description":"Cuentas contables del contacto en los diferentes roles:\n\n* client: Cuenta cuando actúa como cliente (habitualmente 430000)\n* clientCredit: Cuenta de anticipos cuando actúa como cliente (habitualmente 438000)\n* provider: Cuenta cuando actúa como proveedor (habitualmente 400000 o 410000)\n* providerCredit: Cuenta de anticipos cuando actúa como proveedor (habitualmente 407000)\n* employee: Cuenta cuanto actúa como empleado (habitualmente 465000)\n* employeeCredit: Cuenta de anticipos cuanto actúa como empleado (habitualmente 460000)\n* providerDefaultPurchases: Cuenta de gastos de un proveedor (habitualmente 600000)\n\nLas cuentas se deben indicar por pares: si se indica la cuenta principal (client, provider o employee) se recomienda indicar también la cuenta de anticipos correspondiente (clientCredit, providerCredit o employeeCredit).\n\n**Comportamiento en la API pública al crear un contacto:**\n* Si se envía vacío o no se indica, el contacto se creará como cliente con las cuentas contables por defecto de la empresa.\n* Si solo se indica la cuenta principal con el prefijo esperado (43 para client, 40/41 para provider, 46 para employee), la cuenta de anticipos se completará automáticamente con el valor por defecto de la empresa.","properties":{"client":{"$ref":"#/components/schemas/AccountCode"},"provider":{"$ref":"#/components/schemas/AccountCode"},"clientCredit":{"$ref":"#/components/schemas/AccountCode"},"providerCredit":{"$ref":"#/components/schemas/AccountCode"},"employee":{"$ref":"#/components/schemas/AccountCode"},"employeeCredit":{"$ref":"#/components/schemas/AccountCode"},"providerDefaultPurchases":{"$ref":"#/components/schemas/AccountCode"}}},"currency":{"type":"string","description":"Moneda por defecto del contacto (Formato ISO 4217)"},"externalId":{"type":"string","description":"ID externo del contacto. Debe ser único entre todos los contactos de la empresa"},"vatEU":{"type":"string","description":"OBSOLETO: Usar fiscalId con fiscalIdType=\"02\" para identificadores intracomunitarios.\n\nEste campo se mantiene por compatibilidad. Para nuevos contactos intracomunitarios, usar fiscalId junto con fiscalIdType=\"02\" (NIF-IVA intracomunitario)."},"vatEUValidation":{"type":"object","title":"VATEUValidation","description":"Información de validación del NIF intracomunitario","additionalProperties":false,"required":["valid","date"],"properties":{"valid":{"type":"boolean","description":"Indica si el NIF intracomunitario ha sido validado y es válido"},"serviceAvailable":{"type":"boolean","description":"Cuando el NIF intracomunitario no está indicado como válido este atributo es true cuando el NIF no se pudo validar porque el servicio de validación no estaba disponible en el momento de hacer la validación, el NIF podría ser válido en ese caso pero no se ha verificado."},"date":{"type":"string","format":"date-time","description":"Fecha y hora en la que se hizo la comprobación de la validez del NIF intracomunitario."},"vatEU":{"type":"string","description":"El NIF intracomunitario que fue validado. Permite detectar si el vatEU actual del contacto coincide con el que se validó."}}},"fiscalIdType":{"type":"string","enum":["NIF","02","03","04","05","06","07"],"description":"Tipo de identificador fiscal para VeriFactu.\n\nPermite especificar el tipo de documento de identificación fiscal del contacto según los códigos de VeriFactu:\n* NIF: NIF español (solo para contactos con país ES y NIF válido)\n* 02: NIF-IVA intracomunitario\n* 03: Pasaporte\n* 04: Documento oficial de identificación expedido por el país de residencia\n* 05: Certificado de residencia fiscal\n* 06: Otro documento probatorio\n* 07: No censado (solo para contactos con país ES)\n\nSi no se especifica, se infiere automáticamente del fiscalId y vatEU."},"sendPaymentMethod":{"type":"string","nullable":true},"receivePaymentMethod":{"type":"string","nullable":true},"receiveDueDateDelta":{"type":"integer","minimum":1},"receiveMonthDay":{"type":"number","description":"Primer día preferido de pago del cliente.\n\nValores especiales: \n* 0: Cualquier día\n* -1: Último día del mes\n","minimum":-1,"maximum":28},"receiveMonthDay2":{"type":"number","minimum":-1,"maximum":28,"description":"Segundo día preferido de pago del cliente.\n\nValores especiales: \n* 0: Cualquier día\n* -1: Último día del mes\n"},"dir3":{"$ref":"#/components/schemas/ContactMainDir3"},"endCustomer":{"type":"boolean"},"fiscalPositions":{"type":"object","additionalProperties":false,"title":"FiscalPositions","description":"Posiciones fiscales del contacto en los diferentes roles:\n\n* sales: Posición fiscal cuando actúa como cliente\n* purchases: Posición fiscal cuando actúa como proveedor","properties":{"sales":{"$ref":"#/components/schemas/FiscalPosition"},"purchases":{"$ref":"#/components/schemas/FiscalPosition"}}},"facturaeReceiver":{"type":"boolean","description":"Solo disponible para contactos con rol de cliente, indica que acepta facturas en formato Facturae"},"countryFormatISO":{"type":"boolean","description":"Permite mostrar el código ISO del país en lugar del nombre en los datos de facturación"},"persons":{"type":"array","title":"ContactPersons","description":"Interlocutores asociados al contacto","items":{"$ref":"#/components/schemas/ContactPerson"}},"addresses":{"type":"array","title":"ContactAddresses","description":"Direcciones asociadas al contacto","items":{"$ref":"#/components/schemas/ContactAddress"}},"customFields":{"type":"object","additionalProperties":{"type":"string"},"description":"Valores de campos personalizados"}}},"meta":{"type":"object","title":"ContactMeta","description":"Metadatos internos del contacto","additionalProperties":false,"properties":{"nifValidation":{"$ref":"#/components/schemas/ContactMetaNifValidation"}}}},"description":"Versión simplificada del contacto con los elementos que calcula automáticamente FacturaDirecta marcados como no obligatorios"},"CreationDate":{"type":"string","title":"CreationDate","description":"Fecha de creación del objeto en el sistema (Formato ISO 8601 con representación de timepo en UTC: \"YYYY-MM-DDTHH:mm:ss.sssZ\")","format":"date-time"},"DeliveryNote":{"type":"object","title":"DeliveryNote","required":["uuid","type","main"],"additionalProperties":false,"properties":{"uuid":{"type":"string"},"type":{"type":"string","enum":["deliveryNote"]},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}},"main":{"type":"object","title":"DeliveryNoteMain","additionalProperties":false,"properties":{"title":{"type":"string","description":"Título del documento para identificarlo en los listados, se calcula automáticamente"},"fiscalPosition":{"$ref":"#/components/schemas/FiscalPosition"},"account":{"$ref":"#/components/schemas/AccountCode"},"baseState":{"type":"string","enum":["pending","delivered","closed","rejected"],"description":"Estado base del albarán, este es el estado que se elige en el propio documento. El estado final del mismo puede ser distinto si existen documentos relacionados"},"deliveredDate":{"type":"string","format":"date"},"deliveredTo":{"type":"string"},"rejectedDate":{"type":"string","format":"date"},"rejectedBy":{"type":"string"},"address":{"type":"string"},"country":{"type":"string","description":"País de la dirección fiscal del contacto (Formato ISO 3166-1 Alpha-2)","nullable":true},"zipcode":{"type":"string","nullable":true},"contact":{"type":"string","nullable":true},"currency":{"type":"string","description":"Moneda de los importes del albarán (Formato ISO 4217)"},"date":{"type":"string","format":"date","nullable":true},"docNumber":{"$ref":"#/components/schemas/DocNumber"},"dueDate":{"type":"string","format":"date","nullable":true},"emails":{"type":"string"},"emailsCc":{"type":"string"},"emailsBcc":{"type":"string"},"exchangeRate":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Tipo de cambio de la moneda original respecto a la moneda de la empresa"},"lines":{"type":"array","title":"DeliveryNoteLines","items":{"$ref":"#/components/schemas/DeliveryNoteMainLine"}},"lineTotalDecimals":{"type":"number","minimum":2,"maximum":6,"multipleOf":1},"notes":{"type":"string","description":"Notas visibles del albarán","nullable":true},"showProductColumn":{"type":"boolean"},"showQuantityColumn":{"type":"boolean"},"showDiscountColumn":{"type":"boolean"},"linesTotal":{"type":"number","description":"Importe total de las líneas. Calculado automáticamente"},"taxes":{"$ref":"#/components/schemas/SalesDocumentTaxes","readOnly":true},"taxIncludedPrices":{"type":"boolean"},"manualTotals":{"type":"boolean"},"totalBeforeTaxes":{"type":"number","description":"Importe total antes de impuestos. Calculado automáticamente"},"companyCurrencyTotalBeforeTaxes":{"type":"number","description":"Importe total antes de impuestos en la moneda de la contabilidad. Calculado automáticamente"},"paymentMethod":{"type":"string","nullable":true},"theme":{"type":"string"},"total":{"type":"number"},"companyCurrencyTotal":{"type":"number","description":"Importe total en la moneda de la contabilidad. Calculado automáticamente"},"internalNotes":{"type":"string","description":"Notas internas del albarán, no serán visibles en el documento impreso"},"taxCalculationMode":{"type":"string","enum":["total","lines"]},"counterpart":{"$ref":"#/components/schemas/DocumentCounterpart"},"customFields":{"type":"object","additionalProperties":{"type":"string"},"description":"Valores de campos personalizados"}},"required":["account","currency","baseState","date","docNumber","dueDate","fiscalPosition","exchangeRate","lines","lineTotalDecimals","linesTotal","taxes","taxIncludedPrices","theme","total"]},"meta":{"type":"object","title":"DeliveryNoteMeta","description":"Metadatos internos del albarán","additionalProperties":false,"properties":{"automationSource":{"type":"string"}},"readOnly":true},"import":{"$ref":"#/components/schemas/ImportInformation"}}},"DeliveryNoteMainLine":{"type":"object","title":"DeliveryNoteMainLine","additionalProperties":false,"properties":{"origin":{"type":"string","description":"Indica aquí el ID del documento de origen de esta línea si proviene de otro documento para que los documentos queden enlazados","nullable":true},"account":{"$ref":"#/components/schemas/AccountCode"},"document":{"type":"string","description":"Si esta línea se ha generado a partir de un producto puedes indicar aquí su ID"},"discount":{"type":"number"},"discountRate":{"type":"number"},"lineTotal":{"type":"number"},"quantity":{"type":"number"},"tax":{"type":"array","title":"DeliveryNoteLineTaxes","items":{"$ref":"#/components/schemas/TaxId"}},"text":{"type":"string"},"unitPrice":{"type":"number"}},"required":["account","discount","discountRate","lineTotal","quantity","text","unitPrice"]},"DeliveryNoteMainLineWrite":{"type":"object","title":"DeliveryNoteMainLineWrite","additionalProperties":false,"properties":{"origin":{"type":"string","description":"Indica aquí el ID del documento de origen de esta línea si proviene de otro documento para que los documentos queden enlazados","nullable":true},"account":{"$ref":"#/components/schemas/AccountCode"},"document":{"type":"string","description":"Si esta línea se ha generado a partir de un producto puedes indicar aquí su ID"},"discount":{"type":"number"},"discountRate":{"type":"number"},"lineTotal":{"type":"number"},"quantity":{"type":"number"},"tax":{"type":"array","title":"DeliveryNoteLineTaxes","items":{"$ref":"#/components/schemas/TaxId"}},"text":{"type":"string"},"unitPrice":{"type":"number"}},"required":["quantity","text","unitPrice"],"description":"Versión de la línea de albarán para creación del documento"},"DeliveryNoteResponse":{"type":"object","title":"DeliveryNoteResponse","required":["content","tags","creationDate","modificationDate"],"additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/DeliveryNote"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"},"related":{"type":"object","title":"DeliveryNoteRelated","additionalProperties":false,"properties":{"objects":{"type":"object","title":"DeliveryNoteRelatedObjects","description":"Mapa de objetos relacionados solicitados, cada clave de este objeto es el id de un objeto relacionado y el valor es el contenido del mismo","properties":{"object_id":{"anyOf":[{"$ref":"#/components/schemas/TaxDefinition"}]}}}}}}},"DeliveryNoteWrite":{"type":"object","title":"DeliveryNoteWrite","required":["type","main"],"additionalProperties":false,"properties":{"uuid":{"type":"string"},"type":{"type":"string","enum":["deliveryNote"]},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentWrite"},"maxItems":10},"main":{"type":"object","title":"DeliveryNoteMain","additionalProperties":false,"properties":{"title":{"type":"string","description":"Título del documento para identificarlo en los listados, se calcula automáticamente"},"fiscalPosition":{"$ref":"#/components/schemas/FiscalPosition"},"account":{"$ref":"#/components/schemas/AccountCode"},"baseState":{"type":"string","enum":["pending","delivered","closed","rejected"],"description":"Estado base del albarán, este es el estado que se elige en el propio documento. El estado final del mismo puede ser distinto si existen documentos relacionados"},"deliveredDate":{"type":"string","format":"date"},"deliveredTo":{"type":"string"},"rejectedDate":{"type":"string","format":"date"},"rejectedBy":{"type":"string"},"address":{"type":"string"},"country":{"type":"string","description":"País de la dirección fiscal del contacto (Formato ISO 3166-1 Alpha-2)","nullable":true},"zipcode":{"type":"string","nullable":true},"contact":{"type":"string","nullable":true},"currency":{"type":"string","description":"Moneda de los importes del albarán (Formato ISO 4217)"},"date":{"type":"string","format":"date","nullable":true},"docNumber":{"$ref":"#/components/schemas/DocNumberWrite"},"dueDate":{"type":"string","format":"date","nullable":true},"emails":{"type":"string"},"emailsCc":{"type":"string"},"emailsBcc":{"type":"string"},"exchangeRate":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Tipo de cambio de la moneda original respecto a la moneda de la empresa"},"lines":{"type":"array","title":"DeliveryNoteLines","items":{"$ref":"#/components/schemas/DeliveryNoteMainLineWrite"}},"lineTotalDecimals":{"type":"number","minimum":2,"maximum":6,"multipleOf":1},"notes":{"type":"string","description":"Notas visibles del albarán","nullable":true},"showProductColumn":{"type":"boolean"},"showQuantityColumn":{"type":"boolean"},"showDiscountColumn":{"type":"boolean"},"linesTotal":{"type":"number","description":"Importe total de las líneas. Calculado automáticamente"},"taxes":{"$ref":"#/components/schemas/SalesDocumentTaxes","readOnly":true},"taxIncludedPrices":{"type":"boolean"},"totalBeforeTaxes":{"type":"number","description":"Importe total antes de impuestos. Calculado automáticamente"},"companyCurrencyTotalBeforeTaxes":{"type":"number","description":"Importe total antes de impuestos en la moneda de la contabilidad. Calculado automáticamente"},"paymentMethod":{"type":"string","nullable":true},"theme":{"type":"string"},"total":{"type":"number"},"companyCurrencyTotal":{"type":"number","description":"Importe total en la moneda de la contabilidad. Calculado automáticamente"},"internalNotes":{"type":"string","description":"Notas internas del albarán, no serán visibles en el documento impreso"},"taxCalculationMode":{"type":"string","enum":["total","lines"]},"counterpart":{"$ref":"#/components/schemas/DocumentCounterpart"},"customFields":{"type":"object","additionalProperties":{"type":"string"},"description":"Valores de campos personalizados"}},"required":["baseState","docNumber","lines"]},"meta":{"type":"object","title":"DeliveryNoteMeta","description":"Metadatos internos del albarán","additionalProperties":false,"properties":{"automationSource":{"type":"string"}},"readOnly":true},"import":{"$ref":"#/components/schemas/ImportInformation"}},"description":"Versión simplificada del albarán con los elementos que calcula automáticamente FacturaDirecta marcados como no obligatorios"},"Accounting":{"type":"object","title":"DocumentAccounting","description":"Asiento contable generado por el documento","additionalProperties":false,"properties":{"date":{"type":"string","format":"date","nullable":true},"isMaintenance":{"type":"boolean"},"journalPriority":{"type":"number","description":"Prioridad del asiento contable, determina el orden y tipo de apunte:\n\n- 1: Inicio de contabilidad / Apertura periodo\n- 2: Contabilidad fake previa al inicio\n- 3: Asiento de traspaso de beneficios en la apertura\n- 100: Asiento estándar\n- 970: Amortizaciones\n- 980: Regularización moneda extranjera\n- 990: Cierre grupos 6 y 7\n- 999: Cierre del periodo","enum":[1,2,3,100,970,980,990,999]},"lines":{"type":"array","title":"DocumentAccountingLines","items":{"$ref":"#/components/schemas/AccountingLine"}}},"required":["date","lines"]},"AccountingLine":{"type":"object","title":"DocumentAccountingLine","description":"Apunte contable individual","additionalProperties":false,"properties":{"account":{"$ref":"#/components/schemas/AccountCode"},"document":{"type":"string","description":"Referencia al documento que define la subcuenta de este apunte","nullable":true},"debit":{"type":"number","description":"Importe en el DEBE en la moneda de la contabilidad de la empresa","nullable":true},"credit":{"type":"number","description":"Importe en el HABER en la moneda de la contabilidad de la empresa","nullable":true},"currencyDebit":{"type":"number","description":"Importe en el DEBE en la moneda original del apunte","nullable":true},"currencyCredit":{"type":"number","description":"Importe en el HABER en la moneda original del apunte","nullable":true},"currency":{"type":"string","description":"Moneda original del apunte (Formato ISO 4217)"}},"required":["account","debit","credit","currencyDebit","currencyCredit","currency"]},"Books":{"type":"object","title":"DocumentBooks","additionalProperties":false,"properties":{"111":{"$ref":"#/components/schemas/BooksCellModel"},"115":{"$ref":"#/components/schemas/BooksCellModel"},"130":{"$ref":"#/components/schemas/BooksCellModel"},"180":{"$ref":"#/components/schemas/BooksCellModel"},"190":{"$ref":"#/components/schemas/BooksCellModel"},"303":{"$ref":"#/components/schemas/BooksCellModel"},"347":{"$ref":"#/components/schemas/BooksCellModel"},"349":{"$ref":"#/components/schemas/BooksCellModel"},"390":{"$ref":"#/components/schemas/BooksCellModel"}}},"BooksCellModel":{"type":"object","title":"DocumentBooksCellModel","required":["manual","date","cells"],"additionalProperties":false,"properties":{"manual":{"type":"boolean"},"date":{"type":"string","format":"date"},"cells":{"type":"object","title":"BookCells","description":"Datos de las distintas celdas que componen el modelo","additionalProperties":true}}},"DocumentCounterpart":{"type":"object","title":"DocumentCounterpart","description":"Datos de la contraparte del documento cuando difieren del contacto asociado","additionalProperties":false,"properties":{"name":{"type":"string","description":"Nombre fiscal del contacto para empresas o primer nombre para personas físicas"},"surname":{"type":"string","description":"Apellidos del contacto. Debe indicarse solo para personas físicas"},"fiscalIdType":{"type":"string","enum":["NIF","02","03","04","05","06","07"],"description":"Tipo de identificador fiscal según códigos VeriFactu"},"fiscalId":{"type":"string","description":"Identificador fiscal de la contraparte"},"fiscalIdCountry":{"type":"string","description":"País del identificador fiscal de la contraparte (Formato ISO 3166-1 Alpha-2)"}}},"DocNumber":{"type":"object","title":"DocumentNumber","additionalProperties":false,"required":["series","formattedSeries"],"properties":{"number":{"type":"number","description":"Número secuencial del documento","nullable":true},"series":{"type":"string","description":"Serie del documento"},"formattedSeries":{"type":"string","description":"Plantilla de la serie del documento.\n\nSe pueden usar los siguientes valores:\n* \\#\\# para indicar el año actual con 2 dígitos\n* \\#\\#\\#\\# para indicar el año actual con 4 dígitos"}}},"DocNumberWrite":{"type":"object","title":"DocumentNumber","additionalProperties":false,"required":["series"],"properties":{"number":{"type":"number","description":"Número secuencial del documento","nullable":true},"series":{"type":"string","description":"Serie del documento"},"formattedSeries":{"type":"string","description":"Plantilla de la serie del documento.\n\nSe pueden usar los siguientes valores:\n* \\#\\# para indicar el año actual con 2 dígitos\n* \\#\\#\\#\\# para indicar el año actual con 4 dígitos"}}},"PurchasesDocumentTaxes":{"title":"DocumentTaxesPurchases","type":"array","minItems":0,"items":{"type":"object","title":"DocumentTaxPurchases","additionalProperties":false,"properties":{"id":{"type":"string"},"base":{"type":"number"},"companyCurrencyBase":{"type":"number"},"amount":{"type":"number"},"companyCurrencyAmount":{"type":"number"},"nonDeductible":{"type":"boolean","enum":[true]}},"required":["id","base","amount","companyCurrencyAmount","companyCurrencyBase"]}},"SalesDocumentTaxes":{"type":"array","title":"DocumentTaxesSales","minItems":0,"items":{"type":"object","title":"DocumentTaxSales","additionalProperties":false,"properties":{"id":{"type":"string"},"base":{"type":"number"},"companyCurrencyBase":{"type":"number"},"amount":{"type":"number"},"companyCurrencyAmount":{"type":"number"}},"required":["id","base","amount","companyCurrencyAmount","companyCurrencyBase"]}},"Estimate":{"type":"object","title":"Estimate","required":["uuid","type","main"],"additionalProperties":false,"properties":{"uuid":{"type":"string"},"type":{"type":"string","enum":["estimate"]},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}},"main":{"type":"object","title":"EstimateMain","additionalProperties":false,"properties":{"title":{"type":"string","description":"Título del documento para identificarlo en los listados, se calcula automáticamente"},"baseState":{"type":"string","enum":["pending","closed","accepted","rejected"],"description":"Estado base del presupuesto, este es el estado que se elige en el propio documento. El estado final del mismo puede ser distinto si existen documentos relacionados"},"acceptedDate":{"type":"string","format":"date"},"acceptedBy":{"type":"string"},"rejectedDate":{"type":"string","format":"date"},"rejectedBy":{"type":"string"},"address":{"type":"string"},"country":{"type":"string","description":"País de la dirección fiscal del contacto (Formato ISO 3166-1 Alpha-2)","nullable":true},"zipcode":{"type":"string","nullable":true},"contact":{"type":"string","nullable":true},"account":{"$ref":"#/components/schemas/AccountCode"},"fiscalPosition":{"$ref":"#/components/schemas/FiscalPosition"},"currency":{"type":"string","description":"Moneda de los importes del presupuesto (Formato ISO 4217)"},"date":{"type":"string","format":"date","nullable":true},"docNumber":{"$ref":"#/components/schemas/DocNumber"},"dueDate":{"type":"string","format":"date","nullable":true},"emails":{"type":"string"},"emailsCc":{"type":"string"},"emailsBcc":{"type":"string"},"exchangeRate":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Tipo de cambio de la moneda original respecto a la moneda de la empresa"},"lines":{"type":"array","title":"EstimateLines","items":{"$ref":"#/components/schemas/EstimateMainLine"}},"lineTotalDecimals":{"type":"number","minimum":2,"maximum":6,"multipleOf":1},"notes":{"type":"string","description":"Notas visibles del presupuesto","nullable":true},"showProductColumn":{"type":"boolean"},"showQuantityColumn":{"type":"boolean"},"showDiscountColumn":{"type":"boolean"},"linesTotal":{"type":"number","description":"Importe total de las líneas. Calculado automáticamente"},"taxes":{"$ref":"#/components/schemas/SalesDocumentTaxes","readOnly":true},"taxIncludedPrices":{"type":"boolean"},"manualTotals":{"type":"boolean"},"totalBeforeTaxes":{"type":"number","description":"Importe total antes de impuestos. Calculado automáticamente"},"companyCurrencyTotalBeforeTaxes":{"type":"number","description":"Importe total antes de impuestos en la moneda de la contabilidad. Calculado automáticamente"},"paymentMethod":{"type":"string","nullable":true},"theme":{"type":"string"},"total":{"type":"number"},"companyCurrencyTotal":{"type":"number","description":"Importe total en la moneda de la contabilidad. Calculado automáticamente"},"isProforma":{"type":"boolean"},"internalNotes":{"type":"string","description":"Notas internas del presupuesto, no serán visibles en el documento impreso"},"taxCalculationMode":{"type":"string","enum":["total","lines"]},"counterpart":{"$ref":"#/components/schemas/DocumentCounterpart"},"customFields":{"type":"object","additionalProperties":{"type":"string"},"description":"Valores de campos personalizados"}},"required":["account","currency","baseState","date","docNumber","dueDate","exchangeRate","fiscalPosition","lines","lineTotalDecimals","linesTotal","taxes","taxIncludedPrices","theme","total"]},"meta":{"type":"object","title":"EstimateMeta","description":"Metadatos internos del presupuesto","additionalProperties":false,"properties":{"automationSource":{"type":"string"}},"readOnly":true},"import":{"$ref":"#/components/schemas/ImportInformation"}}},"EstimateMainLine":{"type":"object","title":"EstimateMainLine","additionalProperties":false,"properties":{"account":{"$ref":"#/components/schemas/AccountCode"},"document":{"type":"string","description":"Si esta línea se ha generado a partir de un producto puedes indicar aquí su ID"},"discount":{"type":"number"},"discountRate":{"type":"number"},"lineTotal":{"type":"number"},"quantity":{"type":"number"},"tax":{"type":"array","title":"EstimateLineTaxes","items":{"$ref":"#/components/schemas/TaxId"}},"text":{"type":"string"},"unitPrice":{"type":"number"}},"required":["account","discount","discountRate","lineTotal","quantity","text","unitPrice"]},"EstimateMainLineWrite":{"type":"object","title":"EstimateMainLineWrite","additionalProperties":false,"properties":{"account":{"$ref":"#/components/schemas/AccountCode"},"document":{"type":"string","description":"Si esta línea se ha generado a partir de un producto puedes indicar aquí su ID"},"discount":{"type":"number"},"discountRate":{"type":"number"},"lineTotal":{"type":"number"},"quantity":{"type":"number"},"tax":{"type":"array","title":"EstimateLineTaxes","items":{"$ref":"#/components/schemas/TaxId"}},"text":{"type":"string"},"unitPrice":{"type":"number"}},"required":["quantity","text","unitPrice"],"description":"Versión de la línea de presupuesto para creación del documento"},"EstimateResponse":{"type":"object","title":"EstimateResponse","required":["content","tags","creationDate","modificationDate"],"additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Estimate"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"},"related":{"type":"object","title":"EstimateRelated","additionalProperties":false,"properties":{"objects":{"type":"object","title":"EstimateRelatedObjects","description":"Mapa de objetos relacionados solicitados, cada clave de este objeto es el id de un objeto relacionado y el valor es el contenido del mismo","properties":{"object_id":{"anyOf":[{"$ref":"#/components/schemas/TaxDefinition"}]}}}}}}},"EstimateWrite":{"type":"object","title":"EstimateWrite","required":["type","main"],"additionalProperties":false,"properties":{"uuid":{"type":"string"},"type":{"type":"string","enum":["estimate"]},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentWrite"},"maxItems":10},"main":{"type":"object","title":"EstimateMain","additionalProperties":false,"properties":{"title":{"type":"string","description":"Título del documento para identificarlo en los listados, se calcula automáticamente"},"baseState":{"type":"string","enum":["pending","closed","accepted","rejected"],"description":"Estado base del presupuesto, este es el estado que se elige en el propio documento. El estado final del mismo puede ser distinto si existen documentos relacionados"},"acceptedDate":{"type":"string","format":"date"},"acceptedBy":{"type":"string"},"rejectedDate":{"type":"string","format":"date"},"rejectedBy":{"type":"string"},"address":{"type":"string"},"country":{"type":"string","description":"País de la dirección fiscal del contacto (Formato ISO 3166-1 Alpha-2)","nullable":true},"zipcode":{"type":"string","nullable":true},"contact":{"type":"string","nullable":true},"account":{"$ref":"#/components/schemas/AccountCode"},"fiscalPosition":{"$ref":"#/components/schemas/FiscalPosition"},"currency":{"type":"string","description":"Moneda de los importes del presupuesto (Formato ISO 4217)"},"date":{"type":"string","format":"date","nullable":true},"docNumber":{"$ref":"#/components/schemas/DocNumberWrite"},"dueDate":{"type":"string","format":"date","nullable":true},"emails":{"type":"string"},"emailsCc":{"type":"string"},"emailsBcc":{"type":"string"},"exchangeRate":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Tipo de cambio de la moneda original respecto a la moneda de la empresa"},"lines":{"type":"array","title":"EstimateLines","items":{"$ref":"#/components/schemas/EstimateMainLineWrite"}},"lineTotalDecimals":{"type":"number","minimum":2,"maximum":6,"multipleOf":1},"notes":{"type":"string","description":"Notas visibles del presupuesto","nullable":true},"showProductColumn":{"type":"boolean"},"showQuantityColumn":{"type":"boolean"},"showDiscountColumn":{"type":"boolean"},"linesTotal":{"type":"number","description":"Importe total de las líneas. Calculado automáticamente"},"taxes":{"$ref":"#/components/schemas/SalesDocumentTaxes","readOnly":true},"taxIncludedPrices":{"type":"boolean"},"totalBeforeTaxes":{"type":"number","description":"Importe total antes de impuestos. Calculado automáticamente"},"companyCurrencyTotalBeforeTaxes":{"type":"number","description":"Importe total antes de impuestos en la moneda de la contabilidad. Calculado automáticamente"},"paymentMethod":{"type":"string","nullable":true},"theme":{"type":"string"},"total":{"type":"number"},"companyCurrencyTotal":{"type":"number","description":"Importe total en la moneda de la contabilidad. Calculado automáticamente"},"isProforma":{"type":"boolean"},"internalNotes":{"type":"string","description":"Notas internas del presupuesto, no serán visibles en el documento impreso"},"taxCalculationMode":{"type":"string","enum":["total","lines"]},"counterpart":{"$ref":"#/components/schemas/DocumentCounterpart"},"customFields":{"type":"object","additionalProperties":{"type":"string"},"description":"Valores de campos personalizados"}},"required":["baseState","docNumber","lines"]},"meta":{"type":"object","title":"EstimateMeta","description":"Metadatos internos del presupuesto","additionalProperties":false,"properties":{"automationSource":{"type":"string"}},"readOnly":true},"import":{"$ref":"#/components/schemas/ImportInformation"}},"description":"Versión simplificada del presupuesto con los elementos que calcula automáticamente FacturaDirecta marcados como no obligatorios"},"FiscalPosition":{"type":"string","title":"FiscalPosition","enum":["emp","emp_ic","emp_ic_novies","emp_ex","emp_isp","ind","ind_ic","ind_ex","aut","aut_re","aut_irpf_24","aut_irpf_19","aut_irpf_15","aut_irpf_7","aut_irpf_2","aut_irpf_1","aut_irpf_19_urbano"],"description":"Posición fiscal del contacto\n\n* emp: Empresa nacional (cliente) | Empresa nacional (proveedor)\n* emp_ic: Empresa intracomunitaria (cliente) | Empresa intracomunitaria (proveedor)\n* emp_ic_novies: Empresa intracomunitaria no VIES (cliente) | Empresa intracomunitaria no VIES\t(proveedor)\n* emp_ex: Empresa extracomunitaria (cliente) | Empresa extracomunitaria (proveedor)\n* emp_isp: Empresa nacional a la que emito facturas ISP (cliente) | Empresa nacional que emite facturas ISP (proveedor)\n* ind: Cliente final nacional (cliente)\n* ind_ic: Cliente final intracomunitario (cliente)\n* ind_ex: Cliente final extracomunitario (cliente)\n* aut: Autónomo (cliente) | Autónomo que emite facturas sin retencion (proveedor)\n* aut_re: Autónomo en régimen de Recargo de Equivalencia (cliente)\n* aut_irpf_24: Autónomo que me emite facturas con retencion 24% IRPF\t(proveedor)\n* aut_irpf_19: Autónomo que me emite facturas con retencion 19% IRPF\t(proveedor)\n* aut_irpf_15: Autónomo que me emite facturas con retencion 15% IRPF\t(proveedor)\n* aut_irpf_7: Autónomo que me emite facturas con retencion 7% IRPF\t(proveedor)\n* aut_irpf_2: Autónomo que me emite facturas con retencion 2% IRPF\t(proveedor)\n* aut_irpf_1: Autónomo que me emite facturas con retencion 1% IRPF\t(proveedor)\n* aut_irpf_19_urbano: Persona que me emite facturas con retencion 19% IRPF en concepto de alquiler urbano\t(proveedor)\n"},"ImportInformation":{"type":"object","title":"ImportInformation","description":"Información interna del origen del objeto","required":["from"],"additionalProperties":true,"properties":{"from":{"type":"string","pattern":"^[a-zA_Z]{1}[a-zA-Z0-9_]*$"}}},"InboxAttachment":{"type":"object","title":"InboxAttachment","additionalProperties":false,"required":["name","url","creationTime"],"properties":{"name":{"type":"string","description":"Nombre original del archivo"},"url":{"type":"string","format":"uri","description":"URL S3 pública del archivo. Permanente mientras el inbox no se borre físicamente."},"creationTime":{"type":"string","format":"date-time","description":"Fecha y hora en que el adjunto se creó"},"size":{"type":"integer","description":"Tamaño en bytes"},"contentType":{"type":"string","description":"MIME type"},"contentSubtype":{"type":"string","enum":["facturae","inboxEmailBody"],"description":"Subtipo detectado automáticamente, si aplica"}}},"InboxExtractionInvoice":{"type":"object","title":"InboxExtractionInvoice","description":"Datos estructurados extraídos por el escáner. Los códigos como `invoiceType` (F1, F2, ...) y `format` (INVOICE, RECEIPT, ...) se exponen como strings sin tipar para no acoplar la API a la versión actual del extractor.","additionalProperties":true,"properties":{"date":{"type":"string","nullable":true,"format":"date"},"name":{"type":"string","nullable":true,"description":"Nombre del emisor (o destinatario, según `direction`)"},"contact":{"type":"string","nullable":true,"description":"NIF/CIF/identificación fiscal"},"number":{"type":"string","nullable":true},"total":{"type":"number","nullable":true},"currency":{"type":"string","nullable":true},"direction":{"type":"string","nullable":true,"description":"RECEIVE (compra) | EMIT (venta)"},"invoiceType":{"type":"string","nullable":true,"description":"Tipo de factura AEAT (F1, F2, R1, ...)"},"format":{"type":"string","nullable":true,"description":"Formato detectado (INVOICE, RECEIPT, ...)"},"category":{"type":"string","nullable":true},"country":{"type":"string","nullable":true},"zipcode":{"type":"string","nullable":true},"summary":{"type":"string","nullable":true},"annotation":{"type":"string","nullable":true},"disbursement":{"type":"string","nullable":true},"taxes":{"type":"array","nullable":true,"items":{"type":"object","additionalProperties":true,"properties":{"tax":{"type":"string"},"base":{"type":"number"},"rate":{"type":"number"},"amount":{"type":"number"}}}}}},"InboxExtractionPayroll":{"type":"object","title":"InboxExtractionPayroll","description":"Datos estructurados extraídos por el escáner para una nómina. El shape está pensado para que un agente cliente pueda mapearlos a `Payroll.main` con mínima ambigüedad: el campo `type` de cada deducción/aportación es un enum semántico (no una cuenta contable FD), de modo que el cliente decide cómo asignar cuentas. La cobertura del extractor varía según versión: el extractor v1 solo identifica empresario y total — los demás campos vendrán en una iteración futura del extractor sin breaking changes para el cliente.","additionalProperties":true,"required":["date","currency","period","employee","employer","earnings","employeeDeductions","employerContributions","totals"],"properties":{"date":{"type":"string","nullable":true,"format":"date","description":"Fecha del documento (suele coincidir con `period.to`)"},"currency":{"type":"string","nullable":true,"description":"Divisa de los importes (ISO 4217)"},"period":{"type":"object","title":"InboxExtractionPayrollPeriod","nullable":true,"additionalProperties":false,"description":"Período liquidado por la nómina.","required":["from","to","days"],"properties":{"from":{"type":"string","nullable":true,"format":"date","description":"Fecha de inicio del período"},"to":{"type":"string","nullable":true,"format":"date","description":"Fecha de fin del período"},"days":{"type":"integer","nullable":true,"description":"Días liquidados"}}},"employee":{"type":"object","title":"InboxExtractionPayrollEmployee","nullable":true,"additionalProperties":false,"description":"Datos identificativos del empleado (la persona que percibe la nómina).","required":["name","fiscalId","socialSecurityNumber","category","contributionGroup","seniorityDate"],"properties":{"name":{"type":"string","nullable":true,"description":"Nombre completo del empleado tal como aparece en el recibo"},"fiscalId":{"type":"string","nullable":true,"description":"NIF/NIE del empleado"},"socialSecurityNumber":{"type":"string","nullable":true,"description":"Número de afiliación a la Seguridad Social"},"category":{"type":"string","nullable":true,"description":"Categoría profesional / puesto"},"contributionGroup":{"type":"string","nullable":true,"description":"Grupo de cotización (01-11)"},"seniorityDate":{"type":"string","nullable":true,"format":"date","description":"Fecha de antigüedad / inicio en la empresa"}}},"employer":{"type":"object","title":"InboxExtractionPayrollEmployer","nullable":true,"additionalProperties":false,"description":"Datos identificativos del empresario (la empresa que paga la nómina).","required":["name","fiscalId","address","zipcode","city","region","contributionAccountCode"],"properties":{"name":{"type":"string","nullable":true,"description":"Razón social del empresario"},"fiscalId":{"type":"string","nullable":true,"description":"NIF/CIF del empresario"},"address":{"type":"string","nullable":true},"zipcode":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"contributionAccountCode":{"type":"string","nullable":true,"description":"Código de cuenta de cotización (CCC) de la empresa en la SS"}}},"earnings":{"type":"array","description":"Conceptos devengados (sumando todos = `totals.grossEarnings`).","items":{"type":"object","additionalProperties":false,"required":["label","amount"],"properties":{"label":{"type":"string","description":"Concepto tal como aparece en el recibo (p.ej. \"Salari base\", \"Plus conveni\")"},"amount":{"type":"number","description":"Importe devengado del concepto"},"contributable":{"type":"boolean","nullable":true,"description":"Si cotiza a la Seguridad Social"},"taxable":{"type":"boolean","nullable":true,"description":"Si está sujeto a IRPF"}}}},"employeeDeductions":{"type":"array","description":"Deducciones del trabajador.","items":{"type":"object","additionalProperties":false,"required":["type","amount"],"properties":{"type":{"type":"string","description":"Tipo semántico de la deducción/aportación. Hoy reconocidos: `ss_common_contingencies`, `ss_mei`, `ss_unemployment`, `ss_professional_training`, `ss_wage_guarantee`, `ss_at_ep`, `irpf`, `other`. El agente cliente mapea estos códigos semánticos a la cuenta contable que corresponda (p.ej. `476000` para SS trabajador, `475100` para IRPF, `642000` para SS empresa)."},"base":{"type":"number","nullable":true,"description":"Base sobre la que se calcula la deducción"},"rate":{"type":"number","nullable":true,"description":"Porcentaje aplicado (p.ej. 4.70 para 4,70%)"},"amount":{"type":"number","description":"Importe deducido o aportado"}}}},"employerContributions":{"type":"array","description":"Aportaciones que paga la empresa (no descontadas al trabajador).","items":{"type":"object","additionalProperties":false,"required":["type","amount"],"properties":{"type":{"type":"string","description":"Tipo semántico de la deducción/aportación. Hoy reconocidos: `ss_common_contingencies`, `ss_mei`, `ss_unemployment`, `ss_professional_training`, `ss_wage_guarantee`, `ss_at_ep`, `irpf`, `other`. El agente cliente mapea estos códigos semánticos a la cuenta contable que corresponda (p.ej. `476000` para SS trabajador, `475100` para IRPF, `642000` para SS empresa)."},"base":{"type":"number","nullable":true,"description":"Base sobre la que se calcula la deducción"},"rate":{"type":"number","nullable":true,"description":"Porcentaje aplicado (p.ej. 4.70 para 4,70%)"},"amount":{"type":"number","description":"Importe deducido o aportado"}}}},"totals":{"type":"object","title":"InboxExtractionPayrollTotals","nullable":true,"additionalProperties":false,"description":"Importes agregados de la nómina, útiles para validación rápida.","required":["grossEarnings","employeeDeductions","netPay","employerCost"],"properties":{"grossEarnings":{"type":"number","nullable":true,"description":"Total devengado bruto"},"employeeDeductions":{"type":"number","nullable":true,"description":"Total deducciones del trabajador (SS + IRPF + otras)"},"netPay":{"type":"number","nullable":true,"description":"Líquido a percibir por el empleado"},"employerCost":{"type":"number","nullable":true,"description":"Coste total para la empresa (aportaciones SS + AT/EP + ...)"}}},"modelo190":{"type":"object","nullable":true,"additionalProperties":false,"required":["clavePercepcion"],"description":"Datos para el modelo 190 (declaración anual de retenciones).","properties":{"clavePercepcion":{"type":"string","nullable":true,"description":"Clave de percepción (A, B, ...)"}}}}},"InboxItem":{"type":"object","title":"InboxItem","additionalProperties":false,"required":["id","status","source","title","createdAt","updatedAt","archived","attachments","scan"],"properties":{"id":{"type":"string","description":"Identificador del item (prefijo `tas_`)"},"status":{"type":"string","enum":["pending","scanned","scan_failed"],"description":"Estado del escaneo. `pending`: aún no escaneado. `scanned`: escaneado con datos extraídos. `scan_failed`: escaneado sin datos extraíbles."},"source":{"type":"string","description":"Origen del item. Hoy siempre `upload`."},"title":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"archived":{"type":"boolean","description":"Si está archivado (DELETE archiva en lugar de borrar). Por defecto el listado solo devuelve items no archivados."},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/InboxAttachment"}},"scan":{"type":"object","nullable":true,"title":"InboxScan","description":"Información del escaneo del documento. `null` mientras `status` = `pending`. `text` solo se incluye en GET por id, no en list.","additionalProperties":false,"required":["completedAt","docType","mimeType","extraction"],"properties":{"completedAt":{"type":"string","format":"date-time","nullable":true,"description":"Cuándo terminó el escaneo"},"docType":{"type":"string","nullable":true,"description":"Tipo de documento detectado (p.ej. `IMAGE`)"},"mimeType":{"type":"string","nullable":true},"text":{"type":"string","nullable":true,"description":"Texto OCR completo. Solo en GET /inbox/{id}, no en list."},"extraction":{"type":"object","nullable":true,"title":"InboxExtraction","description":"Resultado estructurado del escaneo. El discriminador `kind` indica el tipo y la propiedad homónima contiene los datos. Hoy se reconocen `invoice` y `payroll`. Versiones futuras pueden añadir nuevos `kind` (p.ej. `salesInvoice`) y un campo opcional `alternatives` sin romper la compatibilidad.","additionalProperties":false,"required":["kind"],"properties":{"kind":{"type":"string","description":"Tipo de extracción. Hoy: `invoice` o `payroll`."},"invoice":{"$ref":"#/components/schemas/InboxExtractionInvoice"},"payroll":{"$ref":"#/components/schemas/InboxExtractionPayroll"}}},"error":{"type":"object","description":"Presente si `status` = `scan_failed`. La API no persiste el mensaje original del extractor; se devuelve uno genérico.","required":["message"],"properties":{"message":{"type":"string"}}}}}}},"Installments":{"type":"array","title":"Installments","items":{"type":"object","title":"DocumentMainInstallment","additionalProperties":false,"properties":{"date":{"type":"string","format":"date"},"amount":{"type":"number"},"currency":{"type":"string","description":"Moneda de los importes del vencimiento (Formato ISO 4217)"}},"required":["date","amount","currency"]}},"Invoice":{"type":"object","additionalProperties":false,"title":"Invoice","required":["uuid","type","main"],"properties":{"uuid":{"type":"string"},"type":{"type":"string","enum":["invoice"]},"accounting":{"$ref":"#/components/schemas/Accounting","readOnly":true},"books":{"$ref":"#/components/schemas/Books","readOnly":true},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}},"main":{"type":"object","title":"InvoiceMain","additionalProperties":false,"properties":{"title":{"type":"string","description":"Título del documento para identificarlo en los listados, se calcula automáticamente"},"address":{"type":"string"},"country":{"type":"string","description":"País de la dirección fiscal del contacto (cliente) (Formato ISO 3166-1 Alpha-2)","nullable":true},"zipcode":{"type":"string","description":"Código postal de la dirección fiscal del contacto","nullable":true},"contact":{"type":"string","nullable":true},"account":{"$ref":"#/components/schemas/AccountCode"},"fiscalPosition":{"$ref":"#/components/schemas/FiscalPosition"},"currency":{"type":"string","description":"Moneda de los importes de la factura (Formato ISO 4217)"},"date":{"type":"string","format":"date","nullable":true},"depreciable":{"type":"boolean"},"docNumber":{"$ref":"#/components/schemas/DocNumber"},"dueDate":{"type":"string","format":"date","nullable":true},"emails":{"type":"string","description":"Lista de emails separados por comas de los destinatarios a los que se enviará por defecto esta factura"},"emailsCc":{"type":"string","description":"Lista de emails separados por comas de los destinatarios a los que se enviará por defecto en copia visible esta factura"},"emailsBcc":{"type":"string","description":"Lista de emails separados por comas de los destinatarios a los que se enviará por defecto en copia oculta esta factura"},"exchangeRate":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Tipo de cambio de la moneda original respecto a la moneda de la empresa"},"lines":{"type":"array","title":"InvoiceLines","description":"Líneas de la factura","items":{"$ref":"#/components/schemas/InvoiceMainLine"}},"manualAccounting":{"$ref":"#/components/schemas/InvoiceMainManualAccounting"},"lineTotalDecimals":{"type":"number","minimum":2,"maximum":6,"multipleOf":1},"notes":{"type":"string","description":"Notas visibles de la factura","nullable":true},"showProductColumn":{"type":"boolean"},"showDiscountColumn":{"type":"boolean"},"showQuantityColumn":{"type":"boolean"},"linesTotal":{"type":"number","description":"Importe total de las líneas. Calculado automáticamente"},"taxes":{"$ref":"#/components/schemas/SalesDocumentTaxes","readOnly":true},"taxIncludedPrices":{"type":"boolean"},"totalBeforeTaxes":{"type":"number","description":"Importe total antes de impuestos. Calculado automáticamente"},"manualTotals":{"type":"boolean"},"companyCurrencyTotalBeforeTaxes":{"type":"number","description":"Importe total antes de impuestos en la moneda de la contabilidad. Calculado automáticamente"},"paymentMethod":{"type":"string","nullable":true},"theme":{"type":"string"},"total":{"type":"number"},"pendingBeforeAccounting":{"type":"number"},"companyCurrencyTotal":{"type":"number","description":"Importe total en la moneda de la contabilidad. Calculado automáticamente"},"correctedInvoice":{"type":"string","description":"ID de la factura rectificada para una factura rectificativa"},"facturae":{"$ref":"#/components/schemas/InvoiceMainFacturae"},"externalId":{"type":"string"},"installments":{"$ref":"#/components/schemas/Installments"},"internalNotes":{"type":"string","description":"Notas internas de la factura, no serán visibles en el documento impreso"},"draft":{"type":"boolean","description":"Indica si la factura es provisional (true) o definitiva (false). Cuando creamos una factura si no se indica la factura se creará como provisional o definitiva según la configuración de la empresa."},"voided":{"type":"boolean","description":"Indica si es una factura anulada"},"external":{"type":"boolean","description":"Indica que es una factura externa creada fuera del programa. Genera contabilidad e impuestos normalmente, pero NO genera información para VeriFactu ni TicketBAI."},"corrective":{"type":"boolean","description":"Reservado para uso futuro. Indicará si la factura es rectificativa. No utilizar aún, este campo no está activo."},"substitution":{"type":"boolean","description":"Indica que es una factura que sustituye a otras facturas simplificadas (corresponde a F3 en VeriFactu). No genera contabilidad, solo genera información para el modelo 347."},"substitutedInvoices":{"type":"array","items":{"type":"string"},"description":"Array de UUIDs de facturas simplificadas que esta factura sustituye. Solo tiene sentido cuando substitution === true."},"taxCalculationMode":{"type":"string","enum":["total","lines"]},"verifactu":{"$ref":"#/components/schemas/InvoiceMainVerifactu"},"ticketbai":{"$ref":"#/components/schemas/InvoiceMainTicketbai"},"simplified":{"type":"boolean","description":"Indica si la factura es simplificada. Una factura es simplificada cuando no identifica al destinatario con datos fiscales completos."},"counterpart":{"$ref":"#/components/schemas/DocumentCounterpart"},"customFields":{"type":"object","additionalProperties":{"type":"string"},"description":"Valores de campos personalizados"}},"required":["account","currency","date","docNumber","dueDate","exchangeRate","fiscalPosition","lines","lineTotalDecimals","linesTotal","simplified","taxes","taxIncludedPrices","theme","total","draft","voided"]},"import":{"$ref":"#/components/schemas/ImportInformation"},"meta":{"type":"object","title":"InvoiceMeta","description":"Metadatos internos de la factura","additionalProperties":false,"properties":{"automationSource":{"type":"string"},"expeditionTimestamp":{"type":"string","description":"Fecha y hora de expedición de la factura en formato ISO 8601 GMT (ej: 2025-12-05T10:00:02.893Z). Se inicializa automáticamente al guardar la factura por primera vez como definitiva."},"verifactu":{"$ref":"#/components/schemas/InvoiceMetaVerifactu"},"ticketbai":{"oneOf":[{"$ref":"#/components/schemas/InvoiceMetaTicketbai"},{"$ref":"#/components/schemas/InvoiceMetaBatuzNoSG"}]}},"readOnly":true}}},"InvoiceMainFacturae":{"type":"object","title":"InvoiceMainFacturae","additionalProperties":false,"properties":{"LegalReference":{"type":"string","description":"Textos literales legales que deben figurar obligatoriamente en determinadas facturas"},"InvoicingPeriod":{"type":"object","description":"Periodo de facturación. Solo cuando se requiera: servicio prestado temporalmente o factura recapitulativa. ISO 8601:2004","additionalProperties":false,"required":["StartDate","EndDate"],"properties":{"StartDate":{"type":"string","format":"date","description":"Fecha de inicio del periodo en formato yyyy-mm-dd"},"EndDate":{"type":"string","format":"date","description":"Fecha de fin del periodo en formato yyyy-mm-dd"}}},"PlaceOfIssue":{"type":"object","description":"Lugar de expedición. Plaza en la que se expide el documento","additionalProperties":false,"required":["PostCode"],"properties":{"PostCode":{"type":"string","description":"Código postal del lugar de expedición"},"PlaceOfIssueDescription":{"type":"string","description":"Texto del nombre del lugar de expedición"}}},"OperationDate":{"type":"string","format":"date","description":"Fecha de operación. Fecha en la que se realiza el servicio o se entrega el bien. Solo obligatoria si es distinta de la fecha de expedición"},"LanguageName":{"type":"string","enum":["ar","be","bg","ca","cs","da","de","el","en","es","et","eu","fi","fr","ga","gl","hr","hu","is","it","lv","lt","mk","mt","nl","no","pl","pt","ro","ru","sk","sl","sq","sr","sv","tr","uk"],"description":"Lengua. Código ISO 639-1:2002 Alpha-2 de la lengua en la que se emite el documento"},"Buyer_ContactPersons":{"type":"string","description":"Persona de contacto del receptor: apellidos y nombre/razón social"},"AdministrativeCentre_01":{"$ref":"#/components/schemas/InvoiceMainFacturaeAdministrativeCentre","description":"Centro administrativo 1"},"AdministrativeCentre_02":{"$ref":"#/components/schemas/InvoiceMainFacturaeAdministrativeCentre","description":"Centro administrativo 2"},"AdministrativeCentre_03":{"$ref":"#/components/schemas/InvoiceMainFacturaeAdministrativeCentre","description":"Centro administrativo 3"},"AdministrativeCentre_04":{"$ref":"#/components/schemas/InvoiceMainFacturaeAdministrativeCentre","description":"Centro administrativo 4"},"AdministrativeCentre_05":{"$ref":"#/components/schemas/InvoiceMainFacturaeAdministrativeCentre","description":"Centro administrativo 5"},"AdministrativeCentre_06":{"$ref":"#/components/schemas/InvoiceMainFacturaeAdministrativeCentre","description":"Centro administrativo 6"},"AdministrativeCentre_07":{"$ref":"#/components/schemas/InvoiceMainFacturaeAdministrativeCentre","description":"Centro administrativo 7"},"AdministrativeCentre_08":{"$ref":"#/components/schemas/InvoiceMainFacturaeAdministrativeCentre","description":"Centro administrativo 8"},"AdministrativeCentre_09":{"$ref":"#/components/schemas/InvoiceMainFacturaeAdministrativeCentre","description":"Centro administrativo 9"},"Corrective_ReasonCode":{"type":"string","enum":["01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","80","81","82","83","84","85"],"description":"Código del motivo de rectificación. Obligatorio para emitir facturae de una factura rectificativa. 01-16: errores según RD 1496/2003. 80-85: supuestos del Art. 80 Ley 37/92 del IVA"},"Corrective_CorrectionMethod":{"type":"string","enum":["02","03"],"description":"Código del criterio empleado para la rectificación. 02: rectificación por diferencias. 03: rectificación por descuento por volumen de operaciones durante un periodo"},"Corrective_AdditionalReasonDescription":{"type":"string","maxLength":2500,"description":"Ampliación motivo de la rectificación. Descripción de las aclaraciones y motivos de la factura rectificativa"}}},"InvoiceMainFacturaeAdministrativeCentre":{"type":"object","title":"InvoiceMainFacturaeAdministrativeCentre","description":"Atributos de un centro administrativo para Facturae","additionalProperties":false,"properties":{"CentreCode":{"type":"string"},"RoleTypeCode":{"type":"string"},"Name":{"type":"string"},"FirstSurname":{"type":"string"},"SecondSurname":{"type":"string"},"Address":{"type":"string"},"PostCode":{"type":"string"},"Town":{"type":"string"},"Province":{"type":"string"},"CountryCode":{"type":"string"},"PostCodeAndTown":{"type":"string"},"Telephone":{"type":"string"},"TeleFax":{"type":"string"},"WebAddress":{"type":"string"},"ElectronicMail":{"type":"string"},"ContactPersons":{"type":"string"},"CnoCnae":{"type":"string"},"INETownCode":{"type":"string"},"AdditionalContactDetails":{"type":"string"},"PhysicalGLN":{"type":"string"},"LogicalOperationalPoint":{"type":"string"},"CentreDescription":{"type":"string"}}},"InvoiceMainLine":{"type":"object","title":"InvoiceMainLine","description":"Línea de la factura","additionalProperties":false,"properties":{"origin":{"type":"string","description":"Indica aquí el ID del documento de origen de esta línea si proviene de otro documento para que los documentos queden enlazados","nullable":true},"account":{"$ref":"#/components/schemas/AccountCode"},"document":{"type":"string","description":"Si esta línea se ha generado a partir de un producto puedes indicar aquí su ID"},"discount":{"type":"number"},"discountRate":{"type":"number"},"lineTotal":{"type":"number"},"quantity":{"type":"number"},"tax":{"type":"array","title":"InvoiceLineTaxes","items":{"$ref":"#/components/schemas/TaxId"}},"text":{"type":"string"},"unitPrice":{"type":"number"},"facturae":{"$ref":"#/components/schemas/InvoiceMainLineFacturae"},"verifactu":{"$ref":"#/components/schemas/InvoiceMainLineVerifactu"}},"required":["account","discount","discountRate","lineTotal","quantity","text","unitPrice","tax"]},"InvoiceMainLineFacturae":{"type":"object","title":"InvoiceMainLineFacturae","additionalProperties":false,"properties":{"IssuerContractReference":{"type":"string","description":"Referencia del contrato del Emisor"},"IssuerContractDate":{"type":"string","format":"date","description":"Fecha asociada al atributo IssuerContractReference en formato yyyy-mm-dd"},"IssuerTransactionReference":{"type":"string","description":"Referencia de la Operación, Número de Pedido, Contrato, etc. del Emisor"},"IssuerTransactionDate":{"type":"string","format":"date","description":"Fecha asociada al atributo IssuerTransactionReference en formato yyyy-mm-dd"},"ReceiverContractReference":{"type":"string","description":"Referencia del contrato del Receptor"},"ReceiverContractDate":{"type":"string","format":"date","description":"Fecha del contrato del receptor en formato yyyy-mm-dd"},"ReceiverTransactionReference":{"type":"string","description":"Referencia de la Operación, Número de Pedido, Contrato, etc. del Receptor"},"ReceiverTransactionDate":{"type":"string","format":"date","description":"Fecha asociada al atributo ReceiverTransactionReference en formato yyyy-mm-dd"},"FileReference":{"type":"string","description":"Referencia del expediente"},"FileDate":{"type":"string","format":"date","description":"Fecha asociada al atributo FileReference en formato yyyy-mm-dd"},"DeliveryNotesReferences":{"type":"array","description":"Referencias de albaranes","items":{"type":"object","title":"FacturaeDeliveryNotesReference","additionalProperties":false,"required":["DeliveryNoteNumber"],"properties":{"DeliveryNoteNumber":{"type":"string","description":"Número de referencia del albarán"},"DeliveryNoteDate":{"type":"string","format":"date","description":"Fecha asociada al atributo DeliveryNoteNumber en formato yyyy-mm-dd"}}}},"SequenceNumber":{"type":"number","description":"Número de secuencia o línea del pedido"},"LineItemPeriod":{"type":"object","description":"Información sobre el periodo de prestación de un servicio. ISO 8601:2004","required":["StartDate","EndDate"],"properties":{"StartDate":{"type":"string","format":"date","description":"Fecha de inicio en formato yyyy-mm-dd"},"EndDate":{"type":"string","format":"date","description":"Fecha de fin en formato yyyy-mm-dd"}}}}},"InvoiceMainLineVerifactu":{"type":"object","title":"InvoiceMainLineVerifactu","description":"Información a nivel de línea relativo a VeriFactu","additionalProperties":false,"properties":{"ClaveRegimen":{"type":"string","enum":["01","02","03","04","05","06","07","08","09","10","11","14","15","17","18","19","20"],"title":"VF_IdOperacionesTrascendenciaTributariaType"},"CalificacionOperacion":{"type":"string","enum":["S1","S2","N1","N2"],"description":"* S1: OPERACIÓN SUJETA Y NO EXENTA - SIN INVERSIÓN DEL SUJETO PASIVO.\n* S2: OPERACIÓN SUJETA Y NO EXENTA - CON INVERSIÓN DEL SUJETO PASIVO\n* N1: OPERACIÓN NO SUJETA ARTÍCULO 7, 14, OTROS.\n* N2: OPERACIÓN NO SUJETA POR REGLAS DE LOCALIZACIÓN","title":"VF_CalificacionOperacionType"},"OperacionExenta":{"type":"string","enum":["E1","E2","E3","E4","E5","E6"],"description":"* E1: EXENTA por Art. 20\n* E2: EXENTA por Art. 21\n* E3: EXENTA por Art. 22\n* E4: EXENTA por Art. 24\n* E5: EXENTA por Art. 25\n* E6: EXENTA otros","title":"VF_OperacionExentaType"}}},"InvoiceMainLineWrite":{"type":"object","title":"InvoiceMainLineWrite","description":"Versión de la línea de factura para creación del documento","additionalProperties":false,"properties":{"origin":{"type":"string","description":"Indica aquí el ID del documento de origen de esta línea si proviene de otro documento para que los documentos queden enlazados","nullable":true},"account":{"$ref":"#/components/schemas/AccountCode"},"document":{"type":"string","description":"Si esta línea se ha generado a partir de un producto puedes indicar aquí su ID"},"discount":{"type":"number"},"discountRate":{"type":"number"},"lineTotal":{"type":"number"},"quantity":{"type":"number"},"tax":{"type":"array","title":"InvoiceLineTaxes","items":{"$ref":"#/components/schemas/TaxId"}},"text":{"type":"string"},"unitPrice":{"type":"number"},"facturae":{"$ref":"#/components/schemas/InvoiceMainLineFacturae"},"verifactu":{"$ref":"#/components/schemas/InvoiceMainLineVerifactu"}},"required":["quantity","text","unitPrice","tax"]},"InvoiceMainManualAccounting":{"type":"object","title":"InvoiceMainManualAccounting","description":"Contabilidad manual de la factura.\n\nEn este elemento pueden indicarse las líneas que se genearán en la contabilidad para esta factura a excepción de las del total del documento y las de impuestos que son generadas automáticamente por el programa","additionalProperties":false,"properties":{"lines":{"type":"array","title":"InvoiceMainManualAccountingLines","minItems":1,"items":{"$ref":"#/components/schemas/AccountingLine"}}},"required":["lines"]},"InvoiceMainTicketbai":{"type":"object","title":"InvoiceMainTicketbai","description":"Parámetros de ajustes para TicketBAI","additionalProperties":false,"properties":{"causaExencion":{"type":"string","enum":["E1","E2","E3","E4","E5","E6"]},"causaNoSujeta":{"type":"string","enum":["OT","RL","VT","IE"]},"claveTipoFacturaRectificativa":{"type":"string","enum":["R1","R2","R3","R4","R5"]},"batuzRentaIngresos":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"object","additionalProperties":false,"required":["epigrafe"],"properties":{"epigrafe":{"type":"string","minLength":1,"maxLength":7}}}}}},"InvoiceMainVerifactu":{"type":"object","title":"InvoiceMainVerifactu","description":"Información a nivel de factura relativo a VeriFactu","additionalProperties":false,"properties":{"TipoFactura":{"type":"string","enum":["F1","F2","R1","R2","R3","R4","R5","F3"],"description":"* F1: FACTURA (ART. 6, 7.2 Y 7.3 DEL RD 1619/2012)\n* F2: FACTURA SIMPLIFICADA Y FACTURAS SIN IDENTIFICACIÓN DEL DESTINATARIO ART. 6.1.D) RD 1619/2012\n* R1: FACTURA RECTIFICATIVA\t(Art 80.1 y 80.2 y error fundado en derecho)\n* R2: FACTURA RECTIFICATIVA (Art. 80.3)\n* R3: FACTURA RECTIFICATIVA\t(Art. 80.4)\n* R4: FACTURA RECTIFICATIVA\t(Resto)\n* R5: FACTURA RECTIFICATIVA\tEN FACTURAS SIMPLIFICADAS\n* F3: FACTURA EMITIDA EN SUSTITUCIÓN DE FACTURAS SIMPLIFICADAS FACTURADAS Y DECLARADAS","title":"VF_ClaveTipoFacturaType"},"FechaOperacion":{"type":"string","description":"Deprecated: Este campo ya no se utiliza. La fecha de operación se toma de main.date","pattern":"\\d{2,2}-\\d{2,2}-\\d{4,4}","minLength":10,"maxLength":10,"title":"VF_fecha","deprecated":true},"DescripcionOperacion":{"type":"string","description":"Restricciones esquema:\n\nxsd-restriction:maxLen 500","maxLength":500,"title":"VF_TextMax500Type"},"FacturaSimplificadaArt7273":{"type":"string","enum":["S","N"],"title":"VF_SimplificadaCualificadaType"},"defaultOperacionExenta":{"type":"string","enum":["E1","E2","E3","E4","E5","E6"],"description":"Valor por defecto de OperacionExenta usado en la generación del modelo VeriFactu. Se copia de settings.sales.verifactuDefaultOperacionExenta en caso de utilizarse cuando se genera el modelo."}}},"InvoiceMetaBatuzNoSG":{"type":"object","title":"InvoiceMetaBatuzNoSG","description":"Información interna relativa a una factura del sistema Batuz generada sin software garante TicketBAI","required":["mustBeSent","sent","batuzAcceptedZuzendu","batuzModelZuzendu","xmlNoSG"],"properties":{"mustBeSent":{"type":"boolean","enum":[false]},"sent":{"type":"boolean"},"batuzAcceptedZuzendu":{"type":"boolean"},"batuzModelZuzendu":{"type":"object","title":"XmlBatuzModelAlta","description":"Modelo interno del contenido del XML de alta en Batuz para correcciones sin Software Garante (Aplica en Bizkaia)","additionalProperties":true},"xmlNoSG":{"type":"string","description":"Contenido del XML de alta de Batuz para una factura emitida sin Software Garante"}}},"InvoiceMetaTicketbai":{"type":"object","title":"InvoiceMetaTicketbai","description":"Información interna relativa a TicketBAI","required":["identificador","ordenEncadenamiento","diputacionForal","mustBeSent","sent","xmlModel","xml","encadenamientoFactura"],"properties":{"identificador":{"type":"string"},"ordenEncadenamiento":{"type":"integer","minimum":0},"diputacionForal":{"type":"string","enum":["Araba","Bizkaia","Gipuzkoa"]},"mustBeSent":{"type":"boolean"},"sent":{"type":"boolean"},"batuzAccepted":{"type":"boolean"},"batuzAcceptedWithErrors":{"type":"boolean","enum":[true]},"batuzAcceptedZuzendu":{"type":"boolean"},"xmlModel":{"type":"object","title":"XmlModelAlta","description":"Modelo interno del contenido del XML de alta de TicketBAI (Aplica en Araba, Bizkaia y Gipuzkoa)","additionalProperties":true},"batuzModel":{"type":"object","title":"XmlBatuzModelAlta","description":"Modelo interno del contenido del XML de alta en Batuz (Aplica en Bizkaia)","additionalProperties":true},"batuzModelZuzendu":{"type":"object","title":"XmlBatuzModelAlta","description":"Modelo interno del contenido del XML de alta en Batuz para correcciones sin Software Garante (Aplica en Bizkaia)","additionalProperties":true},"xml":{"type":"string","description":"Contenido del XML de alta de TicketBAI"},"xmlNoSG":{"type":"string","description":"Contenido del XML de alta de Batuz para una factura emitida sin Software Garante"},"qrUrl":{"type":"string"},"qr":{"type":"string"},"encadenamientoFactura":{"type":"object","title":"EncadenamientoFactura","required":["NumFacturaAnterior","FechaExpedicionFacturaAnterior","SignatureValueFirmaFacturaAnterior"],"additionalProperties":false,"properties":{"SerieFacturaAnterior":{"type":"string"},"NumFacturaAnterior":{"type":"string"},"FechaExpedicionFacturaAnterior":{"type":"string"},"SignatureValueFirmaFacturaAnterior":{"type":"string"}}},"voided":{"type":"object","title":"VoidedInvoice","description":"Información de TicketBAI relativa a la anulación de la factura","additionalProperties":false,"required":["mustBeSent","sent","xmlModel","xml"],"properties":{"mustBeSent":{"type":"boolean"},"sent":{"type":"boolean"},"xmlModel":{"type":"object","title":"XmlModelAnulacion","description":"Modelo interno del contenido del XML de anulación de TicketBAI (Aplica en Araba, Bizkaia y Gipuzkoa)","additionalProperties":true},"batuzModel":{"type":"object","title":"XmlBatuzModelAnulacion","description":"Modelo interno del contenido del XML de anulación en Batuz (Aplica en Bizkaia)","additionalProperties":true},"xml":{"type":"string","description":"Contenido del XML de anulación de TicketBAI"}}},"zuzenduAlta":{"type":"object","title":"ZuzenduAlta","description":"Información de TicketBAI relativa a la modificación/subsanación de la factura mediante el servicio Zuzendu","additionalProperties":false,"required":["xmlModel","xml"],"properties":{"xmlModel":{"type":"object","title":"XmlModelAlta","description":"Modelo interno del contenido del XML de alta Zuzendu de TicketBAI","additionalProperties":true},"xml":{"type":"string","description":"Contenido del XML de alta Zuzendu de TicketBAI"}}}}},"InvoiceMetaVerifactu":{"type":"object","title":"InvoiceMetaVerifactu","description":"Información interna autogenerada relativa a VeriFactu","additionalProperties":false,"properties":{"registroAlta":{"type":"object","additionalProperties":true},"registroAltaXml":{"type":"string"},"registroAnulacion":{"type":"object","additionalProperties":true},"registroAnulacionXml":{"type":"string"},"mode":{"$ref":"#/components/schemas/InvoiceMetaVerifactuMode"},"modeAnulacion":{"$ref":"#/components/schemas/InvoiceMetaVerifactuMode"},"qrUrl":{"type":"string"},"qr":{"type":"string"}}},"InvoiceMetaVerifactuMode":{"type":"string","title":"InvoiceMetaVerifactuMode","enum":["mode_verifactu","mode_no_verifactu"]},"InvoicePaymentsWrite":{"type":"array","title":"InvoicePaymentsWrite","description":"Permite crear un pago para una factura.\n\nSe pueden crear múltiples pagos e indicar el importe individual para cada uno de ellos.\n\nSi no se indica el importe (amount) se considera que con ese pago se quiere saldar todo el importe pendiente de la factura, dentro del array solo puede haber un pago sin importe y debe estar en la última posición del array","items":{"type":"object","title":"InvoicePaymentWrite","description":"Nuevo pago de una factura.","required":["bank"],"properties":{"date":{"type":"string","format":"date","description":"Fecha en la que contabilizar el pago, si no se indica se usa la fecha de la factura cuando se crea una factura o la fecha actual cuando se actualiza"},"bank":{"type":"string","description":"ID del banco en el que se anota el pago"},"amount":{"type":"number","description":"Importe del pago en la moneda original de la factura. Si no se indica se saldará todo el importe pendiente de la factura"},"companyCurrencyAmount":{"type":"number","description":"Importe a contabilizar en euros, puede indicarse solo cuando la moneda de la factura sea distinta a euros y se quiera indicar el valor exacto a contabilizar de dicho pago en euros. Si no se indica se aplicará un tipo de cambio de forma automática según la fecha del pago"},"description":{"type":"string","description":"Descripción del cobro. Sustituye al título por defecto (\"Cobro <factura>\"). Visible en la columna \"Descripción\" de Bancos → Movimientos. Útil para almacenar una referencia operativa del cobro real (p. ej. ID de transacción de Mollie/Stripe o referencia de transferencia)."},"notes":{"type":"string","description":"Notas asociadas al cobro. Texto libre adicional consultable desde Bancos → Movimientos. Útil cuando se quiere mantener la descripción auto-generada y registrar aparte una referencia operativa."}}}},"InvoicePaymentsWriteResponse":{"type":"object","title":"InvoicePaymentsWriteResponse","required":["content","tags","creationDate","modificationDate"],"additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Invoice"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"},"related":{"type":"object","title":"InvoiceRelated","additionalProperties":false,"properties":{"objects":{"type":"object","title":"InvoiceRelatedObjects","description":"Mapa de objetos relacionados solicitados, cada clave de este objeto es el id de un objeto relacionado y el valor es el contenido del mismo","properties":{"object_id":{"anyOf":[{"$ref":"#/components/schemas/TaxDefinition"}]}}},"balance":{"type":"object","title":"InvoiceBalance","description":"Saldo abierto de la factura.\n\nSe devuelve el saldo contable de la factura, por lo que el importe pendiente de cobrar se muestra como un valor negativo. El valor es negativo porque \"falta\" dinero conabilizado para que la factura esté saldada. El importe se indica en la moneda de la factura en el elemento `currencyBalance` y en la moneda de la contabilidad de la empresa en el elemento `balance`\n\n```\n{\n  \"balance\": {\n    \"balance\": -28.56, \n    \"currency\": \"USD\", \n    \"currencyBalance\": -30.52\n  }\n}\n```\n\nEl ejemplo anterior corresponde a una factura contabilizada en USD que tiene un importe pendiente de 30,52 USD que están contabilizados como 28,56 EUR.\n\nEn general para saber el importe pendiente de cobrar de una factura debe utilizarse por tanto el elemento `currencyBalance` que es el que representa el saldo pendiente en la moneda en la que se ha emitido la factura.\n","required":["balance","currency","currencyBalance"],"properties":{"balance":{"type":"number","description":"Saldo pendiente de la factura en EUR"},"currency":{"type":"string","description":"Moneda original del saldo pendiente de la factura (Formato ISO 4217)"},"currencyBalance":{"type":"number","description":"Saldo pendiente de la factura en la moneda de la factura"}}},"state":{"type":"string","enum":["draft","pending","overdue","paid","overpaid","voided"],"description":"Estado de la factura.\n\n* draft: Borrador\n* pending: Pendiente de pago (Factura con saldo pendiente que aún no ha alcanzado las fechas de vencimiento previstas)\n* overdue: Vencida (El saldo pendiente actual es superior al esperado según la información de vencimientos)\n* paid: Pagada (Factura con saldo pendiente cero)\n* overpaid: Sobrepagada (Tiene pagos por encima del importe esperado)\n* voided: Anulada"},"journal":{"type":"array","description":"Apuntes contables de `/journal` que afectan al saldo de la factura.\n\nSe devuelve una entrada por cada documento de saldo (cobros, pagos o remesas SEPA), con la misma forma reducida del endpoint `GET /{companyId}/journal?document={id}` pero sin los campos redundantes con el documento padre (`document`, `documentType`, `documentTitle`) ni los opt-in del endpoint `/journal` (`idAccounting`, `tags`).\n\nLos IDs son polimórficos:\n\n* **`tra_<uuid-v4>`** — `transaction` (asiento contable directo). Caso típico cuando el cobro/pago se ha registrado manualmente o vía transferencia convencional anotada en un banco.\n* **`pay_<uuid-v4>`** — `payment` (remesa SEPA). Aparece cuando la operación se ha agrupado en una remesa de adeudos directos o transferencias SEPA.\n\nLa lista incluye **todos** los apuntes que actualmente componen el saldo (no sólo los recién creados en una llamada). El orden es el mismo que devolvería `GET /journal?document={id}`: por fecha, prioridad contable y línea.\n\nLos campos `currency`, `currencyDebit` y `currencyCredit` sólo aparecen si la empresa tiene multicurrency activada y el apunte está en una moneda distinta a la de la contabilidad.","items":{"$ref":"#/components/schemas/RelatedJournalEntry"}}}},"paymentsInfo":{"type":"object","properties":{"total":{"type":"number","description":"Número total de pagos que modifican el saldo de la factura"},"totalCreated":{"type":"number","description":"Número total de pagos creados en esta operación"}}}}},"InvoiceResponse":{"type":"object","title":"InvoiceResponse","required":["content","tags","creationDate","modificationDate"],"additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Invoice"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"},"related":{"type":"object","title":"InvoiceRelated","additionalProperties":false,"properties":{"objects":{"type":"object","title":"InvoiceRelatedObjects","description":"Mapa de objetos relacionados solicitados, cada clave de este objeto es el id de un objeto relacionado y el valor es el contenido del mismo","properties":{"object_id":{"anyOf":[{"$ref":"#/components/schemas/TaxDefinition"}]}}},"balance":{"type":"object","title":"InvoiceBalance","description":"Saldo abierto de la factura.\n\nSe devuelve el saldo contable de la factura, por lo que el importe pendiente de cobrar se muestra como un valor negativo. El valor es negativo porque \"falta\" dinero conabilizado para que la factura esté saldada. El importe se indica en la moneda de la factura en el elemento `currencyBalance` y en la moneda de la contabilidad de la empresa en el elemento `balance`\n\n```\n{\n  \"balance\": {\n    \"balance\": -28.56, \n    \"currency\": \"USD\", \n    \"currencyBalance\": -30.52\n  }\n}\n```\n\nEl ejemplo anterior corresponde a una factura contabilizada en USD que tiene un importe pendiente de 30,52 USD que están contabilizados como 28,56 EUR.\n\nEn general para saber el importe pendiente de cobrar de una factura debe utilizarse por tanto el elemento `currencyBalance` que es el que representa el saldo pendiente en la moneda en la que se ha emitido la factura.\n","required":["balance","currency","currencyBalance"],"properties":{"balance":{"type":"number","description":"Saldo pendiente de la factura en EUR"},"currency":{"type":"string","description":"Moneda original del saldo pendiente de la factura (Formato ISO 4217)"},"currencyBalance":{"type":"number","description":"Saldo pendiente de la factura en la moneda de la factura"}}},"state":{"type":"string","enum":["draft","pending","overdue","paid","overpaid","voided"],"description":"Estado de la factura.\n\n* draft: Borrador\n* pending: Pendiente de pago (Factura con saldo pendiente que aún no ha alcanzado las fechas de vencimiento previstas)\n* overdue: Vencida (El saldo pendiente actual es superior al esperado según la información de vencimientos)\n* paid: Pagada (Factura con saldo pendiente cero)\n* overpaid: Sobrepagada (Tiene pagos por encima del importe esperado)\n* voided: Anulada"},"journal":{"type":"array","description":"Apuntes contables de `/journal` que afectan al saldo de la factura.\n\nSe devuelve una entrada por cada documento de saldo (cobros, pagos o remesas SEPA), con la misma forma reducida del endpoint `GET /{companyId}/journal?document={id}` pero sin los campos redundantes con el documento padre (`document`, `documentType`, `documentTitle`) ni los opt-in del endpoint `/journal` (`idAccounting`, `tags`).\n\nLos IDs son polimórficos:\n\n* **`tra_<uuid-v4>`** — `transaction` (asiento contable directo). Caso típico cuando el cobro/pago se ha registrado manualmente o vía transferencia convencional anotada en un banco.\n* **`pay_<uuid-v4>`** — `payment` (remesa SEPA). Aparece cuando la operación se ha agrupado en una remesa de adeudos directos o transferencias SEPA.\n\nLa lista incluye **todos** los apuntes que actualmente componen el saldo (no sólo los recién creados en una llamada). El orden es el mismo que devolvería `GET /journal?document={id}`: por fecha, prioridad contable y línea.\n\nLos campos `currency`, `currencyDebit` y `currencyCredit` sólo aparecen si la empresa tiene multicurrency activada y el apunte está en una moneda distinta a la de la contabilidad.","items":{"$ref":"#/components/schemas/RelatedJournalEntry"}}}}}},"InvoiceWrite":{"type":"object","additionalProperties":false,"title":"InvoiceWrite","required":["type","main"],"properties":{"uuid":{"type":"string"},"type":{"type":"string","enum":["invoice"]},"accounting":{"$ref":"#/components/schemas/Accounting","readOnly":true},"books":{"$ref":"#/components/schemas/Books","readOnly":true},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentWrite"},"maxItems":10},"main":{"type":"object","title":"InvoiceMain","additionalProperties":false,"properties":{"title":{"type":"string","description":"Título del documento para identificarlo en los listados, se calcula automáticamente"},"address":{"type":"string"},"country":{"type":"string","description":"País de la dirección fiscal del contacto (cliente) (Formato ISO 3166-1 Alpha-2)","nullable":true},"zipcode":{"type":"string","description":"Código postal de la dirección fiscal del contacto","nullable":true},"contact":{"type":"string","nullable":true},"account":{"$ref":"#/components/schemas/AccountCode"},"fiscalPosition":{"$ref":"#/components/schemas/FiscalPosition"},"currency":{"type":"string","description":"Moneda de los importes de la factura (Formato ISO 4217)"},"date":{"type":"string","format":"date","nullable":true},"depreciable":{"type":"boolean"},"docNumber":{"$ref":"#/components/schemas/DocNumberWrite"},"dueDate":{"type":"string","format":"date","nullable":true},"emails":{"type":"string","description":"Lista de emails separados por comas de los destinatarios a los que se enviará por defecto esta factura"},"emailsCc":{"type":"string","description":"Lista de emails separados por comas de los destinatarios a los que se enviará por defecto en copia visible esta factura"},"emailsBcc":{"type":"string","description":"Lista de emails separados por comas de los destinatarios a los que se enviará por defecto en copia oculta esta factura"},"exchangeRate":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Tipo de cambio de la moneda original respecto a la moneda de la empresa"},"lines":{"type":"array","title":"InvoiceLines","description":"Líneas de la factura","items":{"$ref":"#/components/schemas/InvoiceMainLineWrite"}},"manualAccounting":{"$ref":"#/components/schemas/InvoiceMainManualAccounting"},"lineTotalDecimals":{"type":"number","minimum":2,"maximum":6,"multipleOf":1},"notes":{"type":"string","description":"Notas visibles de la factura","nullable":true},"showProductColumn":{"type":"boolean"},"showDiscountColumn":{"type":"boolean"},"showQuantityColumn":{"type":"boolean"},"linesTotal":{"type":"number","description":"Importe total de las líneas. Calculado automáticamente"},"taxes":{"$ref":"#/components/schemas/SalesDocumentTaxes","readOnly":true},"taxIncludedPrices":{"type":"boolean"},"totalBeforeTaxes":{"type":"number","description":"Importe total antes de impuestos. Calculado automáticamente"},"companyCurrencyTotalBeforeTaxes":{"type":"number","description":"Importe total antes de impuestos en la moneda de la contabilidad. Calculado automáticamente"},"paymentMethod":{"type":"string","nullable":true},"theme":{"type":"string"},"total":{"type":"number"},"pendingBeforeAccounting":{"type":"number"},"companyCurrencyTotal":{"type":"number","description":"Importe total en la moneda de la contabilidad. Calculado automáticamente"},"correctedInvoice":{"type":"string","description":"ID de la factura rectificada para una factura rectificativa"},"facturae":{"$ref":"#/components/schemas/InvoiceMainFacturae"},"externalId":{"type":"string"},"installments":{"$ref":"#/components/schemas/Installments"},"internalNotes":{"type":"string","description":"Notas internas de la factura, no serán visibles en el documento impreso"},"draft":{"type":"boolean","description":"Indica si la factura es provisional (true) o definitiva (false). Cuando creamos una factura si no se indica la factura se creará como provisional o definitiva según la configuración de la empresa."},"voided":{"type":"boolean","description":"Indica si es una factura anulada"},"external":{"type":"boolean","description":"Indica que es una factura externa creada fuera del programa. Genera contabilidad e impuestos normalmente, pero NO genera información para VeriFactu ni TicketBAI."},"corrective":{"type":"boolean","description":"Reservado para uso futuro. Indicará si la factura es rectificativa. No utilizar aún, este campo no está activo."},"substitution":{"type":"boolean","description":"Indica que es una factura que sustituye a otras facturas simplificadas (corresponde a F3 en VeriFactu). No genera contabilidad, solo genera información para el modelo 347."},"substitutedInvoices":{"type":"array","items":{"type":"string"},"description":"Array de UUIDs de facturas simplificadas que esta factura sustituye. Solo tiene sentido cuando substitution === true."},"taxCalculationMode":{"type":"string","enum":["total","lines"]},"verifactu":{"$ref":"#/components/schemas/InvoiceMainVerifactu"},"ticketbai":{"$ref":"#/components/schemas/InvoiceMainTicketbai"},"simplified":{"type":"boolean","description":"Indica si la factura es simplificada. Una factura es simplificada cuando no identifica al destinatario con datos fiscales completos."},"counterpart":{"$ref":"#/components/schemas/DocumentCounterpart"},"customFields":{"type":"object","additionalProperties":{"type":"string"},"description":"Valores de campos personalizados"}},"required":["docNumber","lines"]},"import":{"$ref":"#/components/schemas/ImportInformation"},"meta":{"type":"object","title":"InvoiceMeta","description":"Metadatos internos de la factura","additionalProperties":false,"properties":{"automationSource":{"type":"string"},"expeditionTimestamp":{"type":"string","description":"Fecha y hora de expedición de la factura en formato ISO 8601 GMT (ej: 2025-12-05T10:00:02.893Z). Se inicializa automáticamente al guardar la factura por primera vez como definitiva."},"verifactu":{"$ref":"#/components/schemas/InvoiceMetaVerifactu"},"ticketbai":{"oneOf":[{"$ref":"#/components/schemas/InvoiceMetaTicketbai"},{"$ref":"#/components/schemas/InvoiceMetaBatuzNoSG"}]}},"readOnly":true}},"description":"Versión simplificada de la factura con los elementos que calcula automáticamente FacturaDirecta marcados como no obligatorios"},"JournalPriority":{"type":"integer","minimum":1,"maximum":999,"title":"JournalPriority","description":"Orden del asiento en el diario según su tipo: \n\n* 1: Inicio de contabilidad/Apertura periodo\n* 2: Contabilidad ficticia generada por un documento con fecha previa al inicio de contabilidad en el programa\n* 3: Asiento de traspaso de beneficios en la apertura\n* 100: Asiento estándar\n* 970: Amortizaciones\n* 980: Regularización moneda extranjera\n* 990: Cierre grupos 6 y 7\n* 999: Cierre del periodo"},"ModificationDate":{"type":"string","title":"ModificationDate","description":"Fecha de la última modificación del objeto en el sistema (Formato ISO 8601 con representación de timepo en UTC: \"YYYY-MM-DDTHH:mm:ss.sssZ\")","format":"date-time"},"Pagination":{"type":"object","title":"Pagination","description":"Información de paginación de la consulta realizada","additionalProperties":false,"required":["limit","offset","total"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0},"total":{"type":"integer","minimum":0}}},"PaymentMethod":{"type":"object","additionalProperties":false,"title":"PaymentMethod","required":["uuid","type","main"],"properties":{"uuid":{"type":"string"},"type":{"type":"string","enum":["paymentMethod"]},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}},"import":{"$ref":"#/components/schemas/ImportInformation"},"main":{"type":"object","title":"PaymentMethodMain","additionalProperties":false,"required":["title","subtype","details"],"properties":{"title":{"type":"string","description":"Nombre del método de pago para diferenciarlo en los listados"},"direction":{"type":"string","enum":["send","receive"],"description":"Indica si es un método de pago para hacer pagos `send` o para recibirlos `receive`"},"bank":{"type":"string","description":"ID del banco asociado a este método de pago. Se utiliza solo para métodos de pago manuales"},"contact":{"type":"string","description":"ID del contacto al que está asociado este método de pago","nullable":true},"subtype":{"type":"string","enum":["manual","sepaDirectDebit","sepaCreditTransfer"],"description":"Tipo del método de pago:\n\nmanual: Método manual, es solo una descripción para indicarlo en los documentos. No se puede indicar un contacto\nsepaDirectDebit: Mándato para cobros mediante recibo domiciliado. El contacto es obligatorio.\nsepaCreditTransfer: Mandato para pagos mediante transferencia bancaria. El contacto es obligatorio"},"details":{"title":"PaymentMethodDetails","oneOf":[{"type":"object","title":"Manual","description":"Método de pago manual","additionalProperties":false,"properties":{}},{"type":"object","title":"SepaDirectDebit","description":"Detalles del método de pago para cobros mediante recibo domiciliado (Mandato)","additionalProperties":false,"required":["id","signatureDate","instrument","recurrent","bic","iban4"],"properties":{"id":{"type":"string","description":"Identificador del mandato"},"signatureDate":{"type":"string","format":"date","description":"Fecha de firma del mandato","nullable":true},"instrument":{"type":"string","enum":["B2B","CORE"],"description":"Esquema de adeudo: B2B o CORE"},"recurrent":{"type":"boolean","description":"Indicador de mandato para cobros recurrentes"},"iban":{"type":"string","minLength":1,"description":"Código IBAN de la cuenta en la que se realizarán los cargos"},"bic":{"type":"string","description":"Código SWFIT/BIC de la entidad bancaria a la que pertenece la cuenta en la que se realizarán los cargos. Necesario solo para cobros internacionales"},"iban4":{"type":"string","minLength":1,"description":"Últimos 4 dígitos del IBAN de la cuenta en la que se realizarán los cargos"}}},{"type":"object","title":"SepaCreditTransfer","additionalProperties":false,"required":["bic","iban4"],"properties":{"iban":{"type":"string","minLength":1,"description":"Código IBAN de la cuenta a la que se harán los pagos"},"bic":{"type":"string","description":"Código SWFIT/BIC de la entidad bancaria a la que pertenece la cuenta a la que se harán los pagos. Necesario solo para cobros internacionales"},"iban4":{"type":"string","minLength":1,"description":"Últimos 4 dígitos del IBAN de la cuenta a la que hacer los pagos"}}}]}}}}},"PaymentMethodResponse":{"type":"object","title":"PaymentMethodResponse","required":["content","creationDate","modificationDate"],"additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/PaymentMethod"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}},"PaymentMethodWrite":{"type":"object","additionalProperties":false,"title":"PaymentMethodWrite","required":["type","main"],"properties":{"uuid":{"type":"string"},"type":{"type":"string","enum":["paymentMethod"]},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}},"import":{"$ref":"#/components/schemas/ImportInformation"},"main":{"type":"object","title":"PaymentMethodMain","additionalProperties":false,"required":["title","subtype","details"],"properties":{"title":{"type":"string","description":"Nombre del método de pago para diferenciarlo en los listados"},"direction":{"type":"string","enum":["send","receive"],"description":"Indica si es un método de pago para hacer pagos `send` o para recibirlos `receive`"},"bank":{"type":"string","description":"ID del banco asociado a este método de pago. Se utiliza solo para métodos de pago manuales"},"contact":{"type":"string","description":"ID del contacto al que está asociado este método de pago","nullable":true},"subtype":{"type":"string","enum":["manual","sepaDirectDebit","sepaCreditTransfer"],"description":"Tipo del método de pago:\n\nmanual: Método manual, es solo una descripción para indicarlo en los documentos. No se puede indicar un contacto\nsepaDirectDebit: Mándato para cobros mediante recibo domiciliado. El contacto es obligatorio.\nsepaCreditTransfer: Mandato para pagos mediante transferencia bancaria. El contacto es obligatorio"},"details":{"title":"PaymentMethodDetails","oneOf":[{"type":"object","title":"Manual","description":"Método de pago manual","additionalProperties":false,"properties":{}},{"type":"object","title":"SepaDirectDebit","description":"Detalles del método de pago para cobros mediante recibo domiciliado (Mandato)","additionalProperties":false,"required":["id","signatureDate","instrument","recurrent","iban"],"properties":{"id":{"type":"string","description":"Identificador del mandato"},"signatureDate":{"type":"string","format":"date","description":"Fecha de firma del mandato","nullable":true},"instrument":{"type":"string","enum":["B2B","CORE"],"description":"Esquema de adeudo: B2B o CORE"},"recurrent":{"type":"boolean","description":"Indicador de mandato para cobros recurrentes"},"iban":{"type":"string","minLength":1,"description":"Código IBAN de la cuenta en la que se realizarán los cargos"},"bic":{"type":"string","description":"Código SWFIT/BIC de la entidad bancaria a la que pertenece la cuenta en la que se realizarán los cargos. Necesario solo para cobros internacionales"},"iban4":{"type":"string","minLength":1,"description":"Últimos 4 dígitos del IBAN de la cuenta en la que se realizarán los cargos"}}},{"type":"object","title":"SepaCreditTransfer","additionalProperties":false,"required":["iban"],"properties":{"iban":{"type":"string","minLength":1,"description":"Código IBAN de la cuenta a la que se harán los pagos"},"bic":{"type":"string","description":"Código SWFIT/BIC de la entidad bancaria a la que pertenece la cuenta a la que se harán los pagos. Necesario solo para cobros internacionales"},"iban4":{"type":"string","minLength":1,"description":"Últimos 4 dígitos del IBAN de la cuenta a la que hacer los pagos"}}}]}}}},"description":"Versión simplificada del método de pago con los elementos que calcula automáticamente FacturaDirecta marcados como no obligatorios"},"Payroll":{"type":"object","title":"Payroll","required":["uuid","type","main"],"additionalProperties":false,"properties":{"uuid":{"type":"string"},"type":{"type":"string","enum":["payroll"]},"accounting":{"$ref":"#/components/schemas/Accounting","readOnly":true},"books":{"$ref":"#/components/schemas/Books","readOnly":true},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}},"import":{"$ref":"#/components/schemas/ImportInformation"},"main":{"type":"object","title":"PayrollMain","required":["account","currency","modelo190","lines","contact","date","dueDate"],"additionalProperties":false,"properties":{"title":{"type":"string","description":"Título del documento para identificarlo en los listados, se calcula automáticamente"},"contact":{"type":"string","description":"Empleado para el que se ha emitido esta nómina"},"country":{"type":"string","description":"País de la dirección fiscal del contacto (empleado) (Formato ISO 3166-1 Alpha-2)","nullable":true},"zipcode":{"type":"string","description":"Código postal de la dirección fiscal del contacto (empleado)","nullable":true},"account":{"description":"Número de cuenta contable en la que anotar las remuneraciones pendientes asociadas a la nómina (Habitualmente 465000)","allOf":[{"$ref":"#/components/schemas/AccountCode"}]},"currency":{"type":"string","description":"Moneda orignal de la nómina. (Actualmente limitado a EUR)"},"exchangeRate":{"type":"number","minimum":1,"maximum":1,"description":"Tipo de cambio de la moneda original respecto a la moneda de la empresa. (Siempre 1 para nóminas)"},"lines":{"type":"array","title":"PayrollLines","description":"Líneas de la nómina","minItems":1,"items":{"$ref":"#/components/schemas/PayrollLine"}},"totalBeforeTaxes":{"type":"number","description":"Importe total devengado en la moneda original de la nómina"},"total":{"type":"number","description":"Importe líquido a percibir en la moneda original de la nómina"},"companyCurrencyTotalBeforeTaxes":{"type":"number","description":"Importe total devengado contabilizado en la moneda de contabilidad la empresa"},"companyCurrencyTotal":{"type":"number","description":"Importe líquido a percibir en la moneda de contabilidad la empresa"},"pendingBeforeAccounting":{"type":"number","description":"Importe pendiente de pagar de una nómina que se registra en el programa con fecha anterior a la del inicio de contabilidad de la empresa en el programa.\n\nSolo puede utilizarse en nóminas con fecha anterior a la fecha de inicio contable en el programa."},"notes":{"type":"string","description":"Notas internas de la nómina"},"date":{"type":"string","format":"date","description":"Fecha de contabilización de la nómina en formato yyyy-mm-dd"},"dueDate":{"type":"string","format":"date","description":"Fecha de vencimiento de la nómina en formato yyyy-mm-dd"},"paymentMethod":{"type":"string","description":"ID del método de pago que se utilizará para saldar esta nómina","nullable":true},"task":{"type":"string","description":"Identificador del documento externo subido que se ha utilizado como origen de esta nómina en un proceso de conversión realizado en el programa."},"modelo190":{"type":"object","additionalProperties":false,"required":["clavePercepcion"],"properties":{"clavePercepcion":{"type":"string","minLength":1,"maxLength":1,"pattern":"[A-Z]{1}"},"subclavePercepcion":{"type":"string","minLength":2,"maxLength":2,"pattern":"[0-9]{2}"}}},"customFields":{"type":"object","additionalProperties":{"type":"string"},"description":"Valores de campos personalizados"}}},"meta":{"type":"object","title":"PayrollMeta","description":"Metadatos internos de la nómina","additionalProperties":false,"properties":{"automationSource":{"type":"string"}},"readOnly":true}}},"PayrollLine":{"type":"object","title":"PayrollLine","additionalProperties":false,"required":["type","lineTotal","account"],"properties":{"type":{"type":"string","enum":["debit","credit","irpf_employee","irpf_employee_kind","irpf_employee_kind_passedon","ss_employee","ss_company"],"description":"Indica el tipo de anotación en la nómina con los siguientes valores:\n\n* debit: Salario\n* credit: Deducción\n* irpf_employee: Retención de IRPF (Percepciones dinerarias)\n* irpf_employee_kind: Retención de IRPF (Percepciones en especie)\n* ss_employee: Aportaciones Seguridad Social a cargo del trabajador\n* ss_company: Aportaciones Seguridad Social a cargo de la empresa"},"debitType":{"type":"string","enum":["salary","nonSalary"],"description":"Solo para líneas con type=\"debit\", indica si la percepción es salarial o no salarial "},"label":{"type":"string","description":"Etiqueta interna descriptiva del tipo de línea"},"text":{"type":"string","description":"Etiqueta de libre uso del tipo de línea"},"account":{"$ref":"#/components/schemas/AccountCode"},"base":{"type":"number","description":"Base imponible de la línea"},"lineTotal":{"type":"number","description":"Importe aplicado en la línea"}}},"PayrollPaymentsWrite":{"type":"array","title":"PayrollPaymentsWrite","description":"Permite crear un pago para una nómina.\n\nSe pueden crear múltiples pagos e indicar el importe individual para cada uno de ellos.\n\nSi no se indica el importe (amount) se considera que con ese pago se quiere saldar todo el importe pendiente de la mónima, dentro del array solo puede haber un pago sin importe y debe estar en la última posición del array","items":{"type":"object","title":"PayrollPaymentWrite","description":"Nuevo pago de una nómina.","required":["bank"],"properties":{"date":{"type":"string","format":"date","description":"Fecha en la que contabilizar el pago, si no se indica se usa la fecha de la nómina cuando se crea una nómina o la fecha actual cuando se actualiza"},"bank":{"type":"string","description":"ID del banco en el que se anota el pago"},"amount":{"type":"number","description":"Importe del pago en la moneda original de la nómina. Si no se indica se saldará todo el importe pendiente de la nómina"},"companyCurrencyAmount":{"type":"number","description":"Importe a contabilizar en euros, puede indicarse solo cuando la moneda de la nómina sea distinta a euros y se quiera indicar el valor exacto a contabilizar de dicho pago en euros. Si no se indica se aplicará un tipo de cambio de forma automática según la fecha del pago"},"description":{"type":"string","description":"Descripción del pago. Sustituye al título por defecto (\"Pago <nómina>\"). Visible en la columna \"Descripción\" de Bancos → Movimientos. Útil para almacenar una referencia operativa del pago real (p. ej. referencia de transferencia)."},"notes":{"type":"string","description":"Notas asociadas al pago. Texto libre adicional consultable desde Bancos → Movimientos. Útil cuando se quiere mantener la descripción auto-generada y registrar aparte una referencia operativa."}}}},"PayrollPaymentsWriteResponse":{"type":"object","title":"PayrollPaymentsWriteResponse","required":["content","tags","creationDate","modificationDate"],"additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Payroll"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"},"related":{"type":"object","title":"PayrollRelated","additionalProperties":false,"properties":{"balance":{"type":"object","title":"PayrollBalance","description":"Saldo abierto de la nómina.\n\nSe devuelve el saldo contable de la nómina, el importe pendiente de pagar se muestra como un valor positivo. El importe se indica en la moneda de la nómina en el elemento `currencyBalance` y en la moneda de la contabilidad de la empresa en el elemento `balance`\n\n```\n{\n  \"balance\": {\n    \"balance\": 28.56,\n    \"currency\": \"EUR\",\n    \"currencyBalance\": 28.56\n  }\n}\n```\n","required":["balance","currency","currencyBalance"],"properties":{"balance":{"type":"number","description":"Saldo pendiente de la nómina en EUR"},"currency":{"type":"string","description":"Moneda original del saldo pendiente de la nómina (Formato ISO 4217). Actualmente restringido a EUR"},"currencyBalance":{"type":"number","description":"Saldo pendiente de la nómina en la moneda de la nómina"}}},"state":{"type":"string","enum":["pending","overdue","paid","overpaid"],"description":"Estado de la nómina.\n\n* pending: Pendiente de pago (Nómina con saldo pendiente que aún no ha alcanzado las fechas de vencimiento previstas)\n* overdue: Vencida (El saldo pendiente actual es superior al esperado según la información de vencimientos)\n* paid: Pagada (Nómina con saldo pendiente cero)\n* overpaid: Sobrepagada (Tiene pagos por encima del importe esperado)"},"journal":{"type":"array","description":"Apuntes contables de `/journal` que afectan al saldo de la nómina.\n\nSe devuelve una entrada por cada documento de saldo (cobros, pagos o remesas SEPA), con la misma forma reducida del endpoint `GET /{companyId}/journal?document={id}` pero sin los campos redundantes con el documento padre (`document`, `documentType`, `documentTitle`) ni los opt-in del endpoint `/journal` (`idAccounting`, `tags`).\n\nLos IDs son polimórficos:\n\n* **`tra_<uuid-v4>`** — `transaction` (asiento contable directo). Caso típico cuando el cobro/pago se ha registrado manualmente o vía transferencia convencional anotada en un banco.\n* **`pay_<uuid-v4>`** — `payment` (remesa SEPA). Aparece cuando la operación se ha agrupado en una remesa de adeudos directos o transferencias SEPA.\n\nLa lista incluye **todos** los apuntes que actualmente componen el saldo (no sólo los recién creados en una llamada). El orden es el mismo que devolvería `GET /journal?document={id}`: por fecha, prioridad contable y línea.\n\nLos campos `currency`, `currencyDebit` y `currencyCredit` sólo aparecen si la empresa tiene multicurrency activada y el apunte está en una moneda distinta a la de la contabilidad.","items":{"$ref":"#/components/schemas/RelatedJournalEntry"}}}},"paymentsInfo":{"type":"object","properties":{"total":{"type":"number","description":"Número total de pagos que modifican el saldo de la nómina"},"totalCreated":{"type":"number","description":"Número total de pagos creados en esta operación"}}}}},"PayrollResponse":{"type":"object","title":"PayrollResponse","required":["content","tags","creationDate","modificationDate"],"additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Payroll"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"},"related":{"type":"object","title":"PayrollRelated","additionalProperties":false,"properties":{"balance":{"type":"object","title":"PayrollBalance","description":"Saldo abierto de la nómina.\n\nSe devuelve el saldo contable de la nómina, el importe pendiente de pagar se muestra como un valor positivo. El importe se indica en la moneda de la nómina en el elemento `currencyBalance` y en la moneda de la contabilidad de la empresa en el elemento `balance`\n\n```\n{\n  \"balance\": {\n    \"balance\": 28.56,\n    \"currency\": \"EUR\",\n    \"currencyBalance\": 28.56\n  }\n}\n```\n","required":["balance","currency","currencyBalance"],"properties":{"balance":{"type":"number","description":"Saldo pendiente de la nómina en EUR"},"currency":{"type":"string","description":"Moneda original del saldo pendiente de la nómina (Formato ISO 4217). Actualmente restringido a EUR"},"currencyBalance":{"type":"number","description":"Saldo pendiente de la nómina en la moneda de la nómina"}}},"state":{"type":"string","enum":["pending","overdue","paid","overpaid"],"description":"Estado de la nómina.\n\n* pending: Pendiente de pago (Nómina con saldo pendiente que aún no ha alcanzado las fechas de vencimiento previstas)\n* overdue: Vencida (El saldo pendiente actual es superior al esperado según la información de vencimientos)\n* paid: Pagada (Nómina con saldo pendiente cero)\n* overpaid: Sobrepagada (Tiene pagos por encima del importe esperado)"},"journal":{"type":"array","description":"Apuntes contables de `/journal` que afectan al saldo de la nómina.\n\nSe devuelve una entrada por cada documento de saldo (cobros, pagos o remesas SEPA), con la misma forma reducida del endpoint `GET /{companyId}/journal?document={id}` pero sin los campos redundantes con el documento padre (`document`, `documentType`, `documentTitle`) ni los opt-in del endpoint `/journal` (`idAccounting`, `tags`).\n\nLos IDs son polimórficos:\n\n* **`tra_<uuid-v4>`** — `transaction` (asiento contable directo). Caso típico cuando el cobro/pago se ha registrado manualmente o vía transferencia convencional anotada en un banco.\n* **`pay_<uuid-v4>`** — `payment` (remesa SEPA). Aparece cuando la operación se ha agrupado en una remesa de adeudos directos o transferencias SEPA.\n\nLa lista incluye **todos** los apuntes que actualmente componen el saldo (no sólo los recién creados en una llamada). El orden es el mismo que devolvería `GET /journal?document={id}`: por fecha, prioridad contable y línea.\n\nLos campos `currency`, `currencyDebit` y `currencyCredit` sólo aparecen si la empresa tiene multicurrency activada y el apunte está en una moneda distinta a la de la contabilidad.","items":{"$ref":"#/components/schemas/RelatedJournalEntry"}}}}}},"PayrollWrite":{"type":"object","title":"PayrollWrite","required":["type","main"],"additionalProperties":false,"properties":{"uuid":{"type":"string"},"type":{"type":"string","enum":["payroll"]},"accounting":{"$ref":"#/components/schemas/Accounting","readOnly":true},"books":{"$ref":"#/components/schemas/Books","readOnly":true},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentWrite"},"maxItems":10},"import":{"$ref":"#/components/schemas/ImportInformation"},"main":{"type":"object","title":"PayrollMain","required":["modelo190","lines","contact"],"additionalProperties":false,"properties":{"title":{"type":"string","description":"Título del documento para identificarlo en los listados, se calcula automáticamente"},"contact":{"type":"string","description":"Empleado para el que se ha emitido esta nómina"},"country":{"type":"string","description":"País de la dirección fiscal del contacto (empleado) (Formato ISO 3166-1 Alpha-2)","nullable":true},"zipcode":{"type":"string","description":"Código postal de la dirección fiscal del contacto (empleado)","nullable":true},"account":{"description":"Número de cuenta contable en la que anotar las remuneraciones pendientes asociadas a la nómina (Habitualmente 465000)","allOf":[{"$ref":"#/components/schemas/AccountCode"}]},"currency":{"type":"string","description":"Moneda orignal de la nómina. (Actualmente limitado a EUR)"},"exchangeRate":{"type":"number","minimum":1,"maximum":1,"description":"Tipo de cambio de la moneda original respecto a la moneda de la empresa. (Siempre 1 para nóminas)"},"lines":{"type":"array","title":"PayrollLines","description":"Líneas de la nómina","minItems":1,"items":{"$ref":"#/components/schemas/PayrollLine"}},"totalBeforeTaxes":{"type":"number","description":"Importe total devengado en la moneda original de la nómina"},"total":{"type":"number","description":"Importe líquido a percibir en la moneda original de la nómina"},"companyCurrencyTotalBeforeTaxes":{"type":"number","description":"Importe total devengado contabilizado en la moneda de contabilidad la empresa"},"companyCurrencyTotal":{"type":"number","description":"Importe líquido a percibir en la moneda de contabilidad la empresa"},"pendingBeforeAccounting":{"type":"number","description":"Importe pendiente de pagar de una nómina que se registra en el programa con fecha anterior a la del inicio de contabilidad de la empresa en el programa.\n\nSolo puede utilizarse en nóminas con fecha anterior a la fecha de inicio contable en el programa."},"notes":{"type":"string","description":"Notas internas de la nómina"},"date":{"type":"string","format":"date","description":"Fecha de contabilización de la nómina en formato yyyy-mm-dd"},"dueDate":{"type":"string","format":"date","description":"Fecha de vencimiento de la nómina en formato yyyy-mm-dd"},"paymentMethod":{"type":"string","description":"ID del método de pago que se utilizará para saldar esta nómina","nullable":true},"task":{"type":"string","description":"Identificador del documento externo subido que se ha utilizado como origen de esta nómina en un proceso de conversión realizado en el programa."},"modelo190":{"type":"object","additionalProperties":false,"required":["clavePercepcion"],"properties":{"clavePercepcion":{"type":"string","minLength":1,"maxLength":1,"pattern":"[A-Z]{1}"},"subclavePercepcion":{"type":"string","minLength":2,"maxLength":2,"pattern":"[0-9]{2}"}}},"customFields":{"type":"object","additionalProperties":{"type":"string"},"description":"Valores de campos personalizados"}}},"meta":{"type":"object","title":"PayrollMeta","description":"Metadatos internos de la nómina","additionalProperties":false,"properties":{"automationSource":{"type":"string"}},"readOnly":true}},"description":"Versión simplificada de la nómina con los elementos que calcula automáticamente FacturaDirecta marcados como no obligatorios"},"Product":{"type":"object","title":"Product","required":["main","type","uuid"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["product"]},"uuid":{"type":"string"},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}},"main":{"type":"object","title":"ProductMain","additionalProperties":false,"required":["name","currency"],"properties":{"title":{"type":"string","description":"Título del producto. Calculado automáticamente"},"name":{"type":"string"},"sku":{"type":"string"},"externalId":{"type":"string","description":"ID externo del producto. Debe ser único entre todos los productos"},"sales":{"type":"object","title":"ProductSales","additionalProperties":false,"required":["account","tax"],"properties":{"price":{"type":"number"},"discountRate":{"type":"number"},"description":{"type":"string"},"tax":{"type":"array","title":"ProductSalesTaxes","items":{"$ref":"#/components/schemas/TaxId"}},"account":{"$ref":"#/components/schemas/AccountCode"}}},"purchases":{"type":"object","title":"ProductPurchases","additionalProperties":false,"required":["account","tax"],"properties":{"price":{"type":"number"},"discountRate":{"type":"number"},"description":{"type":"string"},"tax":{"type":"array","title":"ProductPurchasesTaxes","items":{"$ref":"#/components/schemas/TaxId"}},"account":{"$ref":"#/components/schemas/AccountCode"},"depreciable":{"type":"boolean"}}},"currency":{"type":"string","description":"Moneda de los precios del producto (Formato ISO 4217)"}}},"import":{"$ref":"#/components/schemas/ImportInformation"}}},"ProductWrite":{"type":"object","title":"ProductWrite","required":["main","type"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["product"]},"uuid":{"type":"string"},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}},"main":{"type":"object","title":"ProductMain","additionalProperties":false,"required":["name","currency"],"properties":{"title":{"type":"string","description":"Título del producto. Calculado automáticamente"},"name":{"type":"string"},"sku":{"type":"string"},"externalId":{"type":"string","description":"ID externo del producto. Debe ser único entre todos los productos"},"sales":{"type":"object","title":"ProductSales","additionalProperties":false,"required":["account","tax"],"properties":{"price":{"type":"number"},"discountRate":{"type":"number"},"description":{"type":"string"},"tax":{"type":"array","title":"ProductSalesTaxes","items":{"$ref":"#/components/schemas/TaxId"}},"account":{"$ref":"#/components/schemas/AccountCode"}}},"purchases":{"type":"object","title":"ProductPurchases","additionalProperties":false,"required":["account","tax"],"properties":{"price":{"type":"number"},"discountRate":{"type":"number"},"description":{"type":"string"},"tax":{"type":"array","title":"ProductPurchasesTaxes","items":{"$ref":"#/components/schemas/TaxId"}},"account":{"$ref":"#/components/schemas/AccountCode"},"depreciable":{"type":"boolean"}}},"currency":{"type":"string","description":"Moneda de los precios del producto (Formato ISO 4217)"}}},"import":{"$ref":"#/components/schemas/ImportInformation"}},"description":"Versión simplificada del producto con los elementos que calcula automáticamente FacturaDirecta marcados como no obligatorios"},"ProfileCompany":{"type":"object","title":"ProfileCompany","required":["id","name","owner","role","taxCode"],"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"taxCode":{"type":"string"},"brand":{"type":"string"},"owner":{"type":"string"},"role":{"type":"string"}}},"ProfileUser":{"type":"object","title":"ProfileUser","required":["username","email","firstName","lastName","companies"],"additionalProperties":false,"properties":{"username":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"companies":{"type":"array","title":"Companies","items":{"$ref":"#/components/schemas/ProfileCompany"}}}},"PublicApiKeyInfo":{"type":"object","title":"PublicApiKeyInfo","additionalProperties":false,"required":["id","name","prefix","scopes","creationTime","managedViaApi"],"properties":{"id":{"type":"string","description":"Identificador único de la API key"},"name":{"type":"string","description":"Nombre descriptivo de la API key"},"prefix":{"type":"string","description":"Prefijo de 6 caracteres de la API key para identificación"},"scopes":{"type":"array","items":{"type":"string"},"description":"Lista de scopes autorizados"},"creationTime":{"type":"string","description":"Fecha de creación (ISO 8601)"},"createdBy":{"type":"string","description":"Usuario que creó la API key"},"managedViaApi":{"type":"boolean","description":"Indica si la API key fue creada vía API y puede ser eliminada vía API"}}},"PublicApiPresignedUpload":{"type":"object","title":"PublicApiPresignedUpload","additionalProperties":false,"required":["id","name","contentType","signedRequest","expiresAt"],"properties":{"id":{"type":"string","description":"Identificador del upload (prefijo `upl_`)"},"name":{"type":"string","description":"Nombre del archivo solicitado"},"contentType":{"type":"string","description":"MIME type indicado (puede haber sido normalizado)"},"signedRequest":{"type":"string","description":"URL pre-firmada de S3 para hacer PUT con el binario. Tras el PUT, llama a POST /uploads/{uploadId}/commit para sellar."},"expiresAt":{"type":"string","format":"date-time","description":"Fecha límite para hacer el PUT y el commit."}}},"PublicApiUpload":{"type":"object","title":"PublicApiUpload","additionalProperties":false,"required":["id","name","size","contentType","expiresAt"],"properties":{"id":{"type":"string","description":"Identificador del upload (prefijo `upl_`). Úsalo para vincular el archivo a un documento."},"name":{"type":"string","description":"Nombre original del archivo"},"size":{"type":"integer","description":"Tamaño del archivo en bytes"},"contentType":{"type":"string","description":"MIME type detectado (puede haber sido normalizado, p.ej. text/xml → application/xml)"},"contentSubtype":{"type":"string","nullable":true,"enum":["facturae",null],"description":"Subtipo detectado automáticamente. `facturae` si se ha detectado un XML Facturae válido."},"expiresAt":{"type":"string","format":"date-time","description":"Fecha límite para vincular este upload a un documento. Pasada esta fecha, el upload caduca y se purga."}}},"PurchasesTax":{"type":"object","title":"PurchasesTax","description":"Impuesto de compra","required":["id","taxGroup","value","account","title","shortTitle","current","country","selectorFlags"],"additionalProperties":false,"properties":{"id":{"type":"string"},"taxGroup":{"type":"string","description":"Grupo de impuestos.\n\n  No se debe asumir que siempre van a existir estos valores, si hay cambios normativos pueden definirse nuevos valores en cualquier momento.\n\n  Los grupos disponibles en cada empresas pueden ser distintos según su dirección fiscal.\n  \n  * IVA: IVA\n  * IVA_RE: IVA de recargo de equivalencia\n  * IGIC: Impuesto General Indirecto Canario (Canarias)\n  * IPSI: Impuesto sobre la Producción, los Servicios y la Importación (Ceuta y Melilla)\n  * IRPF: Retención de IRPF\n  ","enum":["IVA","IVA_RE","IGIC","IPSI","IRPF"]},"value":{"type":"number","description":"Porcentaje del impuesto en base 1.\n\nValor: 0.21 para IVA 21%"},"account":{"$ref":"#/components/schemas/AccountCode"},"title":{"type":"string","description":"Nombre completo del impuesto"},"shortTitle":{"type":"string","description":"Nombre corto del impuesto"},"current":{"type":"boolean","description":"Indica si es un impuesto vigente actualmente"},"country":{"type":"string","description":"País de recaudación del impuesto (Formato ISO 3166-1 Alpha-2)"},"category":{"type":"string","description":"Categoría funcional del impuesto. Permite agrupar y filtrar los impuestos por su función en el sistema fiscal.\n\nNo se debe asumir que siempre van a existir estos valores, si hay cambios normativos pueden definirse nuevos valores en cualquier momento.\n\n* standard_vat: IVA/IGIC/IPSI estándar (tipos normal, reducido, superreducido y temporales)\n* exempt_vat: Operación exenta de IVA/IGIC\n* intra_community: Operación intracomunitaria. En compras se genera automáticamente un par autorepercutido (efecto neto cero)\n* reverse_charge: Inversión del sujeto pasivo. El comprador liquida el impuesto en lugar del vendedor\n* equivalence_surcharge: Recargo de equivalencia (régimen especial de comerciantes minoristas)\n* withholding: Retención de IRPF a cuenta del impuesto sobre la renta del perceptor\n* rental_withholding: Retención de IRPF por alquiler de inmueble urbano\n* pass_through: Suplidos: gastos pagados en nombre de un tercero, sin IVA\n* import_customs: Importación de bienes tramitada por aduana (DUA). El IVA se paga en aduana y es deducible\n* import_services: Importación de servicios extracomunitarios (genera par autorepercutido)\n* import_pending_customs: Importación pendiente de despacho aduanero (IVA al 0% temporal)\n* agriculture: Compensación a explotaciones en régimen especial de agricultura\n","enum":["standard_vat","exempt_vat","intra_community","reverse_charge","equivalence_surcharge","withholding","rental_withholding","pass_through","import_customs","import_services","import_pending_customs","agriculture"]},"description":{"type":"string","description":"Explicación breve, en español, del propósito y funcionamiento de este impuesto. Orientada a ayudar al integrador a elegir el impuesto correcto para cada operación."},"selectorFlags":{"type":"array","description":"Indica dónde puede el usuario aplicar este impuesto:\n\n* product: Puede asignarse a un producto del catálogo como impuesto por defecto.\n* line: Puede aplicarse en líneas de documentos (facturas, presupuestos, gastos, etc.).\n\nUn array vacío indica un impuesto que no se selecciona manualmente. Es el caso de los impuestos autorepercutidos: se aplican automáticamente cuando se usa su impuesto pareja (ver `pairedWith` y `autoApplied`).","items":{"type":"string","enum":["product","line"]}},"autoApplied":{"type":"boolean","description":"Si es `true`, este impuesto se aplica automáticamente cuando se usa el impuesto referenciado en `pairedWith`. El usuario no lo selecciona directamente.\n\nEs el mecanismo de los impuestos autorepercutidos: en compras intracomunitarias, inversión del sujeto pasivo o importación de servicios extracomunitarios, el sistema genera un par de impuestos (uno deducible y otro devengado) cuyo efecto neto es cero pero ambos deben quedar reflejados en la declaración."},"pairedWith":{"type":"string","description":"Identificador del impuesto pareja al que está vinculado este impuesto.\n\n* En el impuesto base (no autorepercutido) apunta al impuesto autorepercutido que se generará automáticamente cuando se aplique.\n* En el impuesto autorepercutido (`autoApplied: true`) apunta al impuesto base que dispara su aplicación automática."},"lineAmountIsTax":{"type":"boolean","description":"Si es `true`, el comportamiento de la línea de gasto que use este impuesto es **especial**: el importe de la línea es directamente la cuota de IVA, no la base imponible.\n\nAplica al IVA de importación tramitado por aduana (DUA), donde la aduana repercute al importador una cuota global de IVA que se anota tal cual, sin recalcular `base × tipo`. Es responsabilidad del integrador detectar este flag y tratar el importe de la línea como cuota directa."}}},"ReconcileStatementResponse":{"type":"object","title":"ReconcileStatementResponse","description":"Resultado de la operación de conciliación","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"object","required":["uuid","state","matchedDocument"],"properties":{"uuid":{"type":"string","description":"Identificador del extracto bancario"},"state":{"type":"string","enum":["reconciled","pending"],"description":"Estado de conciliación tras la operación"},"matchedDocument":{"type":"string","nullable":true,"description":"Identificador del documento conciliado"}}}}},"ReconcileWithNewTransactionResponse":{"type":"object","title":"ReconcileWithNewTransactionResponse","description":"Resultado de la conciliación con creación de asiento contable","additionalProperties":false,"required":["content","transaction","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/StatementContent"},"transaction":{"$ref":"#/components/schemas/Transaction"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}},"RecurringInvoice":{"type":"object","title":"RecurringInvoice","required":["type","main","uuid"],"additionalProperties":false,"properties":{"uuid":{"type":"string"},"type":{"enum":["automation"]},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}},"import":{"$ref":"#/components/schemas/ImportInformation"},"main":{"type":"object","required":["title","enabled","trigger","action"],"additionalProperties":false,"properties":{"title":{"type":"string"},"enabled":{"type":"boolean"},"trigger":{"$ref":"#/components/schemas/RecurringTrigger"},"action":{"$ref":"#/components/schemas/RecurringInvoiceAction"}}}}},"RecurringInvoiceAction":{"type":"object","required":["type","template"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["createDocument"]},"template":{"$ref":"#/components/schemas/Invoice"},"send":{"description":"Enviar la factura generada por correo electrónico en el momento de generarse","type":"boolean"},"emailFrom":{"description":"Remitente utilizado si se envía la factura generada por correo electrónico en el momento de generarla","type":"string"},"dueDateDelta":{"description":"Días de plazo para el vencimiento de la factura creada","type":"integer"},"disabledDayContact":{"description":"Ignorar la configuración de días de pago del contacto para determinar el vencimiento de la factura creada","type":"boolean"},"sendFacturae":{"description":"Incluir la factura generada en formato facturae si se envía por correo electrónico en el momento de generarla","type":"boolean"}},"title":"RecurringInvoiceAction"},"RecurringInvoiceActionWrite":{"type":"object","required":["type","template"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["createDocument"]},"template":{"$ref":"#/components/schemas/InvoiceWrite"},"send":{"description":"Enviar la factura generada por correo electrónico en el momento de generarse","type":"boolean"},"emailFrom":{"description":"Remitente utilizado si se envía la factura generada por correo electrónico en el momento de generarla","type":"string"},"dueDateDelta":{"description":"Días de plazo para el vencimiento de la factura creada","type":"integer"},"disabledDayContact":{"description":"Ignorar la configuración de días de pago del contacto para determinar el vencimiento de la factura creada","type":"boolean"},"sendFacturae":{"description":"Incluir la factura generada en formato facturae si se envía por correo electrónico en el momento de generarla","type":"boolean"}},"title":"RecurringInvoiceActionWrite"},"RecurringInvoiceResponse":{"type":"object","title":"RecurringInvoiceResponse","required":["content","tags","creationDate","modificationDate"],"additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/RecurringInvoice"},"tags":{"$ref":"#/components/schemas/Tags"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"},"related":{"type":"object","title":"RecurringInvoiceRelated","additionalProperties":false,"properties":{"objects":{"type":"object","title":"RecurringInvoiceRelatedObjects","description":"Mapa de objetos relacionados solicitados, cada clave de este objeto es el id de un objeto relacionado y el valor es el contenido del mismo","properties":{"object_id":{"anyOf":[{"$ref":"#/components/schemas/TaxDefinition"}]}}},"nextScheduledTime":{"title":"NextScheduledTime","description":"Fecha y hora programada de próxima ejecución.","type":"string","format":"date-time"},"upcomingSceheduledTimes":{"title":"UpcominigScheduledTimes","description":"5 próximas fechas y horas de ejecución programadas.","type":"array","minItems":0,"maxItems":5,"items":{"type":"string","format":"date-time"}}}}}},"RecurringInvoiceWrite":{"type":"object","title":"RecurringInvoiceWrite","required":["type","main"],"additionalProperties":false,"properties":{"uuid":{"type":"string"},"type":{"enum":["automation"]},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}},"import":{"$ref":"#/components/schemas/ImportInformation"},"main":{"type":"object","required":["title","enabled","trigger","action"],"additionalProperties":false,"properties":{"title":{"type":"string"},"enabled":{"type":"boolean"},"trigger":{"$ref":"#/components/schemas/RecurringTrigger"},"action":{"$ref":"#/components/schemas/RecurringInvoiceActionWrite"}}}},"description":"Versión simplificada de la factura recurrente con los elementos que calcula automáticamente FacturaDirecta marcados como no obligatorios"},"RecurringTrigger":{"type":"object","title":"RecurringTrigger","required":["type","rrule"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["recurring"]},"daysAdvance":{"description":"Para uso futuro, indicar siempre cero","type":"integer","minimum":0,"maximum":0},"rrule":{"description":"Definición de los parámetros de ejecución recurrente","type":"object","required":["freq","interval","dtstart"],"additionalProperties":false,"properties":{"dtstart":{"description":"Fecha de inicio, se empezarán a evaluar las ejecuciones solo a partir de la fecha indicada en formato ISO, ejemplo: \"2040-01-01T06:00:00.000Z\"","type":"string","format":"date-time"},"until":{"description":"Fecha de fin. Si se indica no se ejecutará ninguna después de esta fecha indicada en formato ISO, ejemplo: \"2042-01-01T06:00:00.000Z\"\n\nSolo puede indicarse uno de los valores `until` o `count`","type":"string","format":"date-time"},"count":{"description":"Número de ejecuciones totales. Se contabilizan a partir del valor indicado en `dtstart`.\n\nSolo puede indicarse uno de los valores `until` o `count`","type":"integer","minimum":1},"freq":{"description":"Frecuencia de ejecución, se usa junto a `interval` Valores posibles:\n\n* daily: Diario\n* weekly: Semanal\n* monthly: Mensual\n* yearly: Anual","enum":["yearly","monthly","weekly","daily"]},"interval":{"description":"Número de unidades de tiempo indicadas por `interval` cada las cuales se ejecuta\n\n* Para `freq=daily` cada cuántos días\n* Para `freq=weekly` cada cuántas semanas\n* Para `freq=monthly` cada cuántos meses\n* Para `freq=yearly` cada cuántos años\n","type":"integer","minimum":1},"bymonth":{"description":"Para `freq=yearly` permite indicar el mes de ejecución (1=Enero, 12=Diciembre)","type":"integer","minimum":1,"maximum":12},"bymonthday":{"description":"Para `freq=monthly` y `freq=yearly` permite indicar el día del mes de ejecución (1=Enero, 12=Diciembre)\n\nAcepta valores entre -1 y 31 con las siguientes restricciones:\n* Para `freq=monthly` el valor máximo permitido es 28.\n* El valor 0 no está permitido","anyOf":[{"type":"integer","minimum":1,"maximum":31},{"type":"integer","minimum":-1,"maximum":-1}]},"byweekday":{"description":"Para `freq=weekly` y `freq=monthly` permite indicar el día de la semana de ejecución (0=Lunes, 6=Domingo)","type":"integer","minimum":0,"maximum":6},"bysetpos":{"description":"Solo aplica a `freq=monthly`. Permite elegir el último (-1) o del primer (1) al cuarto (4) día de la semana, en este caso el día de la semana se indica con `byweekday` y es obligatorio indicarlo si se selecciona `bysetpos`","anyOf":[{"type":"integer","minimum":1,"maximum":4},{"type":"integer","minimum":-1,"maximum":-1}]}}}}},"RelatedJournalEntry":{"type":"object","title":"RelatedJournalEntry","description":"Apunte contable que afecta al saldo del documento padre. Forma reducida de la fila devuelta por `GET /journal` (sin `idAccounting`, `tags`, `journalPriority` ni los campos `document*` redundantes con el documento padre).","required":["id","idType","idLineIndex","date","debit","credit","account","accountTitle"],"properties":{"id":{"type":"string","description":"ID del documento que origina el apunte. Polimórfico: `tra_<uuid-v4>` para asientos contables directos, `pay_<uuid-v4>` para remesas SEPA. El `idType` indica el tipo concreto.","pattern":"^(tra_|pay_)[0-9a-f-]+$"},"idType":{"type":"string","description":"Tipo del documento referenciado por `id`. Hoy `transaction` (asiento directo) o `payment` (remesa SEPA), pero el contrato es polimórfico para acomodar tipos futuros.","enum":["transaction","payment"]},"idTitle":{"type":"string","nullable":true,"description":"Texto descriptivo del apunte (mismo valor que devuelve `GET /journal` en el campo `idTitle`). Puede ser `null` si el apunte no tiene texto asignado."},"idSummary":{"type":"string","nullable":true,"description":"Resumen del documento que origina el apunte. Puede ser `null` para apuntes sin resumen disponible."},"idLineIndex":{"type":"number","description":"Índice de la línea del asiento dentro del documento (0-based)."},"date":{"type":"string","format":"date","description":"Fecha contable del apunte."},"debit":{"type":"number","description":"Importe del apunte en el debe (en la moneda de la contabilidad de la empresa)."},"credit":{"type":"number","description":"Importe del apunte en el haber (en la moneda de la contabilidad de la empresa)."},"currency":{"type":"string","description":"Moneda original del apunte (formato ISO 4217). Sólo aparece cuando la empresa tiene multicurrency activada y el apunte está en una moneda distinta a la de la contabilidad."},"currencyDebit":{"type":"number","description":"Importe en el debe en la moneda original. Sólo aparece cuando la empresa tiene multicurrency activada."},"currencyCredit":{"type":"number","description":"Importe en el haber en la moneda original. Sólo aparece cuando la empresa tiene multicurrency activada."},"account":{"type":"string","description":"Código de cuenta contable (PGC) del apunte."},"accountTitle":{"type":"string","description":"Nombre de la cuenta contable."}}},"SalesTax":{"type":"object","title":"SalesTax","description":"Impuesto de venta","required":["id","taxGroup","value","account","title","shortTitle","current","country","selectorFlags"],"additionalProperties":false,"properties":{"id":{"type":"string"},"taxGroup":{"type":"string","description":"Grupo de impuestos.\n\n  No se debe asumir que siempre van a existir estos valores, si hay cambios normativos pueden definirse nuevos valores en cualquier momento.\n\n  Los grupos disponibles en cada empresas pueden ser distintos según su dirección fiscal.\n  \n  * IVA: IVA\n  * IVA_RE: IVA de recargo de equivalencia\n  * IGIC: Impuesto General Indirecto Canario (Canarias)\n  * IPSI: Impuesto sobre la Producción, los Servicios y la Importación (Ceuta y Melilla)\n  * IRPF: Retención de IRPF\n  * VATEU: IVA de países de la EU distintos de España (IVA declarado en dichos países)\n  ","enum":["IVA","IVA_RE","IGIC","IPSI","IRPF","VATEU"]},"value":{"type":"number","description":"Porcentaje del impuesto en base 1.\n\nValor: 0.21 para IVA 21%"},"account":{"$ref":"#/components/schemas/AccountCode"},"title":{"type":"string","description":"Nombre completo del impuesto"},"shortTitle":{"type":"string","description":"Nombre corto del impuesto"},"current":{"type":"boolean","description":"Indica si es un impuesto vigente actualmente"},"country":{"type":"string","description":"País de recaudación del impuesto (Formato ISO 3166-1 Alpha-2)"},"category":{"type":"string","description":"Categoría funcional del impuesto. Permite agrupar y filtrar los impuestos por su función en el sistema fiscal.\n\nNo se debe asumir que siempre van a existir estos valores, si hay cambios normativos pueden definirse nuevos valores en cualquier momento.\n\n* standard_vat: IVA/IGIC/IPSI estándar (tipos normal, reducido, superreducido y temporales)\n* exempt_vat: Operación exenta de IVA/IGIC\n* intra_community: Operación intracomunitaria. En compras se genera automáticamente un par autorepercutido (efecto neto cero)\n* reverse_charge: Inversión del sujeto pasivo. El comprador liquida el impuesto en lugar del vendedor\n* equivalence_surcharge: Recargo de equivalencia (régimen especial de comerciantes minoristas)\n* withholding: Retención de IRPF a cuenta del impuesto sobre la renta del perceptor\n* rental_withholding: Retención de IRPF por alquiler de inmueble urbano\n* pass_through: Suplidos: gastos pagados en nombre de un tercero, sin IVA\n* export: Exportación a país fuera de la UE\n* eu_consumer_vat: IVA del país de destino para ventas a consumidores finales de la UE (régimen OSS)\n","enum":["standard_vat","exempt_vat","intra_community","reverse_charge","equivalence_surcharge","withholding","rental_withholding","pass_through","export","eu_consumer_vat"]},"description":{"type":"string","description":"Explicación breve, en español, del propósito y funcionamiento de este impuesto. Orientada a ayudar al integrador a elegir el impuesto correcto para cada operación."},"selectorFlags":{"type":"array","description":"Indica dónde puede el usuario aplicar este impuesto:\n\n* product: Puede asignarse a un producto del catálogo como impuesto por defecto.\n* line: Puede aplicarse en líneas de documentos (facturas, presupuestos, gastos, etc.).\n\nUn array vacío indica un impuesto que no se selecciona manualmente. Es el caso de los impuestos autorepercutidos: se aplican automáticamente cuando se usa su impuesto pareja (ver `pairedWith` y `autoApplied`).","items":{"type":"string","enum":["product","line"]}},"autoApplied":{"type":"boolean","description":"Si es `true`, este impuesto se aplica automáticamente cuando se usa el impuesto referenciado en `pairedWith`. El usuario no lo selecciona directamente.\n\nEs el mecanismo de los impuestos autorepercutidos: en compras intracomunitarias, inversión del sujeto pasivo o importación de servicios extracomunitarios, el sistema genera un par de impuestos (uno deducible y otro devengado) cuyo efecto neto es cero pero ambos deben quedar reflejados en la declaración."},"pairedWith":{"type":"string","description":"Identificador del impuesto pareja al que está vinculado este impuesto.\n\n* En el impuesto base (no autorepercutido) apunta al impuesto autorepercutido que se generará automáticamente cuando se aplique.\n* En el impuesto autorepercutido (`autoApplied: true`) apunta al impuesto base que dispara su aplicación automática."}}},"StatementContent":{"type":"object","title":"StatementContent","description":"Contenido de un extracto bancario","required":["uuid","date","title","amount","currency","state","bank","ignore"],"properties":{"uuid":{"type":"string","description":"Identificador del extracto bancario"},"date":{"type":"string","format":"date","description":"Fecha de la operación"},"title":{"type":"string","description":"Concepto del movimiento"},"amount":{"type":"number","description":"Importe del movimiento. Positivo para ingresos, negativo para cargos"},"currency":{"type":"string","description":"Moneda del movimiento (Formato ISO 4217)"},"companyCurrencyAmount":{"type":"number","description":"Importe convertido a la moneda de la empresa"},"state":{"type":"string","enum":["pending","reconciled","ignored"]},"bank":{"type":"string","description":"Identificador del banco asociado"},"notes":{"type":"string","nullable":true},"ignore":{"type":"boolean"},"matchedDocument":{"type":"string","nullable":true,"description":"Identificador del documento conciliado"},"sourceKey":{"type":"string","nullable":true}}},"StatementListItem":{"type":"object","title":"StatementListItem","description":"Extracto bancario en una lista de resultados","additionalProperties":false,"required":["uuid","date","title","amount","currency","state","bank","ignore","creationDate","modificationDate"],"properties":{"uuid":{"type":"string","description":"Identificador del extracto bancario"},"date":{"type":"string","format":"date","description":"Fecha de la operación"},"title":{"type":"string","description":"Concepto del movimiento"},"amount":{"type":"number","description":"Importe del movimiento. Positivo para ingresos, negativo para cargos"},"currency":{"type":"string","description":"Moneda del movimiento (Formato ISO 4217)"},"companyCurrencyAmount":{"type":"number","description":"Importe convertido a la moneda de la empresa"},"state":{"type":"string","enum":["pending","reconciled","ignored"],"description":"Estado de conciliación del extracto bancario:\n* pending: Pendiente de conciliar\n* reconciled: Conciliado con un documento\n* ignored: Marcado como ignorado"},"bank":{"type":"string","description":"Identificador del banco asociado"},"bankTitle":{"type":"string","description":"Nombre del banco asociado"},"notes":{"type":"string","nullable":true,"description":"Notas del extracto bancario"},"ignore":{"type":"boolean","description":"Indica si el extracto está marcado como ignorado"},"matchedDocument":{"type":"string","nullable":true,"description":"Identificador del documento conciliado"},"matchedDocumentTitle":{"type":"string","nullable":true,"description":"Título del documento conciliado"},"sourceKey":{"type":"string","nullable":true,"description":"Identificador del origen de importación"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}},"StatementResponse":{"type":"object","title":"StatementResponse","description":"Detalle de un extracto bancario","additionalProperties":false,"required":["content","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/StatementContent"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}},"Tags":{"type":"array","title":"Tags","description":"Etiquetas del documento","items":{"type":"string"}},"TagsOperation":{"type":"string","title":"TagsOperation","description":"Tipo de operación con las etiquetas del documento. Es obligatorio si se indica el elemento 'tags' y la operación es de actualización","enum":["add","remove","replace"]},"TaxDefinition":{"type":"object","title":"TaxDefinition","required":["type","id","title","value","taxGroup"],"properties":{"type":{"type":"string","enum":["taxDefinition"]},"id":{"$ref":"#/components/schemas/TaxId"},"title":{"type":"string"},"value":{"type":"number"},"current":{"type":"boolean"},"taxGroup":{"type":"string","enum":["IVA","VATEU","IRPF","IPSI","IGIC","IVA_RE","OTHER"]}}},"TaxId":{"type":"string","title":"TaxId","description":"Identificador interno de un impuesto"},"Transaction":{"type":"object","title":"Transaction","additionalProperties":false,"required":["main","type","uuid","accounting"],"properties":{"uuid":{"type":"string"},"type":{"enum":["transaction"]},"accounting":{"$ref":"#/components/schemas/Accounting"},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}},"import":{"$ref":"#/components/schemas/ImportInformation"},"main":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","format":"date","nullable":true},"title":{"type":"string"},"contact":{"type":"string"},"account":{"$ref":"#/components/schemas/AccountCode"},"currency":{"type":"string"},"bank":{"type":"string"},"bankBalance":{"type":"number"},"bankManual":{"type":"boolean"},"subtype":{"enum":["send","receive","other"]},"notes":{"type":"string"},"externalTransactionId":{"type":"string"}}},"meta":{"type":"object","title":"TransactionMeta","description":"Metadatos internos del asiento","additionalProperties":false,"properties":{"automationSource":{"type":"string"}},"readOnly":true}}},"UnreconcileStatementResponse":{"type":"object","title":"UnreconcileStatementResponse","description":"Resultado de la desconciliación de un extracto bancario","additionalProperties":false,"required":["content","creationDate","modificationDate"],"properties":{"content":{"$ref":"#/components/schemas/StatementContent"},"archivedTransaction":{"type":"string","nullable":true,"description":"Identificador del asiento contable archivado. Solo presente cuando se usa deleteTransaction=true"},"creationDate":{"$ref":"#/components/schemas/CreationDate"},"modificationDate":{"$ref":"#/components/schemas/ModificationDate"}}},"WebhookEndpoint":{"type":"object","title":"WebhookEndpoint","additionalProperties":false,"required":["id","name","url","events","enabled","warning","livemode"],"properties":{"id":{"type":"string","description":"Identificador único del endpoint"},"name":{"type":"string","description":"Nombre descriptivo del endpoint"},"url":{"type":"string","description":"URL de destino del webhook"},"events":{"type":"array","items":{"type":"string"},"description":"Lista de tipos de eventos suscritos"},"enabled":{"type":"boolean","description":"Indica si el endpoint está activo"},"warning":{"type":"boolean","description":"Indica si el endpoint está en estado de alerta por fallos continuos"},"livemode":{"type":"boolean","description":"Indica si el endpoint opera en modo real (true) o sandbox (false)"}}},"WebhookEvent":{"type":"object","title":"WebhookEvent","additionalProperties":true,"required":["id","type","endpoint_id","status","created_at"],"properties":{"id":{"type":"string","description":"Identificador único del evento"},"type":{"type":"string","description":"Tipo de evento (ej. invoice.created)"},"endpoint_id":{"type":"string","description":"ID del endpoint al que pertenece el evento"},"endpoint_url":{"type":"string","description":"URL del endpoint al que se envió el evento"},"status":{"type":"string","description":"Estado del evento (pending, delivered, failed)"},"created_at":{"type":"string","description":"Fecha de creación del evento (ISO 8601)"}}}},"responses":{"UnauthorizedError":{"description":"Respuesta de error cuando no se intenta realizar una operación sin la información de autorización o con información de autorización incorrecta, como por ejemplo un token oAuth caducado.","content":{"application/json":{"schema":{"type":"object","title":"UnauthorizedErrorResponse","required":["statusCode","message"],"additionalProperties":false,"properties":{"statusCode":{"type":"integer","enum":[401]},"message":{"type":"string"}}}}}},"ForbiddenError":{"description":"Respuesta de error cuando se intenta realizar una operación para la que el usuario no tiene permiso, bien sea por su rol dentro del programa o por el scope seleccionado en la identificacón de la API.","content":{"application/json":{"schema":{"type":"object","title":"ForbiddenErrorResponse","required":["statusCode","message"],"additionalProperties":false,"properties":{"statusCode":{"type":"integer","enum":[403]},"message":{"type":"string"}}}}}},"NotFoundError":{"description":"Respuesta de error cuando no se encuentra un documento en una consulta o actualización","content":{"application/json":{"schema":{"type":"object","title":"NotFoundErrorResponse","required":["statusCode","message"],"additionalProperties":false,"properties":{"statusCode":{"type":"integer","enum":[404]},"message":{"type":"string"}}}}}},"BadRequestError":{"description":"Respuesta de error cuando no se envía una petición con parámetros o formato incorrecto","content":{"application/json":{"schema":{"type":"object","title":"BadRequestErrorResponse","required":["statusCode","message"],"additionalProperties":false,"properties":{"statusCode":{"type":"integer","enum":[400]},"message":{"type":"string"},"type":{"type":"string"},"errors":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}},"ConflictError":{"description":"Respuesta de error cuando no se puede realizar la operación por un conflicto con el estado del recurso o por discordancia entre la URL de la petición y el contenido de la misma.\n      \nEjemplo: Cuado intentamos crear un documento indicando un ID de otro que ya existe","content":{"application/json":{"schema":{"type":"object","title":"ConflictErrorResponse","required":["statusCode","message"],"additionalProperties":false,"properties":{"statusCode":{"type":"integer","enum":[409]},"message":{"type":"string"}}}}}},"InternalServerError":{"description":"Respuesta de error cuando se produce un error inesperado en el servidor.\n      \nSi recibes este error, por favor contacta con el soporte de FacturaDirecta","content":{"application/json":{"schema":{"type":"object","title":"InternalServerError","required":["statusCode","message"],"additionalProperties":false,"properties":{"statusCode":{"type":"integer","enum":[500]},"message":{"type":"string"}}}}}},"DeleteResponse":{"description":"Resultado de borrado de un elemento","content":{"application/json":{"schema":{"type":"object","title":"DeleteResponse","required":["result"],"additionalProperties":false,"properties":{"result":{"type":"boolean"}}}}}},"SendInvoiceResponse":{"description":"Resultado del envío de una factura","content":{"application/json":{"schema":{"type":"object","title":"SendInvoiceResponse","required":["from","to","sentFacturae"],"additionalProperties":false,"properties":{"from":{"type":"string","description":"Remitente usado para el envío"},"to":{"type":"array","description":"Destinatario al que se ha enviado el documento","items":{"type":"string"}},"cc":{"type":"array","description":"Destinatario al que se ha enviado en copia visible el documento","items":{"type":"string"}},"bcc":{"type":"array","description":"Destinatarios al que se ha enviado en copia oculta el documento","items":{"type":"string"}},"sentFacturae":{"type":"boolean","description":"Indica si se ha incluido la factura en formato facturae"}}}}}},"SendDocumentResponse":{"description":"Resultado del envío de un documento","content":{"application/json":{"schema":{"type":"object","title":"SendDocumentResponse","required":["from","to"],"additionalProperties":false,"properties":{"from":{"type":"string","description":"Remitente usado para el envío"},"to":{"type":"array","description":"Destinatario al que se ha enviado el documento","items":{"type":"string"}},"cc":{"type":"array","description":"Destinatario al que se ha enviado en copia visible el documento","items":{"type":"string"}},"bcc":{"type":"array","description":"Destinatarios al que se ha enviado en copia oculta el documento","items":{"type":"string"}}}}}}},"GetDocumentPDFResponse":{"description":"Resultado de la petición de generación de un PDF temporal de un documento","content":{"application/json":{"schema":{"type":"object","title":"GetDocumentPDFResponse","required":["url","filename","availableUntil"],"additionalProperties":false,"properties":{"url":{"type":"string","description":"URL desde la que descargar o visualizar el archivo solicitado. Puede apuntar a un documento PDF (modos de descarga o visualización) o a un documento HTML (modo impresión)."},"filename":{"type":"string","description":"Nombre del archivo PDF generado. Este nombre es el que enviará el servidor a través de la cabecera Content-Disposition si se intenta descargar el documento PDF."},"availableUntil":{"type":"string","format":"date-time","description":"Fecha y hora hasta la que estará disponible el documento generado."},"urlPdf":{"type":"string","description":"URL desde la que descargar el archivo con la factura en formato PDF cuando se ha solictiado el modo impresión, para otros modos no se recibe este elemento."}}}}}}},"parameters":{"Accept-Version":{"name":"accept-version","description":"Número de versión de la API. Valor por defecto: `1.0.9`","in":"header","schema":{"type":"string"}},"CompanyId":{"name":"companyId","description":"ID de la empresa","required":true,"in":"path","schema":{"type":"string"}},"Limit":{"name":"limit","in":"query","description":"Número máximo de resultados, valores permitidos entre 1 y 500","schema":{"type":"integer","minimum":1,"maximum":500}},"Offset":{"name":"offset","in":"query","description":"Posición de inicio de los resultados. Utilizado para paginar","schema":{"type":"integer","minimum":0}},"MinCreationDate":{"name":"minCreationDate","in":"query","description":"Fecha mínima de creación del documento en formato ISO 8601 con representación de timepo en UTC: \"YYYY-MM-DDTHH:mm:ss.sssZ\"","schema":{"$ref":"#/components/schemas/CreationDate"}},"MaxCreationDate":{"name":"maxCreationDate","in":"query","description":"Fecha máxima de creación del documento en formato ISO 8601 con representación de timepo en UTC: \"YYYY-MM-DDTHH:mm:ss.sssZ\"","schema":{"$ref":"#/components/schemas/CreationDate"}},"MinModificationDate":{"name":"minModificationDate","in":"query","description":"Fecha mínima de modificación del documento en formato ISO 8601 con representación de timepo en UTC: \"YYYY-MM-DDTHH:mm:ss.sssZ\"","schema":{"$ref":"#/components/schemas/ModificationDate"}},"MaxModificationDate":{"name":"maxModificationDate","in":"query","description":"Fecha máxima de modificación del documento en formato ISO 8601 con representación de timepo en UTC: \"YYYY-MM-DDTHH:mm:ss.sssZ\"","schema":{"$ref":"#/components/schemas/ModificationDate"}}},"requestBodies":{"SendInvoiceRequest":{"description":"Definición del envío del documento.\n\nPueden omitirse todos los elementos y se enviará el documento a los destinatarios incluidos en el mismo en los elementos \"emails\", \"emailsCc\" o \"emailsBcc\"; y con el título y contenido del mensaje de la plantilla del documento.\n\nSi se indica cualquiera de los siguientes elementos en la llamada (\"to\", \"cc\" o \"bcc\") se ignorarán los emails indicados en los elementos \"emails\", \"emailsCc\" o \"emailsBcc\" del documento.\n\nEn cualquier caso debe existir al menos un destinatario al que enviar el documento (con independencia de que haya o no destinatarios en copia visible u oculta).\n\nEn caso de que no se pueda determinar ningún destinatario la llamada fallará con un error 409.","required":true,"content":{"application/json":{"schema":{"type":"object","title":"SendInvoiceRequest","properties":{"from":{"type":"string","description":"Email remitente del envío (\"From\"), debe ser uno de los remitentes dados de alta en la configuración de la emprea. Si no se indica se utilizará el primer remitente disponible en la configuración de la empresa.\n\nSi no se indica y no existiera ningún remitente configurado en la empresa la llamada fallará con un error 409."},"to":{"type":"array","description":"Destinatarios del envío del documento","items":{"type":"string"}},"cc":{"type":"array","description":"Destinatarios en copia visible del envío del documento","items":{"type":"string"}},"bcc":{"type":"array","description":"Destinatarios en copia oculta del envío del documento","items":{"type":"string"}},"subject":{"type":"string","description":"Título del mensaje enviado. Si no se indica se utiliza el de la plantilla del documento"},"html":{"type":"string","description":"Contenido en formato HTML del mensaje enviado. Si no se indica se utiliza el de la plantilla del documento"},"sendFacturae":{"type":"boolean","description":"Incluir en el envío también la factura en formato facturae."},"continueWithoutFacturae":{"type":"boolean","description":"Indica el comportamiento cuando se solicita el envío de facturae y esta no puede generarse por algún motivo.\n\nSi se indica \"true\" el envío se realizará normalmente aunque no se pueda genear la factura en formato factura, si se indica \"false\" (el valor por defecto) la llamada fallará con un error 409 si se ha solicitado el envío de facturae y esta no puede generarse.\n\nEste elemento es ignorado si no se ha solicitado el envío de facturae."}}},"examples":{"to":{"summary":"Un destinatario","description":"Envío a un solo destinatario","value":{"to":["my_client@example.com"]}},"to2":{"summary":"Varios destinatarios","description":"Envío a un solo destinatario","value":{"to":["my_client_1@example.com","my_client_2@example.com","my_client_3@example.com"]}},"cc":{"summary":"Destinatario y copia","description":"Envío a un destinatrio y en copia a otro email","value":{"to":["my_client@example.com"],"cc":["other_user@example.com"]}},"bcc":{"summary":"Destinatario, copia y copia oculta","description":"Envío a un destinatrio, en copia a otro email y en copia oculta a un tercero","value":{"to":["my_client@example.com"],"cc":["other_user@example.com"],"bcc":["my_company@example.com"]}},"remitente":{"summary":"Remitente personalizado","description":"Envío desde un remitente personalizado.\n\n.Debe estar autorizado en las preferencias de la empreesa.","value":{"from":"my_company@example.com","to":["my_client@example.com"]}},"facturae":{"summary":"Envío de facturae","description":"Envío incluyendo la factura en formato facturae y con error si falla la creación de la facturae.","value":{"to":["my_client@example.com"],"sendFacturae":true}},"facturaeOptional":{"summary":"Envío de facturae opcional","description":"Envío incluyendo la factura en formato facturae sin error en caso de que falle la creación de la facturae.","value":{"to":["my_client@example.com"],"sendFacturae":true,"continueWithoutFacturae":true}},"customMessage":{"summary":"Mensaje personalizado","description":"Envío con el título y contenido del mensaje personalizado (en lugar de usar los valores de la plantilla del documento).","value":{"to":["my_client@example.com"],"subject":"Factura definitiva","html":"Estimado cliente.<p>Adjunta encontrará su factura número <b>####</b></p>"}}}}}},"SendDocumentRequest":{"description":"Definición del envío del documento.\n\nPueden omitirse todos los elementos y se enviará el documento a los destinatarios incluidos en el mismo en los elementos \"emails\", \"emailsCc\" o \"emailsBcc\"; y con el título y contenido del mensaje de la plantilla del documento.\n\nSi se indica cualquiera de los siguientes elementos en la llamada (\"to\", \"cc\" o \"bcc\") se ignorarán los emails indicados en los elementos \"emails\", \"emailsCc\" o \"emailsBcc\" del documento.\n\nEn cualquier caso debe existir al menos un destinatario al que enviar el documento (con independencia de que haya o no destinatarios en copia visible u oculta).\n\nEn caso de que no se pueda determinar ningún destinatario la llamada fallará con un error 409.","required":true,"content":{"application/json":{"schema":{"type":"object","title":"SendDocumentRequest","properties":{"from":{"type":"string","description":"Email remitente del envío (\"From\"), debe ser uno de los remitentes dados de alta en la configuración de la emprea. Si no se indica se utilizará el primer remitente disponible en la configuración de la empresa.\n\nSi no se indica y no existiera ningún remitente configurado en la empresa la llamada fallará con un error 409."},"to":{"type":"array","description":"Destinatarios del envío del documento","items":{"type":"string"}},"cc":{"type":"array","description":"Destinatarios en copia visible del envío del documento","items":{"type":"string"}},"bcc":{"type":"array","description":"Destinatarios en copia oculta del envío del documento","items":{"type":"string"}},"subject":{"type":"string","description":"Título del mensaje enviado. Si no se indica se utiliza el de la plantilla del documento"},"html":{"type":"string","description":"Contenido en formato HTML del mensaje enviado. Si no se indica se utiliza el de la plantilla del documento"}}},"examples":{"to":{"summary":"Un destinatario","description":"Envío a un solo destinatario","value":{"to":["my_client@example.com"]}},"to2":{"summary":"Varios destinatarios","description":"Envío a un solo destinatario","value":{"to":["my_client_1@example.com","my_client_2@example.com","my_client_3@example.com"]}},"cc":{"summary":"Destinatario y copia","description":"Envío a un destinatrio y en copia a otro email","value":{"to":["my_client@example.com"],"cc":["other_user@example.com"]}},"bcc":{"summary":"Destinatario, copia y copia oculta","description":"Envío a un destinatrio, en copia a otro email y en copia oculta a un tercero","value":{"to":["my_client@example.com"],"cc":["other_user@example.com"],"bcc":["my_company@example.com"]}},"remitente":{"summary":"Remitente personalizado","description":"Envío desde un remitente personalizado.\n\n.Debe estar autorizado en las preferencias de la empreesa.","value":{"from":"my_company@example.com","to":["my_client@example.com"]}},"customMessage":{"summary":"Mensaje personalizado","description":"Envío con el título y contenido del mensaje personalizado (en lugar de usar los valores de la plantilla del documento).","value":{"to":["my_client@example.com"],"subject":"Documento solicitado","html":"Estimado cliente.<p>Adjunta encontrará el documento solicitado</p>"}}}}}},"CreateDocumentPDFRequest":{"description":"Solicitud de creación de una versión en PDF de un documento.\n\nSe obtendrá una URL temporal que será válida durante el tiempo indicado en la respuesta.\n\nSe puede solicitar para distintos modos de uso:\n\n* **attachment**: Se recibe una URL de un archivo que se descargará como adjunto\n* **inline**: Se recibe una URL de un archivo que se descargará para visualiar en línea\n* **print**: Se recibe una URL de un archivo HTML que se puede visualizar en línea y carga el documento en formato PDF y lo envía a imprimir. Adicionalmente se recibe también la url del documento en formado PDF para visualización en línea","required":true,"content":{"application/json":{"schema":{"type":"object","title":"CreateDocumentPDFRequest","properties":{"mode":{"type":"string","enum":["attachment","inline","print"],"description":"Modo de respuesta solicitada: adjunto (attachment), visualización en línea (inline) o impresión (print)"}}},"examples":{"attachment":{"summary":"Modo descarga (attachment)","description":"Se solicita recibir la URL de un documento que será servido como adjunto.\n\nCon Content-Disposition: attachment","value":{"mode":"attachment"}},"inline":{"summary":"Modo visualización (inline)","description":"Se solicita recibir la URL de un documento que será servido para su visualización.\n\nCon Content-Disposition: inline","value":{"mode":"inline"}},"print":{"summary":"Modo impresión (print)","description":"Se solicita recibir la URL de un documento html que cargará el doucmento en PDF y lo enviará a imprimir. Se recibe también URL del documento en formato PDF para visualización en línea","value":{"mode":"print"}}}}}}},"securitySchemes":{"apiKey":{"type":"apiKey","description":"Autorización mediante apiKey para la api pública de FacturaDirecta.\n\nPuedes obtener una apiKey para una empresa concreta desde la página de Ajustes > Integraciones de tu empresa en FacturaDirecta.\n\nCuando crees tu apiKey le puedes asignar los mismos _scopes_ de acceso que se puedes seleccionar en la autorización mediante _oauth2_ (excepto el de offline_access que por definición ya se tiene con este modo de autorización)\n      ","name":"facturadirecta-api-key","in":"header"},"oAuth":{"type":"oauth2","description":"Servicio de autorización OAuth2 para la API pública de FacturaDirecta.\n\nIndicar únicamente el valor `facturadirecta-api` para `client_id`. No es necesario indicar ningún secreto en el campo `client_secret`.\n","flows":{"authorizationCode":{"authorizationUrl":"https://auth.facturadirecta.com/auth/realms/facturadirecta/protocol/openid-connect/auth","tokenUrl":"https://auth.facturadirecta.com/auth/realms/facturadirecta/protocol/openid-connect/token","refreshUrl":"https://auth.facturadirecta.com/auth/realms/facturadirecta/protocol/openid-connect/token","scopes":{"offline_access":"Acceso permanente","contacts:read":"Lectura de contactos","contacts:write":"Modificación de contactos","products:read":"Lectura de productos","products:write":"Modificación de productos","invoices:read":"Lectura de facturas","invoices:write":"Modificación de facturas","estimates:read":"Lectura de presupuestos","estimates:write":"Modificación de presupuestos","deliveryNotes:read":"Lectura de albaranes","deliveryNotes:write":"Modificación de albaranes","bills:read":"Lectura de facturas de compra y tickets","bills:write":"Modificación de facturas de compra y tickets","payrolls:read":"Lectura de nóminas","payrolls:write":"Modificación de nóminas","recurring:read":"Lectura de documentos recurrentes","recurring:write":"Modificación de documentos recurrentes","banks:read":"Lectura de definiciones de bancos y cuentas de tesorería","banks:readIban":"Incluir el IBAN completo en los bancos propios en las consultas de bancos o de métodos de pago","paymentMethods:read":"Lectura de métodos de pago","paymentMethods:readIban":"Incluir el IBAN completo de los bancos de los contactos en sus métodos de pago","paymentMethods:write":"Esctritura de métodos de pago","accounting:read":"Lectura de datos de contabilidad (diario)","settings:read":"Lectura de ajustes/datos de configuración","webhooks:read":"Leer configuración y historial de webhooks","webhooks:write":"Gestionar endpoints de webhooks","apiKeys:read":"Lectura de API keys","apiKeys:write":"Gestión de API keys (creación y eliminación)","statements:read":"Lectura de extractos bancarios","statements:write":"Conciliación de extractos bancarios","files:write":"Subida de archivos para adjuntar a documentos","inbox:read":"Lectura de la bandeja de entrada de documentos pendientes de procesar","inbox:write":"Subida y gestión de documentos en la bandeja de entrada"}}}}}}}