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

# Submit reported metrics

> Endpoint for organizations report metrics.
Accepts a list of metrics that span 1-day, 1-hour or 5-minute intervals of data.



## OpenAPI

````yaml /openapi.yaml post /v2/organizations/reported-metrics/
openapi: 3.0.3
info:
  title: Glass Market API
  version: 1.0.0
  x-logo:
    url: https://api.glassmarkets.io/static/black.png
    backgroundColor: '#FFFFFF'
    altText: Glass Market API
  description: >

    The GlassMarkets API serves the data behind the GlassMarkets app: market
    data

    collected from crypto exchanges, and market-making data for the assets your

    organizations work on. Market makers also use it to submit the metrics they

    report.


    The base URL is `https://api.glassmarkets.io`. Requests and responses are
    JSON,

    and times are ISO 8601 in UTC. `bps` means basis points: 1 bps is 0.01%.


    ## Authentication


    1. Log in with `POST /v1/login/`, sending your email and password. The
    response
       contains a `token` and its `expiry`.
    2. Send the token on every request in the `Authorization` header:
       `Authorization: Token <token>`.

    A token expires one day after its last use, and at most 30 days after login.

    With `"remember_me": true` at login, it stays valid for at least 7 days. A

    request with a missing, expired or revoked token returns `401`: log in
    again.

    `POST /v1/logout/` revokes the token.


    If your account has two-factor authentication, login returns `202` with a

    `challenge_id`. Send it with your authentication code to `POST
    /v1/totp/login/`

    to get the token.


    ## Quickstart


    1. Log in:

       ```
       curl -X POST https://api.glassmarkets.io/v1/login/ \
         -H "Content-Type: application/json" \
         -d '{"email": "you@example.com", "password": "..."}'
       ```

    2. List your organizations with `GET /v1/organizations/`. Each organization
       lists its assets. Each asset lists the exchanges it trades on (`slug`) and
       the pairs on each exchange. Use these exact values in other requests.

       ```
       curl https://api.glassmarkets.io/v1/organizations/ \
         -H "Authorization: Token <token>"
       ```

    3. Call an endpoint with those values, for example the daily trading volume
    of
       one of your assets:

       ```
       curl -G https://api.glassmarkets.io/v2/metrics/volume/ \
         -H "Authorization: Token <token>" \
         -d assets=BTC -d interval=1d \
         -d time_start=2026-09-01T00:00:00Z -d time_end=2026-09-08T00:00:00Z
       ```

    ## Errors


    Invalid input returns `400` with the problem per field, for example

    `{"interval": ["This field is required."]}`. Other errors return a status

    code with a `detail` message: `401` when you are not logged in, `403` when
    your

    account may not use the endpoint, and `404` when the resource does not
    exist.
servers:
  - url: https://api.glassmarkets.io
security: []
tags:
  - name: Authentication
    description: Log in, log out and read the current session.
  - name: Organizations
    description: Your organizations, and the assets, exchanges and pairs each one covers.
  - name: Reported metrics
    description: Volume, depth and spread that market makers report for their assets.
  - name: Trusted metrics
    description: >-
      Volume, depth and spread that Shield measures directly from market makers'
      exchange accounts.
  - name: Market maker metrics
    description: >-
      Market-maker volume, depth, spread, uptime and coverage, combining trusted
      and reported data.
  - name: Targets
    description: >-
      Market-making targets per asset, exchange and pair, and whether they are
      met.
  - name: Market data
    description: >-
      Exchange market data for your assets: volume, spread, order book depth,
      slippage, uptime, futures and more.
  - name: Leaderboard
    description: Trading pairs across exchanges, ranked by market data.
  - name: Loans
    description: Token loans to market makers for your assets.
  - name: RFQ
    description: >-
      Requests for quotes: a project invites market makers to propose
      market-making terms for its token.
  - name: Account
    description: Manage your password, passkeys and two-factor authentication.
paths:
  /v2/organizations/reported-metrics/:
    post:
      tags:
        - Reported metrics
      summary: Submit reported metrics
      description: >-
        Endpoint for organizations report metrics.

        Accepts a list of metrics that span 1-day, 1-hour or 5-minute intervals
        of data.
      operationId: v2_organizations_reported_metrics_post
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/OrganizationReportedMetricsRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationReportedMetricsIngestResponse'
          description: ''
        '400':
          content:
            application/json:
              schema: {}
              examples:
                EmptyBody:
                  value:
                    message: Request body must contain at least one metric object
                  summary: Empty body
                InvalidItem:
                  value:
                    - {}
                    - asset:
                        - >-
                          FOO is not valid. Please check /v1/organizations/
                          endpoint for valid asset symbols
                  summary: One entry per item sent, empty for valid items
          description: The body is not a non-empty list, or an item is invalid.
      security:
        - tokenAuth: []
