### GET /{companyId}/products Source: https://app.facturadirecta.com/openapi.json Devuelve una lista de productos ```markdown ### Parameters - **accept-version** (string, header, optional): Número de versión de la API. Valor por defecto: `1.0.8` - **companyId** (string, path, required): ID de la empresa - **title** (string, query, optional): Búsqueda aproximada por nombre - **sku** (string, query, optional): Código de producto (SKU) - **externalId** (string, query, optional): ID externo del producto - **isSales** (boolean, query, optional): Producto de venta - **salesDescription** (string, query, optional): Búsqueda aproximada por descripción de venta - **isPurchases** (boolean, query, optional): Producto de compra - **purchasesDescription** (string, query, optional): Búsqueda aproximada por descripción de compra - **isDepreciable** (boolean, query, optional): Bien de inversión - **minCreationDate** (CreationDate, query, optional): 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" - **maxCreationDate** (CreationDate, query, optional): 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" - **minModificationDate** (ModificationDate, query, optional): 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" - **maxModificationDate** (ModificationDate, query, optional): 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" - **sortBy** (array (string (title|-title|sku|-sku|salesDescription|-salesDescription|purchasesDescription|-purchasesDescription|creationDate|-creationDate|modificationDate|-modificationDate)), query, optional): Orden de los resultados Puedes indicar varios parámetros para ordenar por más de un criterio e indicar el caracter - delante par que el orden sea descendente. Por 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' Están disponibles las siguientes opciones de ordenación: * title: Nombre del producto * sku: Código de producto * salesDescription: Descripción para la venta del producto * purchasesDescription: Descripción para la compra del producto * creationDate: Fecha de creación en el sistema * modificationDate: Fecha de última modificación en el sistema - **limit** (integer, query, optional): Número máximo de resultados, valores permitidos entre 1 y 500 - **offset** (integer, query, optional): Posición de inicio de los resultados. Utilizado para paginar ### Responses #### 200 - Lista de productos - **pagination** (object) (required): Información de paginación de la consulta realizada - **limit** (integer) (required) - **offset** (integer) (required) - **total** (integer) (required) - **items** (array (object)) (required) Array items: - **content** (object) (required) - **type** (string (product)) (required) ("product") - **uuid** (string) (required) - **attachments** (array (object)) Array items: - **name** (string) (required) - **url** (string) (required) - **size** (integer) - **creationTime** (string (date-time)) (required) - **contentType** (string) - **contentSubtype** (string (facturae|inboxEmailBody)) ("facturae"|"inboxEmailBody") - **main** (object) (required) - **title** (string): Título del producto. Calculado automáticamente - **name** (string) (required) - **sku** (string) - **externalId** (string): ID externo del producto. Debe ser único entre todos los productos - **sales** (object) - **price** (number) - **description** (string) - **tax** (array (string)) (required) - **account** (string) (required): Número de cuenta contable - **purchases** (object) - **price** (number) - **description** (string) - **tax** (array (string)) (required) - **account** (string) (required): Número de cuenta contable - **depreciable** (boolean) - **currency** (string) (required): Moneda de los precios del producto (Formato ISO 4217) - **import** (object): Información interna del origen del objeto - **from** (string) (required) - **creationDate** (string (date-time)) (required): 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") - **modificationDate** (string (date-time)) (required): 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") #### 400 - response - **statusCode** (integer) (required) ("400") - **message** (string) (required) - **type** (string) - **errors** (array (object)) #### 401 - response - **statusCode** (integer) (required) ("401") - **message** (string) (required) #### 403 - response - **statusCode** (integer) (required) ("403") - **message** (string) (required) #### 500 - response - **statusCode** (integer) (required) ("500") - **message** (string) (required) ### Example Usage ```bash curl -X GET "https://app.facturadirecta.com/api/{companyId}/products?title=string&sku=string&externalId=string&isSales=true&salesDescription=string&isPurchases=true&purchasesDescription=string&isDepreciable=true&minCreationDate=value&maxCreationDate=value&minModificationDate=value&maxModificationDate=value&sortBy=item1,item2&limit=0&offset=0" ``` ``` -------------------------------- ### API Overview: FacturaDirecta 2 API Pública Source: https://app.facturadirecta.com/openapi.json Software de facturación y contabilidad en la nube. Visita [FacturaDirecta](https://app.facturadirecta.com) para crear una cuenta. ## Inicio rápido 1. Crea una cuenta gratuita de FacturaDirecta [haciendo click aquí](https://app.facturadirecta.com) 1. Localiza tu **companyId**. 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`. Necesitarás este `companyId` en la mayoría de las llamadas a la API. 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. 1. Haz click en el botón **Authorize**. 1. Indica `facturadirecta-api` en el campo `client_id`. 1. Deja en blanco el campo `client_secret` 1. Selecciona el nivel de acceso seleccionando los scopes que necesites. 1. Haz click en el botón **Authorize** e identifícate con tus credenciales en la página de inicio de FacturaDirecta. 1. Abre una función de la API, por ejemplo `/profile` y haz click en **Try it out**. 1. Haz click en **Execute** y mira el resultado. 1. ¡Hecho! ¡Ahora puedes probar otras funciones! También puedes consultar este [repositorio con algunos ejemplos de uso](https://bitbucket.org/conductiva/facturadirecta2_api) de la API. ## Autorización La API de FacturaDirecta te permite identificarte de dos formas diferentes. * 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 * 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) Las 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. ### Autorización mediante Api-Key Para 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. Una vez tengas la clave de API añade la cabecera `facturadirecta-api-key: ` en tus llamadas a la API. A tener en cuenta con este sistema de identificación: * El acceso se controla únicamente por los niveles de acceso concedidos a la clave creada * Cada clave de API generada da acceso únicamente a la empresa en la que se ha creado * No interviene ningún usuario real en la identificación (no se puede ver afectado por tanto porque se elimine su acceso) ### Autorización mediante OAuth Facturadirecta 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. Para 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`. Consulta la [documentación de OAuth](https://www.oauth.com/oauth2-servers/access-tokens/authorization-code-request/) para más información. Una vez identificado añade la cabecera `Authorization: Bearer ` en tus llamadas a la API. A tener en cuenta con este sistema de identificació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. * 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) * Si se elimina el usuario del programa o de una empresa se elimina el acceso mediante la API ## Versiones La 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. Versión actual: `1.0.8` ```yaml # FacturaDirecta 2 API Pública # Version: 1.0.8 Software de facturación y contabilidad en la nube. Visita [FacturaDirecta](https://app.facturadirecta.com) para crear una cuenta. ## Inicio rápido 1. Crea una cuenta gratuita de FacturaDirecta [haciendo click aquí](https://app.facturadirecta.com) 1. Localiza tu **companyId**. 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`. Necesitarás este `companyId` en la mayoría de las llamadas a la API. 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. 1. Haz click en el botón **Authorize**. 1. Indica `facturadirecta-api` en el campo `client_id`. 1. Deja en blanco el campo `client_secret` 1. Selecciona el nivel de acceso seleccionando los scopes que necesites. 1. Haz click en el botón **Authorize** e identifícate con tus credenciales en la página de inicio de FacturaDirecta. 1. Abre una función de la API, por ejemplo `/profile` y haz click en **Try it out**. 1. Haz click en **Execute** y mira el resultado. 1. ¡Hecho! ¡Ahora puedes probar otras funciones! También puedes consultar este [repositorio con algunos ejemplos de uso](https://bitbucket.org/conductiva/facturadirecta2_api) de la API. ## Autorización La API de FacturaDirecta te permite identificarte de dos formas diferentes. * 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 * 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) Las 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. ### Autorización mediante Api-Key Para 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. Una vez tengas la clave de API añade la cabecera `facturadirecta-api-key: ` en tus llamadas a la API. A tener en cuenta con este sistema de identificación: * El acceso se controla únicamente por los niveles de acceso concedidos a la clave creada * Cada clave de API generada da acceso únicamente a la empresa en la que se ha creado * No interviene ningún usuario real en la identificación (no se puede ver afectado por tanto porque se elimine su acceso) ### Autorización mediante OAuth Facturadirecta 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. Para 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`. Consulta la [documentación de OAuth](https://www.oauth.com/oauth2-servers/access-tokens/authorization-code-request/) para más información. Una vez identificado añade la cabecera `Authorization: Bearer ` en tus llamadas a la API. A tener en cuenta con este sistema de identificació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. * 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) * Si se elimina el usuario del programa o de una empresa se elimina el acceso mediante la API ## Versiones La 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. Versión actual: `1.0.8` # Base URL: https://app.facturadirecta.com/api ``` -------------------------------- ### Schema: Installments Source: https://app.facturadirecta.com/openapi.json Schema definition for Installments ```markdown ## Schema: Installments Schema definition for Installments **Type:** array - Array of object - **date** (string (date)) (required) - **amount** (number) (required) - **currency** (string) (required): Moneda de los importes del vencimiento (Formato ISO 4217) ``` -------------------------------- ### GET /{companyId}/payrolls Source: https://app.facturadirecta.com/openapi.json Devuelve una lista de nóminas ```markdown ### Parameters - **accept-version** (string, header, optional): Número de versión de la API. Valor por defecto: `1.0.8` - **companyId** (string, path, required): ID de la empresa - **minDate** (string (date), query, optional): Fecha mínima de la nómina en formato YYYY-MM-DD. Se incluirán en los resultados nóminas con fecha mayor o igual al valor indicado - **maxDate** (string (date), query, optional): Fecha máxima de la nómina en formato YYYY-MM-DD. Se incluirán en los resultados nóminas con fecha menor o igual al valor indicado - **contact** (array (string), query, optional): Empleado - **minTotal** (number, query, optional): Importe total mínimo de la nómina - **maxTotal** (number, query, optional): Importe total máxima de la nómina - **allTheseTags** (array (string), query, optional): Listado de todas las etiquetas que debe contener la nómina para ser incluido en los resultados. Repite el parámetro tantas veces como etiquetas quieras incluir. - **anyOfTheseTags** (array (string), query, optional): Listado de cualquiera de las etiquetas que debe contener la nómina para ser incluido en los resultados. Repite el parámetro tantas veces como etiquetas quieras incluir. - **hasTags** (boolean, query, optional): Indicar este parámetro con valor 'true' para recibir solo nóminas que no tengan ninguna etiqueta - **minCreationDate** (CreationDate, query, optional): 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" - **maxCreationDate** (CreationDate, query, optional): 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" - **minModificationDate** (ModificationDate, query, optional): 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" - **maxModificationDate** (ModificationDate, query, optional): 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" - **sortBy** (array (string (date|-date|total|-total|creationDate|-creationDate|modificationDate|-modificationDate)), query, optional): Orden de los resultados Puedes indicar varios parámetros para ordenar por más de un criterio e indicar el caracter - delante par que el orden sea descendente. Por ejemplo, para ordenar de forma descendente por fecha y luego por importe total ascendente utiliza los parámetros 'sortBy=-date&sortBy=total' Están disponibles las siguientes opciones de ordenación: * date: Fecha de factura * total: Importe total de la factura * creationDate: Fecha de creación en el sistema * modificationDate: Fecha de última modificación en el sistema - **limit** (integer, query, optional): Número máximo de resultados, valores permitidos entre 1 y 500 - **offset** (integer, query, optional): Posición de inicio de los resultados. Utilizado para paginar - **related** (array (string (balance)), query, optional): Permite obtener datos adicionales relacionados con la nómina, se pueden indicar tantos valores como sea necesario entre los siguientes: * balance: Devuelve en related.balance detalle del saldo pendiente de la nómina ### Responses #### 200 - Lista de nóminas - **pagination** (object) (required): Información de paginación de la consulta realizada - **limit** (integer) (required) - **offset** (integer) (required) - **total** (integer) (required) - **items** (array (object)) (required) Array items: - **content** (object) (required) - **uuid** (string) (required) - **type** (string (payroll)) (required) ("payroll") - **accounting** (object): Asiento contable generado por el documento - **date** (string (date)) (required) - **isMaintenance** (boolean) - **journalPriority** (number) ("1"|"2"|"3"|"100"|"970"|"980"|"990"|"999") - **lines** (array (object)) (required) Array items: - **account** (string) (required): Número de cuenta contable - **document** (string): Referencia al documento que define la subcuenta de este apunte - **debit** (number) (required): Importe en el DEBE en la moneda de la contabilidad de la empresa - **credit** (number) (required): Importe en el HABER en la moneda de la contabilidad de la empresa - **currencyDebit** (number) (required): Importe en el DEBE en la moneda original del apunte - **currencyCredit** (number) (required): Importe en el HABER en la moneda original del apunte - **currency** (string) (required): Moneda original del apunte (Formato ISO 4217) - **books** (object) - **111** (object) - **manual** (boolean) (required) - **date** (string (date)) (required) - **cells** (object) (required): Datos de las distintas celdas que componen el modelo - **115** (object) - **130** (object) - **180** (object) - **190** (object) - **303** (object) - **347** (object) - **349** (object) - **390** (object) - **attachments** (array (object)) Array items: - **name** (string) (required) - **url** (string) (required) - **size** (integer) - **creationTime** (string (date-time)) (required) - **contentType** (string) - **contentSubtype** (string (facturae|inboxEmailBody)) ("facturae"|"inboxEmailBody") - **import** (object): Información interna del origen del objeto - **from** (string) (required) - **main** (object) (required) - **title** (string): Título del documento para identificarlo en los listados, se calcula automáticamente - **contact** (string) (required): Empleado para el que se ha emitido esta nómina - **country** (string): País de la dirección fiscal del contacto (empleado) (Formato ISO 3166-1 Alpha-2) - **zipcode** (string): Código postal de la dirección fiscal del contacto (empleado) - **account** (string) (required): Número de cuenta contable - **currency** (string) (required): Moneda orignal de la nómina. (Actualmente limitado a EUR) - **exchangeRate** (number): Tipo de cambio de la moneda original respecto a la moneda de la empresa. (Siempre 1 para nóminas) - **lines** (array (object)) (required): Líneas de la nómina Array items: - **type** (string (debit|credit|irpf_employee|irpf_employee_kind|irpf_employee_kind_passedon|ss_employee|ss_company)) (required): Indica el tipo de anotación en la nómina con los siguientes valores: * debit: Salario * credit: Deducción * irpf_employee: Retención de IRPF (Percepciones dinerarias) * irpf_employee_kind: Retención de IRPF (Percepciones en especie) * ss_employee: Aportaciones Seguridad Social a cargo del trabajador * ss_company: Aportaciones Seguridad Social a cargo de la empresa ("debit"|"credit"|"irpf_employee"|"irpf_employee_kind"|"irpf_employee_kind_passedon"|"ss_employee"|"ss_company") - **debitType** (string (salary|nonSalary)): Solo para líneas con type="debit", indica si la percepción es salarial o no salarial ("salary"|"nonSalary") - **label** (string): Etiqueta interna descriptiva del tipo de línea - **text** (string): Etiqueta de libre uso del tipo de línea - **account** (string) (required): Número de cuenta contable - **base** (number): Base imponible de la línea - **lineTotal** (number) (required): Importe aplicado en la línea - **totalBeforeTaxes** (number): Importe total devengado en la moneda original de la nómina - **total** (number): Importe líquido a percibir en la moneda original de la nómina - **companyCurrencyTotalBeforeTaxes** (number): Importe total devengado contabilizado en la moneda de contabilidad la empresa - **companyCurrencyTotal** (number): Importe líquido a percibir en la moneda de contabilidad la empresa - **pendingBeforeAccounting** (number): 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. Solo puede utilizarse en nóminas con fecha anterior a la fecha de inicio contable en el programa. - **notes** (string): Notas internas de la nómina - **date** (string (date)) (required): Fecha de contabilización de la nómina en formato yyyy-mm-dd - **dueDate** (string (date)) (required): Fecha de vencimiento de la nómina en formato yyyy-mm-dd - **paymentMethod** (string): ID del método de pago que se utilizará para saldar esta nómina - **task** (string): 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** (object) (required) - **clavePercepcion** (string) (required) - **subclavePercepcion** (string) - **meta** (object): Metadatos internos de la nómina - **automationSource** (string) - **tags** (array (string)) (required): Etiquetas del documento - **creationDate** (string (date-time)) (required): 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") - **modificationDate** (string (date-time)) (required): 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") - **related** (object) - **balance** (object): Saldo abierto de la nómina. Se 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` ``` { "balance": { "balance": 28.56, "currency": "EUR", "currencyBalance": 28.56 } } ``` - **balance** (number) (required): Saldo pendiente de la nómina en EUR - **currency** (string) (required): Moneda original del saldo pendiente de la nómina (Formato ISO 4217). Actualmente restringido a EUR - **currencyBalance** (number) (required): Saldo pendiente de la nómina en la moneda de la nómina #### 400 - response - **statusCode** (integer) (required) ("400") - **message** (string) (required) - **type** (string) - **errors** (array (object)) #### 401 - response - **statusCode** (integer) (required) ("401") - **message** (string) (required) #### 403 - response - **statusCode** (integer) (required) ("403") - **message** (string) (required) #### 500 - response - **statusCode** (integer) (required) ("500") - **message** (string) (required) ### Example Usage ```bash curl -X GET "https://app.facturadirecta.com/api/{companyId}/payrolls?minDate=2023-01-01&maxDate=2023-01-01&contact=item1,item2&minTotal=0&maxTotal=0&allTheseTags=item1,item2&anyOfTheseTags=item1,item2&hasTags=true&minCreationDate=value&maxCreationDate=value&minModificationDate=value&maxModificationDate=value&sortBy=item1,item2&limit=0&offset=0&related=item1,item2" ``` ``` -------------------------------- ### PUT /{companyId}/products/{id} Source: https://app.facturadirecta.com/openapi.json Actualiza un producto existente ```markdown ### Parameters - **accept-version** (string, header, optional): Número de versión de la API. Valor por defecto: `1.0.8` - **companyId** (string, path, required): ID de la empresa - **id** (string, path, required): ID del product. Formado por el prefjo "pro_" y un uuid v4 ### Request Body **Content-Type:** application/json - **content** (object) (required): Versión simplificada del producto con los elementos que calcula automáticamente FacturaDirecta marcados como no obligatorios - **type** (string (product)) (required) ("product") - **uuid** (string) - **attachments** (array (object)) Array items: - **name** (string) (required) - **url** (string) (required) - **size** (integer) - **creationTime** (string (date-time)) (required) - **contentType** (string) - **contentSubtype** (string (facturae|inboxEmailBody)) ("facturae"|"inboxEmailBody") - **main** (object) (required) - **title** (string): Título del producto. Calculado automáticamente - **name** (string) (required) - **sku** (string) - **externalId** (string): ID externo del producto. Debe ser único entre todos los productos - **sales** (object) - **price** (number) - **description** (string) - **tax** (array (string)) (required) - **account** (string) (required): Número de cuenta contable - **purchases** (object) - **price** (number) - **description** (string) - **tax** (array (string)) (required) - **account** (string) (required): Número de cuenta contable - **depreciable** (boolean) - **currency** (string) (required): Moneda de los precios del producto (Formato ISO 4217) - **import** (object): Información interna del origen del objeto - **from** (string) (required) ### Responses #### 200 - Resultado de la actualización del producto - **content** (object) (required) - **type** (string (product)) (required) ("product") - **uuid** (string) (required) - **attachments** (array (object)) Array items: - **name** (string) (required) - **url** (string) (required) - **size** (integer) - **creationTime** (string (date-time)) (required) - **contentType** (string) - **contentSubtype** (string (facturae|inboxEmailBody)) ("facturae"|"inboxEmailBody") - **main** (object) (required) - **title** (string): Título del producto. Calculado automáticamente - **name** (string) (required) - **sku** (string) - **externalId** (string): ID externo del producto. Debe ser único entre todos los productos - **sales** (object) - **price** (number) - **description** (string) - **tax** (array (string)) (required) - **account** (string) (required): Número de cuenta contable - **purchases** (object) - **price** (number) - **description** (string) - **tax** (array (string)) (required) - **account** (string) (required): Número de cuenta contable - **depreciable** (boolean) - **currency** (string) (required): Moneda de los precios del producto (Formato ISO 4217) - **import** (object): Información interna del origen del objeto - **from** (string) (required) - **creationDate** (string (date-time)) (required): 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") - **modificationDate** (string (date-time)) (required): 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") #### 400 - response - **statusCode** (integer) (required) ("400") - **message** (string) (required) - **type** (string) - **errors** (array (object)) #### 401 - response - **statusCode** (integer) (required) ("401") - **message** (string) (required) #### 403 - response - **statusCode** (integer) (required) ("403") - **message** (string) (required) #### 404 - response - **statusCode** (integer) (required) ("404") - **message** (string) (required) #### 500 - response - **statusCode** (integer) (required) ("500") - **message** (string) (required) ### Example Usage ```bash curl -X PUT "https://app.facturadirecta.com/api/{companyId}/products/{id}" \ -H "Content-Type: application/json" \ -d '{ "content": { "type": "product", "uuid": "string", "attachments": [ { "name": "string", "url": "string", "size": "0", "creationTime": "2023-01-01T00:00:00Z", "contentType": "string", "contentSubtype": "facturae" } ], "main": { "title": "string", "name": "string", "sku": "string", "externalId": "string", "sales": { "price": "0", "description": "string", "tax": [ "string" ], "account": "string" }, "purchases": { "price": "0", "description": "string", "tax": [ "string" ], "account": "string", "depreciable": "true" }, "currency": "string" }, "import": { "from": "string" } } }' ``` ```