---
title: Files e Uploads | RunAPI
description: Crie, liste, baixe e exclua Files persistentes, ou monte um File a partir
  de partes de Upload multipart.
url: https://runapi.ai/pt-BR/docs/resources/files.md
canonical: https://runapi.ai/pt-BR/docs/resources/files
locale: pt-BR
---

> Versão HTML: https://runapi.ai/pt-BR/docs/resources/files
> Índice do site para agentes: https://runapi.ai/llms.txt

# Files e Uploads

A API de Arquivos armazena arquivos imutáveis com escopo de Conta — `user_data`, `batch` e `batch_output` — e retorna IDs de arquivo estáveis em vez de URLs de armazenamento. Use um ID de arquivo quando uma API aceitar um recurso de arquivo reutilizável e use o endpoint de conteúdo quando a sua aplicação precisar dos bytes exatos armazenados.

## Escolher um fluxo de upload

* Use `POST /v1/files` para criar um File a partir de uma única requisição
  multipart. Um File `user_data` concluído pode conter até `52,428,800` bytes.
* Use `POST /v1/files` com `purpose=batch` para uma entrada de batch direta
  de até `95,000,000` bytes.
* Use a Uploads API para enviar Parts antes de compor o File final. Cada Part
  pode conter até `67,108,864` bytes; um File `user_data` concluído é limitado
  a `52,428,800` bytes e um File `batch` concluído a `209,715,200` bytes. Um
  Upload inacabado expira após uma hora.
* Files ativos e reservas em andamento compartilham um limite de armazenamento
  de Conta de `5,368,709,120` bytes.

`POST /api/v1/files` é um fluxo de upload temporário separado que retorna uma
URL temporária. O SDK `files.create` e a CLI `runapi files create` continuam
a usar esse fluxo. Use `files.createFile` ou `files.create_file`, ou a CLI
`runapi files create-file`, quando precisar de um objeto File persistente.

## Autenticar uma requisição

Files e Uploads usam uma Chave de API RunAPI padrão. Envie-a como um token Bearer:

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

Cada File, Upload, Part e requisição de conteúdo tem escopo para a
Conta autenticada. Um ID pertencente a outra Conta retorna `404`
sem revelar se esse recurso existe.

## Criar um File com um cliente compatível

Aponte um cliente compatível com OpenAI para a URL base `/v1` do RunAPI. Nenhum
campo de solicitação específico do RunAPI é necessário:

```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)
```

O arquivo retornado nunca contém um identificador de armazenamento, backend ou URL de bearer.

## Referência da API

