Trioptima triReduce API

The triReduce API provides machine-to-machine access to TriOptima's portfolio compression cycles for OTC derivatives. The API allows cycle participants to automate participation in compression cycles, submit trade and risk data, and retrieve cycle results. Available for rates (IRS, OIS) and credit derivatives compression. Authentication uses OAuth 2.0 with read-only access for development and full access for production. Documentation available at https://rates.trireduce.com/api/v1/doc.

OpenAPI Specification

trioptima-trireduce-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Trioptima triReduce API
  description: >-
    The triReduce API provides machine-to-machine access to TriOptima's portfolio
    compression service for OTC derivatives. The API allows cycle participants to
    automate their participation in compression cycles, submit trade and risk data,
    and retrieve compression results and reports.

    The API is available at both the rates (IRS/OIS) and credit derivatives services.
    Authentication uses OAuth 2.0 tokens. Read-only access (GET only) is provided
    for initial development and testing; full access (GET and POST) is enabled on
    request for production use.

    Full interactive documentation is available at /api/v1/doc after authenticating
    to the relevant triReduce service (e.g., https://rates.trireduce.com/api/v1/doc).
  version: '1'
  contact:
    name: TriOptima / OSTTRA Support
    url: https://osttra.com
    email: [email protected]
  license:
    name: Proprietary
externalDocs:
  description: triReduce API Documentation
  url: https://www.cmegroup.com/education/brochures-and-handbooks/trireduce-api
servers:
  - url: https://rates.trireduce.com/api/v1
    description: triReduce Rates (Interest Rate Swaps / OIS)
  - url: https://credit.trireduce.com/api/v1
    description: triReduce Credit (Credit Default Swaps)
security:
  - oauth2: []
tags:
  - name: Cycles
    description: Compression cycle discovery and management
  - name: Trades
    description: Trade data submission and retrieval
  - name: Risk
    description: Risk data submission and delta ladder management
  - name: Results
    description: Compression results and reports
paths:
  /cycles:
    get:
      operationId: listCycles
      summary: List Compression Cycles
      description: >-
        Returns a list of compression cycles available to the participant.
        Cycles represent scheduled multilateral compression runs. Participants
        can filter by status to see open, in-progress, or completed cycles.
      tags:
        - Cycles
      parameters:
        - name: status
          in: query
          required: false
          description: Filter cycles by status
          schema:
            type: string
            enum:
              - open
              - submission
              - optimization
              - completed
              - cancelled
        - name: type
          in: query
          required: false
          description: Filter by cycle type
          schema:
            type: string
            enum:
              - cleared
              - bilateral
      responses:
        '200':
          description: List of available compression cycles
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Cycle'
        '401':
          description: Unauthorized — invalid or expired OAuth token
        '403':
          description: Forbidden — insufficient permissions for this resource

  /cycles/{cycleId}:
    get:
      operationId: getCycle
      summary: Get Cycle Details
      description: >-
        Returns detailed information about a specific compression cycle,
        including its current status, submission deadlines, participating firms,
        and schedule.
      tags:
        - Cycles
      parameters:
        - name: cycleId
          in: path
          required: true
          description: Unique identifier for the compression cycle
          schema:
            type: string
          example: CYC-2024-IRS-001
      responses:
        '200':
          description: Cycle details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Cycle'
        '401':
          description: Unauthorized
        '404':
          description: Cycle not found

  /cycles/{cycleId}/trades:
    get:
      operationId: listCycleTrades
      summary: List Cycle Trades
      description: >-
        Returns the list of trades submitted by the participant for a given
        compression cycle. Used to verify trade submission and review accepted
        trade population.
      tags:
        - Trades
      parameters:
        - name: cycleId
          in: path
          required: true
          description: Unique identifier for the compression cycle
          schema:
            type: string
      responses:
        '200':
          description: List of submitted trades for the cycle
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Trade'
        '401':
          description: Unauthorized
        '404':
          description: Cycle not found
    post:
      operationId: submitCycleTrades
      summary: Submit Trades for Cycle
      description: >-
        Submits or replaces the participant's trade population for a compression
        cycle. Trade data includes notional, maturity, coupon, and other
        trade economics required for the compression algorithm. Full access
        required (not available on read-only API keys).
      tags:
        - Trades
      parameters:
        - name: cycleId
          in: path
          required: true
          description: Unique identifier for the compression cycle
          schema:
            type: string
      requestBody:
        required: true
        description: Trade population for submission
        content:
          application/json:
            schema:
              type: object
              required:
                - trades
              properties:
                trades:
                  type: array
                  items:
                    $ref: '#/components/schemas/TradeSubmission'
      responses:
        '200':
          description: Trades submitted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmissionResult'
        '400':
          description: Bad request — invalid trade data
        '401':
          description: Unauthorized
        '403':
          description: Forbidden — read-only access token cannot submit trades

  /cycles/{cycleId}/risk:
    get:
      operationId: getCycleRisk
      summary: Get Cycle Risk Data
      description: >-
        Returns the risk data (delta ladders) submitted by the participant
        for a given compression cycle.
      tags:
        - Risk
      parameters:
        - name: cycleId
          in: path
          required: true
          description: Unique identifier for the compression cycle
          schema:
            type: string
      responses:
        '200':
          description: Participant risk data for the cycle
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RiskData'
        '401':
          description: Unauthorized
        '404':
          description: Cycle or risk data not found
    post:
      operationId: submitCycleRisk
      summary: Submit Risk Data for Cycle
      description: >-
        Submits risk constraints (delta ladders, DV01 limits) for a compression
        cycle. Risk data constrains the optimization algorithm to preserve the
        participant's aggregate risk profile within specified tolerances.
      tags:
        - Risk
      parameters:
        - name: cycleId
          in: path
          required: true
          description: Unique identifier for the compression cycle
          schema:
            type: string
      requestBody:
        required: true
        description: Risk constraints for the compression cycle
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RiskSubmission'
      responses:
        '200':
          description: Risk data submitted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmissionResult'
        '400':
          description: Bad request — invalid risk data
        '401':
          description: Unauthorized
        '403':
          description: Forbidden — read-only access

  /cycles/{cycleId}/results:
    get:
      operationId: getCycleResults
      summary: Get Cycle Results
      description: >-
        Returns the compression results for a completed cycle, including the
        set of terminations and new replacement trades, notional reduction
        achieved, and summary statistics.
      tags:
        - Results
      parameters:
        - name: cycleId
          in: path
          required: true
          description: Unique identifier for the compression cycle
          schema:
            type: string
      responses:
        '200':
          description: Compression results for the cycle
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CycleResults'
        '401':
          description: Unauthorized
        '404':
          description: Cycle results not available yet or not found

  /cycles/{cycleId}/results/confirm:
    post:
      operationId: confirmCycleResults
      summary: Confirm Cycle Results
      description: >-
        Confirms the participant's acceptance of the compression results for a
        cycle. This is required before terminations and new trades are processed.
        All participants must confirm before the cycle settles.
      tags:
        - Results
      parameters:
        - name: cycleId
          in: path
          required: true
          description: Unique identifier for the compression cycle
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - confirmed
              properties:
                confirmed:
                  type: boolean
                  description: Set true to confirm, false to reject results
                comment:
                  type: string
                  description: Optional comment explaining rejection
      responses:
        '200':
          description: Confirmation recorded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmissionResult'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden

components:
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://auth.trireduce.com/oauth/token
          scopes:
            read: Read-only access to cycles, trades, and results
            write: Full access to submit trades, risk data, and confirmations

  schemas:
    Cycle:
      type: object
      description: A triReduce compression cycle
      properties:
        id:
          type: string
          description: Unique cycle identifier
          example: CYC-2024-IRS-001
        type:
          type: string
          description: Compression cycle type
          enum:
            - cleared
            - bilateral
          example: cleared
        assetClass:
          type: string
          description: Asset class for this cycle
          enum:
            - IRS
            - OIS
            - CDS
            - FX
          example: IRS
        currency:
          type: string
          description: Primary currency of the cycle
          example: USD
        status:
          type: string
          description: Current cycle status
          enum:
            - open
            - submission
            - optimization
            - completed
            - cancelled
        submissionDeadline:
          type: string
          format: date-time
          description: Deadline for trade and risk data submission
        optimizationDate:
          type: string
          format: date
          description: Date when the compression algorithm runs
        settlementDate:
          type: string
          format: date
          description: Date when terminations and new trades are processed
        participantCount:
          type: integer
          description: Number of participants registered for this cycle
        description:
          type: string
          description: Human-readable description of the cycle

    Trade:
      type: object
      description: A derivative trade in a compression cycle
      properties:
        tradeId:
          type: string
          description: Unique trade identifier (UTI or participant internal ID)
        counterpartyId:
          type: string
          description: Counterparty LEI or identifier
        notional:
          type: number
          format: double
          description: Notional amount in the trade currency
        currency:
          type: string
          description: Trade notional currency
          example: USD
        maturityDate:
          type: string
          format: date
          description: Trade maturity date
        startDate:
          type: string
          format: date
          description: Trade effective start date
        fixedRate:
          type: number
          format: double
          description: Fixed coupon rate (for IRS)
        payReceive:
          type: string
          enum:
            - PAY
            - RECEIVE
          description: Whether the participant pays or receives the fixed rate
        clearingHouse:
          type: string
          description: Clearing house (LCH, CME, Eurex, etc.)
          example: LCH
        status:
          type: string
          description: Trade status in the cycle
          enum:
            - submitted
            - accepted
            - rejected
            - terminated

    TradeSubmission:
      type: object
      description: Trade data for submission to a compression cycle
      required:
        - tradeId
        - notional
        - currency
        - maturityDate
      properties:
        tradeId:
          type: string
          description: Unique trade identifier
        counterpartyId:
          type: string
          description: Counterparty LEI
        notional:
          type: number
          format: double
        currency:
          type: string
        maturityDate:
          type: string
          format: date
        startDate:
          type: string
          format: date
        fixedRate:
          type: number
          format: double
        payReceive:
          type: string
          enum:
            - PAY
            - RECEIVE
        clearingHouse:
          type: string

    RiskData:
      type: object
      description: Risk constraints submitted by a participant
      properties:
        cycleId:
          type: string
        participantId:
          type: string
        currency:
          type: string
        deltaLadder:
          type: array
          description: DV01 risk by tenor bucket
          items:
            type: object
            properties:
              tenor:
                type: string
                description: Tenor bucket (e.g., 1Y, 2Y, 5Y, 10Y, 30Y)
                example: 5Y
              dv01:
                type: number
                format: double
                description: Dollar value of a basis point for this tenor
              tolerance:
                type: number
                format: double
                description: Allowed DV01 change after compression (fraction of original)

    RiskSubmission:
      type: object
      required:
        - currency
        - deltaLadder
      properties:
        currency:
          type: string
        deltaLadder:
          type: array
          items:
            type: object
            required:
              - tenor
              - dv01
            properties:
              tenor:
                type: string
              dv01:
                type: number
                format: double
              tolerance:
                type: number
                format: double

    CycleResults:
      type: object
      description: Results of a completed compression cycle
      properties:
        cycleId:
          type: string
        status:
          type: string
          enum:
            - pending_confirmation
            - confirmed
            - settled
        summary:
          type: object
          properties:
            originalNotional:
              type: number
              format: double
              description: Total notional submitted
            compressedNotional:
              type: number
              format: double
              description: Residual notional after compression
            notionalReduction:
              type: number
              format: double
              description: Amount of notional eliminated
            reductionPercentage:
              type: number
              format: double
              description: Percentage of notional eliminated
            tradesTerminated:
              type: integer
              description: Number of trades terminated
            newTradesCreated:
              type: integer
              description: Number of replacement trades created
        terminations:
          type: array
          description: Trades to be terminated
          items:
            $ref: '#/components/schemas/Trade'
        newTrades:
          type: array
          description: Replacement trades created by the compression algorithm
          items:
            $ref: '#/components/schemas/Trade'

    SubmissionResult:
      type: object
      description: Result of a data submission operation
      properties:
        success:
          type: boolean
        message:
          type: string
        recordsProcessed:
          type: integer
        errors:
          type: array
          items:
            type: object
            properties:
              tradeId:
                type: string
              errorCode:
                type: string
              errorMessage:
                type: string