Descrição da interface a ser utilizada para extração de dados do Banco Sidra

Introdução

A interface é implementada através de um serviço HTTP Web API, no estilo REST, que é invocado pela construção de uma URL cujos parâmetros definem a tabela multidimensional Sidra de onde os dados serão extraídos, e quais dados de cada dimensão são necessários.

O enfoque principal é que esta possa ser utilizada de forma simples nos programas clientes (inclusive em dispositivos móveis), de modo a permitir a criação de aplicações dinâmicas que consumam os dados vindos do Banco Sidra no formato JSON ou XML.

A URL a ser utilizada possui uma parte constante, que referencia o método que irá analisar a consulta e fornecer os valores, e uma parte variável, com os parâmetros para esta consulta. Os parâmetros de uma consulta à API Sidra, por sua vez, são declarados através de uma sequência de pares de identificador e valor, com a utilização de barra (/) delimitando cada elemento.

Exemplo: https://apisidra.ibge.gov.br/values/<id_1>/<val_1>/<id_2>/<val_2>/...

Parâmetros de consulta

Diferentes tipos de parâmetro são usados em uma consulta para determinar a tabela e suas dimensões, que podem ser especificados por uma lista de valores ou através de identificadores especiais (ex: /all, /last, entre outros). Estes parâmetros podem ser resumidos da seguinte forma:


Portanto, podemos concluir que uma tabela Sidra contém no mínimo 3 dimensões básicas (períodos, variáveis e unidades territoriais), além de um conjunto de até 6 classificações, totalizando um limite de 9 dimensões.


Nota

A consulta aos dados é limitada a 100.000 valores. Para saber quantos valores a sua consulta irá gerar, multiplique a quantidade de elementos selecionados em cada uma das dimensões. Caso sua seleção utilize identificadores especiais, consulte o descritor da tabela para verificar o número de elementos referentes a ele.
Parâmetros de dimensão
T – para especificar a tabela de onde se deseja extrair os dados

O parâmetro T deve ser seguido pelo código numérico da tabela SIDRA.

Este parâmetro é obrigatório, pois a tabela indicada servirá de base para todos os outros parâmetros da consulta.

Exemplo: /t/1612


P – para especificar os períodos (meses, anos etc.)

O parâmetro P é opcional e, caso não seja especificado, assumirá o valor default /p/last (vide adiante).

O parâmetro P pode ser seguido pela constante all para selecionar todos os períodos disponíveis para a tabela.

Exemplo 1: /p/all

O parâmetro P pode ser seguido pela constante first e um número, para indicar os primeiros períodos disponíveis para a tabela (períodos mais antigos).

O número de períodos pode ser omitido quando se tratar de apenas um período.

Exemplo 2: /p/first 12

Exemplo 3: /p/first (equivalente a /p/first 1)

O parâmetro P pode ser seguido pela constante last e um número, para indicar os últimos períodos disponíveis para a tabela (períodos mais recentes).

O número de períodos pode ser omitido quando se tratar de apenas um período.

Exemplo 4: /p/last 12

Exemplo 5: /p/last (equivalente a /p/last 1)

O parâmetro P pode especificar códigos de períodos de forma avulsa (separados por vírgula ","), em faixas (separados por traço "-"), ou de ambas as formas.

Para mais detalhes sobre os códigos de períodos, consulte a nota adiante.

Exemplo 6: /p/2008,2009,2010 – especifica os anos 2008, 2009 e 2010.

Exemplo 7: /p/2008,2010-2014 – especifica o ano de 2008, e os anos no intervalo de 2010 a 2014.

Exemplo 8: /p/201101-201112,201204,201208 – especifica os meses de janeiro a dezembro de 2011, abril de 2012 e agosto de 2012.

Nota

O formato de um código de período é determinado pela periodicidade de liberação da tabela SIDRA consultada.

Para tabelas de divulgação anual, o código possui 4 dígitos no formato AAAA, e indica o ano da ocorrência desejada

