Conectar seu sistema pela API
Crie um token em Configurações › API, escolha os escopos e leia ou grave no Prodio a partir do sistema da sua empresa.
A API do Prodio deixa o sistema da sua empresa (ERP, loja, planilha automatizada, BI) ler e gravar os mesmos dados que você vê nas telas: produtos, insumos, fornecedores, fichas técnicas, estoque, pedidos, compras, produção e notas. O endereço é https://api.prodio.com.br/v1, as respostas são JSON em português e o acesso é por um token da empresa, criado em Configurações › API. A referência completa de rotas e campos está em prodio.com.br/api.
Quando usar
- Quando um sistema precisa dos dados sem alguém abrir o Prodio: puxar o cadastro de produtos para a loja, mandar o saldo de estoque para o ERP, montar um painel com os apontamentos do dia.
- Quando o cadastro nasce em outro lugar e você não quer digitar duas vezes: o outro sistema cria e atualiza produtos, insumos e fornecedores em lote.
- Quando a sua loja ou o seu ERP é um dos hubs que o Prodio já conhece (BaseLinker, Bling, Tiny, Kamino), use o conector: ele já traz os pedidos, recebe a produção bipada e busca as NF-e. A API é para o que o conector não cobre ou para um sistema próprio.
- A API é servidor a servidor. Ela não aceita chamadas feitas direto do navegador (sem CORS), de propósito: o token nunca deve chegar ao computador de um cliente.
Criar o token
Só um administrador da empresa cria, vê e revoga tokens; a tela não aparece para os outros papéis.

