📘 Documentação da API SINAPI – Orçamentador V1.4

Sobre a API SINAPI-Orçamentador

A API SINAPI do Orçamentador oferece acesso estruturado e confiável aos dados de insumos, composições e preços utilizados na construção civil, baseados na Tabela SINAPI (Sistema Nacional de Pesquisa de Custos e Índices da Construção Civil). Seu objetivo é tornar essas informações facilmente integráveis a sistemas, softwares e automações profissionais.

Finalidade da API

A API foi projetada para permitir que sistemas externos consultem e utilizem os dados do Orçamentador em tempo real, possibilitando:

Público-Alvo

Esta API foi desenvolvida para atender:

Requisições

Todas as requisições exigem uma API Key, que deve ser enviada como parâmetro na URL ou no cabeçalho X-API-KEY da requisição.

Autenticação por API Key (GET) na url

https://orcamentador.com.br/api/[ENDPOINT]/?apikey=SUA_CHAVE

Autenticação via Header HTTP

GET /api/[ENDPOINT]/
Headers:
    X-API-Key: SUA_CHAVE

Para solicitar uma chave de acesso à API (gratuita ou comercial), veja a seção Aquisição da chave da API-SINAPI

Endpoints disponíveis
Endpoint Descrição Parâmetros
/insumos Retorna lista de insumos disponíveis ou informações de um insumo (se codigo e estado forem especificados) page, limit, estado
/composicoes Retorna lista de composições ou informações de uma composição (se codigo e estado forem especificados) page, limit, estado
/composicao Retorna os itens (insumos ou subcomposições) de uma composição codigo, estado
/composicao_explode Retorna todos os insumos que compõem uma determinada composição, expandindo automaticamente qualquer subcomposição até o nível de insumos finais. codigo, estado, regime
/historico O endpoint historico permite consultar o histórico de preços de insumos e composições durante um período específico para um estado codigo, estado, item, periodo
/comparar O endpoint comparar permite consultar os preços de insumos e composições para múltiplos estados simultaneamente codigo, estados, item, data_ref
/previsao Retorna previsões de preços para insumos e composições baseado em análise estatística dos dados históricos. item, estado, regime
/orcamento Gera um orçamento consolidado a partir de itens informados pelo cliente. Aceita insumos e composições no mesmo parâmetro `itens` (formato [C|I]:CODIGO@QUANTIDADE — ex: C:12321@3.2,I:234@12.5).
A API busca preços por estado e regime (desonerado / nao_desonerado), multiplica pelas quantidades, consolida insumos iguais e retorna um objeto com o array itens e os totais do orçamento.
itens, estado, regime
/estados Retorna a lista de estados do Brasil com informações como; sigla, nome, código IBGE e bandeira estado
/usage O endpoint usage permite que o usuário acompanhe, em tempo real, o consumo de sua chave de API. apikey
/webhook Notifica o seu sistema automaticamente sempre que houver nova atualização da tabela SINAPI. apikey, mode
/atualizacao Retorna informações sobre a última atualização da tabela SINAPI disponível no sistema, incluindo data, mês de referência e status geral. apikey
/status Exibe o status operacional da API, tempo de resposta, versão atual, dependências principais e indicadores de funcionamento. apikey
/docs Retorna a documentação da API SINAPI em formato HTML. -
GET /insumos

Retorna uma lista paginada de insumos da base SINAPI, ou um insumo específico se código e estado forem informados.

Parâmetro Descrição Observações
apikey Chave de acesso à API Obrigatório
page Número da página Obrigatório
limit Quantidade de registros por página Obrigatório — Máximo: 100
codigo Filtro por código Opcional — Obrigatório se usado com estado
estado Sigla do estado Obrigatório se usado com codigo; caso contrário, o preço não é exibido
nome Busca por nome Opcional — Não usar junto com codigo
modo_busca Modo de filtragem para a busca por nome Padrão: contem
Opções: contem, comeca_com, termina_com, igual
tipo Tipo de item (material, mão de obra, equipamento...) Opcional
regime Regime de preço. Opcional. Opções: NAO_DESONERADO, DESONERADO, TODOS (padrão).
sort Campo para ordenação Opções: codigo, nome, tipo
order Direção da ordenação Opções: asc ou desc
output Formato da resposta Padrão: json — Opções: json, xml
data_ref Data de referência Opcional — Formato: AAAA-MM-01
detail Opcional. Exibe descrição detalhada do insumo Padrão: false — Opções: true, false
Exemplos de uso

