> ## Documentation Index
> Fetch the complete documentation index at: https://edgeful.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# discovery scan

> scores every report outcome for a ticker on a 0-100 scale and ranks them best first -- the data behind edgeful's discovery page. each row carries its score, its raw historical hit rate, sample size, labels, recent activity and trend, and a drill-through href to the underlying report. warm targets return from a precomputed cache; a cold ticker is computed on demand, which can take a few minutes on the first request.



## OpenAPI

````yaml /openapi-public.json get /discovery/scan/{market_type}/{ticker}
openapi: 3.1.0
info:
  title: Edgeful API
  description: >-
    Public API reference for Edgeful market analysis calculations. The bearer
    token is your Edgeful API key: paste the key itself in the docs playground.
    Report responses include row-level output in `detailed` only when your plan
    includes row-level detail.
  version: 1.0.0
servers:
  - url: https://api.edgeful.com
    description: Production
security:
  - BearerAuth: []
tags:
  - name: reports
  - name: discovery
  - name: live data
paths:
  /discovery/scan/{market_type}/{ticker}:
    get:
      tags:
        - discovery
      summary: discovery scan
      description: >-
        scores every report outcome for a ticker on a 0-100 scale and ranks them
        best first -- the data behind edgeful's discovery page. each row carries
        its score, its raw historical hit rate, sample size, labels, recent
        activity and trend, and a drill-through href to the underlying report.
        warm targets return from a precomputed cache; a cold ticker is computed
        on demand, which can take a few minutes on the first request.
      operationId: discovery_scan_discovery_scan__market_type___ticker__get
      parameters:
        - name: ticker
          in: path
          required: true
          schema:
            type: string
            description: >-
              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
            title: Ticker
          description: >-
            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).
        - name: market_type
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/MarketTypeEnum'
            description: >-
              market venue for the ticker. one of: `forex`, `futures`, `crypto`,
              `stock`. determines supported symbols and whether session-based
              intraday aggregation is available.
            examples:
              - stock
              - forex
          description: >-
            market venue for the ticker. one of: `forex`, `futures`, `crypto`,
            `stock`. determines supported symbols and whether session-based
            intraday aggregation is available.
        - name: session
          in: query
          required: false
          schema:
            type: string
            description: preset session id (or shared id) to scan; defaults to new_york.
            default: new_york
            title: Session
          description: preset session id (or shared id) to scan; defaults to new_york.
        - name: start_time
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              optional custom session start time, HH:MM:SS, in the requested
              timezone; provide together with end_time and timezone.
            title: Start Time
          description: >-
            optional custom session start time, HH:MM:SS, in the requested
            timezone; provide together with end_time and timezone.
        - name: end_time
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              optional custom session end time, HH:MM:SS, in the requested
              timezone; provide together with start_time and timezone.
            title: End Time
          description: >-
            optional custom session end time, HH:MM:SS, in the requested
            timezone; provide together with start_time and timezone.
        - name: timezone
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: optional IANA timezone used to aggregate a custom session window.
            title: Timezone
          description: optional IANA timezone used to aggregate a custom session window.
        - name: lookback
          in: query
          required: false
          schema:
            enum:
              - 1mo
              - 3mo
              - 6mo
              - 1y
            type: string
            description: >-
              scoring window for the ranking: 1mo, 3mo, 6mo, or 1y; defaults to
              6mo.
            default: 6mo
            title: Lookback
          description: >-
            scoring window for the ranking: 1mo, 3mo, 6mo, or 1y; defaults to
            6mo.
        - name: minimum_score
          in: query
          required: false
          schema:
            type: number
            maximum: 100
            minimum: 0
            description: >-
              only include reports scoring at least this value (0-100); defaults
              to 50, lower to 0 to see every scored report.
            default: 50
            title: Minimum Score
          description: >-
            only include reports scoring at least this value (0-100); defaults
            to 50, lower to 0 to see every scored report.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DiscoveryScanResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - BearerAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |-
            curl --request GET \
              --url 'https://api.edgeful.com/discovery/scan/<market_type>/<ticker>' \
              --header 'Authorization: Bearer <api-key>'
        - lang: python
          label: Python
          source: >-
            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())
        - lang: javascript
          label: JavaScript
          source: >-
            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);
        - lang: php
          label: PHP
          source: >-
            <?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;
        - lang: go
          label: Go
          source: |-
            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))
            }
        - lang: java
          label: Java
          source: >-
            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());
        - lang: ruby
          label: Ruby
          source: >-
            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
