> ## 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 a proposal

> The invited market maker submits its saved response. The RFQ must be active and its due date not passed. The response must accept or decline every mandate in the RFQ template; otherwise it returns `400`.



## OpenAPI

````yaml /openapi.yaml post /v2/organizations/rfq/proposals/{proposal_id}/submit/
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/rfq/proposals/{proposal_id}/submit/:
    post:
      tags:
        - RFQ
      summary: Submit a proposal
      description: >-
        The invited market maker submits its saved response. The RFQ must be
        active and its due date not passed. The response must accept or decline
        every mandate in the RFQ template; otherwise it returns `400`.
      operationId: v2_organizations_rfq_proposals_proposal_id_submit_post
      parameters:
        - in: path
          name: proposal_id
          schema:
            type: integer
          required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RFQProposalResponse'
          description: ''
      security:
        - tokenAuth: []
components:
  schemas:
    RFQProposalResponse:
      type: object
      properties:
        id:
          type: integer
        organization:
          $ref: '#/components/schemas/RFQOrganization'
        status:
          $ref: '#/components/schemas/RFQProposalStatusEnum'
        response_data: {}
        submitted_at:
          type: string
          format: date-time
          nullable: true
        reviewed_at:
          type: string
          format: date-time
          nullable: true
        version:
          type: integer
          description: Send it back when saving the proposal, to detect concurrent edits.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        permissions:
          $ref: '#/components/schemas/RFQProposalPermissions'
        targets_created_at:
          type: string
          format: date-time
          nullable: true
      required:
        - created_at
        - id
        - organization
        - permissions
        - response_data
        - reviewed_at
        - status
        - submitted_at
        - targets_created_at
        - updated_at
        - version
    RFQOrganization:
      type: object
      properties:
        slug:
          type: string
        name:
          type: string
      required:
        - name
        - slug
    RFQProposalStatusEnum:
      enum:
        - pending
        - in_progress
        - submitted
        - accepted
        - rejected
      type: string
      description: |-
        * `pending` - Pending
        * `in_progress` - In Progress
        * `submitted` - Submitted
        * `accepted` - Accepted
        * `rejected` - Rejected
    RFQProposalPermissions:
      type: object
      properties:
        respond:
          type: boolean
        review:
          type: boolean
        create_targets:
          type: boolean
      required:
        - create_targets
        - respond
        - review
  securitySchemes:
    tokenAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Token-based authentication with required prefix "Token ". Example:
        "Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b"
      x-default: Token <token>

````