curl --request POST \
--url https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/screen_restatements \
--header 'Content-Type: application/json' \
--header 'apikey: <api-key>' \
--data '
{
"p_months": 12,
"p_end": null,
"p_min_restatements": 3,
"p_min_rate_pct": 20,
"p_modalidade": null
}
'import requests
url = "https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/screen_restatements"
payload = {
"p_months": 12,
"p_end": None,
"p_min_restatements": 3,
"p_min_rate_pct": 20,
"p_modalidade": 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_months: 12,
p_end: null,
p_min_restatements: 3,
p_min_rate_pct: 20,
p_modalidade: null
})
};
fetch('https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/screen_restatements', 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/screen_restatements",
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_months' => 12,
'p_end' => null,
'p_min_restatements' => 3,
'p_min_rate_pct' => 20,
'p_modalidade' => 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/screen_restatements"
payload := strings.NewReader("{\n \"p_months\": 12,\n \"p_end\": null,\n \"p_min_restatements\": 3,\n \"p_min_rate_pct\": 20,\n \"p_modalidade\": 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/screen_restatements")
.header("apikey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"p_months\": 12,\n \"p_end\": null,\n \"p_min_restatements\": 3,\n \"p_min_rate_pct\": 20,\n \"p_modalidade\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/screen_restatements")
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_months\": 12,\n \"p_end\": null,\n \"p_min_restatements\": 3,\n \"p_min_rate_pct\": 20,\n \"p_modalidade\": null\n}"
response = http.request(request)
puts response.read_body[
{
"cnpj": "<string>",
"tipo_fundo": "<string>",
"fund_name": "<string>",
"window_from": "2023-12-25",
"window_to": "2023-12-25",
"documents": 123,
"restatements": 123,
"restatements_re": 123,
"restatements_rc": 123,
"restatement_pct": 123,
"last_restated_at": "2023-11-07T05:31:56Z",
"screen": "<string>",
"params": {}
}
]{
"code": "22023",
"message": "<string>",
"details": "<string>",
"hint": "<string>"
}{
"code": "22023",
"message": "<string>",
"details": "<string>",
"hint": "<string>"
}{
"code": "22023",
"message": "<string>",
"details": "<string>",
"hint": "<string>"
}screen_restatements
SIGNAL, NOT A VERDICT. Funds whose B3 Fundos.NET (FNET) re-filings — documents with versao > 1 — in the trailing p_months of delivery days (ending p_end, default today) number at least p_min_restatements AND make up at least p_min_rate_pct of the fund’s documents in the window. restatements_re (voluntary, Reapresentação Espontânea) and restatements_rc (required by CVM, Reapresentação por Exigência) split them as FNET publishes modalidade; p_modalidade counts only one kind. A fund is known ONLY by its cnpjFundo link (the CNPJ SILO queried FNET with) — never by fund_name, which is FNET’s label, served for reading. The same pattern comes from routine corrections of typos, an administrator or custodian migration that re-submits a whole book, the resolution-175 adaptation, a FNET template change forcing re-submission, one error cascading through consecutive informes, or a CVM supervision sweep that required re-filings across an administrator’s funds; an RC says CVM asked, not what was wrong. Documents not yet linked by the fortnightly sweep and history before SILO’s first crawl are not counted (coverage() fnet_documents). Defaults 12 months, 3 re-filings, 20%. Every row carries screen and params. More than 1000 rows RAISES 22023 (never trimmed): raise the thresholds or pin p_modalidade.
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/screen_restatements \
--header 'Content-Type: application/json' \
--header 'apikey: <api-key>' \
--data '
{
"p_months": 12,
"p_end": null,
"p_min_restatements": 3,
"p_min_rate_pct": 20,
"p_modalidade": null
}
'import requests
url = "https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/screen_restatements"
payload = {
"p_months": 12,
"p_end": None,
"p_min_restatements": 3,
"p_min_rate_pct": 20,
"p_modalidade": 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_months: 12,
p_end: null,
p_min_restatements: 3,
p_min_rate_pct: 20,
p_modalidade: null
})
};
fetch('https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/screen_restatements', 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/screen_restatements",
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_months' => 12,
'p_end' => null,
'p_min_restatements' => 3,
'p_min_rate_pct' => 20,
'p_modalidade' => 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/screen_restatements"
payload := strings.NewReader("{\n \"p_months\": 12,\n \"p_end\": null,\n \"p_min_restatements\": 3,\n \"p_min_rate_pct\": 20,\n \"p_modalidade\": 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/screen_restatements")
.header("apikey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"p_months\": 12,\n \"p_end\": null,\n \"p_min_restatements\": 3,\n \"p_min_rate_pct\": 20,\n \"p_modalidade\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/screen_restatements")
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_months\": 12,\n \"p_end\": null,\n \"p_min_restatements\": 3,\n \"p_min_rate_pct\": 20,\n \"p_modalidade\": null\n}"
response = http.request(request)
puts response.read_body[
{
"cnpj": "<string>",
"tipo_fundo": "<string>",
"fund_name": "<string>",
"window_from": "2023-12-25",
"window_to": "2023-12-25",
"documents": 123,
"restatements": 123,
"restatements_re": 123,
"restatements_rc": 123,
"restatement_pct": 123,
"last_restated_at": "2023-11-07T05:31:56Z",
"screen": "<string>",
"params": {}
}
]{
"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?