Para os demais casos, o código de período possui 6 dígitos no formato AAAASS, onde AAAA indica o ano e SS número de sequência da ocorrência que, conforme a periodicidade, pode representar um mês (01 a 12), um trimestre (01 a 04), um semestre (01 ou 02), entre outros.


V – para especificar as variáveis

O parâmetro V é opcional e, caso não seja especificado, assumirá o valor default /p/allxp (vide adiante).

O parâmetro V pode ser seguido pela constante all para especificar todas as variáveis da tabela, inclusive as variáveis de percentual geradas automaticamente pelo Sidra.

Exemplo 1: /v/all

O parâmetro V pode ser seguido pela constante allxp para especificar todas as variáveis da tabela, exceto as variáveis de percentual geradas automaticamente pelo Sidra.

Exemplo 2: /v/allxp

O parâmetro V pode ser seguido por uma lista de códigos de variáveis (separados por vírgula ",").

Exemplo 3: /v/63,69 seleciona as variáveis "Variação mensal" e "Variação acumulada ao ano".

Exemplo 4: /v/109,1000109 – seleciona a variável "Área Plantada" e a variável calculada "Área plantada - percentual do total geral".

Nota

Variáveis com códigos superiores a 1.000.000 identificam variáveis de percentual calculadas automaticamente.

A disponibilidade de uma variável derivada deve ser consultada para cada tabela.


G – para especificar uma visão territorial

O parâmetro G deve ser seguido pelo código da visão territorial de interesse.

Exemplo: /g/44 – seleciona os valores para a visão territorial "Brasil e Grande Região".

Notas

  • A disponibilidade de dados para uma determinada visão territorial deve ser consultada para cada tabela.
  • Todas as unidades territorais da visão serão apresentadas na tabela de resultado, mesmo quando não houver disponibilidade. Nestes casos, o valor "..." será retornado.
  • Quando utilizado o parâmetro G, não será possível utilizar o parâmetro Ni para especificar níveis territoriais avulsos.

Ni – para especificar níveis territoriais e suas unidades

O valor de Ni identifica o nível territorial (por exemplo N1 – Brasil, N2 – Grande Região, N3 – Unidade da Federação, N6 – Município, etc), e é seguido por uma seleção de unidades territoriais a serem consultadas. Este parâmetro pode ser utilizado mais de uma vez para especificar unidades territoriais em níveis distintos.

O parâmetro Ni pode ser seguido pela constante all para especificar todas as unidades territoriais deste nível disponíveis para a tabela.

Exemplo 1: /n3/all – especifica todas as unidades da federação.

Exemplo 2: /n6/all – especifica todos os municípios.

O parâmetro Ni pode ser seguido por uma lista de unidades territoriais especificadas por seus códigos IBGE (separados por vírgula ",").

Exemplo 3: /n3/33,35 – especifica as UFs Rio de Janeiro e São Paulo.

Exemplo 4: /n6/3304557,3550308 – especifica os municípios Rio de Janeiro e São Paulo.

O parâmetro Ni pode ser seguido pela expressão IN Nj antecedendo a lista de unidades territoriais, para que estas sejam tratadas como uma abrangência territorial.

Em outras palavras, estaremos selecionando unidades territoriais do nível Ni, contidas em unidades territoriais de um nível superior Nj.

Exemplo 5: /n6/in n3 11,12 - especifica os municípios (N6) contidos nas Unidades da Federação (N3) Rondônia e Acre.

Exemplo 6: /n3/in n2 3,4 – especifica as Unidades da Federação (N3) contidas nas Grandes Regiões (N2) Sudeste e Sul.

O parâmetro Ni pode ser utilizado mais de uma vez caso sejam selecionadas unidades territoriais em níveis distintos.

Exemplo 7: /n1/1/n2/1/n3/in n2 1 – especifica Brasil (N1/1), a Grande Região Norte (N2/1), e as UFs contidas na Grandes Região Norte (N3/IN N2 1).