components:
  schemas:
    MarketTypeEnum:
      type: string
      enum:
        - forex
        - futures
        - crypto
        - stock
      title: MarketTypeEnum
    DiscoveryScanResponse:
      properties:
        status:
          type: string
          const: ready
          title: Status
          default: ready
        market:
          type: string
          title: Market
        ticker:
          type: string
          title: Ticker
        session:
          type: string
          title: Session
        lookback:
          type: string
          title: Lookback
        minimum_score:
          type: number
          title: Minimum Score
        data_through:
          anyOf:
            - type: string
            - type: 'null'
          title: Data Through
        generated_at:
          type: string
          title: Generated At
        cached:
          type: boolean
          title: Cached
        coverage:
          $ref: '#/components/schemas/DiscoveryCoverageResponse'
        rows:
          items:
            $ref: '#/components/schemas/DiscoveryRowResponse'
          type: array
          title: Rows
      type: object
      required:
        - market
        - ticker
        - session
        - lookback
        - minimum_score
        - generated_at
        - cached
        - coverage
        - rows
      title: DiscoveryScanResponse
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    DiscoveryCoverageResponse:
      properties:
        total_outcomes:
          type: integer
          title: Total Outcomes
        enabled_outcomes:
          type: integer
          title: Enabled Outcomes
        catalog_version:
          type: string
          title: Catalog Version
      type: object
      required:
        - total_outcomes
        - enabled_outcomes
        - catalog_version
      title: DiscoveryCoverageResponse
    DiscoveryRowResponse:
      properties:
        outcome_id:
          type: string
          title: Outcome Id
        family:
          type: string
          title: Family
        family_label:
          type: string
          title: Family Label
        subreport:
          type: string
          title: Subreport
        subreport_label:
          type: string
          title: Subreport Label
        outcome_label:
          type: string
          title: Outcome Label
        description:
          type: string
          title: Description
        denominator:
          type: string
          title: Denominator
        success_definition:
          type: string
          title: Success Definition
        lookback:
          type: string
          title: Lookback
        score:
          type: number
          title: Score
        hit_rate:
          type: number
          title: Hit Rate
        sample_size:
          type: integer
          title: Sample Size
        customizations:
          items:
            $ref: '#/components/schemas/DiscoveryCustomizationResponse'
          type: array
          title: Customizations
        score_components:
          $ref: '#/components/schemas/DiscoveryScoreComponentsResponse'
        activity:
          $ref: '#/components/schemas/DiscoveryActivityResponse'
        drill_through:
          $ref: '#/components/schemas/DiscoveryDrillThroughResponse'
      type: object
      required:
        - outcome_id
        - family
        - family_label
        - subreport
        - subreport_label
        - outcome_label
        - description
        - denominator
        - success_definition
        - lookback
        - score
        - hit_rate
        - sample_size
        - score_components
        - activity
        - drill_through
      title: DiscoveryRowResponse
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    DiscoveryCustomizationResponse:
      properties:
        label:
          type: string
          title: Label
        default_value:
          type: string
          title: Default Value
      type: object
      required:
        - label
        - default_value
      title: DiscoveryCustomizationResponse
    DiscoveryScoreComponentsResponse:
      properties:
        edge:
          type: number
          title: Edge
        trend_bonus:
          type: number
          title: Trend Bonus
        sample_penalty:
          type: number
          title: Sample Penalty
        peak_penalty:
          type: number
          title: Peak Penalty
        position:
          type: number
          title: Position
        range_width:
          type: number
          title: Range Width
      type: object
      required:
        - edge
        - trend_bonus
        - sample_penalty
        - peak_penalty
        - position
        - range_width
      title: DiscoveryScoreComponentsResponse
    DiscoveryActivityResponse:
      properties:
        recent_successes:
          type: integer
          title: Recent Successes
        recent_sample_size:
          type: integer
          title: Recent Sample Size
        score_30d_ago:
          anyOf:
            - type: number
            - type: 'null'
          title: Score 30D Ago
        score_delta_30d:
          anyOf:
            - type: number
            - type: 'null'
          title: Score Delta 30D
      type: object
      required:
        - recent_successes
        - recent_sample_size
      title: DiscoveryActivityResponse
    DiscoveryDrillThroughResponse:
      properties:
        href:
          type: string
          title: Href
        report_slug:
          type: string
          title: Report Slug
        report_variant:
          type: string
          title: Report Variant
        params:
          additionalProperties:
            anyOf:
              - type: string
              - type: integer
              - type: number
          type: object
          title: Params
      type: object
      required:
        - href
        - report_slug
        - report_variant
      title: DiscoveryDrillThroughResponse
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: >-
        Use your Edgeful API key as the bearer token. In the API Reference
        authorization drawer, paste only the key (for example,
        `ef_live_<random>`).

````