> ## 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.

# live wip stream

> live stream of What's in Play data for all tickers in the requested market and session. sends the current data immediately on connect, then pushes updates as market data changes. each event is a JSON object keyed by ticker symbol, with per-report analysis nested under each ticker. supports optional ticker filtering, report customization variants, and custom session windows for futures.



## OpenAPI

````yaml /openapi-public.json get /live/{market_type}/wip
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: live data
paths:
  /live/{market_type}/wip:
    get:
      tags:
        - live data
      summary: live wip stream
      description: >-
        live stream of What's in Play data for all tickers in the requested
        market and session. sends the current data immediately on connect, then
        pushes updates as market data changes. each event is a JSON object keyed
        by ticker symbol, with per-report analysis nested under each ticker.
        supports optional ticker filtering, report customization variants, and
        custom session windows for futures.
      operationId: whats_in_play_stream_live__market_type__wip_get
      parameters:
        - name: market_type
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/WipStreamMarketTypeEnum'
            description: >-
              type of market to stream data for. use `all` to stream both stocks
              and futures together.
            examples:
              - futures
              - stock
          description: >-
            type of market to stream data for. use `all` to stream both stocks
            and futures together.
        - name: session
          in: query
          required: false
          schema:
            type: string
            description: >-
              standard session to stream; one of `NY`, `LONDON`, `ASIA`. ignored
              when `start_time` and `end_time` are provided.
            enum:
              - NY
              - LONDON
              - ASIA
            default: NY
            title: Session
          description: >-
            standard session to stream; one of `NY`, `LONDON`, `ASIA`. ignored
            when `start_time` and `end_time` are provided.
        - name: start_time
          in: query
          required: false
          schema:
            type: string
            description: >-
              custom session start time, `HH:MM`, interpreted in `timezone`.
              provide together with `end_time` to define a custom intraday
              window; futures only.
            default: ''
            title: Start Time
          description: >-
            custom session start time, `HH:MM`, interpreted in `timezone`.
            provide together with `end_time` to define a custom intraday window;
            futures only.
        - name: end_time
          in: query
          required: false
          schema:
            type: string
            description: >-
              custom session end time, `HH:MM`, interpreted in `timezone`.
              provide together with `start_time` to define a custom intraday
              window; futures only.
            default: ''
            title: End Time
          description: >-
            custom session end time, `HH:MM`, interpreted in `timezone`. provide
            together with `start_time` to define a custom intraday window;
            futures only.
        - name: overnight
          in: query
          required: false
          schema:
            type: boolean
            description: >-
              set to `true` when the custom session spans midnight (i.e.,
              `start_time` is after `end_time`).
            default: false
            title: Overnight
          description: >-
            set to `true` when the custom session spans midnight (i.e.,
            `start_time` is after `end_time`).
        - name: timezone
          in: query
          required: false
          schema:
            type: string
            description: >-
              IANA timezone used to interpret `start_time` and `end_time` for
              custom sessions. choose one of the preset live-session timezones
              from the docs dropdown.
            enum:
              - America/New_York
              - Europe/London
              - Asia/Tokyo
            default: America/New_York
            title: Timezone
          description: >-
            IANA timezone used to interpret `start_time` and `end_time` for
            custom sessions. choose one of the preset live-session timezones
            from the docs dropdown.
        - name: date_range
          in: query
          required: false
          schema:
            enum:
              - 3mo
              - 6mo
            type: string
            description: >-
              historical lookback window attached to each ticker's report data;
              `3mo` or `6mo`.
            default: 6mo
            title: Date Range
          description: >-
            historical lookback window attached to each ticker's report data;
            `3mo` or `6mo`.
        - name: tickers
          in: query
          required: false
          schema:
            type: string
            description: >-
              comma-separated list of ticker symbols to include (e.g.,
              `ES,NQ,CL`). empty string streams all available tickers.
            default: ''
            title: Tickers
          description: >-
            comma-separated list of ticker symbols to include (e.g.,
            `ES,NQ,CL`). empty string streams all available tickers.
        - name: customizations
          in: query
          required: false
          schema:
            type: string
            description: >-
              report variant preferences as `report_type:value` pairs (e.g.,
              `gap_fill_standard:100,initial_balance_standard:60min_wick`).
            default: ''
            title: Customizations
          description: >-
            report variant preferences as `report_type:value` pairs (e.g.,
            `gap_fill_standard:100,initial_balance_standard:60min_wick`).
        - name: reports
          in: query
          required: false
          schema:
            type: string
            description: >-
              comma-separated list of report types to include (e.g.,
              `gap_fill_standard,initial_balance_standard`). empty string
              includes all reports.
            default: ''
            title: Reports
          description: >-
            comma-separated list of report types to include (e.g.,
            `gap_fill_standard,initial_balance_standard`). empty string includes
            all reports.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
            text/event-stream:
              schema:
                type: string
              example: >+
                data: {"market_status":"market
                hours","ES":{"gap_fill_standard_100":{"current_price":5275.25,"historical_probability":0.64}}}

        '403':
          description: Valid API key, but the current plan does not include live data.
          content:
            application/json:
              examples:
                live_data_not_allowed:
                  summary: Live data not included on Essential
                  value:
                    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
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - BearerAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |-
            curl --no-buffer --request GET \
              --url 'https://api.edgeful.com/live/<market_type>/wip' \
              --header 'Authorization: Bearer <api-key>'
        - lang: python
          label: Python
          source: |-
            import requests

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

            response = requests.get(url, headers=headers, stream=True)
            for line in response.iter_lines():
                if line:
                    print(line.decode())
        - lang: javascript
          label: JavaScript
          source: |-
            const url = "https://api.edgeful.com/live/<market_type>/wip";

            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));
            }
        - lang: php
          label: PHP
          source: >-
            <?php

            $ch = curl_init("https://api.edgeful.com/live/<market_type>/wip");

            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);
        - lang: go
          label: Go
          source: |-
            package main

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

            func main() {
                req, _ := http.NewRequest("GET", "https://api.edgeful.com/live/<market_type>/wip", 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())
                }
            }
        - lang: java
          label: Java
          source: |-
            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/live/<market_type>/wip"))
                .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);
            }
        - lang: ruby
          label: Ruby
          source: >-
            require "net/http"

            require "uri"


            uri = URI("https://api.edgeful.com/live/<market_type>/wip")

            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
components:
  schemas:
    WipStreamMarketTypeEnum:
      type: string
      enum:
        - all
        - futures
        - stock
      title: WipStreamMarketTypeEnum
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    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
  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>`).

````