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

# save custom session

> create a custom session, or update the one whose id is given. start_time and end_time are HH:MM in the IANA timezone and must differ; other sessions stay untouched. returns the saved session and the full list. this changes your account, and Edgeful shows the change after a reload. requires the key's write permission.



## OpenAPI

````yaml /openapi-public.json post /v1/settings/custom-sessions
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
paths:
  /v1/settings/custom-sessions:
    post:
      tags:
        - settings
      summary: save custom session
      description: >-
        create a custom session, or update the one whose id is given. start_time
        and end_time are HH:MM in the IANA timezone and must differ; other
        sessions stay untouched. returns the saved session and the full list.
        this changes your account, and Edgeful shows the change after a reload.
        requires the key's write permission.
      operationId: save_custom_session
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomSessionSaveRequest'
            examples:
              default:
                summary: a power hour session in New York time
                value:
                  name: power hour
                  start_time: '15:00'
                  end_time: '16:00'
                  timezone: America/New_York
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomSessionSaveResponse'
        '400':
          description: >-
            The request names a value Edgeful cannot use; `detail` says which
            values are valid.
          content:
            application/json:
              examples:
                refused:
                  summary: refused
                  value:
                    detail: NQX is not a futures ticker Edgeful knows.
        '403':
          description: >-
            Valid API key, but the account has no API-enabled subscription or
            the key's writes are off.
          content:
            application/json:
              examples:
                missing_entitlement:
                  summary: missing entitlement
                  value:
                    detail:
                      detail: No active subscription with API access found.
                      code: missing_entitlement
                writes_disabled:
                  summary: writes disabled
                  value:
                    detail:
                      detail: >-
                        Enable writes for this API key or connected Claude in
                        the API dashboard.
                      code: writes_disabled
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '429':
          description: >-
            The account's settings write budget is exhausted; wait `Retry-After`
            seconds. Refused attempts count too.
          content:
            application/json:
              examples:
                write_budget_exhausted:
                  summary: write budget exhausted
                  value:
                    detail:
                      detail: Settings write limit reached. Try again shortly.
                      code: write_budget_exhausted
          headers:
            Retry-After:
              description: seconds to wait before sending the write again.
              schema:
                type: integer
        '503':
          description: The write budget could not be checked; retry shortly.
          content:
            application/json:
              examples:
                write_limits_unavailable:
                  summary: write limits unavailable
                  value:
                    detail:
                      detail: >-
                        Settings write limits are temporarily unavailable. Try
                        again shortly.
                      code: write_limits_unavailable
      security:
        - BearerAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |-
            curl --request POST \
              --url 'https://api.edgeful.com/v1/settings/custom-sessions' \
              --header 'Authorization: Bearer <api-key>' \
              --header 'Content-Type: application/json' \
              --data '{"name": "power hour", "start_time": "15:00", "end_time": "16:00", "timezone": "America/New_York"}'
        - lang: python
          label: Python
          source: >-
            import requests


            url = "https://api.edgeful.com/v1/settings/custom-sessions"

            headers = {"Authorization": "Bearer <api-key>"}

            payload = {'name': 'power hour', 'start_time': '15:00', 'end_time':
            '16:00', 'timezone': 'America/New_York'}


            response = requests.post(url, headers=headers, json=payload)

            print(response.json())
        - lang: javascript
          label: JavaScript
          source: |-
            const url = "https://api.edgeful.com/v1/settings/custom-sessions";
            const options = {
              method: "POST",
              headers: { Authorization: "Bearer <api-key>", "Content-Type": "application/json" },
              body: JSON.stringify({"name": "power hour", "start_time": "15:00", "end_time": "16:00", "timezone": "America/New_York"}),
            };

            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/settings/custom-sessions");

            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");

            curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer
            <api-key>", "Content-Type: application/json"]);

            curl_setopt($ch, CURLOPT_POSTFIELDS, '{"name": "power hour",
            "start_time": "15:00", "end_time": "16:00", "timezone":
            "America/New_York"}');

            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"
                "strings"
            )

            func main() {
                req, _ := http.NewRequest("POST", "https://api.edgeful.com/v1/settings/custom-sessions", strings.NewReader(`{"name": "power hour", "start_time": "15:00", "end_time": "16:00", "timezone": "America/New_York"}`))
                req.Header.Set("Authorization", "Bearer <api-key>")
                req.Header.Set("Content-Type", "application/json")
                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/settings/custom-sessions"))
                .header("Authorization", "Bearer <api-key>")
                .header("Content-Type", "application/json")
                .method("POST", HttpRequest.BodyPublishers.ofString("{\"name\": \"power hour\", \"start_time\": \"15:00\", \"end_time\": \"16:00\", \"timezone\": \"America/New_York\"}"))
                .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/settings/custom-sessions")

            request = Net::HTTP::Post.new(uri)

            request["Authorization"] = "Bearer <api-key>"

            request["Content-Type"] = "application/json"

            request.body = '{"name": "power hour", "start_time": "15:00",
            "end_time": "16:00", "timezone": "America/New_York"}'


            response = Net::HTTP.start(uri.hostname, uri.port, use_ssl:
            uri.scheme == "https") do |http|
              http.request(request)
            end

            puts response.body
