---
title: "Public: search visible prop firms. Combine firm, challenge, and offer filters; omit filters to list all. Nested challenge/offer filters match a firm when at least one child matches. Use include=challenges,offers,overview to nest matching children."
method: GET
path: "/api/propfirms/query"
tags: ["propfirms"]
---

# Public: search visible prop firms. Combine firm, challenge, and offer filters; omit filters to list all. Nested challenge/offer filters match a firm when at least one child matches. Use include=challenges,offers,overview to nest matching children.

`GET /api/propfirms/query`

## Request

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

## Query parameters

- `text` string: Case-insensitive search over firm name and public slug.
- `id` string: Comma-separated internal firm ids.
- `propfirmId` string: Comma-separated public firm slugs (e.g. ftmo).
- `productTypes` string: Comma-separated product types (CFD, Futures). Firm must offer at least one.
- `tradedMarketTypes` string: Comma-separated markets (forex, indices, …). Firm must offer at least one.
- `tradingPlatforms` string: Comma-separated platforms (MT5, TradingView, …). Firm must offer at least one.
- `paymentMethods` string: Comma-separated payment methods. Firm must offer at least one.
- `payoutMethods` string: Comma-separated payout methods. Firm must offer at least one.
- `countryIso2` string: Comma-separated ISO-2 headquarters countries.
- `currency` string: Comma-separated account currencies (e.g. usd, eur).
- `isPreferredPartner` 'true' | 'false': Only preferred-partner firms when true.
- `availableIn` string: Comma-separated country names. Firm must not list any of them as restricted (e.g. United States).
- `minTrustPilotScore` string: Minimum Trustpilot score.
- `minTrustPilotCount` string: Minimum Trustpilot review count.
- `minYearFounded` string: Inclusive minimum year founded.
- `maxYearFounded` string: Inclusive maximum year founded.
- `hasActiveOffer` 'true' | 'false': When true, firm must currently have a live (active, unexpired) offer.
- `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).
- `offerId` string: Comma-separated public offer ids.
- `promoCode` string: Case-insensitive substring of the promo code.
- `offerText` string: Case-insensitive search over promo code and offer descriptions.
- `isActive` 'true' | 'false': Defaults to live offers only. Pass false to look at inactive offers.
- `isFeatured` 'true' | 'false': Boolean filter as "true" or "false".
- `discountIsPercent` 'true' | 'false': Boolean filter as "true" or "false".
- `discountMin` string: Minimum discount value (percent or absolute, matching discountIsPercent).
- `discountMax` string: Maximum discount value.
- `includeInactive` 'true' | 'false': When true, inactive offers are not hidden. Defaults to false.
- `includeExpired` 'true' | 'false': When true, ended offers are not hidden. Defaults to false.
- `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.
- `include` string: Comma-separated extra payloads: challenges, offers, overview.
- `sort` 'name' | 'yearFounded' | 'reviewsTrustPilotScore' | 'reviewsTrustPilotCount': Defaults to name.

## Response `200`

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

- object
  - `data` object, required
    - `firms` object[], required
      - `name` string, required
      - `yearFounded` number, nullable, required
      - `productTypes` string[], required
      - `commissionAmount` number, nullable, required
      - `countryIso2` string, nullable, required
      - `currency` string, nullable, required
      - `isPreferredPartner` boolean, required
      - `isVisible` boolean, required
      - `logoImageUrl` string, nullable, required
      - `paymentMethods` string[], required
      - `payoutMethods` string[], required
      - `restrictedCountries` string[], required
      - `reviewsTrustPilotCount` number, nullable, required
      - `reviewsTrustPilotScore` number, nullable, required
      - `tradedMarketTypes` string[], required
      - `tradingPlatforms` string[], required
      - `id` string, required
      - `propfirmId` 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
      - `challenges` object[]
        - `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
              - …
            - object
              - …
      - `overview` object
        - `about` string, required
        - `leverage` string, required
        - `rules` object, required
        - `payoutPolicy` object, required
        - `faq` object, 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)