Exemplo 1 — Busca por nome contendo “cimento”

Lista de insumos contendo “cimento”, ordenados por nome:

/insumos/?apikey=SUA_CHAVE&page=1&limit=20&nome=cimento&estado=SP&sort=nome&order=asc
    
Exemplo 2 — Buscar insumo por código

Retorna o insumo código 366 (areia fina) para SP:

/insumos/?apikey=SUA_CHAVE&codigo=366&estado=SP
    
Exemplo 3 — Filtrar por regime desonerado

Lista de insumos desonerados para SP:

/insumos/?apikey=SUA_CHAVE&page=1&limit=20&estado=SP®ime=DESONERADO
    
Exemplo 4 — Busca por nome começando com “areia”

Usa o modo de busca comeca_com:

/insumos/?apikey=SUA_CHAVE&page=1&limit=15&nome=areia&modo_busca=comeca_com
    
Exemplo 5 — Filtrar só materiais

Exibe apenas itens cujo tipo é “material”:

/insumos/?apikey=SUA_CHAVE&page=1&limit=30&tipo=material&sort=codigo&order=asc
    
Exemplo 6 — Forçar saída em XML

Mesmo endpoint, porém com resposta em XML:

/insumos/?apikey=SUA_CHAVE&page=1&limit=10&nome=brita&output=xml
    
Exemplo 7 — Consultar preços de uma data específica

Exemplo usando data de referência:

/insumos/?apikey=SUA_CHAVE&page=1&limit=20&estado=RJ&data_ref=2024-05-01
    
Observações:

Os valores retornados são sempre os mais recentes. Para consultar um mês específico da tabela SINAPI, use o parâmetro data_ref no formato AAAA-MM-01.
Exemplo:

data_ref=2025-03-01

No parâmetro estado, se for informado o valor BR, a API retornará os preços médios nacionais dos insumos.

Se algum preço de insumo não estiver disponível para o estado solicitado, a flag origem_preco, indicará a origem do valor como media, indicando que o preço retornado é a média nacional, caso contrário o valor retornado da flag origem_preco será: principal.

Ao utilizar o parâmetro regime, com o valor todos (ou sem valor), as flags de preços retornadas serão preco_desonerado e preco_naodesonerado. Se especificado o valor desonerado ou nao_desonerado, a flag retornada será preco com o respectivo valor.

GET /composicoes

Retorna uma lista paginada de composições da base SINAPI, ou uma composição específica se código e estado forem informados.

Parâmetro Descrição Observações
apikey Chave de acesso à API Obrigatório
page Número da página Obrigatório
limit Quantidade de registros por página Obrigatório — Máx: 100
codigo Filtro por código da composição Opcional — Obrigatório se usado com estado
estado Sigla do estado Obrigatório se usado com codigo
nome Busca pelo nome da composição Opcional — Não usar com codigo
modo_busca Modo de filtragem para nome Opcional — Padrão: contem Opções: contem, comeca_com, termina_com, igual
sort Campo para ordenação Opcional — Padrão: codigo Opções: codigo, nome, unidade
order Direção da ordenação Opcional — Padrão: asc Opções: asc, desc
filtro Filtra as composições de acordo com o grupo, classe ou tipo Opcional — Formato: filtro@valor. Exemplo: grupo@Acessibilidade ou classe@INHI ou tipo@0251
Veja a lista completa de grupos, classes e tipos nas documentações do SINAPI.
regime Regime de preço. Opcional — Opções: NAO_DESONERADO, DESONERADO, TODOS (padrão).
output Formato da resposta Opcional — Padrão: json — Opções: json, xml
data_ref Data de referência para preços Opcional — Formato: AAAA-MM-01
Exemplos de uso

Exemplo

Retorna composições de SP, ordenadas por nome (desc):

/composicoes/?apikey=SUA_CHAVE&page=1&limit=10&estado=SP&sort=nome&order=desc
GET /composicao

