Qfex pnl API

The pnl API from Qfex — 1 operation(s) for pnl.

OpenAPI Specification

qfex-pnl-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  contact:
    email: support@qfex.com
    name: QFEX Support
  description: REST API for QFEX
  license:
    name: QFEX License
    url: https://qfex.com/license
  title: QFEX REST market-data pnl API
  version: 0.1.0
servers:
- description: Production server
  url: https://api.qfex.com
tags:
- name: pnl
paths:
  /pnl:
    get:
      description: Return approximate first position per symbol per hour for the user, including realised/unrealised pnl, net_funding, fees, quantity, and cost.
      operationId: read-hourly-pnl
      parameters:
      - explode: false
        in: query
        name: symbol
        schema:
          type: string
      - explode: false
        in: query
        name: start
        schema:
          format: date-time
          type: string
      - explode: false
        in: query
        name: end
        schema:
          format: date-time
          type: string
      - explode: false
        in: query
        name: limit_hours
        schema:
          default: 168
          format: int64
          maximum: 2160
          minimum: 1
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HourlyPnlResponseBody'
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
          description: Error
      security:
      - HMACSignature: []
        Nonce: []
        PublicKey: []
        Timestamp: []
      summary: Hourly PnL (approx. first position per hour)
      tags:
      - pnl
components:
  schemas:
    HourlyPnlResponseBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
          - https://api.qfex.com/schemas/HourlyPnlResponseBody.json
          format: uri
          readOnly: true
          type: string
        count:
          format: int64
          type: integer
        data:
          items:
            $ref: '#/components/schemas/PnlHour'
          type:
          - array
          - 'null'
      required:
      - data
      - count
      type: object
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: Where the error occurred, e.g. 'body.items[3].tags' or 'path.thing-id'
          type: string
        message:
          description: Error message text
          type: string
        value:
          description: The value at the given location
      type: object
    ErrorModel:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
          - https://api.qfex.com/schemas/ErrorModel.json
          format: uri
          readOnly: true
          type: string
        detail:
          description: A human-readable explanation specific to this occurrence of the problem.
          examples:
          - Property foo is required but is missing.
          type: string
        errors:
          description: Optional list of individual error details
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type:
          - array
          - 'null'
        instance:
          description: A URI reference that identifies the specific occurrence of the problem.
          examples:
          - https://example.com/error-log/abc123
          format: uri
          type: string
        status:
          description: HTTP status code
          examples:
          - 400
          format: int64
          type: integer
        title:
          description: A short, human-readable summary of the problem type. This value should not change between occurrences of the error.
          examples:
          - Bad Request
          type: string
        type:
          default: about:blank
          description: A URI reference to human-readable documentation for the error.
          examples:
          - https://example.com/errors/example
          format: uri
          type: string
      type: object
    PnlHour:
      additionalProperties: false
      properties:
        cost:
          format: double
          type: number
        fees:
          format: double
          type: number
        hour:
          format: date-time
          type: string
        net_funding:
          format: double
          type: number
        quantity:
          format: double
          type: number
        realised_pnl:
          format: double
          type: number
        symbol:
          type: string
        unrealised_pnl:
          format: double
          type: number
      required:
      - symbol
      - hour
      - realised_pnl
      - unrealised_pnl
      - net_funding
      - fees
      - quantity
      - cost
      type: object
  securitySchemes:
    HMACSignature:
      description: HMAC-SHA256 signature (hex-encoded).
      in: header
      name: x-qfex-hmac-signature
      type: apiKey
      x-stoplight:
        hideExamples: true
    Nonce:
      description: Unique request nonce (hex encoded, max 100 characters).
      in: header
      name: x-qfex-nonce
      type: apiKey
      x-stoplight:
        hideExamples: true
    PublicKey:
      description: 'QFEX API Authentication requires these headers:


        - **x-qfex-public-key**: Your public API key

        - **x-qfex-hmac-signature**: HMAC signature of the request (hex encoded)

        - **x-qfex-nonce**: Unique nonce for the request (hex encoded, max 100 characters)

        - **x-qfex-timestamp**: Unix timestamp of the request


        These four are required. Optionally send **x-qfex-requested-account-id** (UUID) to act as a subaccount; see Signature Generation below.


        **Signature Generation:**


        1. Generate a cryptographically secure random nonce (hex encoded, max 100 characters) and capture the current Unix timestamp.

        2. Build the string `${nonce}:${unix_ts}` and compute an HMAC-SHA256 using your secret key.

        3. Hex-encode the HMAC result to get the signature.

        4. Send the required auth headers below. The nonce must be unique within a 15 minute window.


        **Important:** The signature itself must be hex-encoded before being sent in the `x-qfex-hmac-signature` header.


        **Optional header:** `x-qfex-requested-account-id` (UUID) selects a subaccount; omit it to use the primary account.'
      in: header
      name: x-qfex-public-key
      type: apiKey
      x-stoplight:
        hideExamples: true
    Timestamp:
      description: Unix timestamp (seconds since epoch).
      in: header
      name: x-qfex-timestamp
      type: apiKey
      x-stoplight:
        hideExamples: true