Cómo subir archivos usando la API de FacturaScripts
FacturaScripts permite la subida de archivos mediante el uso de su API. Para ello, se debe realizar una petición al endpoint uploadFiles.
Cómo hacer la petición al endpoint
Para hacer la petición, se debe enviar una solicitud POST al siguiente endpoint:
POST /api/3/uploadFiles
En el cuerpo (body) de la petición, se debe incluir el parámetro files[] junto al archivo que se desea subir. FacturaScripts no permite subir archivos con extensión .php.
Ejemplo de petición al endpoint de la API con Insomnia

Ejemplo en PHP:
$ch = curl_init();
$body = [
'files[]' => new CURLFile('/ruta/a/tuArchivo/imagen1.jpg'),
]
$headers = [
'Token:' . 'TuToken',
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_URL, 'http://TuURL/api/3/uploadFiles');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$response = curl_exec($ch);
curl_close($ch);
Ejemplo en JS:
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
async function subirArchivo() {
const form = new FormData();
form.append('files[]', fs.createReadStream(/ruta/a/tuArchivo/imagen1.jpg), {
filename: 'img1.jpg',
contentType: 'image/jpeg'
});
const headers = {
'Token': 'TuToken',
...form.getHeaders(),
};
const response = await axios.post('http://TuURL/api/3/uploadFiles', form, { headers });
}
subirArchivo();
Si el archivo se sube correctamente, la API devolverá la información sobre el archivo o archivos subidos. Además, el nombre del archivo se modificará automáticamente en la carpeta MyFiles para evitar que se sobrescriba.
En caso de error, la API devolverá un mensaje de error o un array files[] vacío.

Para más detalles puedes consultar el archivo ApiUploadFiles.php en GitHub:
facturascripts/Core/Controller/ApiUploadFiles.php at master · NeoRazorX/facturascripts · GitHub
Descargar archivos
Para descargar archivos de la biblioteca tenemos el modelo AttachedFile y el endpoint attachedfiles. Al consultar este endpoint, además de los datos del archivo obtendremos los campos download y download-permanent.
- download: proporciona un enlace de descarga válido duranete 5 minutos.
- download-permanent: proporciona un enlace de descarga válido para siempre.
Vincular con productos/clientes/documentos
Podemos vincular un archivo subido con un producto, cliente, proveedor, factura, etc ... usando el endpoint attachedfilerelations. Hay que pasarle el idfile, model y modelcode:
- idfile: el id del archivo subido.
- model: el nombre del modelo con el que queremos relacionarlo. Ejemplo: FacturaCliente.
- modelcode: el identificador del registro en cuestión con el que queremos relacionarlo. Por ejemplo: 234 (factura con idfactura 234).