Retorna os dados de uma composição, incluindo os itens (insumos ou subcomposições).

Parâmetro Descrição Observações
apikey Chave de acesso da API Obrigatório
codigo Código da composição Obrigatório
estado Sigla do estado (ex.: SP, RJ, BA) Obrigatório
regime Regime de preço. Opcional. Opções: NAO_DESONERADO, DESONERADO, TODOS (padrão).
output Formato da resposta Opcional — valores: json (padrão) ou xml
data_ref Data de referência dos preços Opcional — formato: AAAA-MM-01
Exemplos de uso

Exemplo

Retornar a composição código 98460 com preços de SP e seus itens

/api/composicao/?apikey=SUA_CHAVE&codigo=98460&estado=SP

Resposta (json):
{
"codigo": 98460,
"nome": "PISO PARA CONSTRUÇÃO TEMPORÁRIA EM MADEIRA, SEM REAPROVEITAMENTO. AF_03/2024",
"unidade": "m²",
"preco_desonerado": "71.13",
"preco_naodesonerado": "73.65",
"data_referencia": "2025-09-01 00:00:00",
"estado": 26,
"itens": [
  {
      "tipo": "COMPOSICAO",
      "codigo": "91693",
      "unidade": "CHI",
      "quantidade": 0.2832,
      "nome": "SERRA CIRCULAR DE BANCADA COM MOTOR ELÉTRICO POTÊNCIA DE 5HP, COM COIFA PARA DISCO 10\" - CHI DIURNO. AF_08/2015",
      "preco_desonerado": "35.65",
      "preco_naodesonerado": "38.94"
  },
  {
      "tipo": "COMPOSICAO",
      "codigo": "91692",
      "unidade": "CHP",
      "quantidade": 0.0705,
      "nome": "SERRA CIRCULAR DE BANCADA COM MOTOR ELÉTRICO POTÊNCIA DE 5HP, COM COIFA PARA DISCO 10\" - CHP DIURNO. AF_08/2015",
      "preco_desonerado": "36.89",
      "preco_naodesonerado": "40.18"
  },
  {
      "tipo": "COMPOSICAO",
      "codigo": "88262",
      "unidade": "h",
      "quantidade": 0.288,
      "nome": "CARPINTEIRO DE FORMAS COM ENCARGOS COMPLEMENTARES",
      "preco_desonerado": "32.31",
      "preco_naodesonerado": "35.11"
  },
  {
      "tipo": "COMPOSICAO",
      "codigo": "88239",
      "unidade": "h",
      "quantidade": 0.216,
      "nome": "AJUDANTE DE CARPINTEIRO COM ENCARGOS COMPLEMENTARES",
      "preco_desonerado": "30.47",
      "preco_naodesonerado": "33.05"
  },
  {
      "tipo": "INSUMO",
      "codigo": "6194",
      "unidade": "m",
      "quantidade": 7.326,
      "nome": "TABUA *2,5 X 15 CM EM PINUS, MISTA OU EQUIVALENTE DA REGIAO - BRUTA",
      "tipo_insumo": "MATERIAL",
      "preco_desonerado": "5.81",
      "preco_naodesonerado": "5.81"
  }
]
}
GET /composicao_explode

Retorna todos os insumos que compõem uma determinada composição, expandindo automaticamente qualquer subcomposição até o nível de insumos finais. O resultado inclui o valor total de cada insumo e pode ser ordenado por impacto financeiro, permitindo realizar uma análise no formato de Curva ABC da composição. Esse endpoint é essencial para entender quais insumos representam a maior parcela do custo e para apoiar decisões de orçamento e otimização.

Parâmetro Descrição Observações
apikey Chave de acesso da API Obrigatório
codigo Código da composição Obrigatório
estado Sigla do estado (ex.: SP, RJ, BA) Obrigatório
regime Regime de preço. Obrigatório. Opções: NAO_DESONERADO, DESONERADO
output Formato da resposta Opcional — valores: json (padrão) ou xml
data_ref Data de referência dos preços Opcional — formato: AAAA-MM-01
sort Campo para ordenar os insumos Opcional — valores: nome, codigo, tipo, unidade, valor_total, quantidade, preco_unitario. Padrão: valor_total
order Direção da ordenação Opcional — valores: asc, desc. Padrão: desc
Exemplos de uso