- Abra Configurações no menu e escolha API (endereço /configuracoes/api).
- Clique em Novo token e dê um nome que diga qual sistema vai usá-lo (por exemplo, "ERP da loja" ou "Painel de produção").
- Marque os escopos: para cada recurso, Nenhum, Ler ou Ler e escrever. Os botões de preset ("Só leitura", "Cadastros", "Estoque e compras") preenchem os casos comuns; Custos é uma chave à parte, só de leitura.
- Escolha a validade: 30, 90 ou 365 dias (o padrão) ou sem validade. Prefira uma validade: trocar o token de tempos em tempos é a proteção mais barata que existe.
- Clique em Criar. O token aparece uma única vez, numa janela com o botão Copiar. Guarde-o agora no cofre de segredos do outro sistema: o Prodio não mostra o token de novo, nem para você.
Depois disso a lista mostra só o começo do token (prodio_live_ e os oito caracteres seguintes), quem criou, quando, o último uso, a validade e a situação (ativo, vencido, revogado ou sem dono). O token tem 55 caracteres e sempre começa com prodio_live_. Cada empresa pode ter até 10 tokens ativos.
Escopos
O escopo diz o que o token pode fazer. Cada rota exige um; chamar uma rota sem o escopo certo devolve 403 escopo_insuficiente.
produtos,insumos,fornecedores,fichas,estoque,compraseproducaotêm:lere:escrever. Escrever inclui ler do mesmo recurso:produtos:escreverjá lê produtos.pedidosenotassó têm:ler: pedidos nascem nos hubs e as notas chegam por e-mail ou pelo conector.custos:leré separado e libera os campos em reais (custo_medio,custo_ficha,valor,preco…). Sem ele, esses campos vêmnull, e o resto da resposta continua igual. Uma integração de loja não precisa ver o custo da ficha.GET /v1/eueGET /v1/locaisfuncionam com qualquer token: use-os para confirmar que o token está certo e descobrir a empresa, o fuso e os escopos que ele tem.
Peça só os escopos que o sistema usa. Se depois ele precisar de mais, crie outro token: os escopos de um token não mudam depois de criado.
Primeiro teste
Troque prodio_live_SEU_TOKEN pelo token copiado e rode no terminal:
curl -sS https://api.prodio.com.br/v1/eu -H "Authorization: Bearer prodio_live_SEU_TOKEN"
curl -sS "https://api.prodio.com.br/v1/produtos?limite=50&atualizado_desde=2026-10-01T00:00:00-03:00" -H "Authorization: Bearer prodio_live_SEU_TOKEN"
A primeira chamada devolve a empresa e o próprio token (nome, prefixo, escopos, validade e limites). A segunda lista os produtos alterados desde 1º de outubro, no fuso de Brasília. Se a primeira funcionar e a segunda devolver 403, o token não tem produtos:ler.
O token vai sempre no cabeçalho Authorization: Bearer …. Na URL ele é recusado (400 token_na_url), para não parar em log nem em histórico de navegador. Toda resposta traz um X-Request-Id: anote-o ao pedir suporte.
Paginação e sincronização
Toda lista devolve { "dados": [ … ], "proximo_cursor": "…" }.
limite: quantas linhas por página, padrão 50, máximo 200.proximo_cursor: para a página seguinte, repita exatamente esse valor no parâmetrocursor. Quando viernull, acabou. O cursor é opaco: não monte nem edite um à mão (400cursor_invalido).- A ordem é estável e crescente por
atualizado_em(criado_emnos movimentos de estoque, o instanteemnos apontamentos), com desempate porid. O cursor marca o ponto exato onde a página anterior parou, então a página seguinte nunca pula uma linha. Uma linha alterada no meio do percurso ganha umatualizado_emnovo e pode voltar numa página mais à frente: trate-a como atualização (grave porid), nunca como registro novo.
Para manter o outro sistema sincronizado sem baixar tudo todo dia:
- Na primeira carga, percorra a lista inteira seguindo o
proximo_cursor. - Guarde o maior
atualizado_emque você viu. - Nas cargas seguintes, chame com
atualizado_desde=esse instante. O filtro é inclusivo (a partir do instante, inclusive), então a última linha da carga anterior volta: trate-a como atualização, não como novidade. - Mande o instante com fuso (
2026-10-01T00:00:00-03:00ou…Z). Sem fuso a API recusa com 400parametro_invalido, porque "meia-noite" sem fuso é ambígua. As respostas sempre vêm em UTC (+00:00). - Nos cadastros,
incluir_excluidos=truetraz também o que foi excluído, comexcluido_empreenchido, para o outro sistema apagar do lado dele.
Há uma janela de 30 segundos: a lista só devolve linhas alteradas há mais de meio minuto. Isso garante que uma gravação longa nunca fique para trás. Uma alteração feita agora aparece na API em até 30 segundos.
Idempotência
Rede cai, servidor demora, o seu sistema tenta de novo. Para a repetição não criar um movimento de estoque duas vezes, as escritas usam o cabeçalho Idempotency-Key:
- Mande uma chave sua, única por operação (1 a 100 caracteres: letras, números,
_,.,:e-). O id do registro no seu sistema costuma servir. - Ela é obrigatória ao criar movimento de estoque e ordem de compra, e opcional nos lotes de cadastro, nos
PUT(ficha técnica e plano do dia), no estorno e no cancelamento. - Repetir a mesma chave com o mesmo corpo devolve a mesma resposta de antes, com
Idempotency-Replayed: true, sem gravar de novo. A ordem das chaves do JSON e os espaços não importam. - A mesma chave com um corpo diferente é recusada com 409
chave_idempotencia_reutilizada. - A chave vale por 24 horas, por token.
Lotes (POST …/lote) aceitam até 100 itens por chamada e respondem item a item: { "resultados": [ { "sku": "CAM-AZUL-M", "ok": true, "id": "…" }, { "sku": "CAM-AZUL-G", "ok": false, "erro": "NCM inválido." } ] }. O HTTP é 200 mesmo com item recusado; confira o ok de cada um.
Limites
- 120 chamadas por minuto por token e 300 por minuto por empresa, somando todos os tokens dela.
- Toda resposta autenticada traz
X-RateLimit-Limit,X-RateLimit-RemainingeX-RateLimit-Reset(instante Unix, em segundos, em que a janela zera). - Passou do limite: 429
limite_excedidocomRetry-Afterem segundos. Espere esse tempo e repita; não repita antes. - Corpo das escritas:
Content-Type: application/json, até 256 KB. - Para carregar muita coisa, use páginas de 200 e lotes de 100: são bem menos chamadas do que uma por registro.
Erros comuns
Todo erro vem como { "erro": { "codigo": "…", "mensagem": "…", "campo": "…", "id_requisicao": "…" } }, em português. O codigo é estável; a mensagem é para ler.
- 401
token_ausenteoutoken_invalido. O cabeçalhoAuthorization: Bearernão foi (token_ausente) ou o token não tem o formato do Prodio (token_invalido): faltou ou sobrou caractere, ou é um token de outro sistema. Espaço, tabulação ou quebra de linha nas pontas ebearerem minúsculas são tolerados; o problema está no token em si. Confira o token copiado inteiro (55 caracteres, começando comprodio_live_). - 401
token_vencidooutoken_revogado. O token passou da validade ou alguém o revogou em Configurações › API. Crie um novo e troque no outro sistema. - 403
escopo_insuficiente. A rota pede um escopo que o token não tem. Veja o escopo da rota na referência e crie um token com ele. - 403
token_sem_dono. Quem criou o token deixou de ser admin da empresa; o token morreu junto. Um admin atual cria outro. - 403
empresa_suspensa. A assinatura da empresa está suspensa; a API recusa até regularizar. - 400
parametro_invalido. Um filtro veio errado;campodiz qual. O caso mais comum é instante sem fuso ematualizado_desde. - 400
cursor_invalido. Ocursorfoi montado ou editado à mão. Repita oproximo_cursorexatamente como veio. - 404
nao_encontrado. O id não existe para a sua empresa. A API responde o mesmo para id de outra empresa, de propósito. - 409
chave_idempotencia_reutilizada. A mesmaIdempotency-Keyjá foi usada com outro corpo. Use uma chave nova para uma operação nova. - 413
corpo_grande_demaisou 415tipo_nao_suportado. Corpo acima de 256 KB ou semContent-Type: application/json. - 422
validacao. Um campo está inválido ou é desconhecido;campoaponta onde (por exemplo,itens[2].qtd). Nos lotes, o item recusado volta comok: falsee o motivo emerro, sem derrubar o resto. - 429
limite_excedido. Espere oRetry-Aftere repita. - 500
erro_internoou 503banco_indisponivel. Repita com espera crescente (1 s, 2 s, 4 s…) e a mesmaIdempotency-Key. Se persistir, mande oid_requisicaoao suporte.
Segurança
- Guarde o token num cofre de segredos (variável de ambiente, gerenciador de segredos do servidor). Nunca em repositório, planilha, log, URL ou mensagem. Se ele vazou, revogue na hora e crie outro.
- Um token por sistema. Assim você revoga a loja sem derrubar o ERP, e o "último uso" da lista diz quem está chamando.
- Peça só os escopos necessários e dê uma validade. Um token só de leitura não grava nada, mesmo que vaze.
- Revogue em Configurações › API quando o sistema sair do ar ou trocar de fornecedor. Revogar é imediato e não tem volta; a chamada seguinte recebe 401
token_revogado. - O token morre com quem o criou. Se a pessoa que criou o token deixar de ser administradora da empresa, o token para de valer (403
token_sem_dono). Antes de remover um admin, veja na lista quais tokens são dele e crie os substitutos com outro admin. - O Prodio guarda só uma impressão digital do token, não o token. Por isso ele não consegue mostrá-lo de novo, nem o suporte. Nunca mande o token no suporte: o time não precisa dele.
Veja também
- Referência da API: rotas, parâmetros, campos e exemplos, com a especificação OpenAPI para baixar.
- Conectores: BaseLinker, Bling, Tiny e Kamino sem precisar de código.
- Usuários: papéis e quem é administrador.