---
title: File e Upload | RunAPI
description: Crea, elenca, scarica ed elimina File persistenti, oppure assembla un
  File da parti di caricamento multiparte.
url: https://runapi.ai/it/docs/resources/files.md
canonical: https://runapi.ai/it/docs/resources/files
locale: it
---

> Versione HTML: https://runapi.ai/it/docs/resources/files
> Indice del sito per gli agenti: https://runapi.ai/llms.txt

# File e Upload

La Files API archivia file `user_data`, `batch` e
`batch_output` immutabili con ambito Account e restituisce ID file stabili anziché URL di
storage. Usa un ID file quando un'API accetta una risorsa file riutilizzabile e
usa l'endpoint del contenuto quando la tua applicazione ha bisogno dei byte esatti memorizzati.

## Scegli un flusso di upload

* Usa `POST /v1/files` per creare un File da un'unica richiesta multipart.
  Un File `user_data` completato può contenere fino a `52,428,800` byte.
* Usa `POST /v1/files` con `purpose=batch` per un input batch diretto
  fino a `95,000,000` byte.
* Usa la Uploads API per inviare le Parti prima di comporre il File finale.
  Ogni Parte può contenere fino a `67,108,864` byte; un File `user_data`
  completato è limitato a `52,428,800` byte e un File `batch` completato
  a `209,715,200` byte. Un Upload non terminato scade dopo un'ora.
* I File attivi e le prenotazioni in corso condividono un limite di
  archiviazione dell'Account pari a `5,368,709,120` byte.

`POST /api/v1/files` è un flusso di caricamento temporaneo separato che restituisce un URL temporaneo. L'SDK `files.create` e la CLI `runapi files create` continuano a utilizzare tale flusso. Utilizzare `files.createFile` o `files.create_file`, oppure la CLI `runapi files create-file`, quando si necessita di un oggetto File persistente.

## Autenticare una richiesta

File e Upload utilizzano una Chiave API standard di RunAPI. Inviala come token Bearer:

```shell
export RUNAPI_API_KEY="runapi_..."
```

Ogni File, Upload, Parte e richiesta di contenuto è limitata all'Account autenticato. Un ID di proprietà di un altro Account restituisce `404` senza rivelare se quella risorsa esiste.

## Creare un File con un client compatibile

Punta un client compatibile con OpenAI all'URL base RunAPI `/v1`. Non
sono richiesti campi di richiesta specifici di RunAPI:

```python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["RUNAPI_API_KEY"],
    base_url="https://runapi.ai/v1",
)

with open("knowledge.pdf", "rb") as source:
    file = client.files.create(file=source, purpose="user_data")

metadata = client.files.retrieve(file.id)
client.files.content(file.id).write_to_file("knowledge-copy.pdf")
client.files.delete(file.id)
```

Il file restituito non contiene mai un identificatore di storage, un backend o
un URL bearer.

## Riferimento API