Exemplo

Retornar composição código 88239, expandida a nível de insumos, com preços de PB, com regime desonerado:

api/composicao_explode/?apikey=SUA_CHAVE&codigo=88239&estado=pb&regime=desonerado

Resposta (json):
{
        "codigo": 88239,
        "descricao": "AJUDANTE DE CARPINTEIRO COM ENCARGOS COMPLEMENTARES",
        "unidade": "h",
        "valor_total": 20.2,
        "mao_de_obra": 15.1097764,
        "regime": "desonerado",
        "estado": "Paraíba (PB)",
        "data_referencia": "2025-09-01 00:00:00",
        "insumos": [
          {
            "codigo": "6117",
            "nome": "CARPINTEIRO AUXILIAR (HORISTA)",
            "unidade": "h",
            "preco_unitario": 14.89,
            "quantidade": 1.01476,
            "valor_total": 15.1097764,
            "tipo": "MAO DE OBRA"
          },
          {
            "codigo": "43483",
            "nome": "EPI - FAMILIA CARPINTEIRO DE FORMAS - HORISTA (ENCARGOS COMPLEMENTARES - COLETADO CAIXA)",
            "unidade": "h",
            "preco_unitario": 1.43,
            "quantidade": 1,
            "valor_total": 1.43,
            "tipo": "ENCARGOS COMPLEMENTARES"
          },
          {
            "codigo": "37372",
            "nome": "EXAMES - HORISTA (COLETADO CAIXA - ENCARGOS COMPLEMENTARES)",
            "unidade": "h",
            "preco_unitario": 1.43,
            "quantidade": 1,
            "valor_total": 1.43,
            "tipo": "ENCARGOS COMPLEMENTARES"
          },
          {
            "codigo": "37370",
            "nome": "ALIMENTACAO - HORISTA (COLETADO CAIXA - ENCARGOS COMPLEMENTARES)",
            "unidade": "h",
            "preco_unitario": 0.92,
            "quantidade": 1,
            "valor_total": 0.92,
            "tipo": "ENCARGOS COMPLEMENTARES"
          },
          {
            "codigo": "37371",
            "nome": "TRANSPORTE - HORISTA (COLETADO CAIXA - ENCARGOS COMPLEMENTARES)",
            "unidade": "h",
            "preco_unitario": 0.8,
            "quantidade": 1,
            "valor_total": 0.8,
            "tipo": "ENCARGOS COMPLEMENTARES"
          },
          {
            "codigo": "43459",
            "nome": "FERRAMENTAS - FAMILIA CARPINTEIRO DE FORMAS - HORISTA (ENCARGOS COMPLEMENTARES - COLETADO CAIXA)",
            "unidade": "h",
            "preco_unitario": 0.44,
            "quantidade": 1,
            "valor_total": 0.44,
            "tipo": "ENCARGOS COMPLEMENTARES"
          },
          {
            "codigo": "37373",
            "nome": "SEGURO - HORISTA (COLETADO CAIXA - ENCARGOS COMPLEMENTARES)",
            "unidade": "h",
            "preco_unitario": 0.08,
            "quantidade": 1,
            "valor_total": 0.08,
            "tipo": "ENCARGOS COMPLEMENTARES"
          }
        ]
        }
GET /historico

Retorna o histórico de preços de um insumo ou composição durante um período especificado.

Parâmetro Descrição Observações
apikey Chave de acesso da API Obrigatório
codigo Código do insumo ou composição Obrigatório
estado Sigla do estado (SP, RJ, MG...) Obrigatório
item Define o tipo de item consultado Obrigatório
Valores: insumo ou composicao
periodo Período desejado para histórico de preços Opcional — exemplos: 2m, 6m, 1y
Padrão: 12m
output Formato da resposta Opcional — valores: json (padrão) ou xml
Exemplos de uso

Exemplo

Retorna os preços do insumo código 123 durante os últimos 6 meses para o estado de São Paulo (SP)

/historico/?apikey=SUA_CHAVE&codigo=123&estado=SP&item=insumo&periodo=6m