Notas

  • A disponibilidade de dados para um determinado nível territorial deve ser consultada para cada tabela.
  • A consulta, por padrão, não retorna unidades territoriais extintas. Caso seja necessário obter valores também para territórios extintos, tanto para consultas do tipo /all quanto por código (por exemplo as UFs Fernando de Noronha - 20 e Guanabara - 34), deve-se acrescentar na lista de parâmetros da consulta /u/y.
  • Quando utilizado o parâmetro Ni, não será possível utilizar o parâmetro G para especificar uma visão territorial pré-definida.

Ci – para especificar as classificações da tabela e suas categorias

O valor de Ci identifica uma classificação da tabela (por exemplo C1 – Situação do domicílio, C2 – Sexo, C81 – Produtos da Lavoura Temporária, etc), e é seguido por uma seleção de categorias a serem consultadas.

O parâmetro Ci é opcional e, caso uma classificação não seja especificada, será assumida para ela a categoria que representa o total.

Se esta categoria não existir na classificação, a consulta retornará o símbolo de que os valores não se aplicam (".." , vide ao final).

O parâmetro Ci pode ser seguido pela constante all para especificar todas as categorias disponíveis para uma classificação, inclusive a categoria que representa o total.

Exemplo 1: /c81/all – especifica todos os produtos da lavoura temporária, incluindo o total.

O parâmetro Ci pode ser seguido pela constante allxt para especificar todas as categorias disponíveis para uma classificação, exceto a categoria que representa o total.

Exemplo 2: /c81/allxt – especifica todos os produtos da lavoura temporária, sem incluir o total.

O parâmetro Ci pode ser seguido por uma lista de categorias especificadas através de seus códigos, de forma individual (separados por vírgula ",") ou para compor uma soma (separadas por espaço " ").

Exemplo 3: /c81/2692,2702,2694 2695 – especifica os produtos da lavoura temporária arroz e feijão, e a soma de batata doce com batata inglesa.

Parâmetros para formatação dos dados

Além dos parâmetros para extração de dados anteriormente citados, a API SIDRA também possui parâmetros para definição da formatação dos dados recebidos.


H – para especificar se o resultado recebido será precedido por um registro de cabeçalho (header)

O registro de cabeçalho, quando presente, será o primeiro registro apresentado, e identificará o código e/ou o nome de cada uma das dimensões da tabela de resultado.

Especifique /h/y para receber o cabeçalho (valor default, caso o parâmetro h não seja especificado).
Especifique /h/n para não receber o cabeçalho.


F – para especificar o formato dos campos apresentados no resultado

Especifique /f/a para receber os códigos e os nomes dos descritores (valor padrão, caso o parâmetro f não seja especificado).
Especifique /f/c para receber apenas os códigos dos descritores.
Especifique /f/n para receber apenas os nomes dos descritores.
Especifique /f/u para receber o código e o nome das unidades territoriais consultadas, e o nome dos demais descritores.


D – para especificar com quantas casas decimais serão formatados os valores numéricos

Especifique /d/s para formatar os valores com o número de casas decimais padrão para cada variável (valor default, caso o parâmetro d não seja especificado).
Especifique /d/m para formatar os valores com o número de casas decimais máximo disponível para cada variável (maior precisão).
Especifique /d/0 a /d/9 para formatar os valores com um número fixo de casas decimais, entre 0 e 9.

O arquivo de resultado

Campos dos registros

Os dados serão recebidos no formato especificado, iniciando pelo registro de cabeçalho (quando requisitado) seguido pelos registros de valor.

Cada registro de valor contém, além do próprio valor de resultado, diversos campos para identificação deste registro, conforme a especificado pelo parâmetro F. Podem estar presentes os códigos e/ou os nomes dos descritores do valor em cada dimensão, e o código e/ou o nome da unidade de medida.

Os campos dos registros podem ser resumidos da seguinte forma:

  • O campo V indicando o valor do registro. Contém um número ou caractere especial, quando aplicável.
  • Os campos referentes à unidade de medida. O campo MC identifica o código da unidade de medida, e MN o seu nome.
  • Os campos de dimensão da tabela, que identificam cada registro conforme seu descritor. São códigos de 3 caracteres iniciados pela letra D, seguida por um dígito de sequência entre 1 e 9, e a letra C ou N para identificar um código ou nome (ex. D1C, D1N, D2C, D2N, etc).

  • Caso haja seleção de unidades territoriais de diferentes níveis territoriais (como no exemplo 7 da descrição do parâmetro Ni), o registro também incluirá campos de identificação do nível territorial, para que se saiba a que nível cada unidade territorial consultada pertence.

    O campo NC identifica o código do nível territorial, e NN identifica o nome do nível territorial.


