# Products and Markets

A product is one tradable perpetual market. Product configuration comes from exchange contracts and offchain market settings. The API combines both sources in one response.

## List Products

```bash
curl 'https://api.meridiantest.net/v1/product?orderBy=createdAt&order=asc&limit=100'
```

Use the host for your environment from [API Hosts](/protocol-reference/api-hosts).

The endpoint uses cursor pagination. If `hasNext` is `true`, send `nextCursor` as the next request's `cursor`.

You can filter by ticker:

```bash
curl 'https://api.meridiantest.net/v1/product?ticker=BTCUSD'
```

Use `GET /v1/product/{id}` to retrieve one product by UUID.

## Identity and Status

| Field               | Meaning                                   |
| ------------------- | ----------------------------------------- |
| `id`                | Product UUID used by the API.             |
| `onchainId`         | Numeric product ID used by the contracts. |
| `ticker`            | Compact exchange ticker.                  |
| `displayTicker`     | User-facing ticker.                       |
| `engineType`        | Matching-engine product type.             |
| `status`            | `PENDING`, `ACTIVE`, or `DELISTED`.       |
| `baseTokenName`     | Base-asset token name.                    |
| `quoteTokenName`    | Quote-token name and margin-pool key.     |
| `baseTokenAddress`  | Zero address when the base is virtual.    |
| `quoteTokenAddress` | Quote-token accounting address.           |

Use the UUID for resource endpoints and filters that request a product ID. Order submission is the exception: the JSON body uses numeric `onchainId`, and the signed `TradeOrder.productId` uses the same value. Contracts and onchain events also use `onchainId`.

## Margin and Fees

| Field                      | Meaning                                             |
| -------------------------- | --------------------------------------------------- |
| `marginMode`               | `CROSS` or `ISOLATED`.                              |
| `maxLeverage`              | Maximum product leverage.                           |
| `makerFee`                 | Decimal maker fee rate.                             |
| `takerFee`                 | Decimal taker fee rate.                             |
| `cumulativeFundingUsd`     | Cumulative funding per unit.                        |
| `fundingUpdatedAt`         | Last funding-update time in Unix milliseconds.      |
| `fundingRate1h`            | Last computed one-hour funding rate.                |
| `cumulativePositionFeeUsd` | Cumulative position fee per unit.                   |
| `positionFeeUpdatedAt`     | Last position-fee update time in Unix milliseconds. |

mPerps normally return `ISOLATED`. They can accrue position fees during scheduled mark-price gaps.

## Order and Risk Limits

| Field                    | Meaning                                  |
| ------------------------ | ---------------------------------------- |
| `tickSize`               | Valid price increment.                   |
| `lotSize`                | Valid quantity increment.                |
| `minQuantity`            | Deprecated alias for `lotSize`.          |
| `minPrice`               | Minimum valid order price.               |
| `maxPrice`               | Maximum valid order price.               |
| `maxQuantity`            | Maximum quantity for one order.          |
| `maxPositionNotionalUsd` | Maximum notional for one position.       |
| `maxOpenInterestUsd`     | Maximum one-sided product open interest. |

The `openInterest` response is the total for both sides. The onchain value tracks one side of the market.

## Funding Settings

| Field                | Meaning                           |
| -------------------- | --------------------------------- |
| `fundingClampApr`    | Annualized clamp range.           |
| `fundingBaselineApr` | Annualized baseline.              |
| `fundingMaxApr`      | Maximum absolute annualized rate. |
| `pythFeedId`         | Pyth Lazer feed ID.               |

See [Funding Rates](/trading/perpetual-futures/funding-rates).

## Prices and Liquidity

Use these endpoints for current market data:

* `GET /v1/product/market-price?productIds=<uuid>` for oracle price and best bid or ask.
* `GET /v1/product/market-liquidity?productId=<uuid>` for an order-book snapshot.
* WebSocket `Ticker` for periodic best price, mark, open interest, volume, and funding.
* WebSocket `L2Book` for an initial snapshot and later book changes.

Pass multiple product UUIDs as one comma-separated `productIds` value.

## mPerp Schedule and Position-Fee Data

* `GET /v1/product/mark-price-gap` lists scheduled mark-price gaps.
* `GET /v1/position-fee/projected-rate` returns the next projected position fee.
* `GET /v1/position-fee` lists completed product charges.

See [mPerp and Position-Fee API](/developer-guides/trading-api/rwa-and-position-fees).
