Pular para o conteúdo principal

Documento do contrato

O PDF do contrato é enviado em duas etapas:

  1. Obtenha a URL de envio pela API.
  2. Envie o arquivo direto para essa URL.

Regras do documento:

  • Envie um PDF sem senha, como exige a leitura automática.
  • Com signature_method: external, envie o contrato já assinado.
  • Enquanto o contrato está em pending_submission, um novo envio substitui o anterior.
  • No envio para análise, o documento é congelado e não pode mais ser trocado.

Obter URL de envio​

Disponível em
PerfilHostPermissão exigida
Gestoramanager-apiEscrita
Consultoriaconsultant-apiCriar Contratos de Despesa

URL base de cada host: Ambientes (Hosts).

ENDPOINT
/expense_contract/fund_class/{fund_class_key}/contract/{contract_key}/document/upload_url
MÉTODO
GET

Parâmetros de caminho​

ParâmetroTipoDescrição
fund_class_keystringChave da classe de fundo (UUID).
contract_keystringChave do contrato (UUID).

Resposta​

STATUS
200

O contrato, na estrutura descrita em atributos do contrato, com o campo adicional upload_url.

Trecho da resposta
{
"contract_key": "3f2b8c1e-7d4a-4e9b-9a61-0c5d2e8f4b17",
"status": "pending_submission",
"upload_url": {
"url": "https://<link-temporario-de-envio>",
"fields": {
"key": "3f2b8c1e-7d4a-4e9b-9a61-0c5d2e8f4b17_draft",
"x-amz-algorithm": "AWS4-HMAC-SHA256",
"x-amz-credential": "<credential>",
"x-amz-date": "20261109T141000Z",
"x-amz-security-token": "<token>",
"policy": "<policy>",
"x-amz-signature": "<signature>"
}
}
}
CampoTipoDescrição
upload_url.urlstringEndereço para onde o arquivo deve ser enviado.
upload_url.fieldsobjectCampos que acompanham o arquivo. Envie todos, sem alterar nomes nem valores. Não fixe a lista de campos no seu código: o conjunto exato pode variar.

Enviar o arquivo​

Faça um POST multipart/form-data para upload_url.url:

  • Inclua todos os campos de upload_url.fields.
  • Coloque o arquivo no campo file, o último do formulário.
  • Não envie os cabeçalhos de autenticação da QI Tech: essa chamada vai direto para o armazenamento.

A URL expira em 3 minutos e aceita arquivos de até 50 MB.

import requests

upload = response_body["upload_url"]

with open("contrato_auditoria_2027.pdf", "rb") as arquivo:
resposta = requests.post(
upload["url"],
data=upload["fields"],
files={"file": arquivo},
)

resposta.raise_for_status()

Uma resposta 204 indica envio concluído. Não há chamada de confirmação: a API só verifica o documento no envio para análise. Se a URL expirar, peça outra.

Para conferir o arquivo enviado, baixe-o por download_url na consulta do contrato.

Erros​

StatuscodeQuando acontece
404ECT000005A classe de fundo não existe ou você não tem acesso a ela.
404ECT000009O contrato não existe nessa classe de fundo.
409ECT000017O contrato não está em pending_submission: o documento já foi congelado e não pode ser trocado.
409ECT000046O contrato foi criado pela QI Tech na estruturação do fundo e não aceita esta chamada.

Erros de autenticação, permissão e host: veja Erros da API.

Próximo passo​

Envio para análise: envie o contrato para a análise da QI Tech.