Enriquecimento
curl --request POST \
--url https://upload.lazydata.com.br/enrichment \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-LazyData-Upload-Signature: <x-lazydata-upload-signature>' \
--data '{}'import requests
url = "https://upload.lazydata.com.br/enrichment"
payload = {}
headers = {
"X-LazyData-Upload-Signature": "<x-lazydata-upload-signature>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-LazyData-Upload-Signature': '<x-lazydata-upload-signature>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({})
};
fetch('https://upload.lazydata.com.br/enrichment', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://upload.lazydata.com.br/enrichment",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-LazyData-Upload-Signature: <x-lazydata-upload-signature>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://upload.lazydata.com.br/enrichment"
payload := strings.NewReader("{}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-LazyData-Upload-Signature", "<x-lazydata-upload-signature>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://upload.lazydata.com.br/enrichment")
.header("X-LazyData-Upload-Signature", "<x-lazydata-upload-signature>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{}")
.asString();require 'uri'
require 'net/http'
url = URI("https://upload.lazydata.com.br/enrichment")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-LazyData-Upload-Signature"] = '<x-lazydata-upload-signature>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{}"
response = http.request(request)
puts response.read_body{
"code": 202,
"message": "Arquivo recebido. O processamento foi iniciado.",
"result": {
"id": "9fcb573b-7f62-4774-978b-07e89dfef5f2",
"type": "pf",
"name": "Base de clientes",
"status": "validating_file",
"status_label": "Validando arquivo",
"file": {
"id": null,
"signature": null,
"name": "base-clientes.csv",
"extension": "csv",
"content_type": "text/csv",
"size": 24576,
"storage_key": null,
"uploaded_at": null,
"total_rows": null
},
"progress": {
"stage": "validating_file",
"stage_label": "Arquivo recebido. Preparando análise...",
"percent": 50,
"uploaded_bytes": 24576,
"total_bytes": 24576,
"total_rows": 0,
"processed_rows": 0,
"enriched_documents": 0,
"invalid_documents": 0,
"not_found_documents": 0,
"failed_rows": 0
}
}
}
{
"code": 400,
"message": "Formato de arquivo não permitido para este upload."
}
{
"code": 401,
"message": "Assinatura de upload ausente ou inválida."
}
{
"code": 404,
"message": "Enriquecimento não localizado."
}
{
"code": 409,
"message": "O arquivo deste enriquecimento já foi enviado."
}
{
"code": 413,
"message": "O arquivo deve ter no máximo 1 GB."
}
Upload de arquivos
Enriquecimento
Envie o arquivo de entrada de um enriquecimento para o serviço de upload da Lazy Data.
POST
https://upload.lazydata.com.br
/
enrichment
Enriquecimento
curl --request POST \
--url https://upload.lazydata.com.br/enrichment \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-LazyData-Upload-Signature: <x-lazydata-upload-signature>' \
--data '{}'import requests
url = "https://upload.lazydata.com.br/enrichment"
payload = {}
headers = {
"X-LazyData-Upload-Signature": "<x-lazydata-upload-signature>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-LazyData-Upload-Signature': '<x-lazydata-upload-signature>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({})
};
fetch('https://upload.lazydata.com.br/enrichment', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://upload.lazydata.com.br/enrichment",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-LazyData-Upload-Signature: <x-lazydata-upload-signature>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://upload.lazydata.com.br/enrichment"
payload := strings.NewReader("{}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-LazyData-Upload-Signature", "<x-lazydata-upload-signature>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://upload.lazydata.com.br/enrichment")
.header("X-LazyData-Upload-Signature", "<x-lazydata-upload-signature>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{}")
.asString();require 'uri'
require 'net/http'
url = URI("https://upload.lazydata.com.br/enrichment")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-LazyData-Upload-Signature"] = '<x-lazydata-upload-signature>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{}"
response = http.request(request)
puts response.read_body{
"code": 202,
"message": "Arquivo recebido. O processamento foi iniciado.",
"result": {
"id": "9fcb573b-7f62-4774-978b-07e89dfef5f2",
"type": "pf",
"name": "Base de clientes",
"status": "validating_file",
"status_label": "Validando arquivo",
"file": {
"id": null,
"signature": null,
"name": "base-clientes.csv",
"extension": "csv",
"content_type": "text/csv",
"size": 24576,
"storage_key": null,
"uploaded_at": null,
"total_rows": null
},
"progress": {
"stage": "validating_file",
"stage_label": "Arquivo recebido. Preparando análise...",
"percent": 50,
"uploaded_bytes": 24576,
"total_bytes": 24576,
"total_rows": 0,
"processed_rows": 0,
"enriched_documents": 0,
"invalid_documents": 0,
"not_found_documents": 0,
"failed_rows": 0
}
}
}
{
"code": 400,
"message": "Formato de arquivo não permitido para este upload."
}
{
"code": 401,
"message": "Assinatura de upload ausente ou inválida."
}
{
"code": 404,
"message": "Enriquecimento não localizado."
}
{
"code": 409,
"message": "O arquivo deste enriquecimento já foi enviado."
}
{
"code": 413,
"message": "O arquivo deve ter no máximo 1 GB."
}
Envia o arquivo de entrada de um enriquecimento para o serviço de upload da Lazy Data.
Este endpoint não usa a URL base da API principal. A chamada deve ser feita para:
Estrutura da resposta
Estrutura de
Estrutura de
Estrutura de
https://upload.lazydata.com.br/enrichment
Esta requisição não usa
Authorization: Bearer. A autenticação do upload é feita pelo header X-LazyData-Upload-Signature, retornado na etapa de preparação do enriquecimento.Fluxo
1
Prepare o enriquecimento
Crie ou prepare o enriquecimento informando tipo, nome e metadados do arquivo.
2
Receba a assinatura
A resposta da preparação retorna
upload_url, signature e signature_expires_at.3
Envie o arquivo
Faça
POST para upload_url, enviando o arquivo em multipart/form-data e a assinatura no header X-LazyData-Upload-Signature.4
Aguarde a análise
Após o upload, o arquivo entra em validação e análise para identificação de colunas, amostras e quantidade de registros.
Requisição
string
required
Assinatura temporária de upload retornada na preparação do enriquecimento.
file
required
Arquivo enviado em
multipart/form-data. O nome do campo deve ser exatamente file.O arquivo enviado precisa ter o mesmo nome e extensão usados para gerar a assinatura. Se o nome ou extensão forem diferentes, o upload será recusado.
Exemplo com cURL
curl --request POST \
--url "https://upload.lazydata.com.br/enrichment" \
--header "X-LazyData-Upload-Signature: <assinatura_de_upload>" \
--form "file=@./base-clientes.csv"
Exemplo com JavaScript
const formData = new FormData();
formData.append("file", file, file.name);
const response = await fetch("https://upload.lazydata.com.br/enrichment", {
method: "POST",
headers: {
"X-LazyData-Upload-Signature": uploadSignature
},
body: formData
});
const data = await response.json();
console.log(data);
Não defina manualmente o header
Content-Type ao usar FormData no navegador. O próprio navegador adiciona o boundary correto do multipart/form-data.Formatos aceitos
| Extensão | Content types aceitos |
|---|---|
csv | text/csv, application/csv, text/plain, application/vnd.ms-excel, application/octet-stream |
xls | application/vnd.ms-excel, application/octet-stream, application/x-ole-storage |
xlsx | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/octet-stream |
Limites
| Item | Regra |
|---|---|
| Tamanho máximo | Até 1024 MB. |
| Campo do arquivo | Deve ser file. |
| Assinatura | Deve estar ativa e corresponder ao enriquecimento. |
| Nome do arquivo | Deve ser o mesmo usado na preparação do upload. |
| Extensão | Deve ser csv, xls ou xlsx. |
Respostas
{
"code": 202,
"message": "Arquivo recebido. O processamento foi iniciado.",
"result": {
"id": "9fcb573b-7f62-4774-978b-07e89dfef5f2",
"type": "pf",
"name": "Base de clientes",
"status": "validating_file",
"status_label": "Validando arquivo",
"file": {
"id": null,
"signature": null,
"name": "base-clientes.csv",
"extension": "csv",
"content_type": "text/csv",
"size": 24576,
"storage_key": null,
"uploaded_at": null,
"total_rows": null
},
"progress": {
"stage": "validating_file",
"stage_label": "Arquivo recebido. Preparando análise...",
"percent": 50,
"uploaded_bytes": 24576,
"total_bytes": 24576,
"total_rows": 0,
"processed_rows": 0,
"enriched_documents": 0,
"invalid_documents": 0,
"not_found_documents": 0,
"failed_rows": 0
}
}
}
{
"code": 400,
"message": "Formato de arquivo não permitido para este upload."
}
{
"code": 401,
"message": "Assinatura de upload ausente ou inválida."
}
{
"code": 404,
"message": "Enriquecimento não localizado."
}
{
"code": 409,
"message": "O arquivo deste enriquecimento já foi enviado."
}
{
"code": 413,
"message": "O arquivo deve ter no máximo 1 GB."
}
Estrutura da resposta 202
integer
required
Código da resposta.
202 indica que o arquivo foi recebido e a validação/análise foi iniciada.string
required
Mensagem descritiva da etapa iniciada.
object
required
Dados atuais do enriquecimento após o recebimento do arquivo.
Estrutura de result
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Identificador do enriquecimento. |
type | string | Tipo do enriquecimento: pf ou pj. |
name | string | Nome definido para o enriquecimento. |
status | string | Status atual do enriquecimento. |
status_label | string | Nome amigável do status, quando disponível. |
file | object | Metadados do arquivo enviado. |
progress | object | Andamento da recepção e análise do arquivo. |
Estrutura de result.file
| Campo | Tipo | Descrição |
|---|---|---|
id | string/null | Identificador definitivo do arquivo após validação e envio para storage. |
signature | string/null | Assinatura interna do arquivo após validação, quando disponível. |
name | string | Nome do arquivo. |
extension | string | Extensão do arquivo. |
content_type | string | Tipo MIME detectado ou informado. |
size | integer | Tamanho do arquivo em bytes. |
storage_key | string/null | Chave de armazenamento após envio definitivo para storage. |
uploaded_at | string/null | Data de upload definitivo após validação, em ISO 8601. |
total_rows | integer/null | Total de linhas de dados identificado após análise. |
Estrutura de result.progress
| Campo | Tipo | Descrição |
|---|---|---|
stage | string | Etapa atual do processamento. |
stage_label | string | Descrição amigável da etapa atual. |
percent | integer | Percentual aproximado de andamento. |
uploaded_bytes | integer | Bytes recebidos. |
total_bytes | integer | Tamanho total recebido ou estimado. |
total_rows | integer | Total de linhas identificado após análise do arquivo. |
processed_rows | integer | Registros processados durante a execução do enriquecimento. |
enriched_documents | integer | Registros enriquecidos com sucesso durante a execução. |
invalid_documents | integer | Registros inválidos identificados durante a execução. |
not_found_documents | integer | Registros sem retorno encontrado durante a execução. |
failed_rows | integer | Registros que falharam durante a execução. |
Status comuns após upload
| Status | Descrição |
|---|---|
validating_file | Arquivo recebido e validação inicial em andamento. |
analyzing_file | Arquivo validado e amostra em análise. |
uploading_storage | Arquivo validado e sendo salvo no storage. |
waiting_configuration | Arquivo pronto para mapeamento e configuração do enriquecimento. |
failed | O arquivo falhou na validação ou análise. |
Erros comuns
| Status HTTP | Motivo |
|---|---|
400 | Arquivo vazio, nome divergente, extensão inválida ou tipo de conteúdo não permitido. |
401 | Assinatura ausente, inválida ou expirada. |
404 | Enriquecimento vinculado à assinatura não foi localizado. |
409 | O enriquecimento não está disponível para upload ou já recebeu arquivo. |
413 | Arquivo acima do limite permitido. |
500 | Falha inesperada ao processar o upload. |
Regras importantes
- Use sempre
https://upload.lazydata.com.br/enrichment. - A assinatura é temporária e deve ser usada apenas uma vez.
- O upload deve ser feito com
multipart/form-data. - O campo do arquivo deve se chamar
file. - O nome e a extensão do arquivo precisam ser iguais aos informados na etapa de assinatura.
- O retorno
202não significa que o enriquecimento já está pronto para execução; significa que o arquivo foi recebido e a análise começou. - Após o upload, acompanhe o status do enriquecimento para aguardar a análise do arquivo e seguir para a configuração.
⌘I

