# Welcome to 42

Holla, welcome to 42 — a novel asset-issuance protocol where event outcomes trade as liquid tokens and settle like prediction markets.

Here, you'll find everything you need to get started on 42.

### Jump right in

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><h4><i class="fa-bolt">:bolt:</i></h4></td><td><strong>Introduction to 42</strong></td><td>Learn what 42 Markets is, what it does, and where it fits in the broader ecosystem.</td><td><a href="/files/dqPoxCztfnirRgpcpTI1">/files/dqPoxCztfnirRgpcpTI1</a></td><td></td><td><a href="/pages/7FvWQMF0kTK7HGhlQfmo">/pages/7FvWQMF0kTK7HGhlQfmo</a></td></tr><tr><td><h4><i class="fa-tablet-button">:tablet-button:</i></h4></td><td><strong>App Guide</strong></td><td>Step‑by‑step walkthrough of the 42 platform so you can trade and navigate the platform with confidence.</td><td><a href="/files/K3m0MBhPTVgyLxFLKY8R">/files/K3m0MBhPTVgyLxFLKY8R</a></td><td></td><td><a href="/pages/QPzbTvC6XsT5gERiU43E">/pages/QPzbTvC6XsT5gERiU43E</a></td></tr><tr><td><h4><i class="fa-robot">:robot:</i></h4></td><td><strong>Protocol Mechanics 101</strong></td><td>Dive into the core architecture and advanced concepts behind 42.</td><td><a href="/files/KAvpY3NrYjoDH9dgT2bs">/files/KAvpY3NrYjoDH9dgT2bs</a></td><td></td><td><a href="/pages/YSYHXkuuKFfMtiqKFhXV">/pages/YSYHXkuuKFfMtiqKFhXV</a></td></tr></tbody></table>


# Introduction

### What is 42?

42 is a decentralized, on-chain asset issuance protocol designed for both **information expression** and **speculative trading**.&#x20;

To put it simply:

*42 is an asset issuance protocol where event outcomes trade like liquid tokens and settle like prediction markets.*

Traditional prediction platforms rely on fixed odds, suffer from liquidity fragmentation, and often require external liquidity bootstrapping. 42 solves this through a **curve-based pricing mechanism** that supports liquidity natively where every trade mints or redeems directly against the curve, eliminating the need for pre-seeded liquidity.

This architecture unlocks **open-ended upside**. Payouts are not capped at the traditional *‘maximum $1 return’*. The return profile is shaped entirely by market flow, timing, and the distribution of positions across outcomes.

Where recent platforms like Pump.fun popularized purely speculative tokens, 42 introduces **liquid outcome assets:** tokens with **explicit resolution and settlement rules** embedded at the protocol level. These outcome tokens behave like tradable assets with deterministic end states.

#### **Why this matters**

* **Short-term markets** can exhibit wide payoff ranges and rich trading dynamics.
* **Long-term markets** behave like fair memecoins where tokens with real resolution rules that can be listed and traded across external platforms.

42 is an infrastructure built to introduce a **new asset class**.

In essence, 42 combines:

* the expressiveness an opinion,
* the liquidity and dynamics of trading, and
* the structural clarity of assets with deterministic settlement.

This creates a new category of on-chain markets where **belief, timing, and flow** all translate into tradable, liquid, and ultimately resolvable assets.


# Key Concepts

Foundational ideas and terminology behind how 42’s eventcoins markets work.

#### Asset Launchpad

42’s underlying market architecture powering **eventcoins.** Instead of matching traders or quoting fixed odds, the protocol issues fully transferable Outcome Tokens directly through a shared pricing function, with prices evolving continuously as capital flows in or out of the market.

All outcomes are priced together via it’s power curve formula, ensuring prices reflect aggregate positioning. At resolution, the market settles collectively where all collateral is pooled and redistributed pro-rata to holders of the winning outcome token(s), with payouts determined by relative participation over time.

#### **Payouts**

A payout represents the **economic claim on the collateral pool** that emerges when a market resolves. Payouts are shaped by how capital accumulates across outcomes over time and are finalized only at resolution.

On 42 markets, the potential payout on each outcome is infinite. Payouts are determined by **relative participation at resolution** primarily determined by when you entered, the relative strength of your conviction, and how the market evolved after.

#### **Open-Ended Upside**

In 42, returns scale with the market size alongside with relative outcome token dynamics. Profit potential increases with early entry, shifts in flow toward other outcomes, and late-stage conviction from new participants.

Because payouts are not fixed and instead derive from the total collateral and distribution of positions at resolution, the final return is determined entirely by the **market state at settlement**, not a predefined ceiling. This introduces meaningful convexity and rewards users who enter early, position accurately, or time their participation effectively.

#### **Outcome Tokens**

Outcome tokens represent positions on specific market outcomes and are minted when users enter the market by backing an outcome through the bonding curve. These tokens can be redeemed at any time before resolution using the [power curve](/getting-started/protocol-mechanics-101/42-power-curves) and redeem tax mechanics, allowing users to exit or reposition freely. After the oracle resolves the market, all winning outcome tokens become claimable for the underlying collateral, while losing tokens expire worthless. This design makes outcome tokens fully transferable, liquid assets with deterministic resolution rules.

