curl --request POST \
--url https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/option_chain \
--header 'Content-Type: application/json' \
--header 'apikey: <api-key>' \
--data '
{
"p_prefix": "<string>",
"p_expiry_from": "2023-12-25",
"p_trade_date": null,
"p_limit": 100
}
'import requests
url = "https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/option_chain"
payload = {
"p_prefix": "<string>",
"p_expiry_from": "2023-12-25",
"p_trade_date": None,
"p_limit": 100
}
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_prefix: '<string>',
p_expiry_from: '2023-12-25',
p_trade_date: null,
p_limit: 100
})
};
fetch('https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/option_chain', 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/option_chain",
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_prefix' => '<string>',
'p_expiry_from' => '2023-12-25',
'p_trade_date' => null,
'p_limit' => 100
]),
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/option_chain"
payload := strings.NewReader("{\n \"p_prefix\": \"<string>\",\n \"p_expiry_from\": \"2023-12-25\",\n \"p_trade_date\": null,\n \"p_limit\": 100\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/option_chain")
.header("apikey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"p_prefix\": \"<string>\",\n \"p_expiry_from\": \"2023-12-25\",\n \"p_trade_date\": null,\n \"p_limit\": 100\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/option_chain")
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_prefix\": \"<string>\",\n \"p_expiry_from\": \"2023-12-25\",\n \"p_trade_date\": null,\n \"p_limit\": 100\n}"
response = http.request(request)
puts response.read_body[
{
"codneg": "<string>",
"side": "<string>",
"strike": 123,
"expiry": "2023-12-25",
"trade_date": "2023-12-25",
"close": 123,
"open": 123,
"high": 123,
"low": 123,
"trades": 123,
"quantity": 123,
"volume": 123,
"isin": "<string>",
"spec": "<string>",
"underlying_ticker": "<string>",
"strike_points": 123,
"strike_correction": "<string>",
"distribution_number": "<string>",
"market": "<string>",
"board": "<string>",
"term_days": "<string>",
"short_name": "<string>",
"currency": "<string>",
"average": 123,
"bid": 123,
"ask": 123,
"quotation_factor": 123,
"contract_points_raw": "<string>",
"fetched_at": "2023-11-07T05:31:56Z"
}
]{
"code": "22023",
"message": "<string>",
"details": "<string>",
"hint": "<string>"
}{
"code": "22023",
"message": "<string>",
"details": "<string>",
"hint": "<string>"
}{
"code": "22023",
"message": "<string>",
"details": "<string>",
"hint": "<string>"
}option_chain
One session’s option chain for a REQUIRED codneg prefix (>= 3 chars; else it raises). side = call/put from tpmerc 070/080. p_trade_date NULL = latest option-segment session. underlying_ticker resolves the option row’s ISIN (published: CODISI carries the underlying’s ISIN) to the same session’s cash codneg; NULL when the underlying had no cash print that day. Rows clamped to 1..2000. Original market, board, term and remaining quote/contract fields are preserved; contract_points_raw retains PTOEXE before six-decimal decoding. fetched_at is warehouse time, not a source-publication vintage.
Tier ceiling. Rows are CLAMPED, silently, to 200 for anonymous callers and 2000 for signed-in ones; a p_limit above the ceiling is lowered to it rather than refused. This is the opposite of the 22023 row cap the paging functions raise — here nothing tells you the result was cut, so treat a result of exactly 200 (or 2000) rows as probably truncated.
curl --request POST \
--url https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/option_chain \
--header 'Content-Type: application/json' \
--header 'apikey: <api-key>' \
--data '
{
"p_prefix": "<string>",
"p_expiry_from": "2023-12-25",
"p_trade_date": null,
"p_limit": 100
}
'import requests
url = "https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/option_chain"
payload = {
"p_prefix": "<string>",
"p_expiry_from": "2023-12-25",
"p_trade_date": None,
"p_limit": 100
}
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_prefix: '<string>',
p_expiry_from: '2023-12-25',
p_trade_date: null,
p_limit: 100
})
};
fetch('https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/option_chain', 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/option_chain",
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_prefix' => '<string>',
'p_expiry_from' => '2023-12-25',
'p_trade_date' => null,
'p_limit' => 100
]),
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/option_chain"
payload := strings.NewReader("{\n \"p_prefix\": \"<string>\",\n \"p_expiry_from\": \"2023-12-25\",\n \"p_trade_date\": null,\n \"p_limit\": 100\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/option_chain")
.header("apikey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"p_prefix\": \"<string>\",\n \"p_expiry_from\": \"2023-12-25\",\n \"p_trade_date\": null,\n \"p_limit\": 100\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1/rpc/option_chain")
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_prefix\": \"<string>\",\n \"p_expiry_from\": \"2023-12-25\",\n \"p_trade_date\": null,\n \"p_limit\": 100\n}"
response = http.request(request)
puts response.read_body[
{
"codneg": "<string>",
"side": "<string>",
"strike": 123,
"expiry": "2023-12-25",
"trade_date": "2023-12-25",
"close": 123,
"open": 123,
"high": 123,
"low": 123,
"trades": 123,
"quantity": 123,
"volume": 123,
"isin": "<string>",
"spec": "<string>",
"underlying_ticker": "<string>",
"strike_points": 123,
"strike_correction": "<string>",
"distribution_number": "<string>",
"market": "<string>",
"board": "<string>",
"term_days": "<string>",
"short_name": "<string>",
"currency": "<string>",
"average": 123,
"bid": 123,
"ask": 123,
"quotation_factor": 123,
"contract_points_raw": "<string>",
"fetched_at": "2023-11-07T05:31:56Z"
}
]{
"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?