Fazendo download de contratos
Para fazer download de um arquivo de contrato, utilizamos a query Contract_getUrlToDownloadContractFile. Essa query recebe o ID do arquivo do contrato (contractFileId) e retorna uma URL assinada que pode ser usada para fazer o download do arquivo.
TIP
O contractFileId pode ser obtido através das propriedades file.id ou amendments[].file.id ao buscar um contrato. Para mais informações, consulte Buscando um contrato.
Importante: A URL retornada é temporária e assinada. Ela pode ser usada diretamente para fazer o download do arquivo através de uma requisição HTTP GET.
graphql
query GetUrlToDownloadContractFile($contractFileId: ID!) {
Contract_getUrlToDownloadContractFile(contractFileId: $contractFileId)
}js
async function downloadContractFile(contractFileId, fileName) {
// Obter a URL de download
const response = await fetch('https://api.linte.com/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'key': '<seu-token>'
},
body: JSON.stringify({
query: `
query GetUrlToDownloadContractFile($contractFileId: ID!) {
Contract_getUrlToDownloadContractFile(contractFileId: $contractFileId)
}
`,
variables: {
contractFileId
}
})
});
const result = await response.json();
const downloadUrl = result.data?.Contract_getUrlToDownloadContractFile;
if (!downloadUrl) {
throw new Error('Não foi possível obter a URL de download');
}
// Fazer o download do arquivo
const fileResponse = await fetch(downloadUrl);
const blob = await fileResponse.blob();
// Criar um link temporário e disparar o download
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = fileName || 'contract.pdf';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
URL.revokeObjectURL(link.href);
}
// Exemplo de uso
downloadContractFile('<id-do-arquivo-do-contrato>', 'contrato.pdf');python
import requests
from urllib.parse import urlparse
def download_contract_file(contract_file_id, file_name='contract.pdf'):
# Obter a URL de download
response = requests.post(
'https://api.linte.com/graphql',
headers={
'Content-Type': 'application/json',
'key': '<seu-token>'
},
json={
'query': '''
query GetUrlToDownloadContractFile($contractFileId: ID!) {
Contract_getUrlToDownloadContractFile(contractFileId: $contractFileId)
}
''',
'variables': {
'contractFileId': contract_file_id
}
}
)
result = response.json()
download_url = result.get('data', {}).get('Contract_getUrlToDownloadContractFile')
if not download_url:
raise Exception('Não foi possível obter a URL de download')
# Fazer o download do arquivo
file_response = requests.get(download_url)
# Salvar o arquivo
with open(file_name, 'wb') as f:
f.write(file_response.content)
print(f'Arquivo salvo como {file_name}')
if __name__ == '__main__':
download_contract_file('<id-do-arquivo-do-contrato>', 'contrato.pdf')Exemplo completo: Buscar contrato e fazer download
Aqui está um exemplo completo de como buscar um contrato e fazer download do arquivo principal:
js
async function getContractAndDownload(contractId) {
// Primeiro, buscar o contrato para obter o contractFileId
const contractResponse = await fetch('https://core-api.linte.com/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'key': '<seu-token>'
},
body: JSON.stringify({
query: `
query GetContractById($id: ID!) {
Contract_getContractById(id: $id) {
id
slug
file {
id
fileName
fileExtension
}
}
}
`,
variables: {
id: contractId
}
})
});
const contractResult = await contractResponse.json();
const contract = contractResult.data?.Contract_getContractById;
if (!contract || !contract.file) {
throw new Error('Contrato não encontrado ou sem arquivo');
}
const contractFileId = contract.file.id;
const fileName = contract.file.fileName || `contrato.${contract.file.fileExtension}`;
// Agora fazer o download usando o contractFileId
await downloadContractFile(contractFileId, fileName);
}
// Função auxiliar para download
async function downloadContractFile(contractFileId, fileName) {
const response = await fetch('https://api.linte.com/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'key': '<seu-token>'
},
body: JSON.stringify({
query: `
query GetUrlToDownloadContractFile($contractFileId: ID!) {
Contract_getUrlToDownloadContractFile(contractFileId: $contractFileId)
}
`,
variables: {
contractFileId
}
})
});
const result = await response.json();
const downloadUrl = result.data?.Contract_getUrlToDownloadContractFile;
if (!downloadUrl) {
throw new Error('Não foi possível obter a URL de download');
}
const fileResponse = await fetch(downloadUrl);
const blob = await fileResponse.blob();
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
URL.revokeObjectURL(link.href);
}
// Exemplo de uso
getContractAndDownload('<id-do-contrato>');python
import requests
def get_contract_and_download(contract_id):
# Primeiro, buscar o contrato para obter o contractFileId
contract_response = requests.post(
'https://api.linte.com/graphql',
headers={
'Content-Type': 'application/json',
'key': '<seu-token>'
},
json={
'query': '''
query GetContractById($id: ID!) {
Contract_getContractById(id: $id) {
id
slug
file {
id
fileName
fileExtension
}
}
}
''',
'variables': {
'id': contract_id
}
}
)
contract_result = contract_response.json()
contract = contract_result.get('data', {}).get('Contract_getContractById')
if not contract or not contract.get('file'):
raise Exception('Contrato não encontrado ou sem arquivo')
contract_file_id = contract['file']['id']
file_name = contract['file'].get('fileName') or f"contrato.{contract['file']['fileExtension']}"
# Agora fazer o download usando o contractFileId
download_contract_file(contract_file_id, file_name)
def download_contract_file(contract_file_id, file_name='contract.pdf'):
response = requests.post(
'https://api.linte.com/graphql',
headers={
'Content-Type': 'application/json',
'key': '<seu-token>'
},
json={
'query': '''
query GetUrlToDownloadContractFile($contractFileId: ID!) {
Contract_getUrlToDownloadContractFile(contractFileId: $contractFileId)
}
''',
'variables': {
'contractFileId': contract_file_id
}
}
)
result = response.json()
download_url = result.get('data', {}).get('Contract_getUrlToDownloadContractFile')
if not download_url:
raise Exception('Não foi possível obter a URL de download')
file_response = requests.get(download_url)
with open(file_name, 'wb') as f:
f.write(file_response.content)
print(f'Arquivo salvo como {file_name}')
if __name__ == '__main__':
get_contract_and_download('<id-do-contrato>')Propriedades da query
| Propriedade | Tipo | Descrição |
|---|---|---|
contractFileId | ID! | ID do arquivo do contrato que será baixado. |
| Retorno | String! | URL assinada temporária para download do arquivo. |
Observações importantes
- A URL retornada é temporária e assinada, com tempo de expiração limitado. Use-a imediatamente após obter.
- É necessário ter permissão para acessar o contrato. Apenas participantes do contrato ou administradores da organização podem fazer download.
- Para fazer download de anexos de um contrato, primeiro é necessário listar os anexos usando a query
Contract_listContractAttachmentspara obter oscontractFileIddos anexos. - O arquivo será baixado no formato original em que foi enviado (geralmente PDF).