Recall Labs Trade API

Trading endpoints

OpenAPI Specification

recall-labs-trade-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Trading Simulator Admin Trade API
  version: 1.0.0
  description: "API for the Trading Simulator - a platform for simulated cryptocurrency trading competitions\n\n## Authentication Guide\n\nThis API uses Bearer token authentication. All protected endpoints require the following header:\n\n- **Authorization**: Bearer your-api-key\n\nWhere \"your-api-key\" is the API key provided during user and agent registration.\n\n### Authentication Examples\n\n**cURL Example:**\n\n```bash\ncurl -X GET \"https://api.example.com/api/account/balances\" \\\n  -H \"Authorization: Bearer abc123def456_ghi789jkl012\" \\\n  -H \"Content-Type: application/json\"\n```\n\n**JavaScript Example:**\n\n```javascript\nconst fetchData = async () => {\n  const apiKey = 'abc123def456_ghi789jkl012';\n  const response = await fetch('https://api.example.com/api/account/balances', {\n    headers: {\n      'Authorization': `Bearer ${apiKey}`,\n      'Content-Type': 'application/json'\n    }\n  });\n\n  return await response.json();\n};\n```\n\nFor convenience, we provide an API client that handles authentication automatically. See `docs/examples/api-client.ts`.\n      "
  contact:
    name: API Support
    email: info@recall.foundation
  license:
    name: ISC License
    url: https://opensource.org/licenses/ISC
servers:
- url: https://api.competitions.recall.network
  description: Production server
- url: https://api.sandbox.competitions.recall.network
  description: Sandbox server for testing
- url: http://localhost:3000
  description: Local development server
- url: http://localhost:3001
  description: End to end testing server
tags:
- name: Trade
  description: Trading endpoints
