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

# Read Optimizer Result

> Read ranked summaries or selected-result settings, trades and chart data with rendering hints.

Responses fit 48,000 bytes. Chart curves are sampled; full-result metrics remain authoritative.
Holdout and training are separate. Missing/nonfinite values are explicit, never replaced with zero.



## OpenAPI

````yaml /openapi-public.json get /v1/optimizer/results
openapi: 3.1.0
info:
  title: Edgeful API
  description: >-
    Public API reference for Edgeful market analysis. The bearer token is your
    Edgeful API key. Reports support 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
  - name: settings
  - name: custom reports
  - name: optimizer
paths:
  /v1/optimizer/results:
    get:
      tags:
        - optimizer
      summary: Read Optimizer Result
      description: >-
        Read ranked summaries or selected-result settings, trades and chart data
        with rendering hints.


        Responses fit 48,000 bytes. Chart curves are sampled; full-result
        metrics remain authoritative.

        Holdout and training are separate. Missing/nonfinite values are
        explicit, never replaced with zero.
      operationId: read_optimizer_result_v1_optimizer_results_get
      parameters:
        - name: source
          in: query
          required: false
          schema:
            enum:
              - run
              - saved
              - favorite
              - template
            type: string
            description: Record source from the records endpoint.
            default: run
            title: Source
          description: Record source from the records endpoint.
        - name: id
          in: query
          required: true
          schema:
            type: string
            format: uuid
            description: >-
              Record ID returned by the records endpoint or completed job
              run_id.
            title: Id
          description: Record ID returned by the records endpoint or completed job run_id.
        - name: result_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                minLength: 1
                maxLength: 128
              - type: 'null'
            description: Candidate ID from a summary page; required for run/saved detail.
            title: Result Id
          description: Candidate ID from a summary page; required for run/saved detail.
        - name: section
          in: query
          required: false
          schema:
            enum:
              - summary
              - settings
              - trades
              - equity
              - drawdown
              - monthly
              - weekday
            type: string
            description: Summary page or one selected-result detail/chart section.
            default: summary
            title: Section
          description: Summary page or one selected-result detail/chart section.
        - name: dataset
          in: query
          required: false
          schema:
            enum:
              - training
              - holdout
            type: string
            description: >-
              Base or holdout data. The training selector returns full_period
              for templates, template favorites and unvalidated runs; read the
              returned dataset label. Missing holdout is unavailable.
            default: training
            title: Dataset
          description: >-
            Base or holdout data. The training selector returns full_period for
            templates, template favorites and unvalidated runs; read the
            returned dataset label. Missing holdout is unavailable.
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            maximum: 100
            minimum: 1
            description: Results per page (maximum 20), or trades per page (maximum 100).
            default: 5
            title: Limit
          description: Results per page (maximum 20), or trades per page (maximum 100).
        - name: offset
          in: query
          required: false
          schema:
            type: integer
            maximum: 100000
            minimum: 0
            description: Continuation offset from the previous page.
            default: 0
            title: Offset
          description: Continuation offset from the previous page.
        - name: points
          in: query
          required: false
          schema:
            type: integer
            maximum: 200
            minimum: 2
            description: Maximum sampled equity/drawdown points, including endpoints.
            default: 200
            title: Points
          description: Maximum sampled equity/drawdown points, including endpoints.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OptimizerResult'
        '401':
          description: Missing, invalid or revoked API key.
        '403':
          description: >-
            Requires active All Access and, for mutations, credential write
            permission.
        '404':
          description: Record or job is missing or belongs to another member.
        '409':
          description: >-
            Active job: Retry-After is present; retry the same request_id later.
            Accepted request_id with different settings: no Retry-After; use a
            new ID.
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
                minimum: 1
        '413':
          description: Request body exceeds 16 KiB or snapshot exceeds 8 KiB.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '429':
          description: Shared member optimizer budget exhausted. Follow Retry-After.
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
                minimum: 1
        '503':
          description: >-
            Capacity or admission controls unavailable. Follow Retry-After;
            reuse request_id.
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
                minimum: 1
      security:
        - BearerAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |-
            curl --request GET \
              --url 'https://api.edgeful.com/v1/optimizer/results?id=<id>' \
              --header 'Authorization: Bearer <api-key>'
        - lang: python
          label: Python
          source: |-
            import requests

            url = "https://api.edgeful.com/v1/optimizer/results?id=<id>"
            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/v1/optimizer/results?id=<id>";
            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/v1/optimizer/results?id=<id>");

            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/v1/optimizer/results?id=<id>", 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/v1/optimizer/results?id=<id>"))
                .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/v1/optimizer/results?id=<id>")

            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:
    OptimizerResult:
      properties:
        source:
          type: string
          enum:
            - run
            - saved
            - favorite
            - template
          title: Source
        id:
          type: string
          title: Id
        metadata:
          additionalProperties:
            $ref: '#/components/schemas/JsonValue'
          type: object
          title: Metadata
        items:
          items:
            additionalProperties:
              $ref: '#/components/schemas/JsonValue'
            type: object
          type: array
          title: Items
          description: >-
            Candidate summaries, trades or chart points. Finite metrics are
            numbers; missing values are null; nonfinite values are {value: null,
            status: unavailable|positive_infinity|negative_infinity}. Chart y
            values use null with value_status. metrics.drawdownProfitPct is max
            drawdown as a percentage of net profit, null when the period was not
            profitable.
        empty_result:
          anyOf:
            - additionalProperties:
                $ref: '#/components/schemas/JsonValue'
              type: object
            - type: 'null'
          title: Empty Result
          description: >-
            Present when a run kept no candidates: the reason, how many
            strategies were tested, and each enabled filter's threshold against
            the best value any strategy achieved.
        page:
          anyOf:
            - $ref: '#/components/schemas/OptimizerPage'
            - type: 'null'
        result:
          anyOf:
            - additionalProperties:
                $ref: '#/components/schemas/JsonValue'
              type: object
            - type: 'null'
          title: Result
        dataset:
          anyOf:
            - type: string
              enum:
                - training
                - holdout
                - full_period
            - type: 'null'
          title: Dataset
        requested_dataset:
          anyOf:
            - type: string
            - type: 'null'
          title: Requested Dataset
        available:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Available
        reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Reason
        presentation:
          anyOf:
            - additionalProperties:
                $ref: '#/components/schemas/JsonValue'
              type: object
            - type: 'null'
          title: Presentation
          description: >-
            Rendering hints: type, data reference, axes, title and units. No
            generated image.
        sampling:
          anyOf:
            - additionalProperties:
                $ref: '#/components/schemas/JsonValue'
              type: object
            - type: 'null'
          title: Sampling
        aggregation:
          anyOf:
            - type: string
            - type: 'null'
          title: Aggregation
        request_settings:
          $ref: '#/components/schemas/JsonValue'
        score_explanation:
          anyOf:
            - type: string
            - type: 'null'
          title: Score Explanation
      additionalProperties: true
      type: object
      required:
        - source
        - id
        - metadata
        - items
      title: OptimizerResult
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    JsonValue: {}
    OptimizerPage:
      properties:
        offset:
          type: integer
          title: Offset
        total:
          type: integer
          title: Total
        returned:
          type: integer
          title: Returned
        has_more:
          type: boolean
          title: Has More
        next_offset:
          anyOf:
            - type: integer
            - type: 'null'
          title: Next Offset
        byte_limited:
          type: boolean
          title: Byte Limited
      type: object
      required:
        - offset
        - total
        - returned
        - has_more
        - next_offset
        - byte_limited
      title: OptimizerPage
    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: >-
        Send your Edgeful API key in the Authorization header as `Bearer
        <api-key>` (for example, `Bearer ef_live_<random>`).

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.