Resposta (json):
{
"nome": "ADITIVO IMPERMEABILIZANTE DE PEGA NORMAL PARA ARGAMASSAS E CONCRETOS SEM ARMACAO, LIQUIDO E ISENTO DE CLORETOS",
"codigo": "123",
"tipo": "insumo",
"estado_id": 26,
"estado": "São Paulo (SP)",
"historico": [
{
  "preco_desonerado": "6.86",
  "preco_naodesonerado": "6.86",
  "data": "2025-06-01"
},
{
  "preco_desonerado": "7.28",
  "preco_naodesonerado": "7.28",
  "data": "2025-07-01"
},
{
  "preco_desonerado": "7.33",
  "preco_naodesonerado": "7.33",
  "data": "2025-08-01"
},
{
  "preco_desonerado": "6.95",
  "preco_naodesonerado": "6.95",
  "data": "2025-09-01"
}
]
}
GET /comparar

Compara os preços de um insumo ou composição entre diferentes estados durante um período especificado.

Parâmetro Descrição Observações
apikey Chave de acesso à API Obrigatório
codigo Código do insumo ou composição Obrigatório
estados Lista de siglas dos estados a comparar Obrigatório
Formato: siglas separadas por vírgula (ex.: SP,RJ,MG)
item Tipo do recurso consultado Obrigatório
Valores: insumo | composicao
data_ref Data de referência SINAPI para os preços Opcional — formato AAAA-MM-01 (ex.: 2025-09-01).
Padrão: data SINAPI mais recente disponível.
output Formato da resposta Opcional — valores: json (padrão) ou xml
Exemplos de uso

Exemplo

Retorna os preços da composição código 89282 para os estados do Acre (AC) e Paraíba (PB)

/comparar/?apikey=SUA_CHAVE&codigo=89282&item=composicao&estados=ac,pb

Resposta (json):
{
    "codigo": "89282",
    "tipo": "composicao",
    "descricao": "ALVENARIA ESTRUTURAL DE BLOCOS CERÂMICOS 14X19X39, (ESPESSURA DE 14 CM), UTILIZANDO PALHETA E ARGAMASSA DE ASSENTAMENTO COM PREPARO EM BETONEIRA. AF_03/2023",
    "data_referencia": "2025-09-01",
    "comparacao": [
    {
      "estado_id": 1,
      "estado": "Acre (AC)",
      "preco_desonerado": "90.80",
      "preco_naodesonerado": "93.16",
      "data_referencia": "2025-09-01 00:00:00"
    },
    {
      "estado_id": 15,
      "estado": "Paraíba (PB)",
      "preco_desonerado": "69.83",
      "preco_naodesonerado": "71.97",
      "data_referencia": "2025-09-01 00:00:00"
    }
    ]
    }
GET /previsao

Gera previsões de preços de um insumo ou composição com base em dados históricos do SINAPI usando regressão linear.

Parâmetro Descrição Observações
apikey Chave de acesso à API Obrigatório
item Define se a consulta será feita para um insumo ou composição Obrigatório
Valores: insumo | composicao
codigo Código do insumo ou composição Obrigatório
estado Sigla do estado Obrigatório
regime Tipo de regime tributário do preço Obrigatório
Valores: desonerado | nao_desonerado
output Formato da resposta Opcional — valores:
json (padrão) ou xml
Exemplos de uso

Exemplo

Gera previsão usando regressão linear para a composição 89994 no estado de São Paulo (SP), regime desonerado:

/previsao/?apikey=SUA_CHAVE&item=composicao&codigo=89994&estado=SP&regime=desonerado

