| Método | URL |
|---|---|
https://BASE_URL/public/v1/recebiveis/lotes/{idOperacao}/lastros/avulsos/chave/{chave} |
Anexa um documento aos títulos cujo lastro já existe e foi identificado pela chave livre que você informou em lastro.chave ao criar os títulos (ver Adicionar Títulos).
Resolve o caso em que os documentos do lastro só ficam prontos depois da cessão — a nota fiscal, o contrato assinado, o termo de utilização, o canhoto digitalizado. Você cria os títulos informando uma chave da sua própria origem e, quando cada arquivo existir, envia-o com a mesma chave, sem precisar conhecer o identificador interno do lastro na plataforma.
Cada chamada acrescenta um documento. Uma mesma chave pode receber, em chamadas separadas, a nota fiscal, o contrato mestre e o termo de utilização — um não substitui o outro. Use tipoDocumento para dizer o que está sendo enviado.
Títulos sem chave ou um título específico
Esta rota envia o documento para todos os títulos da chave. Para escolher os títulos pelo id — títulos criados sem lastro.chave (CNAB, XML, tela) ou uma única parcela da nota —, use Anexar Documento a Títulos. Para consultar, baixar ou desvincular o que foi enviado, veja a seção Documentos do Título.
Diferença para Anexar Lastros Avulsos
Em /lastros/avulsos/nfe você envia XML de NF-e, o conteúdo é interpretado pela plataforma e o vínculo com o título acontece de forma assíncrona, casando pela chave de acesso da nota.
Aqui o lastro já existe e o arquivo é apenas anexado, de forma síncrona: o conteúdo não é interpretado. Por isso aceita qualquer documento, inclusive os que não possuem chave de acesso fiscal — contrato, termo, nota promissória, imagem de canhoto.
Path Params¶
| Campo | Tipo | Descrição |
|---|---|---|
idOperacao | Número | Identificador da operação, fornecido pela VeHub. A busca pelo lastro é limitada a esta operação. |
chave | Texto | Chave livre do lastro — exatamente a mesma enviada em lastro.chave na criação dos títulos. |
Query Params¶
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
tipoDocumento | Texto | Não | Tipo do documento enviado, pelo nome (maiúsculas e minúsculas indiferentes). Ver a tabela abaixo. |
tipoDocumento | Onde o arquivo é gravado |
|---|---|
NFSE, NFE, CTE, DuplicataMercantil | Documento fiscal: no lastro principal do título. Um novo envio com arquivo diferente substitui o anterior. |
Contrato (contrato mestre), TermoUtilizacao, CCB, NC, Nsu | Documento adicional do título. Cada tipo e cada arquivo diferente viram um documento a mais. |
| (não informado) | No lastro principal, se ele ainda não tiver arquivo; senão, como documento adicional. |
Request Body¶
A requisição deve ser enviada como multipart/form-data.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
arquivo | Arquivo | Sim | Arquivo a ser anexado. Um único arquivo por chamada. |
curl -X POST "https://BASE_URL/public/v1/recebiveis/lotes/23/lastros/avulsos/chave/NF-4231?tipoDocumento=NFSE" -H "Authorization: Bearer {token}" -H "GrupoEconomico: {grupo}" -F "arquivo=@/caminho/para/nota-4231.pdf"
curl -X POST "https://BASE_URL/public/v1/recebiveis/lotes/23/lastros/avulsos/chave/NF-4231?tipoDocumento=Contrato" -H "Authorization: Bearer {token}" -H "GrupoEconomico: {grupo}" -F "arquivo=@/caminho/para/contrato-mestre.pdf"
curl -X POST "https://BASE_URL/public/v1/recebiveis/lotes/23/lastros/avulsos/chave/NF-4231?tipoDocumento=TermoUtilizacao" -H "Authorization: Bearer {token}" -H "GrupoEconomico: {grupo}" -F "arquivo=@/caminho/para/termo-utilizacao.pdf"
{
"status": "sucesso",
"mensagem": "Documento anexado ao lastro.",
"idLastro": 98231,
"principal": false,
"reaproveitado": false,
"idsTitulos": [551203, 551204]
}
{
"status": "sucesso",
"mensagem": "Documento já existente vinculado ao título.",
"idLastro": 98231,
"principal": false,
"reaproveitado": true,
"idsTitulos": [551377]
}
Erros¶
O mesmo arquivo reenviado para o mesmo título retorna HTTP 409 Conflict. Os demais erros retornam HTTP 400 Bad Request. Todos com o envelope RetornoPadrao.
Validação da requisição
Um tipoDocumento com nome fora da lista acima — e, na variante base64, o corpo sem nomeArquivo ou conteudoBase64, ou com nomeArquivo acima de 255 caracteres — é recusado antes de chegar à regra de anexo: a resposta é 400 Bad Request no formato ProblemDetails, descrito em Primeiros Passos. Um tipoDocumento enviado como número que não corresponde a nenhum tipo é recusado no envelope RetornoPadrao, com a mensagem Tipo de documento inválido e a lista dos valores aceitos, sem upload.
{
"status": "erro",
"mensagem": "O arquivo 'contrato-mestre.pdf' já está anexado ao(s) título(s) 551203, 551204."
}
{
"status": "erro",
"mensagem": "Nenhum lastro encontrado para a chave informada"
}
{
"status": "erro",
"mensagem": "Nenhum lastro foi enviado"
}
{
"status": "erro",
"mensagem": "Não foi possível identificar a operação 23."
}
{
"status": "erro",
"mensagem": "Documento fiscal só pode ser anexado de uma vez a títulos que compartilham o mesmo lastro principal."
}
Variante com o arquivo em base64¶
Para integrar sem multipart/form-data, envie o arquivo em base64 no corpo JSON. A regra e as respostas (200, 400 e 409) são as mesmas da rota acima.
| Método | URL |
|---|---|
https://BASE_URL/public/v1/recebiveis/lotes/{idOperacao}/lastros/avulsos/chave/{chave}/base64 |
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
nomeArquivo | Texto | Sim | Nome do arquivo, com a extensão (até 255 caracteres). |
conteudoBase64 | Texto | Sim | Conteúdo do arquivo codificado em base64. |
tipoDocumento | Texto | Não | Mesmos valores do parâmetro tipoDocumento da rota multipart (NFSE, Contrato, TermoUtilizacao...). |
{
"nomeArquivo": "contrato-mestre.pdf",
"conteudoBase64": "JVBERi0xLjQKJ...",
"tipoDocumento": "Contrato"
}
{
"status": "erro",
"mensagem": "O conteúdo do arquivo 'contrato-mestre.pdf' não é um base64 válido."
}
{
"status": "erro",
"mensagem": "O conteúdo do arquivo 'contrato-mestre.pdf' está vazio."
}
Modelo de dados¶
Retorno¶
| Campo | Tipo | Descrição |
|---|---|---|
status | Texto | Status do processamento. |
mensagem | Texto | Mensagem retornada pela API. |
idLastro | Número | Lastro que recebeu o arquivo (documento fiscal) ou que foi vinculado aos títulos (documento adicional). Só no sucesso. |
principal | Booleano | true quando o arquivo foi gravado no lastro principal (documento fiscal). |
reaproveitado | Booleano | true quando o mesmo arquivo já existia em outro título da operação e foi apenas vinculado, sem novo envio. |
idsTitulos | Lista de números | Títulos que passaram a ter o documento. |
Observações¶
- A chave precisa existir antes: o endpoint não cria lastro. Se nenhum título daquela operação tiver lastro com a chave informada, a resposta é
400comNenhum lastro encontrado para a chave informada— e nada é gravado. Crie os títulos comlastro.chaveprimeiro. - Todos os títulos da chave recebem o documento: as parcelas de uma mesma nota compartilham o lastro e a chave, e todas passam a ter o documento enviado.
- Use uma chave única por nota: recomendamos enviar em
lastro.chaveo mesmo sequencial usado emnumeroControleParticipante. Chaves repetidas em criações diferentes geram lastros diferentes, e o documento vai para os títulos de todos eles. - Escopo por operação: a busca considera apenas títulos da operação da rota, dentro do grupo econômico autenticado. Uma chave que existe em outra operação não é encontrada aqui.
- Sem interpretação do conteúdo: o arquivo não é parseado nem validado. Nada é extraído dele — número, série, valor e datas do lastro permanecem como foram informados na criação dos títulos.
- Mesmo arquivo, mesmo título: reenviar um arquivo idêntico (mesmo conteúdo, qualquer nome) para um título que já o tem retorna
409e nada é gravado. Se só parte dos títulos da chave já tiver o arquivo, a chamada inteira é recusada. - Contrato mestre compartilhado: o mesmo arquivo enviado para a chave de outro título da operação não é recusado — o documento que já existe é vinculado ao novo título (
reaproveitado: true). - Documento fiscal substitui: um novo envio com
tipoDocumentofiscal e conteúdo diferente substitui o arquivo do lastro principal. Documentos adicionais nunca substituem uns aos outros. - Espaços são aparados: a chave na URL é comparada sem os espaços em volta, do mesmo modo que na criação dos títulos.
- Nome do arquivo: só o nome é usado — um caminho enviado junto é descartado (
../pasta/contrato.pdfé gravado comocontrato.pdf). Nome que fica vazio é recusado com400eInforme o nome do arquivo, com a extensão.