Skip to content

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

PropriedadeTipoDescrição
contractFileIdID!ID do arquivo do contrato que será baixado.
RetornoString!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_listContractAttachments para obter os contractFileId dos anexos.
  • O arquivo será baixado no formato original em que foi enviado (geralmente PDF).