* [API de Files Persistentes](https://runapi.ai/pt-BR/docs/api/protocol/files.md) abrange o objeto File
  e as operações de criação, listagem, recuperação, conteúdo e exclusão.
* [Uploads API](https://runapi.ai/pt-BR/docs/api/protocol/uploads.md) abrange o objeto Upload e as
  operações de criação, adição de parte, conclusão e cancelamento.
* [Batches API](https://runapi.ai/pt-BR/docs/api/protocol/batches.md) abrange a criação, o status, a
  listagem e o cancelamento de Moderation Batch.

## Executar Moderação em um Batch

Crie um File JSONL de entrada com uma requisição de moderação por linha. Cada
linha usa o formato de Batch compatível: `custom_id`, `method`, `url` definida
como `/v1/moderations`, e um `body` contendo o modelo de moderação e
a entrada. Um File com `purpose=batch` pode conter até 50.000 requisições. A capacidade de
Batch atualmente aceita o endpoint `/v1/moderations` com uma janela de conclusão de `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"
```

Use `GET /v1/batches` para listar os trabalhos, repita `GET /v1/batches/{batch_id}`
até que o status seja terminal, ou chame `POST
/v1/batches/{batch_id}/cancel` enquanto ainda estiver em execução. A saída
completa e os erros em JSONL são expostos como Files `batch_output`; recupere
seus metadados com `GET /v1/files/{file_id}` e os bytes exatos com `GET
/v1/files/{file_id}/content`.

## Ciclo de vida do Multipart Upload

Crie um Upload com a contagem final de bytes, nome do arquivo, tipo MIME e
`purpose=user_data`. Adicione uma ou mais Parts e passe seus IDs para
`complete` na ordem de composição. A conclusão retorna o Upload com seu
File finalizado.

```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\"]}"
```

Cancele um Upload inacabado com `POST /v1/uploads/{upload_id}/cancel`.
Repetir a mesma intenção de conclusão ou cancelamento é seguro; uma
conclusão, cancelamento ou expiração concorrente retorna `409
upload_state_conflict` quando outro resultado terminal já foi definido.

## Recursos de CLI e SDK

A CLI expõe o ciclo de vida 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
```

Cada Provider Client expõe `files` e `uploads`. JavaScript e PHP
usam `createFile` / `deleteFile` / `addPart`; Python e Ruby usam
`create_file` / `delete_file` / `add_part`; Go usa `CreateFile` /
`DeleteFile` / `AddPart`; Java usa `createFile` / `deleteFile` /
`addPart`. List, retrieve, content, create, complete e cancel seguem
a convenção de nomenclatura normal de cada linguagem. Consulte
[SDKs](https://runapi.ai/pt-BR/docs/resources/sdks.md) para instalação de pacotes.

## Comportamento do ciclo de vida

O conteúdo do File é imutável. Excluir um File o remove das listagens ativas imediatamente e agenda a limpeza do armazenamento. A conclusão de um Upload compõe as Parts apenas na ordem fornecida, e uma conclusão bem-sucedida cria um File. Mantenha a ordem original dos IDs de Part ao repetir uma resposta de conclusão incerta.

---

## Mais de RunAPI

- [Início](https://runapi.ai/pt-BR/.md)
- [Catálogo de modelos](https://runapi.ai/pt-BR/models.md)
- [Preços](https://runapi.ai/pt-BR/pricing.md)
- [Provedores](https://runapi.ai/pt-BR/models)
- [Documentação](https://runapi.ai/pt-BR/docs/guides)
- [SDKs](https://runapi.ai/pt-BR/sdk.md)
- [CLI](https://runapi.ai/pt-BR/cli.md)
- [Servidor MCP](https://runapi.ai/pt-BR/mcp.md)
- [Claude Code vs Cursor](https://runapi.ai/pt-BR/claude-code-vs-cursor.md)
- [Configuração da API do Cursor](https://runapi.ai/pt-BR/cursor-api-setup.md)
- [RunAPI vs OpenRouter](https://runapi.ai/pt-BR/openrouter-alternative.md)
- [Enterprise](https://runapi.ai/pt-BR/contact.md)
- [Contato](https://runapi.ai/pt-BR/contact.md)
- [Termos](https://runapi.ai/pt-BR/terms.md)
- [Privacidade](https://runapi.ai/pt-BR/privacy.md)
- [Índice do site para agentes](https://runapi.ai/llms.txt)

Contato: contact@runapi.ai

## Dados estruturados

```json
[
  {
    "@context": "https://schema.org",
    "inLanguage": "pt-BR",
    "@type": "WebSite",
    "name": "RunAPI",
    "url": "https://runapi.ai/pt-BR",
    "potentialAction": {
      "@type": "SearchAction",
      "target": {
        "@type": "EntryPoint",
        "urlTemplate": "https://runapi.ai/pt-BR/models?q={search_term_string}"
      },
      "query-input": "required name=search_term_string"
    }
  },
  {
    "@context": "https://schema.org",
    "inLanguage": "pt-BR",
    "@type": "Organization",
    "name": "RunAPI",
    "url": "https://runapi.ai/pt-BR",
    "logo": {
      "@type": "ImageObject",
      "url": "https://runapi.ai/pt-BRicon.svg"
    },
    "sameAs": [
      "https://github.com/runapi-ai"
    ]
  },
  {
    "@context": "https://schema.org",
    "inLanguage": "pt-BR",
    "@type": "TechArticle",
    "headline": "Files e Uploads",
    "description": "Crie, liste, baixe e exclua Files persistentes, ou monte um File a partir de partes de Upload multipart.",
    "url": "https://runapi.ai/pt-BR/docs/resources/files",
    "mainEntityOfPage": "https://runapi.ai/pt-BR/docs/resources/files"
  }
]
```
