Referencia completa de todos os endpoints da API BuildShip — confere com o codigo.
Todos os endpoints aceitam JSON e retornam JSON. Base URL: `https://api.buildship.com.br/api/v1`.
> **Fonte da verdade**: `GET /api/v1/docs` retorna o catálogo de endpoints diretamente do servidor (atualizado em runtime). Esta página é a versão narrada para humanos.
## Health Check
```http
GET /api/v1/health
```
Sem autenticacao. Retorna o status do servico e a lista resumida de endpoints.
```json
{
"status": "ok",
"version": "1.0.0",
"endpoints": { "...": "..." }
}
```
---
## Process — Arquivo + prompt
Endpoint principal pra processar arquivos com IA.
```http
POST /api/v1/process
Content-Type: multipart/form-data
```
**Permissao**: `process`
**Campos:**
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
| `file` | file | sim | Arquivo a processar (max 500MB) |
| `prompt` | string | sim | Instrucao pra IA |
| `templateId` | string | nao | ID de template (substitui prompt) |
| `templateVars` | object | nao | Variaveis do template |
| `endUserId` | string | nao | ID do usuario final (B2B2C) |
| `callbackUrl` | string | nao | URL pra receber resultado via webhook |
**Exemplo:**
```bash
curl -X POST https://api.buildship.com.br/api/v1/process \
-H "X-API-Key: bld_sua_chave" \
-F "file=@curriculo.pdf" \
-F "prompt=Extraia nome, email e telefone deste curriculo"
```
**Resposta:**
```json
{
"sessionId": "session_abc123",
"status": "started",
"fileUrl": "https://r2.buildship.com.br/.../curriculo.pdf"
}
```
### Process Batch (lote)
```http
POST /api/v1/process/batch
Content-Type: multipart/form-data
```
Envia vários arquivos numa única chamada. Mesmos campos do `/process`, mas `file` aceita N arquivos (campo repetido).
```bash
curl -X POST https://api.buildship.com.br/api/v1/process/batch \
-H "X-API-Key: bld_sua_chave" \
-F "file=@cv1.pdf" \
-F "file=@cv2.pdf" \
-F "file=@cv3.pdf" \
-F "prompt=Extraia nome e email"
```
**Resposta:** array de `{ sessionId, status, fileUrl }` — um por arquivo.
### Status / detalhes de um processamento
```http
GET /api/v1/process/:id
```
Retorna status atual, output (quando `completed`), tokens, custo.
### Listar processamentos
```http
GET /api/v1/process?limit=20&offset=0&status=completed
```
Filtros opcionais: `status`, `endUserId`, `templateId`.
### Download de arquivo gerado
```http
GET /api/v1/process/:id/download
```
Pra processamentos cuja saída é binária (imagem, áudio, vídeo). Retorna o arquivo direto, com `Content-Type` apropriado.
---
## Chat — Conversa multi-turn
Pra mensagens sem arquivo (ou com texto/contexto inline), multi-turn.
```http
POST /api/v1/chat
Content-Type: application/json
```
**Permissao**: `chat`
**Body:**
```json
{
"message": "Sua mensagem aqui",
"sessionId": "session_existente_opcional",
"endUserId": "user-123",
"templateId": "tmpl_xyz",
"templateVars": { "nome": "Joao" },
"fileContent": "texto inline opcional"
}
```
**Multi-turn (mesma sessao):**
```bash
# Primeira mensagem
curl -X POST .../api/v1/chat \
-H "X-API-Key: bld_sua_chave" \
-H "Content-Type: application/json" \
-d '{"message": "Ola", "endUserId": "user-1"}'
# → { "sessionId": "session_abc", "status": "started" }
# Segunda (passa o sessionId)
curl -X POST .../api/v1/chat \
-H "X-API-Key: bld_sua_chave" \
-H "Content-Type: application/json" \
-d '{"message": "E ai?", "sessionId": "session_abc"}'
# → { "sessionId": "session_abc", "status": "resumed" }
```
### Status / mensagens de uma sessao
```http
GET /api/v1/chat/:sessionId
```
**Resposta:**
```json
{
"id": "session_abc",
"status": "completed",
"messages": [
{ "role": "user", "content": "...", "timestamp": "..." },
{ "role": "assistant", "content": "...", "timestamp": "..." }
],
"lastOutput": "Resposta final da IA",
"tokensUsed": 1234,
"creditsUsed": 12,
"createdAt": "2026-04-28T10:00:00Z",
"endUserId": "user-123"
}
```
### Stream em tempo real (SSE)
```http
GET /api/v1/chat/:sessionId/stream
```
Server-Sent Events com chunks da IA conforme ela responde.
### Listar sessoes
```http
GET /api/v1/chat/sessions
GET /api/v1/chat/sessions?endUserId=user-123
GET /api/v1/chat/sessions?limit=20&offset=0
```
Filtros: `endUserId`, `status`, `limit` (default 20, max 100), `offset`.
---
## B2B Send — Hibrido
Aceita arquivo + prompt + sessao numa unica chamada. Util pra automacoes.
```http
POST /api/v1/b2b/send
Content-Type: multipart/form-data
```
**Permissao**: `b2bSend`
Funciona como `/process` se tiver `file`, ou como `/chat` se nao tiver. Permite continuar sessao existente passando `sessionId`.
---
## Templates
Prompts reusaveis com variaveis `{{nome}}`. Detalhe completo em [Templates](/docs/api/templates).
| Metodo | Path | Descricao |
|---|---|---|
| `GET` | `/api/v1/templates` | Lista seus templates |
| `GET` | `/api/v1/templates/:id` | Busca um template |
| `POST` | `/api/v1/templates` | Cria template via JSON |
| `POST` | `/api/v1/templates/upload` | Cria template enviando arquivo (.md, .txt) |
| `PUT` | `/api/v1/templates/:id` | Atualiza template |
| `DELETE` | `/api/v1/templates/:id` | Remove template |
**Permissao**: `templates`
---
## Conta e uso
```http
GET /api/v1/account
```
Retorna creditos, plano, limites e estatisticas resumidas.
```http
GET /api/v1/usage
```
Detalhamento de uso (consumo por dia, tokens, custo, breakdown por endpoint).
---
## End Users (multi-tenancy via parametro)
> **Importante**: hoje **não existem endpoints REST separados** pra gerenciar end users (`POST /end-users` etc). End users são "criados" implicitamente: basta passar `endUserId` em qualquer chamada de `/chat`, `/process` ou `/b2b/send`.
**Como funciona:**
- O `endUserId` que você manda é gravado na sessão.
- Sessões/mensagens ficam isoladas por `endUserId` (filtros nas listagens).
- Se o projeto tem `apiMemoryPerUser=true`, a IA mantém um **perfil .md por endUser** em `.brain/api/db/users/<endUserId>.md`, usado como contexto em conversas futuras.
**Roadmap**: endpoints REST dedicados (`/api/v1/end-users`) estao no backlog. Por enquanto, use o parametro `endUserId` direto.
---
## Knowledge Base (via .brain do projeto)
> **Importante**: também **não há CRUD REST** pra knowledge base. O conhecimento extra que a IA usa como contexto vive em arquivos `.md` dentro de `.brain/api/db/` do seu projeto.
Pra alimentar a knowledge base:
1. Crie/edite arquivos `.md` em `.brain/api/db/` via o painel do projeto (modo `apiEnabled`).
2. A IA injeta esse conteúdo no system prompt em toda chamada `/chat` ou `/process` daquele projeto.
**Roadmap**: API REST pra CRUD da knowledge base está no backlog.
---
## Catalogo JSON (auto-atualizado)
Pra clientes/SDKs/automacoes, o catalogo completo de endpoints (com permissoes, parametros, headers) está em:
```http
GET /api/v1/docs
```
Esse JSON é gerado a partir do código — sempre reflete o que o servidor realmente expõe.
Quer integrar com ajuda da IA?
Copia esta pagina como .md e cola no ChatGPT/Claude — ela vai te guiar na integracao