* La [Persistent Files API](https://runapi.ai/it/docs/api/protocol/files.md) descrive l'oggetto
  File e le operazioni di creazione, elenco, recupero, contenuto ed
  eliminazione.
* La [Uploads API](https://runapi.ai/it/docs/api/protocol/uploads.md) descrive l'oggetto Upload
  e le operazioni di creazione, aggiunta di parti, completamento e
  annullamento.
* La [Batches API](https://runapi.ai/it/docs/api/protocol/batches.md) descrive la creazione,
  lo stato, l'elenco e l'annullamento dei Moderation Batch.

## Esegui la Moderazione in un Batch

Crea un File di input JSONL con una richiesta di moderazione per riga. Ogni
riga utilizza la struttura Batch compatibile: `custom_id`, `method`, `url` impostato
su `/v1/moderations` e un `body` contenente il modello di moderazione e
l'input. Un File con `purpose=batch` può contenere fino a 50.000 richieste. La
funzionalità Batch accetta attualmente l'endpoint `/v1/moderations` con una
finestra di completamento `24h`.

```shell
INPUT_FILE_ID=$(curl -sS https://runapi.ai/v1/files \
  -H "Authorization: Bearer $RUNAPI_API_KEY" \
  -F purpose=batch \
  -F file=@moderation.jsonl | jq -r .id)

BATCH_ID=$(curl -sS https://runapi.ai/v1/batches \
  -H "Authorization: Bearer $RUNAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --arg file "$INPUT_FILE_ID" '{input_file_id:$file,endpoint:"/v1/moderations",completion_window:"24h"}')" \
  | jq -r .id)

curl -sS "https://runapi.ai/v1/batches/$BATCH_ID" \
  -H "Authorization: Bearer $RUNAPI_API_KEY"
```

Usa `GET /v1/batches` per elencare i lavori, ripeti `GET /v1/batches/{batch_id}`
finché lo stato non è terminale, oppure chiama `POST
/v1/batches/{batch_id}/cancel` mentre è ancora in esecuzione. I JSONL di output
ed errore completati sono esposti come Files `batch_output`; recupera
i loro metadati con `GET /v1/files/{file_id}` e i byte esatti con `GET
/v1/files/{file_id}/content`.

## Ciclo di vita del caricamento multiparte

Crea un Upload con il conteggio finale dei byte, il nome file, il tipo MIME e
`purpose=user_data`. Aggiungi una o più Parti, quindi passa i loro ID a
`complete` nell'ordine di composizione. Il completamento restituisce l'Upload con il
suo File terminato.

```shell
UPLOAD_ID=$(curl -sS https://runapi.ai/v1/uploads \
  -H "Authorization: Bearer $RUNAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"bytes":1048576,"filename":"archive.bin","mime_type":"application/octet-stream","purpose":"user_data"}' \
  | jq -r .id)

PART_ID=$(curl -sS "https://runapi.ai/v1/uploads/$UPLOAD_ID/parts" \
  -H "Authorization: Bearer $RUNAPI_API_KEY" \
  -F data=@archive.part-01 | jq -r .id)

curl -sS "https://runapi.ai/v1/uploads/$UPLOAD_ID/complete" \
  -H "Authorization: Bearer $RUNAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"part_ids\":[\"$PART_ID\"]}"
```

Annulla un Upload non completato con `POST /v1/uploads/{upload_id}/cancel`.
Ripetere lo stesso intento di completamento o annullamento è sicuro; un
completamento, annullamento o scadenza concorrente restituisce `409
upload_state_conflict` quando un altro esito terminale ha già prevalso.

## Risorse CLI e SDK

La CLI espone il ciclo di vita completo:

```shell
runapi files create-file knowledge.pdf
runapi files list --order desc
runapi files retrieve file_123
runapi files content file_123 --output knowledge-copy.pdf
runapi files delete file_123

runapi uploads create --bytes 1048576 --filename archive.bin --mime-type application/octet-stream
runapi uploads add-part upload_123 archive.part-01
runapi uploads complete upload_123 --part-id part_123
runapi uploads cancel upload_123
```

Ogni Provider Client espone `files` e `uploads`. JavaScript e PHP
usano `createFile` / `deleteFile` / `addPart`; Python e Ruby usano
`create_file` / `delete_file` / `add_part`; Go usa `CreateFile` /
`DeleteFile` / `AddPart`; Java usa `createFile` / `deleteFile` /
`addPart`. List, retrieve, content, create, complete e cancel seguono
la convenzione di denominazione normale di ciascun linguaggio. Consulta
[SDKs](https://runapi.ai/it/docs/resources/sdks.md) per l'installazione dei pacchetti.

## Comportamento del ciclo di vita

Il contenuto del File è immutabile. L'eliminazione di un File lo rimuove immediatamente dagli elenchi attivi e pianifica la pulizia dello storage. Il completamento dell'Upload compone le Parti solo nell'ordine fornito, e un completamento riuscito crea un File. Mantieni l'ordine originale degli ID delle Parti quando si ritenta una risposta di completamento incerta.

---

## Altre risorse di RunAPI

- [Home](https://runapi.ai/it/.md)
- [Catalogo dei modelli](https://runapi.ai/it/models.md)
- [Prezzi](https://runapi.ai/it/pricing.md)
- [Fornitori](https://runapi.ai/it/models)
- [Documentazione](https://runapi.ai/it/docs/guides)
- [SDK](https://runapi.ai/it/sdk.md)
- [CLI](https://runapi.ai/it/cli.md)
- [MCP Server](https://runapi.ai/it/mcp.md)
- [Claude Code vs Cursor](https://runapi.ai/it/claude-code-vs-cursor.md)
- [Configurazione Cursor API](https://runapi.ai/it/cursor-api-setup.md)
- [RunAPI vs OpenRouter](https://runapi.ai/it/openrouter-alternative.md)
- [Enterprise](https://runapi.ai/it/contact.md)
- [Contatti](https://runapi.ai/it/contact.md)
- [Termini](https://runapi.ai/it/terms.md)
- [Privacy](https://runapi.ai/it/privacy.md)
- [Indice del sito per gli agenti](https://runapi.ai/llms.txt)

Contatti: contact@runapi.ai

## Dati strutturati

```json
[
  {
    "@context": "https://schema.org",
    "inLanguage": "it",
    "@type": "WebSite",
    "name": "RunAPI",
    "url": "https://runapi.ai/it",
    "potentialAction": {
      "@type": "SearchAction",
      "target": {
        "@type": "EntryPoint",
        "urlTemplate": "https://runapi.ai/it/models?q={search_term_string}"
      },
      "query-input": "required name=search_term_string"
    }
  },
  {
    "@context": "https://schema.org",
    "inLanguage": "it",
    "@type": "Organization",
    "name": "RunAPI",
    "url": "https://runapi.ai/it",
    "logo": {
      "@type": "ImageObject",
      "url": "https://runapi.ai/iticon.svg"
    },
    "sameAs": [
      "https://github.com/runapi-ai"
    ]
  },
  {
    "@context": "https://schema.org",
    "inLanguage": "it",
    "@type": "TechArticle",
    "headline": "File e Upload",
    "description": "Crea, elenca, scarica ed elimina File persistenti, oppure assembla un File da parti di caricamento multiparte.",
    "url": "https://runapi.ai/it/docs/resources/files",
    "mainEntityOfPage": "https://runapi.ai/it/docs/resources/files"
  }
]
```
