Listar cotações
GET
https://api.precificador3d.com.br/v1/cotacoes Escopo: cotacoes:ler. Traz nome e contato do cliente (dado pessoal: guarde só o necessário).
cURL
curl "https://api.precificador3d.com.br/v1/cotacoes?limite=25" \
-H "Authorization: Bearer $PC3D_CHAVE" JavaScript
const resposta = await fetch('https://api.precificador3d.com.br/v1/cotacoes?limite=25', {
headers: {
Authorization: `Bearer ${process.env.PC3D_CHAVE}`,
},
});
if (!resposta.ok) {
const erro = await resposta.json(); // application/problem+json
throw new Error(`${erro.codigo}: ${erro.detail} (${erro.requisicao_id})`);
}
const dados = await resposta.json(); Python
import os
import requests
resposta = requests.get(
"https://api.precificador3d.com.br/v1/cotacoes",
params={
"limite": 25,
},
headers={
"Authorization": f"Bearer {os.environ['PC3D_CHAVE']}",
},
timeout=10,
)
resposta.raise_for_status()
dados = resposta.json() Parâmetros de consulta
limiteinteger- Itens por página, de 1 a 100. Acima de 25 conta como operação cara. (de 1 a 100; padrão 25)
cursorstring- Valor de
proximo_cursorda página anterior. Opaco. (até 200 caracteres) ordemstring- Ordenação.
-na frente = decrescente. (padrão "-atualizado_em") Valores:atualizado_em,-atualizado_em,criado_em,-criado_em. atualizado_desdestring (date-time)- Só o que mudou a partir deste instante. Use com
ordem=atualizado_empara reconciliar depois de webhooks. statusstring- Valores:
rascunho,enviada,aprovada,recusada,em_analise,arquivado. criado_desdestring (date-time)
Cabeçalhos
If-None-Matchstring- ETag recebida antes. Se nada mudou, a resposta é
304e não gasta a cota mensal. (até 100 caracteres)
Resposta 200
Página de cotações.
Campos da resposta (38)
dadosarray de Cotacao- (0 a 100 itens)
dados[].idstring (uuid)dados[].codigostringdados[].titulostringdados[].statusstring- Valores:
rascunho,enviada,aprovada,recusada,em_analise,arquivado. dados[].versaointegerdados[].clienteobjectdados[].cliente.nomestring | nulldados[].cliente.contatostring | nulldados[].validadestring (date) | nulldados[].condicoesstring | nulldados[].observacaostring | nulldados[].itensarray de objectdados[].itens[].idstring (uuid)dados[].itens[].nomestringdados[].itens[].skustring | nulldados[].itens[].produto_idstring (uuid) | nulldados[].itens[].variacao_idstring (uuid) | nulldados[].itens[].quantidadeintegerdados[].itens[].preco_unitario_centavosinteger- (de 0 a 100000000000)
dados[].itens[].total_centavosinteger- (de 0 a 100000000000)
dados[].itens[].corCorCliente | nulldados[].itens[].cor.idstring (uuid)dados[].itens[].cor.codigostringdados[].itens[].cor.nome_clientestringdados[].itens[].cor.acabamentostring- Valores:
nenhum,brilhante,fosco. dados[].itens[].cor_a_combinarbooleandados[].total_centavosinteger- (de 0 a 100000000000)
dados[].desconto_centavosinteger- (de 0 a 100000000000)
dados[].criado_emstring (date-time)dados[].atualizado_emstring (date-time)dados[].enviada_emstring (date-time) | nulldados[].aprovada_emstring (date-time) | nulldados[].congeladaboolean- true fora de rascunho e em_analise. Congelada, a cotação só se edita voltando para rascunho pela tela.
dados[].custo_total_centavosinteger- [custos] (de 0 a 100000000000)
dados[].lucro_centavosinteger- [custos]
dados[].margem_bpinteger- [custos] Pontos-base.
proximo_cursorstring | null- Cursor da próxima página, ou
nullno fim.
{
"dados": [
{
"id": "9e0f1a2b-3c4d-4e5f-6a7b-8c9d0e1f2a3b",
"codigo": "COT-0042",
"titulo": "Chaveiros evento Loja Exemplo",
"status": "rascunho",
"versao": 1,
"cliente": {
"nome": "Ana Lima",
"contato": "[email protected]"
},
"validade": "2026-10-31",
"condicoes": "Pagamento 50% na aprovação e 50% na entrega.",
"observacao": "Pedido pelo formulário da loja.",
"itens": [
{
"id": "d3e4f5a6-b7c8-4d9e-0f1a-2b3c4d5e6f7a",
"nome": "Chaveiro Dragão · Azul",
"sku": "CHAV-DRG-AZ",
"produto_id": "5a6b7c8d-9e0f-4a1b-2c3d-4e5f6a7b8c9d",
"variacao_id": "6b7c8d9e-0f1a-4b2c-3d4e-5f6a7b8c9d0e",
"quantidade": 200,
"preco_unitario_centavos": 1290,
"total_centavos": 258000,
"cor": null,
"cor_a_combinar": false
}
],
"total_centavos": 258000,
"desconto_centavos": 0,
"criado_em": "2026-10-03T14:00:00-03:00",
"atualizado_em": "2026-10-03T14:00:00-03:00",
"enviada_em": null,
"aprovada_em": null
}
]
} Outras respostas
- 304 Nada mudou desde a ETag informada.
- 400
dados_invalidos: Dados, filtro, cursor ou cabeçalho inválido. - 401
nao_autenticado: Chave ausente, malformada, desconhecida, revogada ou expirada (a resposta é a mesma para todos os casos). - 403
escopo_insuficiente: Escopo insuficiente, conta bloqueada, módulo desligado ou chave suspensa. - 429
limite_excedido: Limite de uso excedido (rajada, minuto, mês ou requisições simultâneas). - 500
erro_interno: Erro interno. O detalhe fica no log, ligado ao requisicao_id. - 503
indisponivel: API desligada, sob pressão (disjuntor aberto) ou no limite global da plataforma.