Pular para o conteúdo principal

Propostas

Propostas comerciais, PDF e envio.

16 rotas. Todas exigem a chave de API no header Authorization, salvo quando marcadas como públicas. Abrir este módulo no Swagger.

Listar propostas por período e status​

POST /companie/offer/filterAdvanced

Filtra as propostas da empresa da chave.

  • filter usa a data do status (status_date). Com other_period, informe date_start e date_end (YYYY-MM-DD).
  • status: Todos ou um status específico.
  • opportunityId, companieUserId e personId filtram por oportunidade, usuário criador e contato. Envie os três sempre, mesmo vazios ([]): sem eles a rota devolve 500.
  • Paginação: skip (registros a pular) e take (tamanho da página). total é o total do filtro.

Corpo (application/json)

CampoTipoObrigatórioDescrição
opportunityIdnúmero[]
companieUserIdnúmero[]
personIdnúmero[]
ordercreated_at_asc · created_at_descsim
statusTodos · Aberta · Cancelada · Em Negociação · Fechada · Perdidasim
filterall · today · yesterday · this_week · last_week · this_month · last_month · last_30_days · …sim
date_startstring
date_endstring
skipnúmerosim
takenúmerosim

Respostas

StatusDescrição
200Página de propostas com produtos, histórico de status e oportunidade.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Buscar propostas por texto​

GET /companie/offer/autocomplete/find

Procura q no número, nome, WhatsApp, e-mail, documento (sem pontos e traço) e status da proposta. Ordena da mais antiga para a mais nova. Os três parâmetros são obrigatórios na prática.

Parâmetros

NomeEmTipoObrigatórioDescrição
qquerystringsimTexto a procurar.
skipquerynúmerosimRegistros a pular.
takequerynúmerosimTamanho da página.

Respostas

StatusDescrição
200Propostas encontradas.
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Detalhar proposta​

GET /companie/offer/{id}

Proposta de outra empresa ou inexistente devolve 200 com corpo null.

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLstringsim

Respostas

StatusDescrição
200Proposta com produtos e dados da empresa, ou null.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Excluir proposta​

DELETE /companie/offer/{id}

Remove a proposta com produtos, anexos e histórico de status.

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLstringsim

Respostas

StatusDescrição
200Proposta excluída.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_offer_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Criar proposta​

POST /companie/offer

Cria a proposta com status Aberta e número sequencial da empresa. O criador é o usuário da chave.

  • person_id: id do contato. Os dados person_* são uma cópia na proposta e também atualizam o contato (nome, documento, e-mail e WhatsApp).
  • person_document é obrigatório na prática (CPF/CNPJ só com dígitos, até 14).
  • Com opportunity_id, os produtos da oportunidade são copiados para a proposta (à vista, cartão, 1 parcela) e o total é calculado. A resposta traz o total anterior a essa cópia; consulte o detalhe para o valor final.
  • Endereço e observação são preenchidos depois, em PUT /companie/offer/address/{id} e PUT /companie/offer/obs/{id}.

Corpo (application/json)

CampoTipoObrigatórioDescrição
person_idnúmerosim
opportunity_idnúmero ou null
person_namestringsim
person_name_fantasystring
person_birthdata ou null
person_documentstring
person_emailstring
person_whatsappstring
person_rgstring
person_genderstring
person_civil_statusstring

Respostas

StatusDescrição
200Proposta criada.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_person_not_exist ou error_opportunity_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Editar dados pessoais da proposta​

PUT /companie/offer/personal/{id}

Atualiza os campos person_* da proposta e também o nome, documento, e-mail e WhatsApp do contato. person_whatsapp: só dígitos, com DDD (10 ou 11).

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLnúmerosimId da proposta.

Corpo (application/json)

CampoTipoObrigatórioDescrição
person_idnúmerosim
person_namestringsim
person_name_fantasystring
person_birthdata ou null
person_documentstring
person_emailstring
person_whatsappstringsim
person_rgstring
person_genderstring
person_civil_statusstring

Respostas

StatusDescrição
200Proposta atualizada.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_contract_not_exist (proposta não encontrada) ou error_person_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Editar endereço da proposta​

PUT /companie/offer/address/{id}

Atualiza o endereço na proposta e no contato. person_address_zipcode: CEP com 8 dígitos; person_address_state: UF com 2 letras.

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLstringsim

Corpo (application/json)

CampoTipoObrigatórioDescrição
person_address_zipcodestringsim
person_addressstringsim
person_address_numberstringsim
person_address_complementstring
person_address_provincestringsim
person_address_citystringsim
person_address_statestringsim

Respostas

StatusDescrição
200Proposta atualizada.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_offer_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Editar observação da proposta​

PUT /companie/offer/obs/{id}