Nota

O número de sequência de uma dimensão na resposta corresponde à ordem em que esta dimensão foi especificada na url de consulta.

Na consulta t/1612/c81/2702/p/last/v/allxp/n1/1, por exemplo, a dimensão D1C identificará o código da categoria, D2C o período e D3C a variável.

Caracteres especiais

Os valores consultados através da API Sidra podem eventualmente conter símbolos para representar valores especiais, em razão da natureza dos dados. Estes símbolos se encontram listados abaixo:

SímboloSignificado
- Zero absoluto, não resultante de um cálculo ou arredondamento.
Ex: Em determinado município não existem pessoas de 14 anos de idade sem instrução.
0 Zero resultante de um cálculo ou arredondamento.
Ex: A inflação do feijão em determinada Região Metropolitana foi 0.
Determinado município produziu 400 kg de sementes de girassol e os dados da tabela são expressos em toneladas.
X Valor inibido para não identificar o informante.
Ex: Determinado município só possui uma empresa produtora de cimento, logo o valor de sua produção deve ser inibido.
.. Valor não se aplica.
Ex: Não se pode obter o total da produção agrícola em determinado município quando os produtos agrícolas são contabilizados com unidades de medida distintas.
... Valor não disponível.
Ex: A produção de feijão em determinado município não foi pesquisada ou determinado município não existia no ano da pesquisa.
Letra A a Z
(exceto X)
Significa uma faixa de valores. Varia em função da tabela (se for o caso).
Ex: O nível de precisão da produção estimada de combustíveis está na faixa A (até 5%).
Formato de arquivo

O arquivo de resposta pode ser apresentado em formato JSON ou XML. A especificação do formato desejado pode ser feita por query string, ao final da URL, ou pelo campo accept do cabeçalho de requisição HTTP.

Caso o formato não seja especificado, o formato padrão utilizado será JSON. Se ambas as definições estiverem presentes, o formato definido em query string terá prevalência.


Por query string:

  • https://apisidra.ibge.gov.br/values/<consulta>?formato=json
  • https://apisidra.ibge.gov.br/values/<consulta>?formato=xml


Pelo campo accept do cabeçalho da requisição HTTP:

  • Accept: application/json
  • Accept: application/xml

a) Modelo de arquivo recebido no formato JSON

A solicitação de dados /t/1612/n1/1/c81/2702/p/2021/v/allxp/f/n/h/n no formato JSON retorna:

[{
    "NN": "Brasil",
    "MN": "Hectares",
    "V": "2765724",
    "D1N": "Brasil",
    "D2N": "Feijão (em grão)",
    "D3N": "2021",
    "D4N": "Área plantada"
},{
    "NN": "Brasil",
    "MN": "Hectares",
    "V": "2613086",
    "D1N": "Brasil",
    "D2N": "Feijão (em grão)",
    "D3N": "2021",
    "D4N": "Área colhida"
},{
    "NN": "Brasil",
    "MN": "Toneladas",
    "V": "2899864",
    "D1N": "Brasil",
    "D2N": "Feijão (em grão)",
    "D3N": "2021",
    "D4N": "Quantidade produzida"
},{
    "NN": "Brasil",
    "MN": "Quilogramas por Hectare",
    "V": "1110",
    "D1N": "Brasil",
    "D2N": "Feijão (em grão)",
    "D3N": "2021",
    "D4N": "Rendimento médio da produção"
},{
    "NN": "Brasil",
    "MN": "Mil Reais",
    "V": "12049373",
    "D1N": "Brasil",
    "D2N": "Feijão (em grão)",
    "D3N": "2021",
    "D4N": "Valor da produção"
}]
b) Modelo de arquivo recebido no formato XML

