Skip to main content
GET
/
discovery
/
scan
/
{market_type}
/
{ticker}
cURL
curl --request GET \
  --url 'https://api.edgeful.com/discovery/scan/<market_type>/<ticker>' \
  --header 'Authorization: Bearer <api-key>'
import requests

url = "https://api.edgeful.com/discovery/scan/<market_type>/<ticker>"
headers = {"Authorization": "Bearer <api-key>"}

response = requests.get(url, headers=headers)
print(response.json())
const url = "https://api.edgeful.com/discovery/scan/<market_type>/<ticker>";
const options = {
method: "GET",
headers: { Authorization: "Bearer <api-key>" },
};

const response = await fetch(url, options);
const data = await response.json();
console.log(data);
<?php
$ch = curl_init("https://api.edgeful.com/discovery/scan/<market_type>/<ticker>");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer <api-key>"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
package main

import (
"fmt"
"io"
"net/http"
)

func main() {
req, _ := http.NewRequest("GET", "https://api.edgeful.com/discovery/scan/<market_type>/<ticker>", nil)
req.Header.Set("Authorization", "Bearer <api-key>")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.edgeful.com/discovery/scan/<market_type>/<ticker>"))
.header("Authorization", "Bearer <api-key>")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
require "net/http"
require "uri"

uri = URI("https://api.edgeful.com/discovery/scan/<market_type>/<ticker>")
request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer <api-key>"

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request)
end
puts response.body
{
  "market": "<string>",
  "ticker": "<string>",
  "session": "<string>",
  "lookback": "<string>",
  "minimum_score": 123,
  "generated_at": "<string>",
  "cached": true,
  "coverage": {
    "total_outcomes": 123,
    "enabled_outcomes": 123,
    "catalog_version": "<string>"
  },
  "rows": [
    {
      "outcome_id": "<string>",
      "family": "<string>",
      "family_label": "<string>",
      "subreport": "<string>",
      "subreport_label": "<string>",
      "outcome_label": "<string>",
      "description": "<string>",
      "denominator": "<string>",
      "success_definition": "<string>",
      "lookback": "<string>",
      "score": 123,
      "hit_rate": 123,
      "sample_size": 123,
      "score_components": {
        "edge": 123,
        "trend_bonus": 123,
        "sample_penalty": 123,
        "peak_penalty": 123,
        "position": 123,
        "range_width": 123
      },
      "activity": {
        "recent_successes": 123,
        "recent_sample_size": 123,
        "score_30d_ago": 123,
        "score_delta_30d": 123
      },
      "drill_through": {
        "href": "<string>",
        "report_slug": "<string>",
        "report_variant": "<string>",
        "params": {}
      },
      "customizations": [
        {
          "label": "<string>",
          "default_value": "<string>"
        }
      ]
    }
  ],
  "status": "ready",
  "data_through": "<string>"
}
{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}

Authorizations

Authorization
string
header
required

Use your Edgeful API key as the bearer token. In the API Reference authorization drawer, paste only the key (for example, ef_live_<random>).

Path Parameters

ticker
string
required

ticker symbol. format varies by market_type: stocks use a plain symbol (e.g., SPY), forex uses a 6-character pair (e.g., EURUSD), crypto uses a contract pair (e.g., BTCUSD), futures uses the root symbol (e.g., ES).

Examples:

"SPY"

"EURUSD"

"BTCUSD"

"ES"

market_type
enum<string>
required

market venue for the ticker. one of: forex, futures, crypto, stock. determines supported symbols and whether session-based intraday aggregation is available.

Available options:
forex,
futures,
crypto,
stock
Examples:

"stock"

"forex"

Query Parameters

session
string
default:new_york

preset session id (or shared id) to scan; defaults to new_york.

start_time
string | null

optional custom session start time, HH:MM:SS, in the requested timezone; provide together with end_time and timezone.

end_time
string | null

optional custom session end time, HH:MM:SS, in the requested timezone; provide together with start_time and timezone.

timezone
string | null

optional IANA timezone used to aggregate a custom session window.

lookback
enum<string>
default:6mo

scoring window for the ranking: 1mo, 3mo, 6mo, or 1y; defaults to 6mo.

Available options:
1mo,
3mo,
6mo,
1y
minimum_score
number
default:50

only include reports scoring at least this value (0-100); defaults to 50, lower to 0 to see every scored report.

Required range: 0 <= x <= 100

Response

Successful Response

market
string
required
ticker
string
required
session
string
required
lookback
string
required
minimum_score
number
required
generated_at
string
required
cached
boolean
required
coverage
DiscoveryCoverageResponse · object
required
rows
DiscoveryRowResponse · object[]
required
status
string
default:ready
Allowed value: "ready"
data_through
string | null