Resposta (json):
{
  "item": "composicao",
  "nome": "GRAUTEAMENTO DE CINTA INTERMEDIÁRIA OU DE CONTRAVERGA EM ALVENARIA ESTRUTURAL.",
  "codigo": "89994",
  "estado": "São Paulo (SP)",
  "regime": "desonerado",
  "historico": {
    "datas": [
      "2024-08-01",
      "2024-09-01",
      "2024-10-01",
      "2024-11-01",
      "2024-12-01",
      "2025-01-01",
      "2025-02-01",
      "2025-03-01",
      "2025-04-01",
      "2025-05-01",
      "2025-06-01",
      "2025-07-01",
      "2025-08-01",
      "2025-09-01"
    ],
    "precos": [805.92, 802.66, 806.94, 823.28, 808.1, 823.39, 813.14, 818.7, 817.87, 838.06, 857.03, 859.94, 860.08, 870.85],
    "curva_ajustada": [795.74, 800.86, 805.98, 811.09, 816.21, 821.32, 826.44, 831.56, 836.67, 841.79, 846.9, 852.02, 857.13, 862.25]
  },
  "previsoes": {
    "3_meses": {
      "valor": 877.6,
      "intervalo_95": {
        "min": 853.04,
        "max": 902.16
      }
    },
    "6_meses": {
      "valor": 892.95,
      "intervalo_95": {
        "min": 866.07,
        "max": 919.83
      }
    },
    "12_meses": {
      "valor": 923.64,
      "intervalo_95": {
        "min": 891.11,
        "max": 956.18
      }
    }
  },
  "variacao_percentual_prevista": {
    "3_meses": 0.77,
    "6_meses": 2.54,
    "12_meses": 6.06
  },
  "probabilidade_alta": 100,
  "metodo": "Regressão linear simples"
}
GET /orcamento

Gera um orçamento a partir de uma lista de itens fornecidos pelo usuário, podendo incluir insumos (I) e composições (C). Cada item é informado no formato [C|I]:CODIGO@QUANTIDADE, dentro do parâmetro itens. A API obtém os preços vigentes para o estado e regime selecionados, expande composições quando necessário, multiplica pelas quantidades fornecidas e retorna um orçamento consolidado com:

  • Lista detalhada dos itens processados
  • Total geral do orçamento

Este endpoint é útil para gerar orçamentos rápidos diretamente pela API, integrar sistemas externos ou automatizar cálculos repetitivos.

Parâmetro Descrição Observações
apikey Chave de acesso da API Obrigatório
itens Lista de itens do orçamento, no formato [C|I]:CODIGO@QUANTIDADE, separados por vírgula. Obrigatório
Ex: C:12321@3.2,I:234@12.5,I:3773@7
estado Sigla do estado onde os preços devem ser consultados Obrigatório — ex: SP, PB
regime Regime de preço SINAPI Obrigatório
Valores: DESONERADO, NAO_DESONERADO
bdi Percentual do BDI (Bonificação e Despesas Indiretas) Opcional — Valor numérico representando o percentual do BDI a ser aplicado no orçamento. Padrão: 0
output Formato da resposta Opcional — json (padrão) ou xml
data_ref Data de referência dos preços Opcional — formato AAAA-MM-01
Exemplos de uso

Exemplo

Gera orçamento para os insumos: código 123 (quantidade 4.2), código 366 (quantidade 12) e composição: 87777 (quantidade 2) para o estado de SP, com regime não desonerado para a tabela SINAPI mais recente:

/api/orcamento/?apikey=SUA_CHAVE&itens=I:123@4.2,I:366@12,C:87777@2&estado=sp&regime=nao_desonerado

Resposta (json):
{
  "totais": {
    "total_insumos": 968,
    "total_composicoes": 139.68,
    "total_geral": 1107.68,
    "bdi_percentual": 0,
    "total_com_bdi": 1107.68,    
    "regime": "nao_desonerado",
    "estado": "São Paulo (SP)",
    "data_referencia": "2025-09-01"
  },
  "itens": [
    {
      "tipo": "Insumo",
      "codigo": 123,
      "nome": "ADITIVO IMPERMEABILIZANTE DE PEGA NORMAL PARA ARGAMASSAS E CONCRETOS SEM ARMACAO, LIQUIDO E ISENTO DE CLORETOS",
      "unidade": "L",
      "quantidade": 4.2,
      "preco_unit": 7.62,
      "subtotal": 32
    },
    {
      "tipo": "Insumo",
      "codigo": 366,
      "nome": "AREIA FINA - POSTO JAZIDA/FORNECEDOR (RETIRADO NA JAZIDA, SEM TRANSPORTE)",
      "unidade": "m³",
      "quantidade": 12,
      "preco_unit": 78,
      "subtotal": 936
    },
    {
      "tipo": "Composição",
      "codigo": 87777,
      "nome": "EMBOÇO OU MASSA ÚNICA EM ARGAMASSA TRAÇO 1:2:8, PREPARO MANUAL, APLICADA MANUALMENTE EM PANOS DE FACHADA COM PRESENÇA DE VÃOS, ESPESSURA DE 25 MM. AF_08/2022",
      "unidade": "m²",
      "quantidade": 2,
      "preco_unit": 69.84,
      "subtotal": 139.68
    }
  ]
}
GET /estados