components:
  schemas:
    OrganizationReportedMetricsRequest:
      type: object
      properties:
        organization:
          type: string
          description: >-
            Organization slug. Available organizations are returned in the
            /v1/organizations endpoint
        asset:
          type: string
          description: >-
            Asset symbol. Available assets are returned in the /v1/organizations
            endpoint. You cannot submit data for unsupported assets
        exchange:
          type: string
          description: >-
            Exchange slug. Supported exchanges are returned in the
            /v1/organizations endpoint, but you can also submit data for
            unsupported exchanges
        pair:
          type: string
          description: >-
            Pair. Supported pairs are returned in the /v1/organizations
            endpoint, but you can also submit data for unsupported pairs
        ts_iso:
          type: string
          format: date-time
          description: >-
            UTC timestamp in ISO format. For daily data (default),
            2025-08-27T00:00:00Z encompasses data from 12:00 am to 11:59 pm on
            27/08/2025. For hourly data, 2025-08-27T13:00:00Z encompasses data
            from 1:00 pm to 1:59 pm on 27/08/2025. For 5-minute data,
            2025-08-27T13:05:00Z encompasses data from 1:05 pm to 1:09 pm on
            27/08/2025.
        interval:
          allOf:
            - $ref: >-
                #/components/schemas/OrganizationReportedMetricsRequestIntervalEnum
          default: 1d
          description: |-
            Interval of the reported metric. Defaults to 1d.

            * `1d` - Daily data.
            * `1h` - Hourly data.
            * `5m` - 5-minute data.
        metric:
          type: string
          description: >

            Valid metrics:


            - `volume/volume`: Volume traded for day, normalised to USD values

            - `spread/spread_bps`: Top Of Book Spread basis points, calculated
            as (your ask - your bid) / ((your ask + your bid) / 2)) * 10000

            - `depth/bid_0bps`: Bid Depth, normalised to USD values, within 0
            basis points

            - `depth/bid_0.05bps`: Bid Depth, normalised to USD values, within
            0.05 basis points

            - `depth/bid_0.1bps`: Bid Depth, normalised to USD values, within
            0.1 basis points

            - `depth/bid_0.15bps`: Bid Depth, normalised to USD values, within
            0.15 basis points

            - `depth/bid_0.25bps`: Bid Depth, normalised to USD values, within
            0.25 basis points

            - `depth/bid_0.5bps`: Bid Depth, normalised to USD values, within
            0.5 basis points

            - `depth/bid_0.75bps`: Bid Depth, normalised to USD values, within
            0.75 basis points

            - `depth/bid_1bps`: Bid Depth, normalised to USD values, within 1
            basis points

            - `depth/bid_2bps`: Bid Depth, normalised to USD values, within 2
            basis points

            - `depth/bid_3bps`: Bid Depth, normalised to USD values, within 3
            basis points

            - `depth/bid_5bps`: Bid Depth, normalised to USD values, within 5
            basis points

            - `depth/bid_10bps`: Bid Depth, normalised to USD values, within 10
            basis points

            - `depth/bid_15bps`: Bid Depth, normalised to USD values, within 15
            basis points

            - `depth/bid_20bps`: Bid Depth, normalised to USD values, within 20
            basis points

            - `depth/bid_25bps`: Bid Depth, normalised to USD values, within 25
            basis points

            - `depth/bid_30bps`: Bid Depth, normalised to USD values, within 30
            basis points

            - `depth/bid_40bps`: Bid Depth, normalised to USD values, within 40
            basis points

            - `depth/bid_50bps`: Bid Depth, normalised to USD values, within 50
            basis points

            - `depth/bid_60bps`: Bid Depth, normalised to USD values, within 60
            basis points

            - `depth/bid_75bps`: Bid Depth, normalised to USD values, within 75
            basis points

            - `depth/bid_100bps`: Bid Depth, normalised to USD values, within
            100 basis points

            - `depth/bid_150bps`: Bid Depth, normalised to USD values, within
            150 basis points

            - `depth/bid_200bps`: Bid Depth, normalised to USD values, within
            200 basis points

            - `depth/bid_300bps`: Bid Depth, normalised to USD values, within
            300 basis points

            - `depth/bid_500bps`: Bid Depth, normalised to USD values, within
            500 basis points

            - `depth/ask_0bps`: Ask Depth, normalised to USD values, within 0
            basis points

            - `depth/ask_0.05bps`: Ask Depth, normalised to USD values, within
            0.05 basis points

            - `depth/ask_0.1bps`: Ask Depth, normalised to USD values, within
            0.1 basis points

            - `depth/ask_0.15bps`: Ask Depth, normalised to USD values, within
            0.15 basis points

            - `depth/ask_0.25bps`: Ask Depth, normalised to USD values, within
            0.25 basis points

            - `depth/ask_0.5bps`: Ask Depth, normalised to USD values, within
            0.5 basis points

            - `depth/ask_0.75bps`: Ask Depth, normalised to USD values, within
            0.75 basis points

            - `depth/ask_1bps`: Ask Depth, normalised to USD values, within 1
            basis points

            - `depth/ask_2bps`: Ask Depth, normalised to USD values, within 2
            basis points

            - `depth/ask_3bps`: Ask Depth, normalised to USD values, within 3
            basis points

            - `depth/ask_5bps`: Ask Depth, normalised to USD values, within 5
            basis points

            - `depth/ask_10bps`: Ask Depth, normalised to USD values, within 10
            basis points

            - `depth/ask_15bps`: Ask Depth, normalised to USD values, within 15
            basis points

            - `depth/ask_20bps`: Ask Depth, normalised to USD values, within 20
            basis points

            - `depth/ask_25bps`: Ask Depth, normalised to USD values, within 25
            basis points

            - `depth/ask_30bps`: Ask Depth, normalised to USD values, within 30
            basis points

            - `depth/ask_40bps`: Ask Depth, normalised to USD values, within 40
            basis points

            - `depth/ask_50bps`: Ask Depth, normalised to USD values, within 50
            basis points

            - `depth/ask_60bps`: Ask Depth, normalised to USD values, within 60
            basis points

            - `depth/ask_75bps`: Ask Depth, normalised to USD values, within 75
            basis points

            - `depth/ask_100bps`: Ask Depth, normalised to USD values, within
            100 basis points

            - `depth/ask_150bps`: Ask Depth, normalised to USD values, within
            150 basis points

            - `depth/ask_200bps`: Ask Depth, normalised to USD values, within
            200 basis points

            - `depth/ask_300bps`: Ask Depth, normalised to USD values, within
            300 basis points

            - `depth/ask_500bps`: Ask Depth, normalised to USD values, within
            500 basis points
        value:
          type: number
          format: double
        dry_run:
          type: boolean
          description: >-
            Resolve and report this item exactly like a real submission, without
            writing it. Counted under `dry_run_results`.
      required:
        - asset
        - exchange
        - metric
        - organization
        - pair
        - ts_iso
        - value
    OrganizationReportedMetricsIngestResponse:
      type: object
      properties:
        message:
          type: string
        results:
          allOf:
            - $ref: '#/components/schemas/OrganizationReportedMetricsIngestOutcomes'
          description: Items submitted without `dry_run`.
        dry_run_results:
          allOf:
            - $ref: '#/components/schemas/OrganizationReportedMetricsIngestOutcomes'
          description: Items submitted with `dry_run`; none of them were written.
        unlisted_pairs:
          type: array
          items:
            $ref: '#/components/schemas/OrganizationReportedMetricsUnlistedPair'
        rejected:
          type: array
          items:
            $ref: '#/components/schemas/OrganizationReportedMetricsRejectedItem'
      required:
        - dry_run_results
        - message
        - rejected
        - results
        - unlisted_pairs
    OrganizationReportedMetricsRequestIntervalEnum:
      enum:
        - 1d
        - 1h
        - 5m
      type: string
      description: |-
        * `1d` - Daily data.
        * `1h` - Hourly data.
        * `5m` - 5-minute data.
    OrganizationReportedMetricsIngestOutcomes:
      type: object
      properties:
        stored:
          type: integer
          description: Items written against a pair GlassMarkets lists.
        stored_unlisted_pair:
          type: integer
          description: >-
            Items written under an exchange or pair GlassMarkets does not list,
            kept as submitted.
        duplicate:
          type: integer
          description: Items overwritten by a later item for the same metric and bucket.
        rejected:
          type: integer
          description: Items not written.
      required:
        - duplicate
        - rejected
        - stored
        - stored_unlisted_pair
    OrganizationReportedMetricsUnlistedPair:
      type: object
      properties:
        organization:
          type: string
        asset:
          type: string
        exchange:
          type: string
        pair:
          type: string
        dry_run:
          type: boolean
          description: Whether the items behind this entry were sent with `dry_run`.
        count:
          type: integer
      required:
        - asset
        - count
        - dry_run
        - exchange
        - organization
        - pair
    OrganizationReportedMetricsRejectedItem:
      type: object
      properties:
        organization:
          type: string
        asset:
          type: string
        exchange:
          type: string
        pair:
          type: string
        dry_run:
          type: boolean
          description: Whether the items behind this entry were sent with `dry_run`.
        count:
          type: integer
        reason:
          $ref: '#/components/schemas/ReasonEnum'
        metric:
          type: string
          nullable: true
          description: Set when the reason is `unsupported_metric`.
      required:
        - asset
        - count
        - dry_run
        - exchange
        - metric
        - organization
        - pair
        - reason
    ReasonEnum:
      enum:
        - asset_not_found
        - unsupported_metric
      type: string
      description: |-
        * `asset_not_found` - GlassMarkets does not track this asset.
        * `unsupported_metric` - The metric name cannot be stored.
  securitySchemes:
    tokenAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Token-based authentication with required prefix "Token ". Example:
        "Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b"
      x-default: Token <token>

````