SINPRES — Sistema Nacional de Preços Setoriais

Compositions

Composições (serviços completos) de um setor. No SINAPI, uma composição representa um serviço de construção civil com seus insumos e sub-composições, coeficientes e preços resultantes. Suporta busca textual, filtros por unidade, UF, mês e regime tributário.

Buscar composições de um setor

GET
/api/v1/sectors/{slug}/compositions

Retorna uma lista paginada de composições (serviços SINAPI) de um setor.

Busca textual: Use o parâmetro search para buscar por descrição. A busca utiliza full-text search em português (PostgreSQL tsvector).

Filtro por unidade: Use o parâmetro unit para filtrar por unidade de medida (ex: M2, M3, UN).

Filtro por UF: Use o parâmetro state para filtrar por estado (ex: SP, RJ, MG).

Filtro por mês: Use o parâmetro month no formato AAAA-MM. Se não informado, retorna o último mês disponível.

Regime tributário: Use o parâmetro is_desonerated para filtrar por desoneração. Default: false.

Paginação: Use page e limit para controlar a paginação. Máximo de 100 itens por página.

Performance: Use include_total=false para evitar COUNT(*) e compact=true para retornar payload reduzido.

Path Parameters

slug*string

Query Parameters

page?integer

Número da página

Default1
Range1 <= value
limit?integer

Itens por página (máx. 100)

Default50
Range1 <= value <= 100
include_total?boolean

Inclui total e totalPages na paginação. Use false para evitar COUNT(*) em listagens grandes.

Defaulttrue
search?string

Termo de busca (full-text search em português)

unit?string

Filtrar por unidade de medida

state?string

UF de 2 letras (ex: SP, RJ, MG)

Length2 <= length <= 2
month?string

Mês de referência no formato AAAA-MM

Match^\d{4}-\d{2}$
is_desonerated?boolean

Regime tributário: true = desonerado, false = não desonerado

Defaultfalse
compact?boolean

Retorna payload reduzido para listagens de alta performance

Defaultfalse

Response Body

application/json

application/json

curl -X GET "https://api.sinpres.com.br/api/v1/sectors/civil-construction/compositions"
{
  "data": [
    {
      "id": 0,
      "code": 0,
      "description": "string",
      "unit": "string",
      "stateCode": "st",
      "referenceMonth": "strings",
      "isDesonerated": true,
      "baseUnitCost": 0,
      "sourceUpdatedAt": "string",
      "previousCode": null,
      "createdAt": "string"
    }
  ],
  "meta": {
    "total": 0,
    "page": 0,
    "limit": 0,
    "totalPages": 0,
    "hasNextPage": true
  }
}
{
  "error": "string"
}

Detalhar composição por código

GET
/api/v1/sectors/{slug}/compositions/{code}

Retorna os detalhes completos de uma composição (serviço SINAPI) pelo seu código de referência, incluindo todos os itens que a compõem (insumos e sub-composições) com coeficientes e preços.

Path Parameters

slug*string
code?number

Query Parameters

state?string

UF de 2 letras (ex: SP, RJ, MG)

Length2 <= length <= 2
month?string

Mês de referência no formato AAAA-MM

Match^\d{4}-\d{2}$
is_desonerated?boolean

Regime tributário: true = desonerado, false = não desonerado

Defaultfalse

Response Body

application/json

application/json

curl -X GET "https://api.sinpres.com.br/api/v1/sectors/civil-construction/compositions/{code}"
{
  "data": {
    "id": 0,
    "code": 0,
    "description": "string",
    "unit": "string",
    "stateCode": "st",
    "referenceMonth": "strings",
    "isDesonerated": true,
    "baseUnitCost": 0,
    "sourceUpdatedAt": "string",
    "previousCode": null,
    "createdAt": "string",
    "items": [
      {
        "itemType": "INPUT",
        "code": 0,
        "description": "string",
        "unit": "string",
        "resourceType": "MATERIAL",
        "coefficient": "string",
        "unitPrice": 0,
        "totalPrice": 0
      }
    ]
  }
}
{
  "error": "string"
}

Buscar múltiplas composições por código

POST
/api/v1/sectors/{slug}/compositions/bulk

Retorna múltiplas composições em uma única request, preservando a ordem de entrada. Não retorna os itens da composição; use o endpoint expanded para árvore recursiva.

Path Parameters

slug*string

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

curl -X POST "https://api.sinpres.com.br/api/v1/sectors/civil-construction/compositions/bulk" \  -H "Content-Type: application/json" \  -d '{    "queries": [      {        "code": "7327",        "state": "SP",        "month": "2026-03",        "is_desonerated": false      }    ]  }'
{
  "results": [
    {
      "code": "string",
      "found": true,
      "composition": {
        "id": 0,
        "code": 0,
        "description": "string",
        "unit": "string",
        "stateCode": "st",
        "referenceMonth": "strings",
        "isDesonerated": true,
        "baseUnitCost": 0,
        "sourceUpdatedAt": "string",
        "previousCode": null,
        "createdAt": "string"
      },
      "reason": "no_price_for_coordinate"
    }
  ]
}
{
  "error": "string"
}
{
  "error": "string"
}

Expandir composição recursivamente

GET
/api/v1/sectors/{slug}/compositions/{code}/expanded

Resolve a árvore de uma composição no servidor, incluindo insumos e sub-composições até a profundidade solicitada. O limite máximo aplicado pelo servidor é 8.

Path Parameters

slug*string
code?number

Query Parameters

state*string

UF de 2 letras

Length2 <= length <= 2
month*string

Mês de referência no formato AAAA-MM

Match^\d{4}-\d{2}$
is_desonerated*boolean

Regime tributário

max_depth?integer

Profundidade máxima da árvore. Valores acima de 8 são limitados pelo servidor.

Default5
Range0 <= value

Response Body

application/json

application/json

curl -X GET "https://api.sinpres.com.br/api/v1/sectors/civil-construction/compositions/{code}/expanded?state=SP&month=2026-03&is_desonerated=false"
{
  "data": {
    "code": "string",
    "description": "string",
    "unit": "string",
    "depth": 0,
    "coefficient": "string",
    "item_type": "COMPOSITION",
    "unit_price": 0,
    "items": [
      null
    ],
    "truncated": true
  }
}
{
  "error": "string"
}