curl --request POST \
--url https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/fund_documents \
--header 'Content-Type: application/json' \
--header 'apikey: <api-key>' \
--data '
{
"p_cnpj": "<string>",
"p_from": null,
"p_to": null,
"p_tipo": null
}
'import requests
url = "https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/fund_documents"
payload = {
"p_cnpj": "<string>",
"p_from": None,
"p_to": None,
"p_tipo": 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_cnpj: '<string>', p_from: null, p_to: null, p_tipo: null})
};
fetch('https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/fund_documents', 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/fund_documents",
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_cnpj' => '<string>',
'p_from' => null,
'p_to' => null,
'p_tipo' => 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/fund_documents"
payload := strings.NewReader("{\n \"p_cnpj\": \"<string>\",\n \"p_from\": null,\n \"p_to\": null,\n \"p_tipo\": 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/fund_documents")
.header("apikey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"p_cnpj\": \"<string>\",\n \"p_from\": null,\n \"p_to\": null,\n \"p_tipo\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/fund_documents")
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_cnpj\": \"<string>\",\n \"p_from\": null,\n \"p_to\": null,\n \"p_tipo\": null\n}"
response = http.request(request)
puts response.read_body[
{
"fnet_id": 123,
"fund_name": "<string>",
"categoria": "<string>",
"tipo_documento": "<string>",
"especie": "<string>",
"reference_raw": "<string>",
"reference_date": "2023-12-25",
"delivered_at": "2023-11-07T05:31:56Z",
"versao": 123,
"modalidade": "<string>",
"status": "<string>",
"fetched_at": "2023-11-07T05:31:56Z",
"source_url": "<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>"
}fund_documents
Every B3 Fundos.NET (FNET) document LINKED to one fund, newest delivery first: fnet_id, fund_name (FNET’s label, never a join key), categoria, tipo_documento, especie, reference_raw / reference_date, delivered_at (São Paulo time, as printed), versao, modalidade (AP original, RE voluntary restatement, RC CVM-required), status (AC active, IC superseded, CC cancelled — AS OF fetched_at) and source_url, FNET’s public download link for the id. Metadata only. FNET rows carry NO CNPJ: a document belongs to this fund because FNET returned it for cnpjFundo = p_cnpj in SILO’s fortnightly per-fund sweep, never because of its name — so a document delivered since that fund’s last sweep is not listed yet (coverage() fnet_documents). Each version is its own fnet_id; restatement pairs are api.fund_restatements. Window = delivery date, default the 12 months before p_to (or today); p_tipo matches tipo_documento exactly. A CNPJ that is not 14 digits raises 22023. More than 1000 rows RAISES 22023 (never trimmed): narrow the window or pin p_tipo.
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/fund_documents \
--header 'Content-Type: application/json' \
--header 'apikey: <api-key>' \
--data '
{
"p_cnpj": "<string>",
"p_from": null,
"p_to": null,
"p_tipo": null
}
'import requests
url = "https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/fund_documents"
payload = {
"p_cnpj": "<string>",
"p_from": None,
"p_to": None,
"p_tipo": 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_cnpj: '<string>', p_from: null, p_to: null, p_tipo: null})
};
fetch('https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/fund_documents', 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/fund_documents",
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_cnpj' => '<string>',
'p_from' => null,
'p_to' => null,
'p_tipo' => 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/fund_documents"
payload := strings.NewReader("{\n \"p_cnpj\": \"<string>\",\n \"p_from\": null,\n \"p_to\": null,\n \"p_tipo\": 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/fund_documents")
.header("apikey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"p_cnpj\": \"<string>\",\n \"p_from\": null,\n \"p_to\": null,\n \"p_tipo\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/fund_documents")
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_cnpj\": \"<string>\",\n \"p_from\": null,\n \"p_to\": null,\n \"p_tipo\": null\n}"
response = http.request(request)
puts response.read_body[
{
"fnet_id": 123,
"fund_name": "<string>",
"categoria": "<string>",
"tipo_documento": "<string>",
"especie": "<string>",
"reference_raw": "<string>",
"reference_date": "2023-12-25",
"delivered_at": "2023-11-07T05:31:56Z",
"versao": 123,
"modalidade": "<string>",
"status": "<string>",
"fetched_at": "2023-11-07T05:31:56Z",
"source_url": "<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, newest delivery first. An unknown id is an empty array, not a 404 and never a guessed value.
Was this page helpful?