Retorna uma lista de estados do Brasil ou informações de um estado (se o parâmetro 'estado' for especificado).

Parâmetros:
  • estado: (Filtro único): Sigla do estado - retorna informações do estado, como; sigla, nome, capital, região, código IBGE e bandeira. O parâmetro deve ser informado como a sigla do estado.
  • ibge: (Filtro único): Código IBGE do estado - retorna informações do estado, como; sigla, nome, capital, região, código IBGE e bandeira. O parâmetro deve ser informado como a sigla do estado.
  • regiao: (Filtro único): Retorna os estados da região informada no valor
Exemplo:
/estados/?apikey=SUA_CHAVE&estado=SP
GET /usage

O endpoint /usage permite que o usuário acompanhe, em tempo real, o consumo de sua chave de API, incluindo:

  • Requisições usadas na última hora
  • Requisições restantes na janela atual
  • Timestamp de reset da janela horária
  • Consumo mensal
  • Dia de reset mensal
Parâmetros:
  • apikey (obrigatório)
Exemplos de uso

Exemplo

Exibe o status de uso da chave informada

/usage/?apikey=SUA_CHAVE

Resposta (json):
{
"hourly": {
"limit": 100,
"used": 23,
"remaining": 77,
"reset_timestamp": 1732224000
},
"monthly": {
"limit": 3000,
"used": 912,
"remaining": 2088,
"reset_day": 1
}
}
Tratamento de Erros
Código Mensagem Descrição
400 Parâmetros ausentes O endpoint ou parâmetro obrigatório não foi fornecido.
401 API Key inválida Chave de API não reconhecida ou token JWT expirado.
429 Limite de requisições excedido Usuário ultrapassou o número permitido de requisições.
Limite de Requisições

Cada chave gratuita permite até 100 requisições por hora. Após atingir esse limite, o sistema retorna:

HTTP 429 Too Many Requests

Além do código de erro, a API envia cabeçalhos informativos para ajudar no controle de uso:

  • X-RateLimit-Limit: número máximo de requisições permitidas por hora.
  • X-RateLimit-Remaining: quantas requisições ainda restam antes de atingir o limite.
  • X-RateLimit-Reset: horário (em timestamp Unix) em que o contador será reiniciado.
  • X-RateLimit-Monthly-Limit: total de requisições permitidas no mês.
  • X-RateLimit-Monthly-Used: quantidade já utilizada no período mensal.
  • X-RateLimit-Monthly-Remaining: quantas requisições ainda estão disponíveis.

Esses cabeçalhos permitem que aplicações clientes ajustem automaticamente o ritmo das requisições e evitem bloqueios.

Webhook – Notificação de Atualização da Tabela SINAPI

O Webhook da API Orçamentador permite que seu sistema seja notificado automaticamente sempre que houver nova atualização da tabela SINAPI.

A configuração é feita exclusivamente pela API, sem painel visual.


🔑 Autenticação (APIKEY obrigatória)

Todas as chamadas de webhook exigem uma APIKEY válida. Ela pode ser enviada de duas formas:

  • Via URL: &apikey=SUA_CHAVE
  • Via cabeçalho: X-API-Key: SUA_CHAVE

Exemplo completo:

/api/webhook/?mode=list&apikey=SUA_CHAVE

📌 Endpoints disponíveis
  • Registrar webhook
  • Remover webhook
  • Listar webhook(s) do usuário
  • Enviar teste de webhook

Registrar webhook

Registra a URL que será notificada a cada atualização SINAPI.

/api/webhook/?mode=register&callback_url=URL&apikey=SUA_CHAVE

Resposta:

{
      "message": "Webhook registrado com sucesso.",
      "event": "register",
      "status": "ok",
      "secret": "CHAVE_SECRETA_GERADA",
      "callback_url": "https://exemplo.com/webhook",
      "webhook_id": 12
  }