A solicitação de dados /t/1612/n1/1/c81/2702/p/2021/v/allxp/f/n/h/n no formato XML retorna:

<ArrayOfValorDescritoPorSuasDimensoes>
    <ValorDescritoPorSuasDimensoes>
        <V>2765724</V>
        <MN>Hectares</MN>
        <NN>Brasil</NN>
        <D1N>Brasil</D1N>
        <D2N>Feijão (em grão)</D2N>
        <D3N>2021</D3N>
        <D4N>Área plantada</D4N>
    </ValorDescritoPorSuasDimensoes>
    <ValorDescritoPorSuasDimensoes>
        <V>2613086</V>
        <MN>Hectares</MN>
        <NN>Brasil</NN>
        <D1N>Brasil</D1N>
        <D2N>Feijão (em grão)</D2N>
        <D3N>2021</D3N>
        <D4N>Área colhida</D4N>
    </ValorDescritoPorSuasDimensoes>
    <ValorDescritoPorSuasDimensoes>
        <V>2899864</V>
        <MN>Toneladas</MN>
        <NN>Brasil</NN>
        <D1N>Brasil</D1N>
        <D2N>Feijão (em grão)</D2N>
        <D3N>2021</D3N>
        <D4N>Quantidade produzida</D4N>
    </ValorDescritoPorSuasDimensoes>
    <ValorDescritoPorSuasDimensoes>
        <V>1110</V>
        <MN>Quilogramas por Hectare</MN>
        <NN>Brasil</NN>
        <D1N>Brasil</D1N>
        <D2N>Feijão (em grão)</D2N>
        <D3N>2021</D3N>
        <D4N>Rendimento médio da produção</D4N>
    </ValorDescritoPorSuasDimensoes>
    <ValorDescritoPorSuasDimensoes>
        <V>12049373</V>
        <MN>Mil Reais</MN>
        <NN>Brasil</NN>
        <D1N>Brasil</D1N>
        <D2N>Feijão (em grão)</D2N>
        <D3N>2021</D3N>
        <D4N>Valor da produção</D4N>
    </ValorDescritoPorSuasDimensoes>
</ArrayOfValorDescritoPorSuasDimensoes>

Nota

Para preservar a compatibilidade com aplicações legadas, caso o formato XML seja especficado pelo campo Accept do cabeçalho da requisição HTTP, mesmo dimensões não utilizadas pela tabela estarão presentes na resposta. Nesta situação, os campos referentes a estas dimensões serão identificados como nulos através do atributo i:nil (ex: <D1C i:nil="true"/>).

Caso seja de interesse a omissão de dimensões não utilizadas na resposta, por exemplo para reduzir o tamanho do arquivo recebido, utilize a especificação de formato XML através da query string ?formato=xml.

Exemplos de consultas

Veja a seguir exemplos dos dados recebidos sobre a produção de feijão, extraídos da tabela 1612 (os 4 primeiros não solicitam registro de cabeçalho):

a) Código e nome (parâmetros /t/1612/n1/1/v/allxp/p/2012/c81/2702/h/n)
D1C D1N D2C D2N D3C D3N D4C D4N MC MN V
1 Brasil 109 Área plantada 2012 2012 2702 Feijão (em grão) 1006 Hectares 3182815
1 Brasil 216 Área colhida 2012 2012 2702 Feijão (em grão) 1006 Hectares 2709485
1 Brasil 214 Quantidade produzida 2012 2012 2702 Feijão (em grão) 1017 Toneladas 2794854
1 Brasil 215 Valor da produção 2012 2012 2702 Feijão (em grão) 40 Mil Reais 6216876
b) Código (parâmetros /t/1612/n1/1/v/allxp/p/2012/c81/2702/f/c/h/n)
D1C D2C D3C D4C MC V
1 109 2012 2702 1006 3182815
1 216 2012 2702 1006 2709485
1 214 2012 2702 1017 2794854
1 215 2012 2702 40 6216876
c) Nome (parâmetros /t/1612/n1/1/v/allxp/p/2012/c81/2702/f/n/h/n)
D1N D2N D3N D4N MN V
Brasil Área plantada 2012 Feijão (em grão) Hectares 3182815
Brasil Área colhida 2012 Feijão (em grão) Hectares 2709485
Brasil Quantidade produzida 2012 Feijão (em grão) Toneladas 2794854
Brasil Valor da produção 2012 Feijão (em grão) Mil Reais 6216876

