Envio de arquivos
Diversos serviços nossos esperam receber documentos para que a análise seja realizada. O envio destes pode ser realizado de duas maneiras:
- Multipart - form-data
O arquivo pode ser enviado na requisição como "multipart/form-data". Essa maneira é a mais recomendada e pode ser facilmente implementada nas diversas linguagens e ferramentas.
curl --request POST \
--url 'https://example-url.nxcd.app/endpoint' \
--header 'Authorization: ApiKey <TOKEN>' \
--header 'Content-Type: multipart/form-data' \
--form 'frente=@/documento-frente-exemplo.jpg' \
--form 'verso=@/documento-verso-exemplo.jpg'const form = new FormData();
form.append("frente", "./documento-frente-exemplo.jpg");
form.append("verso", "./documento-verso-exemplo.jpg");
const options = {
method: 'POST',
headers: {
'Content-Type': 'multipart/form-data; boundary=---011000010111000001101001',
Authorization: 'ApiKey <TOKEN>'
}
};
options.body = form;
fetch('https://example-url.nxcd.app/endpoint', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));import axios from "axios";
const form = new FormData();
form.append("frente", "./documento-frente-exemplo.jpg");
form.append("verso", "./documento-verso-exemplo.jpg");
const options = {
method: 'POST',
url: 'https://example-url.nxcd.app/endpoint',
params: {
},
headers: {
'Content-Type': 'multipart/form-data; boundary=---011000010111000001101001',
Authorization: 'ApiKey <TOKEN>'
},
data: '[form]'
};
axios.request(options).then(function (response) {
console.log(response.data);
}).catch(function (error) {
console.error(error);
});import requests
url = "https://example-url.nxcd.app/endpoint"
querystring = {}
payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"frente\"; filename=\"documento-frente-exemplo.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"verso\"; filename=\"documento-verso-exemplo.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n\r\n-----011000010111000001101001--\r\n"
headers = {
"Content-Type": "multipart/form-data; boundary=---011000010111000001101001",
"Authorization": "<TOKEN>"
}
response = requests.request("POST", url, data=payload, headers=headers, params=querystring)
print(response.text)response = HTTPoison.post!(
"https://example-url.nxcd.app/endpoint",
{:multipart, [
{:file, "/documento-frente-exemplo.jpg", {"form-data", [{:name, "frente"}, {:filename, Path.basename("/documento-frente-exemplo.jpg")}]}, []},
{:file, "/documento-verso-exemplo.jpg", {"form-data", [{:name, "verso"}, {:filename, Path.basename("/documento-verso-exemplo.jpg")}]}, []}
]},
[
{"Authorization", "ApiKey <TOKEN>"},
{"Content-Type", "multipart/form-data"}
]
)import 'package:http/http.dart' as http;
void main() async {
final url = Uri.parse('https://example-url.nxcd.app/endpoint');
final req = http.MultipartRequest('POST', url)
..files.add(await http.MultipartFile.fromPath(
'frente', '/documento-frente-exemplo.jpg'))
..files.add(await http.MultipartFile.fromPath(
'verso', '/documento-verso-exemplo.jpg'));
req.headers['Authorization'] = 'ApiKey <TOKEN>';
req.headers['Content-Type'] = 'multipart/form-data';
final stream = await req.send();
final res = await http.Response.fromStream(stream);
final status = res.statusCode;
if (status != 200) throw Exception('http.send error: statusCode= $status');
print(res.body);
}- Base64
O envio pode ser feito através do base64 da imagem original, enviando-o em formato JSON no body da requisição, conforme abaixo:
{
"base64": {
"arquivo1": "BASE_64_1_AQUI",
"arquivo2": "BASE_64_2_AQUI"
}
}🚧 O envio por URL foi descontinuado
O envio do arquivo por URL, no campo urls, foi descontinuado e deixou de fazer parte desta documentação. As integrações que ainda dependem dele devem migrar para multipart/form-data ou para o campo base64.
Limites
Os limites abaixo valem para todas as APIs e são aplicados antes do processamento do arquivo.
| Limite | Valor | Onde se aplica |
|---|---|---|
| Tamanho de cada arquivo | 15 MB | Envio em multipart/form-data |
| Tamanho de cada campo do formulário | 5 MB | Envio em multipart/form-data |
| Tamanho do corpo JSON | 50 MB | Envio em base64 |
| Tamanho do corpo da requisição na borda | 100 MB | Todas as formas de envio |
- Multipart: cada arquivo pode ter até 15 MB e cada campo do formulário até 5 MB. Um arquivo acima do limite recebe
413 Payload Too Large. - Base64: o conteúdo codificado viaja no corpo JSON e está sujeito ao limite de 50 MB. Lembre-se de que a codificação em base64 aumenta o tamanho do arquivo original em cerca de um terço.
WARNING
Um corpo JSON acima de 50 MB é recusado antes de a aplicação gerar o identificador da requisição: a resposta vem com código 500 e id: null. Acima de 100 MB, a requisição é barrada na borda e a resposta nem sequer é JSON. Em ambos os casos, o identificador da requisição continua disponível no header Nextid-ReqId.