Riferimento API
File
Carica gli input e scarica i risultati.
Carica#
POST /files accetta multipart/form-data e richiede l’ambito figures:generate. Restituisce 201 con file_id, purpose, content_type, size_bytes, expires_at e created_at.
| Campo | Tipo | Obbligatorio | Valore predefinito | Regole |
|---|---|---|---|---|
| file | file | sì | — | Vedi sotto i limiti per finalità |
| purpose | string | no | image | image, mask o flowchart_attachment |
| Finalità | Accettato | Usato per |
|---|---|---|
| image | PNG, JPEG o WebP fino a 20 MB, verificato dal contenuto e non dal nome | Modifiche, rilevamento del testo, ingrandimenti, conversioni, immagini di riferimento |
| mask | PNG fino a 8 MB; il bianco indica la regione da ridisegnare | POST /images/edits |
| flowchart_attachment | Formati dello spazio di lavoro FlowChart, fino a 32 MB | POST /flowcharts/generations |
I file caricati possono essere usati per 24 ore; dopo, il file_id è sconosciuto: 400 INVALID_REQUEST, FILE_NOT_FOUND. Sono solo input: non compaiono mai nelle risposte dei processi e non vengono condivisi con nessuno.
I caricamenti contano per gli stessi limiti del sito. Oltre tali limiti, la risposta è 429 RATE_LIMITED con Retry-After e details.reason pari a UPLOAD_RATE_LIMITED al minuto o UPLOAD_DAILY_LIMIT_REACHED al giorno per gli allegati dei diagrammi di flusso.
Un caricamento può inviare un’intestazione facoltativa Idempotency-Key di 1–255 caratteri ASCII visibili. Lo stesso account, chiave e purpose corrispondono sempre a un solo file_id: una ripetizione restituisce il primo file con 201, senza ricaricarlo né consumare i limiti. La stessa chiave e purpose con byte diversi restituisce 409 IDEMPOTENCY_CONFLICT. Senza intestazione, ogni caricamento crea un nuovo file. Se il caricamento è scaduto, la ripetizione restituisce 400 INVALID_REQUEST con details.reason = FILE_EXPIRED; caricalo di nuovo con una nuova chiave.
Scarica#
Ogni risultato ha un download_url utilizzabile senza credenziali per un’ora; consulta di nuovo il processo per un nuovo link. GET /files/{file_id} con le tue credenziali scarica qualsiasi tuo file. I file vengono sempre serviti come allegati.
Un download_url firmato restituisce 404 NOT_FOUND dopo la scadenza o se viene modificato; tutti i link di un account bloccato o in fase di eliminazione smettono di funzionare allo stesso modo.
| Risultato | Può essere passato a |
|---|---|
| PNG o JPEG | Ogni endpoint per immagini: modifiche, rilevamento del testo, ingrandimenti, conversioni, immagini di riferimento |
| WebP | Modifiche, rilevamento del testo, ingrandimenti, vettorializzazione SVG e immagini di riferimento; non conversioni PNG, PDF, TIFF o PPTX |
| SVG di diagramma di flusso | POST /images/conversions in PNG, PDF, TIFF o PPTX |
| PDF, TIFF, EPS, PPTX e altri SVG | Nessuno: solo download |
Una sorgente di conversione più grande di 20 MB, ad esempio un ingrandimento 8K, viene rifiutata con 400 INVALID_REQUEST e FILE_TOO_LARGE.
cURL#
curl -X POST https://scifig.ai/api/v1/files \
-H "Authorization: Bearer $SCIFIG_API_KEY" \
-F "file=@figure.png" \
-F "purpose=image"JavaScript#
import { readFile } from 'node:fs/promises';
const form = new FormData();
form.set('file', new Blob([await readFile('figure.png')]), 'figure.png');
form.set('purpose', 'image');
const response = await fetch('https://scifig.ai/api/v1/files', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SCIFIG_API_KEY}`,
},
body: form,
});
const result = await response.json();
console.log(response.status, result);Python#
import os
import requests
headers = {
"Authorization": f"Bearer {os.environ['SCIFIG_API_KEY']}",
}
response = requests.post(
"https://scifig.ai/api/v1/files",
headers=headers,
files={"file": open("figure.png", "rb")},
data={"purpose": "image"},
timeout=60,
)
print(response.status_code, response.json())