Texto livre de até 6000 caracteres. Aparece no PDF na variável {{obs}}.

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLstringsim

Corpo (application/json)

CampoTipoObrigatórioDescrição
obsstringsim

Respostas

StatusDescrição
200Proposta atualizada.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_offer_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Alterar status da proposta​

PUT /companie/offer/status/{id}

Grava o novo status, a status_date e uma linha no histórico (offer_status).

  • Cancelada numa proposta ligada a oportunidade também marca a oportunidade como Perdida.
  • Os demais status não mexem na oportunidade.
  • financialIds é aceito, mas ignorado.

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLstringsim

Corpo (application/json)

CampoTipoObrigatórioDescrição
statusAberta · Cancelada · Em Negociação · Fechada · Perdidasim
financialIdsnúmero[]

Respostas

StatusDescrição
200Proposta atualizada.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_offer_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Listar produtos da proposta​

GET /companie/offer/product/{id}

id é o id da proposta.

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLstringsim

Respostas

StatusDescrição
200Produtos da proposta, com o cadastro do produto em product.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_offer_products_not_exist (proposta não encontrada) (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Editar produto da proposta​

PUT /companie/offer/product/{id}

id é o id do produto na proposta (offer_products.id). O total da proposta é recalculado pela soma dos produtos.

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLstringsim

Corpo (application/json)

CampoTipoObrigatórioDescrição
product_valuenúmerosim
qtdnúmerosim
valuenúmerosim
form_of_paymentcreditcard · boleto · pixsim
methodin_sight · installments · recurrencesim
qtd_installmentsnúmero ou null
totalnúmerosim

Respostas

StatusDescrição
200Produto atualizado.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_product_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Remover produto da proposta​

DELETE /companie/offer/product/{id}

id é o id do produto na proposta (offer_products.id). O total da proposta é recalculado.

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLstringsim

Respostas

StatusDescrição
200Produto removido.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_offer_products_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Adicionar produto à proposta​

POST /companie/offer/product

  • product_id: id do produto cadastrado; product_name e product_value são cópias do cadastro.
  • value: valor unitário negociado; total: valor da linha (normalmente value * qtd). O servidor não recalcula: soma o total enviado ao total da proposta.
  • method: in_sight (à vista), installments (parcelado, informe qtd_installments) ou recurrence (recorrente).
  • A resposta é a proposta atualizada, não o produto. Para pegar o id do produto, liste os produtos da proposta.

Corpo (application/json)

CampoTipoObrigatórioDescrição
offer_idnúmerosim
product_idnúmerosim
product_namestringsim
product_valuenúmerosim
qtdnúmerosim
valuenúmerosim
form_of_paymentcreditcard · boleto · pixsim
methodin_sight · installments · recurrencesim
qtd_installmentsnúmero ou null
totalnúmerosim

Respostas

StatusDescrição
200Proposta com o novo total.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_offer_not_exist ou error_product_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Baixar PDF da proposta​

GET /companie/offer/pdf/{id}

Rota pública

Não exige chave de API.

Rota pública: não exige chave. É o link enviado ao cliente.

  • Gera o PDF com o modelo de proposta da empresa (GET /companie/offer-custom). Sem modelo, devolve error_offer_custom_not_exist.
  • Enquanto a proposta está Aberta, o PDF é gerado de novo a cada chamada e o HTML fica gravado. Nos outros status, usa o HTML gravado na última geração.
  • A resposta não traz Content-Type: trate o corpo como binário (application/pdf).
  • Propostas sem oportunidade podem falhar com 500.

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLstringsim

Respostas

StatusDescrição
200PDF da proposta. (application/pdf)
400Parâmetros inválidos. (ValidationError)
409error_offer_not_exist ou error_offer_custom_not_exist (ErrorCode)
Testar no Swagger

Enviar proposta por e-mail​

GET /companie/offer/sendMail/{offerId}

GET com efeito colateral: envia um e-mail ao person_email da proposta com o PDF anexado (Proposta_<número>.pdf). Cada chamada envia de novo.

  • Usa o modelo de proposta da empresa da chave (GET /companie/offer-custom).
  • Não muda o status da proposta.
  • Propostas sem oportunidade podem falhar com 500.

Parâmetros

NomeEmTipoObrigatórioDescrição
offerIdURLstringsim

Respostas

StatusDescrição
200E-mail enviado.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_offer_not_exist ou error_offer_custom_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Consultar o modelo de proposta da empresa​

GET /companie/offer-custom

Cada empresa tem um modelo (HTML) usado no PDF e no e-mail da proposta. Devolve null se a empresa ainda não configurou o modelo (Configurações › Proposta); nesse caso PDF e e-mail falham com error_offer_custom_not_exist.

Respostas

StatusDescrição
200Modelo de proposta, ou null.
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger