curl --request POST \
--url https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/screen_late_filers \
--header 'Content-Type: application/json' \
--header 'apikey: <api-key>' \
--data '
{
"p_months": 12,
"p_end": null,
"p_min_days_late": 5,
"p_min_late": 2,
"p_family": null
}
'import requests
url = "https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/screen_late_filers"
payload = {
"p_months": 12,
"p_end": None,
"p_min_days_late": 5,
"p_min_late": 2,
"p_family": 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_days_late: 5, p_min_late: 2, p_family: null})
};
fetch('https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/screen_late_filers', 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_late_filers",
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_days_late' => 5,
'p_min_late' => 2,
'p_family' => 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_late_filers"
payload := strings.NewReader("{\n \"p_months\": 12,\n \"p_end\": null,\n \"p_min_days_late\": 5,\n \"p_min_late\": 2,\n \"p_family\": 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_late_filers")
.header("apikey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"p_months\": 12,\n \"p_end\": null,\n \"p_min_days_late\": 5,\n \"p_min_late\": 2,\n \"p_family\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/screen_late_filers")
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_days_late\": 5,\n \"p_min_late\": 2,\n \"p_family\": null\n}"
response = http.request(request)
puts response.read_body[
{
"cnpj": "<string>",
"fund_family": "<string>",
"fund_name": "<string>",
"window_from": "2023-12-25",
"window_to": "2023-12-25",
"informes": 123,
"informes_late": 123,
"max_days_late": 123,
"median_lag_days": 123,
"last_late_reference": "2023-12-25",
"deadline_rule": "<string>",
"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_late_filers
SIGNAL, NOT A VERDICT. FIIs and FIDCs whose monthly informe (FNET ‘Informe Mensal Estruturado’, first delivery of a versao 1 document) reached B3 Fundos.NET at least p_min_days_late days after the deadline Resolução CVM 175 states for it, in at least p_min_late of the p_months reference months ending at p_end. The deadline is cited, not assumed: FIDC — Anexo Normativo II, art. 27, III; FII — Anexo Normativo III, art. 36, I; both 15 days after the end of the reference month, counted here as calendar days (the text says dias, not dias úteis). A month is measured only from the first full month after the family’s adaptation deadline (2024-12 FIDC, 2025-07 FII); a window ending earlier raises 22023. SILO applies no holiday calendar, so a deadline on a weekend or holiday may legitimately roll forward — p_min_days_late (default 5) absorbs that. informes counts the months measured, informes_late those past the threshold, max_days_late the worst, median_lag_days the fund’s median delivery lag after month end, deadline_rule the citation. A late delivery is a timestamp compared with a rule, not a finding: the same row comes from an extension CVM granted, an upload that FNET timestamped after a delivery made by other means, or an administrator transfer that delayed one month for a whole book; a fund with several classes is measured on its earliest filing. A month with no informe in the register is NOT counted (FNET history is partial; absence is screen_silent_filers). Fund identity is the cnpjFundo link only, never fund_name. Defaults 12 months, 5 days, 2 late months. Every row carries screen and params. More than 1000 rows RAISES 22023 (never trimmed): raise p_min_late or p_min_days_late, or pin p_family.
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_late_filers \
--header 'Content-Type: application/json' \
--header 'apikey: <api-key>' \
--data '
{
"p_months": 12,
"p_end": null,
"p_min_days_late": 5,
"p_min_late": 2,
"p_family": null
}
'import requests
url = "https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/screen_late_filers"
payload = {
"p_months": 12,
"p_end": None,
"p_min_days_late": 5,
"p_min_late": 2,
"p_family": 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_days_late: 5, p_min_late: 2, p_family: null})
};
fetch('https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/screen_late_filers', 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_late_filers",
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_days_late' => 5,
'p_min_late' => 2,
'p_family' => 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_late_filers"
payload := strings.NewReader("{\n \"p_months\": 12,\n \"p_end\": null,\n \"p_min_days_late\": 5,\n \"p_min_late\": 2,\n \"p_family\": 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_late_filers")
.header("apikey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"p_months\": 12,\n \"p_end\": null,\n \"p_min_days_late\": 5,\n \"p_min_late\": 2,\n \"p_family\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/screen_late_filers")
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_days_late\": 5,\n \"p_min_late\": 2,\n \"p_family\": null\n}"
response = http.request(request)
puts response.read_body[
{
"cnpj": "<string>",
"fund_family": "<string>",
"fund_name": "<string>",
"window_from": "2023-12-25",
"window_to": "2023-12-25",
"informes": 123,
"informes_late": 123,
"max_days_late": 123,
"median_lag_days": 123,
"last_late_reference": "2023-12-25",
"deadline_rule": "<string>",
"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?