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

# Complete an email verification login

> Exchanges a password-login challenge and the emailed six-digit code for a session. Codes expire after ten minutes and work once.



## OpenAPI

````yaml /openapi.yaml post /v1/email-2fa/login/
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: >

    Guides, a quickstart and code samples are at

    [docs.glassmarkets.io](https://docs.glassmarkets.io). The 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. The

    [Authentication guide](https://docs.glassmarkets.io/guides/authentication)

    covers login: `POST /v1/login/` returns a token that goes on every request
    as

    `Authorization: Token <token>`.
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.
externalDocs:
  url: https://docs.glassmarkets.io
  description: Guides, quickstart and code samples
paths:
  /v1/email-2fa/login/:
    post:
      tags:
        - Authentication
      summary: Complete an email verification login
      description: >-
        Exchanges a password-login challenge and the emailed six-digit code for
        a session. Codes expire after ten minutes and work once.
      operationId: v1_email_2fa_login_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmailLogin'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/EmailLogin'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/EmailLogin'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoginResponse'
          description: ''
        '400':
          description: A field is missing or invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrors'
              examples:
                InvalidInput:
                  value:
                    challenge_id:
                      - This field is required.
        '429':
          $ref: '#/components/responses/Throttled'
components:
  schemas:
    EmailLogin:
      type: object
      properties:
        cookie_auth:
          type: boolean
          writeOnly: true
          default: false
          description: Issue the token in an HttpOnly cookie instead of the response body.
        challenge_id:
          type: string
          maxLength: 64
        code:
          type: string
          writeOnly: true
          pattern: ^[0-9]{6}$
      required:
        - challenge_id
        - code
    LoginResponse:
      type: object
      properties:
        expiry:
          type: string
          format: date-time
        token:
          type: string
        csrf_token:
          type: string
        user:
          $ref: '#/components/schemas/LoginResponseUser'
      required:
        - user
    ValidationErrors:
      type: object
      description: >-
        One entry per invalid field; `non_field_errors` covers the request as a
        whole. A field carries a list of messages or a single message; a nested
        field carries an object, or a list of objects, of the same shape.
      additionalProperties:
        anyOf:
          - type: array
            items:
              type: string
          - type: string
          - type: object
          - type: array
            items:
              type: object
    LoginResponseUser:
      type: object
      properties:
        username:
          type: string
        first_name:
          type: string
        id:
          type: integer
        last_name:
          type: string
        email:
          type: string
          format: email
        is_staff:
          type: boolean
        can_manage_tokenomics:
          type: boolean
      required:
        - can_manage_tokenomics
        - email
        - first_name
        - id
        - is_staff
        - last_name
        - username
    ErrorDetail:
      type: object
      properties:
        detail:
          type: string
      required:
        - detail
  responses:
    Throttled:
      description: Too many attempts. Wait the time given in `detail`, then retry.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorDetail'
          examples:
            Throttled:
              value:
                detail: Request was throttled. Expected available in 42 seconds.

````

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