Criar upload
Após o envio, o arquivo é processado automaticamente. Nenhuma configuração adicional é necessária.
Endpoint
Copy
POST /v2/file_uploads
Requisição
Copy
curl -X POST https://api.base39.com.br/v2/file_uploads \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{
"filename": "balanco_2024.pdf",
"content_type": "application/pdf"
}'
Resposta
Copy
{
"object": "file_upload",
"id": "fu_abc123def456",
"status": "pending",
"filename": "balanco_2024.pdf",
"content_type": "application/pdf",
"upload_url": "https://s3.amazonaws.com/bucket/...?X-Amz-Signature=...",
"expires_at": "2024-12-07T12:00:00.000Z",
"parsing": {
"status": "not_started"
}
}
Enviar o arquivo
Use aupload_url retornada para enviar o conteúdo do arquivo via PUT:
Copy
curl -X PUT "https://s3.amazonaws.com/bucket/...?X-Amz-Signature=..." \
-H "Content-Type: application/pdf" \
--data-binary @/caminho/do/arquivo.pdf
A URL expira em 1 hora. O arquivo deve ser enviado logo após criar o upload.
Exemplo completo em JavaScript
Copy
async function uploadFile(file) {
// Criar upload e obter URL
const response = await fetch('https://api.base39.com.br/v2/file_uploads', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: 'Bearer YOUR_TOKEN',
},
body: JSON.stringify({
filename: file.name,
content_type: file.type,
}),
})
const { id, upload_url } = await response.json()
// Enviar arquivo para S3
await fetch(upload_url, {
method: 'PUT',
headers: { 'Content-Type': file.type },
body: file,
})
// Aguardar processamento
let fileUpload
do {
await new Promise((r) => setTimeout(r, 2000))
const res = await fetch(`https://api.base39.com.br/v2/file_uploads/${id}`, {
headers: { Authorization: 'Bearer YOUR_TOKEN' },
})
fileUpload = await res.json()
} while (fileUpload.parsing.status === 'pending' || fileUpload.parsing.status === 'processing')
return fileUpload
}
// Uso
const file = document.querySelector('input[type="file"]').files[0]
const result = await uploadFile(file)
if (result.parsing.status === 'completed') {
console.log('Template:', result.parsing.template)
console.log('Dados:', result.parsed_data)
}
Exemplo em Python
Copy
import requests
import time
def upload_file(file_path: str, token: str):
# Criar upload
with open(file_path, 'rb') as f:
filename = file_path.split('/')[-1]
content_type = 'application/pdf'
response = requests.post(
'https://api.base39.com.br/v2/file_uploads',
headers={
'Authorization': f'Bearer {token}',
'Content-Type': 'application/json'
},
json={
'filename': filename,
'content_type': content_type
}
)
data = response.json()
file_id = data['id']
upload_url = data['upload_url']
# Enviar arquivo
f.seek(0)
requests.put(
upload_url,
headers={'Content-Type': content_type},
data=f
)
# Aguardar processamento
while True:
time.sleep(2)
response = requests.get(
f'https://api.base39.com.br/v2/file_uploads/{file_id}',
headers={'Authorization': f'Bearer {token}'}
)
file_upload = response.json()
if file_upload['parsing']['status'] not in ['pending', 'processing']:
break
return file_upload
# Uso
result = upload_file('/caminho/para/balanco.pdf', 'YOUR_TOKEN')
print(f"Template: {result['parsing']['template']}")
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
filename | string | Sim | Nome do arquivo (máx. 900 caracteres) |
content_type | string | Sim | Tipo MIME do arquivo |
size_bytes | number | Não | Tamanho em bytes para validação prévia |
Limites de tamanho
| Plano | Máximo por arquivo |
|---|---|
| Free | 5 MB |
| Paid | 5 GB |