Leia e grave os dados da sua fábrica 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. O endereço é https://api.prodio.com.br/v1, as respostas são JSON UTF-8 em português e o acesso é por um token da empresa, criado em Configurações › API por um administrador.
Versão. A versão 1.0.0 deste documento acompanha a rota /v1. Mudança aditiva (campo novo, rota nova, valor novo num enum) não muda a versão da API: ignore os campos que não conhece. Quebra de compatibilidade vira /v2.
Autenticação. Cabeçalho Authorization: Bearer prodio_live_… (token de 55 caracteres). Token na URL é recusado com 400 token_na_url. Cada rota exige o escopo indicado em x-prodio-escopo (qualquer = qualquer token); :escrever inclui :ler do mesmo recurso. custos:ler libera os campos em reais; sem ele eles vêm null e o resto da resposta continua igual.
Limites. 120 chamadas por minuto por token e 300 por minuto por empresa, em janela fixa de 1 minuto. Acima disso 429 limite_excedido com Retry-After (segundos). Toda resposta autenticada traz X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset (instante Unix em segundos). Toda resposta traz X-Request-Id: cite-o ao pedir suporte.
Paginação e leitura incremental. Toda lista devolve { "dados": [ … ], "proximo_cursor": "…" }. limite padrão 50, máximo 200; ordem estável crescente por atualizado_em (ou criado_em nos movimentos) com desempate por id. Repita exatamente o proximo_cursor recebido no parâmetro cursor; null = acabou; cursor adulterado → 400 cursor_invalido. atualizado_desde e desde são inclusivos (a última linha da carga anterior volta: trate-a como atualização). Há uma janela de estabilização de 30 segundos: a lista só devolve linhas alteradas há mais de meio minuto, para uma gravação longa nunca ficar para trás. GET …/{id} não tem janela.
Datas e instantes. Datas AAAA-MM-DD. A API devolve instantes em UTC (2026-10-03T17:05:00+00:00). Nos filtros você pode enviar com qualquer fuso (-03:00, Z, frações de segundo); sem fuso → 400 parametro_invalido. Na query string, o sinal + de um fuso positivo tem de ir codificado como %2B (atualizado_desde=2026-10-01T05:30:00%2B02:00): + cru chega como espaço e a API recusa com 400.
Erros. Sempre JSON { "erro": { "codigo", "mensagem", "campo"?, "id_requisicao" } }, em português, com código estável em snake_case (esquema Erro). Além dos documentados em cada operação: 405 metodo_nao_permitido (com Allow), 413 corpo_grande_demais, 415 tipo_nao_suportado, 409 conflito/chave_idempotencia_reutilizada, 422 validacao, 500 erro_interno e 503 banco_indisponivel (repita com espera exponencial).
CORS fechado. A API é servidor-a-servidor: nenhuma resposta traz Access-Control-*; não a chame do navegador. Guarde o token num cofre de segredos, um token por sistema, e revogue em Configurações › API quando o sistema sair do ar. Quem criou o token deixou de ser admin da empresa → 403 token_sem_dono.