{% hint style="info" %}
For more information, refer to [Outcome Tokens Section](#outcome-tokens).
{% endhint %}

#### **Market Resolution**

Resolution occurs when the oracle provides the final verified result for the event. At this point, the protocol identifies the winning outcome, freezes mint/redeem functions, and enables holders of the winning outcome tokens to claim their share of the total collateral pool.

**Payouts are proportional to the number of winning tokens held relative to the total winning supply.** The result is a transparent, deterministic settlement process that ensures fair distribution of the market’s accumulated value.

{% hint style="info" %}
For more information, refer to [Post-Resolution Section](/getting-started/protocol-mechanics-101/42-outcome-tokens/post-resolution).
{% endhint %}


# TL;DR: 42 in 30 Seconds

A short summary of 42.

42 is an on-chain asset issuance protocol built around **dynamic payouts**, **open-ended upside**, and a unified outcome-token architecture. Markets continuously reprice based on flow, timing, and conviction where rewarding users not just for being right, but for *when and how* they enter.

Its curve-based design removes the liquidity and secondary-market constraints, enabling traders to participate in a more efficient, expressive, and actively traded market environment.

### **Key Takeaways**

* Dynamic payouts that evolve with market flow
* Returns depend on timing, conviction, and market evolution
* Multi-outcome architecture supports seamless mint/redeem trading
* An open-ended upside potential that scales with market size
* Designed for both informational and speculative participation:
  * Speculate on eventual outcome resolution
  * Engage with market flow to capture price-action based opportunities


# App Guide

<table data-card-size="large" data-view="cards"><thead><tr><th data-type="content-ref"></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><a href="/pages/baiEdHQUoPqHdUp2Baes">/pages/baiEdHQUoPqHdUp2Baes</a></td><td>Account creation and funding</td><td></td></tr><tr><td><a href="/pages/o0CYplbjjqHoOPX3xaL1">/pages/o0CYplbjjqHoOPX3xaL1</a></td><td>Learn the basics and navigate the app</td><td></td></tr><tr><td></td><td>Playing Blitz</td><td><a href="/files/jMIzkPOn0RT2nO9kkxOg">/files/jMIzkPOn0RT2nO9kkxOg</a></td></tr></tbody></table>


# Onboarding


# Creating an account

Supported methods for account creation on 42.

You can create an account by authenticating via:

* An email address
* An existing wallet

<figure><img src="/files/4917RESZ3YO53bazWmnd" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
When you sign in in the future, you must verify your identity using the same method you used to sign up.
{% endhint %}


# Fund your account

There are 2 ways you can fund your account to get started with trading on 42.

### Transfer crypto&#x20;

You can transfer supported tokens from other wallets directly into your 42 account. All tokens will be swapped and bridged to USDT on Binance Smart Chain (BSC). We support bridging from major networks.

### Deposit crypto&#x20;

If you use this method, make sure to only send USDT on BSC to the wallet address. If you send anything else, it will not be reflected in your account.

<figure><img src="/files/wQuWh0enfeaacZDnbI3G" alt=""><figcaption></figcaption></figure>


# Trading Eventcoins


# Spotting opportunities for exit and entry

There are two simple ways to find opportunities on 42: By Event Markets and By Outcome Tokens. Choose the view that matches how you like to trade.

### Discovering markets

Markets are organized into three columns to reflect an event’s lifecycle and help you time entries and exits

* `New`: Early-stage markets. Outcome token prices can be low and potential payout multipliers high if you build a position before broader attention arrives. Suitable for conviction-driven entries and smaller, exploratory positions.
* `Trending`: Markets with significant recent trading activity. High activity often signals price discovery in progress. Look for dislocations (strong buying or selling) that create short-term momentum or mean-reversion trades.
* `Ending`: Markets approaching resolution. Trading will stop soon, and remaining holders will wait for settlement to determine winners and losers. Use this view for late-stage positioning, hedges, or to close trades before settlement. Learn more about the payout mechanism in [Convex Payout Dynamics](/getting-started/protocol-mechanics-101/convex-payout-dynamics)

<figure><img src="/files/ZxJIGdy8eG4H0C56orLn" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Tips

* In `New` markets, start small and add size as liquidity and information improve over time
* When looking at  `Ending` markets, be explicit about your plan: exit pre-settlement or hold through resolution
  {% endhint %}

### Discovering outcomes&#x20;

This table surfaces the most active outcomes across all markets, regardless of the market’s lifecycle. It ranks outcomes by volume at the top, highlighting where attention and order flow are concentrated.<br>

<figure><img src="/files/jUgrRI0mcOJWHvOKGclO" alt=""><figcaption></figcaption></figure>

What volume can mean:

* **Heavy selling:** Participants may be exiting or de-risking (potential overshoots to fade)
* **Aggressive buying:** A developing narrative or new information (momentum continuation setups)
* **High churn:** Two-sided trading with frequent reversals (range or scalp setups)<br>

How to use this view: &#x20;

* Scan the buy and sell ratio column to find where the action is quickly&#x20;
* Refine your exit or entry plan by pairing outcome activity with the stage of the market (how soon is it ending)&#x20;
* Switch time windows (e.g., 30m, 1h, 4d) to see how market cap, price, and payout evolved over time. Use shorter windows for timing entries; use longer windows to understand the broader trend and where volatility clusters


# Buying an outcome

{% stepper %}
{% step %}

### Select outcome

Select the outcome you want to back
{% endstep %}

{% step %}

### Enter amount in USDT

Live preview of how your expected payout changes after you enter the position. Payouts are not fixed—they update as other participants buy or sell the same outcome.

{% hint style="info" %}
Learn more in [Payout Mechanics](/getting-started/protocol-mechanics-101/convex-payout-dynamics#payout-mechanics).
{% endhint %}
{% endstep %}

{% step %}

### Buy

Confirm your order
{% endstep %}

{% step %}

### Share Outcome Card (Optional)

Flex your position and the potential winnings of what you just bought
{% endstep %}
{% endstepper %}

After buying an outcome, you can choose to&#x20;

* Take profit by [Selling an outcome](/getting-started/publish-your-docs/trading-eventcoins/selling-an-outcome) if you observe more participants buying the same outcome (your payout may improve as flow shifts).
* Hold until resolution. If your outcome wins, your tokens share the resolved market’s Total Market Cap with other winning holders. If it loses, the token’s value goes to $0.


# Selling an outcome

{% stepper %}
{% step %}

### Select outcome

Select the outcome you want to sell
{% endstep %}

{% step %}

### Enter amount of tokens

Live preview of how much you're estimated to receive in USDT, and the spread.&#x20;

{% hint style="info" %}
**Understanding redemption spread**\
Larger, market-moving sells and late-stage markets both raise the spread on your sale. Small sells early in an event typically face lower spreads.

Learn more in [Redeem Tax Explained](/getting-started/protocol-mechanics-101/42-outcome-tokens/market-discovery-pre-resolution#redeem-tax-explained).
{% endhint %}
{% endstep %}

{% step %}

### Sell

Confirm your order
{% endstep %}

{% step %}

### Share PnL card (Optional)

Flex your PnL after you sell the outcome you were holding
{% endstep %}
{% endstepper %}


# Managing positions

You can view and manage your positions and history by clicking Portfolio in the main navigation. This page will show your total portfolio value, and overall unrealised and realised profit or loss.

<figure><img src="/files/JOC6uBold8njdmZ9ccBX" alt=""><figcaption></figcaption></figure>

#### Active Postions

`Current value` shows what your position is worth right now based on the latest market price. This updates as the price of the outcome moves continuously. It reflects how much you would get back if you sold at the current price (before fees and tax).&#x20;

`If outcome wins` shows what your position would be worth if this outcome ends up being the winner. This is your potential payout at resolution. It assumes the market resolves in favor of the outcome you are holding and you claim your winnings

<figure><img src="/files/IchoWFVSkYKXkkSxK8ac" alt=""><figcaption></figcaption></figure>

In short: current value is what it’s worth now if you sell it, if outcome wins is what it could be worth if you’re right and assuming market participation does not change.

#### Ended&#x20;

Positions that have ended move through three states before reaching final resolution. During this time, they are no longer tradable, and the exact payout remains undetermined until the market is fully resolved. Here’s what each state means for you:

<table><thead><tr><th width="135.8515625">Status</th><th>What it means</th></tr></thead><tbody><tr><td>Resolving</td><td>The market has ended and the team is still determining the winning outcome. During this period, trading has stopped and the final result is being checked and confirmed</td></tr><tr><td>Dispute period</td><td>Dispute period means a tentative winning outcome has been set by the team, but it’s open to challenge for a short time. During this state, the proposed outcome is visible and users can raise disputes if they believe it’s wrong. After this period, the outcome is final</td></tr><tr><td>Ready to Claim</td><td>Ready to claim means the winning outcome is final and your position is settled. If you held the winning outcome, you can now claim your payout. If you held a losing outcome, your position has no payout</td></tr></tbody></table>

<figure><img src="/files/EwAqWjy045OKFTDuA55P" alt=""><figcaption></figcaption></figure>

#### History&#x20;

In your position history, every action on your positions is recorded — including when an outcome is bought, sold, or resolved. If you sell all your positions before the resolution date, those trades will appear in your history table, but the position itself will not generate an additional “resolved” entry.

<table><thead><tr><th width="176.90625">Action type</th><th>What it means</th></tr></thead><tbody><tr><td>Resolved</td><td>Records what happened when the market finished and your tokens settled to either winning or losing. Value of the tokens and their corresponding PnL are reflected. </td></tr><tr><td>Sold</td><td>Records when you sold Outcome Tokens before resolution, the amount you sold and the PnL calculated against your cost basis of the Outcome Token</td></tr><tr><td>Bought</td><td>Records when you purchased Outcome Tokens, and how much </td></tr></tbody></table>

<figure><img src="/files/EzZi94w4IYNp1Ag5qvDH" alt=""><figcaption></figcaption></figure>


# Claim resolved outcome(s)

Once a market resolves and finalises the winner(s), holders of the winning Outcome Token can claim their payout:&#x20;

<figure><img src="/files/fUGgrdE4rljp1CSRPe8i" alt=""><figcaption><p>Claim button will be available on the top right navigation</p></figcaption></figure>

<figure><img src="/files/YN4Sb2OTUUU0vX04yu4T" alt=""><figcaption><p>Portfolio > positions > ended will have claimable amount highlighted as well</p></figcaption></figure>

Only outcome tokens that have won will be claimable. For outcome tokens that were held to resolution and lost will be found in [Managing positions](/getting-started/publish-your-docs/trading-eventcoins/managing-positions#history).

<details>

<summary><strong>How is the value of the winning token calculated?</strong></summary>

When a market is resolved, winning Outcome Tokens are redeemable for a pro‑rata share of the total collateral across all outcomes in that market.

In other words:\
Each winning token represents an equal slice of the total collateral pool. The value of 1 winning token is:

`Value per winning token = Total collateral in the market ÷ Total number of winning tokens`

Example

* Total collateral at resolution: $10,000
* Market outcomes: A, B, C
* Outcome A is the winner
* There are 100 Outcome A tokens in total

So, the value of 1 Outcome A token is:

$10,000 ÷ 100 = $100 per token

If you hold 5 Outcome A tokens, your claim amount is:

5 × $100 = $500

</details>

<details>

<summary><strong>Which factors affect the value of a winning token?</strong></summary>

The value of each winning token at resolution is driven by what happens to the market as a whole, not just your position. Broadly, there are two forces that can reduce the value per winning token:

1. **Outcome dilution (more people buying the same outcome)**\
   As more participants buy the same outcome after you, the total number of that outcome’s tokens increases. Even if the total collateral pool grows, it is now split across more winning tokens, so the value per token at resolution can go down. \
   \
   In other words, you’re sharing the same pot with more people, which can dilute your eventual payout per token.
2. **Shrinking collateral pool (participants exiting before resolution)**\
   Some traders may redeem or exit their positions before the market resolves.\
   When they do, collateral leaves the pool, which reduces the total collateral backing the market. With less collateral spread across the set of winning tokens, the value per winning token at resolution decreases.

</details>

<details>

<summary><strong>Can I still lose money even if my outcome wins?</strong></summary>

Yes. Even if the outcome you backed is the winning one, your position can still end up at a loss when you compare your final payout to your total cost basis. This happens because what you get at resolution depends on the value per winning token at the end, not just on whether you were right.

Your PnL depends on what you paid to get your position versus the final value per winning token at resolution, which is shaped by everyone’s actions over time — not just by whether your outcome wins.

</details>


# Blitz

<figure><img src="/files/jMIzkPOn0RT2nO9kkxOg" alt=""><figcaption></figcaption></figure>

Blitz is a 30-second game. BNB, ETH and SOL line up at the start of every round. Pick the one you think will post the highest gain by the time the round ends. Every trade placed in the round goes into a single pool, and the holders of the winning asset split it between them.

Rounds run on a fixed clock, so a new race starts every 30 seconds. There is no leverage, no liquidation price, and nothing to manage once you're in — you buy a position, the race runs, and the round settles.

Asset prices are sourced from [Chainlink](https://chain.link/) price feeds

### How It Works

Every round lasts 30 seconds and is split into two segments: **Pre-race** and **Race**

<figure><img src="/files/edp7RDGrybmk0TB2JWp7" alt=""><figcaption></figcaption></figure>

<table><thead><tr><th width="155.20703125">Segment</th><th width="150.7265625">Duration</th><th>Trading</th><th>What's happening</th></tr></thead><tbody><tr><td>Pre-race</td><td>5s</td><td>Open</td><td>Assets are on the line. Prices are flat since there is no information yet.</td></tr><tr><td>Race</td><td>10s</td><td>Open</td><td>Assets move in real time. Prices react to the standings.</td></tr><tr><td>Race</td><td>10s</td><td>Closed</td><td>Trading is locked. Watch the race to the finish line.</td></tr><tr><td>Settlement</td><td>5s</td><td>Closed</td><td>The winner is confirmed and the pool is paid out. Next round begins.</td></tr></tbody></table>

#### Pre-race (5 seconds)

Outcome token prices stay flat throughout the pre-race segment. Backing any of the three assets costs the same regardless of when you buy in this window.

This is the cheapest point of entry in the round, and the point at which you have the least information to go on.

#### Race (10s trade + 10s watch)

The race starts and the three assets begin moving against live price data.

**Trading is open for another 10 seconds.** Watch the assets move and place your trades. Outcome token prices are no longer flat: as the picture becomes clearer, backing the frontrunner costs more. Waiting buys you information, and information costs money.  A later entry buys fewer shares for the same money.

**In the final 10s of the race, trading is locked.** No new positions can be placed. The assets run to the finish line and the round is decided on the closing data.

#### Settlement

Once the winning asset is confirmed, the pool is paid out to holders of that asset's outcome token. This takes a few seconds, after which the next round's pre-race segment begins automatically.

### Payouts

**Winner takes the whole pool.** Every trade placed during the round, across all three assets, goes into one prize pool. When the round settles, that entire pool is distributed to holders of the winning asset. Positions on the two losing assets expire worthless.

**The pool is split pro-rata.** Your share of the pool is your share of the winning outcome tokens:

```
your payout = round pool × (your winning shares ÷ total winning shares)
```

### Fees

Blitz charges a total of **1%**, made up of:

| Fee            | Rate   |
| -------------- | ------ |
| Integrator fee | 0.6%   |
| Protocol fee   | 0.4%   |
| **Total**      | **1%** |

### Trading Rules

<figure><img src="/files/hAvzkc0n26VYRn76SXCG" alt=""><figcaption></figcaption></figure>

**Buy only.** You can open a position by buying an outcome token, but positions cannot be sold. Once you've bought in, you are in until the round settles. There is no early exit, no partial close, and no way to flip your pick.&#x20;

**Trading closes 10s before the finish line.** Any position you want must be placed during pre-race or the first half of the race.

### How Outcome Tokens Are Priced

**During pre-race, prices are flat.** No race data exists yet, so there is nothing for the price to react to.

**Once the race begins, prices move.** Live price data arrives, the standings become visible, and the outcome tokens re-price in response. An asset that pulls ahead becomes more expensive to back.

### Supported Assets

Every Blitz round races the same three assets:

* **BNB**
* **ETH**
* **SOL**

### Where the Data Comes From

Asset prices are sourced from Chainlink price feeds. Chainlink aggregates data across multiple independent node operators and exchanges, so each round settles against an external, publicly verifiable feed rather than an internal price.


# Market types

There are two types of markets on the platform: **Event Markets** and **Price Markets**. Both are parimutuel whereby all funds enter a shared pool, and winners split it proportionally. However, they differ significantly in structure, pricing mechanics, and how strategies are managed.

### Comparison between Event Markets and Blitz Markets

<table><thead><tr><th width="173.046875">Type</th><th width="254.9140625">Event Markets</th><th width="336.39453125">Blitz Markets</th></tr></thead><tbody><tr><td><strong>Topic focus</strong></td><td>Event outcomes</td><td>Fast-paced token races</td></tr><tr><td><strong>Round structure</strong></td><td>Open-ended until resolution</td><td>30s rounds</td></tr><tr><td><strong>Resolution trigger</strong></td><td>Event conclusion or scheduled end time</td><td>Fixed target time (30s from opening)</td></tr><tr><td><strong>Pricing model</strong></td><td>Power Curve</td><td>Double07 Curve</td></tr><tr><td><strong>Driver of price</strong></td><td>Number of tokens minted per outcome</td><td>Time elapsed in the round</td></tr><tr><td><strong>Early entry advantage</strong></td><td>Lower price before demand builds</td><td>Significantly lower price early in round</td></tr><tr><td><strong>Position exits</strong></td><td>Allowed before resolution</td><td>Not permitted — locked until resolution</td></tr><tr><td><strong>Payout structure</strong></td><td>Proportional share of total pool</td><td>Proportional share of total pool</td></tr><tr><td><strong>Payout availability</strong></td><td>At resolution finalization</td><td>At resolution finalization</td></tr><tr><td><strong>Continuous rounds</strong></td><td>No</td><td>Yes — new round opens every 30s</td></tr></tbody></table>

{% tabs %}
{% tab title="How event markets work" %}
Event Markets are open-ended outcome markets. A market is created around a specific question or event, with multiple possible outcomes. Participants mint outcome tokens for whichever outcome they expect to grow in demand, or resolve as correct, depending on their strategy.

#### Outcomes & Structure

Event Markets support **multiple outcomes** — not just binary yes/no. Each outcome has its own token, and all tokens draw from the same shared pool at resolution. Market resolution can occur at a pre-set end time, or **earlier if the underlying event concludes** — for example, a market on a sports result resolves as soon as the final score is confirmed, not at a scheduled future time.

#### Sports markets

Sports markets are a subset of Event Markets. They create eventcoins around live sports events. There are two main structures: **Scoregrid** and **Outright & Prop** markets.

**Scoregrid**

Scoregrid asks one specific question: **What will the exact score be?**

For a soccer match, traders buy and sell tokens across a **6 × 6 grid**. Each cell represents one exact scoreline, such as `2–1` or `0–0`. All cells draw from the same shared pool. When the match ends, the full pool flows to holders of the correct scoreline.

* **Trading window:** Scoregrid markets close at kickoff. There is no in-play trading<br>

  <figure><img src="/files/zupnDQdXA1o2PKD44z02" alt=""><figcaption></figcaption></figure>
* **Dynamic odds:** Prices shift continuously as traders buy and sell. Crowded scorelines get expensive. Thin scorelines stay cheaper. Early, contrarian calls benefit the most: you pay less and face fewer competitors for that cell's payout. If the crowd piles into 1–0 and you take 2–1 early, a correct call on a thin cell pays out at a higher multiple than following consensus
* **Position exits:** Positions can be sold only while the market is open. After kickoff, positions remain locked until settlement
* **Resolution & payouts:** Once the final score is confirmed, holders of the winning scoreline split the pool proportionally

**Outright & Prop markets**

Outright and Prop markets cover outcomes beyond the exact final score

Examples include:

* A player's total points or assists in a match
* Whether a team reaches the knockout round
* Which team wins a series or advances a stage

#### Pricing: Power curve

Outcome token pricing follows a power curve that is **demand-based**. Each mint increases the price of that outcome token for subsequent buyers — cost is a function of how many tokens for that outcome already exist.

> The more popular an outcome becomes, the more expensive it gets to enter.

This means:

* **Early entrants** pay lower prices on outcomes before they attract attention
* **Later entrants** pay a higher price, reflecting accumulated market conviction
* Prices across outcomes shift dynamically as minting activity changes supply

Learn more in [#pricing-power-curve](#pricing-power-curve "mention")

#### Position Exits

Positions in Event Markets **can be sold before resolution**. Participants may exit at any point while the market is open, realising a gain or loss based on the sell price relative to their entry cost. The sell price is affected by the redeem tax. Learn more about it in [Selling an outcome](/getting-started/publish-your-docs/trading-eventcoins/selling-an-outcome#sell)

#### Resolution & Payouts

When the market resolves, the correct outcome is confirmed. The entire pool flows to holders of that outcome's tokens, distributed proportionally by token share.

```
Your Payout = (Your tokens in winning outcome / Total tokens in winning outcome) × Total Pool
```

{% endtab %}

{% tab title="How price markets work" %}
Blitz Markets are a structured, time-bound market type focused on how much each token's price gains in each round.&#x20;

Unlike Regular Markets, Blitz Markets follow a strict round schedule. Prices of outcomes are based on a time-based pricing curve, and exits are not allowed.

#### Outcomes & Structure

Participants mint outcome tokens for the token they expect to win at resolution. As with Regular Markets, the pool is shared and flows entirely to the winning token at resolution.

Rounds follow a fixed, repeating 30s schedule, opens from 8:00 AM to 4:00 PM UTC

<table><thead><tr><th width="184.05078125">Phase</th><th width="122.34765625">Duration</th><th>What Happens</th></tr></thead><tbody><tr><td><strong>Trading Phase</strong></td><td>15s</td><td>Market is open. Enter and build your position</td></tr><tr><td><strong>Watch Window</strong></td><td>10s</td><td>Trading closes, watch the race</td></tr><tr><td>Settlement Window</td><td>5s</td><td>Winner is determined. Payouts are calculated</td></tr></tbody></table>

#### Position Lock

Once a position is minted in a Blitz Market, **it cannot be sold.** Tokens are locked until the round resolves.

This is an intentional design constraint. Combined with the clockCurve, it ensures:

* No value leakage from early exits
* Payouts reflect committed conviction, not late repositioning
* The pool remains intact for winners at resolution

{% endtab %}
{% endtabs %}


# Protocol Mechanics 101


# Glossary

Key terms and concepts specific to 42 markets.

**Eventcoins**\
A new asset class representing mutually-exclusive outcomes of a future event, issued as fully transferable tokens that trade continuously and settle objectively at resolution.

**42 Market**\
A novel launchpad-like market structure where prices evolve continuously during the event, but final payouts are determined collectively at resolution from the total collateral pool.

**Outcome Tokens**\
ERC-6909–style tokens representing a specific outcome of an event. They are fully transferable during the market lifecycle and exhibit ERC-20–like behaviour. Upon resolution, the winning Outcome Token(s) redeem a pro-rata share of the total collateral pool.

**Power Curve**\
The endogenous pricing function that governs minting (buy) and redemption (sell) of Outcome Tokens based on supply and orderflow.

**Redeem Tax**\
A dynamic market-level spread applied on redemption that reflects supply impact, liquidity depth, and time-to-resolution, with proceeds retained in the settlement pool.

**Resolution**\
The deterministic process by which a single outcome is declared correct based on predefined rules and oracle inputs.


# 42 Markets

The Why and How 42 Markets work.

### **Core Principle**

42 combines **continuous trading** with **parimutuel settlement** into a single market primitive.

During the life of an event, Outcome Tokens trade freely as liquid assets. Participants can enter, exit, rebalance, or rotate positions as new information emerges. Prices are not fixed representations of probability, but dynamic expressions of *relative conviction and capital flow*.

At resolution, the market concludes deterministically into a **single winning outcome**. All collateral committed to losing outcomes is pooled and redistributed pro-rata to holders of the winning token. There are no partial wins, no probabilistic payouts, and no residual liquidity.

This structure delivers three core properties simultaneously:

1. **Sustained activity before resolution**

   Markets remain tradeable throughout their lifetime, encouraging continuous information expression rather than one-off bets.
2. **Clean capital redistribution at settlement**

   Resolution is final and atomic: capital is either reclaimed or reallocated, leaving no zombie pools or stranded liquidity.
3. **No reliance on fixed payoff ceilings**

   Upside is not predefined and payouts scale organically with market size, participation asymmetry, and captured mispricing.

### The Lifecycle of a 42 Market

<figure><img src="/files/Bb7Np9i1uk9519HFocae" alt=""><figcaption></figcaption></figure>

#### Phase 1: Market Discovery

When a 42 market opens, it enters a fully tradeable discovery phase. All possible outcomes are instantiated as Outcome Tokens, each backed by collateral and governed by it's individual power curve.

During this phase, participants express beliefs by minting (buy), redeeming (sell) existing positions, or rotating exposure between outcomes as information evolves. Prices adjust continuously as the relative supply of each Outcome Tokens shifts, reflecting where capital is flowing rather than fixed probabilities.&#x20;

* Traders simply trade based on relative value i.e. *entering when prices feel cheap, exiting when they feel expensive, and repositioning as new information emerges.*
* Predictors may form views on the implied likelihood of an outcome relative to others and choose to enter when they believe an outcome is meaningfully underrepresented by current prices.

As a result, price formation is path-dependent and conviction-weighted, emerging from collective capital flow over time rather than any single participant’s accuracy.

#### **Phase 2: Outcome Resolution**

At resolution, the market permanently transitions from a trading system to a settlement mechanism. This occurs when **(1) market deadline has crossed** or (**2) the market has been deliberately resolved early.** During this phase:

1. **A single set of outcome(s) is declared the winner** based on predefined, objective resolution rules.
2. **All trading halts** (minting, redeeming, and transfers are disabled.)

The market then awaits for finalisation (final step confirmation) on the resolved outcome(s), and once done **existing collateral is pooled and redistributed pro-rata** to holders of the winning OT(s).

{% hint style="info" %}
This state of finality is atomic and absolute where there will be no residual liquidity or future rollover states.
{% endhint %}


# 42 Power Curves

On underlying pricing mechanism of 42 markets.

Price discovery on 42 is not an emergent side-effect of liquidity subsidies or market-maker quoting. It is a **first-class design objective** embedded directly into a novel mathematically-driven price curve, also known as the 'Power Curve'.

The power curve governs how prices respond to orderflow, which is a function to how information is incorporated over time and how capital is allocated as an event progresses toward resolution. Here, 42 optimizes for **continuous, incentive-aligned information pricing** throughout the event lifecycle.

## **Power Curve 101**

<figure><img src="/files/HZchTkv6Dj2BLWJ56epr" alt=""><figcaption></figcaption></figure>

The bonding curve defines the relationship between **token supply** and **price**. Conceptually, it functions like a ‘single-sided AMM’ where price discovery **emerges mechanically from supply movement along a predefined curve.** Each additional unit of supply is minted at a slightly higher marginal price than the last, reflecting increased aggregate demand for that outcome.

In practice:

* The amount of Outcome Tokens received is calculated by integrating along the curve from the current supply to the post-mint supply.
* Larger mints traverse more of the curve, resulting in higher average prices.
* Smaller, early mints benefit from lower marginal prices.

This mechanism ensures:

* **Deterministic execution →** the same inputs always produce the same outputs
* **No counterparty dependency** → users interact directly with the protocol, not with other traders
* **Transparent pricing** → prices are a pure function of supply and orderflow, visible on-chain at all times

On 42, there are no order books to clear, no quotes to stale, and no liquidity providers bearing inventory risk. Price formation is **continuous, mechanical, and fully endogenous to the market.**

### **Design Objectives of the Curve**

The bonding curve is explicitly designed to shape participant behaviour in economically meaningful ways.

1. **Reward early information**\
   Participants who surface correct or differentiated views before consensus forms are rewarded with a lower cost basis and greater convexity. Early positioning is structurally advantaged, not by privilege, but by exposure to a more favorable region of the curve.
2. **Penalize late, low-conviction entry**\
   As an outcome accumulates demand, its marginal price increases. This makes late entry increasingly expensive unless backed by strong conviction, discouraging shallow or reactive positioning and reducing noise-driven churn.
3. &#x20;**Encourage continuous participation**\
   Because prices move with every trade, participants are incentivized to engage repeatedly rather than wait passively for resolution. This turns markets into living systems where information is priced as it arrives, not only at the end.
4. **Circumvent liquidity cliffs**\
   Unlike order books or fixed-liquidity AMMs, the curve does not rely on discrete depth. Execution is always available, with slippage increasing smoothly rather than abruptly. This avoids sudden breakdowns in tradability during periods of stress or uncertainty.
5. **Scale across market sizes without structural change**\
   The same mechanism functions whether a market has $100 or $100 million in total value. There are no parameters to retune, no liquidity thresholds to cross, and no dependence on external market makers to “activate” the market.

#### **Efficiency Across Market Stages**

As an event evolves, different forces dominate price formation. The bonding curve adapts naturally to each phase.

| Market Stage | Dominant Force        | Curve Role                                 |
| ------------ | --------------------- | ------------------------------------------ |
| **Early**    | Information asymmetry | High convexity rewards early signal        |
| **Mid**      | Flow & momentum       | Smooth, continuous price discovery         |
| **Late**     | Resolution certainty  | Stability and integrity via redemption tax |

**Early Stage (Information Dominates)**

At launch, markets are usually thin in information but rich in uncertainty. Small flows can meaningfully move price, allowing informed participants to express conviction cheaply. The curve’s convexity ensures that early signal extraction is rewarded proportionally.

**Mid Stage (Maturing Flow Shapes Consensus)**

As participation increases, price movements reflect the aggregation of beliefs, narratives, and momentum. The curve reduces in price volatility (price function becomes less steep) while remaining responsive, allowing consensus to form through sustained interaction.

**Late Stage (Certainty Approaches)**

As resolution nears and uncertainty collapses, the market prioritizes stability and fairness. Redemption frictions discourage last-minute ‘extraction’ and preserve the integrity of the collateral pool, ensuring that final payouts reflect accumulated positioning rather than opportunistic timing.

### **The Resulting Market Properties**

The combined effect is a market structure that:

* **Feels liquid at all sizes**, without needing external liquidity providers
* **Prices information continuously**, rather than episodically
* **Aligns incentives across time**, rewarding early insight while preserving late-stage integrity
* **Resolves cleanly and fairly**, with a ‘winner-takes-all’ settlement mechanism

Ultimately, the goal for 42 is to builds a system where **the path of prices matters**, and where market efficiency improves naturally as participation and information compound over time.


# 42 Outcome Tokens

Everything you need to know about 42 market's outcome tokens.

Outcome Tokens are the core assets issued by 42. Each token represents a specific, mutually exclusive outcome of a future event. These tokens are fully transferable, trade continuously throughout the event lifecycle, and settle objectively at resolution.

### **Transferability**

Outcome Tokens are fully transferable on-chain assets. Once minted, they behave like standard tokens ([`ERC-6909` standard](https://eips.ethereum.org/EIPS/eip-6909)) and are not confined to a single interface or execution venue.

In practice, this means Outcome Tokens:

* Can be moved freely between wallets
* Can be held, transferred, or traded externally
* Are not bound to the 42 interface for ownership or custody

This ensures that eventcoins remain composable and interoperable, while still settling deterministically at resolution.

To dive deeper into how Outcome Token works, refer to the following sub-sections:

* [Pre-Resolution](/getting-started/protocol-mechanics-101/42-outcome-tokens/market-discovery-pre-resolution)
* [Post-Resolution](/getting-started/protocol-mechanics-101/42-outcome-tokens/post-resolution)


# Market Discovery (Pre-Resolution)

All you need to know about when the market is live.

42 markets are purpose-built for simplicity, with only three core actions: **Mint** (buy), **Redeem** (sell), and **Claim** (collect rewards).

During the **discovery phase**, markets are live and fully tradeable. Users can freely mint and redeem Outcome Tokens (OTs) as prices evolve and information emerges.

In this section, we’ll walk through how each action works in practice.

### **Minting (Buy)**

Minting is the process by which new **Outcome Tokens (OTs)** are created directly against the protocol. Unlike traditional markets, tokens are not matched against another participant or issued at a fixed price. Instead, they are minted via a **mint power curve** that responds to existing supply and incoming demand.

<figure><img src="/files/aati48TaLSQduMls48V7" alt=""><figcaption></figcaption></figure>

When a user mints, they deposit collateral into the market (USDT). The protocol calculates how many new OTs are issued based on:

* the current outstanding supply, and
* the size of the deposit along the curve.

Prices are **marginal**, and as supply increases, each additional token becomes more expensive.

{% hint style="info" %}
**Mint Example (For illustrative purposes)**\
\
Suppose the current outstanding supply of an outcome token is **Q₁**, and the marginal mint price at that point is **$3**.\
\
If a user mints additional tokens, increasing supply from **Q₁ (100) → Q₂ (200)**,  the marginal price rises along the curve which ends at **$5** at **Q₂**.<br>

The user does **not** pay $5 for all tokens. Instead, the total cost is the **area under the mint curve between Q₁ and Q₂**. The user simply sends collateral equal to this total area, and the protocol issues the corresponding amount of Outcome Tokens.
{% endhint %}

### **Redeeming (Sell)**

Redeeming is the process by which OTs are converted back into collateral prior to resolution. When OTs are redeemed, they are removed from circulation and the effective supply decreases. Redemption pricing follows the inverse path of minting, moving **back down the mint power curve**.

Similar to minting, this ensures that participants can exit positions at any time, with pricing determined solely by current supply and market state.

<figure><img src="/files/Ekp1ki64wsmY6iciNNwv" alt=""><figcaption></figcaption></figure>

When a user redeems tokens, the protocol:

1. **References the mint curve** to determine the theoretical value of the redeemed supply.
2. **Applies a redeem spread** at the order level.
3. Pays out collateral **below the mint-curve buy cost**.
4. Retains the spread inside the pool, increasing the eventual payout for remaining holders at resolution.

{% hint style="info" %}
**Redeem Example (For illustrative purposes)**\
\
Suppose total outstanding supply decreases from **Q₂ → Q₁** as a user redeems **(Q₂ − Q₁)** tokens.\
\
The gross value is first computed from the mint curve (the reverse of minting). A redeem spread is then applied, so the user receives less collateral than the original mint cost for that same quantity.\
\
The withheld difference remains pooled in the market for eventual distribution to holders of the winning outcome(s).
{% endhint %}

#### **Redeem Tax Explained**

A **dynamic redemption tax** is applied to redemptions, increasing as the market approaches resolution. The function of it satisfy three core properties:

1. **Size-to-supply sensitive**\
   Redeeming a larger percentage of outstanding supply incurs higher spreads eg. *redeeming 10% of overall supply > redeeming 1%.*
2. **Liquidity Sensitive**\
   Spreads tighten as total outstanding supply grows. This means *redeeming 1 OT when supply = 10 has a higher spread compared to when supply = 1,000.*
3. **Time-sensitive**\
   Spreads increase as the market approaches resolution. This acts as an **information tax** on late-stage exits, when informational asymmetry is highest.

Collectively, this mechanism serves several purposes:

* **Discourages last-minute extractive exits** that exploit near-certain outcomes
* **Preserves the integrity of the collateral pool** for participants who remain exposed through resolution
* **Converts late-arriving information into retained market value**, rather than allowing it to be siphoned out

{% hint style="info" %}
The tax here serves as a structural tool that mirrors the concept of a ‘spread’ or slippage when it comes to trading given how it is governed mathematically via the power curve.
{% endhint %}

#### **Impact on Price Stability**

The presence of a redemption tax meaningfully improves market behavior near resolution:

* **Reduces volatility spikes** by dampening abrupt exit incentives
* **Acts as an information-sensitive friction**, increasing the cost of low-conviction, late-stage trading
* **Protects long-term participants** from adverse selection by short-term, certainty-driven exits

The power curve and redemption tax shape market dynamics to better reflect crowd consensus as information becomes clearer. This ensures that price formation remains orderly throughout the different phases of the market lifecycle, and that final payouts reward accumulated positioning over opportunistic timing.


# Post-Resolution

What happens when market deadline has passed, or early resolution has been initiated.

Upon resolution or when the market deadline has passed, markets are no longer tradeable. Minting and redeeming cease, and OTs transition from speculative instruments to claims on value.

**Resolution** is the process by which an event concludes and the market collapses into a single set winning outcome(s). This step enforces the intrinsic value of OTs and guarantees a clean, deterministic end state for post-event reward distribution.

#### **Oracle Triggers & Resolution**

Each market is launched with **predefined resolution rules** and **deterministic oracle conditions**. These rules specify exactly how and when an outcome is considered resolved, removing ambiguity from the settlement process.

Once the oracle conditions are met:

* **One (or more) outcome(s)** declared as *correct\**
* All other Outcome Tokens are invalidated
* The market transitions from trading to settlement

{% hint style="info" %}
\**Multi-winning outcomes are supported but the initial phase will only include single-outcome markets.*
{% endhint %}

#### Single Winning Set

Resolution on 42 is **deterministic and final**. Every market resolves according to predefined rules and objective oracle conditions that produces a final settlement set unambiguous under the market’s specification.

In most markets, this settlement set corresponds to **one winning outcome**. However, depending on how a market is structured, resolution can also produce **multiple winning outcomes** (e.g., when the market definition explicitly allows a winning set rather than a singular outcome).

This means:

* **No discretionary payouts:** settlement is enforced strictly by the rules set at market creation
* **No probabilistic weighting at settlement:** probabilities are expressed through prices during trading, not injected at resolution
* **No subjective interpretation after the fact:** outcomes are resolved strictly according to the published resolution criteria

Once resolution occurs, the market converges to a **final winning set**, ensuring clarity for participants and enforceable payouts at the protocol level. This finality is what gives Outcome Tokens their intrinsic value and distinguishes eventcoins from open-ended speculative assets.

### **Claim**

After resolution, holders of the winning Outcome Token can claim their payout directly from the protocol. Claiming is permissionless and does not depend on counterparty actions or secondary market liquidity.

At this stage, trading ceases and the market transitions fully into settlement. Claims convert winning tokens into collateral, realizing the value accrued through correct positioning and market participation.

#### Payout Winnings

When the market concludes, all reserves are locked and distributed to holders of the **winning outcome token**. The payout per token is calculated as:

$$
Payout\_{\text{WinningOT}} = \frac{Market\_{\text{TotalReserves}}}{TotalSupply\_\text{WinningOT}}
$$

For each user, the total payout equals:

$$
UserPayout = Payout\_{\text{WinningOT}} \times QtyOwned\_{\text{WinningOT}}
$$

Given so, 42 markets essentially enable dynamic odds and open-ended room for both upside (and downside), where **returns are directly tied to timing, conviction, and accuracy**.

<figure><img src="/files/QPV49RICF3Wu4ayk9iXq" alt=""><figcaption></figcaption></figure>

**In short:**

* The earlier you enter, the lower your cost basis.
* Magnitude of winnings depends on how the market’s state upon resolution, where your final payout may be higher or lower than your entry cost.
* You can enter and exit anytime to capture price action as a trader before the market resolves.


# Convex Payout Dynamics

The unique upside potential of 42 markets.

### **How Convexity Emerges on 42 Markets**

<figure><img src="/files/g1Zk2HW8bo1jqI1XFZ9E" alt=""><figcaption></figcaption></figure>

Convexity in 42 arises from the interaction between **time, positioning, and capital flow**.

Early participants who take minority positions do so when opposing conviction is still dominant and prices are least reflective of the eventual truth. As new information enters the market and capital reallocates toward the correct outcome, later participants effectively fund the payoff of those who entered earlier.

When the market resolves, the winning outcome(s) splits the entire collateral pool, concentrating returns toward positions that accumulated exposure before consensus shifted. This structure creates asymmetric payoff profiles where downside is limited to capital committed, while **upside scales non-linearly with both timing and the magnitude of mis-pricing captured.**

### **Payout Mechanics**

Winning OTs are redeemable for a **pro-rata share of the total collateral pool** accumulated across all outcomes in the market.

<figure><img src="/files/5vaiiB1DxGBX1DOnj8xs" alt=""><figcaption></figcaption></figure>

Consider a market with three outcomes (**A, B, and C)** each represented by its own OT.

During the live market:

* Outcome A accumulates **$5M**
* Outcome B accumulates **$2M**
* Outcome C accumulates **$3M**

This results in a **total collateral pool of $10M** at resolution.

If **Outcome B** resolves as the winner, **all B-OT holders split the full $10M**, proportional to their ownership of the total B-OT supply.

#### **What Determines Payout Size**

In short, users can aim to maximize the upside of buying into a market by considering the following:

1. **The number of winning tokens held** → greater exposure results in a larger share
2. **The total size of the market at resolution** → deeper markets produce larger payout pools
3. **The degree of mis-pricing captured at entry** → earlier, lower-cost positioning increases effective returns

Participants who identified the correct outcome early benefit not only from correctness, but from having secured exposure before consensus and capital inflows reshaped the market.


# Playbook to Profiting

42's cheatsheet

### A Quick Guide to 42

<figure><img src="/files/a855A09ZA3yA6LLESqNn" alt=""><figcaption></figcaption></figure>

On 42, markets are intentionally designed to support both traders and speculators. Given so, users can profit through one of two primary paths:

**1. Buy Low → Sell High (Trade to Profit)**

Participants capture price appreciation as demand increases and the bonding curve shifts upward. As more capital flows into an outcome, the marginal price rises, allowing early entrants to exit profitably without waiting for resolution.

This strategy is primarily driven by timing, future (anticipated) flows and shifts in market sentiments (of the OT) where profitability lies in the right entry-exit setup.

**2. Buy the Correct Outcome Token → Hold to Resolution (Convicted Speculation)**

By holding the correct Outcome Token through resolution, participants earn a proportional share of the total collateral pool when the market settles. Returns scale with both **market size** and the **degree of mispricing captured at entry**.

This path rewards **strong conviction**, with outsized payoff accruing to those who position **early** and remain willing to **hold through volatility** as the market evolves.

Here, being **correct, and correct early** unlocks the most **convex outcomes**.

#### **An Important Caveat: Profitability Is Not Binary**

One of the most important (and often misunderstood) properties of 42 is the following:

> ***You can be wrong about the final outcome and still be profitable.***

This is not an exception or a loophole, but rather a unique feature of 42 following its **asset-issuance model**, where real-world events are transformed into continuously tradable Outcome Tokens rather than fixed, 'one-shot' bets.

Since 42 is designed as a trading-first market with a resolution-based end state, profitability depends **less on perfectly selecting the final winner and more on entry price, supply dynamics, and how liquidity accumulates across outcomes over time.**

*So how can profit occur even when the outcome is wrong?*

A typical scenario unfolds as follows:

1. You enter an Outcome Token early, at a low marginal price on the bonding curve.
2. As attention, narrative, or speculation builds, more participants allocate capital to that outcome.
3. Increasing demand pushes the marginal price higher along the curve.
4. You exit your position at a price above your entry cost, realizing a profit.

{% hint style="info" %}
**Example:** You buy an Outcome Token at $0.10, anticipating increased participation. As speculation builds, the price rises to $0.20. You then sell and realize a **2x return** even if the outcome later resolves as incorrect.
{% endhint %}

#### **Why Timing Can Matter as Much as Accuracy**

This behaviour highlights a core principle of eventcoins:

* Being **early** gives you a favorable cost basis.
* Being **right while early** determines the final payout at resolution.

When both align, returns compound through convex settlement. Even when only timing aligns, **trading profits remain possible**, even if the market ultimately resolves against your initial thesis.

*In 42, price paths matter, not just the final outcome.*


# Fees

On 42's trade fees.

42 applies a **protocol fee of 0.4% on trades** which serves as the core source of protocol revenue, and **0.4% on platform fees**. Fees are only incurred when users mint or redeem Outcome Tokens (OTs).

This protocol fee is separate from network gas fees, which are also paid in BUSDT from the proxy wallet during transaction execution.

### Mint Fee

For Mint transactions, the fee is calculated directly on the trade notional collateral deposited in exchange for the OT.

#### Formula

* **M** = Gross collateral from the mint
* **f** = protocol fee rate

$$
MintFee = M × f
$$

{% hint style="info" %}
**Example:**\
\
Given a mint size of **100 USDT**, the total fees (protocol and platform) will amount to $$100 \text{ USDT}  \times 0.8% = 0.8 \text{ USDT}$$<br>
{% endhint %}

### Redeem Fee

Redeems first apply a **redeem tax** (refer to [Redeem Tax Explained](/getting-started/protocol-mechanics-101/42-outcome-tokens/market-discovery-pre-resolution#redeem-tax-explained)). The protocol fee is then charged on the **remaining collateral**.

#### Formula

* **R** = gross collateral from the redeem
* **τ** = redeem tax rate
* **f** = protocol fee rate

$$
Redeem Fee = R × (1 − τ) × f
$$

{% hint style="info" %}
**Example:**\
\
Given a redeem size amounting to 100 USDT in gross collateral and redeem tax rate of 5%, the total fees (protocol and platform) will amount to $$100 \text{ USDT} \times (1-0.05)  \times 0.8% = 0.76 \text{ USDT}$$\
\
*\*Note: This ensures the protocol fee is only applied to the **net collateral returned from the pool**, not the taxed portion.*
{% endhint %}


# Deployments

42's core deployment configurations for reference.

### Core Contracts <a href="#core-contracts" id="core-contracts"></a>

42 markets are currently live on **BNB Chain** (`ChainId: 56`) where all deployed addresses can be found below:

<table data-header-hidden><thead><tr><th width="447.9609375"></th><th></th></tr></thead><tbody><tr><td><strong>Address</strong></td><td><strong>Details</strong></td></tr><tr><td><a href="https://bscscan.com/address/0x88888888338e60bfB4657187169cFFa5c8640E42">0x88888888338e60bfB4657187169cFFa5c8640E42</a></td><td><strong>FTRouter</strong> – (Deprecated) Supports all user market-related transactions (only V1 markets deployed by FTMarketController)</td></tr><tr><td><a href="https://bscscan.com/address/0x888888886619275d33c00D3BC62DF94D700DCD42">0x888888886619275d33c00D3BC62DF94D700DCD42</a></td><td><strong>FTRouterProxy</strong> – Supports all user market-related transactions (both V1 &#x26; V2 markets deployed by FTMarketController &#x26; FTMarketControllerV2)</td></tr><tr><td><a href="https://bscscan.com/address/0xF21b2D4F8989b27f732e369907F25f0E8D95Fe62">0xF21b2D4F8989b27f732e369907F25f0E8D95Fe62</a></td><td><strong>FTMarketController -</strong> (Deprecated) Primary contract managing market logic and configurations.</td></tr><tr><td><a href="https://bscscan.com/address/0x8Fe93361D2B8b9519C4d20d47a319288Feec9072">0x8Fe93361D2B8b9519C4d20d47a319288Feec9072</a></td><td><strong>FTMarketControllerV2 Proxy -</strong> Primary contract managing market logic and configurations.</td></tr><tr><td><a href="https://bscscan.com/address/0x0443E04e70E4285a6cA73eacaC5267f3B4cBb7Da">0x0443E04e70E4285a6cA73eacaC5267f3B4cBb7Da</a></td><td><strong>PowerCurve -</strong> Defines all the mathematical pricing mechanism behind 42 markets.</td></tr><tr><td><a href="https://bscscan.com/address/0xa59096C20022a9ec5d7691E0DcDc7D46776b1b3d">0xa59096C20022a9ec5d7691E0DcDc7D46776b1b3d</a></td><td><strong>PowerLDACurve -</strong> PowerCurve but with a linear decaying auction mechanism.</td></tr><tr><td><a href="https://bscscan.com/address/0x495B31876c092c236d1b0Df5Cc953D45d41301F1">0x495B31876c092c236d1b0Df5Cc953D45d41301F1</a></td><td><strong>ClockCurve -</strong> Defines mathematical pricing mechanism for 42's price markets.</td></tr><tr><td><a href="https://bscscan.com/address/0x4AAd5A856941FB64df10362024e3Ece24023d4d1">0x4AAd5A856941FB64df10362024e3Ece24023d4d1</a></td><td><strong>FTLensV2</strong> - Read-only helper contract to fetch on-chain market data and simulate trades.</td></tr></tbody></table>

#### Collateral Used

<table data-header-hidden><thead><tr><th width="447.9609375"></th><th></th></tr></thead><tbody><tr><td><strong>Address</strong></td><td><strong>Details</strong></td></tr><tr><td><a href="https://bscscan.com/token/0x55d398326f99059ff775485246999027b3197955">0x55d398326f99059ff775485246999027b3197955</a></td><td><strong>BUSDT</strong> - Collateral asset used across all 42 markets.</td></tr></tbody></table>

### Additional Resources <a href="#additional-resources" id="additional-resources"></a>

* [42 Audit Reports](https://github.com/fortytwo-protocol/ft-contracts-public/tree/main/audits)


# REST API (Alpha)

These REST APIs are still in alpha preview, and are subject to changes anytime.<br>

Need something that the API does not provide?  [Contact Us](/others/contact-us)<br>


# Markets

Market discovery, categories, tokens, pricing, and market-level data


# Get all markets

GET /api/v1/markets

## Get all markets

> Returns a paginated list of all markets available on 42. Supports rich filtering by status, category, collateral, volume range, date range, and tags. Use \`order\` + \`ascending\` to control sort direction.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/markets","name":"get-all-markets"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/markets":{"get":{"description":"Returns a paginated list of all markets available on 42. Supports rich filtering by status, category, collateral, volume range, date range, and tags. Use `order` + `ascending` to control sort direction.","tags":["get-all-markets"],"summary":"Get all markets","parameters":[{"schema":{"type":"integer"},"description":"Page size (default 100, max 500)","name":"limit","in":"query"},{"schema":{"type":"integer"},"description":"Offset (default 0)","name":"offset","in":"query"},{"schema":{"type":"string"},"description":"Sort field: created_at, volume, volume_24h, collateral, start_timestamp, end_timestamp","name":"order","in":"query"},{"schema":{"type":"boolean"},"description":"Sort direction (default false = descending)","name":"ascending","in":"query"},{"schema":{"type":"string"},"description":"Filter by question_id(s), comma-separated","name":"question_id","in":"query"},{"schema":{"type":"string"},"description":"Filter by market address(es), comma-separated","name":"market_address","in":"query"},{"schema":{"type":"string"},"description":"Filter by question title ILIKE pattern(s), comma-separated (any-of; include % wildcards, e.g. `%BTC%,%Bitcoin%`)","name":"title","in":"query"},{"schema":{"type":"string"},"description":"Filter by question_metadata.description prefix (LIKE prefix%)","name":"metadata_description_prefix","in":"query"},{"schema":{"type":"string"},"description":"Filter by collateral symbol or address","name":"collateral","in":"query"},{"schema":{"type":"string"},"description":"Filter by status: not_started, live, ended, resolved, finalised, all","name":"status","in":"query"},{"schema":{"type":"number"},"description":"Minimum total volume","name":"volume_min","in":"query"},{"schema":{"type":"number"},"description":"Maximum total volume","name":"volume_max","in":"query"},{"schema":{"type":"string"},"description":"Min start date (ISO 8601)","name":"start_date_min","in":"query"},{"schema":{"type":"string"},"description":"Max start date (ISO 8601)","name":"start_date_max","in":"query"},{"schema":{"type":"string"},"description":"Min end date (ISO 8601)","name":"end_date_min","in":"query"},{"schema":{"type":"string"},"description":"Max end date (ISO 8601)","name":"end_date_max","in":"query"},{"schema":{"type":"string"},"description":"Filter by tag name (case-insensitive)","name":"tag","in":"query"},{"schema":{"type":"string"},"description":"Filter by category name (case-insensitive)","name":"category","in":"query"},{"schema":{"type":"string"},"description":"Filter by subcategory name (case-insensitive)","name":"subcategory","in":"query"},{"schema":{"type":"string"},"description":"Filter by topic name (case-insensitive)","name":"topic","in":"query"},{"schema":{"type":"string"},"description":"Filter by oracle address (v2 markets, case-insensitive)","name":"oracle","in":"query"},{"schema":{"type":"string"},"description":"Filter by creator address (v2 markets, case-insensitive)","name":"creator","in":"query"},{"schema":{"type":"integer"},"description":"Filter by contract version (1 = legacy, 2 = v2)","name":"contract_version","in":"query"},{"schema":{"type":"string"},"description":"BCP-47 locale (e.g. zh, id) for the sibling `translation` wrapper. Source fields (`question`, outcome `name`, `ancillaryData`) stay raw; `translation:{title,ancillary[]}` and outcome `translation:{name}` are populated when a matching locale exists. Wrapper is null otherwise.","name":"locale","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated top-level field whitelist (e.g. `questionId,subcategories,topics,endDate`). When set, each market is projected to only these fields, omitting large fields like ancillaryData/description/outcomes. Unknown names are ignored.","name":"fields","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_MarketResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_MarketResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.MarketResponse"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.MarketResponse":{"description":"Full market representation.","type":"object","properties":{"address":{"type":"string"},"ancillaryData":{"description":"Ancillary metadata entries posted on-chain by the question creator, oldest-first. Each entry is a comma-separated \"key:value\" pair list with `\\,`, `\\:`, and `\\\\` as escapes. Empty array for legacy markets. Always the raw on-chain form; translated human-readable bodies surface inside `translation.ancillary` (parallel array, same indexing).","type":"array","items":{"type":"string"}},"availableLocales":{"description":"Locales with an approved translation. Lets clients build a language switcher. Empty array when none. The internal pipeline status is intentionally not exposed.","type":"array","items":{"type":"string"}},"backgroundImage":{"description":"Admin-set background image for the market's grid card (off-chain metadata only). Null when unset.","type":"string"},"categories":{"type":"array","items":{"type":"string"}},"collateralAddress":{"type":"string"},"collateralDecimals":{"type":"integer"},"collateralSymbol":{"type":"string"},"contractVersion":{"description":"On-chain contract version that produced this market (1 = legacy, 2 = v2).","type":"integer"},"createdAt":{"type":"string"},"creator":{"description":"Creator of the question, with curated `name`/`image` joined from `identified_address`. Non-null for v2 markets only.","allOf":[{"$ref":"#/components/schemas/internal_handler.AddressInfoResponse"}]},"curve":{"type":"string"},"description":{"description":"Deprecated: populated from on-chain metadata for legacy v1 markets. For v2 markets, use AncillaryData — the first entry carries the creator's metadata including a `description` key.","type":"string"},"elapsedPct":{"type":"number"},"endDate":{"type":"string"},"feeRate":{"type":"number"},"finalisedAt":{"type":"string"},"image":{"type":"string"},"isFlagged":{"description":"True when the question currently has an active creator-issued flag whose expiry (if any) is in the future.","type":"boolean"},"metadataDescription":{"description":"Admin-curated description from question_metadata (off-chain). Null when unset.","type":"string"},"oracle":{"description":"Oracle responsible for resolving the question, with curated `name`/`image` joined from `identified_address`. Non-null for v2 markets only.","allOf":[{"$ref":"#/components/schemas/internal_handler.AddressInfoResponse"}]},"outcomes":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.OutcomeResponse"}},"proposer":{"description":"Deprecated: proposer metadata. Not translated and slated for removal.","allOf":[{"$ref":"#/components/schemas/internal_handler.ProposerResponse"}]},"question":{"type":"string"},"questionId":{"type":"string"},"resolutionTime":{"type":"string"},"resolvedAnswer":{"type":"string"},"slug":{"type":"string"},"sourceLocale":{"description":"Source locale of the on-chain `question`/`ancillaryData` fields (defaults to \"en\").","type":"string"},"startDate":{"type":"string"},"status":{"type":"string"},"subcategories":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"topics":{"type":"array","items":{"type":"string"}},"totalMarketCap":{"type":"number"},"traders":{"type":"integer"},"translation":{"description":"Translated display text for the locale requested via `?locale=`, or null when no `?locale=` was given, it equals `sourceLocale`, or the locale is not available. `ancillary` is index-aligned to `ancillaryData`.","allOf":[{"$ref":"#/components/schemas/internal_handler.MarketTranslation"}]},"updatedAt":{"type":"string"},"volume":{"type":"number"}}},"internal_handler.AddressInfoResponse":{"type":"object","properties":{"address":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"}}},"internal_handler.OutcomeResponse":{"description":"Per-outcome data including price, volume, and supply.","type":"object","properties":{"holdersAtFinalisation":{"type":"integer"},"image":{"type":"string"},"index":{"type":"integer"},"marketCap":{"type":"number"},"mintedQuantity":{"type":"number"},"mintedQuantityRaw":{"description":"Raw on-chain minted supply (uint256 decimal string, no HMR scaling).\nBigInt-safe: never a float. \"0\" when the outcome has no stats yet.","type":"string"},"name":{"type":"string"},"payout":{"type":"number"},"price":{"type":"number"},"symbol":{"type":"string"},"tokenId":{"type":"string"},"translation":{"description":"Translated outcome name for the locale requested via `?locale=`, or null under the same rules as MarketResponse.Translation.","allOf":[{"$ref":"#/components/schemas/internal_handler.OutcomeTranslation"}]},"volume":{"type":"number"}}},"internal_handler.OutcomeTranslation":{"description":"Localized outcome text for the requested locale.","type":"object","properties":{"name":{"type":"string"}}},"internal_handler.ProposerResponse":{"description":"Deprecated: proposer metadata. Not translated. Will be removed in a future release.","type":"object","properties":{"image":{"type":"string"},"name":{"type":"string"}}},"internal_handler.MarketTranslation":{"description":"Localized market text for the requested locale.","type":"object","properties":{"ancillary":{"type":"array","items":{"type":"string"}},"title":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```

## Get all featured market sections

> Returns every \`featured\_N\` tag's top live markets (ranked by rolling 24h volume) in one response — one section per tag, ordered by the tag's numeric suffix. Replaces issuing a separate \`/markets?tag=featured\_N\` request per section.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/markets","name":"get-all-markets"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/markets/featured":{"get":{"description":"Returns every `featured_N` tag's top live markets (ranked by rolling 24h volume) in one response — one section per tag, ordered by the tag's numeric suffix. Replaces issuing a separate `/markets?tag=featured_N` request per section.","tags":["get-all-markets"],"summary":"Get all featured market sections","parameters":[{"schema":{"type":"integer"},"description":"Markets per section (default 12, max 50)","name":"per_tag","in":"query"},{"schema":{"type":"string"},"description":"BCP-47 locale (e.g. zh, id) for the sibling `translation` wrapper on each market.","name":"locale","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.FeaturedMarketsResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.FeaturedMarketsResponse":{"type":"object","properties":{"sections":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.FeaturedSection"}}}},"internal_handler.FeaturedSection":{"type":"object","properties":{"markets":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.MarketResponse"}},"tag":{"type":"string"}}},"internal_handler.MarketResponse":{"description":"Full market representation.","type":"object","properties":{"address":{"type":"string"},"ancillaryData":{"description":"Ancillary metadata entries posted on-chain by the question creator, oldest-first. Each entry is a comma-separated \"key:value\" pair list with `\\,`, `\\:`, and `\\\\` as escapes. Empty array for legacy markets. Always the raw on-chain form; translated human-readable bodies surface inside `translation.ancillary` (parallel array, same indexing).","type":"array","items":{"type":"string"}},"availableLocales":{"description":"Locales with an approved translation. Lets clients build a language switcher. Empty array when none. The internal pipeline status is intentionally not exposed.","type":"array","items":{"type":"string"}},"backgroundImage":{"description":"Admin-set background image for the market's grid card (off-chain metadata only). Null when unset.","type":"string"},"categories":{"type":"array","items":{"type":"string"}},"collateralAddress":{"type":"string"},"collateralDecimals":{"type":"integer"},"collateralSymbol":{"type":"string"},"contractVersion":{"description":"On-chain contract version that produced this market (1 = legacy, 2 = v2).","type":"integer"},"createdAt":{"type":"string"},"creator":{"description":"Creator of the question, with curated `name`/`image` joined from `identified_address`. Non-null for v2 markets only.","allOf":[{"$ref":"#/components/schemas/internal_handler.AddressInfoResponse"}]},"curve":{"type":"string"},"description":{"description":"Deprecated: populated from on-chain metadata for legacy v1 markets. For v2 markets, use AncillaryData — the first entry carries the creator's metadata including a `description` key.","type":"string"},"elapsedPct":{"type":"number"},"endDate":{"type":"string"},"feeRate":{"type":"number"},"finalisedAt":{"type":"string"},"image":{"type":"string"},"isFlagged":{"description":"True when the question currently has an active creator-issued flag whose expiry (if any) is in the future.","type":"boolean"},"metadataDescription":{"description":"Admin-curated description from question_metadata (off-chain). Null when unset.","type":"string"},"oracle":{"description":"Oracle responsible for resolving the question, with curated `name`/`image` joined from `identified_address`. Non-null for v2 markets only.","allOf":[{"$ref":"#/components/schemas/internal_handler.AddressInfoResponse"}]},"outcomes":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.OutcomeResponse"}},"proposer":{"description":"Deprecated: proposer metadata. Not translated and slated for removal.","allOf":[{"$ref":"#/components/schemas/internal_handler.ProposerResponse"}]},"question":{"type":"string"},"questionId":{"type":"string"},"resolutionTime":{"type":"string"},"resolvedAnswer":{"type":"string"},"slug":{"type":"string"},"sourceLocale":{"description":"Source locale of the on-chain `question`/`ancillaryData` fields (defaults to \"en\").","type":"string"},"startDate":{"type":"string"},"status":{"type":"string"},"subcategories":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"topics":{"type":"array","items":{"type":"string"}},"totalMarketCap":{"type":"number"},"traders":{"type":"integer"},"translation":{"description":"Translated display text for the locale requested via `?locale=`, or null when no `?locale=` was given, it equals `sourceLocale`, or the locale is not available. `ancillary` is index-aligned to `ancillaryData`.","allOf":[{"$ref":"#/components/schemas/internal_handler.MarketTranslation"}]},"updatedAt":{"type":"string"},"volume":{"type":"number"}}},"internal_handler.AddressInfoResponse":{"type":"object","properties":{"address":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"}}},"internal_handler.OutcomeResponse":{"description":"Per-outcome data including price, volume, and supply.","type":"object","properties":{"holdersAtFinalisation":{"type":"integer"},"image":{"type":"string"},"index":{"type":"integer"},"marketCap":{"type":"number"},"mintedQuantity":{"type":"number"},"mintedQuantityRaw":{"description":"Raw on-chain minted supply (uint256 decimal string, no HMR scaling).\nBigInt-safe: never a float. \"0\" when the outcome has no stats yet.","type":"string"},"name":{"type":"string"},"payout":{"type":"number"},"price":{"type":"number"},"symbol":{"type":"string"},"tokenId":{"type":"string"},"translation":{"description":"Translated outcome name for the locale requested via `?locale=`, or null under the same rules as MarketResponse.Translation.","allOf":[{"$ref":"#/components/schemas/internal_handler.OutcomeTranslation"}]},"volume":{"type":"number"}}},"internal_handler.OutcomeTranslation":{"description":"Localized outcome text for the requested locale.","type":"object","properties":{"name":{"type":"string"}}},"internal_handler.ProposerResponse":{"description":"Deprecated: proposer metadata. Not translated. Will be removed in a future release.","type":"object","properties":{"image":{"type":"string"},"name":{"type":"string"}}},"internal_handler.MarketTranslation":{"description":"Localized market text for the requested locale.","type":"object","properties":{"ancillary":{"type":"array","items":{"type":"string"}},"title":{"type":"string"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get market by address

GET /api/v1/markets/{market\_address}

## Get market by address

> Returns full market details for a single market identified by its on-chain contract address, including outcomes, collateral info, status, volume, and proposer.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/markets/{market_address}","name":"get-market-by-address"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/markets/{market_address}":{"get":{"description":"Returns full market details for a single market identified by its on-chain contract address, including outcomes, collateral info, status, volume, and proposer.","tags":["get-market-by-address"],"summary":"Get market by address","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market_address","in":"path","required":true},{"schema":{"type":"string"},"description":"BCP-47 locale (e.g. zh, id) for the sibling `translation` wrapper. Source fields (`question`, outcome `name`, `ancillaryData`) stay raw; `translation:{title,ancillary[]}` and outcome `translation:{name}` are populated when a matching locale exists. Wrapper is null otherwise.","name":"locale","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.MarketResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.MarketResponse":{"description":"Full market representation.","type":"object","properties":{"address":{"type":"string"},"ancillaryData":{"description":"Ancillary metadata entries posted on-chain by the question creator, oldest-first. Each entry is a comma-separated \"key:value\" pair list with `\\,`, `\\:`, and `\\\\` as escapes. Empty array for legacy markets. Always the raw on-chain form; translated human-readable bodies surface inside `translation.ancillary` (parallel array, same indexing).","type":"array","items":{"type":"string"}},"availableLocales":{"description":"Locales with an approved translation. Lets clients build a language switcher. Empty array when none. The internal pipeline status is intentionally not exposed.","type":"array","items":{"type":"string"}},"backgroundImage":{"description":"Admin-set background image for the market's grid card (off-chain metadata only). Null when unset.","type":"string"},"categories":{"type":"array","items":{"type":"string"}},"collateralAddress":{"type":"string"},"collateralDecimals":{"type":"integer"},"collateralSymbol":{"type":"string"},"contractVersion":{"description":"On-chain contract version that produced this market (1 = legacy, 2 = v2).","type":"integer"},"createdAt":{"type":"string"},"creator":{"description":"Creator of the question, with curated `name`/`image` joined from `identified_address`. Non-null for v2 markets only.","allOf":[{"$ref":"#/components/schemas/internal_handler.AddressInfoResponse"}]},"curve":{"type":"string"},"description":{"description":"Deprecated: populated from on-chain metadata for legacy v1 markets. For v2 markets, use AncillaryData — the first entry carries the creator's metadata including a `description` key.","type":"string"},"elapsedPct":{"type":"number"},"endDate":{"type":"string"},"feeRate":{"type":"number"},"finalisedAt":{"type":"string"},"image":{"type":"string"},"isFlagged":{"description":"True when the question currently has an active creator-issued flag whose expiry (if any) is in the future.","type":"boolean"},"metadataDescription":{"description":"Admin-curated description from question_metadata (off-chain). Null when unset.","type":"string"},"oracle":{"description":"Oracle responsible for resolving the question, with curated `name`/`image` joined from `identified_address`. Non-null for v2 markets only.","allOf":[{"$ref":"#/components/schemas/internal_handler.AddressInfoResponse"}]},"outcomes":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.OutcomeResponse"}},"proposer":{"description":"Deprecated: proposer metadata. Not translated and slated for removal.","allOf":[{"$ref":"#/components/schemas/internal_handler.ProposerResponse"}]},"question":{"type":"string"},"questionId":{"type":"string"},"resolutionTime":{"type":"string"},"resolvedAnswer":{"type":"string"},"slug":{"type":"string"},"sourceLocale":{"description":"Source locale of the on-chain `question`/`ancillaryData` fields (defaults to \"en\").","type":"string"},"startDate":{"type":"string"},"status":{"type":"string"},"subcategories":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"topics":{"type":"array","items":{"type":"string"}},"totalMarketCap":{"type":"number"},"traders":{"type":"integer"},"translation":{"description":"Translated display text for the locale requested via `?locale=`, or null when no `?locale=` was given, it equals `sourceLocale`, or the locale is not available. `ancillary` is index-aligned to `ancillaryData`.","allOf":[{"$ref":"#/components/schemas/internal_handler.MarketTranslation"}]},"updatedAt":{"type":"string"},"volume":{"type":"number"}}},"internal_handler.AddressInfoResponse":{"type":"object","properties":{"address":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"}}},"internal_handler.OutcomeResponse":{"description":"Per-outcome data including price, volume, and supply.","type":"object","properties":{"holdersAtFinalisation":{"type":"integer"},"image":{"type":"string"},"index":{"type":"integer"},"marketCap":{"type":"number"},"mintedQuantity":{"type":"number"},"mintedQuantityRaw":{"description":"Raw on-chain minted supply (uint256 decimal string, no HMR scaling).\nBigInt-safe: never a float. \"0\" when the outcome has no stats yet.","type":"string"},"name":{"type":"string"},"payout":{"type":"number"},"price":{"type":"number"},"symbol":{"type":"string"},"tokenId":{"type":"string"},"translation":{"description":"Translated outcome name for the locale requested via `?locale=`, or null under the same rules as MarketResponse.Translation.","allOf":[{"$ref":"#/components/schemas/internal_handler.OutcomeTranslation"}]},"volume":{"type":"number"}}},"internal_handler.OutcomeTranslation":{"description":"Localized outcome text for the requested locale.","type":"object","properties":{"name":{"type":"string"}}},"internal_handler.ProposerResponse":{"description":"Deprecated: proposer metadata. Not translated. Will be removed in a future release.","type":"object","properties":{"image":{"type":"string"},"name":{"type":"string"}}},"internal_handler.MarketTranslation":{"description":"Localized market text for the requested locale.","type":"object","properties":{"ancillary":{"type":"array","items":{"type":"string"}},"title":{"type":"string"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get market timeline

GET /api/v1/markets/{market\_address}/timeline

## Get market timeline

> Returns the full lifecycle event history for the question backing this market — including when it was launched, extended, resolved, and finalised — with timestamps and winning outcomes for each event, plus the expected \`resolutionTime\` from question metadata. Pass \`locale\` to receive translated winning-outcome names where available.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/markets/{market_address}/timeline","name":"get-market-timeline"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/markets/{market_address}/timeline":{"get":{"description":"Returns the full lifecycle event history for the question backing this market — including when it was launched, extended, resolved, and finalised — with timestamps and winning outcomes for each event, plus the expected `resolutionTime` from question metadata. Pass `locale` to receive translated winning-outcome names where available.","tags":["get-market-timeline"],"summary":"Get market timeline","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market_address","in":"path","required":true},{"schema":{"type":"string"},"description":"BCP-47 locale (e.g. zh, id). Winning-outcome `name` fields use the translated outcome name when a matching locale exists; source names otherwise.","name":"locale","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.TimelineResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.TimelineResponse":{"type":"object","properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.TimelineEvent"}},"resolutionTime":{"description":"Expected resolution time from question_metadata (RFC3339). Null when unset.","type":"string"}}},"internal_handler.TimelineEvent":{"description":"A timeline entry. `type` is one of `launched`, `extended`, `shortened`, `flagged`, `unflagged`, `resolved`, `unresolve`, `finalised`. `newEndTimestamp` is set on extended/shortened; `flagExpiry` is set on flagged when the on-chain event supplied an expiry; `answer`/`winningOutcomes` are set on resolved and finalised.","type":"object","properties":{"answer":{"type":"integer"},"flagExpiry":{"type":"integer"},"newEndTimestamp":{"type":"integer"},"timestamp":{"type":"integer"},"type":{"type":"string"},"winningOutcomes":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.WinningOutcomeItem"}}}},"internal_handler.WinningOutcomeItem":{"type":"object","properties":{"name":{"type":"string"},"symbol":{"type":"string"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get all categories

GET /api/v1/markets/categories

## Get all categories

> Returns a paginated list of all market categories, each including a count of subcategories and topics nested within it. Pass \`?locale=\` to receive translated display names in \`name\`; falls back to source when a translation is unavailable.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/markets/categories","name":"get-all-categories"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/markets/categories":{"get":{"description":"Returns a paginated list of all market categories, each including a count of subcategories and topics nested within it. Pass `?locale=` to receive translated display names in `name`; falls back to source when a translation is unavailable.","tags":["get-all-categories"],"summary":"Get all categories","parameters":[{"schema":{"type":"integer","default":100},"description":"Page size","name":"limit","in":"query"},{"schema":{"type":"integer","default":0},"description":"Page offset","name":"offset","in":"query"},{"schema":{"type":"string"},"description":"BCP-47 locale for translated names (e.g. zh, es)","name":"locale","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_CategoryListItem"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_CategoryListItem":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.CategoryListItem"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.CategoryListItem":{"type":"object","properties":{"id":{"type":"integer"},"image":{"type":"string"},"liveMarketCount":{"description":"Distinct, non-blacklisted markets currently live in this category.","type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"subcategoryCount":{"type":"integer"},"topicCount":{"type":"integer"},"translation":{"description":"Translated name for the locale requested via `?locale=`, or null when no `?locale=` was given or the locale is unavailable.","allOf":[{"$ref":"#/components/schemas/internal_handler.NameTranslation"}]}}},"internal_handler.NameTranslation":{"description":"Localized taxonomy name for the requested locale.","type":"object","properties":{"name":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get category by slug

GET /api/v1/markets/categories/{slug}

## Get category by slug

> Returns a single category by its URL slug, including all nested subcategories and the topics within each subcategory. Slugs are always derived from the source name and are locale-independent. Pass \`?locale=\` to receive translated \`name\` values; falls back to source when a translation is unavailable.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/markets/categories/{slug}","name":"get-category-by-slug"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/markets/categories/{slug}":{"get":{"description":"Returns a single category by its URL slug, including all nested subcategories and the topics within each subcategory. Slugs are always derived from the source name and are locale-independent. Pass `?locale=` to receive translated `name` values; falls back to source when a translation is unavailable.","tags":["get-category-by-slug"],"summary":"Get category by slug","parameters":[{"schema":{"type":"string"},"description":"Category slug","name":"slug","in":"path","required":true},{"schema":{"type":"string"},"description":"BCP-47 locale for translated names (e.g. zh, es)","name":"locale","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.CategoryDetailResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.CategoryDetailResponse":{"type":"object","properties":{"id":{"type":"integer"},"image":{"type":"string"},"liveMarketCount":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"subcategories":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.SubcategoryNested"}},"translation":{"description":"Translated name for the locale requested via `?locale=`, or null when no `?locale=` was given or the locale is unavailable.","allOf":[{"$ref":"#/components/schemas/internal_handler.NameTranslation"}]}}},"internal_handler.SubcategoryNested":{"type":"object","properties":{"image":{"type":"string"},"liveMarketCount":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.TopicNested"}},"translation":{"description":"Translated name for the locale requested via `?locale=`, or null when no `?locale=` was given or the locale is unavailable.","allOf":[{"$ref":"#/components/schemas/internal_handler.NameTranslation"}]}}},"internal_handler.TopicNested":{"type":"object","properties":{"image":{"type":"string"},"liveMarketCount":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"translation":{"description":"Translated name for the locale requested via `?locale=`, or null when no `?locale=` was given or the locale is unavailable.","allOf":[{"$ref":"#/components/schemas/internal_handler.NameTranslation"}]}}},"internal_handler.NameTranslation":{"description":"Localized taxonomy name for the requested locale.","type":"object","properties":{"name":{"type":"string"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get all outcome tokens

GET /api/v1/markets/tokens

## Get all outcome tokens

> Returns a paginated list of all tradeable outcome tokens across markets. Filter by market address, token ID, or outcome index. Supports sorting by price, market cap, or token ID.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/markets/tokens","name":"get-all-outcome-tokens"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/markets/tokens":{"get":{"description":"Returns a paginated list of all tradeable outcome tokens across markets. Filter by market address, token ID, or outcome index. Supports sorting by price, market cap, or token ID.","tags":["get-all-outcome-tokens"],"summary":"Get all outcome tokens","parameters":[{"schema":{"type":"string"},"description":"Filter by market address","name":"market_address","in":"query"},{"schema":{"type":"string"},"description":"Filter by token ID","name":"token_id","in":"query"},{"schema":{"type":"integer"},"description":"Filter by outcome index (0-based)","name":"outcome_index","in":"query"},{"schema":{"type":"integer"},"description":"Results per page (default 50, max 500)","name":"limit","in":"query"},{"schema":{"type":"integer"},"description":"Pagination offset (default 0)","name":"offset","in":"query"},{"schema":{"type":"string"},"description":"Sort field: price, market_cap, token_id, outcome_index","name":"order","in":"query"},{"schema":{"type":"boolean"},"description":"Sort ascending (default false = descending)","name":"ascending","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_TokenResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_TokenResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.TokenResponse"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.TokenResponse":{"type":"object","properties":{"market":{"$ref":"#/components/schemas/internal_handler.TokenMarketResponse"},"marketCap":{"type":"string"},"outcomeIndex":{"type":"integer"},"outcomeName":{"type":"string"},"price":{"type":"string"},"tokenId":{"type":"string"}}},"internal_handler.TokenMarketResponse":{"type":"object","properties":{"marketAddress":{"type":"string"},"question":{"$ref":"#/components/schemas/internal_handler.TokenQuestionResponse"},"slug":{"type":"string"}}},"internal_handler.TokenQuestionResponse":{"type":"object","properties":{"questionId":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get current outcome token prices

GET /api/v1/market-data/prices

## Get current outcome token prices

> Returns current price data for one or more outcome tokens in a market. Supports single lookup (token ID or Outcome Index), batch lookup (token IDs or Outcome Indices, max 50), or all outcomes for a market when no token param is given. Use \`projection=midpoint\` for a lightweight midpoint-only response.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/prices","name":"get-current-prices"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/prices":{"get":{"description":"Returns current price data for one or more outcome tokens in a market. Supports single lookup (token ID or Outcome Index), batch lookup (token IDs or Outcome Indices, max 50), or all outcomes for a market when no token param is given. Use `projection=midpoint` for a lightweight midpoint-only response.","tags":["get-current-prices"],"summary":"Get current outcome token prices","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market","in":"query","required":true},{"schema":{"type":"string"},"description":"Single outcome token ID (mutually exclusive with outcome_index and batch params)","name":"token_id","in":"query"},{"schema":{"type":"integer"},"description":"Single outcome index 0-based (mutually exclusive with token_id and batch params)","name":"outcome_index","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated outcome token IDs for batch lookup (max 50)","name":"token_ids","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated outcome indices 0-based for batch lookup (max 50)","name":"outcome_indices","in":"query"},{"schema":{"type":"string"},"description":"Response shape: full (default) or midpoint","name":"projection","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.PriceResponse"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.PriceResponse":{"type":"object","properties":{"market":{"type":"string"},"mintedQuantity":{"type":"number"},"outcome":{"type":"string"},"outcomeCap":{"type":"number"},"price":{"type":"number"},"tokenId":{"type":"string"},"totalMarketCap":{"type":"number"},"updatedAt":{"type":"string"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get price history

GET /api/v1/market-data/prices/history

## Get price history

> Returns a historical price series for a single outcome token — the last traded price, step-held between trades (built from the outcome's on-chain trades). Every mode includes the market seed's carried-forward bootstrap price before the outcome's first genuine trade, so young markets chart a line from market open. Two modes:\
> \*\*Duration mode\*\* (default): control the lookback with \`duration\` (bucket size is chosen for you); \`start\_ts\` filters results after fetch.\
> \*\*Range mode\*\* (pass \`interval\`): step-fills buckets at the given interval over the explicit \`\[start\_ts, end\_ts]\` window for zoomable line charts. The first point is anchored from the last trade (or seed) before \`start\_ts\` (so adjacent windows connect) or, if the market did not exist yet, the series begins at the seed. A window that would exceed \~10k buckets is rejected unless \`changes\_only=true\`.\
> \*\*changes\_only auto mode\*\* (\`changes\_only=true\`): returns the real price change points for the window (\`start\_ts\`/\`end\_ts\`, or \`end\_ts\`−\`duration\` if no \`start\_ts\`); \`interval\` is ignored. Resolution scales with trade density — sparse outcomes return exact change points, very active outcomes read the close price from a pre-aggregated bucket so the chart stays cheap and renderable. Capped at \`fidelity\` else \~1000 points.\
> Use \`fidelity\` in either mode to cap the number of points (downsampled if exceeded).

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/prices/history","name":"get-price-history"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/prices/history":{"get":{"description":"Returns a historical price series for a single outcome token — the last traded price, step-held between trades (built from the outcome's on-chain trades). Every mode includes the market seed's carried-forward bootstrap price before the outcome's first genuine trade, so young markets chart a line from market open. Two modes:\n**Duration mode** (default): control the lookback with `duration` (bucket size is chosen for you); `start_ts` filters results after fetch.\n**Range mode** (pass `interval`): step-fills buckets at the given interval over the explicit `[start_ts, end_ts]` window for zoomable line charts. The first point is anchored from the last trade (or seed) before `start_ts` (so adjacent windows connect) or, if the market did not exist yet, the series begins at the seed. A window that would exceed ~10k buckets is rejected unless `changes_only=true`.\n**changes_only auto mode** (`changes_only=true`): returns the real price change points for the window (`start_ts`/`end_ts`, or `end_ts`−`duration` if no `start_ts`); `interval` is ignored. Resolution scales with trade density — sparse outcomes return exact change points, very active outcomes read the close price from a pre-aggregated bucket so the chart stays cheap and renderable. Capped at `fidelity` else ~1000 points.\nUse `fidelity` in either mode to cap the number of points (downsampled if exceeded).","tags":["get-price-history"],"summary":"Get price history","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market","in":"query","required":true},{"schema":{"type":"string"},"description":"Outcome token ID (provide token_id or outcome_index, not both)","name":"token_id","in":"query"},{"schema":{"type":"integer"},"description":"Outcome index, 0-based (provide token_id or outcome_index, not both)","name":"outcome_index","in":"query"},{"schema":{"type":"string","enum":["1s","10s","1m","3m","30m","2h","6h","12h","1d"]},"description":"Bucket interval (range mode, changes_only=false). IGNORED when changes_only=true — that mode auto-picks resolution by trade density.","name":"interval","in":"query"},{"schema":{"type":"string","enum":["1h","4h","24h","7d","30d","90d","180d","1y","all"]},"description":"Lookback duration (duration mode, default 24h)","name":"duration","in":"query"},{"schema":{"type":"integer"},"description":"End unix timestamp (default: now)","name":"end_ts","in":"query"},{"schema":{"type":"integer"},"description":"Range mode: window start (required). Duration mode: filters results after fetch.","name":"start_ts","in":"query"},{"schema":{"type":"integer"},"description":"Max data points returned — downsamples if the window contains more","name":"fidelity","in":"query"},{"schema":{"type":"boolean"},"description":"Return only step edges — drop flat gap-filled buckets where price/payout/collateral/minted_quantity are unchanged (default false; for step-rendered charts)","name":"changes_only","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.PriceHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.PriceHistoryResponse":{"description":"Historical price series.","type":"object","properties":{"history":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.PriceHistoryPoint"}},"outcomeName":{"type":"string"}}},"internal_handler.PriceHistoryPoint":{"description":"One point on the price line. `p` is the last traded price at/at-or-before","type":"object","properties":{"collateral":{"type":"number"},"mintedQuantity":{"type":"number"},"p":{"type":"number"},"payout":{"type":"number"},"t":{"type":"integer"},"v":{"type":"number"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get per-event price history

GET /api/v1/market-data/prices/event-history

## Get per-event price history

> Returns one row per onchain event that touched the outcome (mint/redeem/etc), from the outcome\_stats hypertable. Unlike /prices/history this is NOT bucketed or gap-filled — each point reflects the marginal price and collateral immediately after a specific event, so the chart can plot per-trade resolution for short windows. Use \`start\_ts\`/\`end\_ts\` to bound the window (required for \`start\_ts\` since the hypertable can be large); use \`fidelity\` to downsample if the window contains more events than you want to render. Events before the outcome's first real trade are omitted — the market "seed" mint carries a distorted bootstrap price (not a real traded price), and that price is carried forward until the outcome is first traded, so the series opens on a genuine price.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/prices/event-history","name":"get-event-price-history"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/prices/event-history":{"get":{"description":"Returns one row per onchain event that touched the outcome (mint/redeem/etc), from the outcome_stats hypertable. Unlike /prices/history this is NOT bucketed or gap-filled — each point reflects the marginal price and collateral immediately after a specific event, so the chart can plot per-trade resolution for short windows. Use `start_ts`/`end_ts` to bound the window (required for `start_ts` since the hypertable can be large); use `fidelity` to downsample if the window contains more events than you want to render. Events before the outcome's first real trade are omitted — the market \"seed\" mint carries a distorted bootstrap price (not a real traded price), and that price is carried forward until the outcome is first traded, so the series opens on a genuine price.","tags":["get-event-price-history"],"summary":"Get per-event price history","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market","in":"query","required":true},{"schema":{"type":"string"},"description":"Outcome token ID (provide token_id or outcome_index, not both)","name":"token_id","in":"query"},{"schema":{"type":"integer"},"description":"Outcome index, 0-based (provide token_id or outcome_index, not both)","name":"outcome_index","in":"query"},{"schema":{"type":"integer"},"description":"Start unix timestamp","name":"start_ts","in":"query","required":true},{"schema":{"type":"integer"},"description":"End unix timestamp (default: now)","name":"end_ts","in":"query"},{"schema":{"type":"integer"},"description":"Max data points returned — downsamples if the window contains more","name":"fidelity","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.EventPriceHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.EventPriceHistoryResponse":{"type":"object","properties":{"history":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.EventPricePoint"}},"outcomeName":{"type":"string"}}},"internal_handler.EventPricePoint":{"type":"object","properties":{"collateral":{"type":"number"},"mintedQuantity":{"type":"number"},"p":{"type":"number"},"payout":{"type":"number"},"t":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get OHLC candlestick data

GET /api/v1/market-data/ohlc

## Get OHLC candlestick data

> Returns OHLC (open/high/low/close) candlestick data for a specific outcome token over a given time range and bucket interval. Provide token ID or outcome index (not both). Payout fields are included for resolved markets.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/ohlc","name":"get-ohlc"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/ohlc":{"get":{"description":"Returns OHLC (open/high/low/close) candlestick data for a specific outcome token over a given time range and bucket interval. Provide token ID or outcome index (not both). Payout fields are included for resolved markets.","tags":["get-ohlc"],"summary":"Get OHLC candlestick data","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market","in":"query","required":true},{"schema":{"type":"string"},"description":"Outcome token ID (provide token_id or outcome_index, not both)","name":"token_id","in":"query"},{"schema":{"type":"integer"},"description":"Outcome index, 0-based (provide token_id or outcome_index, not both)","name":"outcome_index","in":"query"},{"schema":{"type":"string","enum":["1s","10s","1m","3m","30m","2h","6h","12h","1d"]},"description":"Candle bucket interval","name":"interval","in":"query","required":true},{"schema":{"type":"integer"},"description":"Start unix timestamp (default: 24h before end_ts)","name":"start_ts","in":"query"},{"schema":{"type":"integer"},"description":"End unix timestamp (default: now)","name":"end_ts","in":"query"},{"schema":{"type":"integer"},"description":"Max data points returned (default 500, max 5000)","name":"limit","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.OHLCResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.OHLCResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.OHLCDataPoint"}}}},"internal_handler.OHLCDataPoint":{"type":"object","properties":{"c":{"type":"number"},"closeCollateral":{"type":"number"},"closeMintedQuantity":{"type":"number"},"h":{"type":"number"},"l":{"type":"number"},"o":{"type":"number"},"openCollateral":{"type":"number"},"openMintedQuantity":{"type":"number"},"payoutClose":{"type":"number"},"payoutHigh":{"type":"number"},"payoutLow":{"type":"number"},"payoutMid":{"type":"number"},"payoutOpen":{"type":"number"},"t":{"type":"integer"},"v":{"type":"number"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get batch market stats

GET /api/v1/market-data/stats

## Get batch market stats

> Returns lightweight polling stats (market cap, total volume, trader count, and per-outcome prices) for up to 50 markets at once.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/stats","name":"get-batch-market-stats"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/stats":{"get":{"description":"Returns lightweight polling stats (market cap, total volume, trader count, and per-outcome prices) for up to 50 markets at once.","tags":["get-batch-market-stats"],"summary":"Get batch market stats","parameters":[{"schema":{"type":"string"},"description":"Comma-separated market addresses (max 50) — required","name":"market","in":"query","required":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.MarketStatsResponse"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.MarketStatsResponse":{"description":"Lightweight market stats for polling.","type":"object","properties":{"market":{"type":"string"},"marketCap":{"type":"number"},"outcomeStats":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.OutcomeStatsCompact"}},"totalVolume":{"type":"number"},"traders":{"type":"integer"},"updatedAt":{"type":"string"}}},"internal_handler.OutcomeStatsCompact":{"description":"Compact outcome stats for polling.","type":"object","properties":{"collateralChange24h":{"type":"number"},"marketCap":{"type":"number"},"mintedQuantity":{"description":"Human-readable minted outcome-token supply; outcome mcap = price × mintedQuantity.","type":"number"},"name":{"type":"string"},"payout":{"type":"number"},"price":{"type":"number"},"priceChange24h":{"type":"number"},"tokenId":{"type":"string"},"volumeChange24h":{"type":"number"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get outcome token stats

GET /api/v1/market-data/tokens/stats

## Get outcome token stats

> Returns outcome-level stats including time-bucketed price, volume, and collateral deltas (30m, 1h, 4h, 24h). Supports filtering by category, status, question IDs, or specific market addresses.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/tokens/stats","name":"get-outcome-token-stats"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/tokens/stats":{"get":{"description":"Returns outcome-level stats including time-bucketed price, volume, and collateral deltas (30m, 1h, 4h, 24h). Supports filtering by category, status, question IDs, or specific market addresses.","tags":["get-outcome-token-stats"],"summary":"Get outcome token stats","parameters":[{"schema":{"type":"integer"},"description":"Page size (default 100, max 500)","name":"limit","in":"query"},{"schema":{"type":"integer"},"description":"Offset (default 0)","name":"offset","in":"query"},{"schema":{"type":"string","default":"volume"},"description":"Sort field: volume, buy_volume, payout, price, collateral, traders, start_timestamp, end_timestamp, or any of price/volume/collateral_change_30m|1h|4h|24h","name":"order_by","in":"query"},{"schema":{"type":"boolean"},"description":"Sort ascending (default false = descending)","name":"ascending","in":"query"},{"schema":{"type":"string"},"description":"Filter by category name","name":"category","in":"query"},{"schema":{"type":"integer"},"description":"Filter by category ID","name":"category_id","in":"query"},{"schema":{"type":"string"},"description":"Filter by status: not_started, live, ended, resolved, finalised, all","name":"status","in":"query"},{"schema":{"type":"string"},"description":"Filter by question_id(s), comma-separated","name":"question_id","in":"query"},{"schema":{"type":"string"},"description":"Filter by market address(es), comma-separated","name":"market_address","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_TokenStatsEntry"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_TokenStatsEntry":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.TokenStatsEntry"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.TokenStatsEntry":{"type":"object","properties":{"buyVolume":{"type":"number"},"collateral":{"type":"number"},"market":{"$ref":"#/components/schemas/internal_handler.TokenStatsMarket"},"marketAddress":{"type":"string"},"mintedQuantity":{"description":"Human-readable minted outcome-token supply; outcome mcap = price × mintedQuantity.","type":"number"},"outcome":{"$ref":"#/components/schemas/internal_handler.TokenStatsOutcome"},"payout":{"type":"number"},"price":{"type":"number"},"question":{"$ref":"#/components/schemas/internal_handler.TokenStatsQuestion"},"questionId":{"type":"string"},"sellVolume":{"type":"number"},"statsChanges":{"$ref":"#/components/schemas/internal_handler.StatsChanges"},"tokenId":{"type":"string"},"totalVolume":{"type":"number"},"traders":{"type":"integer"}}},"internal_handler.TokenStatsMarket":{"type":"object","properties":{"collateralDecimals":{"type":"integer"},"startTimestamp":{"description":"Market trading start (RFC3339). Null when unset.","type":"string"}}},"internal_handler.TokenStatsOutcome":{"type":"object","properties":{"image":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"translations":{"description":"Raw outcome_metadata.translations map, shape {locale: {name}}. Null when\nthe outcome has no translations.","type":"object","additionalProperties":{"$ref":"#/components/schemas/internal_handler.OutcomeTranslation"}}}},"internal_handler.OutcomeTranslation":{"description":"Localized outcome text for the requested locale.","type":"object","properties":{"name":{"type":"string"}}},"internal_handler.TokenStatsQuestion":{"type":"object","properties":{"categories":{"description":"Taxonomy names attached to the question (question_category / question_subcategory).","type":"array","items":{"type":"string"}},"categoryId":{"type":"integer"},"description":{"type":"string"},"earlyResolutionEligible":{"description":"True when the question is flagged eligible for early resolution.","type":"boolean"},"endDate":{"type":"string"},"image":{"type":"string"},"metadataImage":{"description":"Admin-curated image from question_metadata (may differ from the on-chain image).","type":"string"},"subcategories":{"type":"array","items":{"type":"string"}},"title":{"type":"string"},"translations":{"description":"Raw question_metadata.translations map, shape {locale: {title, ancillary}}.\nNull when the question has no translations.","type":"object","additionalProperties":{"$ref":"#/components/schemas/internal_handler.MarketTranslation"}}}},"internal_handler.MarketTranslation":{"description":"Localized market text for the requested locale.","type":"object","properties":{"ancillary":{"type":"array","items":{"type":"string"}},"title":{"type":"string"}}},"internal_handler.StatsChanges":{"type":"object","properties":{"collateralChange1h":{"type":"number"},"collateralChange24h":{"type":"number"},"collateralChange30m":{"type":"number"},"collateralChange4h":{"type":"number"},"priceChange1h":{"type":"number"},"priceChange24h":{"type":"number"},"priceChange30m":{"type":"number"},"priceChange4h":{"type":"number"},"volumeChange1h":{"type":"number"},"volumeChange24h":{"type":"number"},"volumeChange30m":{"type":"number"},"volumeChange4h":{"type":"number"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get outcome token holders

GET /api/v1/market-data/holders

## Get outcome token holders

> Returns a paginated list of all token holders for one or more outcomes of a given market, excluding the treasury address. For finalised markets, this also includes positions held at the time of resolution. \`market\` plus exactly one of \`token\_id\` / \`token\_ids\` are required.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/holders","name":"get-outcome-token-holders"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/holders":{"get":{"description":"Returns a paginated list of all token holders for one or more outcomes of a given market, excluding the treasury address. For finalised markets, this also includes positions held at the time of resolution. `market` plus exactly one of `token_id` / `token_ids` are required.","tags":["get-outcome-token-holders"],"summary":"Get outcome token holders","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market","in":"query","required":true},{"schema":{"type":"string"},"description":"Outcome token ID (mutually exclusive with token_ids)","name":"token_id","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated outcome token IDs (max 50, mutually exclusive with token_id)","name":"token_ids","in":"query"},{"schema":{"type":"string"},"description":"Sort field: quantity (default), realized_pnl, unrealized_pnl","name":"order","in":"query"},{"schema":{"type":"boolean"},"description":"Sort direction (default false = descending)","name":"ascending","in":"query"},{"schema":{"type":"integer"},"description":"Page size (default 20, max 100)","name":"limit","in":"query"},{"schema":{"type":"integer"},"description":"Pagination offset","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_HolderEntry"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_HolderEntry":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.HolderEntry"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.HolderEntry":{"type":"object","properties":{"amount":{"type":"number"},"avgPrice":{"type":"number"},"costBasis":{"type":"number"},"currentPrice":{"type":"number"},"heldQuantity":{"type":"number"},"mintedQuantity":{"type":"number"},"outcomeName":{"type":"string"},"outcomeSymbol":{"type":"string"},"outcomeTranslations":{"description":"Raw outcome_metadata.translations map, shape {locale: {name}}. Null when\nthe outcome has no translations.","type":"object","additionalProperties":{"$ref":"#/components/schemas/internal_handler.OutcomeTranslation"}},"payout":{"type":"number"},"realizedPnl":{"type":"number"},"tokenId":{"type":"string"},"unrealizedPnl":{"type":"number"},"userAddress":{"type":"string"}}},"internal_handler.OutcomeTranslation":{"description":"Localized outcome text for the requested locale.","type":"object","properties":{"name":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```

## Get per-outcome holder summary

> Returns, for every outcome of a market, the number of unique holders and total cost basis over live positions (treasury excluded), ordered by outcome index. Unknown markets yield an empty array.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/holders","name":"get-outcome-token-holders"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/holders/summary":{"get":{"description":"Returns, for every outcome of a market, the number of unique holders and total cost basis over live positions (treasury excluded), ordered by outcome index. Unknown markets yield an empty array.","tags":["get-outcome-token-holders"],"summary":"Get per-outcome holder summary","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market","in":"query","required":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.HolderSummaryEntry"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.HolderSummaryEntry":{"type":"object","properties":{"outcomeName":{"type":"string"},"outcomeSymbol":{"type":"string"},"tokenId":{"type":"string"},"totalCostBasis":{"type":"number"},"uniqueHolders":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```

## Get per-outcome trader counts

> Returns, for every outcome of a market, the number of distinct traders (users with at least one mint or redeem in the ledger, treasury excluded), ordered by outcome index. Optionally restricted to specific token IDs. Unknown markets yield an empty array.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/holders","name":"get-outcome-token-holders"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/traders":{"get":{"description":"Returns, for every outcome of a market, the number of distinct traders (users with at least one mint or redeem in the ledger, treasury excluded), ordered by outcome index. Optionally restricted to specific token IDs. Unknown markets yield an empty array.","tags":["get-outcome-token-holders"],"summary":"Get per-outcome trader counts","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market","in":"query","required":true},{"schema":{"type":"string"},"description":"Comma-separated outcome token IDs (max 50)","name":"token_ids","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.TraderCountEntry"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.TraderCountEntry":{"type":"object","properties":{"tokenId":{"type":"string"},"traders":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Users

Wallet activity and positions


# Get user activity feed

GET /api/v1/market-data/activity

## Get user activity feed

> Returns a paginated feed of trading activity events (MINT, REDEEM, FINALISE, CLAIM) for a given wallet, market, or transaction. Optionally filter by market, question, outcome token, activity type, transaction hash, ledger cursor, or time range.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/activity","name":"get-user-activity"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/activity":{"get":{"description":"Returns a paginated feed of trading activity events (MINT, REDEEM, FINALISE, CLAIM) for a given wallet, market, or transaction. Optionally filter by market, question, outcome token, activity type, transaction hash, ledger cursor, or time range.","tags":["get-user-activity"],"summary":"Get user activity feed","parameters":[{"schema":{"type":"string"},"description":"Wallet address","name":"user","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated market addresses to filter by","name":"market","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated question IDs to filter by","name":"question_id","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated outcome token IDs to filter by (max 50)","name":"token_id","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated activity type filter: MINT, REDEEM, FINALISE, CLAIM","name":"type","in":"query"},{"schema":{"type":"string"},"description":"Transaction hash (0x + 64 hex chars) to filter by","name":"transaction_hash","in":"query"},{"schema":{"type":"integer"},"description":"Only events with ledgerId greater than this cursor","name":"after_id","in":"query"},{"schema":{"type":"string"},"description":"Sort field: date (default), amount, pnl","name":"order","in":"query"},{"schema":{"type":"boolean"},"description":"Sort ascending (default false = descending)","name":"ascending","in":"query"},{"schema":{"type":"integer"},"description":"Start unix timestamp","name":"start","in":"query"},{"schema":{"type":"integer"},"description":"End unix timestamp","name":"end","in":"query"},{"schema":{"type":"integer"},"description":"Limit (default 100, max 500)","name":"limit","in":"query"},{"schema":{"type":"integer"},"description":"Offset (default 0, max 10000)","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_ActivityResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_ActivityResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.ActivityResponse"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.ActivityResponse":{"type":"object","properties":{"avgPrice":{"type":"number"},"collateral":{"type":"number"},"costBasis":{"type":"number"},"currentQuantity":{"type":"number"},"deltaCollateral":{"type":"number"},"deltaQuantity":{"type":"number"},"eventId":{"type":"string"},"ledgerId":{"description":"LedgerID is the ledger row id, usable as an ?after_id= cursor.","type":"string"},"marginalPriceAtTime":{"type":"number"},"marketAddress":{"type":"string"},"marketCapAtTime":{"type":"number"},"mintedQuantityAtTime":{"type":"number"},"outcome":{"type":"string"},"outcomeImage":{"type":"string"},"outcomeIndex":{"type":"integer"},"outcomeSymbol":{"type":"string"},"payoutAtTime":{"type":"number"},"price":{"type":"number"},"questionId":{"type":"string"},"questionImage":{"type":"string"},"realizedPnlDelta":{"type":"number"},"size":{"description":"Size and Collateral are absolute values (legacy contract); the signed\noriginals are DeltaQuantity / DeltaCollateral.","type":"number"},"timestamp":{"type":"integer"},"title":{"type":"string"},"tokenId":{"type":"string"},"tradePrice":{"type":"number"},"transactionHash":{"type":"string"},"type":{"type":"string"},"userAddress":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get open positions

GET /api/v1/market-data/positions

## Get open positions

> Returns a paginated list of currently open outcome token positions for a wallet (current\_quantity > 0 AND is\_claimed = FALSE). Includes unrealised PnL, cost basis, current value, held quantity, last block timestamp, early-resolution eligibility, market lifecycle status (same values as /market-data/status), and outcome details. Optionally filter by market or question ID.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/positions","name":"get-open-positions"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/positions":{"get":{"description":"Returns a paginated list of currently open outcome token positions for a wallet (current_quantity > 0 AND is_claimed = FALSE). Includes unrealised PnL, cost basis, current value, held quantity, last block timestamp, early-resolution eligibility, market lifecycle status (same values as /market-data/status), and outcome details. Optionally filter by market or question ID.","tags":["get-open-positions"],"summary":"Get open positions","parameters":[{"schema":{"type":"string"},"description":"Wallet address","name":"user","in":"query","required":true},{"schema":{"type":"string"},"description":"Comma-separated market addresses to filter by","name":"market","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated question IDs to filter by","name":"question_id","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated question tags to exclude (case-insensitive; max 20)","name":"exclude_tags","in":"query"},{"schema":{"type":"string"},"description":"Sort field: size (default), last_traded, updated_at","name":"order","in":"query"},{"schema":{"type":"boolean"},"description":"Sort ascending (default false = descending)","name":"ascending","in":"query"},{"schema":{"type":"integer"},"description":"Limit (default 100, max 1000)","name":"limit","in":"query"},{"schema":{"type":"integer"},"description":"Offset (default 0, max 10000)","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_PositionResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_PositionResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.PositionResponse"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.PositionResponse":{"type":"object","properties":{"avgPrice":{"type":"number"},"cashPnl":{"type":"number"},"costBasis":{"type":"number"},"curPrice":{"type":"number"},"currentValue":{"description":"CurrentValue is the current market value of the position: size × current price.","type":"number"},"dispute":{"$ref":"#/components/schemas/internal_handler.PositionDispute"},"heldQuantity":{"type":"number"},"isClaimed":{"type":"boolean"},"isFinalized":{"type":"boolean"},"isWinner":{"type":"boolean"},"lastBlockTimestamp":{"type":"integer"},"market":{"$ref":"#/components/schemas/internal_handler.PositionMarket"},"marketAddress":{"type":"string"},"outcome":{"$ref":"#/components/schemas/internal_handler.PositionOutcome"},"percentPnl":{"type":"number"},"question":{"$ref":"#/components/schemas/internal_handler.PositionQuestion"},"questionId":{"type":"string"},"realizedPnl":{"type":"number"},"size":{"type":"number"},"tokenId":{"type":"string"},"userAddress":{"type":"string"}}},"internal_handler.PositionDispute":{"type":"object","properties":{"deadlineAt":{"type":"string"},"isWindowOpen":{"type":"boolean"},"latestResolveId":{"type":"integer"},"resolvedAt":{"type":"string"},"viewerDisputeId":{"type":"integer"},"windowHours":{"type":"integer"}}},"internal_handler.PositionMarket":{"type":"object","properties":{"collateralDecimals":{"type":"integer"},"startDate":{"type":"string"},"status":{"description":"Status is the market lifecycle status: not_started, live, pending_resolution,\nresolved, finalised, disabled, unknown. Same values as GET /market-data/status.\nPopulated on /positions only; omitted on /closed-positions.","type":"string"}}},"internal_handler.PositionOutcome":{"type":"object","properties":{"image":{"type":"string"},"index":{"type":"integer"},"mintedQuantity":{"type":"number"},"name":{"type":"string"},"payout":{"type":"number"},"symbol":{"type":"string"}}},"internal_handler.PositionQuestion":{"type":"object","properties":{"description":{"type":"string"},"endDate":{"type":"string"},"image":{"type":"string"},"isEarlyResolutionEligible":{"type":"boolean"},"questionId":{"type":"string"},"resolvedAnswer":{"type":"string"},"title":{"type":"string"},"winningOutcomes":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get closed positions

GET /api/v1/market-data/closed-positions

## Get closed positions

> Returns a paginated list of historically closed outcome token positions for a wallet. Includes realised PnL, whether the position was a winner, claim/finalisation status, and early-resolution eligibility. When claimed=false (claimable snapshot), max limit is 500; otherwise max limit is 50.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/closed-positions","name":"get-closed-positions"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/closed-positions":{"get":{"description":"Returns a paginated list of historically closed outcome token positions for a wallet. Includes realised PnL, whether the position was a winner, claim/finalisation status, and early-resolution eligibility. When claimed=false (claimable snapshot), max limit is 500; otherwise max limit is 50.","tags":["get-closed-positions"],"summary":"Get closed positions","parameters":[{"schema":{"type":"string"},"description":"Wallet address","name":"user","in":"query","required":true},{"schema":{"type":"string"},"description":"Comma-separated market addresses to filter by","name":"market","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated question IDs to filter by","name":"question_id","in":"query"},{"schema":{"type":"string"},"description":"Claim status filter. 'true' returns positions the user has already claimed. 'false' returns positions that still need claiming (finalised winning outcomes the user held to resolution but has not yet claimed). Omit to include all closed positions, including those exited by trading before finalisation.","name":"claimed","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated question tags to exclude (case-insensitive; max 20)","name":"exclude_tags","in":"query"},{"schema":{"type":"string"},"description":"Sort field: realized_pnl (default), finalised_at, closed_at","name":"order","in":"query"},{"schema":{"type":"boolean"},"description":"Sort ascending (default false = descending)","name":"ascending","in":"query"},{"schema":{"type":"integer"},"description":"Limit (default 10; max 50, or max 500 when claimed=false)","name":"limit","in":"query"},{"schema":{"type":"integer"},"description":"Offset (default 0, max 100000)","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_ClosedPositionResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_ClosedPositionResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.ClosedPositionResponse"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.ClosedPositionResponse":{"type":"object","properties":{"avgPrice":{"type":"number"},"closedAt":{"type":"string"},"costBasis":{"type":"number"},"curPrice":{"type":"number"},"dispute":{"$ref":"#/components/schemas/internal_handler.PositionDispute"},"isClaimed":{"type":"boolean"},"isFinalized":{"type":"boolean"},"isWinner":{"type":"boolean"},"market":{"$ref":"#/components/schemas/internal_handler.PositionMarket"},"marketAddress":{"type":"string"},"outcome":{"$ref":"#/components/schemas/internal_handler.PositionOutcome"},"question":{"$ref":"#/components/schemas/internal_handler.PositionQuestion"},"questionId":{"type":"string"},"realizedPnl":{"type":"number"},"size":{"type":"number"},"tokenId":{"type":"string"},"userAddress":{"type":"string"}}},"internal_handler.PositionDispute":{"type":"object","properties":{"deadlineAt":{"type":"string"},"isWindowOpen":{"type":"boolean"},"latestResolveId":{"type":"integer"},"resolvedAt":{"type":"string"},"viewerDisputeId":{"type":"integer"},"windowHours":{"type":"integer"}}},"internal_handler.PositionMarket":{"type":"object","properties":{"collateralDecimals":{"type":"integer"},"startDate":{"type":"string"},"status":{"description":"Status is the market lifecycle status: not_started, live, pending_resolution,\nresolved, finalised, disabled, unknown. Same values as GET /market-data/status.\nPopulated on /positions only; omitted on /closed-positions.","type":"string"}}},"internal_handler.PositionOutcome":{"type":"object","properties":{"image":{"type":"string"},"index":{"type":"integer"},"mintedQuantity":{"type":"number"},"name":{"type":"string"},"payout":{"type":"number"},"symbol":{"type":"string"}}},"internal_handler.PositionQuestion":{"type":"object","properties":{"description":{"type":"string"},"endDate":{"type":"string"},"image":{"type":"string"},"isEarlyResolutionEligible":{"type":"boolean"},"questionId":{"type":"string"},"resolvedAnswer":{"type":"string"},"title":{"type":"string"},"winningOutcomes":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get user PnL

GET /api/v1/market-data/pnl/daily and /pnl/snapshot

## Get daily realised PnL series

> Returns a wallet's per-day realised PnL and buy/sell volume buckets, newest first. Decimal fields are JSON strings. Optionally bounded to an inclusive UTC calendar-day window.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/pnl/daily and /pnl/snapshot","name":"get-user-pnl"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/pnl/daily":{"get":{"description":"Returns a wallet's per-day realised PnL and buy/sell volume buckets, newest first. Decimal fields are JSON strings. Optionally bounded to an inclusive UTC calendar-day window.","tags":["get-user-pnl"],"summary":"Get daily realised PnL series","parameters":[{"schema":{"type":"string"},"description":"Wallet address","name":"user","in":"query","required":true},{"schema":{"type":"string"},"description":"Window start date YYYY-MM-DD UTC inclusive (requires to)","name":"from","in":"query"},{"schema":{"type":"string"},"description":"Window end date YYYY-MM-DD UTC inclusive (requires from)","name":"to","in":"query"},{"schema":{"type":"integer"},"description":"Limit (default 100, max 500)","name":"limit","in":"query"},{"schema":{"type":"integer"},"description":"Offset (default 0, max 10000)","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_DailyPnlEntry"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_DailyPnlEntry":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.DailyPnlEntry"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.DailyPnlEntry":{"type":"object","properties":{"bucket":{"description":"Bucket is the UTC day bucket start, RFC3339.","type":"string"},"buyVolume":{"type":"string"},"realizedPnl":{"type":"string"},"sellVolume":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```

## Get historical PnL snapshot

> Returns a wallet's unrealised PnL (server-side 4-state fold over positions held at the timestamp: active/resolving use marginal price, resolved winners use payout, resolved losers lose cost), cumulative realised PnL (daily buckets strictly before the timestamp), and open position count as of a unix timestamp (default now). Pass expand=positions to include the folded positions.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/pnl/daily and /pnl/snapshot","name":"get-user-pnl"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/pnl/snapshot":{"get":{"description":"Returns a wallet's unrealised PnL (server-side 4-state fold over positions held at the timestamp: active/resolving use marginal price, resolved winners use payout, resolved losers lose cost), cumulative realised PnL (daily buckets strictly before the timestamp), and open position count as of a unix timestamp (default now). Pass expand=positions to include the folded positions.","tags":["get-user-pnl"],"summary":"Get historical PnL snapshot","parameters":[{"schema":{"type":"string"},"description":"Wallet address","name":"user","in":"query","required":true},{"schema":{"type":"integer"},"description":"Snapshot unix timestamp (default now; rounded down to the minute)","name":"as_of","in":"query"},{"schema":{"type":"string"},"description":"Set to 'positions' to include the folded positions","name":"expand","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.PnlSnapshotResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.PnlSnapshotResponse":{"type":"object","properties":{"asOf":{"description":"AsOf echoes the snapshot unix timestamp the fold was computed at.","type":"integer"},"positionCount":{"type":"integer"},"positions":{"description":"Positions is only present with ?expand=positions.","type":"array","items":{"$ref":"#/components/schemas/internal_handler.PnlSnapshotPosition"}},"realizedPnl":{"type":"number"},"unrealizedPnl":{"type":"number"}}},"internal_handler.PnlSnapshotPosition":{"type":"object","properties":{"avgPrice":{"type":"number"},"marginalPrice":{"type":"number"},"payout":{"type":"number"},"quantity":{"type":"number"},"questionId":{"type":"string"},"tokenId":{"type":"string"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get Blitz performance

GET /api/v1/token-races/performance

## Get Blitz performance

> Returns exact all-time Blitz total cost, PnL, best winning streak, and longest losing streak. PnL and both streaks come from the wallet aggregate (fee-inclusive race cash-flow atoms). Total cost is mint pool collateral across completed Blitz markets and excludes protocol and integrator fees.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/token-races/performance","name":"get-blitz-performance"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/token-races/performance":{"get":{"description":"Returns exact all-time Blitz total cost, PnL, best winning streak, and longest losing streak. PnL and both streaks come from the wallet aggregate (fee-inclusive race cash-flow atoms). Total cost is mint pool collateral across completed Blitz markets and excludes protocol and integrator fees.","tags":["get-blitz-performance"],"summary":"Get Blitz performance","parameters":[{"schema":{"type":"string"},"description":"Ethereum wallet address","name":"user","in":"query","required":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.BlitzPerformance"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.BlitzPerformance":{"type":"object","properties":{"bestStreak":{"type":"integer"},"longestLossStreak":{"description":"LongestLossStreak is the all-time losing mirror of BestStreak.","type":"integer"},"pnl":{"description":"Pnl is all-time race cash-flow PnL from race_user_aggregate (fee-inclusive).","type":"string"},"totalCost":{"description":"TotalCost is mint pool collateral spent in completed Blitz markets,\nexcluding protocol and integrator fees.","type":"string"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Leaderboard

Trader rankings, wallet statistics, and top trades


# Get trader leaderboard

GET /api/v1/market-data/leaderboard

## Get trader leaderboard

> Returns a global ranking of traders sorted by realised PnL, win rate, or volume for a given time period or calendar-day window. Pass a \`user\` wallet address to retrieve a single wallet's rank within the leaderboard.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/leaderboard","name":"get-trader-leaderboard"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/leaderboard":{"get":{"description":"Returns a global ranking of traders sorted by realised PnL, win rate, or volume for a given time period or calendar-day window. Pass a `user` wallet address to retrieve a single wallet's rank within the leaderboard.","tags":["get-trader-leaderboard"],"summary":"Get trader leaderboard","parameters":[{"schema":{"type":"string","default":"all","enum":["1d","7d","30d","all"]},"description":"Time period (mutually exclusive with from/to)","name":"period","in":"query"},{"schema":{"type":"string"},"description":"Window start date YYYY-MM-DD UTC inclusive (requires to; mutually exclusive with period)","name":"from","in":"query"},{"schema":{"type":"string"},"description":"Window end date YYYY-MM-DD UTC inclusive (requires from; mutually exclusive with period)","name":"to","in":"query"},{"schema":{"type":"string","default":"pnl","enum":["pnl","win_rate","volume"]},"description":"Sort criterion","name":"sort_by","in":"query"},{"schema":{"type":"string"},"description":"Wallet address — returns that wallet's rank instead of the full list","name":"user","in":"query"},{"schema":{"type":"integer","default":100,"maximum":500,"minimum":1},"description":"Max results","name":"limit","in":"query"},{"schema":{"type":"integer","default":0},"description":"Pagination offset","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_LeaderboardEntry"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_LeaderboardEntry":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.LeaderboardEntry"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.LeaderboardEntry":{"type":"object","properties":{"losingPredictions":{"type":"integer"},"losingSells":{"type":"integer"},"pnl":{"type":"number"},"pnlPct":{"type":"number"},"profitableSells":{"type":"integer"},"rank":{"type":"integer"},"totalVolume":{"type":"number"},"tradeCount":{"type":"integer"},"walletAddress":{"type":"string"},"winRate":{"type":"number"},"winningPredictions":{"type":"integer"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get wallet trading stats

GET /api/v1/market-data/leaderboard/stats/{wallet\_address}

## Get wallet trading stats

> Returns lifetime aggregate trading statistics for a single wallet, including total PnL, win rates, buy/sell volumes, trade count, and best/worst individual trades.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/leaderboard/stats/{wallet_address}","name":"get-wallet-stats"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/leaderboard/stats/{wallet_address}":{"get":{"description":"Returns lifetime aggregate trading statistics for a single wallet, including total PnL, win rates, buy/sell volumes, trade count, and best/worst individual trades.","tags":["get-wallet-stats"],"summary":"Get wallet trading stats","parameters":[{"schema":{"type":"string"},"description":"Ethereum wallet address","name":"wallet_address","in":"path","required":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.WalletStats"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.WalletStats":{"type":"object","properties":{"avgTradeSize":{"type":"number"},"bestTrade":{"type":"number"},"buyVolume":{"type":"number"},"losingPredictions":{"type":"integer"},"losingSells":{"type":"integer"},"pnl":{"type":"number"},"predictionWinRate":{"type":"number"},"profitableSells":{"type":"integer"},"sellVolume":{"type":"number"},"sellWinRate":{"type":"number"},"totalVolume":{"type":"number"},"tradeCount":{"type":"integer"},"walletAddress":{"type":"string"},"winRate":{"type":"number"},"winningPredictions":{"type":"integer"},"worstTrade":{"type":"number"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get top trades

GET /api/v1/market-data/leaderboard/top-trades

## Get top trades

> Returns the highest-PnL individual trades globally with locale-resolved titles/outcomes and images. Supports sorting by pnl, pnl\_pct, or cost\_basis.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/leaderboard/top-trades","name":"get-top-trades"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/leaderboard/top-trades":{"get":{"description":"Returns the highest-PnL individual trades globally with locale-resolved titles/outcomes and images. Supports sorting by pnl, pnl_pct, or cost_basis.","tags":["get-top-trades"],"summary":"Get top trades","parameters":[{"schema":{"type":"string","default":"all","enum":["1d","7d","30d","all"]},"description":"Time period","name":"period","in":"query"},{"schema":{"type":"string"},"description":"BCP-47 locale for title/outcome resolution","name":"locale","in":"query"},{"schema":{"type":"string","default":"pnl","enum":["pnl","pnl_pct","cost_basis"]},"description":"Sort column","name":"sort_by","in":"query"},{"schema":{"type":"string","default":"desc","enum":["asc","desc"]},"description":"Sort direction","name":"order","in":"query"},{"schema":{"type":"integer","default":10,"maximum":50,"minimum":1},"description":"Max results","name":"limit","in":"query"},{"schema":{"type":"integer","default":0},"description":"Pagination offset","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_TopTradeEntry"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_TopTradeEntry":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.TopTradeEntry"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.TopTradeEntry":{"type":"object","properties":{"avgPrice":{"type":"number"},"costBasis":{"type":"number"},"deltaCollateral":{"type":"number"},"deltaQuantity":{"type":"number"},"eventType":{"type":"string"},"outcomeImage":{"type":"string"},"outcomeName":{"type":"string"},"pnl":{"type":"number"},"pnlPct":{"type":"number"},"questionImage":{"type":"string"},"questionTitle":{"type":"string"},"rank":{"type":"integer"},"resolvedAt":{"type":"integer"},"sourceLocale":{"type":"string"},"walletAddress":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get race leaderboard

GET /api/v1/token-races/leaderboard

## Get race leaderboard

> Ranks wallets over finalised token races (Blitz) within a time period or UTC calendar-day window, sorted by longest consecutive winning-race run by default. Every row also reports \`losses\` and \`longestLossStreak\` (the losing mirror of \`wins\` / \`bestStreak\` over the same window), though neither is a sort option. Treasury wallets and the deployment's configured market-maker wallets are excluded. Pass \`user\` for a single wallet's rank. For live ranks inside the current race window, use the race-coordinator's GET /race/leaderboard/me instead — this endpoint only sees races that have been finalised onchain.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/token-races/leaderboard","name":"get-race-leaderboard"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/token-races/leaderboard":{"get":{"description":"Ranks wallets over finalised token races (Blitz) within a time period or UTC calendar-day window, sorted by longest consecutive winning-race run by default. Every row also reports `losses` and `longestLossStreak` (the losing mirror of `wins` / `bestStreak` over the same window), though neither is a sort option. Treasury wallets and the deployment's configured market-maker wallets are excluded. Pass `user` for a single wallet's rank. For live ranks inside the current race window, use the race-coordinator's GET /race/leaderboard/me instead — this endpoint only sees races that have been finalised onchain.","tags":["get-race-leaderboard"],"summary":"Get race leaderboard","parameters":[{"schema":{"type":"string","default":"all","enum":["1d","7d","30d","all"]},"description":"Time period (mutually exclusive with from/to)","name":"period","in":"query"},{"schema":{"type":"string"},"description":"Window start date YYYY-MM-DD UTC inclusive (requires to; mutually exclusive with period)","name":"from","in":"query"},{"schema":{"type":"string"},"description":"Window end date YYYY-MM-DD UTC inclusive (requires from; mutually exclusive with period)","name":"to","in":"query"},{"schema":{"type":"string","default":"best_streak","enum":["best_streak","pnl","wins","win_rate"]},"description":"Primary sort criterion. win_rate is unweighted — one won race outranks a long profitable run.","name":"sort_by","in":"query"},{"schema":{"type":"string"},"description":"Wallet address — returns that wallet's rank instead of the full list","name":"user","in":"query"},{"schema":{"type":"integer","default":100,"maximum":500,"minimum":1},"description":"Max results","name":"limit","in":"query"},{"schema":{"type":"integer","default":0},"description":"Pagination offset","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_RaceLeaderboardEntry"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_RaceLeaderboardEntry":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.RaceLeaderboardEntry"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.RaceLeaderboardEntry":{"type":"object","properties":{"bestStreak":{"type":"integer"},"longestLossStreak":{"description":"LongestLossStreak is the longest consecutive losing run in the same window,\ncomputed from the same islands as BestStreak. Losses is its atom count\n(races_played − wins). Reported but not rankable — see raceLeaderboardOrderBy.","type":"integer"},"losses":{"type":"integer"},"racePnl":{"type":"number"},"racesPlayed":{"type":"integer"},"rank":{"type":"integer"},"walletAddress":{"type":"string"},"winRate":{"type":"number"},"wins":{"type":"integer"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Internal

Internal-only endpoints gated by X-Internal-API-Key


# Treasury disbursement reads

GET /internal/treasury/\*

## Lifetime protocol fees paid by a wallet

> Internal. Returns the cumulative total\_fees\_hmr from current\_user\_stats for the given address. Monotonic lifetime counter for watermarked fee clawback. Requires X-Internal-API-Key.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /internal/treasury/*","name":"internal-treasury"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/internal/treasury/fees-paid":{"get":{"description":"Internal. Returns the cumulative total_fees_hmr from current_user_stats for the given address. Monotonic lifetime counter for watermarked fee clawback. Requires X-Internal-API-Key.","tags":["internal-treasury"],"summary":"Lifetime protocol fees paid by a wallet","parameters":[{"schema":{"type":"string"},"description":"Wallet address","name":"address","in":"query","required":true},{"schema":{"type":"string"},"description":"Internal API key","name":"X-Internal-API-Key","in":"header","required":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.FeesPaidResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.FeesPaidResponse":{"type":"object","properties":{"address":{"type":"string"},"as_of_ledger_id":{"type":"integer"},"found":{"type":"boolean"},"total_fees_hmr":{"type":"number"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```

## Treasury seed claims attributed to a seeder

> Internal. Returns Safe/treasury market\_claim payouts pro-rata attributed to the seeder who funded seed() mints. Strict (block\_number, log\_index) ascending order with exclusive cursor. Requires X-Internal-API-Key.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /internal/treasury/*","name":"internal-treasury"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/internal/treasury/seed-claims":{"get":{"description":"Internal. Returns Safe/treasury market_claim payouts pro-rata attributed to the seeder who funded seed() mints. Strict (block_number, log_index) ascending order with exclusive cursor. Requires X-Internal-API-Key.","tags":["internal-treasury"],"summary":"Treasury seed claims attributed to a seeder","parameters":[{"schema":{"type":"string"},"description":"Seeder wallet address","name":"seeder","in":"query","required":true},{"schema":{"type":"integer"},"description":"Exclusive cursor block number","name":"after_block","in":"query"},{"schema":{"type":"integer"},"description":"Exclusive cursor log index","name":"after_log_index","in":"query"},{"schema":{"type":"integer"},"description":"Page size (default 500, max 500)","name":"limit","in":"query"},{"schema":{"type":"string"},"description":"Internal API key","name":"X-Internal-API-Key","in":"header","required":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.SeedClaimsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.SeedClaimsResponse":{"type":"object","properties":{"has_more":{"type":"boolean"},"items":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.SeedClaimItem"}},"next_cursor":{"$ref":"#/components/schemas/internal_handler.SeedClaimCursor"},"seeder":{"type":"string"}}},"internal_handler.SeedClaimItem":{"type":"object","properties":{"block_number":{"type":"integer"},"block_timestamp":{"type":"integer"},"claim_collateral_hmr":{"type":"number"},"log_index":{"type":"integer"},"market_address":{"type":"string"},"question_id":{"type":"string"},"seeder_share":{"type":"number"},"token_id":{"type":"string"}}},"internal_handler.SeedClaimCursor":{"type":"object","properties":{"block_number":{"type":"integer"},"log_index":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Frequently Ask Questions

Common FAQ.

### Security

<details>

<summary><strong>Has 42 been audited?</strong></summary>

The 42 protocol has undergone security reviews and audits by independent third-party auditors (refer to [Audits](/security/markdown)). Identified issues have been addressed prior to deployment, and the team continues to improve the codebase as the protocol evolves.

That said, no smart-contract system can be considered entirely risk-free. Users should always assess their own risk tolerance and participate responsibly.

</details>

<details>

<summary><strong>What risks should users be aware of?</strong></summary>

42 is a non-custodial, smart-contract-based protocol. Participation involves interacting directly with on-chain code, which carries inherent risks, including but not limited to:

* **Smart contract vulnerabilities:** unforeseen bugs or edge cases may exist despite audits and testing.
* **Oracle and resolution risk:** markets resolve strictly according to predefined rules and data sources; unexpected oracle behavior or data anomalies may impact outcomes.
* **Economic and market risk:** prices and payouts depend on participant behavior, timing, and capital distribution.
* **Protocol integrations:** where 42 interfaces with external infrastructure (e.g. oracles, settlement layers), failures or exploits in those systems may affect the protocol.

</details>


# Audits

42’s smart contracts have been **rigorously audited by multiple independent security experts**, including:

* **HickupHH3:** former top Code4rena warden, Cantina contributor, and member of Spearbit
* **Sawmon & Natalie:** leading independent smart contract auditors
* **Zellic:** industry-recognized blockchain cybersecurity firm

All 42 smart contracts are **fully open source** and available for public review in our [GitHub repository](https://github.com/fortytwo-protocol/ft-contracts-public/tree/main/audits).


# Privacy Policy

<p align="center"><strong>42: EVENTS CONTRACT ASSET ISSUANCE PROTOCOL</strong></p>

<p align="center"><strong>PRIVACY POLICY</strong></p>

*Effective Date: 2 Feb 2026*

**WE DO NOT SELL YOUR PERSONAL INFORMATION**. You are already opted out from sharing personal information with third parties for their direct marketing purposes.

### 1. INTRODUCTION

This Privacy Policy ("**Policy**") describes how Deep Thought Labs Inc. and its affiliates (collectively, "**Company**," "**we**," "**us**," or "**our**") collect, use, disclose, and protect information when you access or use our events contract asset issuance platform, websites, mobile applications, and related services (collectively, the "**Services**").

By accessing or using our Services, you acknowledge that you have read, understood, and agree to the collection, use, and disclosure of your information as described in this Policy. If you do not agree with this Policy, please do not access or use our Services.

This Policy applies to information collected through the Services. It does not apply to information collected by third parties, including any websites, services, or applications that may link to or be accessible from the Services. We encourage you to review the privacy policies of any third-party services you access.

### 2. INFORMATION WE COLLECT

We strive to collect as little personal information as possible, within the legal requirements applicable to us. However, due to the general operation of internet protocols, some information (e.g. your IP address) may be passed onto us inadvertently.

We collect information in multiple ways: directly from you, automatically when you use our Services, and from third-party sources.

**2.1 Information You Provide Directly**

When you register for an account, complete verification, or otherwise interact with our Services, we may collect:

* Contact Data
  * Email address, mailing address, telephone number
  * Communication preferences
* Blockchain and Wallet Data
  * Wallet addresses you connect to our Services
  * On-chain transaction data associated with your wallet
  * Smart contract interaction history
* Profile and Usage Data
  * Username, password, and account preferences
  * Trading history, orders, and positions
  * Interests, preferences, and survey responses
  * Content you submit, including feedback and support requests

**2.2 Information Collected Automatically**

When you access or use our Services, we automatically collect certain information:

* Device and Technical Data
  * IP address, browser type and version, operating system
  * Device type, unique device identifiers, mobile network information
  * Time zone setting, language preferences
  * Hardware and software information
* Location Data
  * Approximate location derived from IP address
  * Wi-Fi access point and cell tower data (where available)
* Usage and Interaction Data
  * Pages viewed, features used, links clicked
  * Date, time, and duration of visits
  * Referring URLs and search terms
  * Error logs and performance data

**2.3 Cookies and Tracking Technologies**

We use cookies, web beacons, pixels, and similar tracking technologies to collect information and enhance your experience. The types of cookies we use include:

* **Essential Cookies**: Required for the Services to function properly, including authentication, security, and session management. These cannot be disabled.
* **Preference Cookies**: Remember your settings, language preferences, and personalization choices.
* **Analytics Cookies**: Help us understand how visitors interact with our Services, allowing us to improve functionality and user experience.
* **Marketing Cookies**: Used to deliver relevant advertisements and track the performance of marketing campaigns.

You can manage cookie preferences through your browser settings. However, disabling certain cookies may limit your ability to use some features of our Services, including authentication functionality.

**2.4 Information from Third Parties**

We may receive information about you from third-party sources, including:

* **Authentication Services**: If you log in using third-party services (e.g., Google, Apple), we receive profile information as authorized by your privacy settings with that service.
* **Blockchain Data**: Publicly available blockchain transaction data associated with wallet addresses you use.
* **Marketing Partners**: Business partners and data providers who help us understand our users and improve our marketing efforts.

### 3. HOW WE USE YOUR INFORMATION

We use the information we collect for purposes described in this Policy or as otherwise disclosed to you, including:

**3.1 Providing and Operating the Services**

* Creating and managing your account
* Verifying your identity and eligibility
* Processing transactions, trades, and settlements
* Providing customer support and responding to inquiries
* Administering contests, promotions, and rewards programs

**3.2 Communication**

* Sending transactional messages (confirmations, alerts, account updates)
* Delivering technical notices, security alerts, and support messages
* Providing newsletters and marketing communications (with a separate consent where required)
* Conducting surveys and collecting feedback

**3.3 Security and Compliance**

* Detecting, preventing, and investigating fraud, unauthorized access, and illegal activity
* Enforcing our [Terms of Use](/legal/terms-of-use) and other agreements
* Responding to legal process and government requests
* Market surveillance and maintaining market integrity

**3.4 Improvement and Analytics**

* Analyzing usage patterns and trends
* Improving and optimizing our Services
* Developing new features and products
* Conducting research and generating anonymized statistical data

**3.5 Recording of Communications**

We may monitor, record, retain, and use information and data that you communicate during your use of the Services, including via email, chat, and telephone. Such recordings may be used for quality assurance, training, compliance, dispute resolution, and as evidence of suspected criminal activity or policy violations.

### 4. DISCLOSURE OF INFORMATION

We are committed to maintaining your trust. We may share your information in the following circumstances:

**4.1 Service Providers**

We share information with authorized third-party service providers who perform services on our behalf, including payment processing, identity verification, data hosting, analytics, customer support, and marketing. These providers are contractually obligated to maintain confidentiality and use information only for the purposes for which it was disclosed.

**4.2 Legal and Regulatory Compliance**

We may disclose information to comply with applicable laws, regulations, legal processes, or governmental requests. This includes responding to subpoenas, court orders, and requests from regulatory authorities such as \[relevant regulators, e.g., CFTC, SEC, financial regulators]. We may also disclose information to protect the rights, property, or safety of the Company, our users, or the public.

**4.3 Business Transfers**

In connection with any merger, acquisition, financing, reorganization, bankruptcy, or sale of assets, your information may be transferred as part of the transaction. We will provide notice before your information becomes subject to a different privacy policy.

**4.4 With Your Consent**

We may share information for other purposes disclosed to you and with your consent.

**4.5 Aggregated and Anonymized Data**

We may share aggregated or anonymized information that does not reasonably identify you for research, analytics, business purposes, or public reporting.

**4.6 Employer or Affiliated Entity Disclosure**

If you are employed by or affiliated with a regulated entity (such as a financial institution, exchange, or self-regulatory organization), we may disclose information about your activity to your employer or affiliated entity as required by applicable securities and commodities laws.

### 5. THIRD-PARTY TRACKING AND ADVERTISING

We participate in interest-based advertising and use third-party advertising companies to serve targeted advertisements based on your online activity and interests. These third parties may collect information through cookies and similar technologies.

You can opt out of interest-based advertising through:

* Network Advertising Initiative: <http://www.networkadvertising.org/choices>
* Digital Advertising Alliance: <http://www.aboutads.info/choices>
* Your mobile device settings ("Limit Ad Tracking" on iOS or "Opt Out of Interest-Based Ads" on Android)
* Google Ads Preferences: <https://google.com/ads/preferences>

**5.1 Google Analytics**

We use Google Analytics to understand how users interact with our Services. Google uses various technologies to collect information about your use, and may link activity across devices. For information on how Google uses data, visit: <http://www.google.com/policies/privacy/partners/>. You can opt out using the Google Analytics Browser Add-on: <https://tools.google.com/dlpage/gaoptout/>

### 6. DATA RETENTION

We retain personal information for as long as necessary to fulfill the purposes for which it was collected, provide our Services, comply with legal and regulatory obligations, resolve disputes, and enforce our agreements.

Specific retention periods include:

* **Account Information**: Retained for the duration of your account and for a reasonable period thereafter.
* **Transaction Records**: Retained for at least five (5) years after the end of our business relationship, or longer as required by applicable law (including financial recordkeeping requirements).
* **Marketing Preferences**: Retained to honor your opt-out requests.
* **Communications Records**: Retained for periods required for compliance and dispute resolution.

When information is no longer needed, we will securely delete or anonymize it.

### 7. DATA SECURITY

We implement technical, administrative, and physical safeguards designed to protect your information from unauthorized access, use, alteration, and disclosure. Our security measures include:

* Encryption of data in transit and at rest
* Access controls limiting personnel access to personal information
* Data masking and anonymization where appropriate
* Secure development practices and regular security assessments
* Segregation of customer data across multiple databases
* Monitoring and logging of access to sensitive systems

**IMPORTANT**: While we strive to protect your information, no method of transmission over the internet or electronic storage is completely secure. We cannot guarantee absolute security. You are responsible for maintaining the confidentiality of your account credentials and wallet private keys.

### 8. YOUR RIGHTS AND CHOICES

**8.1 Account Information**

You may access and update certain account information by logging into your account settings. For information that cannot be updated through your account, please contact us using the information provided below.

**8.2 Communication Preferences**

You can opt out of promotional emails by clicking the "unsubscribe" link in any promotional message. You may not opt out of service-related communications (such as account verification, transaction confirmations, security alerts, and regulatory notices).

**8.3 Device and Location Permissions**

You can control access to device features (such as location services, camera, contacts) through your device or browser settings.

**8.4 Data Subject Rights**

Depending on your location and applicable law, you may have the following rights:

* Right to access your personal information
* Right to rectify inaccurate or incomplete information
* Right to erasure (deletion) of your personal information, subject to legal retention requirements
* Right to restrict or object to processing
* Right to data portability
* Right to withdraw consent (where processing is based on consent)
* Right to lodge a complaint with your local data protection authority

To exercise these rights, please contact us at <info@42.space>. We may need to verify your identity before responding to your request.

### 9. GRAMM-LEACH-BLILEY ACT (GLBA) NOTICE

Our Services are not directed to individuals resident in the United States or its overseas territories, as well as other restricted jurisdictions listed in our [Terms of Use](/legal/terms-of-use). We do not knowingly collect personal information from individuals in such jurisdictions.

If such individuals or legal entities attempt to use our services, some information may be automatically collected. If such information is collected from US individuals attempting to use our services or to circumvent our location restrictions, the following notices shall apply:

Applicable privacy laws, including the Gramm-Leach-Bliley Act (GLBA) and the Fair Credit Reporting Act, provide you with the right to opt out of certain information sharing with affiliated and non-affiliated companies for their marketing purposes.

**YOU ARE ALREADY OPTED OUT**. We do not share your nonpublic personal information with any third parties that would trigger this opt-out right.

### 10. NOTICE TO CALIFORNIA RESIDENTS

This section provides additional information for California residents under the California Consumer Privacy Act ("CCPA") and California Privacy Rights Act ("CPRA").

**Note**: The CCPA does not apply to nonpublic personal information collected by financial institutions that is subject to the GLBA. As a result, the CCPA may not apply to most information we collect.

For information subject to the CCPA, California residents have the right to:

* Request disclosure of the categories and specific pieces of personal information collected
* Request deletion of personal information
* Opt out of the "sale" or "sharing" of personal information
* Not be discriminated against for exercising these rights

**We do not sell personal information**. We may allow third parties to collect information through our Services for advertising purposes as described in Section 5.

To submit a request, contact us at <info@42.space>. You may designate an authorized agent to make a request on your behalf, but we may require proof of authorization and verification of your identity.

### 11. DO NOT TRACK SIGNALS

Some browsers transmit "Do Not Track" (DNT) signals to websites. We do not currently respond to DNT signals because there is no industry-standard approach to DNT. You can manage tracking preferences through the opt-out mechanisms described in this Policy.

### 12. INTERNATIONAL DATA TRANSFERS

Your information may be transferred to, stored, and processed in the United States or other countries where we or our service providers operate. These countries may have data protection laws that differ from those in your jurisdiction.

By using the Services, you consent to the transfer of your information to these countries. Where required by applicable law, we will implement appropriate safeguards for cross-border transfers, such as standard contractual clauses or other mechanisms.

### 13. CHILDREN'S PRIVACY

Our Services are not directed to individuals under the age of 18 (or the age of majority in your jurisdiction). We do not knowingly collect personal information from children under 13 (or under 16 in certain jurisdictions).

If we become aware that we have collected personal information from a child, we will promptly delete that information unless we are legally required to retain it. If you believe a child has provided us with personal information, please contact us at <info@42.space>.

### 14. CHANGES TO THIS POLICY

We may update this Privacy Policy from time to time to reflect changes in our practices, technology, legal requirements, or other factors. When we make material changes, we will:

* Update the "Effective Date" at the top of this Policy
* Notify you by email to the address associated with your account
* Post a prominent notice on our Services

Your continued use of the Services after the effective date of any changes constitutes your acceptance of the revised Policy. We encourage you to review this Policy periodically.

### 15. RELATIONSHIP TO OTHER AGREEMENTS

Users of our Services are also bound by our [Terms of Use](/legal/terms-of-use), any applicable Participant Agreement/Member Agreement, and applicable market rules. In the event of any conflict between this Privacy Policy and those agreements regarding the handling of your information, the provisions of the applicable agreement shall govern.

Data Controller: Deep Thought Labs Inc. is the data controller responsible for the processing of your personal information under this Privacy Policy.

<h3 align="center"><strong>SUMMARY OF DATA PRACTICES</strong></h3>

| **Category**    | **Summary**                                                                           |
| --------------- | ------------------------------------------------------------------------------------- |
| Data We Collect | Contact, wallet, profile, device, location, and usage data                            |
| How We Use Data | Provide services, communication, security, compliance, analytics, improvement         |
| Data Sharing    | Service providers, legal/regulatory, business transfers, with consent                 |
| Data Selling    | **We do NOT sell your personal information**                                          |
| Data Retention  | As long as necessary; minimum 5 years for financial records                           |
| Your Rights     | Access, rectification, deletion, portability, objection (varies by jurisdiction)      |
| Children        | Services not directed to users under 18; no knowing collection from children under 13 |


# Terms of Use

*Last Updated:* 1 June 2026

**IMPORTANT NOTICE**: PLEASE READ THESE TERMS CAREFULLY. BY ACCESSING OR USING THE PROTOCOL, YOU AGREE TO BE BOUND BY THESE TERMS. THESE TERMS INCLUDE A BINDING ARBITRATION PROVISION AND CLASS ACTION WAIVER THAT AFFECT YOUR LEGAL RIGHTS.

### **1. INTRODUCTION AND DEFINITIONS**

**1.1 Agreement Overview**

Welcome to 42 (the "**Protocol**"), a decentralized events contract asset issuance platform. These Terms of Service ("**Terms**" or "**Agreement**") constitute a legally binding agreement between you and Deep Thought Labs Inc. ("**Company**," "**we**," "**us**," or "**our**"). By accessing, browsing, or using the Protocol, you acknowledge that you have read, understood, and agree to be bound by these Terms.

**1.2 Key Definitions**

* "**Contract**" or "**Event Contract**" means any outcome contract or similar instrument, where the value is determined by the occurrence or non-occurrence of a specified event.
* “**Events Contract Asset Issuance**” means the generation of Digital Assets that represent Events Contracts offered for trading on the Protocol.
* "Market" means an events contract created on the Protocol for trading Contracts related to a specific question or event.
* "**Resolution**" means the process by which the outcome of a Market is determined and Contracts are settled according to the Resolution Mechanism.
* "**Resolution Mechanism**" means the system, oracle, or procedure designated for determining Market outcomes, which may include decentralized oracle systems / centralized determination, or hybrid mechanisms. The Company reserves the right to amend the Resolution Mechanism from time to time.
* "**User**," "**you**," or "**your**" means any individual or entity that accesses or uses the Protocol in any capacity.
* "**Digital Assets**" means cryptocurrencies, stablecoins, tokens, or other blockchain-based assets used to fund accounts, purchase Events Contract Assets, or receive settlements on the Protocol.

### **2. ELIGIBILITY AND RESTRICTED JURISDICTIONS**

**2.1 General Eligibility Requirements**

To access or use the Protocol, you represent and warrant that:

* You are at least 18 years of age or the age of legal majority in your jurisdiction, whichever is greater;
* You have the legal capacity and authority to enter into this Agreement and to be bound by its terms;
* If acting on behalf of an entity, you have the authority to bind such entity to these Terms;
* You are not located in, organized in, a resident of, or a citizen of any Restricted Jurisdiction (as defined below);
* You are not subject to economic or trade sanctions administered or enforced by any governmental authority;
* You are not on any list of prohibited or restricted parties, including the U.S. Treasury Department's list of Specially Designated Nationals or the U.S. Department of Commerce Denied Persons List.

**2.2 Restricted Jurisdictions**

Access to and use of the Protocol is strictly prohibited for Users located in, organized in, residents of, or citizens of the following jurisdictions ("Restricted Jurisdictions"):

Australia, Belgium, Belarus, Burundi, Central African Republic, Canada (Ontario), Congo (Kinshasa), Cuba, Germany, Ethiopia, France, United Kingdom, Iran, Iraq, Italy, North Korea, Lebanon, Libya, Myanmar, Nicaragua, Poland, Portugal, Russia, Singapore, Somalia, South Sudan, Sudan, Syria, Thailand, Taiwan, United States Minor Outlying Islands, United States, Venezuela, Yemen, Zimbabwe, contested regions of Ukraine (Crimea, Donetsk, Luhansk).

This list may be updated at any time without prior notice. You are solely responsible for ensuring compliance with all applicable laws and regulations in your jurisdiction.

**2.3 Prohibition on VPN and Circumvention**

**YOU ARE EXPRESSLY PROHIBITED** from using any virtual private network ("VPN"), proxy server, IP masking tool, or any other technology or method to circumvent geographic restrictions, misrepresent your location, or evade eligibility requirements. Violation of this provision may result in immediate termination of access, forfeiture of funds, and potential legal action.

### **3. COMPREHENSIVE RISK DISCLOSURE**

**WARNING**: Trading events-based contracts involves substantial risk of loss and is not suitable for all individuals. You should carefully consider whether trading is appropriate for you in light of your financial condition, risk tolerance, and investment objectives. You could lose some or all of your funds.

**3.1 Market and Trading Risks**

You acknowledge and assume the following risks:

* **Speculative Nature**: Trading Event Contracts is highly speculative. Market prices reflect collective opinions about future events and may not accurately predict actual outcomes.
* **Total Loss of Capital**: You may lose 100% of the funds used to purchase Contracts if the outcome resolves against your position.
* **Price Volatility**: Events Contract Asset prices can change rapidly and dramatically due to new information, market sentiment, manipulation attempts, or other factors.
* **Liquidity Risk**: Markets may have insufficient liquidity, making it difficult or impossible to exit positions at desired prices or at all.
* **Information Asymmetry**: Other market participants may possess superior information, analytical capabilities, or automated trading systems that place you at a disadvantage.

**3.2 Technology and Infrastructure Risks**

* **System Failures**: The Protocol relies on complex technology including blockchain networks, smart contracts, and internet connectivity, all of which may experience failures, errors, or interruptions.
* **Smart Contract Risk**: Smart contracts may contain bugs, vulnerabilities, or unintended behaviors that could result in loss of funds.
* **Blockchain Network Risks**: Underlying blockchain networks may experience congestion, forks, reorganizations, or other events that affect transaction processing and finality.
* **Security Breaches**: Despite security measures, the Protocol or related systems may be subject to hacking, exploits, or other unauthorized access.
* **Wallet Security**: You are solely responsible for securing your private keys and wallet credentials. Loss or theft of these credentials may result in permanent loss of funds.

**3.3 Resolution and Oracle Risks**

* **Resolution Disputes**: Market resolution may be contested, delayed, or resolved in ways you did not anticipate based on the interpretation of resolution criteria.
* **Oracle Failures**: Resolution Mechanisms, whether decentralized oracles or centralized systems, may provide incorrect data, experience manipulation, or fail to operate as expected.
* **Ambiguous Outcomes**: Real-world events may have ambiguous outcomes that do not clearly map to Contract resolution criteria, potentially resulting in disputed or unexpected resolutions.
* **Finality of Resolution**: Resolution decisions, once finalized, are generally irreversible regardless of subsequent information or disputes. You agree to be bound by the decision of any dispute resolution process.

**3.4 Regulatory and Legal Risks**

* Regulatory Uncertainty: The regulatory status of events contracts, prediction markets, Digital Assets, and decentralized protocols and events contract asset issuance protocols varies by jurisdiction and may change at any time.
* **Legal Classification**: Event Contracts may be classified as gambling, securities, derivatives, or other regulated instruments in certain jurisdictions, potentially subjecting you to legal liability.
* **Tax Obligations**: Trading activity may generate tax obligations. You are solely responsible for determining and fulfilling your tax reporting and payment obligations.

### **4. MARKET RULES AND RESOLUTION MECHANISM**

**4.1 Market Creation and Parameters**

Each Market on the Protocol operates according to specific rules including, but not limited to:

* Resolution criteria specifying the exact conditions for each possible outcome;
* Designated resolution sources and verification methods;
* Trading period start and end dates;
* Resolution timeline and procedures;
* Any special rules or conditions applicable to the specific Market.

**YOU ARE RESPONSIBLE** for reading, understanding, and accepting all Market-specific rules before trading. Failure to understand Market rules is not grounds for disputing a resolution.

**4.2 Resolution Mechanism**

The Protocol utilizes a resolution mechanism described here [Post-Resolution](/getting-started/protocol-mechanics-101/42-outcome-tokens/post-resolution)

Resolution decisions made through the designated Resolution Mechanism are final and binding. The Company does not guarantee any particular outcome and bears no liability for resolution decisions, even if such decisions are later shown to be incorrect or contested.

**4.3 Market Cancellation and Voiding**

The Company reserves the right to cancel or void Markets or activities within Markets under the following circumstances:

* The underlying event is cancelled, postponed indefinitely, or cannot be verified;
* Evidence of material market manipulation or fraudulent activity;
* Ambiguity in resolution criteria that cannot be reasonably resolved;
* Technical errors in Market creation or smart contract functionality;
* Regulatory requirement or legal necessity.

In the event of Market cancellation, Contracts will be settled such that the pool of assets is distributed back to each user in accordance with their pro-rata contribution to the event contract asset pool in question.

**4.4 Dispute Resolution for Market Outcomes**

Users may challenge a proposed resolution by following the procedure specified on the interface. The user agrees to be bound by the outcome of the dispute resolution process.

### 5. USER ACCOUNTS AND FUNDS

**5.1 Account Security**

You are solely responsible for:

* Maintaining the confidentiality and security of your account credentials, private keys, and wallet access;
* All activity that occurs under your account or using your credentials;
* Implementing appropriate security measures including strong passwords, two-factor authentication, and secure storage of private keys;
* Promptly notifying us of any unauthorized access or security breach.

**5.2 Deposits and Withdrawals**

Users may deposit and withdraw digital assets such as USDC or any supported asset as determined by the Company from time to time. The Company may impose minimum deposit/withdrawal amounts, processing fees, or temporary holds as specified on the Platform.

**5.3 Custody and Holding of Funds**

User funds are maintained in non-custodial smart contracts. The User accepts the potential risk of loss due to smart contract hacks, exploits or unintended use. The Company accepts no liability for technical issues outside its reasonable control.

**5.4 No Refunds**

**ALL TRANSACTIONS ON THE PROTOCOL ARE FINAL**. Except as otherwise required by applicable law or expressly provided in these Terms, deposits are non-refundable and trading losses cannot be reversed. The Company is not responsible for user errors, including but not limited to incorrect transaction amounts, wrong addresses, or misunderstanding of Market rules.

### 6. PROHIBITED CONDUCT

You agree not to engage in any of the following prohibited activities:

**6.1 Market Manipulation**

* Wash trading, layering, spoofing, or any form of manipulative trading;
* Coordinated trading intended to artificially influence prices;
* Taking actions intended to influence real-world event outcomes for profit on related Markets.

**6.2 Technical Violations**

* Attempting to exploit bugs, vulnerabilities, or errors in the Protocol or smart contracts;
* Deploying automated systems that interfere with Protocol operations or other users;
* Attempting to reverse engineer, decompile, or access source code;
* Circumventing security measures or access controls.

**6.3 Legal Violations**

* Using the Protocol in violation of any applicable law or regulation;
* Money laundering, terrorist financing, or other illicit financial activities;
* Evading sanctions or trading on behalf of prohibited persons;
* Providing false or misleading information during registration or verification.

In the event of a user engaging in prohibited activities the Company reserves the right to take appropriate action, including but not limited to remedying, cancelling or voiding the prohibited act(s) or the effects of the prohibited act(s) in question, forfeiture of user assets in the relevant Market, banning the user from the platform or from specific Markets, or any such action the company sees fit to resolve the relevant Market or related Markets in a way that minimises or erases the effects of the prohibited activity.<br>

### 7. DISCLAIMERS AND LIMITATIONS OF LIABILITY

**7.1 No Fiduciary Duty**

These Terms are not intended to, and do not, create or impose any fiduciary duties on the Company. To the fullest extent permitted by law, you acknowledge and agree that the Company owes no fiduciary duties or liabilities to you or any other party, and to the extent any such duties or liabilities may exist at law or in equity, those duties and liabilities are hereby irrevocably disclaimed, waived, and eliminated.

**7.2 No Investment Advice**

The Company does not provide investment, legal, tax, or financial advice. Nothing on the Protocol constitutes a recommendation to buy, sell, or hold any Contract or Digital Asset. You are solely responsible for evaluating the merits and risks of each transaction and should consult qualified professionals before making financial decisions.

**7.3 "As Is" Disclaimer**

**THE PROTOCOL IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED**. TO THE FULLEST EXTENT PERMITTED BY LAW, THE COMPANY DISCLAIMS ALL WARRANTIES, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT.

**7.4 Limitation of Liability**

**TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL THE COMPANY, ITS AFFILIATES, DIRECTORS, OFFICERS, EMPLOYEES, AGENTS, OR LICENSORS BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, PUNITIVE, OR EXEMPLARY DAMAGES, INCLUDING BUT NOT LIMITED TO DAMAGES FOR LOST PROFITS, LOST DATA, LOSS OF GOODWILL, TRADING LOSSES, OR OTHER INTANGIBLE LOSSES, REGARDLESS OF THE CAUSE OF ACTION OR THE THEORY OF LIABILITY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.**

THE COMPANY'S TOTAL AGGREGATE **LIABILITY SHALL NOT EXCEED THE GREATER OF: (A) THE AMOUNT OF FEES PAID BY YOU TO THE COMPANY IN THE TWELVE (12) MONTHS PRECEDING THE CLAIM; OR (B) ONE HUNDRED U.S. DOLLARS ($100.00).**

### **8. INDEMNIFICATION**

You agree to indemnify, defend, and hold harmless the Company and its affiliates, officers, directors, employees, agents, successors, and assigns from and against any and all claims, damages, losses, liabilities, costs, and expenses (including reasonable attorneys' fees) arising out of or relating to:

* Your access to or use of the Protocol;
* Your violation of these Terms or any applicable law or regulation;
* Your infringement of any third-party rights;
* Any dispute between you and any third party.

### 9. DISPUTE RESOLUTION AND ARBITRATION

**PLEASE READ THIS SECTION CAREFULLY. IT AFFECTS YOUR LEGAL RIGHTS, INCLUDING YOUR RIGHT TO FILE A LAWSUIT IN COURT AND TO HAVE A JURY TRIAL.**

**9.1 Informal Resolution**

Before initiating formal dispute resolution, you agree to first contact the Company at <info@42.space> and attempt to resolve any dispute informally for at least thirty (30) days. Your notice must include your name, contact information, a description of the dispute, and the relief sought.

**9.2 Binding Arbitration**

If informal resolution is unsuccessful, any dispute, controversy, or claim arising out of or relating to these Terms or the Protocol shall be finally settled by binding arbitration administered by LCIA in accordance with its applicable rules. The arbitration shall be conducted in Singapore, in the English language, in accordance with English law before a single arbitrator with experience in blockchain technology and financial services. The arbitrator's decision shall be final and binding, and judgment on the award may be entered in any court of competent jurisdiction.

**9.3 Class Action Waiver**

YOU AND THE COMPANY AGREE THAT ANY DISPUTE RESOLUTION PROCEEDINGS WILL BE CONDUCTED ONLY ON AN INDIVIDUAL BASIS AND NOT IN A CLASS, CONSOLIDATED, OR REPRESENTATIVE ACTION. If this class action waiver is found to be unenforceable, then the entirety of this arbitration provision shall be null and void.

**9.4 Exceptions**

Notwithstanding the foregoing, either party may seek injunctive or other equitable relief in any court of competent jurisdiction to protect intellectual property rights or prevent irreparable harm.

**9.5 Time Limitation**

Any arbitration or legal proceeding must be commenced within one (1) year after the cause of action arises; otherwise, such cause of action is permanently barred.

**10. GOVERNING LAW**

These Terms shall be governed by and construed in accordance with the laws of England and Wales, without regard to its conflict of law principles. The United Nations Convention on Contracts for the International Sale of Goods shall not apply.

### **11. INTELLECTUAL PROPERTY**

All intellectual property rights in the Protocol, including but not limited to trademarks, copyrights, trade secrets, and patents, are owned by the Company or its licensors. You are granted a limited, non-exclusive, non-transferable, revocable license to access and use the Protocol solely for its intended purposes in accordance with these Terms.

You retain ownership of any content you submit to the Protocol. However, by submitting content, you grant the Company a worldwide, royalty-free, perpetual, irrevocable license to use, copy, modify, and distribute such content for any purpose related to operating and improving the Protocol.

### 12. DATA USAGE AND PRIVACY

You grant the Company a worldwide, perpetual, royalty-free, sublicensable license to use, store, copy, and create derivative works from transaction data and trading activity for business purposes including but not limited to: operating and improving the Protocol, regulatory compliance, market surveillance, and anonymized analytics.

Your use of the Protocol is also governed by our Privacy Policy, available at \[LINK], which is incorporated into these Terms by reference.

### 13. AMENDMENTS AND MODIFICATIONS

The Company reserves the right to modify these Terms at any time by posting the revised Terms on the Protocol with an updated "Last Updated" date. Material changes will be communicated through \[describe notification method]. Your continued use of the Protocol after the effective date of any modification constitutes your acceptance of the modified Terms. If you do not agree to any modification, your sole remedy is to discontinue use of the Protocol.

### 14. TERMINATION

The Company may suspend or terminate your access to the Protocol at any time, with or without cause, and with or without notice. Upon termination, you remain liable for all obligations incurred prior to termination, including any outstanding settlements or fees. Sections 3 (Risk Disclosure), 7 (Disclaimers), 8 (Indemnification), 9 (Dispute Resolution), 10 (Governing Law), and any other provisions that by their nature should survive, shall survive termination.

### 15. MISCELLANEOUS

**15.1 Entire Agreement**

These Terms, together with the Privacy Policy and any Market-specific rules, constitute the entire agreement between you and the Company regarding the Protocol and supersede all prior agreements and understandings.

**15.2 Severability**

If any provision of these Terms is found to be invalid, illegal, or unenforceable, the remaining provisions shall continue in full force and effect. The parties agree to negotiate in good faith to replace any invalid provision with a valid provision that most closely approximates the intent of the original.

**15.3 Waiver**

No waiver of any provision of these Terms shall be deemed a further or continuing waiver of such provision or any other provision. The Company's failure to enforce any right or provision shall not constitute a waiver of such right or provision.

**15.4 Assignment**

You may not assign or transfer these Terms or any rights hereunder without the Company's prior written consent. The Company may freely assign these Terms without restriction.

**15.5 Force Majeure**

The Company shall not be liable for any delay or failure to perform resulting from causes outside its reasonable control, including but not limited to acts of God, war, terrorism, civil unrest, government actions, network failures, blockchain network disruptions, or natural disasters.<br>

<p align="center"><strong>ACKNOWLEDGMENT</strong></p>

BY CLICKING "I AGREE," CONNECTING YOUR WALLET, OR OTHERWISE ACCESSING OR USING THE PROTOCOL, YOU ACKNOWLEDGE THAT YOU HAVE READ, UNDERSTOOD, AND AGREE TO BE BOUND BY THESE TERMS OF SERVICE IN THEIR ENTIRETY, INCLUDING THE BINDING ARBITRATION PROVISION AND CLASS ACTION WAIVER.

***

\ <br>


# Contact Us

For any enquiries, please reach out to us via the following channels:

1. [Discord](https://discord.com/invite/42space)
2. Email at **<info@42.space>**


# REST API (Alpha)

These REST APIs are still in alpha preview, and are subject to changes anytime.

Need something that the API does not provide? [Contact Us](https://docs.42.space/others/contact-us)


# Markets

Market discovery, categories, tokens, pricing, and market-level data


# Get all markets

GET /api/v1/markets

## Get all markets

> Returns a paginated list of all markets available on 42. Supports rich filtering by status, category, collateral, volume range, date range, and tags. Use \`order\` + \`ascending\` to control sort direction.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/markets","name":"get-all-markets"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/markets":{"get":{"description":"Returns a paginated list of all markets available on 42. Supports rich filtering by status, category, collateral, volume range, date range, and tags. Use `order` + `ascending` to control sort direction.","tags":["get-all-markets"],"summary":"Get all markets","parameters":[{"schema":{"type":"integer"},"description":"Page size (default 100, max 500)","name":"limit","in":"query"},{"schema":{"type":"integer"},"description":"Offset (default 0)","name":"offset","in":"query"},{"schema":{"type":"string"},"description":"Sort field: created_at, volume, volume_24h, collateral, start_timestamp, end_timestamp","name":"order","in":"query"},{"schema":{"type":"boolean"},"description":"Sort direction (default false = descending)","name":"ascending","in":"query"},{"schema":{"type":"string"},"description":"Filter by question_id(s), comma-separated","name":"question_id","in":"query"},{"schema":{"type":"string"},"description":"Filter by market address(es), comma-separated","name":"market_address","in":"query"},{"schema":{"type":"string"},"description":"Filter by question title ILIKE pattern(s), comma-separated (any-of; include % wildcards, e.g. `%BTC%,%Bitcoin%`)","name":"title","in":"query"},{"schema":{"type":"string"},"description":"Filter by question_metadata.description prefix (LIKE prefix%)","name":"metadata_description_prefix","in":"query"},{"schema":{"type":"string"},"description":"Filter by collateral symbol or address","name":"collateral","in":"query"},{"schema":{"type":"string"},"description":"Filter by status: not_started, live, ended, resolved, finalised, all","name":"status","in":"query"},{"schema":{"type":"number"},"description":"Minimum total volume","name":"volume_min","in":"query"},{"schema":{"type":"number"},"description":"Maximum total volume","name":"volume_max","in":"query"},{"schema":{"type":"string"},"description":"Min start date (ISO 8601)","name":"start_date_min","in":"query"},{"schema":{"type":"string"},"description":"Max start date (ISO 8601)","name":"start_date_max","in":"query"},{"schema":{"type":"string"},"description":"Min end date (ISO 8601)","name":"end_date_min","in":"query"},{"schema":{"type":"string"},"description":"Max end date (ISO 8601)","name":"end_date_max","in":"query"},{"schema":{"type":"string"},"description":"Filter by tag name (case-insensitive)","name":"tag","in":"query"},{"schema":{"type":"string"},"description":"Filter by category name (case-insensitive)","name":"category","in":"query"},{"schema":{"type":"string"},"description":"Filter by subcategory name (case-insensitive)","name":"subcategory","in":"query"},{"schema":{"type":"string"},"description":"Filter by topic name (case-insensitive)","name":"topic","in":"query"},{"schema":{"type":"string"},"description":"Filter by oracle address (v2 markets, case-insensitive)","name":"oracle","in":"query"},{"schema":{"type":"string"},"description":"Filter by creator address (v2 markets, case-insensitive)","name":"creator","in":"query"},{"schema":{"type":"integer"},"description":"Filter by contract version (1 = legacy, 2 = v2)","name":"contract_version","in":"query"},{"schema":{"type":"string"},"description":"BCP-47 locale (e.g. zh, id) for the sibling `translation` wrapper. Source fields (`question`, outcome `name`, `ancillaryData`) stay raw; `translation:{title,ancillary[]}` and outcome `translation:{name}` are populated when a matching locale exists. Wrapper is null otherwise.","name":"locale","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated top-level field whitelist (e.g. `questionId,subcategories,topics,endDate`). When set, each market is projected to only these fields, omitting large fields like ancillaryData/description/outcomes. Unknown names are ignored.","name":"fields","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_MarketResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_MarketResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.MarketResponse"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.MarketResponse":{"description":"Full market representation.","type":"object","properties":{"address":{"type":"string"},"ancillaryData":{"description":"Ancillary metadata entries posted on-chain by the question creator, oldest-first. Each entry is a comma-separated \"key:value\" pair list with `\\,`, `\\:`, and `\\\\` as escapes. Empty array for legacy markets. Always the raw on-chain form; translated human-readable bodies surface inside `translation.ancillary` (parallel array, same indexing).","type":"array","items":{"type":"string"}},"availableLocales":{"description":"Locales with an approved translation. Lets clients build a language switcher. Empty array when none. The internal pipeline status is intentionally not exposed.","type":"array","items":{"type":"string"}},"backgroundImage":{"description":"Admin-set background image for the market's grid card (off-chain metadata only). Null when unset.","type":"string"},"categories":{"type":"array","items":{"type":"string"}},"collateralAddress":{"type":"string"},"collateralDecimals":{"type":"integer"},"collateralSymbol":{"type":"string"},"contractVersion":{"description":"On-chain contract version that produced this market (1 = legacy, 2 = v2).","type":"integer"},"createdAt":{"type":"string"},"creator":{"description":"Creator of the question, with curated `name`/`image` joined from `identified_address`. Non-null for v2 markets only.","allOf":[{"$ref":"#/components/schemas/internal_handler.AddressInfoResponse"}]},"curve":{"type":"string"},"description":{"description":"Deprecated: populated from on-chain metadata for legacy v1 markets. For v2 markets, use AncillaryData — the first entry carries the creator's metadata including a `description` key.","type":"string"},"elapsedPct":{"type":"number"},"endDate":{"type":"string"},"feeRate":{"type":"number"},"finalisedAt":{"type":"string"},"image":{"type":"string"},"isFlagged":{"description":"True when the question currently has an active creator-issued flag whose expiry (if any) is in the future.","type":"boolean"},"metadataDescription":{"description":"Admin-curated description from question_metadata (off-chain). Null when unset.","type":"string"},"oracle":{"description":"Oracle responsible for resolving the question, with curated `name`/`image` joined from `identified_address`. Non-null for v2 markets only.","allOf":[{"$ref":"#/components/schemas/internal_handler.AddressInfoResponse"}]},"outcomes":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.OutcomeResponse"}},"proposer":{"description":"Deprecated: proposer metadata. Not translated and slated for removal.","allOf":[{"$ref":"#/components/schemas/internal_handler.ProposerResponse"}]},"question":{"type":"string"},"questionId":{"type":"string"},"resolutionTime":{"type":"string"},"resolvedAnswer":{"type":"string"},"slug":{"type":"string"},"sourceLocale":{"description":"Source locale of the on-chain `question`/`ancillaryData` fields (defaults to \"en\").","type":"string"},"startDate":{"type":"string"},"status":{"type":"string"},"subcategories":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"topics":{"type":"array","items":{"type":"string"}},"totalMarketCap":{"type":"number"},"traders":{"type":"integer"},"translation":{"description":"Translated display text for the locale requested via `?locale=`, or null when no `?locale=` was given, it equals `sourceLocale`, or the locale is not available. `ancillary` is index-aligned to `ancillaryData`.","allOf":[{"$ref":"#/components/schemas/internal_handler.MarketTranslation"}]},"updatedAt":{"type":"string"},"volume":{"type":"number"}}},"internal_handler.AddressInfoResponse":{"type":"object","properties":{"address":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"}}},"internal_handler.OutcomeResponse":{"description":"Per-outcome data including price, volume, and supply.","type":"object","properties":{"holdersAtFinalisation":{"type":"integer"},"image":{"type":"string"},"index":{"type":"integer"},"marketCap":{"type":"number"},"mintedQuantity":{"type":"number"},"mintedQuantityRaw":{"description":"Raw on-chain minted supply (uint256 decimal string, no HMR scaling).\nBigInt-safe: never a float. \"0\" when the outcome has no stats yet.","type":"string"},"name":{"type":"string"},"payout":{"type":"number"},"price":{"type":"number"},"symbol":{"type":"string"},"tokenId":{"type":"string"},"translation":{"description":"Translated outcome name for the locale requested via `?locale=`, or null under the same rules as MarketResponse.Translation.","allOf":[{"$ref":"#/components/schemas/internal_handler.OutcomeTranslation"}]},"volume":{"type":"number"}}},"internal_handler.OutcomeTranslation":{"description":"Localized outcome text for the requested locale.","type":"object","properties":{"name":{"type":"string"}}},"internal_handler.ProposerResponse":{"description":"Deprecated: proposer metadata. Not translated. Will be removed in a future release.","type":"object","properties":{"image":{"type":"string"},"name":{"type":"string"}}},"internal_handler.MarketTranslation":{"description":"Localized market text for the requested locale.","type":"object","properties":{"ancillary":{"type":"array","items":{"type":"string"}},"title":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```

## Get all featured market sections

> Returns every \`featured\_N\` tag's top live markets (ranked by rolling 24h volume) in one response — one section per tag, ordered by the tag's numeric suffix. Replaces issuing a separate \`/markets?tag=featured\_N\` request per section.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/markets","name":"get-all-markets"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/markets/featured":{"get":{"description":"Returns every `featured_N` tag's top live markets (ranked by rolling 24h volume) in one response — one section per tag, ordered by the tag's numeric suffix. Replaces issuing a separate `/markets?tag=featured_N` request per section.","tags":["get-all-markets"],"summary":"Get all featured market sections","parameters":[{"schema":{"type":"integer"},"description":"Markets per section (default 12, max 50)","name":"per_tag","in":"query"},{"schema":{"type":"string"},"description":"BCP-47 locale (e.g. zh, id) for the sibling `translation` wrapper on each market.","name":"locale","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.FeaturedMarketsResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.FeaturedMarketsResponse":{"type":"object","properties":{"sections":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.FeaturedSection"}}}},"internal_handler.FeaturedSection":{"type":"object","properties":{"markets":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.MarketResponse"}},"tag":{"type":"string"}}},"internal_handler.MarketResponse":{"description":"Full market representation.","type":"object","properties":{"address":{"type":"string"},"ancillaryData":{"description":"Ancillary metadata entries posted on-chain by the question creator, oldest-first. Each entry is a comma-separated \"key:value\" pair list with `\\,`, `\\:`, and `\\\\` as escapes. Empty array for legacy markets. Always the raw on-chain form; translated human-readable bodies surface inside `translation.ancillary` (parallel array, same indexing).","type":"array","items":{"type":"string"}},"availableLocales":{"description":"Locales with an approved translation. Lets clients build a language switcher. Empty array when none. The internal pipeline status is intentionally not exposed.","type":"array","items":{"type":"string"}},"backgroundImage":{"description":"Admin-set background image for the market's grid card (off-chain metadata only). Null when unset.","type":"string"},"categories":{"type":"array","items":{"type":"string"}},"collateralAddress":{"type":"string"},"collateralDecimals":{"type":"integer"},"collateralSymbol":{"type":"string"},"contractVersion":{"description":"On-chain contract version that produced this market (1 = legacy, 2 = v2).","type":"integer"},"createdAt":{"type":"string"},"creator":{"description":"Creator of the question, with curated `name`/`image` joined from `identified_address`. Non-null for v2 markets only.","allOf":[{"$ref":"#/components/schemas/internal_handler.AddressInfoResponse"}]},"curve":{"type":"string"},"description":{"description":"Deprecated: populated from on-chain metadata for legacy v1 markets. For v2 markets, use AncillaryData — the first entry carries the creator's metadata including a `description` key.","type":"string"},"elapsedPct":{"type":"number"},"endDate":{"type":"string"},"feeRate":{"type":"number"},"finalisedAt":{"type":"string"},"image":{"type":"string"},"isFlagged":{"description":"True when the question currently has an active creator-issued flag whose expiry (if any) is in the future.","type":"boolean"},"metadataDescription":{"description":"Admin-curated description from question_metadata (off-chain). Null when unset.","type":"string"},"oracle":{"description":"Oracle responsible for resolving the question, with curated `name`/`image` joined from `identified_address`. Non-null for v2 markets only.","allOf":[{"$ref":"#/components/schemas/internal_handler.AddressInfoResponse"}]},"outcomes":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.OutcomeResponse"}},"proposer":{"description":"Deprecated: proposer metadata. Not translated and slated for removal.","allOf":[{"$ref":"#/components/schemas/internal_handler.ProposerResponse"}]},"question":{"type":"string"},"questionId":{"type":"string"},"resolutionTime":{"type":"string"},"resolvedAnswer":{"type":"string"},"slug":{"type":"string"},"sourceLocale":{"description":"Source locale of the on-chain `question`/`ancillaryData` fields (defaults to \"en\").","type":"string"},"startDate":{"type":"string"},"status":{"type":"string"},"subcategories":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"topics":{"type":"array","items":{"type":"string"}},"totalMarketCap":{"type":"number"},"traders":{"type":"integer"},"translation":{"description":"Translated display text for the locale requested via `?locale=`, or null when no `?locale=` was given, it equals `sourceLocale`, or the locale is not available. `ancillary` is index-aligned to `ancillaryData`.","allOf":[{"$ref":"#/components/schemas/internal_handler.MarketTranslation"}]},"updatedAt":{"type":"string"},"volume":{"type":"number"}}},"internal_handler.AddressInfoResponse":{"type":"object","properties":{"address":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"}}},"internal_handler.OutcomeResponse":{"description":"Per-outcome data including price, volume, and supply.","type":"object","properties":{"holdersAtFinalisation":{"type":"integer"},"image":{"type":"string"},"index":{"type":"integer"},"marketCap":{"type":"number"},"mintedQuantity":{"type":"number"},"mintedQuantityRaw":{"description":"Raw on-chain minted supply (uint256 decimal string, no HMR scaling).\nBigInt-safe: never a float. \"0\" when the outcome has no stats yet.","type":"string"},"name":{"type":"string"},"payout":{"type":"number"},"price":{"type":"number"},"symbol":{"type":"string"},"tokenId":{"type":"string"},"translation":{"description":"Translated outcome name for the locale requested via `?locale=`, or null under the same rules as MarketResponse.Translation.","allOf":[{"$ref":"#/components/schemas/internal_handler.OutcomeTranslation"}]},"volume":{"type":"number"}}},"internal_handler.OutcomeTranslation":{"description":"Localized outcome text for the requested locale.","type":"object","properties":{"name":{"type":"string"}}},"internal_handler.ProposerResponse":{"description":"Deprecated: proposer metadata. Not translated. Will be removed in a future release.","type":"object","properties":{"image":{"type":"string"},"name":{"type":"string"}}},"internal_handler.MarketTranslation":{"description":"Localized market text for the requested locale.","type":"object","properties":{"ancillary":{"type":"array","items":{"type":"string"}},"title":{"type":"string"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get market by address

GET /api/v1/markets/{market\_address}

## Get market by address

> Returns full market details for a single market identified by its on-chain contract address, including outcomes, collateral info, status, volume, and proposer.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/markets/{market_address}","name":"get-market-by-address"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/markets/{market_address}":{"get":{"description":"Returns full market details for a single market identified by its on-chain contract address, including outcomes, collateral info, status, volume, and proposer.","tags":["get-market-by-address"],"summary":"Get market by address","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market_address","in":"path","required":true},{"schema":{"type":"string"},"description":"BCP-47 locale (e.g. zh, id) for the sibling `translation` wrapper. Source fields (`question`, outcome `name`, `ancillaryData`) stay raw; `translation:{title,ancillary[]}` and outcome `translation:{name}` are populated when a matching locale exists. Wrapper is null otherwise.","name":"locale","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.MarketResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.MarketResponse":{"description":"Full market representation.","type":"object","properties":{"address":{"type":"string"},"ancillaryData":{"description":"Ancillary metadata entries posted on-chain by the question creator, oldest-first. Each entry is a comma-separated \"key:value\" pair list with `\\,`, `\\:`, and `\\\\` as escapes. Empty array for legacy markets. Always the raw on-chain form; translated human-readable bodies surface inside `translation.ancillary` (parallel array, same indexing).","type":"array","items":{"type":"string"}},"availableLocales":{"description":"Locales with an approved translation. Lets clients build a language switcher. Empty array when none. The internal pipeline status is intentionally not exposed.","type":"array","items":{"type":"string"}},"backgroundImage":{"description":"Admin-set background image for the market's grid card (off-chain metadata only). Null when unset.","type":"string"},"categories":{"type":"array","items":{"type":"string"}},"collateralAddress":{"type":"string"},"collateralDecimals":{"type":"integer"},"collateralSymbol":{"type":"string"},"contractVersion":{"description":"On-chain contract version that produced this market (1 = legacy, 2 = v2).","type":"integer"},"createdAt":{"type":"string"},"creator":{"description":"Creator of the question, with curated `name`/`image` joined from `identified_address`. Non-null for v2 markets only.","allOf":[{"$ref":"#/components/schemas/internal_handler.AddressInfoResponse"}]},"curve":{"type":"string"},"description":{"description":"Deprecated: populated from on-chain metadata for legacy v1 markets. For v2 markets, use AncillaryData — the first entry carries the creator's metadata including a `description` key.","type":"string"},"elapsedPct":{"type":"number"},"endDate":{"type":"string"},"feeRate":{"type":"number"},"finalisedAt":{"type":"string"},"image":{"type":"string"},"isFlagged":{"description":"True when the question currently has an active creator-issued flag whose expiry (if any) is in the future.","type":"boolean"},"metadataDescription":{"description":"Admin-curated description from question_metadata (off-chain). Null when unset.","type":"string"},"oracle":{"description":"Oracle responsible for resolving the question, with curated `name`/`image` joined from `identified_address`. Non-null for v2 markets only.","allOf":[{"$ref":"#/components/schemas/internal_handler.AddressInfoResponse"}]},"outcomes":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.OutcomeResponse"}},"proposer":{"description":"Deprecated: proposer metadata. Not translated and slated for removal.","allOf":[{"$ref":"#/components/schemas/internal_handler.ProposerResponse"}]},"question":{"type":"string"},"questionId":{"type":"string"},"resolutionTime":{"type":"string"},"resolvedAnswer":{"type":"string"},"slug":{"type":"string"},"sourceLocale":{"description":"Source locale of the on-chain `question`/`ancillaryData` fields (defaults to \"en\").","type":"string"},"startDate":{"type":"string"},"status":{"type":"string"},"subcategories":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"topics":{"type":"array","items":{"type":"string"}},"totalMarketCap":{"type":"number"},"traders":{"type":"integer"},"translation":{"description":"Translated display text for the locale requested via `?locale=`, or null when no `?locale=` was given, it equals `sourceLocale`, or the locale is not available. `ancillary` is index-aligned to `ancillaryData`.","allOf":[{"$ref":"#/components/schemas/internal_handler.MarketTranslation"}]},"updatedAt":{"type":"string"},"volume":{"type":"number"}}},"internal_handler.AddressInfoResponse":{"type":"object","properties":{"address":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"}}},"internal_handler.OutcomeResponse":{"description":"Per-outcome data including price, volume, and supply.","type":"object","properties":{"holdersAtFinalisation":{"type":"integer"},"image":{"type":"string"},"index":{"type":"integer"},"marketCap":{"type":"number"},"mintedQuantity":{"type":"number"},"mintedQuantityRaw":{"description":"Raw on-chain minted supply (uint256 decimal string, no HMR scaling).\nBigInt-safe: never a float. \"0\" when the outcome has no stats yet.","type":"string"},"name":{"type":"string"},"payout":{"type":"number"},"price":{"type":"number"},"symbol":{"type":"string"},"tokenId":{"type":"string"},"translation":{"description":"Translated outcome name for the locale requested via `?locale=`, or null under the same rules as MarketResponse.Translation.","allOf":[{"$ref":"#/components/schemas/internal_handler.OutcomeTranslation"}]},"volume":{"type":"number"}}},"internal_handler.OutcomeTranslation":{"description":"Localized outcome text for the requested locale.","type":"object","properties":{"name":{"type":"string"}}},"internal_handler.ProposerResponse":{"description":"Deprecated: proposer metadata. Not translated. Will be removed in a future release.","type":"object","properties":{"image":{"type":"string"},"name":{"type":"string"}}},"internal_handler.MarketTranslation":{"description":"Localized market text for the requested locale.","type":"object","properties":{"ancillary":{"type":"array","items":{"type":"string"}},"title":{"type":"string"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get market timeline

GET /api/v1/markets/{market\_address}/timeline

## Get market timeline

> Returns the full lifecycle event history for the question backing this market — including when it was launched, extended, resolved, and finalised — with timestamps and winning outcomes for each event, plus the expected \`resolutionTime\` from question metadata. Pass \`locale\` to receive translated winning-outcome names where available.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/markets/{market_address}/timeline","name":"get-market-timeline"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/markets/{market_address}/timeline":{"get":{"description":"Returns the full lifecycle event history for the question backing this market — including when it was launched, extended, resolved, and finalised — with timestamps and winning outcomes for each event, plus the expected `resolutionTime` from question metadata. Pass `locale` to receive translated winning-outcome names where available.","tags":["get-market-timeline"],"summary":"Get market timeline","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market_address","in":"path","required":true},{"schema":{"type":"string"},"description":"BCP-47 locale (e.g. zh, id). Winning-outcome `name` fields use the translated outcome name when a matching locale exists; source names otherwise.","name":"locale","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.TimelineResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.TimelineResponse":{"type":"object","properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.TimelineEvent"}},"resolutionTime":{"description":"Expected resolution time from question_metadata (RFC3339). Null when unset.","type":"string"}}},"internal_handler.TimelineEvent":{"description":"A timeline entry. `type` is one of `launched`, `extended`, `shortened`, `flagged`, `unflagged`, `resolved`, `unresolve`, `finalised`. `newEndTimestamp` is set on extended/shortened; `flagExpiry` is set on flagged when the on-chain event supplied an expiry; `answer`/`winningOutcomes` are set on resolved and finalised.","type":"object","properties":{"answer":{"type":"integer"},"flagExpiry":{"type":"integer"},"newEndTimestamp":{"type":"integer"},"timestamp":{"type":"integer"},"type":{"type":"string"},"winningOutcomes":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.WinningOutcomeItem"}}}},"internal_handler.WinningOutcomeItem":{"type":"object","properties":{"name":{"type":"string"},"symbol":{"type":"string"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get all categories

GET /api/v1/markets/categories

## Get all categories

> Returns a paginated list of all market categories, each including a count of subcategories and topics nested within it. Pass \`?locale=\` to receive translated display names in \`name\`; falls back to source when a translation is unavailable.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/markets/categories","name":"get-all-categories"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/markets/categories":{"get":{"description":"Returns a paginated list of all market categories, each including a count of subcategories and topics nested within it. Pass `?locale=` to receive translated display names in `name`; falls back to source when a translation is unavailable.","tags":["get-all-categories"],"summary":"Get all categories","parameters":[{"schema":{"type":"integer","default":100},"description":"Page size","name":"limit","in":"query"},{"schema":{"type":"integer","default":0},"description":"Page offset","name":"offset","in":"query"},{"schema":{"type":"string"},"description":"BCP-47 locale for translated names (e.g. zh, es)","name":"locale","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_CategoryListItem"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_CategoryListItem":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.CategoryListItem"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.CategoryListItem":{"type":"object","properties":{"id":{"type":"integer"},"image":{"type":"string"},"liveMarketCount":{"description":"Distinct, non-blacklisted markets currently live in this category.","type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"subcategoryCount":{"type":"integer"},"topicCount":{"type":"integer"},"translation":{"description":"Translated name for the locale requested via `?locale=`, or null when no `?locale=` was given or the locale is unavailable.","allOf":[{"$ref":"#/components/schemas/internal_handler.NameTranslation"}]}}},"internal_handler.NameTranslation":{"description":"Localized taxonomy name for the requested locale.","type":"object","properties":{"name":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get category by slug

GET /api/v1/markets/categories/{slug}

## Get category by slug

> Returns a single category by its URL slug, including all nested subcategories and the topics within each subcategory. Slugs are always derived from the source name and are locale-independent. Pass \`?locale=\` to receive translated \`name\` values; falls back to source when a translation is unavailable.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/markets/categories/{slug}","name":"get-category-by-slug"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/markets/categories/{slug}":{"get":{"description":"Returns a single category by its URL slug, including all nested subcategories and the topics within each subcategory. Slugs are always derived from the source name and are locale-independent. Pass `?locale=` to receive translated `name` values; falls back to source when a translation is unavailable.","tags":["get-category-by-slug"],"summary":"Get category by slug","parameters":[{"schema":{"type":"string"},"description":"Category slug","name":"slug","in":"path","required":true},{"schema":{"type":"string"},"description":"BCP-47 locale for translated names (e.g. zh, es)","name":"locale","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.CategoryDetailResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.CategoryDetailResponse":{"type":"object","properties":{"id":{"type":"integer"},"image":{"type":"string"},"liveMarketCount":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"subcategories":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.SubcategoryNested"}},"translation":{"description":"Translated name for the locale requested via `?locale=`, or null when no `?locale=` was given or the locale is unavailable.","allOf":[{"$ref":"#/components/schemas/internal_handler.NameTranslation"}]}}},"internal_handler.SubcategoryNested":{"type":"object","properties":{"image":{"type":"string"},"liveMarketCount":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.TopicNested"}},"translation":{"description":"Translated name for the locale requested via `?locale=`, or null when no `?locale=` was given or the locale is unavailable.","allOf":[{"$ref":"#/components/schemas/internal_handler.NameTranslation"}]}}},"internal_handler.TopicNested":{"type":"object","properties":{"image":{"type":"string"},"liveMarketCount":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"translation":{"description":"Translated name for the locale requested via `?locale=`, or null when no `?locale=` was given or the locale is unavailable.","allOf":[{"$ref":"#/components/schemas/internal_handler.NameTranslation"}]}}},"internal_handler.NameTranslation":{"description":"Localized taxonomy name for the requested locale.","type":"object","properties":{"name":{"type":"string"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get all outcome tokens

GET /api/v1/markets/tokens

## Get all outcome tokens

> Returns a paginated list of all tradeable outcome tokens across markets. Filter by market address, token ID, or outcome index. Supports sorting by price, market cap, or token ID.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/markets/tokens","name":"get-all-outcome-tokens"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/markets/tokens":{"get":{"description":"Returns a paginated list of all tradeable outcome tokens across markets. Filter by market address, token ID, or outcome index. Supports sorting by price, market cap, or token ID.","tags":["get-all-outcome-tokens"],"summary":"Get all outcome tokens","parameters":[{"schema":{"type":"string"},"description":"Filter by market address","name":"market_address","in":"query"},{"schema":{"type":"string"},"description":"Filter by token ID","name":"token_id","in":"query"},{"schema":{"type":"integer"},"description":"Filter by outcome index (0-based)","name":"outcome_index","in":"query"},{"schema":{"type":"integer"},"description":"Results per page (default 50, max 500)","name":"limit","in":"query"},{"schema":{"type":"integer"},"description":"Pagination offset (default 0)","name":"offset","in":"query"},{"schema":{"type":"string"},"description":"Sort field: price, market_cap, token_id, outcome_index","name":"order","in":"query"},{"schema":{"type":"boolean"},"description":"Sort ascending (default false = descending)","name":"ascending","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_TokenResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_TokenResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.TokenResponse"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.TokenResponse":{"type":"object","properties":{"market":{"$ref":"#/components/schemas/internal_handler.TokenMarketResponse"},"marketCap":{"type":"string"},"outcomeIndex":{"type":"integer"},"outcomeName":{"type":"string"},"price":{"type":"string"},"tokenId":{"type":"string"}}},"internal_handler.TokenMarketResponse":{"type":"object","properties":{"marketAddress":{"type":"string"},"question":{"$ref":"#/components/schemas/internal_handler.TokenQuestionResponse"},"slug":{"type":"string"}}},"internal_handler.TokenQuestionResponse":{"type":"object","properties":{"questionId":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get current outcome token prices

GET /api/v1/market-data/prices

## Get current outcome token prices

> Returns current price data for one or more outcome tokens in a market. Supports single lookup (token ID or Outcome Index), batch lookup (token IDs or Outcome Indices, max 50), or all outcomes for a market when no token param is given. Use \`projection=midpoint\` for a lightweight midpoint-only response.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/prices","name":"get-current-prices"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/prices":{"get":{"description":"Returns current price data for one or more outcome tokens in a market. Supports single lookup (token ID or Outcome Index), batch lookup (token IDs or Outcome Indices, max 50), or all outcomes for a market when no token param is given. Use `projection=midpoint` for a lightweight midpoint-only response.","tags":["get-current-prices"],"summary":"Get current outcome token prices","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market","in":"query","required":true},{"schema":{"type":"string"},"description":"Single outcome token ID (mutually exclusive with outcome_index and batch params)","name":"token_id","in":"query"},{"schema":{"type":"integer"},"description":"Single outcome index 0-based (mutually exclusive with token_id and batch params)","name":"outcome_index","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated outcome token IDs for batch lookup (max 50)","name":"token_ids","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated outcome indices 0-based for batch lookup (max 50)","name":"outcome_indices","in":"query"},{"schema":{"type":"string"},"description":"Response shape: full (default) or midpoint","name":"projection","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.PriceResponse"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.PriceResponse":{"type":"object","properties":{"market":{"type":"string"},"mintedQuantity":{"type":"number"},"outcome":{"type":"string"},"outcomeCap":{"type":"number"},"price":{"type":"number"},"tokenId":{"type":"string"},"totalMarketCap":{"type":"number"},"updatedAt":{"type":"string"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get price history

GET /api/v1/market-data/prices/history

## Get price history

> Returns a historical price series for a single outcome token — the last traded price, step-held between trades (built from the outcome's on-chain trades). Every mode includes the market seed's carried-forward bootstrap price before the outcome's first genuine trade, so young markets chart a line from market open. Two modes:\
> \*\*Duration mode\*\* (default): control the lookback with \`duration\` (bucket size is chosen for you); \`start\_ts\` filters results after fetch.\
> \*\*Range mode\*\* (pass \`interval\`): step-fills buckets at the given interval over the explicit \`\[start\_ts, end\_ts]\` window for zoomable line charts. The first point is anchored from the last trade (or seed) before \`start\_ts\` (so adjacent windows connect) or, if the market did not exist yet, the series begins at the seed. A window that would exceed \~10k buckets is rejected unless \`changes\_only=true\`.\
> \*\*changes\_only auto mode\*\* (\`changes\_only=true\`): returns the real price change points for the window (\`start\_ts\`/\`end\_ts\`, or \`end\_ts\`−\`duration\` if no \`start\_ts\`); \`interval\` is ignored. Resolution scales with trade density — sparse outcomes return exact change points, very active outcomes read the close price from a pre-aggregated bucket so the chart stays cheap and renderable. Capped at \`fidelity\` else \~1000 points.\
> Use \`fidelity\` in either mode to cap the number of points (downsampled if exceeded).

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/prices/history","name":"get-price-history"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/prices/history":{"get":{"description":"Returns a historical price series for a single outcome token — the last traded price, step-held between trades (built from the outcome's on-chain trades). Every mode includes the market seed's carried-forward bootstrap price before the outcome's first genuine trade, so young markets chart a line from market open. Two modes:\n**Duration mode** (default): control the lookback with `duration` (bucket size is chosen for you); `start_ts` filters results after fetch.\n**Range mode** (pass `interval`): step-fills buckets at the given interval over the explicit `[start_ts, end_ts]` window for zoomable line charts. The first point is anchored from the last trade (or seed) before `start_ts` (so adjacent windows connect) or, if the market did not exist yet, the series begins at the seed. A window that would exceed ~10k buckets is rejected unless `changes_only=true`.\n**changes_only auto mode** (`changes_only=true`): returns the real price change points for the window (`start_ts`/`end_ts`, or `end_ts`−`duration` if no `start_ts`); `interval` is ignored. Resolution scales with trade density — sparse outcomes return exact change points, very active outcomes read the close price from a pre-aggregated bucket so the chart stays cheap and renderable. Capped at `fidelity` else ~1000 points.\nUse `fidelity` in either mode to cap the number of points (downsampled if exceeded).","tags":["get-price-history"],"summary":"Get price history","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market","in":"query","required":true},{"schema":{"type":"string"},"description":"Outcome token ID (provide token_id or outcome_index, not both)","name":"token_id","in":"query"},{"schema":{"type":"integer"},"description":"Outcome index, 0-based (provide token_id or outcome_index, not both)","name":"outcome_index","in":"query"},{"schema":{"type":"string","enum":["1s","10s","1m","3m","30m","2h","6h","12h","1d"]},"description":"Bucket interval (range mode, changes_only=false). IGNORED when changes_only=true — that mode auto-picks resolution by trade density.","name":"interval","in":"query"},{"schema":{"type":"string","enum":["1h","4h","24h","7d","30d","90d","180d","1y","all"]},"description":"Lookback duration (duration mode, default 24h)","name":"duration","in":"query"},{"schema":{"type":"integer"},"description":"End unix timestamp (default: now)","name":"end_ts","in":"query"},{"schema":{"type":"integer"},"description":"Range mode: window start (required). Duration mode: filters results after fetch.","name":"start_ts","in":"query"},{"schema":{"type":"integer"},"description":"Max data points returned — downsamples if the window contains more","name":"fidelity","in":"query"},{"schema":{"type":"boolean"},"description":"Return only step edges — drop flat gap-filled buckets where price/payout/collateral/minted_quantity are unchanged (default false; for step-rendered charts)","name":"changes_only","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.PriceHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.PriceHistoryResponse":{"description":"Historical price series.","type":"object","properties":{"history":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.PriceHistoryPoint"}},"outcomeName":{"type":"string"}}},"internal_handler.PriceHistoryPoint":{"description":"One point on the price line. `p` is the last traded price at/at-or-before","type":"object","properties":{"collateral":{"type":"number"},"mintedQuantity":{"type":"number"},"p":{"type":"number"},"payout":{"type":"number"},"t":{"type":"integer"},"v":{"type":"number"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get per-event price history

GET /api/v1/market-data/prices/event-history

## Get per-event price history

> Returns one row per onchain event that touched the outcome (mint/redeem/etc), from the outcome\_stats hypertable. Unlike /prices/history this is NOT bucketed or gap-filled — each point reflects the marginal price and collateral immediately after a specific event, so the chart can plot per-trade resolution for short windows. Use \`start\_ts\`/\`end\_ts\` to bound the window (required for \`start\_ts\` since the hypertable can be large); use \`fidelity\` to downsample if the window contains more events than you want to render. Events before the outcome's first real trade are omitted — the market "seed" mint carries a distorted bootstrap price (not a real traded price), and that price is carried forward until the outcome is first traded, so the series opens on a genuine price.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/prices/event-history","name":"get-event-price-history"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/prices/event-history":{"get":{"description":"Returns one row per onchain event that touched the outcome (mint/redeem/etc), from the outcome_stats hypertable. Unlike /prices/history this is NOT bucketed or gap-filled — each point reflects the marginal price and collateral immediately after a specific event, so the chart can plot per-trade resolution for short windows. Use `start_ts`/`end_ts` to bound the window (required for `start_ts` since the hypertable can be large); use `fidelity` to downsample if the window contains more events than you want to render. Events before the outcome's first real trade are omitted — the market \"seed\" mint carries a distorted bootstrap price (not a real traded price), and that price is carried forward until the outcome is first traded, so the series opens on a genuine price.","tags":["get-event-price-history"],"summary":"Get per-event price history","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market","in":"query","required":true},{"schema":{"type":"string"},"description":"Outcome token ID (provide token_id or outcome_index, not both)","name":"token_id","in":"query"},{"schema":{"type":"integer"},"description":"Outcome index, 0-based (provide token_id or outcome_index, not both)","name":"outcome_index","in":"query"},{"schema":{"type":"integer"},"description":"Start unix timestamp","name":"start_ts","in":"query","required":true},{"schema":{"type":"integer"},"description":"End unix timestamp (default: now)","name":"end_ts","in":"query"},{"schema":{"type":"integer"},"description":"Max data points returned — downsamples if the window contains more","name":"fidelity","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.EventPriceHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.EventPriceHistoryResponse":{"type":"object","properties":{"history":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.EventPricePoint"}},"outcomeName":{"type":"string"}}},"internal_handler.EventPricePoint":{"type":"object","properties":{"collateral":{"type":"number"},"mintedQuantity":{"type":"number"},"p":{"type":"number"},"payout":{"type":"number"},"t":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get OHLC candlestick data

GET /api/v1/market-data/ohlc

## Get OHLC candlestick data

> Returns OHLC (open/high/low/close) candlestick data for a specific outcome token over a given time range and bucket interval. Provide token ID or outcome index (not both). Payout fields are included for resolved markets.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/ohlc","name":"get-ohlc"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/ohlc":{"get":{"description":"Returns OHLC (open/high/low/close) candlestick data for a specific outcome token over a given time range and bucket interval. Provide token ID or outcome index (not both). Payout fields are included for resolved markets.","tags":["get-ohlc"],"summary":"Get OHLC candlestick data","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market","in":"query","required":true},{"schema":{"type":"string"},"description":"Outcome token ID (provide token_id or outcome_index, not both)","name":"token_id","in":"query"},{"schema":{"type":"integer"},"description":"Outcome index, 0-based (provide token_id or outcome_index, not both)","name":"outcome_index","in":"query"},{"schema":{"type":"string","enum":["1s","10s","1m","3m","30m","2h","6h","12h","1d"]},"description":"Candle bucket interval","name":"interval","in":"query","required":true},{"schema":{"type":"integer"},"description":"Start unix timestamp (default: 24h before end_ts)","name":"start_ts","in":"query"},{"schema":{"type":"integer"},"description":"End unix timestamp (default: now)","name":"end_ts","in":"query"},{"schema":{"type":"integer"},"description":"Max data points returned (default 500, max 5000)","name":"limit","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.OHLCResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.OHLCResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.OHLCDataPoint"}}}},"internal_handler.OHLCDataPoint":{"type":"object","properties":{"c":{"type":"number"},"closeCollateral":{"type":"number"},"closeMintedQuantity":{"type":"number"},"h":{"type":"number"},"l":{"type":"number"},"o":{"type":"number"},"openCollateral":{"type":"number"},"openMintedQuantity":{"type":"number"},"payoutClose":{"type":"number"},"payoutHigh":{"type":"number"},"payoutLow":{"type":"number"},"payoutMid":{"type":"number"},"payoutOpen":{"type":"number"},"t":{"type":"integer"},"v":{"type":"number"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get batch market stats

GET /api/v1/market-data/stats

## Get batch market stats

> Returns lightweight polling stats (market cap, total volume, trader count, and per-outcome prices) for up to 50 markets at once.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/stats","name":"get-batch-market-stats"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/stats":{"get":{"description":"Returns lightweight polling stats (market cap, total volume, trader count, and per-outcome prices) for up to 50 markets at once.","tags":["get-batch-market-stats"],"summary":"Get batch market stats","parameters":[{"schema":{"type":"string"},"description":"Comma-separated market addresses (max 50) — required","name":"market","in":"query","required":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.MarketStatsResponse"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.MarketStatsResponse":{"description":"Lightweight market stats for polling.","type":"object","properties":{"market":{"type":"string"},"marketCap":{"type":"number"},"outcomeStats":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.OutcomeStatsCompact"}},"totalVolume":{"type":"number"},"traders":{"type":"integer"},"updatedAt":{"type":"string"}}},"internal_handler.OutcomeStatsCompact":{"description":"Compact outcome stats for polling.","type":"object","properties":{"collateralChange24h":{"type":"number"},"marketCap":{"type":"number"},"mintedQuantity":{"description":"Human-readable minted outcome-token supply; outcome mcap = price × mintedQuantity.","type":"number"},"name":{"type":"string"},"payout":{"type":"number"},"price":{"type":"number"},"priceChange24h":{"type":"number"},"tokenId":{"type":"string"},"volumeChange24h":{"type":"number"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get outcome token stats

GET /api/v1/market-data/tokens/stats

## Get outcome token stats

> Returns outcome-level stats including time-bucketed price, volume, and collateral deltas (30m, 1h, 4h, 24h). Supports filtering by category, status, question IDs, or specific market addresses.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/tokens/stats","name":"get-outcome-token-stats"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/tokens/stats":{"get":{"description":"Returns outcome-level stats including time-bucketed price, volume, and collateral deltas (30m, 1h, 4h, 24h). Supports filtering by category, status, question IDs, or specific market addresses.","tags":["get-outcome-token-stats"],"summary":"Get outcome token stats","parameters":[{"schema":{"type":"integer"},"description":"Page size (default 100, max 500)","name":"limit","in":"query"},{"schema":{"type":"integer"},"description":"Offset (default 0)","name":"offset","in":"query"},{"schema":{"type":"string","default":"volume"},"description":"Sort field: volume, buy_volume, payout, price, collateral, traders, start_timestamp, end_timestamp, or any of price/volume/collateral_change_30m|1h|4h|24h","name":"order_by","in":"query"},{"schema":{"type":"boolean"},"description":"Sort ascending (default false = descending)","name":"ascending","in":"query"},{"schema":{"type":"string"},"description":"Filter by category name","name":"category","in":"query"},{"schema":{"type":"integer"},"description":"Filter by category ID","name":"category_id","in":"query"},{"schema":{"type":"string"},"description":"Filter by status: not_started, live, ended, resolved, finalised, all","name":"status","in":"query"},{"schema":{"type":"string"},"description":"Filter by question_id(s), comma-separated","name":"question_id","in":"query"},{"schema":{"type":"string"},"description":"Filter by market address(es), comma-separated","name":"market_address","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_TokenStatsEntry"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_TokenStatsEntry":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.TokenStatsEntry"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.TokenStatsEntry":{"type":"object","properties":{"buyVolume":{"type":"number"},"collateral":{"type":"number"},"market":{"$ref":"#/components/schemas/internal_handler.TokenStatsMarket"},"marketAddress":{"type":"string"},"mintedQuantity":{"description":"Human-readable minted outcome-token supply; outcome mcap = price × mintedQuantity.","type":"number"},"outcome":{"$ref":"#/components/schemas/internal_handler.TokenStatsOutcome"},"payout":{"type":"number"},"price":{"type":"number"},"question":{"$ref":"#/components/schemas/internal_handler.TokenStatsQuestion"},"questionId":{"type":"string"},"sellVolume":{"type":"number"},"statsChanges":{"$ref":"#/components/schemas/internal_handler.StatsChanges"},"tokenId":{"type":"string"},"totalVolume":{"type":"number"},"traders":{"type":"integer"}}},"internal_handler.TokenStatsMarket":{"type":"object","properties":{"collateralDecimals":{"type":"integer"},"startTimestamp":{"description":"Market trading start (RFC3339). Null when unset.","type":"string"}}},"internal_handler.TokenStatsOutcome":{"type":"object","properties":{"image":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"translations":{"description":"Raw outcome_metadata.translations map, shape {locale: {name}}. Null when\nthe outcome has no translations.","type":"object","additionalProperties":{"$ref":"#/components/schemas/internal_handler.OutcomeTranslation"}}}},"internal_handler.OutcomeTranslation":{"description":"Localized outcome text for the requested locale.","type":"object","properties":{"name":{"type":"string"}}},"internal_handler.TokenStatsQuestion":{"type":"object","properties":{"categories":{"description":"Taxonomy names attached to the question (question_category / question_subcategory).","type":"array","items":{"type":"string"}},"categoryId":{"type":"integer"},"description":{"type":"string"},"earlyResolutionEligible":{"description":"True when the question is flagged eligible for early resolution.","type":"boolean"},"endDate":{"type":"string"},"image":{"type":"string"},"metadataImage":{"description":"Admin-curated image from question_metadata (may differ from the on-chain image).","type":"string"},"subcategories":{"type":"array","items":{"type":"string"}},"title":{"type":"string"},"translations":{"description":"Raw question_metadata.translations map, shape {locale: {title, ancillary}}.\nNull when the question has no translations.","type":"object","additionalProperties":{"$ref":"#/components/schemas/internal_handler.MarketTranslation"}}}},"internal_handler.MarketTranslation":{"description":"Localized market text for the requested locale.","type":"object","properties":{"ancillary":{"type":"array","items":{"type":"string"}},"title":{"type":"string"}}},"internal_handler.StatsChanges":{"type":"object","properties":{"collateralChange1h":{"type":"number"},"collateralChange24h":{"type":"number"},"collateralChange30m":{"type":"number"},"collateralChange4h":{"type":"number"},"priceChange1h":{"type":"number"},"priceChange24h":{"type":"number"},"priceChange30m":{"type":"number"},"priceChange4h":{"type":"number"},"volumeChange1h":{"type":"number"},"volumeChange24h":{"type":"number"},"volumeChange30m":{"type":"number"},"volumeChange4h":{"type":"number"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get outcome token holders

GET /api/v1/market-data/holders

## Get outcome token holders

> Returns a paginated list of all token holders for one or more outcomes of a given market, excluding the treasury address. For finalised markets, this also includes positions held at the time of resolution. \`market\` plus exactly one of \`token\_id\` / \`token\_ids\` are required.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/holders","name":"get-outcome-token-holders"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/holders":{"get":{"description":"Returns a paginated list of all token holders for one or more outcomes of a given market, excluding the treasury address. For finalised markets, this also includes positions held at the time of resolution. `market` plus exactly one of `token_id` / `token_ids` are required.","tags":["get-outcome-token-holders"],"summary":"Get outcome token holders","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market","in":"query","required":true},{"schema":{"type":"string"},"description":"Outcome token ID (mutually exclusive with token_ids)","name":"token_id","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated outcome token IDs (max 50, mutually exclusive with token_id)","name":"token_ids","in":"query"},{"schema":{"type":"string"},"description":"Sort field: quantity (default), realized_pnl, unrealized_pnl","name":"order","in":"query"},{"schema":{"type":"boolean"},"description":"Sort direction (default false = descending)","name":"ascending","in":"query"},{"schema":{"type":"integer"},"description":"Page size (default 20, max 100)","name":"limit","in":"query"},{"schema":{"type":"integer"},"description":"Pagination offset","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_HolderEntry"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_HolderEntry":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.HolderEntry"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.HolderEntry":{"type":"object","properties":{"amount":{"type":"number"},"avgPrice":{"type":"number"},"costBasis":{"type":"number"},"currentPrice":{"type":"number"},"heldQuantity":{"type":"number"},"mintedQuantity":{"type":"number"},"outcomeName":{"type":"string"},"outcomeSymbol":{"type":"string"},"outcomeTranslations":{"description":"Raw outcome_metadata.translations map, shape {locale: {name}}. Null when\nthe outcome has no translations.","type":"object","additionalProperties":{"$ref":"#/components/schemas/internal_handler.OutcomeTranslation"}},"payout":{"type":"number"},"realizedPnl":{"type":"number"},"tokenId":{"type":"string"},"unrealizedPnl":{"type":"number"},"userAddress":{"type":"string"}}},"internal_handler.OutcomeTranslation":{"description":"Localized outcome text for the requested locale.","type":"object","properties":{"name":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```

## Get per-outcome holder summary

> Returns, for every outcome of a market, the number of unique holders and total cost basis over live positions (treasury excluded), ordered by outcome index. Unknown markets yield an empty array.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/holders","name":"get-outcome-token-holders"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/holders/summary":{"get":{"description":"Returns, for every outcome of a market, the number of unique holders and total cost basis over live positions (treasury excluded), ordered by outcome index. Unknown markets yield an empty array.","tags":["get-outcome-token-holders"],"summary":"Get per-outcome holder summary","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market","in":"query","required":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.HolderSummaryEntry"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.HolderSummaryEntry":{"type":"object","properties":{"outcomeName":{"type":"string"},"outcomeSymbol":{"type":"string"},"tokenId":{"type":"string"},"totalCostBasis":{"type":"number"},"uniqueHolders":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```

## Get per-outcome trader counts

> Returns, for every outcome of a market, the number of distinct traders (users with at least one mint or redeem in the ledger, treasury excluded), ordered by outcome index. Optionally restricted to specific token IDs. Unknown markets yield an empty array.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/holders","name":"get-outcome-token-holders"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/traders":{"get":{"description":"Returns, for every outcome of a market, the number of distinct traders (users with at least one mint or redeem in the ledger, treasury excluded), ordered by outcome index. Optionally restricted to specific token IDs. Unknown markets yield an empty array.","tags":["get-outcome-token-holders"],"summary":"Get per-outcome trader counts","parameters":[{"schema":{"type":"string"},"description":"Market contract address","name":"market","in":"query","required":true},{"schema":{"type":"string"},"description":"Comma-separated outcome token IDs (max 50)","name":"token_ids","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.TraderCountEntry"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.TraderCountEntry":{"type":"object","properties":{"tokenId":{"type":"string"},"traders":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Users

Wallet activity and positions


# Get user activity feed

GET /api/v1/market-data/activity

## Get user activity feed

> Returns a paginated feed of trading activity events (MINT, REDEEM, FINALISE, CLAIM) for a given wallet, market, or transaction. Optionally filter by market, question, outcome token, activity type, transaction hash, ledger cursor, or time range.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/activity","name":"get-user-activity"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/activity":{"get":{"description":"Returns a paginated feed of trading activity events (MINT, REDEEM, FINALISE, CLAIM) for a given wallet, market, or transaction. Optionally filter by market, question, outcome token, activity type, transaction hash, ledger cursor, or time range.","tags":["get-user-activity"],"summary":"Get user activity feed","parameters":[{"schema":{"type":"string"},"description":"Wallet address","name":"user","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated market addresses to filter by","name":"market","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated question IDs to filter by","name":"question_id","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated outcome token IDs to filter by (max 50)","name":"token_id","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated activity type filter: MINT, REDEEM, FINALISE, CLAIM","name":"type","in":"query"},{"schema":{"type":"string"},"description":"Transaction hash (0x + 64 hex chars) to filter by","name":"transaction_hash","in":"query"},{"schema":{"type":"integer"},"description":"Only events with ledgerId greater than this cursor","name":"after_id","in":"query"},{"schema":{"type":"string"},"description":"Sort field: date (default), amount, pnl","name":"order","in":"query"},{"schema":{"type":"boolean"},"description":"Sort ascending (default false = descending)","name":"ascending","in":"query"},{"schema":{"type":"integer"},"description":"Start unix timestamp","name":"start","in":"query"},{"schema":{"type":"integer"},"description":"End unix timestamp","name":"end","in":"query"},{"schema":{"type":"integer"},"description":"Limit (default 100, max 500)","name":"limit","in":"query"},{"schema":{"type":"integer"},"description":"Offset (default 0, max 10000)","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_ActivityResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_ActivityResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.ActivityResponse"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.ActivityResponse":{"type":"object","properties":{"avgPrice":{"type":"number"},"collateral":{"type":"number"},"costBasis":{"type":"number"},"currentQuantity":{"type":"number"},"deltaCollateral":{"type":"number"},"deltaQuantity":{"type":"number"},"eventId":{"type":"string"},"ledgerId":{"description":"LedgerID is the ledger row id, usable as an ?after_id= cursor.","type":"string"},"marginalPriceAtTime":{"type":"number"},"marketAddress":{"type":"string"},"marketCapAtTime":{"type":"number"},"mintedQuantityAtTime":{"type":"number"},"outcome":{"type":"string"},"outcomeImage":{"type":"string"},"outcomeIndex":{"type":"integer"},"outcomeSymbol":{"type":"string"},"payoutAtTime":{"type":"number"},"price":{"type":"number"},"questionId":{"type":"string"},"questionImage":{"type":"string"},"realizedPnlDelta":{"type":"number"},"size":{"description":"Size and Collateral are absolute values (legacy contract); the signed\noriginals are DeltaQuantity / DeltaCollateral.","type":"number"},"timestamp":{"type":"integer"},"title":{"type":"string"},"tokenId":{"type":"string"},"tradePrice":{"type":"number"},"transactionHash":{"type":"string"},"type":{"type":"string"},"userAddress":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get open positions

GET /api/v1/market-data/positions

## Get open positions

> Returns a paginated list of currently open outcome token positions for a wallet (current\_quantity > 0 AND is\_claimed = FALSE). Includes unrealised PnL, cost basis, current value, held quantity, last block timestamp, early-resolution eligibility, market lifecycle status (same values as /market-data/status), and outcome details. Optionally filter by market or question ID.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/positions","name":"get-open-positions"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/positions":{"get":{"description":"Returns a paginated list of currently open outcome token positions for a wallet (current_quantity > 0 AND is_claimed = FALSE). Includes unrealised PnL, cost basis, current value, held quantity, last block timestamp, early-resolution eligibility, market lifecycle status (same values as /market-data/status), and outcome details. Optionally filter by market or question ID.","tags":["get-open-positions"],"summary":"Get open positions","parameters":[{"schema":{"type":"string"},"description":"Wallet address","name":"user","in":"query","required":true},{"schema":{"type":"string"},"description":"Comma-separated market addresses to filter by","name":"market","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated question IDs to filter by","name":"question_id","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated question tags to exclude (case-insensitive; max 20)","name":"exclude_tags","in":"query"},{"schema":{"type":"string"},"description":"Sort field: size (default), last_traded, updated_at","name":"order","in":"query"},{"schema":{"type":"boolean"},"description":"Sort ascending (default false = descending)","name":"ascending","in":"query"},{"schema":{"type":"integer"},"description":"Limit (default 100, max 1000)","name":"limit","in":"query"},{"schema":{"type":"integer"},"description":"Offset (default 0, max 10000)","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_PositionResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_PositionResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.PositionResponse"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.PositionResponse":{"type":"object","properties":{"avgPrice":{"type":"number"},"cashPnl":{"type":"number"},"costBasis":{"type":"number"},"curPrice":{"type":"number"},"currentValue":{"description":"CurrentValue is the current market value of the position: size × current price.","type":"number"},"dispute":{"$ref":"#/components/schemas/internal_handler.PositionDispute"},"heldQuantity":{"type":"number"},"isClaimed":{"type":"boolean"},"isFinalized":{"type":"boolean"},"isWinner":{"type":"boolean"},"lastBlockTimestamp":{"type":"integer"},"market":{"$ref":"#/components/schemas/internal_handler.PositionMarket"},"marketAddress":{"type":"string"},"outcome":{"$ref":"#/components/schemas/internal_handler.PositionOutcome"},"percentPnl":{"type":"number"},"question":{"$ref":"#/components/schemas/internal_handler.PositionQuestion"},"questionId":{"type":"string"},"realizedPnl":{"type":"number"},"size":{"type":"number"},"tokenId":{"type":"string"},"userAddress":{"type":"string"}}},"internal_handler.PositionDispute":{"type":"object","properties":{"deadlineAt":{"type":"string"},"isWindowOpen":{"type":"boolean"},"latestResolveId":{"type":"integer"},"resolvedAt":{"type":"string"},"viewerDisputeId":{"type":"integer"},"windowHours":{"type":"integer"}}},"internal_handler.PositionMarket":{"type":"object","properties":{"collateralDecimals":{"type":"integer"},"startDate":{"type":"string"},"status":{"description":"Status is the market lifecycle status: not_started, live, pending_resolution,\nresolved, finalised, disabled, unknown. Same values as GET /market-data/status.\nPopulated on /positions only; omitted on /closed-positions.","type":"string"}}},"internal_handler.PositionOutcome":{"type":"object","properties":{"image":{"type":"string"},"index":{"type":"integer"},"mintedQuantity":{"type":"number"},"name":{"type":"string"},"payout":{"type":"number"},"symbol":{"type":"string"}}},"internal_handler.PositionQuestion":{"type":"object","properties":{"description":{"type":"string"},"endDate":{"type":"string"},"image":{"type":"string"},"isEarlyResolutionEligible":{"type":"boolean"},"questionId":{"type":"string"},"resolvedAnswer":{"type":"string"},"title":{"type":"string"},"winningOutcomes":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get closed positions

GET /api/v1/market-data/closed-positions

## Get closed positions

> Returns a paginated list of historically closed outcome token positions for a wallet. Includes realised PnL, whether the position was a winner, claim/finalisation status, and early-resolution eligibility. When claimed=false (claimable snapshot), max limit is 500; otherwise max limit is 50.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/closed-positions","name":"get-closed-positions"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/closed-positions":{"get":{"description":"Returns a paginated list of historically closed outcome token positions for a wallet. Includes realised PnL, whether the position was a winner, claim/finalisation status, and early-resolution eligibility. When claimed=false (claimable snapshot), max limit is 500; otherwise max limit is 50.","tags":["get-closed-positions"],"summary":"Get closed positions","parameters":[{"schema":{"type":"string"},"description":"Wallet address","name":"user","in":"query","required":true},{"schema":{"type":"string"},"description":"Comma-separated market addresses to filter by","name":"market","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated question IDs to filter by","name":"question_id","in":"query"},{"schema":{"type":"string"},"description":"Claim status filter. 'true' returns positions the user has already claimed. 'false' returns positions that still need claiming (finalised winning outcomes the user held to resolution but has not yet claimed). Omit to include all closed positions, including those exited by trading before finalisation.","name":"claimed","in":"query"},{"schema":{"type":"string"},"description":"Comma-separated question tags to exclude (case-insensitive; max 20)","name":"exclude_tags","in":"query"},{"schema":{"type":"string"},"description":"Sort field: realized_pnl (default), finalised_at, closed_at","name":"order","in":"query"},{"schema":{"type":"boolean"},"description":"Sort ascending (default false = descending)","name":"ascending","in":"query"},{"schema":{"type":"integer"},"description":"Limit (default 10; max 50, or max 500 when claimed=false)","name":"limit","in":"query"},{"schema":{"type":"integer"},"description":"Offset (default 0, max 100000)","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_ClosedPositionResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_ClosedPositionResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.ClosedPositionResponse"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.ClosedPositionResponse":{"type":"object","properties":{"avgPrice":{"type":"number"},"closedAt":{"type":"string"},"costBasis":{"type":"number"},"curPrice":{"type":"number"},"dispute":{"$ref":"#/components/schemas/internal_handler.PositionDispute"},"isClaimed":{"type":"boolean"},"isFinalized":{"type":"boolean"},"isWinner":{"type":"boolean"},"market":{"$ref":"#/components/schemas/internal_handler.PositionMarket"},"marketAddress":{"type":"string"},"outcome":{"$ref":"#/components/schemas/internal_handler.PositionOutcome"},"question":{"$ref":"#/components/schemas/internal_handler.PositionQuestion"},"questionId":{"type":"string"},"realizedPnl":{"type":"number"},"size":{"type":"number"},"tokenId":{"type":"string"},"userAddress":{"type":"string"}}},"internal_handler.PositionDispute":{"type":"object","properties":{"deadlineAt":{"type":"string"},"isWindowOpen":{"type":"boolean"},"latestResolveId":{"type":"integer"},"resolvedAt":{"type":"string"},"viewerDisputeId":{"type":"integer"},"windowHours":{"type":"integer"}}},"internal_handler.PositionMarket":{"type":"object","properties":{"collateralDecimals":{"type":"integer"},"startDate":{"type":"string"},"status":{"description":"Status is the market lifecycle status: not_started, live, pending_resolution,\nresolved, finalised, disabled, unknown. Same values as GET /market-data/status.\nPopulated on /positions only; omitted on /closed-positions.","type":"string"}}},"internal_handler.PositionOutcome":{"type":"object","properties":{"image":{"type":"string"},"index":{"type":"integer"},"mintedQuantity":{"type":"number"},"name":{"type":"string"},"payout":{"type":"number"},"symbol":{"type":"string"}}},"internal_handler.PositionQuestion":{"type":"object","properties":{"description":{"type":"string"},"endDate":{"type":"string"},"image":{"type":"string"},"isEarlyResolutionEligible":{"type":"boolean"},"questionId":{"type":"string"},"resolvedAnswer":{"type":"string"},"title":{"type":"string"},"winningOutcomes":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get user PnL

GET /api/v1/market-data/pnl/daily and /pnl/snapshot

## Get daily realised PnL series

> Returns a wallet's per-day realised PnL and buy/sell volume buckets, newest first. Decimal fields are JSON strings. Optionally bounded to an inclusive UTC calendar-day window.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/pnl/daily and /pnl/snapshot","name":"get-user-pnl"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/pnl/daily":{"get":{"description":"Returns a wallet's per-day realised PnL and buy/sell volume buckets, newest first. Decimal fields are JSON strings. Optionally bounded to an inclusive UTC calendar-day window.","tags":["get-user-pnl"],"summary":"Get daily realised PnL series","parameters":[{"schema":{"type":"string"},"description":"Wallet address","name":"user","in":"query","required":true},{"schema":{"type":"string"},"description":"Window start date YYYY-MM-DD UTC inclusive (requires to)","name":"from","in":"query"},{"schema":{"type":"string"},"description":"Window end date YYYY-MM-DD UTC inclusive (requires from)","name":"to","in":"query"},{"schema":{"type":"integer"},"description":"Limit (default 100, max 500)","name":"limit","in":"query"},{"schema":{"type":"integer"},"description":"Offset (default 0, max 10000)","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_DailyPnlEntry"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_DailyPnlEntry":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.DailyPnlEntry"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.DailyPnlEntry":{"type":"object","properties":{"bucket":{"description":"Bucket is the UTC day bucket start, RFC3339.","type":"string"},"buyVolume":{"type":"string"},"realizedPnl":{"type":"string"},"sellVolume":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```

## Get historical PnL snapshot

> Returns a wallet's unrealised PnL (server-side 4-state fold over positions held at the timestamp: active/resolving use marginal price, resolved winners use payout, resolved losers lose cost), cumulative realised PnL (daily buckets strictly before the timestamp), and open position count as of a unix timestamp (default now). Pass expand=positions to include the folded positions.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/pnl/daily and /pnl/snapshot","name":"get-user-pnl"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/pnl/snapshot":{"get":{"description":"Returns a wallet's unrealised PnL (server-side 4-state fold over positions held at the timestamp: active/resolving use marginal price, resolved winners use payout, resolved losers lose cost), cumulative realised PnL (daily buckets strictly before the timestamp), and open position count as of a unix timestamp (default now). Pass expand=positions to include the folded positions.","tags":["get-user-pnl"],"summary":"Get historical PnL snapshot","parameters":[{"schema":{"type":"string"},"description":"Wallet address","name":"user","in":"query","required":true},{"schema":{"type":"integer"},"description":"Snapshot unix timestamp (default now; rounded down to the minute)","name":"as_of","in":"query"},{"schema":{"type":"string"},"description":"Set to 'positions' to include the folded positions","name":"expand","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.PnlSnapshotResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.PnlSnapshotResponse":{"type":"object","properties":{"asOf":{"description":"AsOf echoes the snapshot unix timestamp the fold was computed at.","type":"integer"},"positionCount":{"type":"integer"},"positions":{"description":"Positions is only present with ?expand=positions.","type":"array","items":{"$ref":"#/components/schemas/internal_handler.PnlSnapshotPosition"}},"realizedPnl":{"type":"number"},"unrealizedPnl":{"type":"number"}}},"internal_handler.PnlSnapshotPosition":{"type":"object","properties":{"avgPrice":{"type":"number"},"marginalPrice":{"type":"number"},"payout":{"type":"number"},"quantity":{"type":"number"},"questionId":{"type":"string"},"tokenId":{"type":"string"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get Blitz performance

GET /api/v1/token-races/performance

## Get Blitz performance

> Returns exact all-time Blitz total cost, PnL, best winning streak, and longest losing streak. PnL and both streaks come from the wallet aggregate (fee-inclusive race cash-flow atoms). Total cost is mint pool collateral across completed Blitz markets and excludes protocol and integrator fees.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/token-races/performance","name":"get-blitz-performance"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/token-races/performance":{"get":{"description":"Returns exact all-time Blitz total cost, PnL, best winning streak, and longest losing streak. PnL and both streaks come from the wallet aggregate (fee-inclusive race cash-flow atoms). Total cost is mint pool collateral across completed Blitz markets and excludes protocol and integrator fees.","tags":["get-blitz-performance"],"summary":"Get Blitz performance","parameters":[{"schema":{"type":"string"},"description":"Ethereum wallet address","name":"user","in":"query","required":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.BlitzPerformance"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.BlitzPerformance":{"type":"object","properties":{"bestStreak":{"type":"integer"},"longestLossStreak":{"description":"LongestLossStreak is the all-time losing mirror of BestStreak.","type":"integer"},"pnl":{"description":"Pnl is all-time race cash-flow PnL from race_user_aggregate (fee-inclusive).","type":"string"},"totalCost":{"description":"TotalCost is mint pool collateral spent in completed Blitz markets,\nexcluding protocol and integrator fees.","type":"string"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Leaderboard

Trader rankings, wallet statistics, and top trades


# Get trader leaderboard

GET /api/v1/market-data/leaderboard

## Get trader leaderboard

> Returns a global ranking of traders sorted by realised PnL, win rate, or volume for a given time period or calendar-day window. Pass a \`user\` wallet address to retrieve a single wallet's rank within the leaderboard.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/leaderboard","name":"get-trader-leaderboard"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/leaderboard":{"get":{"description":"Returns a global ranking of traders sorted by realised PnL, win rate, or volume for a given time period or calendar-day window. Pass a `user` wallet address to retrieve a single wallet's rank within the leaderboard.","tags":["get-trader-leaderboard"],"summary":"Get trader leaderboard","parameters":[{"schema":{"type":"string","default":"all","enum":["1d","7d","30d","all"]},"description":"Time period (mutually exclusive with from/to)","name":"period","in":"query"},{"schema":{"type":"string"},"description":"Window start date YYYY-MM-DD UTC inclusive (requires to; mutually exclusive with period)","name":"from","in":"query"},{"schema":{"type":"string"},"description":"Window end date YYYY-MM-DD UTC inclusive (requires from; mutually exclusive with period)","name":"to","in":"query"},{"schema":{"type":"string","default":"pnl","enum":["pnl","win_rate","volume"]},"description":"Sort criterion","name":"sort_by","in":"query"},{"schema":{"type":"string"},"description":"Wallet address — returns that wallet's rank instead of the full list","name":"user","in":"query"},{"schema":{"type":"integer","default":100,"maximum":500,"minimum":1},"description":"Max results","name":"limit","in":"query"},{"schema":{"type":"integer","default":0},"description":"Pagination offset","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_LeaderboardEntry"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_LeaderboardEntry":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.LeaderboardEntry"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.LeaderboardEntry":{"type":"object","properties":{"losingPredictions":{"type":"integer"},"losingSells":{"type":"integer"},"pnl":{"type":"number"},"pnlPct":{"type":"number"},"profitableSells":{"type":"integer"},"rank":{"type":"integer"},"totalVolume":{"type":"number"},"tradeCount":{"type":"integer"},"walletAddress":{"type":"string"},"winRate":{"type":"number"},"winningPredictions":{"type":"integer"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get wallet trading stats

GET /api/v1/market-data/leaderboard/stats/{wallet\_address}

## Get wallet trading stats

> Returns lifetime aggregate trading statistics for a single wallet, including total PnL, win rates, buy/sell volumes, trade count, and best/worst individual trades.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/leaderboard/stats/{wallet_address}","name":"get-wallet-stats"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/leaderboard/stats/{wallet_address}":{"get":{"description":"Returns lifetime aggregate trading statistics for a single wallet, including total PnL, win rates, buy/sell volumes, trade count, and best/worst individual trades.","tags":["get-wallet-stats"],"summary":"Get wallet trading stats","parameters":[{"schema":{"type":"string"},"description":"Ethereum wallet address","name":"wallet_address","in":"path","required":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.WalletStats"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.WalletStats":{"type":"object","properties":{"avgTradeSize":{"type":"number"},"bestTrade":{"type":"number"},"buyVolume":{"type":"number"},"losingPredictions":{"type":"integer"},"losingSells":{"type":"integer"},"pnl":{"type":"number"},"predictionWinRate":{"type":"number"},"profitableSells":{"type":"integer"},"sellVolume":{"type":"number"},"sellWinRate":{"type":"number"},"totalVolume":{"type":"number"},"tradeCount":{"type":"integer"},"walletAddress":{"type":"string"},"winRate":{"type":"number"},"winningPredictions":{"type":"integer"},"worstTrade":{"type":"number"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get top trades

GET /api/v1/market-data/leaderboard/top-trades

## Get top trades

> Returns the highest-PnL individual trades globally with locale-resolved titles/outcomes and images. Supports sorting by pnl, pnl\_pct, or cost\_basis.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/market-data/leaderboard/top-trades","name":"get-top-trades"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/market-data/leaderboard/top-trades":{"get":{"description":"Returns the highest-PnL individual trades globally with locale-resolved titles/outcomes and images. Supports sorting by pnl, pnl_pct, or cost_basis.","tags":["get-top-trades"],"summary":"Get top trades","parameters":[{"schema":{"type":"string","default":"all","enum":["1d","7d","30d","all"]},"description":"Time period","name":"period","in":"query"},{"schema":{"type":"string"},"description":"BCP-47 locale for title/outcome resolution","name":"locale","in":"query"},{"schema":{"type":"string","default":"pnl","enum":["pnl","pnl_pct","cost_basis"]},"description":"Sort column","name":"sort_by","in":"query"},{"schema":{"type":"string","default":"desc","enum":["asc","desc"]},"description":"Sort direction","name":"order","in":"query"},{"schema":{"type":"integer","default":10,"maximum":50,"minimum":1},"description":"Max results","name":"limit","in":"query"},{"schema":{"type":"integer","default":0},"description":"Pagination offset","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_TopTradeEntry"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_TopTradeEntry":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.TopTradeEntry"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.TopTradeEntry":{"type":"object","properties":{"avgPrice":{"type":"number"},"costBasis":{"type":"number"},"deltaCollateral":{"type":"number"},"deltaQuantity":{"type":"number"},"eventType":{"type":"string"},"outcomeImage":{"type":"string"},"outcomeName":{"type":"string"},"pnl":{"type":"number"},"pnlPct":{"type":"number"},"questionImage":{"type":"string"},"questionTitle":{"type":"string"},"rank":{"type":"integer"},"resolvedAt":{"type":"integer"},"sourceLocale":{"type":"string"},"walletAddress":{"type":"string"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Get race leaderboard

GET /api/v1/token-races/leaderboard

## Get race leaderboard

> Ranks wallets over finalised token races (Blitz) within a time period or UTC calendar-day window, sorted by longest consecutive winning-race run by default. Every row also reports \`losses\` and \`longestLossStreak\` (the losing mirror of \`wins\` / \`bestStreak\` over the same window), though neither is a sort option. Treasury wallets and the deployment's configured market-maker wallets are excluded. Pass \`user\` for a single wallet's rank. For live ranks inside the current race window, use the race-coordinator's GET /race/leaderboard/me instead — this endpoint only sees races that have been finalised onchain.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /api/v1/token-races/leaderboard","name":"get-race-leaderboard"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/api/v1/token-races/leaderboard":{"get":{"description":"Ranks wallets over finalised token races (Blitz) within a time period or UTC calendar-day window, sorted by longest consecutive winning-race run by default. Every row also reports `losses` and `longestLossStreak` (the losing mirror of `wins` / `bestStreak` over the same window), though neither is a sort option. Treasury wallets and the deployment's configured market-maker wallets are excluded. Pass `user` for a single wallet's rank. For live ranks inside the current race window, use the race-coordinator's GET /race/leaderboard/me instead — this endpoint only sees races that have been finalised onchain.","tags":["get-race-leaderboard"],"summary":"Get race leaderboard","parameters":[{"schema":{"type":"string","default":"all","enum":["1d","7d","30d","all"]},"description":"Time period (mutually exclusive with from/to)","name":"period","in":"query"},{"schema":{"type":"string"},"description":"Window start date YYYY-MM-DD UTC inclusive (requires to; mutually exclusive with period)","name":"from","in":"query"},{"schema":{"type":"string"},"description":"Window end date YYYY-MM-DD UTC inclusive (requires from; mutually exclusive with period)","name":"to","in":"query"},{"schema":{"type":"string","default":"best_streak","enum":["best_streak","pnl","wins","win_rate"]},"description":"Primary sort criterion. win_rate is unweighted — one won race outranks a long profitable run.","name":"sort_by","in":"query"},{"schema":{"type":"string"},"description":"Wallet address — returns that wallet's rank instead of the full list","name":"user","in":"query"},{"schema":{"type":"integer","default":100,"maximum":500,"minimum":1},"description":"Max results","name":"limit","in":"query"},{"schema":{"type":"integer","default":0},"description":"Pagination offset","name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_RaceLeaderboardEntry"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"ft_market-service-v2_pkg_api.PaginatedResponse-internal_handler_RaceLeaderboardEntry":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.RaceLeaderboardEntry"}},"pagination":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.Pagination"}}},"internal_handler.RaceLeaderboardEntry":{"type":"object","properties":{"bestStreak":{"type":"integer"},"longestLossStreak":{"description":"LongestLossStreak is the longest consecutive losing run in the same window,\ncomputed from the same islands as BestStreak. Losses is its atom count\n(races_played − wins). Reported but not rankable — see raceLeaderboardOrderBy.","type":"integer"},"losses":{"type":"integer"},"racePnl":{"type":"number"},"racesPlayed":{"type":"integer"},"rank":{"type":"integer"},"walletAddress":{"type":"string"},"winRate":{"type":"number"},"wins":{"type":"integer"}}},"ft_market-service-v2_pkg_api.Pagination":{"type":"object","properties":{"hasMore":{"type":"boolean"},"totalResults":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Internal

Internal-only endpoints gated by X-Internal-API-Key


# Treasury disbursement reads

GET /internal/treasury/\*

## Lifetime protocol fees paid by a wallet

> Internal. Returns the cumulative total\_fees\_hmr from current\_user\_stats for the given address. Monotonic lifetime counter for watermarked fee clawback. Requires X-Internal-API-Key.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /internal/treasury/*","name":"internal-treasury"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/internal/treasury/fees-paid":{"get":{"description":"Internal. Returns the cumulative total_fees_hmr from current_user_stats for the given address. Monotonic lifetime counter for watermarked fee clawback. Requires X-Internal-API-Key.","tags":["internal-treasury"],"summary":"Lifetime protocol fees paid by a wallet","parameters":[{"schema":{"type":"string"},"description":"Wallet address","name":"address","in":"query","required":true},{"schema":{"type":"string"},"description":"Internal API key","name":"X-Internal-API-Key","in":"header","required":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.FeesPaidResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.FeesPaidResponse":{"type":"object","properties":{"address":{"type":"string"},"as_of_ledger_id":{"type":"integer"},"found":{"type":"boolean"},"total_fees_hmr":{"type":"number"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```

## Treasury seed claims attributed to a seeder

> Internal. Returns Safe/treasury market\_claim payouts pro-rata attributed to the seeder who funded seed() mints. Strict (block\_number, log\_index) ascending order with exclusive cursor. Requires X-Internal-API-Key.

```json
{"openapi":"3.1.1","info":{"title":"FortyTwo Read API","version":"1.0"},"tags":[{"description":"GET /internal/treasury/*","name":"internal-treasury"}],"servers":[{"url":"https://rest.ft.42.space/"}],"paths":{"/internal/treasury/seed-claims":{"get":{"description":"Internal. Returns Safe/treasury market_claim payouts pro-rata attributed to the seeder who funded seed() mints. Strict (block_number, log_index) ascending order with exclusive cursor. Requires X-Internal-API-Key.","tags":["internal-treasury"],"summary":"Treasury seed claims attributed to a seeder","parameters":[{"schema":{"type":"string"},"description":"Seeder wallet address","name":"seeder","in":"query","required":true},{"schema":{"type":"integer"},"description":"Exclusive cursor block number","name":"after_block","in":"query"},{"schema":{"type":"integer"},"description":"Exclusive cursor log index","name":"after_log_index","in":"query"},{"schema":{"type":"integer"},"description":"Page size (default 500, max 500)","name":"limit","in":"query"},{"schema":{"type":"string"},"description":"Internal API key","name":"X-Internal-API-Key","in":"header","required":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_handler.SeedClaimsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ft_market-service-v2_pkg_api.ErrorResponse"}}}}}}}},"components":{"schemas":{"internal_handler.SeedClaimsResponse":{"type":"object","properties":{"has_more":{"type":"boolean"},"items":{"type":"array","items":{"$ref":"#/components/schemas/internal_handler.SeedClaimItem"}},"next_cursor":{"$ref":"#/components/schemas/internal_handler.SeedClaimCursor"},"seeder":{"type":"string"}}},"internal_handler.SeedClaimItem":{"type":"object","properties":{"block_number":{"type":"integer"},"block_timestamp":{"type":"integer"},"claim_collateral_hmr":{"type":"number"},"log_index":{"type":"integer"},"market_address":{"type":"string"},"question_id":{"type":"string"},"seeder_share":{"type":"number"},"token_id":{"type":"string"}}},"internal_handler.SeedClaimCursor":{"type":"object","properties":{"block_number":{"type":"integer"},"log_index":{"type":"integer"}}},"ft_market-service-v2_pkg_api.ErrorResponse":{"type":"object","properties":{"code":{"type":"integer"},"error":{"type":"string"},"message":{"type":"string"}}}}}}
```


# Deployments

42's core deployment configurations for reference.

### Core Contracts <a href="#core-contracts" id="core-contracts"></a>

42 markets are currently live on **BNB Chain** (`ChainId: 56`) where all deployed addresses can be found below:

<table data-header-hidden><thead><tr><th width="447.9609375"></th><th></th></tr></thead><tbody><tr><td><strong>Address</strong></td><td><strong>Details</strong></td></tr><tr><td><a href="https://bscscan.com/address/0x88888888338e60bfB4657187169cFFa5c8640E42">0x88888888338e60bfB4657187169cFFa5c8640E42</a></td><td><strong>FTRouter</strong> – Handles all user market-related transactions.</td></tr><tr><td><a href="https://bscscan.com/address/0xF21b2D4F8989b27f732e369907F25f0E8D95Fe62">0xF21b2D4F8989b27f732e369907F25f0E8D95Fe62</a></td><td><strong>FTMarketController -</strong> Primary contract managing market logic and configurations.</td></tr><tr><td><a href="https://bscscan.com/address/0x0443E04e70E4285a6cA73eacaC5267f3B4cBb7Da">0x0443E04e70E4285a6cA73eacaC5267f3B4cBb7Da</a></td><td><strong>PowerCurve -</strong> Defines all the mathematical pricing mechanism behind 42 markets.</td></tr></tbody></table>

#### Collateral Used

<table data-header-hidden><thead><tr><th width="447.9609375"></th><th></th></tr></thead><tbody><tr><td><strong>Address</strong></td><td><strong>Details</strong></td></tr><tr><td><a href="https://bscscan.com/token/0x55d398326f99059ff775485246999027b3197955">0x55d398326f99059ff775485246999027b3197955</a></td><td><strong>BUSDT</strong> - Collateral asset used across all 42 markets.</td></tr></tbody></table>

### Additional Resources <a href="#additional-resources" id="additional-resources"></a>

* [42 Audit Reports](https://github.com/fortytwo-protocol/ft-contracts-public/tree/main/audits)


# Frequently Ask Questions

### Security

<details>

<summary><strong>Has 42 been audited?</strong></summary>

The 42 protocol has undergone security reviews and audits by independent third-party auditors (refer to [Audits](/security/markdown)). Identified issues have been addressed prior to deployment, and the team continues to improve the codebase as the protocol evolves.

That said, no smart-contract system can be considered entirely risk-free. Users should always assess their own risk tolerance and participate responsibly.

</details>

<details>

<summary><strong>What risks should users be aware of?</strong></summary>

42 is a non-custodial, smart-contract-based protocol. Participation involves interacting directly with on-chain code, which carries inherent risks, including but not limited to:

* **Smart contract vulnerabilities:** unforeseen bugs or edge cases may exist despite audits and testing.
* **Oracle and resolution risk:** markets resolve strictly according to predefined rules and data sources; unexpected oracle behavior or data anomalies may impact outcomes.
* **Economic and market risk:** prices and payouts depend on participant behavior, timing, and capital distribution.
* **Protocol integrations:** where 42 interfaces with external infrastructure (e.g. oracles, settlement layers), failures or exploits in those systems may affect the protocol.

</details>


# Overview

GitBook supports many different types of content, and is backed by Markdown — meaning you can copy and paste any existing Markdown files directly into the editor!

<figure><img src="https://gitbookio.github.io/onboarding-template-images/markdown-hero.png" alt=""><figcaption></figcaption></figure>

Feel free to test it out and copy the Markdown below by hovering over the code block in the upper right, and pasting into a new line underneath.

```markdown
# Heading

This is some paragraph text, with a [link](https://docs.gitbook.com) to our docs. 

## Heading 2
- Point 1
- Point 2
- Point 3
```

{% hint style="info" %}
If you have multiple files, GitBook makes it easy to import full repositories too — allowing you to keep your GitBook content in sync.
{% endhint %}


# Protocol Architecture


# Integrations


# Changelog

New updates and improvements

{% updates format="full" %}
{% update date="2026-07-02" %}

## Product update

#### Feature update

<table><thead><tr><th width="172.69921875">Feature</th><th>Description</th></tr></thead><tbody><tr><td>Sort by 24h volume</td><td>Discover markets more easily now that they are surfaced based on the most recent 24h volume </td></tr><tr><td>Featured category link preview</td><td>Meme category now has a preview image </td></tr></tbody></table>

<table><thead><tr><th width="172.69921875">Bug fixes</th><th>Description</th></tr></thead><tbody><tr><td>Show 2 decimals for player stats</td><td>Player stats now show 2 decimals for more precision, aligns with the resolution rule data</td></tr><tr><td>Keep discover list ordering stable</td><td>Scrolling up and down the discover list doesn't reset it to a random ordered list anymore </td></tr><tr><td>Timeframe label wrapping</td><td>Timeframe setting component on chart now adjusts to accommodate the length of different translated text</td></tr><tr><td>Chart X-axis fix</td><td>X-axis timeline renders properly now</td></tr><tr><td>Outcome names in outcome list cut off</td><td>Applied a popover to show the full outcome name on truncated outcome names</td></tr></tbody></table>

{% endupdate %}

{% update date="2026-06-30" %}

## Product update

#### Feature update

<table><thead><tr><th width="170.859375">Feature</th><th>Description</th></tr></thead><tbody><tr><td>Player stats</td><td>Added player stats to the star of stars market for better reference during trading</td></tr><tr><td>Boosted tooltip</td><td>Added information to explain what <code>Boosted</code> markets mean</td></tr></tbody></table>

#### Bug fixes

<table><thead><tr><th width="171.60546875">Bug fixes</th><th>Description</th></tr></thead><tbody><tr><td>Bad readability</td><td>Fixed the dimmed out text for <code>Vol</code> and <code>TMC</code> on the market cards</td></tr><tr><td>Messy styling</td><td>Removed extra borders on the outcome images</td></tr><tr><td>Missing total value</td><td>Settled positions now show the total amount spent and total PnL amongst all outcomes</td></tr><tr><td>Words are cut off</td><td>Added functionality to display full sentence when it's truncated on the UI </td></tr><tr><td>Extra long twitter share links</td><td>Shortened the share links</td></tr></tbody></table>

{% endupdate %}

{% update date="2026-06-16" %}

## Product update

#### Introducing a Tickets Reward System

We're launching a new rewards mechanic — **Tickets**. When you trade on designated markets, you automatically earn Tickets based on your activity: trading volume, streaks, daily participation, referrals, and more. &#x20;

Markets with special Ticket multipliers are now highlighted with a **Boosted** tag, making it easier to spot higher-reward opportunities

<div><figure><img src="/files/wpY6HZwfgsMvbqAbJy7w" alt=""><figcaption></figcaption></figure> <figure><img src="/files/bI1EPxHHQAp0Bk7i00Kx" alt=""><figcaption></figcaption></figure></div>

#### Clearer timeline and phase for soccer scoregrid markets

We've added a visual timeline to Soccer Scoregrid markets, giving you a clearer picture of exactly where you are in the market lifecycle at any point. The timeline shows when the market opens, when the spread surges as the match approaches, when the game kicks off and ends, and when the market resolves in one glance.

<figure><img src="/files/w0840z20jwbG9veVcVfA" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/g3SFwipcHnwfVzXnoLF3" alt=""><figcaption></figcaption></figure>

#### High exit spread warning

We added a visual aid for when there's a high exit spread

<figure><img src="/files/5S4ASKeYOoOjyAK0vaHr" alt=""><figcaption></figcaption></figure>

#### Bug Fixes

* Fixed a misleading display issue on Soccer Scoregrid markets where the trade summary displayed '0' in the sell state when no positions were selected
* Refined divider line colours for a cleaner, more polished look
* Prevent negative numbers from being entered in trade inputs
  {% endupdate %}
  {% endupdates %}

{% updates format="short" %}
{% update date="2026-06-11" tags="feature,improvement,fix" %}

## Product update

### Improved trading page layout

* The chart lives on the left so you always have context. Outcomes are listed beside it. And the trading window sits on the right. Everything where you need it
* **See what traders are actually doing.** The activity tabs got a refresh. Cleaner and easier to scan. Spot what other traders are buying across all outcomes at a glance
* New "Related Markets" section at the bottom of every page helps you find connected markets, and stay in the flow

<div align="center"><figure><img src="/files/zyja9KS2Pw0MvHRtzFZz" alt=""><figcaption></figcaption></figure></div>

### **Trade in your language**

We added language support so more people can trade with confidence

<figure><img src="/files/nSLoNVNkAY1wrXUUmpN9" alt=""><figcaption></figcaption></figure>

### New to 42?

We added a mechanics explainer so anyone can understand how it all works

<figure><img src="/files/zGFIi6syBt4DtDp63D9P" alt=""><figcaption></figcaption></figure>

### **Know before you buy**

A confirmation step before every purchase so you can stay in control

<figure><img src="/files/4UXEwDNe69doO40WDjsk" alt=""><figcaption></figcaption></figure>

<a href="/pages/NS8K2uanRK2FKhpTBlsl" class="button primary">Read full update</a><a href="https://gitbook.com/" class="button secondary">Documentation</a>
{% endupdate %}
{% endupdates %}


# Product update

See what’s new and improved in our latest update.

### Product feature #1

* Feature description
* Feature description

<a href="https://gitbook.com/" class="button primary">Read the documentation</a>

### Product feature #2

* Feature description
* Feature description
* Feature description

<a href="https://gitbook.com/" class="button primary">Read the documentation</a>

<details>

<summary>Improved</summary>

* Product improvement
* Product improvement
* Product improvement
* Product improvement
* Product improvement

</details>

<details>

<summary>Fixed</summary>

* Product fix
* Product fix
* Product fix
* Product fix
* Product fix

</details>


# Product update

See what’s new and improved in our latest update.

### Product feature #1

* Feature description
* Feature description

<a href="https://gitbook.com/" class="button primary">Read the documentation</a>

### Product feature #2

* Feature description
* Feature description
* Feature description

<a href="https://gitbook.com/" class="button primary">Read the documentation</a>

<details>

<summary>Improved</summary>

* Product improvement
* Product improvement
* Product improvement
* Product improvement
* Product improvement

</details>

<details>

<summary>Fixed</summary>

* Product fix
* Product fix
* Product fix
* Product fix
* Product fix

</details>


# Product update

See what’s new and improved in our latest update.

### Product feature #1

* Feature description
* Feature description

<a href="https://gitbook.com/" class="button primary">Read the documentation</a>

### Product feature #2

* Feature description
* Feature description
* Feature description

<a href="https://gitbook.com/" class="button primary">Read the documentation</a>

<details>

<summary>Improved</summary>

* Product improvement
* Product improvement
* Product improvement
* Product improvement
* Product improvement

</details>

<details>

<summary>Fixed</summary>

* Product fix
* Product fix
* Product fix
* Product fix
* Product fix

</details>


# Product update

See what’s new and improved in our latest update.

### Product feature #1

* Feature description
* Feature description

<a href="https://gitbook.com/" class="button primary">Read the documentation</a>

### Product feature #2

* Feature description
* Feature description
* Feature description

<a href="https://gitbook.com/" class="button primary">Read the documentation</a>

<details>

<summary>Improved</summary>

* Product improvement
* Product improvement
* Product improvement
* Product improvement
* Product improvement

</details>

<details>

<summary>Fixed</summary>

* Product fix
* Product fix
* Product fix
* Product fix
* Product fix

</details>