Observe nos exemplos que a ordem das dimensões recebidas respeita a ordem de especificação dos parâmetros, onde primeiro solicitamos a unidade territorial (/n1/1), em seguida as variáveis (/v/all), o período (/p/2012) e, por fim, a categoria 'feijão' da lavoura temporária (/c81/2702).

d) No exemplo a seguir, são solicitados os mesmos dados mas em ordem diferente (/t/1612/n1/1/c81/2702/p/2012/v/allxp/f/n/h/n).
D1N D2N D3N D4N MN V
Brasil Feijão (em grão) 2012 Área plantada Hectares 3182815
Brasil Feijão (em grão) 2012 Área colhida Hectares 2709485
Brasil Feijão (em grão) 2012 Quantidade produzida Toneladas 2794854
Brasil Feijão (em grão) 2012 Valor da produção Mil Reais 6216876
e) No exemplo a seguir, são solicitados dados para mais de um nível territorial (Brasil e Grandes Regiões).
Observe o nome do nível territorial precedendo os dados (/t/1612/n1/1/n2/all/c81/2702/p/2012/v/214/f/n).
NN D1N D2N D3N D4N MN V
Nível Territorial Brasil e Grande Região Lavoura temporária Ano Variável Unidade de Medida Valor
Brasil Brasil Feijão (em grão) 2012 Quantidade produzida Toneladas 2794854
Grande Região Norte Feijão (em grão) 2012 Quantidade produzida Toneladas 120679
Grande Região Nordeste Feijão (em grão) 2012 Quantidade produzida Toneladas 253362
Grande Região Sudeste Feijão (em grão) 2012 Quantidade produzida Toneladas 858398
Grande Região Sul Feijão (em grão) 2012 Quantidade produzida Toneladas 901663
Grande Região Centro-Oeste Feijão (em grão) 2012 Quantidade produzida Toneladas 660752
f) O exemplo a seguir solicita os mesmos dados do exemplo anterior, mas formata o resultado com os códigos ao invés dos nomes (/t/1612/n1/1/n2/all/c81/2702/p/2012/v/214/f/c).
NC D1C D2C D3C D4C MC V
Nível Territorial (Código) Brasil e Grande Região (Código) Lavoura temporária (Código) Ano (Código) Variável (Código) Unidade de Medida (Código) Valor
1 1 2702 2012 214 1017 2794854
2 1 2702 2012 214 1017 120679
2 2 2702 2012 214 1017 253362
2 3 2702 2012 214 1017 858398
2 4 2702 2012 214 1017 901663
2 5 2702 2012 214 1017 660752
g) O exemplo a seguir solicita os mesmos dados do exemplo e) acima, mas formata o resultado com os códigos e nomes das unidades territoriais e com os nomes dos demais descritores (/t/1612/n1/1/n2/all/c81/2702/p/2012/v/214/f/u).
NN D1C D1N D2N D3N D4N MN V
Nível Territorial Brasil e Grande Região (Código) Brasil e Grande Região Lavoura temporária Ano Variável Unidade de Medida Valor
Brasil 1 Brasil Feijão (em grão) 2012 Quantidade produzida Toneladas 2794854
Grande Região 1 Norte Feijão (em grão) 2012 Quantidade produzida Toneladas 120679
Grande Região 2 Nordeste Feijão (em grão) 2012 Quantidade produzida Toneladas 253362
Grande Região 3 Sudeste Feijão (em grão) 2012 Quantidade produzida Toneladas 858398
Grande Região 4 Sul Feijão (em grão) 2012 Quantidade produzida Toneladas 901663
Grande Região 5 Centro-Oeste Feijão (em grão) 2012 Quantidade produzida Toneladas 660752