components:
  schemas:
    CustomSessionSaveRequest:
      properties:
        name:
          type: string
          maxLength: 80
          minLength: 1
          title: Name
          description: session name, trimmed.
        start_time:
          type: string
          pattern: ^([01]\d|2[0-3]):[0-5]\d$
          title: Start Time
          description: start of the session as HH:MM in the timezone.
        end_time:
          type: string
          pattern: ^([01]\d|2[0-3]):[0-5]\d$
          title: End Time
          description: >-
            end of the session as HH:MM in the timezone; must differ from
            start_time.
        timezone:
          type: string
          maxLength: 80
          minLength: 1
          title: Timezone
          description: IANA timezone the clocks are read in.
          default: America/New_York
        id:
          anyOf:
            - type: string
              maxLength: 80
              minLength: 1
            - type: 'null'
          title: Id
          description: id of the custom session to update; omit to create one.
      additionalProperties: false
      type: object
      required:
        - name
        - start_time
        - end_time
      title: CustomSessionSaveRequest
    CustomSessionSaveResponse:
      properties:
        status:
          type: string
          title: Status
          description: updated or unchanged.
        session:
          $ref: '#/components/schemas/CustomSession'
          description: the saved session.
        custom_sessions:
          items:
            $ref: '#/components/schemas/CustomSession'
          type: array
          title: Custom Sessions
          description: every custom session after this write.
        changed:
          $ref: '#/components/schemas/SessionsChanged'
          description: what this write changed.
      additionalProperties: true
      type: object
      required:
        - status
        - session
        - custom_sessions
        - changed
      title: CustomSessionSaveResponse
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    CustomSession:
      properties:
        id:
          type: string
          title: Id
          description: custom session id.
        name:
          anyOf:
            - type: string
            - type: 'null'
          title: Name
          description: session name.
        start_time:
          anyOf:
            - type: string
            - type: 'null'
          title: Start Time
          description: start as HH:MM.
        end_time:
          anyOf:
            - type: string
            - type: 'null'
          title: End Time
          description: end as HH:MM.
        timezone:
          anyOf:
            - type: string
            - type: 'null'
          title: Timezone
          description: IANA timezone.
        excludedDataTypes:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Excludeddatatypes
          description: data types the session excludes; empty for sessions saved here.
      additionalProperties: true
      type: object
      required:
        - id
      title: CustomSession
    SessionsChanged:
      properties:
        saved:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Saved
          description: ids saved.
        removed:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Removed
          description: ids removed.
      additionalProperties: true
      type: object
      title: SessionsChanged
    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.