curl --no-buffer --request GET \
--url 'https://api.edgeful.com/screener_pubsub?market_type=<market_type>' \
--header 'Authorization: Bearer <api-key>'import requests
url = "https://api.edgeful.com/screener_pubsub?market_type=<market_type>"
headers = {"Authorization": "Bearer <api-key>"}
response = requests.get(url, headers=headers, stream=True)
for line in response.iter_lines():
if line:
print(line.decode())const url = "https://api.edgeful.com/screener_pubsub?market_type=<market_type>";
const response = await fetch(url, {
method: "GET",
headers: { Authorization: "Bearer <api-key>" },
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
console.log(decoder.decode(value));
}<?php
$ch = curl_init("https://api.edgeful.com/screener_pubsub?market_type=<market_type>");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer <api-key>"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 1);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $data) {
echo $data;
ob_flush();
flush();
return strlen($data);
});
curl_exec($ch);
curl_close($ch);package main
import (
"bufio"
"fmt"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.edgeful.com/screener_pubsub?market_type=<market_type>", nil)
req.Header.Set("Authorization", "Bearer <api-key>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
scanner := bufio.NewScanner(resp.Body)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.io.BufferedReader;
import java.io.InputStreamReader;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.edgeful.com/screener_pubsub?market_type=<market_type>"))
.header("Authorization", "Bearer <api-key>")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<java.io.InputStream> response = client.send(
request, HttpResponse.BodyHandlers.ofInputStream());
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(response.body()))) {
reader.lines().forEach(System.out::println);
}require "net/http"
require "uri"
uri = URI("https://api.edgeful.com/screener_pubsub?market_type=<market_type>")
request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer <api-key>"
Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request) do |response|
response.read_body do |chunk|
print chunk
end
end
end{
"detail": {
"detail": "Live data is not available on your current plan. Please upgrade to the Pro or All Access plan to gain access.",
"code": "live_data_not_allowed"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}screener pubsub
live stream of screener data for the requested market and session. standard sessions send complete snapshots of the requested tickers and exact report keys immediately, then push updates as prices change. omitted filters include all data. events carrying screener data are keyed by ticker symbol. custom futures sessions include root-level lifecycle fields and may send metadata-only queued, warming, or closed-market events between ticker payloads.
curl --no-buffer --request GET \
--url 'https://api.edgeful.com/screener_pubsub?market_type=<market_type>' \
--header 'Authorization: Bearer <api-key>'import requests
url = "https://api.edgeful.com/screener_pubsub?market_type=<market_type>"
headers = {"Authorization": "Bearer <api-key>"}
response = requests.get(url, headers=headers, stream=True)
for line in response.iter_lines():
if line:
print(line.decode())const url = "https://api.edgeful.com/screener_pubsub?market_type=<market_type>";
const response = await fetch(url, {
method: "GET",
headers: { Authorization: "Bearer <api-key>" },
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
console.log(decoder.decode(value));
}<?php
$ch = curl_init("https://api.edgeful.com/screener_pubsub?market_type=<market_type>");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer <api-key>"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 1);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $data) {
echo $data;
ob_flush();
flush();
return strlen($data);
});
curl_exec($ch);
curl_close($ch);package main
import (
"bufio"
"fmt"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.edgeful.com/screener_pubsub?market_type=<market_type>", nil)
req.Header.Set("Authorization", "Bearer <api-key>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
scanner := bufio.NewScanner(resp.Body)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.io.BufferedReader;
import java.io.InputStreamReader;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.edgeful.com/screener_pubsub?market_type=<market_type>"))
.header("Authorization", "Bearer <api-key>")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<java.io.InputStream> response = client.send(
request, HttpResponse.BodyHandlers.ofInputStream());
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(response.body()))) {
reader.lines().forEach(System.out::println);
}require "net/http"
require "uri"
uri = URI("https://api.edgeful.com/screener_pubsub?market_type=<market_type>")
request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer <api-key>"
Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request) do |response|
response.read_body do |chunk|
print chunk
end
end
end{
"detail": {
"detail": "Live data is not available on your current plan. Please upgrade to the Pro or All Access plan to gain access.",
"code": "live_data_not_allowed"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Use your Edgeful API key as the bearer token. In the API Reference authorization drawer, paste only the key (for example, ef_live_<random>).
Query Parameters
type of market to stream data for. use all to stream stocks and futures together.
all, stock, futures trading session to subscribe to; one of NY, LONDON, ASIA. ignored when start_time and end_time are provided.
NY, LONDON, ASIA custom session start time, HH:MM, interpreted in timezone. provide together with end_time; futures only.
custom session end time, HH:MM, interpreted in timezone. provide together with start_time; futures only.
IANA timezone used to interpret custom session bounds. choose one of the preset live-session timezones from the docs dropdown.
America/New_York, Europe/London, Asia/Tokyo set to true when the custom session spans midnight.
comma-separated ticker symbols (e.g., ES,NQ,CL). optional for standard sessions; required for custom sessions. omitted or empty includes all standard-session tickers.
optional comma-separated exact report keys for standard sessions (e.g., gap_fill_50,opening_range_15min). omitted or empty includes all reports. custom sessions ignore this filter.
Response
Successful Response
Was this page helpful?