A API do Orçamentador foi desenvolvida para fornecer acesso estruturado e confiável aos dados de insumos, composições e preços utilizados no setor da construção civil, com base na Tabela SINAPI (Sistema Nacional de Pesquisa de Custos e Índices da Construção Civil).
A API SINAPI do Orçamentador tem como objetivo permitir que sistemas externos integrem, consultem e utilizem os dados do Orçamentador em tempo real, viabilizando:
Esta API foi criada para atender:
Todas as requisições exigem uma API Key, que deve ser enviada como parâmetro na URL:
https://orcamentador.com.br/api/?apikey=SUA_CHAVE
| Endpoint | Descrição | Parâmetros |
|---|---|---|
?endpoint=insumos |
Retorna lista de insumos disponíveis ou informações de um insumo (se codigo e estado forem especificados) | page, limit |
?endpoint=composicoes |
Retorna lista de composições ou informações de uma composição (se codigo e estado forem especificados) | page, limit |
?endpoint=composicao |
Retorna os itens (insumos ou subcomposições) de uma composição | codigo, estado |
Retorna uma lista de insumos paginada.
Parâmetros:apikey: (obrigatório)page: (obrigatório): Número da páginalimit: (obrigatório): Quantidade por página (máx: 100)codigo: Filtro parcial (obrigatório se usado com o filtro estado)estado: Sigla do estado (obrigatório se usado com o filtro codigo. Se omitido, a API não retorna o preço do insumo)nome: Filtro parcial (Busca pelo nome do insumo. Não deve ser usado com codigo)tipo: material, mão de obra, equipamento...sort: codigo, nome, tipoorder: asc ou desc/?apikey=SUA_CHAVE&endpoint=insumos&page=1&limit=20&nome=cimento&sort=nome&order=asc
Retorna uma lista de composições paginada.
Parâmetros:apikey (obrigatório)page (obrigatório)limit (obrigatório)codigo: Filtro parcial (obrigatório se usado com o filtro estado)estado: obrigatório se usado com o filtro codigosort: codigo, nome, unidadeorder: asc ou desc/?apikey=SUA_CHAVE&endpoint=composicoes&page=1&limit=10&sort=nome&order=desc
Retorna os dados de uma composição, incluindo os itens (insumos ou subcomposições).
Parâmetros:apikey (obrigatório)codigo (obrigatório): Código da composiçãoestado: (obrigatório): Sigla do estado/?apikey=SUA_CHAVE&endpoint=composicao&codigo=88316{
"codigo": "88316",
"nome": "Alvenaria de vedação",
"unidade": "m2",
"itens": [
{
"tipo": "INSUMO",
"codigo": "34353",
"unidade": "Kg",
"quantidade": 8.62,
"nome": "Cimento CP II-E-32"
},
{
"tipo": "COMPOSICAO",
"codigo": "88309",
"unidade": "h",
"quantidade": 0.639,
"nome": "Servente de pedreiro"
}
]
}
| 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. |
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.Esses cabeçalhos permitem que aplicações clientes ajustem automaticamente o ritmo das requisições e evitem bloqueios.
Para solicitar uma chave gratuita, obter acesso ilimitado ou assinar um plano, entre em contato conosco.
Ex.: Exibir a página 1 de insumos com 5 itens/página
curl "https://orcamentador.com.br/api/?apikey=SUA_CHAVE&endpoint=insumos&page=1&limit=5"
<?php
$apiUrl = "https://orcamentador.com.br/api/?apikey=SUA_CHAVE&endpoint=insumos&page=1&limit=5";
$response = file_get_contents($apiUrl);
$data = json_decode($response, true);
print_r($data);
?>
fetch("hhttps://orcamentador.com.br/api/?apikey=SUA_CHAVE&endpoint=insumos&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/?apikey=SUA_CHAVE&endpoint=insumos&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/?apikey=SUA_CHAVE&endpoint=insumos&page=1&limit=5";
var response = await client.GetStringAsync(url);
Console.WriteLine(response);
}
}
const https = require('https');
const url = 'https://orcamentador.com.br/api/?apikey=SUA_CHAVE&endpoint=insumos&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);
});