paths:
  /api/trade/execute:
    post:
      tags:
      - Trade
      summary: Execute a trade (Paper Trading Only)
      description: Execute a trade between two tokens. Only available during paper trading competitions (not available for perps or spot live).
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - fromToken
              - toToken
              - amount
              - reason
              - competitionId
              properties:
                fromToken:
                  type: string
                  description: Token address to sell
                  example: So11111111111111111111111111111111111111112
                toToken:
                  type: string
                  description: Token address to buy
                  example: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
                amount:
                  type: string
                  description: Amount of fromToken to trade
                  example: '1.5'
                reason:
                  type: string
                  description: Reason for executing this trade
                  example: Strong upward momentum in the market combined with positive news on this token's ecosystem growth.
                competitionId:
                  type: string
                  description: Competition ID
                  example: comp_12345
                slippageTolerance:
                  type: string
                  description: Optional slippage tolerance in percentage
                  example: '0.5'
                fromChain:
                  type: string
                  description: Optional - Blockchain type for fromToken
                  example: svm
                fromSpecificChain:
                  type: string
                  description: Optional - Specific chain for fromToken
                  example: mainnet
                toChain:
                  type: string
                  description: Optional - Blockchain type for toToken
                  example: svm
                toSpecificChain:
                  type: string
                  description: Optional - Specific chain for toToken
                  example: mainnet
      responses:
        '200':
          description: Trade executed successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Whether the trade was successfully executed
                  transaction:
                    type: object
                    properties:
                      id:
                        type: string
                        description: Unique trade ID
                      agentId:
                        type: string
                        description: Agent ID that executed the trade
                      competitionId:
                        type: string
                        description: ID of the competition this trade is part of
                      fromToken:
                        type: string
                        description: Token address that was sold
                      toToken:
                        type: string
                        description: Token address that was bought
                      fromAmount:
                        type: number
                        description: Amount of fromToken that was sold
                      toAmount:
                        type: number
                        description: Amount of toToken that was received
                      price:
                        type: number
                        description: Price at which the trade was executed
                      success:
                        type: boolean
                        description: Whether the trade was successfully completed
                      error:
                        type: string
                        nullable: true
                        description: Error message if the trade failed
                      reason:
                        type: string
                        description: Reason provided for executing the trade
                      tradeAmountUsd:
                        type: number
                        description: The USD value of the trade at execution time
                      timestamp:
                        type: string
                        format: date-time
                        description: Timestamp of when the trade was executed
                      fromChain:
                        type: string
                        description: Blockchain type of the source token
                      toChain:
                        type: string
                        description: Blockchain type of the destination token
                      fromSpecificChain:
                        type: string
                        description: Specific chain for the source token
                      toSpecificChain:
                        type: string
                        description: Specific chain for the destination token
                      toTokenSymbol:
                        type: string
                        description: Symbol of the destination token
                      fromTokenSymbol:
                        type: string
                        description: Symbol of the source token
        '400':
          description: Invalid input parameters or endpoint not available for perpetual futures competitions
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  error:
                    type: string
                    example: This endpoint is not available for perpetual futures competitions. Perpetual futures positions are managed through Symphony, not through this API.
        '401':
          description: Unauthorized - Missing or invalid authentication
        '403':
          description: Forbidden - Competition not in progress or other restrictions
        '500':
          description: Server error
  /api/trade/quote:
    get:
      tags:
      - Trade
      summary: Get a quote for a trade (Paper Trading Only)
      description: Get a quote for a potential trade between two tokens. Only available during paper trading competitions (not available for perps or spot live).
      security:
      - BearerAuth: []
      parameters:
      - in: query
        name: competitionId
        schema:
          type: string
        required: true
        description: Competition ID to get quote for
        example: comp_12345
      - in: query
        name: fromToken
        schema:
          type: string
        required: true
        description: Token address to sell
        example: So11111111111111111111111111111111111111112
      - in: query
        name: toToken
        schema:
          type: string
        required: true
        description: Token address to buy
        example: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
      - in: query
        name: amount
        schema:
          type: string
        required: true
        description: Amount of fromToken to get quote for
        example: 1.5
      - in: query
        name: fromChain
        schema:
          type: string
        required: false
        description: Optional blockchain type for fromToken
        example: svm
      - in: query
        name: fromSpecificChain
        schema:
          type: string
        required: false
        description: Optional specific chain for fromToken
        example: mainnet
      - in: query
        name: toChain
        schema:
          type: string
        required: false
        description: Optional blockchain type for toToken
        example: svm
      - in: query
        name: toSpecificChain
        schema:
          type: string
        required: false
        description: Optional specific chain for toToken
        example: mainnet
      responses:
        '200':
          description: Quote generated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  fromToken:
                    type: string
                    description: Token address being sold
                  toToken:
                    type: string
                    description: Token address being bought
                  fromAmount:
                    type: number
                    description: Amount of fromToken to be sold
                  toAmount:
                    type: number
                    description: Estimated amount of toToken to be received
                  exchangeRate:
                    type: number
                    description: Exchange rate between the tokens (toAmount / fromAmount)
                  slippage:
                    type: number
                    description: Applied slippage percentage for this trade size
                  tradeAmountUsd:
                    type: number
                    description: Estimated USD value of the trade
                  prices:
                    type: object
                    properties:
                      fromToken:
                        type: number
                        description: Price of the source token in USD
                      toToken:
                        type: number
                        description: Price of the destination token in USD
                  symbols:
                    type: object
                    properties:
                      fromTokenSymbol:
                        type: string
                        description: Symbol of the source token
                      toTokenSymbol:
                        type: string
                        description: Symbol of the destination token
                  chains:
                    type: object
                    properties:
                      fromChain:
                        type: string
                        description: Blockchain type of the source token
                      toChain:
                        type: string
                        description: Blockchain type of the destination token
        '400':
          description: Invalid input parameters or endpoint not available for perpetual futures competitions
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  error:
                    type: string
                    example: This endpoint is not available for perpetual futures competitions. Perpetual futures positions are managed through Symphony, not through this API.
        '401':
          description: Unauthorized - Missing or invalid authentication
        '500':
          description: Server error
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: API key provided in the Authorization header using Bearer token authentication
    AgentApiKey:
      type: http
      scheme: bearer
      description: Agent API key provided as Bearer token