Atenção: Apenas 1 webhook ativo por usuário.


Remover webhook
/api/webhook/?mode=unregister&webhook_id=ID&apikey=SUA_CHAVE

Resposta:

{
      "message": "Webhook removido com sucesso.",
      "event": "unregister",
      "status": "ok"
  }

Listar webhooks
/api/webhook/?mode=list&apikey=SUA_CHAVE

Resposta:

{
      "webhooks": [
          {
              "id": 12,
              "callback_url": "https://exemplo.com/webhook",
              "criado_em": "2025-01-10 14:32:55",
              "secret_key": "xxxxxxxx"
          }
      ]
  }

Enviar teste

Envia um webhook de teste para validar sua integração.

/api/webhook/?mode=test&webhook_id=ID&apikey=SUA_CHAVE

Payload enviado:

{
      "event": "test",
      "message": "Este é um teste de webhook."
  }

Cabeçalho incluído:

X-Webhook-Signature: HMAC_SHA256_DO_PAYLOAD

Validação da assinatura (HMAC)

Seu servidor deve validar o webhook com o secret fornecido no registro (exemplo em PHP):

$body = file_get_contents('php://input');
  $signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? null;
  $expected = hash_hmac('sha256', $body, SEU_SECRET);

  if (!hash_equals($expected, $signature)) {
      http_response_code(403);
      exit(json_encode(["erro" => "Assinatura inválida"]));
  }
  

Essa validação garante que a requisição veio realmente do Orçamentador.


Eventos enviados pelo Orçamentador
{
      "event": "sinapi.update",
      "referencia": "2025-09-01"
  }

Para suporte ou dúvidas sobre integração, entre em contato.

Aquisição da chave da API SINAPI

Para solicitar sua chave gratuita, contratar um dos planos disponíveis, ampliar limites de requisição ou receber suporte técnico, basta entrar em contato conosco. No formulário, selecione a opção "API SINAPI – Orçamentador".

Você também pode consultar todos os detalhes sobre os planos, preços e limites diretamente na página principal da API em:
https://orcamentador.com.br/api/

Nossa equipe responderá rapidamente e fornecerá tudo o que você precisa para integrar a API ao seu sistema.

Exemplos de uso da API

Ex.: Exibir a página 1 de insumos com 5 itens/página

curl "https://orcamentador.com.br/api/insumos/?apikey=SUA_CHAVE&page=1&limit=5"
<?php
$apiUrl = "https://orcamentador.com.br/api/insumos/?apikey=SUA_CHAVE&page=1&limit=5";
$response = file_get_contents($apiUrl);
$data = json_decode($response, true);
print_r($data);
?>
fetch("https://orcamentador.com.br/api/insumos/?apikey=SUA_CHAVE&page=1&limit=5")
  .then(res => res.json())
  .then(data => console.log(data));
import requests

url = "https://orcamentador.com.br/api/"
params = {
    "apikey": "SUA_CHAVE",
    "endpoint": "insumos",
    "page": 1,
    "limit": 5
}

response = requests.get(url, params=params)
print(response.json())
import java.io.*;
import java.net.*;
import java.util.Scanner;

public class ApiExample {
  public static void main(String[] args) throws Exception {
    URL url = new URL("https://orcamentador.com.br/api/insumos/?apikey=SUA_CHAVE&page=1&limit=5");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("GET");

    Scanner sc = new Scanner(conn.getInputStream());
    while (sc.hasNext()) {
      System.out.println(sc.nextLine());
    }
    sc.close();
  }
}
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program {
  static async Task Main() {
    var client = new HttpClient();
    string url = "https://orcamentador.com.br/api/insumos/?apikey=SUA_CHAVE&page=1&limit=5";
    var response = await client.GetStringAsync(url);
    Console.WriteLine(response);
  }
}
const https = require('https');

const url = 'https://orcamentador.com.br/api/insumos/?apikey=SUA_CHAVE&page=1&limit=5';

https.get(url, res => {
  let data = '';
  res.on('data', chunk => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
}).on('error', err => {
  console.error('Erro: ' + err.message);
});