---
title: "Public: search challenges across visible firms. Filter by challenge rules and parent firm; pass propfirmId to list one firm's challenges. Use include=offers to attach live offers that apply to each challenge."
method: GET
path: "/api/propfirms/challenges/query"
tags: ["propfirms"]
---

# Public: search challenges across visible firms. Filter by challenge rules and parent firm; pass propfirmId to list one firm's challenges. Use include=offers to attach live offers that apply to each challenge.

`GET /api/propfirms/challenges/query`

## Request

- Base URL: `https://app.luxalgo.com`
- URL: `https://app.luxalgo.com/api/propfirms/challenges/query`
- Auth: none declared
- TypeScript: <https://skmtc.dev/luxalgo/apis/luxalgo-public-api/docs/api/propfirms/challenges/query/get.ts> (a function with typed inputs; its response is checked against the schema)

## Query parameters

- `challengeId` string: Comma-separated public challenge ids.
- `challengeName` string: Case-insensitive substring of the challenge name.
- `accountSizeMin` string: Minimum account size (inclusive).
- `accountSizeMax` string: Maximum account size (inclusive).
- `steps` string: Exact evaluation step count (1 = instant / funded, 2 = two-step, …).
- `stepsMin` string: Minimum evaluation step count (ignored when steps is set).
- `stepsMax` string: Maximum evaluation step count (ignored when steps is set).
- `priceMin` string: Minimum challenge fee (inclusive).
- `priceMax` string: Maximum challenge fee (inclusive).
- `profitSplitMin` string: Minimum trader profit-split percent.
- `maxLeverageMin` string: Minimum max leverage.
- `minTradingDaysMax` string: Maximum required minimum trading days (less-strict challenges).
- `dailyLossMax` string: Maximum daily-loss limit magnitude (smaller number = stricter; this is an upper bound).
- `maxLossMax` string: Maximum overall-loss limit magnitude.
- `maxLossMode` string: Comma-separated drawdown modes: static-initial, trailing-realized-eod, trailing-intraday-unrealized. Challenges without a captured mode never match.
- `newsTrading` 'true' | 'false': Boolean filter as "true" or "false".
- `copyTrading` 'true' | 'false': Boolean filter as "true" or "false".
- `autoTrading` 'true' | 'false': Boolean filter as "true" or "false".
- `weekendHolding` 'true' | 'false': Boolean filter as "true" or "false".
- `overnightHolding` 'true' | 'false': Boolean filter as "true" or "false".
- `stoplossRequired` 'true' | 'false': Boolean filter as "true" or "false".
- `isFeeRefundable` 'true' | 'false': Boolean filter as "true" or "false".
- `interval` string: Comma-separated challenge fee intervals (e.g. one-time, monthly).
- `pageIndex` string: 0-based page index. Defaults to 0.
- `pageQuantity` string: Page size. Defaults to 50, capped at 100.
- `direction` 'asc' | 'desc': Sort direction. Defaults per sort key.
- `text` string: Case-insensitive search over challenge name and firm name/slug.
- `firmId` string: Comma-separated internal firm ids.
- `propfirmId` string: Comma-separated public firm slugs.
- `productTypes` string: Comma-separated product types the parent firm must offer.
- `tradedMarketTypes` string: Comma-separated markets the parent firm must offer.
- `tradingPlatforms` string: Comma-separated platforms the parent firm must offer.
- `isPreferredPartner` 'true' | 'false'
- `availableIn` string: Comma-separated country names the parent firm must not restrict.
- `include` string: Comma-separated extra payloads: offers.
- `sort` 'challengeName' | 'accountSize' | 'price' | 'steps' | 'profitSplitPercent': Defaults to accountSize descending.

## Response `200`

Success. The payload is wrapped in the standard { data, errors } envelope.

- object
  - `data` object, required
    - `challenges` object[], required
      - `challengeId` string, required
      - `challengeName` string, required
      - `accountSize` number, required
      - `steps` number, required
      - `profitTarget` number[], required
      - `profitTargetIsPercent` boolean, required
      - `minTradingDays` number, nullable, required
      - `dailyLoss` number, nullable, required
      - `maxLoss` number, nullable, required
      - `dailyLossType` string, nullable, required
      - `maxLossType` string, nullable, required
      - `lossIsPercent` boolean, required
      - `maxLeverage` number, nullable, required
      - `newsTrading` boolean, nullable, required
      - `copyTrading` boolean, nullable, required
      - `autoTrading` boolean, nullable, required
      - `weekendHolding` boolean, nullable, required
      - `overnightHolding` boolean, nullable, required
      - `stoplossRequired` boolean, nullable, required
      - `activationFee` number, nullable, required
      - `resetFee` number, nullable, required
      - `maxContractSize` object, nullable, required
        - `minis` number, nullable, required
        - `micros` number, nullable, required
      - `profitSplitPercent` number, nullable, required
      - `profitSplitDetails` string, nullable, required
      - `payoutFrequency` string, nullable, required
      - `isFeeRefundable` boolean, nullable, required
      - `price` number, nullable, required
      - `interval` string, nullable, required
      - `maxLossMode` 'static-initial' | 'trailing-realized-eod' | 'trailing-intraday-unrealized', nullable
      - `maxLossLocksAtInitial` boolean, nullable
      - `maxLossLockOffset` number, nullable
      - `maxLossIsPercent` boolean, nullable
      - `dailyLossBasis` 'prior-day-balance' | 'prior-day-equity', nullable
      - `dailyLossLimitBasis` 'initial-balance' | 'anchor', nullable
      - `dailyLossIncludesOpenPnl` boolean, nullable
      - `dailyLossEvaluation` 'intraday' | 'end-of-day', nullable
      - `dailyLossIsPercent` boolean, nullable
      - `consistencyMaxBestDayPct` number, nullable
      - `payoutIntervalDays` number, nullable
      - `payoutMinWinningDays` number, nullable
      - `payoutWinningDayMinProfit` number, nullable
      - `payoutMaxPct` number, nullable
      - `payoutMaxAmount` number, nullable
      - `payoutBufferAmount` number, nullable
      - `fundedConsistencyPct` number, nullable
      - `firstPayoutMinDays` number, nullable
      - `feeCurrency` string, nullable
      - `sourceUrl` string, nullable
      - `lastVerifiedAt` string, nullable
      - `firmId` string, required
      - `propfirmId` string, required
      - `propfirmName` string, required
      - `offers` object[]
        - `offerId` string, required
        - `firmId` string, required
        - `propfirmId` string, required
        - `propfirmName` string, required
        - `promoCode` string, nullable, required
        - `affiliateLink` string, nullable, required
        - `discountIsPercent` boolean, required
        - `discountValue` number, nullable, required
        - `shortDescription` string, nullable, required
        - `fullDescription` string, nullable, required
        - `isActive` boolean, required
        - `isFeatured` boolean, required
        - `hasEndDate` boolean, required
        - `endsAt` string, nullable, required
        - `scope` union, required
          - object
            - `type` 'all_challenges', required
          - object
            - `type` 'specific_challenges', required
            - `challengeIds` string[], required
    - `count` number, required
  - `errors` unknown

## Other responses

- `400`: Validation error — errors[].details carries the zod issues.
- `500`: Unexpected server error.

---

[API](https://skmtc.dev/luxalgo/apis/luxalgo-public-api.md) - [All operations](https://skmtc.dev/luxalgo/apis/luxalgo-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/luxalgo/apis/luxalgo-public-api/revisions/226c2d642643?raw)
