curl --request POST \
--url https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/inflation_items \
--header 'Content-Type: application/json' \
--header 'apikey: <api-key>' \
--data '
{
"p_level": 1,
"p_item": null,
"p_from": null,
"p_to": null
}
'import requests
url = "https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/inflation_items"
payload = {
"p_level": 1,
"p_item": None,
"p_from": None,
"p_to": None
}
headers = {
"apikey": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {apikey: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({p_level: 1, p_item: null, p_from: null, p_to: null})
};
fetch('https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/inflation_items', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/inflation_items",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'p_level' => 1,
'p_item' => null,
'p_from' => null,
'p_to' => null
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"apikey: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/inflation_items"
payload := strings.NewReader("{\n \"p_level\": 1,\n \"p_item\": null,\n \"p_from\": null,\n \"p_to\": null\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("apikey", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/inflation_items")
.header("apikey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"p_level\": 1,\n \"p_item\": null,\n \"p_from\": null,\n \"p_to\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/inflation_items")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["apikey"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"p_level\": 1,\n \"p_item\": null,\n \"p_from\": null,\n \"p_to\": null\n}"
response = http.request(request)
puts response.read_body[
{
"reference_month": "2023-12-25",
"item_code": 123,
"item_number": "<string>",
"item_name": "<string>",
"level": 123,
"parent_number": "<string>",
"weight": 123,
"change_month": 123,
"contribution": 123,
"change_ytd": 123,
"change_12m": 123,
"sidra_table": 123,
"source": "<string>"
}
]{
"code": "22023",
"message": "<string>",
"details": "<string>",
"hint": "<string>"
}{
"code": "22023",
"message": "<string>",
"details": "<string>",
"hint": "<string>"
}{
"code": "22023",
"message": "<string>",
"details": "<string>",
"hint": "<string>"
}inflation_items
The IPCA item tree from IBGE SIDRA (tables 1419 from 2012-01, 7060 from 2020-01), one row per (month, node): weight in the basket, change in the month, year-to-date and 12-month change AS PUBLISHED (percent), plus contribution = weight × change_month / 100 in percentage points of the headline (the one derived column; NULL when either input is NULL). Levels: 0 general index, 1 the nine groups (default), 2 subgroups, 3 items, 4 subitems. Sum contributions within ONE level only — a group and its subgroups are the same money twice. parent_number is read off IBGE’s structure number. item_code changed with the 2020-01 structure (sidra_table says which); item_number is the continuity. Unknown level/item raises 22023. Default window 36 months; more than 1000 rows RAISES 22023 (never trimmed): narrow the window or pin p_item.
Row cap. A window producing more than 1000 rows raises SQLSTATE 22023 naming this function. Nothing is trimmed to fit — PostgREST would silently cut the response at 1000 and a cut-short series is indistinguishable from one that simply ends. This function does not page — narrow the window instead.
curl --request POST \
--url https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/inflation_items \
--header 'Content-Type: application/json' \
--header 'apikey: <api-key>' \
--data '
{
"p_level": 1,
"p_item": null,
"p_from": null,
"p_to": null
}
'import requests
url = "https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/inflation_items"
payload = {
"p_level": 1,
"p_item": None,
"p_from": None,
"p_to": None
}
headers = {
"apikey": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {apikey: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({p_level: 1, p_item: null, p_from: null, p_to: null})
};
fetch('https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/inflation_items', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/inflation_items",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'p_level' => 1,
'p_item' => null,
'p_from' => null,
'p_to' => null
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"apikey: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/inflation_items"
payload := strings.NewReader("{\n \"p_level\": 1,\n \"p_item\": null,\n \"p_from\": null,\n \"p_to\": null\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("apikey", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/inflation_items")
.header("apikey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"p_level\": 1,\n \"p_item\": null,\n \"p_from\": null,\n \"p_to\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/inflation_items")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["apikey"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"p_level\": 1,\n \"p_item\": null,\n \"p_from\": null,\n \"p_to\": null\n}"
response = http.request(request)
puts response.read_body[
{
"reference_month": "2023-12-25",
"item_code": 123,
"item_number": "<string>",
"item_name": "<string>",
"level": 123,
"parent_number": "<string>",
"weight": 123,
"change_month": 123,
"contribution": 123,
"change_ytd": 123,
"change_12m": 123,
"sidra_table": 123,
"source": "<string>"
}
]{
"code": "22023",
"message": "<string>",
"details": "<string>",
"hint": "<string>"
}{
"code": "22023",
"message": "<string>",
"details": "<string>",
"hint": "<string>"
}{
"code": "22023",
"message": "<string>",
"details": "<string>",
"hint": "<string>"
}Authorizations
The publishable key (sb_publishable_…), on every request. It is NOT a JWT — sending it as Authorization: Bearer is rejected as an invalid JWT. It identifies the project, not you, and maps to the Postgres anon role.
Body
Response
The result set, oldest first. An unknown id is an empty array, not a 404 and never a guessed value.
Was this page helpful?