Prefixo das rotas: /api/…
· Métodos: GET e POST apenas (não há DELETE/PUT)
· JSON em request e response
· Headers: Accept: application/json
· POST: Content-Type: application/json
Sessão no navegador:
cookie de login; POSTs exigem
X-CSRF-Token quando não houver Bearer.
Erros no formato {"error":"…"} (opcionalmente message).
Em GET clientes, dados pessoais seguem máscara LGPD conforme o perfil (token Bearer usa visão de integração).
Códigos HTTP
Código
Significado
200
Aceito — requisição OK (GET e POST bem-sucedidos retornam JSON com os dados; muitos POSTs incluem ok: true)
Cadastra veículo vinculado ao cliente. Obrigatórios: cliente_id e placa. Opcionais: modelo, marca, cor, motor, km_inicial, ano. Se o cliente estiver no carrinho do PDV, o veículo novo já fica selecionado.
Montagem do atendimento: cliente, itens, descontos e cupom.
Implementation Notes
Carrinho da sessão: cart[] (com tipo_item, qtd decimal, unidade, permite_fracao e desconto por linha), totais, cupom, pagamentos, contas financeiras, formas de pagamento, naturezas, pdv_config (inclui insumos_modo, insumos_baixa_estoque, insumos_nota), alerta de sangria, plano e limites fiscais. Com pedido_id na sessão, vem também a meta do documento. Esta resposta não tem a chave ok; todas as rotas que alteram o carrinho devolvem o mesmo formato.
Diz qual documento fiscal a natureza vai gerar (nfe, nfse ou nfce) e o que falta no cadastro do cliente para emitir. generico = cliente sem CPF/CNPJ válido. Sem parâmetros válidos devolve documento: null e lista vazia (sempre HTTP 200).
HTTP:
200401
Parameters
Parameter
Value
Description
Parameter Type
Data Type
cliente_id*
{1
ID do cliente.
query
integer · {cliente_id}
natureza_id*
{1
ID da natureza de operação.
query
integer · {natureza_id}
Response Class (Status 200)
Example Value
{
"documento": "nfe",
"pendencias": ["Informe o CEP do cliente."],
"generico": false,
"editar_url": "https://…/clientes/editar?id=1"
}
Implementation Notes
Define o cliente do carrinho (null remove). Resposta: carrinho completo (formato de GET pdv/cart).
Seleciona um registro salvo de campos do cliente. registro_id é texto: id do registro, "" (nenhum) ou "novo". Resposta: carrinho completo (formato de GET pdv/cart).
Grava os campos_extras como registro do cliente. A resposta traz o carrinho mais registro_salvo e registro_id. Resposta: carrinho completo (formato de GET pdv/cart).
Adiciona item: produto_id, qtd (decimal com até 3 casas só se o produto tiver permite_fracao; senão 422), opcionais valor_unitario e tipo (tipo do documento, para validar o tipo do item: insumo não entra em Pedido). Resposta: carrinho completo (formato de GET pdv/cart).
Altera item: index; opcional qtd (mesma regra de fração), desconto/desconto_modo, nome, valor_unitario. Resposta: carrinho completo (formato de GET pdv/cart).
Analisa as regras de manutenção do veículo e devolve o que está vencido (vermelho), perto de vencer (amarelo), em dia (verde) ou sem histórico. Body: veiculo_id, opcional veiculo_km (km atual). Sem veiculo_id: itens vazio e msg. Só leitura.
Criar OS/pedido, carregar, reabrir ou duplicar documento.
Implementation Notes
Carrega pedido no carrinho (pedido_id). A resposta é o carrinho mais a meta do documento (numero_documento, label_documento, situação, faturamento, documentos[] vinculados, pode_reabrir…). Resposta: carrinho completo (formato de GET pdv/cart).
Reabre documento encerrado para edição. Exige motivo_reabrir (mínimo 5 caracteres), exceto com intencao: "faturar" (documentos concluídos com faturamento pendente). Resposta igual a carregar, com reaberto. Resposta: carrinho completo (formato de GET pdv/cart).
HTTP:
200401404419422
Parameters — body
Parameter content type: application/json
Example Value
{"pedido_id":1,"motivo_reabrir":"Cliente pediu inclusão de item"}
Copia os itens do pedido para um carrinho novo (não grava). A resposta traz duplicado_de, tipo_sugerido, observacao e motivo_entrada. Resposta: carrinho completo (formato de GET pdv/cart).
Cria um novo documento. Padrão: tipo=os (ordem de serviço). Também aceita pedido ou orcamento. Body: cliente_id, items[] (produto_id, qtd decimal se o produto permitir fração; preço/nome preenchidos do cadastro se omitidos), opcionais veiculo_id, observacao, motivo_entrada, data_inicio, data_fim, status (padrão aberto). Por padrão faturado=false (só grava). Para faturar na criação, envie faturado:true e pagamentos (como em pdv/finalizar). Requer plano com OS (para tipo os/orcamento) e permissão pdv.criar ou pdv.editar. A resposta tem o mesmo formato de pdv/finalizar.
Opções de texto para o campo infCpl da NF-e, já com a marcação padrão (Simples Nacional, IPI e ST conforme natureza e itens). Envie a seleção em pdv/finalizar no campo nfe_inf_compl; o texto livre aceita até max_texto caracteres.
HTTP:
200401
Parameters
Parameter
Value
Description
Parameter Type
Data Type
natureza_id
{1
ID da natureza de operação.
query
integer · {natureza_id}
pedido_id
{1
ID do pedido (para número e observação).
query
integer · {pedido_id}
produto_ids
{1,2
IDs dos produtos do carrinho, separados por vírgula.
query
string · {produto_ids}
Response Class (Status 200)
Example Value
{
"ok": true,
"opcoes": [
{ "id": "simples", "rotulo": "Optante pelo Simples Nacional", "texto": "DOCUMENTO EMITIDO POR ME OPTANTE PELO SIMPLES NACIONAL.", "marcado": true },
{ "id": "ipi", "rotulo": "Não gera crédito de IPI", "texto": "NAO GERA DIREITO A CREDITO FISCAL DE IPI.", "marcado": true },
{ "id": "st", "rotulo": "ICMS recolhido por substituição tributária", "texto": "IMPOSTO RECOLHIDO POR SUBSTITUICAO - ARTIGO 274 DO RICMS.", "marcado": false },
{ "id": "pedido", "rotulo": "Número do pedido/OS", "texto": "Pedido nº 120", "marcado": false },
{ "id": "observacao", "rotulo": "Observação do pedido/OS", "texto": "", "marcado": false }
],
"max_texto": 2000
}
Implementation Notes
Body: pedido_id ou pedido_ids[]; modoconclusao|cancelamento; motivo se cancelamento. Com vários ids, a resposta traz erros em vez de itens. 403 sem módulo fiscal ou sem a permissão fiscal.encerrar_sem_nota (sessão).
Usamos cookies essenciais conforme a LGPD. Abra as preferências pelo ícone ao lado para registrar o aceite —
necessário para entrar no sistema.
Personalizar preferências de consentimento
Utilizamos cookies para ajudar você a navegar com eficiência e executar certas funções. Você encontrará informações
detalhadas sobre todos os cookies sob cada categoria de consentimento abaixo.
Os cookies que são classificados com a marcação "Necessário" são armazenados em seu navegador, pois são essenciais
para possibilitar o uso de funcionalidades básicas do site.
Para mais informações, consulte a nossa
Política de Cookies
(atualizada em 28 de julho de 2026), a
Política de Privacidade
e a legislação aplicável (LGPD — Lei nº 13.709/2018).
Os cookies necessários são cruciais para as funções básicas do site e o site não funcionará como pretendido sem eles.
Esses cookies não armazenam nenhum dado pessoalmente identificável.
Cookie
Duração
Descrição
PHPSESSID
até ~6 h
Identificador de sessão HTTP (PHP). Segurança, CSRF e estado da navegação. Expira em cerca de 6 horas ou no logout — não apenas ao fechar o navegador.
oficina360_lgpd_consent
12 meses
Registro do consentimento prestado quanto à Política de Cookies (HttpOnly), conforme LGPD.
Preferências de interface em localStorage / sessionStorage,
sem transmissão automática ao servidor. Usadas na área autenticada, no PDV/venda rápida
ou no testador da API. Não substituem o aceite contratual do plano (gravado no servidor).
Não há checkbox adicional no formulário de login: o consentimento é este modal.
Chave
Duração
Descrição
mecanicarSidebarDesktop
persistente
Estado do menu lateral (expandido ou recolhido) na área autenticada.
mecanicarValoresVisiveis
persistente
Exibição ou mascaramento de valores monetários na interface.
venda_pdv_perguntar_doc
persistente
Preferência do PDV/venda rápida: se deve perguntar documento (CPF/CNPJ) ao abrir nova venda.
pdv_kiosk
aba / sessão
Modo kiosk/tela cheia do PDV nesta aba (sessionStorage); some ao fechar a aba.
api-docs-tester-history
aba / sessão
Histórico local de requisições no testador da documentação/portal da API (sessionStorage).
Cookies analíticos medem visitas, rejeição e origem de tráfego. Esta instalação
não utiliza cookies analíticos nem pixels de medição de terceiros.
Sem cookies nesta categoria. Módulos (financeiro, suporte, trial, perfis, PDV etc.) usam sessão/servidor — não criam cookies analíticos.
Cookies de desempenho medem índices técnicos da página. Esta instalação
não utiliza cookies de desempenho de terceiros.
Sem cookies nesta categoria. Não há RUM/APM baseado em cookie no navegador.
Cookies de anúncio personalizam propaganda e medem campanhas. Esta instalação
não utiliza cookies de publicidade comportamental.
Sem cookies nesta categoria. Landing, trial e área autenticada não carregam redes de anúncios.