# Indexify - The Future of Investing

What is Indexify?

Indexify is the smartest way to invest in crypto ideas - built for creators, traders and communities.

We’ve reimagined portfolio creation with **social-powered indexing**:

* intuitive UX
* built-in safeguards
* performance-based rewards

Whether you’re curating stacks or following market movers, Indexify makes investing **smarter, faster, and safer** - with every decision backed by data and community conviction.

***

#### Why It Matters

Traditional investing in crypto is noisy and fragmented. Indexify brings order and opportunity by turning **any user into a fund manager** and **every community into an investing ecosystem**.

* **Creators** earn more by building conviction.
* **Followers** grow faster by aligning with proven alpha.

***

#### Key Features

* **Social Indexes (Stacks)** → Build or follow token portfolios with live charting & performance metrics.
* **Creator Revenue Share** → Earn when followers buy into your stack.
* **Creator Tracking & Activity Feeds** → See top users’ moves in real time.
* **Slippage Protection** → Safer trades with enforced slippage limits.
* **Gated Access & Subscriptions** → Monetize insights with subscriber-only stacks.

***

👉 **Mission:** To make investing in strategies as easy as investing in tokens - while empowering the builders, influencers, and analysts who shape the market every day.


# FAQs

<details>

<summary>What is Indexify?</summary>

**Indexify** is a social investing platform where users create, follow, and trade portfolios called **Stacks**. It’s built for creators, communities, and traders who want to monetize insight, not just tokens. With native performance tracking and built-in revenue sharing, Indexify turns onchain activity into a collaborative, transparent investing experience.

</details>

<details>

<summary>What is a "Stack"</summary>

A **Stack** is a curated basket of assets you can invest in with one click. Think of it as a portfolio or index designed to make it easy to follow a specific strategy or theme.

When a Stack is indexed, it starts at **$1.00**, making performance easy to track over time. At launch, Stacks are fixed baskets of assets. While creators can’t actively rebalance or manage allocations yet, they can publish notes and updates to explain the thesis, share context, and communicate changes in outlook.

</details>

<details>

<summary>Is Indexify Self Custody?</summary>

Indexify uses embedded **self-custody wallets**, meaning **you control your keys and your funds**. You can buy and trade Stacks without setting up a separate wallet, and you can export your private key at any time. That key can be imported into a third-party wallet like **Phantom**, ensuring full ownership, portability, and control of your assets at all times.

</details>

<details>

<summary>How secure is Indexify?</summary>

Our system implements the highest security available in the market, inclusive of air gapped storage and encryption.

</details>

<details>

<summary>Is Indexify Decentralized?</summary>

Indexify runs entirely on decentralized, onchain rails. All trades and portfolio actions are executed onchain through decentralized protocols. While external wallets can’t be connected directly, each account includes a self-custodied embedded wallet, and credentials can be exported at any time. Funds are never held by Indexify and always remain under your control.

</details>


# Support & Contact

Need help or have a question? We’re here to support you.

If you require assistance, please reach out to our support team directly at:\
<support@indexify.finance>\
\
You can contact us for:

* Account or access issues
* Stack creation and management questions
* Technical bugs or performance concerns
* General product feedback

Our team will respond as quickly as possible to ensure a smooth experience on Indexify.<br>


# Sign Up

Onboarding Steps

Getting started with Indexify is quick and simple:

**Step 1. Sign in**

* Click **Sign In** on the homepage.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FjCP6BqJVugxFjCfOkSqp%2Fimage.png?alt=media&amp;token=18e69504-4b20-4d11-862e-2f2e0238a2e5" alt="" width="563"><figcaption></figcaption></figure>

**Step 2. Select your signup method**

* Choose between **Email** or **Wallet**.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2F8by9MndM2Ui5faidZscr%2Fimage.png?alt=media&amp;token=3874dc2c-ced8-48bd-a3a2-396f10716bc1" alt="" width="374"><figcaption></figcaption></figure>

**Step 3. Verify your account**

* If signing up with **Email**, enter the **One-Time Passcode (OTP)** sent to your inbox.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FFNAV6CS0883XhI9CwoPp%2Fimage.png?alt=media&amp;token=3295fca0-a207-491d-9d37-7a0cade7e35f" alt="" width="370"><figcaption></figcaption></figure>

**Step 4. Create your password**

* Set a secure password for your account.

**Step 5. Add funds**

* Click the **Wallet icon** in the app.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2F6WteUNMtrZfYnCoONflL%2Fimage.png?alt=media&amp;token=320a16a4-3d67-4272-8663-8e3f53520e38" alt="" width="563"><figcaption></figcaption></figure>

* Select your preferred deposit method.
  * **Wallet Transfer:** Deposit **USDC on the Solana network only**.
  * **Buy with Swapped:** allows you to on-ramp funds using a credit card through **Swapped**, a third-party payment provider. This makes it easy to fund your account and get started without already holding crypto.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FdXdkqY3FAZdV9fBxeZoP%2Fimage.png?alt=media&amp;token=c288f515-aefb-4c97-ab17-6ec05c431d70" alt="" width="351"><figcaption></figcaption></figure>

👉 At this point, your account is ready to trade.\
\
***Note: When choosing to deposit through wallet transfer, ensure that you are only depositing USDC into the account, you do not need SOL to trade, as we sponsor gas :)***


# Export Your Keys

Steps to Export Your Recovery Key

⚠️ **Important:** Your recovery key is the only way to restore access to your wallet if you lose your device or password. **Never share it with anyone.** Store it securely (offline, encrypted, or with a hardware solution).\
\
*You can view your recovery key at any time, simply go to Settings > Wallets > Export Key*

**Step 1. Open Settings**

* Click your **User Icon** → select **Settings**.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FoqEiQ5piLtojFBmyaFlN%2Fimage.png?alt=media&amp;token=1cb3a69d-deee-4261-b540-6167fad21e6b" alt="" width="378"><figcaption></figcaption></figure>

**Step 2. Go to Wallets**

* Navigate to **Wallets** in the Settings menu.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FXazT7T5ZFXsc95aKbX4c%2Fimage.png?alt=media&amp;token=429c0c10-d341-4556-8b75-14ce1bc0ba99" alt="" width="563"><figcaption></figcaption></figure>

**Step 3. Verify your identity**

* Enter your **Phone Number**.
* Enter your **Two-Factor Authentication (2FA) code**.

<div><figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2F6bRd4y9Am0TzG6FJoHUf%2Fimage.png?alt=media&amp;token=e245083f-64a0-46c9-9f3c-ad4acf4823f1" alt="" width="370"><figcaption></figcaption></figure> <figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FFkl8kArY2w88916lBGVC%2Fimage.png?alt=media&amp;token=5e8b6686-f572-45e5-a80f-373510522e62" alt="" width="362"><figcaption></figcaption></figure></div>

**Step 4. Export Key**

* Click **Export Key** to view your recovery key.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FVxSMeDhfzRKvo7vmld1S%2Fimage.png?alt=media&amp;token=eb4b647d-714e-4416-b8ba-e75e68adec12" alt="" width="365"><figcaption></figcaption></figure>

#### 🔒 Best Practices

* **Write it down** and store it in a safe, offline location.
* **Do not screenshot** or store it in cloud services.
* **Never share it** with anyone, including Indexify team members.


# Stacks

Below you can learn How to Create a Stack, and how to understand stack performance on Indexify.

<table data-view="cards"><thead><tr><th></th><th data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td></td><td><a href="/getting-started/stacks/how-to-create-a-stack">How to Create a Stack</a></td><td><a href="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FJJb3LoJTmgsjG3J8sNN2%2FScreen%20Shot%202025-12-30%20at%209.56.10%20AM.png?alt=media&amp;token=2a3f5d6c-516b-4e13-bed4-413708db5cb1">Screen Shot 2025-12-30 at 9.56.10 AM.png</a></td></tr><tr><td></td><td><a href="/getting-started/stacks/understanding-stack-performance">Understanding Stack Performance</a></td><td><a href="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FaIGtSnXEy0BkbDoL4JIf%2FScreen%20Shot%202025-12-30%20at%209.56.33%20AM.png?alt=media&amp;token=15275111-2a3a-41e5-9abe-a51582c99701">Screen Shot 2025-12-30 at 9.56.33 AM.png</a></td></tr><tr><td>Close Stack</td><td><a href="/getting-started/stacks/close-stack">Close Stack</a></td><td><a href="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FcFLfIWTdc0DrY6BcBsIa%2FScreen%20Shot%202026-01-23%20at%201.44.56%20PM.png?alt=media&amp;token=acb010d7-cd27-4af2-b292-5c8df09eae06">Screen Shot 2026-01-23 at 1.44.56 PM.png</a></td></tr></tbody></table>


# How to Create a Stack

Follow these steps to create your first stack:

#### **Step 1. Navigate to My Stacks**

* From the top navigation bar, click **MY STACKS** (green button).
* You’ll land on the Stacks page (initially empty if you haven’t created any yet).

#### **Step 2. Start creating a stack**

* On the Stacks page, click **+ CREATE STACK** (green button, top right).
* This opens the **Manual Stack Build** screen.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FKJfrcuc0OGMgRlPGW1QS%2Fimage.png?alt=media&amp;token=566eb8bf-1e1b-4b3f-a0f3-168a9910462e" alt="" width="563"><figcaption></figcaption></figure>

#### **Step 3. Enter Base Info**

* **Stack Name:** Enter your chosen name (e.g., *SignUp Stack*).
  * ⚠️ Avoid using symbols in the name.
* **Description:** Short description (max **120 characters**).
* **Risk/Term:** Select a preset label (e.g., *Low Risk / Long Term*).

#### **Step 4. Choose Assets**

* Search and add tokens (**max 12**).
* Adjust allocations with sliders.
  * Option to **lock portions** to fix percentages.
* **Creator Fee:** Enter your fee percentage (the “tip” paid when users buy/sell your stack).
  * Allowed range: **0% – 0.5%** (e.g., 0.5%).
  * You can track fees earned on your **Portfolio Page**.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2F08dAg5DVUrrJywbtCKFn%2Fimage.png?alt=media&amp;token=8bb2911f-ded5-4d64-84fd-e2065ac0127b" alt="" width="563"><figcaption></figcaption></figure>

#### **Step 5. Add Social Links (Optional)**

* You may link relevant profiles for visibility and community connection.

***

#### **Step 6. Create Stack**

* Click **Create Stack** to finalize.<br>

  <figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2F7heTVf2m254lJtWpPXMm%2Fimage.png?alt=media&amp;token=5f806222-58ab-4915-98d4-d164c6f67508" alt="" width="563"><figcaption></figcaption></figure>


# Understanding Stack Performance

📊 Stack Performance

Every Stack starts at **$1** when it’s created.\
The price shows how that Stack has performed since launch.

* If the Stack price is **above $1**, it’s up in value.
* If it’s **below $1**, it’s down in value.
* The percentage shown reflects the total change in value since inception.

Stack performance is based on the combined value of all assets and trades inside the Stack.\
It updates automatically as markets move and trades are made.

You can also toggle the price display by clicking your profile in the top right to view performance in **x terms** instead of dollars. For example, a **$5 Stack** is shown as **5×** in the x-view.

**Simple rule:**\
$1 is your starting point.\
Anything above means gains, anything below means losses.


# Close Stack

Close Stack allows a Stack creator to formally end a Stack’s lifecycle.

When a Stack is closed:

* The final price is recorded
* Stack P\&L is locked and finalized
* New buys are disabled
* Existing holders can still sell at their discretion and convenience.

To close a Stack, select one of your Stacks, click **Edit**, then choose **Close**.<br>

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FcFLfIWTdc0DrY6BcBsIa%2FScreen%20Shot%202026-01-23%20at%201.44.56%20PM.png?alt=media&amp;token=acb010d7-cd27-4af2-b292-5c8df09eae06" alt="" width="375"><figcaption></figcaption></figure>

Closing a Stack provides a clear end state for performance tracking while allowing holders to exit positions transparently.


# Incentives

Creator Rewards, Referrals and Points

Track all of your Incentives in one place on the Incentives page, simply navigate to the user profile on the top right and select "incentives".<br>

<table data-view="cards"><thead><tr><th></th><th data-type="content-ref"></th></tr></thead><tbody><tr><td></td><td><a href="/getting-started/incentives/creator-rewards">Creator Rewards</a></td></tr><tr><td></td><td><a href="/getting-started/incentives/beta-referral-system">Beta Referral System</a></td></tr><tr><td></td><td><a href="/getting-started/incentives/indexify-points">Indexify Points</a></td></tr></tbody></table>

\ <br>


# Creator Rewards

**Creator Revenue Share**

* Creators earn up to **0.5%** of each trade made through their stacks.
* This ensures creators are compensated for:
  * Identifying opportunities
  * Building conviction portfolios
  * Sharing strategies with the community
* See [**\[How to Create a Stack\]**](/getting-started/stacks) for details on setting your fee.

#### **Earn Rewards with Indexify 🔥**

* Users earn rewards from:
  * **Every trade they make**
  * **Referral trades** made through their network

📊 **Track Your Rewards**\
You can monitor all creator fees, referral rewards and points in real time on your **Portfolio overview page**.<br>

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FOf22vMPvrgW82pyHdbHX%2FScreen%20Shot%202025-10-16%20at%2010.25.55%20AM.png?alt=media&amp;token=b3097151-361e-4b22-9f50-0c4be6764a19" alt="" width="563"><figcaption></figcaption></figure>


# Beta Referral System

🌐 **Welcome to Indexify’s Beta Incentive Program** 🚀\
\
Indexify’s Referral Program rewards **creators and referrers** for helping grow the ecosystem. Earn a share of fees whenever trades happen on your stacks or through your referral network.

#### **Referral Rewards Structure**

Indexify uses a **3-level referral system**:

* **Level 1 (Direct):** 15% of the platform fee from users you refer.
* **Level 2 (Indirect):** 8% of the platform fee from users they refer.
* **Level 3 (Extended):** 2% of the platform fee from the next level of referrals.

> ⚠️ **Note**\
> No rewards are given for self-trades.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FlZJ4cWvt7bqAHITBfbPR%2F3%20tier%20rev%20share.png?alt=media&amp;token=70bb613e-c928-4b4d-8ac2-32aa5b546642" alt="" width="563"><figcaption></figcaption></figure>

***

#### **📊 Example Earnings**

* A trader makes a **$10,000 trade**.
* Platform fee = **1% → $100 total**.
* Referral payout:
  * **L1:** $15
  * **L2:** $8
  * **L3:** $2
* **Total paid to referrers:** $25
* **Platform keeps:** $75

***

**How to Earn**

1. **Share your referral link** with new users.
2. **Earn rewards** every time they (or their network) trade.
3. **Track payouts** in your Portfolio or Incentives page.<br>

   <figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FnCcGujwPx1h2F8g1SFvr%2FScreen%20Shot%202025-10-16%20at%2010.22.36%20AM.png?alt=media&amp;token=7a138f24-8765-4ee9-b7eb-f486515b38aa" alt="" width="563"><figcaption></figcaption></figure>

***

> ℹ️ **Disclaimer**\
> *Indexify reserves the right to adjust the referral program at any time during beta.*


# Indexify Points

Indexify Points track and reward your activity across the platform.

#### **How it works**

* **1 Point = $1 in trading volume**
* You earn **Points for every dollar traded personally**
* You earn **Points for every dollar traded on your Stacks that you created**
* **Stack creation** also earns Points
* Both **buy and sell** volume count
* Points accumulate as you stay active

#### **Why it matters**

* Points reflect your overall platform activity
* They build your reputation as both a trader and a creator
* Points unlock future perks, benefits, and reward opportunities

#### **Boosts & Bonuses**

Keep an eye out for **Points Boosts -** special, time-limited multipliers that increase how many Points you earn from trading volume or Stack activity.\
Boost windows are the best way to maximize your Points and reward growth, and will be announced on our X or Discord page.

***

> 📊 **Tracking**\
> Your Points balance and reward history can be viewed in your **Incentives or Portfolio page**.


# Fees

Every buy or sell operation on Indexify has associated fees, similar to any other blockchain transaction. See the two types you will encounter below.

<table data-view="cards"><thead><tr><th></th><th data-type="content-ref"></th></tr></thead><tbody><tr><td></td><td><a href="/getting-started/fees/indexify-fees">Indexify Fees</a></td></tr><tr><td></td><td><a href="/getting-started/fees/solana-fees">Solana Fees</a></td></tr></tbody></table>


# Indexify Fees

#### **💰 Fee Structure**

* **Platform Fee:** 1% on every trade (buys & sells)
* **Creator Fee:** Up to **0.50%** (set by the stack creator)
* **Max Total User Fee:** **1.50%**

#### 📊 Example&#x20;

If you place a $1,000 trade with a 0.5% creator fee:

* **Platform Fee (1%)** = $10
* **Creator Fee (0.5%)** = $5
* **Total Fee (1.5%)** = $15


# Solana Fees

**Network Fees & Priority Tips**

Indexify sponsors **base gas fees**, so you don’t need to hold SOL to trade.\
However, there are additional costs that may apply when trading during high network activity.

***

**Slippage Tolerance**

* **Slippage** is the difference between the expected price of a trade and the actual execution price.
* Setting a slippage tolerance ensures your transaction still goes through if prices move slightly during confirmation.
* If the market moves beyond your tolerance, the transaction will **fail** instead of filling at a worse price.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FCUF2GC03CgDuCUAzO9yG%2Fimage.png?alt=media&amp;token=2b0dbf9d-093f-48ac-a405-564275aacb33" alt="" width="287"><figcaption></figcaption></figure>

**Best practices:**

* Use **low slippage (0.1%–0.5%)** for stable pairs or low volatility.
* Use **higher slippage (1%–5%)** for volatile or low-liquidity tokens. some tokens may at times even require more.
* Balance safety (avoid bad fills) with execution certainty (avoid failed txns).

***

> ⚠️ **Warning**\
> Very high slippage can expose you to **front-running or poor execution**. Adjust carefully based on market conditions.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FIxKHmc5ddl50l9BvNUma%2Fimage.png?alt=media&amp;token=707d40d4-308d-4e33-8864-fc9483e89f17" alt="" width="363"><figcaption></figcaption></figure>

**Priority Tip**

* A **Priority Tip** is an optional extra payment made to validators.
* It helps increase the likelihood of **faster trade confirmations**, especially:
  * During high network congestion
  * On high-volume tokens

**How it works:**

* Enter the amount you are willing to pay for prioritization.
* **Default value:** `0.0015`
* Higher tips = higher chance of faster execution.

***

{% hint style="info" %}
**TIP:** If network congestion is high, increasing your priority fee can help confirm transactions faster! you can adjust the Priority Tip in the trading panel.&#x20;
{% endhint %}


# Depositing Funds

How to deposit funds on Indexify

**Step 1. Open Wallet**

* Click the **Wallet icon** at the top of the page and hit the **Deposit** button.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2F8gJFlpP7Gxha39C09NxD%2Fimage.png?alt=media&amp;token=1d4940c6-acfc-4729-9017-6b7c63f262d2" alt="" width="563"><figcaption></figcaption></figure>

#### **Step 2. Select Deposit Method**

**Option A: Wallet Transfer (USDC only)**

* Deposit **USDC** directly to your trading wallet.
* ⚠️ **Important:** Indexify only operates with USDC.
  * Do **not** transfer any other assets to the deposit address.
  * If you mistakenly send another asset, you can export your key to a self-custody wallet (e.g., **Phantom**) and retrieve your funds.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FmEF5mUHfOHDjh7orYJSM%2Fimage.png?alt=media&amp;token=d62b0a84-6c0a-4d6b-9711-5947a6548f67" alt="" width="371"><figcaption></figcaption></figure>

**Option B: Buy with Swapped**

* Purchase crypto directly with our partner **Swapped.com**.
* This option allows you to fund your account using fiat or other payment methods supported by Swapped.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2Fc52JqWxmoeTDgv8tf6tb%2Fimage.png?alt=media&amp;token=162190b0-be09-4fbe-b8ab-7d701f169783" alt="" width="356"><figcaption></figcaption></figure>

**Indexify x Swapped provides a fast, secure, and hassle-free way to fund your account and start trading immediately.**\
\
Enjoy Trading!

{% hint style="danger" %}
NOTE: Indexify operates solely through the swapping of USDC, therefore, do not transfer any other asset to the address - though if you do, simply export your key into a third party self custody wallet provider (ex. Phantom) and retrieve your assets.
{% endhint %}


# Discover

Your gateway to finding top creators and stacks on Indexify.

* Browse leading creators ranked by performance and activity
* Search stacks, creators, or tokens to explore opportunities
* Follow creators or stacks to stay updated and invest with one click

👉 Where reputation, performance, and community activity come together - helping you decide who to follow and what to trade.

<table data-view="cards"><thead><tr><th></th><th data-type="content-ref"></th></tr></thead><tbody><tr><td></td><td><a href="/indexify/discover/creators">Creators</a></td></tr><tr><td></td><td><a href="/indexify/discover/viewing-stacks">Viewing Stacks</a></td></tr></tbody></table>


# Creators

Discover & Follow

Indexify’s proprietary algorithm evaluates both **creators** and **stacks**, helping you discover who to follow and where to invest. The **Discover Page** and **Leaderboard** highlight top-performing creators and their activity.

#### **Discover Page – Top Creators**

* **Creator** → The creator’s name or handle
* **Combined PnL (%)** → The aggregate performance of all the creator’s Stacks over the **last 4 hours**
* **Followers** → The number of users following that creator

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FchD7OLccvguXQb0l8akk%2FScreen%20Shot%202025-12-30%20at%2010.11.03%20AM.png?alt=media&amp;token=e5c01094-a8ee-46e2-ba47-9360aca2b4a8" alt=""><figcaption></figcaption></figure>

#### **Leaderboard – Creator Rankings**

Search and compare creators by key metrics:

* **Rank** → Creator’s position on the leaderboard
* **Creator** → Username or handle
* **Combined PnL (%)** → Aggregate performance of all the creator’s Stacks based on the **selected time interval**
* **Stacks Created** → Total number of Stacks launched
* **Points Earned** → Points accumulated through trading, creation, and engagement

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FEWpNdjiS8JX7NnxBPjGS%2FScreen%20Shot%202025-12-30%20at%2010.15.20%20AM.png?alt=media&amp;token=d42418a4-bf82-4d3e-b0b0-708329d05048" alt="" width="563"><figcaption></figcaption></figure>

#### **User Profiles**

Clicking a creator’s profile lets you:

* **Follow the creator**
* **Browse their stacks**
* **Select a stack** directly to follow or invest in

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FDJQGwnkhuxUm4b5yCKQ6%2FScreen%20Shot%202025-12-30%20at%2010.17.55%20AM.png?alt=media&amp;token=7756c3e5-0b18-4d10-97f8-34a18763a153" alt="" width="563"><figcaption></figcaption></figure>

✅ **Tip**\
Following creators and stacks helps surface relevant updates and new investment opportunities in your Discover feed.


# Viewing Stacks

Each stack page provides a complete overview of performance, trading options, and its underlying tokens.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FaAvSM2Fa108pPHjXdMdX%2Fimage.png?alt=media&amp;token=1342d40f-8a7e-4aec-887e-725d43136dda" alt="" width="563"><figcaption></figcaption></figure>

#### Header / Navigation

* **Index Name & Title** → e.g., *“Solana DeFi Core Index”*
* **Search Bar** → Search for stacks, creators, or tokens
* **User Controls** → Balance display, *My Stacks*, profile, share, fork, follow

#### **Performance**

* **Performance Chart**
* **Price Display** → Current index price + % change
* **Chart View** → Toggle between timeframes: *Live, 4H, 1D, 1W, 1M, Max*

#### **Metrics**

* 24H Trading Volume
* Weighted Market Cap
* Inception Date
* User Balance

#### **Trading Panel**

* **Buy / Sell Toggle**
* **Buying Power** → Available balance in USDC
* **Input Section** → Set trade size (manual entry or presets: $10, $50, $100, Max)
* **Action Buttons** → Buy / Sell execution

#### **Community / Activity**

* **Chat / Message Feed** → Displays updates, welcome messages, and user discussions

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2F3P7AX7J8wnu6BaqTHkuw%2Fimage.png?alt=media&amp;token=29e234c8-9140-458b-b85e-6ce42f9b8df3" alt=""><figcaption></figcaption></figure>

#### **Details Section**

* **Description** → Overview of what the stack represents (e.g., *“Top DeFi protocols driving trading, liquidity, and yield on Solana”*)
* **Creator Info** → Profile, # of stacks created, follower stats
* **Risk Label** → e.g., *Low / Medium / High Risk, Long / Short Term*

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2Fauy7QkW5jbVfcvPzvlEf%2Fimage.png?alt=media&amp;token=5099a5df-e982-4404-abb8-e0b7e50ea59b" alt="" width="528"><figcaption></figcaption></figure>

## Token Allocation

Each stack displays a breakdown of the tokens that make up the index.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2Ffx4pRlgd6omwn3T4uQJU%2Fimage.png?alt=media&amp;token=1c35548b-9896-4364-9349-edf51cc55dd7" alt="" width="528"><figcaption></figcaption></figure>

***

#### **Allocation Breakdown**

* Visual chart showing % distribution across tokens

#### **Token Table**

Columns typically include:

* **Name / Symbol**
* **Allocation %**
* **Market Cap**
* **Average Price**
* **Current Value**
* **User Holdings** (if any)
* **24H Performance**

***

✅ **Tip**\
Use the Allocation Breakdown to quickly see which tokens drive the stack’s performance.


# Trading Operation

Buying, Selling and Partial Orders on Indexify

<table data-view="cards"><thead><tr><th></th><th data-type="content-ref"></th></tr></thead><tbody><tr><td></td><td><a href="/indexify/trading-operation/buying-and-selling-stacks">Buying &amp; Selling Stacks</a></td></tr><tr><td></td><td><a href="/indexify/trading-operation/partial-orders">Partial Orders</a></td></tr></tbody></table>


# Buying & Selling Stacks

The core feature for the Indexify platform

{% hint style="warning" %}
All stack operations can only occur if the user is logged in. If the user is not logged in, a prompt will appear to act.
{% endhint %}

#### **Viewing a Stack**

* When you tap on a stack, you’ll see its detail screen.
* The detail screen includes a **Buy/Sell tab** where you can specify how much you want to buy/sell.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FxzrLejnc7WAbzKoHGINJ%2Fimage.png?alt=media&amp;token=517910d3-bfca-4868-ace7-c3adf46d90cf" alt="" width="563"><figcaption></figcaption></figure>

#### **Buying a Stack**

* Enter the amount you wish to buy.
* The system will automatically split your purchase across the stack’s tokens based on its allocation.
* Before confirming, you’ll see a **simulation of the trade**, including the total cost and associated fees.&#x20;

ℹ️ **Info**\
For more details on fees, see the **Fee Documentation**. [fee docs](https://indexify-1.gitbook.io/indexify.finance/~/revisions/aEbNNmQYFoRhushR1DUB/getting-started/fees).

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FTKMS7Npaja3dHhhJoODx%2Fimage.png?alt=media&amp;token=da5247ff-4649-4d01-bec6-1215efb15d2f" alt="" width="361"><figcaption></figcaption></figure>

#### **Selling a Stack**

* Go to the **Sell tab**.
* The system will display how much of the stack you currently hold and how much you can sell.
* Enter your sell amount and confirm.

<div align="left"><figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FkUxjumlV3EPtAlfhl3Wk%2Fimage.png?alt=media&amp;token=bec6c297-945c-4d90-892b-8cdeae835cd7" alt="" width="351"><figcaption></figcaption></figure></div>

#### **After the Operation**

* Your buy/sell order is sent to the blockchain for execution.
* Once confirmed, you’ll receive a **success notification**.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2F7URaNRyFm4jjkznPNadp%2Fimage.png?alt=media&amp;token=c6d45f79-deb4-40e5-8170-76e4e6802dbd" alt="" width="519"><figcaption></figcaption></figure>

{% hint style="info" %}
In future iterations, a history tab will present all buy/sell operations that the user has performed.
{% endhint %}


# Partial Orders

Sometimes, when buying a Stack, not every token can be purchased successfully (for example, due to liquidity, slippage or network issues). This creates a Partial Order.

Instead of getting stuck, Indexify gives you clear options to finalize:

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FJP9Mxy5yrx3avGk9kCoC%2FScreen%20Shot%202025-10-01%20at%202.07.18%20PM.png?alt=media&amp;token=bf7d8aba-6b19-47e9-9e24-01058b3592c5" alt="" width="375"><figcaption></figcaption></figure>

***

#### **How Partial Orders Work**

* If some tokens in your order succeed and others fail → the order is marked as **Partial**.
* You’ll get a notification and a breakdown of what was bought vs. what failed.\ <br>

  <div align="center" data-full-width="true"><figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FObeseTBkVbfVjZbmZ4P8%2FScreen%20Shot%202025-10-01%20at%202.07.48%20PM.png?alt=media&amp;token=e77d72f1-ec4c-4f3b-b64c-4a878d7ba43d" alt="" width="375"><figcaption></figcaption></figure></div>

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FFgVx1JSQ27fFVPseZhqD%2FScreen%20Shot%202025-10-01%20at%202.07.53%20PM.png?alt=media&amp;token=f5f7bc15-a9a3-42f8-af6c-a6b923488feb" alt="" width="375"><figcaption></figcaption></figure>

***

#### **Your Options**

When a Partial Order happens, you can choose to:

* **Retry** → Attempt to buy the tokens that failed.
* **Acknowledge** → Accept the partial purchase as-is.
* **Sell All** → Instantly sell the tokens that did succeed.

  <figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2F5Uw1mrQD1ns44D6flznH%2FScreen%20Shot%202025-10-01%20at%202.07.59%20PM.png?alt=media&amp;token=00d9500f-4e1a-422e-8076-f486c285c51e" alt="" width="366"><figcaption></figcaption></figure>

***

#### **Order Details**

In the Partial Order view, you’ll see:

* Tokens successfully purchased
* Tokens that failed
* Current value of successful tokens

***

> ✅ **Tip**\
> Partial Orders are common in crypto trading during high volume or low liquidity. Always review the breakdown before choosing your next action.


# Your Portfolio

The Portfolio Dashboard gives you a quick and clear view of the status and performance of your investments. Along with a quick view into your incentives.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FImneg2o6hto6whS9xeWX%2FScreen%20Shot%202025-12-30%20at%2010.23.26%20AM.png?alt=media&amp;token=1708c933-fa1e-431e-aba3-9d3ef6cb59a2" alt="" width="563"><figcaption></figcaption></figure>

#### **Financial Summary**

* **Your Balance** → The total value of all assets in your account, including invested assets and uninvested cash
* **Invested** → The current value of assets you hold across all Stacks
* **Cash** → Uninvested funds available in your account
* **Points Earned** → Points accumulated from trading, creating Stacks, and platform engagement
* **Total Creator Fees** → Cumulative fees earned from users trading your Stacks
* **Referral Rewards** → Fees earned from activity generated by users you’ve referred
* **Referral Code** → Your unique code used to invite new users and earn referral rewards

***

**Account Overview**

* **Current Balance** → The total value of your account at the present moment
* **% Gain/Loss** → Performance change over the selected timeframe
* **Timeframe Selector** → 4H · 1D · 1W · 1M · Max

**Actions**

* **Deposit Funds** → Add funds to your account
* **Withdraw Funds** → Transfer funds out of your account

***

#### **Portfolio Composition**

A detailed breakdown of the individual assets in your portfolio, showing:

* Each holding’s **value**
* Each holding’s **performance**

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2Fo39jAWDq1bn4lKFQY1U4%2Fimage.png?alt=media&amp;token=bdb49eec-25cb-42a5-9068-ac42a4928287" alt=""><figcaption></figcaption></figure>

#### **Transaction History**

A record of your trading activity, including:

* **Type** → Buy or sell
* **Asset** → The asset traded
* **Status** → Current state of the trade
* **Date** → Timestamp of when the trade occurred
* **Amount** → Value of the trade

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FqbAfWw1giBT1NSozskcP%2FScreen%20Shot%202025-12-30%20at%2010.29.32%20AM.png?alt=media&amp;token=65739544-95d0-4d4c-ab92-63ab9e085533" alt=""><figcaption></figcaption></figure>

All trades are recorded onchain and update automatically as they are processed.


# Your Profile

User Profile Menu

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FU9J2pOaCtcLdNz1ULPjY%2FScreen%20Shot%202025-12-30%20at%2010.31.42%20AM.png?alt=media&amp;token=ef629bad-963b-4cd7-8c7a-94d3c45670bb" alt="" width="154"><figcaption></figcaption></figure>

Click your profile picture in the top-right corner of the screen to access:

* **Profile Picture** → View or update your profile image
* **Incentives** → Access your points, rewards, and creator incentives
* **Settings** → Manage account preferences and security options
* **Theme** → Switch between light and dark mode
* **Price View** → Toggle between **$** and **×** price display
* **Log Out** → Securely exit your account


# Notifications

The Notification Center keeps you up to date on activity across your account and the Stacks you care about.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FYT7cPK0NtROap3O3n8ce%2FScreen%20Shot%202025-12-30%20at%2010.35.04%20AM.png?alt=media&amp;token=141b4b5f-75a5-466b-9050-3607349cfa45" alt="" width="276"><figcaption></figcaption></figure>

**You can receive alerts for:**

* **Stack Activity** → When someone follows a Stack you created or when Stacks you follow are updated
* **Creator Notes** → When a Stack creator publishes a new note
* **Price Movement Alerts** → When tokens inside your Stacks experience significant price changes
* **Trading Activity** → Deposits, withdrawals, buys, and sells
* **Creator Fees** → When you earn fees from users trading your Stacks
* **Trending Stacks** → When Stacks you’ve created or follow begin trending on Indexify

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2Fg4IozfVPFsGoHrDOpEPl%2FScreen%20Shot%202025-12-30%20at%2010.41.01%20AM.png?alt=media&amp;token=5f0edea8-be74-4efd-88c9-60766595ddfc" alt="" width="375"><figcaption></figcaption></figure>

All notification preferences can be managed in **Settings → Notifications**, where you can customize which alerts you receive.


# My Stacks

Stacks let you bundle tokens into investable strategies that others can follow.  The My Stacks page is your dashboard for creating and managing Stacks.

<figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FmANB8ta24nRjQktdDJ5m%2Fimage.png?alt=media&amp;token=05b2abb1-88ff-4738-a76b-53eddfd556b9" alt="" width="563"><figcaption></figcaption></figure>

#### **Create a Stack**

* Click **CREATE STACK** to start building a new Stack.
* You’ll be guided through entering details such as name, description, risk level, and asset allocation.

<div data-full-width="false"><figure><img src="https://3178877330-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtXxHyqKQI5okN7XAJSj7%2Fuploads%2FVTLq4qGUBZETiqZf9mOW%2Fimage.png?alt=media&amp;token=092652df-d7d5-4984-9604-184b06cb908e" alt="" width="563"><figcaption></figcaption></figure></div>

#### **Stack Overview**

View and manage all the Stacks you own.

* Use filters to refine the view by:
  * Age
  * Number of Investors
  * Comments
  * Total Value
  * Return %
  * Trading Volume
  * Generated Fees

✅ **Tip**\
Filters help you quickly focus on the Stacks that matter most to your strategy.


# Creator Notes

Creator Notes are where Stack creators share their insights, ideas, and updates.

Each Stack has its own Notes section where the creator can post:

* The thinking behind why they built the Stack
* Market outlook or trade rationale
* Updates on entries, exits, or new positions
* Commentary on performance

Notes make it easy for followers to understand the strategy and stay updated as it evolves.

**In short:**\
Creator Notes give context to every Stack - so you can follow the trades *and* the thinking behind them.


# Overview

## Indexify API Overview

The Indexify API provides programmatic access to the Indexify platform — a token trading and stack indexing system on Solana. Use it to manage accounts, discover and trade stacks, track portfolios, and access market data.

### Base URL

All endpoints are accessed under this base URL. Most endpoints use `POST` with a JSON body. The specific operation is selected via the `?action=` query parameter.

### Authentication

Pass your API key in the `X-API-KEY` header on every authenticated request:

```
X-API-KEY: ix_your_api_key_here
```

API keys use the `ix_` prefix. To obtain a key, contact the Indexify team with your Indexify username.

Some endpoints are publicly accessible without authentication. When authentication is optional, providing a key enriches the response with user-specific data (e.g., `is_following`, `user_has_held`).

### Request Format

* **Content-Type:** `application/json`
* **Method:** `POST` for most endpoints; `GET` for transaction history, leaderboard, and referral data
* **Action routing:** Most endpoints serve multiple actions via `?action=<name>` in the query string

OpenAI Spec: <https://openapi.gitbook.com/o/VeXVmIueGvLpVdXaTsb8/spec/indexify-0-1-8.json>

### Error Format

All errors return a JSON object with an `error` field:

```json
{
  "error": "Description of the error"
}
```

Common HTTP status codes: `400` (bad request), `401` (unauthorized), `403` (forbidden), `404` (not found), `500` (server error).

***

### Endpoints

#### Account

Manage user profiles, social links, notifications, and notification preferences.

| Method | Endpoint                            | Action              | Auth     | Description                                                   |
| ------ | ----------------------------------- | ------------------- | -------- | ------------------------------------------------------------- |
| POST   | `/api/user_info.php`                | `fetch`             | Required | Get authenticated user's full profile                         |
| POST   | `/api/user_info.php`                | `update`            | Required | Update profile fields (username, bio, slippage, priority fee) |
| POST   | `/api/user_info.php`                | `check_name`        | None     | Check if a username is available                              |
| POST   | `/api/user_info.php`                | `search`            | None     | Search users by username or bio                               |
| POST   | `/api/user_info.php`                | `delete_account`    | Required | Permanently delete account (requires 2FA)                     |
| POST   | `/api/profile.php`                  | `twitter`           | Required | Set or remove Twitter handle                                  |
| POST   | `/api/profile.php`                  | `telegram`          | Required | Set or remove Telegram handle                                 |
| POST   | `/api/profile.php`                  | `discord`           | Required | Set or remove Discord username                                |
| POST   | `/api/profile.php`                  | `linkedin`          | Required | Set or remove LinkedIn URL                                    |
| POST   | `/api/profile.php`                  | `personal`          | Required | Set or remove personal website URL                            |
| POST   | `/api/notifications.php`            | `get_notifications` | Required | Get paginated notifications                                   |
| POST   | `/api/notifications.php`            | `get_unread_count`  | Required | Get unread notification count                                 |
| POST   | `/api/notifications.php`            | `mark_read`         | Required | Mark a notification as read                                   |
| POST   | `/api/notifications.php`            | `dismiss_all`       | Required | Dismiss all notifications                                     |
| POST   | `/api/notifications.php`            | `delete`            | Required | Delete a single notification                                  |
| POST   | `/api/notifications.php`            | `delete_all`        | Required | Delete all notifications                                      |
| POST   | `/api/notification_preferences.php` | `get`               | Required | Get notification preferences                                  |
| POST   | `/api/notification_preferences.php` | `update`            | Required | Update a single preference                                    |
| POST   | `/api/notification_preferences.php` | `update_bulk`       | Required | Update multiple preferences at once                           |

***

#### Stacks

Discover, create, manage, and query holdings for stacks (curated token portfolios).

| Method | Endpoint              | Action                 | Auth     | Description                                         |
| ------ | --------------------- | ---------------------- | -------- | --------------------------------------------------- |
| POST   | `/api/stack_info.php` | `paginated_list`       | Optional | Browse stacks with filters, sorting, and pagination |
| POST   | `/api/stack_info.php` | `trending`             | Optional | Get trending stacks (capped at 50)                  |
| POST   | `/api/stack_info.php` | `official`             | Optional | Get official Indexify stacks                        |
| POST   | `/api/stack_info.php` | `related_stacks`       | Optional | Find stacks containing a specific token             |
| POST   | `/api/stack_info.php` | `fetch`                | Optional | Fetch stacks by IDs, slugs, or creator              |
| POST   | `/api/stack_info.php` | `my_stacks`            | Required | Get the authenticated user's created stacks         |
| POST   | `/api/stack_info.php` | `create`               | Required | Create a new stack                                  |
| POST   | `/api/stack_info.php` | `update`               | Required | Update stack name, description, or category         |
| POST   | `/api/stack_info.php` | `close`                | Required | Permanently close a stack                           |
| POST   | `/api/stack_info.php` | `check_name`           | None     | Validate a proposed stack name                      |
| POST   | `/api/stack_info.php` | `check_description`    | None     | Validate a proposed stack description               |
| POST   | `/api/stack_info.php` | `user_stack_holdings`  | Required | Get your holdings and P\&L for a stack              |
| POST   | `/api/stack_info.php` | `get_creator_holdings` | None     | Get the creator's holdings (if public)              |
| POST   | `/api/stack_info.php` | `investors`            | None     | Get investor count for a stack                      |
| POST   | `/api/stack_info.php` | `followers`            | None     | Get follower count for a stack                      |

***

#### Stack Chat

Community messages and creator notes on stack pages.

| Method | Endpoint        | Action       | Auth     | Description                                |
| ------ | --------------- | ------------ | -------- | ------------------------------------------ |
| POST   | `/api/chat.php` | `addMessage` | Required | Post a message or creator note             |
| POST   | `/api/chat.php` | `getAll`     | Optional | Get paginated chat messages                |
| POST   | `/api/chat.php` | `togglePin`  | Required | Pin or unpin a creator note (creator only) |

***

#### Stack Wars

Time-bound competitions between stacks with AI-generated battle reports.

| Method | Endpoint              | Action   | Auth     | Description                               |
| ------ | --------------------- | -------- | -------- | ----------------------------------------- |
| POST   | `/api/stack_wars.php` | `list`   | Optional | List all stack wars                       |
| POST   | `/api/stack_wars.php` | `detail` | Optional | Get full details and AI summary for a war |

***

#### Tokens

Search, list, and get details on tokens. Follow tokens to track them.

| Method | Endpoint                 | Action              | Auth     | Description                            |
| ------ | ------------------------ | ------------------- | -------- | -------------------------------------- |
| POST   | `/api/token_info.php`    | `search`            | None     | Search tokens by name or symbol        |
| POST   | `/api/token_info.php`    | `new`               | Required | Add a new token by mint address        |
| POST   | `/api/token_info.php`    | `detail`            | Optional | Get full token details and stats       |
| POST   | `/api/token_info.php`    | `list`              | Optional | List tokens with filters and sorting   |
| POST   | `/api/token_info.php`    | `paginated_list`    | Optional | List tokens with pagination metadata   |
| POST   | `/api/token_info.php`    | `fetch`             | Optional | Alias for list                         |
| POST   | `/api/token_info.php`    | `categories`        | None     | Get all token categories               |
| POST   | `/api/token_info.php`    | `follow`            | Required | Follow or unfollow a token (toggle)    |
| POST   | `/api/token_info.php`    | `followers`         | Optional | Get follower count for a token         |
| POST   | `/api/token_trading.php` | `get_trading_info`  | Optional | Get trading readiness info for a token |
| POST   | `/api/token_trading.php` | `get_company_stats` | None     | Get aggregate company stack count      |

***

#### Trading

Execute swaps, check balances, manage orders, and view transaction history.

| Method | Endpoint                        | Action            | Auth     | Description                                                     |
| ------ | ------------------------------- | ----------------- | -------- | --------------------------------------------------------------- |
| POST   | `/api/txn.php`                  | `swap`            | Required | Buy or sell a stack                                             |
| POST   | `/api/txn.php`                  | `balance`         | Required | Get all token balances                                          |
| POST   | `/api/txn.php`                  | `usdc_balance`    | Required | Get USDC balance                                                |
| POST   | `/api/txn.php`                  | `total_balance`   | Required | Get total portfolio value in USDC                               |
| POST   | `/api/txn.php`                  | `address`         | Required | Get wallet public key                                           |
| POST   | `/api/txn.php`                  | `withdraw_usdc`   | Required | Withdraw USDC to an external wallet (requires SMS verification) |
| POST   | `/api/txn.php`                  | `export_key`      | Required | Export wallet private key (requires SMS verification)           |
| POST   | `/api/orders.php`               | `details`         | Required | Get order details and transactions                              |
| POST   | `/api/orders.php`               | `status`          | Required | Get order status                                                |
| POST   | `/api/orders.php`               | `partial_details` | Required | Get partial order breakdown                                     |
| POST   | `/api/orders.php`               | `acknowledge`     | Required | Acknowledge a partial order                                     |
| POST   | `/api/orders.php`               | `retry`           | Required | Retry failed tokens in a partial order                          |
| POST   | `/api/orders.php`               | `sell_all`        | Required | Sell all tokens from a partial order                            |
| POST   | `/api/orders.php`               | `retry_chain`     | Required | Get full retry history for an order                             |
| POST   | `/api/user_orders.php`          | —                 | Required | List all orders for the authenticated user                      |
| POST   | `/api/stack_partial_orders.php` | —                 | Required | List outstanding partial orders for a stack                     |
| GET    | `/api/transaction_history.php`  | `list`            | Required | Get paginated transaction history                               |
| GET    | `/api/transaction_history.php`  | `detail`          | Required | Get a single transaction with token breakdown                   |
| GET    | `/api/transaction_history.php`  | `summary`         | Required | Get transaction summary counts                                  |

***

#### Fees

Calculate trading fees and retrieve fee bounds. No authentication required.

| Method | Endpoint       | Action               | Auth | Description                                 |
| ------ | -------------- | -------------------- | ---- | ------------------------------------------- |
| POST   | `/api/fee.php` | `calculate`          | None | Calculate fees for a given amount and stack |
| POST   | `/api/fee.php` | `min_buy`            | None | Get the minimum buy amount                  |
| POST   | `/api/fee.php` | `creator_fee_bounds` | None | Get min, max, and default creator fee       |

***

#### Social

Follow stacks and users, view leaderboards, public profiles, and referrals.

| Method | Endpoint                | Action                   | Auth     | Description                                     |
| ------ | ----------------------- | ------------------------ | -------- | ----------------------------------------------- |
| POST   | `/api/subscription.php` | `followers`              | Required | Get stack follower count and follow status      |
| POST   | `/api/subscription.php` | `follow`                 | Required | Follow a stack                                  |
| POST   | `/api/subscription.php` | `unfollow`               | Required | Unfollow a stack                                |
| POST   | `/api/subscription.php` | `follow_user`            | Required | Follow a user                                   |
| POST   | `/api/subscription.php` | `unfollow_user`          | Required | Unfollow a user                                 |
| POST   | `/api/subscription.php` | `user_followers`         | Optional | Get a user's followers                          |
| POST   | `/api/subscription.php` | `user_following`         | None     | Get who a user follows                          |
| POST   | `/api/subscription.php` | `user_follow_status`     | Required | Check mutual follow status                      |
| GET    | `/api/user_info.php`    | `leaderboard`            | Optional | Get the creator leaderboard                     |
| POST   | `/api/user_info.php`    | `top_creators`           | Optional | Get top 5 creators                              |
| POST   | `/api/user_info.php`    | `public_profile`         | None     | Get a user's public profile                     |
| POST   | `/api/user_info.php`    | `public_profile_metrics` | None     | Get a user's performance metrics                |
| POST   | `/api/refer.php`        | —                        | Required | Generate a referral link                        |
| GET    | `/api/referrals.php`    | —                        | Required | Get multi-level referral data with volume stats |

***

#### Market Data

Bulk price and stats lookups. No authentication required.

| Method | Endpoint                    | Action | Auth | Description                                        |
| ------ | --------------------------- | ------ | ---- | -------------------------------------------------- |
| POST   | `/api/bulk_stack_stats.php` | —      | None | Get prices and change stats for up to 1,000 stacks |
| POST   | `/api/bulk_token_stats.php` | —      | None | Get prices and change stats for up to 1,000 tokens |

***

#### Search

Unified search across stacks, creators, and tokens. No authentication required.

| Method | Endpoint          | Action | Auth | Description                                                              |
| ------ | ----------------- | ------ | ---- | ------------------------------------------------------------------------ |
| POST   | `/api/search.php` | —      | None | Simple search (stack names) or faceted search (stacks, creators, tokens) |

***

### Rate Limits

To ensure platform stability and protect against automated abuse, the Indexify API enforces rate limits on all endpoints. These limits are applied per client IP address.

* **Base Rate:** 10 requests per second
* **Burst Capacity:** 100 requests
* **Algorithm:** Leaky Bucket (Queue-based)

#### How It Works: The "Leaky Bucket"

Indexify uses a queue-based system to handle traffic. This allows your application to send a sudden burst of requests without being immediately blocked, but it enforces a steady processing speed.

1. **Immediate Processing:** Your first request is processed instantly.
2. **Queueing (Burst):** If you send a spike of up to 100 requests simultaneously (e.g., during a page load), the server will accept them all into a queue.
3. **Smoothing:** The server "leaks" requests out of that queue at a steady rate.

> **The Result:** If you fire 50 requests at once, the 1st request is handled immediately, but the 50th request will experience a \~4.9-second delay (Time to First Byte) while it waits its turn in the queue.

#### Rate Limit Errors

If you exceed your Burst Capacity (more than 100 requests waiting in the queue), the server will stop queueing and immediately return an error:

**HTTP 503 Service Unavailable** (or **429 Too Many Requests**)

#### Best Practices for Developers

* **Throttle Locally:** If your application needs to make dozens of requests, space them out \~100ms on the client side to avoid the server-side queue delay.
* **Handle Retries:** Implement an exponential backoff strategy if you receive a `503` or `429` status code.


# Account

## Fetch authenticated user profile

> Returns the full profile for the currently authenticated user including roles, wallet address, and masked phone number.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/user_info.php?action=fetch":{"post":{"operationId":"userInfoFetch","summary":"Fetch authenticated user profile","description":"Returns the full profile for the currently authenticated user including roles, wallet address, and masked phone number.\n","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["fetch"]}}],"responses":{"200":{"description":"Full user profile.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"username":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"bio":{"type":"string","nullable":true},"slippage":{"type":"string"},"priority_fee":{"type":"string"},"phone_verified":{"type":"boolean"},"phone_number_last_2":{"type":"string","nullable":true,"description":"Last two digits of the phone number."},"twitter":{"type":"string","nullable":true},"telegram":{"type":"string","nullable":true},"discord":{"type":"string","nullable":true},"linkedin":{"type":"string","nullable":true},"personal":{"type":"string","nullable":true},"wallet_address":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"roles":{"type":"array","items":{"type":"string"}}}}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"User not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /api/user\_info.php?action=update

> Update user profile fields

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/user_info.php?action=update":{"post":{"operationId":"userInfoUpdate","summary":"Update user profile fields","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["update"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","minLength":3,"maxLength":30,"description":"Alphanumeric + underscores only."},"bio":{"type":"string","description":"Free-text bio. Send empty string to clear."},"slippage":{"type":"string","description":"Slippage tolerance as a decimal string."},"priority_fee":{"type":"string","description":"Priority fee in SOL (0 to 0.002)."}}}}}},"responses":{"200":{"description":"Update succeeded.","content":{"application/json":{"schema":{"type":"object","required":["success"],"properties":{"success":{"type":"boolean"},"updates":{"type":"object","additionalProperties":true,"description":"Map of updated field names to their new values."}}}}}},"400":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /api/user\_info.php?action=check\_name

> Check username availability

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[],"paths":{"/api/user_info.php?action=check_name":{"post":{"operationId":"userInfoCheckName","summary":"Check username availability","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["check_name"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"}}}}}},"responses":{"200":{"description":"Username status.","content":{"application/json":{"schema":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["OK","TAKEN","INVALID"]}}}}}}}}}}}
```

## POST /api/user\_info.php?action=search

> Search users by username or bio

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[],"paths":{"/api/user_info.php?action=search":{"post":{"operationId":"userInfoSearch","summary":"Search users by username or bio","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["search"]}},{"name":"query","in":"query","required":true,"schema":{"type":"string"},"description":"Search term matched against username and bio."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"maximum":100}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0}},{"name":"include_stats","in":"query","required":false,"schema":{"type":"string","enum":["true","false"],"default":"false"},"description":"When \"true\", each user object includes a `stats` sub-object."}],"responses":{"200":{"description":"Matching users with pagination metadata.","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string"},"avatar":{"type":"string"},"display_name":{"type":"string","nullable":true},"verified":{"type":"boolean"},"stats":{"type":"object","description":"Present only when `include_stats=true`.","additionalProperties":true}}}},"pagination":{"type":"object","properties":{"total_count":{"type":"integer"},"has_next":{"type":"boolean"},"offset":{"type":"integer"},"limit":{"type":"integer"}}}}}}}}}}}}}
```

## Delete the authenticated user's account

> Permanently deletes the user account after 2FA verification.  All stacks are archived, follow relationships removed, and the wallet private key is returned one final time.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/user_info.php?action=delete_account":{"post":{"operationId":"userInfoDeleteAccount","summary":"Delete the authenticated user's account","description":"Permanently deletes the user account after 2FA verification.  All stacks are archived, follow relationships removed, and the wallet private key is returned one final time.\n","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["delete_account"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["verification_code"],"properties":{"verification_code":{"type":"string","description":"2FA verification code."}}}}}},"responses":{"200":{"description":"Account deleted successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"private_key":{"type":"string","description":"Wallet private key returned for final export."},"retry_count":{"type":"integer"},"deletion_summary":{"type":"object","properties":{"user_id":{"type":"integer"},"archived_stacks":{"type":"integer"},"follow_relationships_removed":{"type":"integer"}}}}}}}},"400":{"description":"Validation error (2FA required, code required, invalid code, remaining balance).\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /api/profile.php?action=twitter

> Update Twitter handle

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/profile.php?action=twitter":{"post":{"operationId":"profileUpdateTwitter","summary":"Update Twitter handle","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["twitter"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"Twitter/X username (1-15 chars, alphanumeric + underscores). Send empty string or null to remove.\n"}}}}}},"responses":{"200":{"description":"Handle updated or removed.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success"]},"message":{"type":"string"}}}}}},"400":{"description":"Validation error.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"]},"message":{"type":"string"}}}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /api/profile.php?action=telegram

> Update Telegram handle

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/profile.php?action=telegram":{"post":{"operationId":"profileUpdateTelegram","summary":"Update Telegram handle","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["telegram"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"Telegram username (1-100 chars, alphanumeric + underscores). Send empty string or null to remove.\n"}}}}}},"responses":{"200":{"description":"Handle updated or removed.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success"]},"message":{"type":"string"}}}}}},"400":{"description":"Validation error.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"]},"message":{"type":"string"}}}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /api/profile.php?action=discord

> Update Discord username

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/profile.php?action=discord":{"post":{"operationId":"profileUpdateDiscord","summary":"Update Discord username","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["discord"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"Discord username (2-32 chars, lowercase alphanumeric + underscore + period, no consecutive periods) or legacy format (User#1234).  Send empty string or null to remove.\n"}}}}}},"responses":{"200":{"description":"Username updated or removed.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success"]},"message":{"type":"string"}}}}}},"400":{"description":"Validation error.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"]},"message":{"type":"string"}}}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /api/profile.php?action=linkedin

> Update LinkedIn profile URL

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/profile.php?action=linkedin":{"post":{"operationId":"profileUpdateLinkedin","summary":"Update LinkedIn profile URL","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["linkedin"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"Full LinkedIn profile URL starting with `https://www.linkedin.com/in/` or `https://linkedin.com/in/`. Send empty string or null to remove.\n"}}}}}},"responses":{"200":{"description":"Profile URL updated or removed.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success"]},"message":{"type":"string"}}}}}},"400":{"description":"Validation error.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"]},"message":{"type":"string"}}}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /api/profile.php?action=personal

> Update personal website URL

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/profile.php?action=personal":{"post":{"operationId":"profileUpdatePersonal","summary":"Update personal website URL","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["personal"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"Any valid URL.  Send empty string or null to remove.\n"}}}}}},"responses":{"200":{"description":"Website URL updated or removed.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success"]},"message":{"type":"string"}}}}}},"400":{"description":"Validation error.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"]},"message":{"type":"string"}}}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /api/notifications.php?action=get\_notifications

> Get paginated notifications

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/notifications.php?action=get_notifications":{"post":{"operationId":"notificationsGet","summary":"Get paginated notifications","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["get_notifications"]}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"integer","default":1,"minimum":1},"limit":{"type":"integer","default":20,"minimum":1,"maximum":100},"auto_cleanup":{"type":"boolean","default":false,"description":"When true, old notifications are automatically purged."}}}}}},"responses":{"200":{"description":"Paginated notifications list.","content":{"application/json":{"schema":{"type":"object","properties":{"notifications":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"origin":{"type":"string","enum":["stack_follow","price_movement","transaction_deposit","transaction_withdrawal","transaction_buy","transaction_sell","creator_fee_received","creator_note","trending_stack","stack_closed"]},"type":{"type":"string","enum":["transaction","system","social","trading","achievement","stack","general"]},"content":{"type":"string"},"read":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"metadata":{"type":"object","additionalProperties":true}}}},"pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"total_count":{"type":"integer"},"total_pages":{"type":"integer"}}}}}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /api/notifications.php?action=get\_unread\_count

> Get unread notification count

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/notifications.php?action=get_unread_count":{"post":{"operationId":"notificationsUnreadCount","summary":"Get unread notification count","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["get_unread_count"]}}],"responses":{"200":{"description":"Unread count.","content":{"application/json":{"schema":{"type":"object","required":["unread_count"],"properties":{"unread_count":{"type":"integer"}}}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /api/notifications.php?action=mark\_read

> Mark a single notification as read

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"SuccessMessage":{"type":"object","required":["success","message"],"properties":{"success":{"type":"boolean"},"message":{"type":"string"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/notifications.php?action=mark_read":{"post":{"operationId":"notificationsMarkRead","summary":"Mark a single notification as read","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["mark_read"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["notification_id"],"properties":{"notification_id":{"type":"integer"}}}}}},"responses":{"200":{"description":"Notification marked as read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessMessage"}}}},"400":{"description":"Missing or invalid notification_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Notification not found or does not belong to user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /api/notifications.php?action=dismiss\_all

> Dismiss all notifications

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"SuccessMessage":{"type":"object","required":["success","message"],"properties":{"success":{"type":"boolean"},"message":{"type":"string"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/notifications.php?action=dismiss_all":{"post":{"operationId":"notificationsDismissAll","summary":"Dismiss all notifications","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["dismiss_all"]}}],"responses":{"200":{"description":"All notifications dismissed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessMessage"}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /api/notifications.php?action=delete

> Delete a single notification

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"SuccessMessage":{"type":"object","required":["success","message"],"properties":{"success":{"type":"boolean"},"message":{"type":"string"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/notifications.php?action=delete":{"post":{"operationId":"notificationsDelete","summary":"Delete a single notification","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["delete"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["notification_id"],"properties":{"notification_id":{"type":"integer"}}}}}},"responses":{"200":{"description":"Notification deleted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessMessage"}}}},"400":{"description":"Missing or invalid notification_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Notification not found or does not belong to user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /api/notifications.php?action=delete\_all

> Delete all notifications

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"SuccessMessage":{"type":"object","required":["success","message"],"properties":{"success":{"type":"boolean"},"message":{"type":"string"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/notifications.php?action=delete_all":{"post":{"operationId":"notificationsDeleteAll","summary":"Delete all notifications","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["delete_all"]}}],"responses":{"200":{"description":"All notifications deleted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessMessage"}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /api/notification\_preferences.php?action=get

> Get notification preferences

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/notification_preferences.php?action=get":{"post":{"operationId":"notificationPreferencesGet","summary":"Get notification preferences","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["get"]}}],"responses":{"200":{"description":"List of notification type preferences.","content":{"application/json":{"schema":{"type":"object","required":["preferences"],"properties":{"preferences":{"type":"array","items":{"type":"object","required":["notification_type","enabled"],"properties":{"notification_type":{"type":"string","enum":["stack_follow","price_movement","transaction","creator_fee","creator_note","trending_stack","stack_closed"]},"enabled":{"type":"boolean"}}}}}}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /api/notification\_preferences.php?action=update

> Update a single notification preference

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"SuccessMessage":{"type":"object","required":["success","message"],"properties":{"success":{"type":"boolean"},"message":{"type":"string"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/notification_preferences.php?action=update":{"post":{"operationId":"notificationPreferencesUpdate","summary":"Update a single notification preference","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["update"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["notification_type","enabled"],"properties":{"notification_type":{"type":"string","enum":["stack_follow","price_movement","transaction","creator_fee","creator_note","trending_stack","stack_closed"]},"enabled":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Preference updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessMessage"}}}},"400":{"description":"Missing required fields.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## POST /api/notification\_preferences.php?action=update\_bulk

> Update multiple notification preferences at once

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"SuccessMessage":{"type":"object","required":["success","message"],"properties":{"success":{"type":"boolean"},"message":{"type":"string"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/notification_preferences.php?action=update_bulk":{"post":{"operationId":"notificationPreferencesUpdateBulk","summary":"Update multiple notification preferences at once","tags":["Account"],"parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["update_bulk"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["preferences"],"properties":{"preferences":{"type":"array","minItems":1,"items":{"type":"object","required":["notification_type","enabled"],"properties":{"notification_type":{"type":"string","enum":["stack_follow","price_movement","transaction","creator_fee","creator_note","trending_stack","stack_closed"]},"enabled":{"type":"boolean"}}}}}}}}},"responses":{"200":{"description":"All preferences updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessMessage"}}}},"400":{"description":"Missing or empty preferences array.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```


# Stacks

## Stack information, discovery, management, and holdings

> Unified endpoint for all stack operations. The \`action\` query parameter selects the sub-operation. Request/response shapes vary by action.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"StackObject":{"type":"object","description":"Canonical stack representation returned by discovery and fetch actions. Exact fields may vary by context (discovery vs portfolio vs trending).\n","properties":{"id":{"type":"integer"},"stack_name":{"type":"string"},"slug":{"type":"string"},"description":{"type":"string","nullable":true},"topic":{"type":"string","nullable":true,"description":"Stack risk/duration category."},"creator_fee":{"type":"number"},"price":{"type":"number","nullable":true},"weighted_market_cap":{"type":"number","nullable":true},"change4H":{"type":"number","nullable":true},"change1D":{"type":"number","nullable":true},"change1W":{"type":"number","nullable":true},"change1M":{"type":"number","nullable":true},"changeAll":{"type":"number","nullable":true},"token_count":{"type":"integer"},"investor_count":{"type":"integer"},"is_company_stack":{"type":"boolean"},"archived":{"type":"boolean"},"show_creator_holdings":{"type":"boolean"},"created_at":{"type":"integer","description":"Unix timestamp."},"time_p":{"type":"integer","nullable":true,"description":"Unix timestamp of last price update."},"tvl":{"type":"number","nullable":true,"description":"Total Value Locked in USD. Only present when tvl=true in request."},"user":{"type":"object","description":"Public creator profile.","properties":{"username":{"type":"string"},"avatar":{"type":"string","nullable":true},"bio":{"type":"string","nullable":true},"stacks_count":{"type":"integer"},"telegram":{"type":"string","nullable":true},"discord":{"type":"string","nullable":true},"twitter":{"type":"string","nullable":true},"linkedin":{"type":"string","nullable":true},"personal":{"type":"string","nullable":true}}},"tokens":{"type":"array","description":"Token allocations within the stack.","items":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"image_url":{"type":"string","nullable":true},"weight":{"type":"number"},"is_verified":{"type":"boolean"}}}}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/stack_info.php":{"post":{"tags":["Stacks"],"summary":"Stack information, discovery, management, and holdings","description":"Unified endpoint for all stack operations. The `action` query parameter selects the sub-operation. Request/response shapes vary by action.\n","parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["paginated_list","trending","official","related_stacks","fetch","my_stacks","create","update","close","edit_allocation","version_history","check_name","check_description","user_stack_holdings","get_creator_holdings","investors","followers"]},"description":"The sub-action to invoke."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"title":"paginated_list","type":"object","required":["limit","offset"],"properties":{"limit":{"type":"integer","description":"Number of stacks to return."},"offset":{"type":"integer","description":"Pagination offset."},"sort":{"type":"string","enum":["change4H","change1D","change1W","change1M","changeAll","newest","oldest","price","mcap","time_p","stackIds"],"description":"Sort field."},"order":{"type":"string","enum":["ASC","DESC"],"description":"Sort direction."},"categories":{"type":"array","items":{"type":"string"},"description":"Filter by stack risk categories."},"token_categories":{"type":"array","items":{"type":"string"},"description":"Filter by token categories."},"token_categories_match_all":{"type":"boolean","description":"When true, stack must contain tokens matching ALL listed token_categories."},"following":{"type":"string","enum":["all","following","not_following"],"description":"Filter by follow status (requires auth)."},"userIds":{"type":"array","items":{"type":"integer"},"description":"Filter by creator user IDs."},"usernames":{"type":"array","items":{"type":"string"},"description":"Filter by creator usernames."},"stackIds":{"type":"array","items":{"type":"integer"},"description":"Filter by specific stack IDs."},"slugs":{"type":"array","items":{"type":"string"},"description":"Filter by stack slugs."},"price_min":{"type":"number","description":"Minimum stack price filter."},"price_max":{"type":"number","description":"Maximum stack price filter."},"mcap_min":{"type":"number","description":"Minimum weighted market cap filter."},"mcap_max":{"type":"number","description":"Maximum weighted market cap filter."},"token_count_from":{"type":"integer","description":"Minimum number of tokens in the stack."},"archived":{"type":"boolean","description":"Include archived stacks."},"closed":{"type":"boolean","description":"Include closed stacks."},"tvl":{"type":"boolean","description":"Include TVL (Total Value Locked) in response."},"context":{"type":"string","enum":["discovery","portfolio","trending","my_stacks","search","admin","auto"],"description":"Response context hint. Defaults to auto."}}},{"title":"trending","type":"object","properties":{"limit":{"type":"integer","maximum":50,"description":"Max results (capped at 50)."},"offset":{"type":"integer","description":"Pagination offset."},"categories":{"type":"array","items":{"type":"string"}},"token_categories":{"type":"array","items":{"type":"string"}},"usernames":{"type":"array","items":{"type":"string"}},"userIds":{"type":"array","items":{"type":"integer"}},"following":{"type":"string","enum":["all","following","not_following"]},"mcap_min":{"type":"number"},"mcap_max":{"type":"number"},"price_min":{"type":"number"},"price_max":{"type":"number"},"token_count_from":{"type":"integer"}}},{"title":"official","type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"sort":{"type":"string"},"order":{"type":"string","enum":["ASC","DESC"]},"categories":{"type":"array","items":{"type":"string"}},"token_categories":{"type":"array","items":{"type":"string"}}}},{"title":"related_stacks","type":"object","required":["token_address"],"properties":{"token_address":{"type":"string","description":"Solana token address."},"limit":{"type":"integer","default":10},"offset":{"type":"integer","default":0}}},{"title":"fetch","type":"object","properties":{"stackIds":{"type":"array","items":{"type":"integer"}},"slugs":{"type":"array","items":{"type":"string"}},"userIds":{"type":"array","items":{"type":"integer"}},"usernames":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"sort":{"type":"string"},"order":{"type":"string","enum":["ASC","DESC"]},"following":{"type":"string","enum":["all","following","not_following"]},"categories":{"type":"array","items":{"type":"string"}},"token_categories":{"type":"array","items":{"type":"string"}},"tvl":{"type":"boolean"},"context":{"type":"string","enum":["discovery","portfolio","trending","my_stacks","search","admin","auto"]}}},{"title":"my_stacks","type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"sort":{"type":"string"},"order":{"type":"string","enum":["ASC","DESC"]},"following":{"type":"string","enum":["all","following","not_following"]},"categories":{"type":"array","items":{"type":"string"}},"token_categories":{"type":"array","items":{"type":"string"}}}},{"title":"create","type":"object","required":["stackName","stackTokenInfo","creatorFee","description","category","socialLinks"],"properties":{"stackName":{"type":"string","description":"Display name for the stack."},"stackTokenInfo":{"type":"object","additionalProperties":{"type":"number"},"description":"Map of token address to weight (integer percentages that must sum to 100). Example: `{\"So11...\": 60, \"EPjF...\": 40}`.\n"},"creatorFee":{"type":"number","description":"Creator fee percentage (server-enforced min/max bounds)."},"description":{"type":"string","maxLength":500,"description":"Stack description (max 500 characters)."},"category":{"type":"string","enum":["high_risk_short","high_risk_long","medium_risk_short","medium_risk_long","low_risk_short","low_risk_long"],"description":"Risk/duration category."},"socialLinks":{"type":"object","description":"Social media links associated with the stack."},"showCreatorHoldings":{"type":"boolean","description":"Whether to publicly display the creator's holdings. Defaults to false."}}},{"title":"update","type":"object","required":["stack_id"],"properties":{"stack_id":{"type":"integer","description":"ID of the stack to update."},"stackName":{"type":"string"},"description":{"type":"string","maxLength":500},"category":{"type":"string","enum":["high_risk_short","high_risk_long","medium_risk_short","medium_risk_long","low_risk_short","low_risk_long"]},"showCreatorHoldings":{"type":"boolean"}}},{"title":"close","type":"object","required":["stack_id"],"properties":{"stack_id":{"type":"integer","description":"ID of the stack to permanently close."},"creator_note":{"type":"string","description":"Optional note from the creator explaining the closure."}}},{"title":"edit_allocation","type":"object","required":["stack_id","stackTokenInfo"],"properties":{"stack_id":{"type":"integer","description":"ID of the stack to edit."},"stackTokenInfo":{"type":"object","additionalProperties":{"type":"integer"},"description":"Map of token_address to weight (integer). Weights must sum to 100."},"creator_note":{"type":"string","maxLength":500,"description":"Optional note explaining the allocation change."}}},{"title":"check_name","type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Proposed stack name to validate."}}},{"title":"check_description","type":"object","required":["description"],"properties":{"description":{"type":"string","description":"Proposed stack description to validate."}}},{"title":"user_stack_holdings","type":"object","required":["stack_id"],"properties":{"stack_id":{"type":"integer","description":"Stack ID to retrieve authenticated user's holdings for."}}},{"title":"get_creator_holdings","type":"object","required":["stack_id"],"properties":{"stack_id":{"type":"integer","description":"Stack ID to retrieve creator's holdings for."}}},{"title":"investors","type":"object","required":["stack_id"],"properties":{"stack_id":{"type":"integer"}}},{"title":"followers","type":"object","required":["stack_id"],"properties":{"stack_id":{"type":"integer"}}},{"title":"version_history","type":"object","required":["stack_id"],"properties":{"stack_id":{"type":"integer","description":"ID of the stack to retrieve allocation version history for."}}}]}}}},"responses":{"200":{"description":"Successful response. Shape varies by action.","content":{"application/json":{"schema":{"oneOf":[{"title":"PaginatedListResponse","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/StackObject"}},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}},{"title":"StackArrayResponse","type":"array","items":{"$ref":"#/components/schemas/StackObject"}},{"title":"RelatedStacksResponse","type":"object","properties":{"stacks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"stack_name":{"type":"string"},"slug":{"type":"string"},"user":{"type":"object","properties":{"id":{"type":"integer"},"username":{"type":"string"},"avatar":{"type":"string","nullable":true}}},"price":{"type":"number"},"change1D":{"type":"number","nullable":true},"weighted_market_cap":{"type":"number","nullable":true},"token_allocation_percentage":{"type":"number"},"creator_fee":{"type":"number"}}}},"total_count":{"type":"integer"}}},{"title":"MyStacksResponse","type":"array","items":{"allOf":[{"$ref":"#/components/schemas/StackObject"},{"type":"object","properties":{"metrics":{"type":"object","properties":{"total_trades":{"type":"integer"},"total_value_following":{"type":"number"},"trading_volume":{"type":"number"},"comments":{"type":"integer"},"pct_returned":{"type":"number"},"generated_fees":{"type":"number"}}}}}]}},{"title":"CreateResponse","type":"object","properties":{"success":{"type":"boolean"},"stack_id":{"type":"integer"}}},{"title":"UpdateResponse","type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"id":{"type":"integer"},"stack_name":{"type":"string"},"description":{"type":"string","nullable":true},"topic":{"type":"string","nullable":true},"show_creator_holdings":{"type":"boolean"}}}}},{"title":"CloseResponse","type":"object","properties":{"success":{"type":"boolean"},"stack_id":{"type":"integer"},"stack_name":{"type":"string"},"closed_at":{"type":"integer","description":"Unix timestamp of closure."},"close_price":{"type":"number"},"creator_note":{"type":"string","nullable":true},"message":{"type":"string"}}},{"title":"EditAllocationResponse","type":"object","properties":{"success":{"type":"boolean"},"stack_id":{"type":"integer"},"version":{"type":"integer","description":"The version number of the snapshot that was saved (previous allocation)."},"nav":{"type":"number","description":"The stack NAV at time of edit (unchanged before and after)."},"message":{"type":"string"}}},{"title":"NameCheckResponse","type":"object","properties":{"status":{"type":"string","enum":["OK","TAKEN","BADWORD","INVALID"]}}},{"title":"DescriptionCheckResponse","type":"object","properties":{"status":{"type":"string","enum":["OK","BADWORD","INVALID"]}}},{"title":"HoldingsResponse","type":"object","properties":{"total_usdc":{"type":"number"},"total_invested":{"type":"number"},"total_cost_basis":{"type":"number"},"stack_id":{"type":"integer"},"amounts":{"type":"array","items":{"type":"object","properties":{"token":{"type":"object","description":"Token metadata object."},"total":{"type":"number","description":"Raw token amount."},"total_standard":{"type":"number","description":"Human-readable token amount (adjusted for decimals)."},"invested_usdc":{"type":"number"},"usdc_value":{"type":"number"},"avg_cost":{"type":"number"},"realized_pnl":{"type":"number"},"unrealized_pnl":{"type":"number"},"total_pnl":{"type":"number"},"unrealized_pnl_percent":{"type":"number","nullable":true},"total_pnl_percent":{"type":"number","nullable":true},"weight":{"type":"number"},"is_verified":{"type":"boolean"}}}},"pnl":{"type":"object","properties":{"profit_loss":{"type":"number"},"realized_pnl":{"type":"number"},"unrealized_pnl":{"type":"number"},"profit_loss_percent":{"type":"number","nullable":true},"unrealized_pnl_percent":{"type":"number","nullable":true}}}}},{"title":"InvestorsResponse","type":"object","properties":{"investor_count":{"type":"integer"}}},{"title":"FollowersResponse","type":"integer","description":"Plain integer representing follower count."},{"title":"VersionHistoryResponse","type":"object","properties":{"stack_id":{"type":"integer"},"current_version":{"type":"integer","description":"The latest (live) version number."},"versions":{"type":"array","description":"Version records in reverse-chronological order.","items":{"type":"object","properties":{"version":{"type":"integer"},"is_current":{"type":"boolean","description":"True only for the live allocation."},"created_at":{"type":"integer","nullable":true,"description":"Unix timestamp of the edit. Null for current version."},"creator_note":{"type":"string","nullable":true,"description":"Note from the edit. Null for current and V1 on unedited stacks."},"nav_at_edit":{"type":"number","nullable":true,"description":"Stack price when this allocation was replaced. Null for current."},"allocation":{"type":"array","items":{"type":"object","properties":{"token_id":{"type":"integer"},"symbol":{"type":"string"},"name":{"type":"string"},"address":{"type":"string"},"image_url":{"type":"string"},"weight":{"type":"integer"},"token_price":{"type":"number","description":"Spot price at time of edit. Present on historical versions only."}}}},"changes":{"type":"object","nullable":true,"description":"Null for V1. For V2+, describes changes from previous version.","properties":{"tokens_added":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"},"weight":{"type":"integer"}}}},"tokens_removed":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"},"weight":{"type":"integer"}}}},"weight_changes":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"},"previous_weight":{"type":"integer"},"new_weight":{"type":"integer"}}}}}}}}}}}]}}}},"400":{"description":"Bad request (missing or invalid parameters).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden (not the stack owner or insufficient permissions).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Stack or token not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```


# Chat

## Stack chat messages and creator notes

> Manage community messages and creator notes on a stack's chat. The \`action\` query parameter selects the sub-operation.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"ChatMessage":{"type":"object","properties":{"id":{"type":"integer"},"stack_id":{"type":"integer"},"messages":{"type":"string","description":"Message content."},"message_type":{"type":"string","enum":["community","creator_notes"]},"pinned":{"type":"boolean"},"created_at":{"type":"integer","description":"Unix timestamp."},"user":{"type":"object","properties":{"username":{"type":"string"},"avatar":{"type":"string","nullable":true}}}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/chat.php":{"post":{"tags":["Chat"],"summary":"Stack chat messages and creator notes","description":"Manage community messages and creator notes on a stack's chat. The `action` query parameter selects the sub-operation.\n","parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["addMessage","getAll","togglePin"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"title":"addMessage","type":"object","required":["stack_id","message"],"properties":{"stack_id":{"type":"integer","description":"Stack whose chat to post to."},"message":{"type":"string","minLength":1,"maxLength":1000,"description":"Message body (1-1000 characters). HTML tags are stripped."},"message_type":{"type":"string","enum":["community","creator_notes"],"default":"community","description":"Message type. `creator_notes` is restricted to the stack creator.\n"},"pinned":{"type":"boolean","default":false,"description":"Pin this message (creator_notes only). Unpins any previously pinned note."}}},{"title":"getAll","type":"object","required":["stack_id"],"properties":{"stack_id":{"type":"integer"},"message_type":{"type":"string","enum":["community","creator_notes"],"default":"community"},"page":{"type":"integer","minimum":1,"default":1},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}}},{"title":"togglePin","type":"object","required":["message_id"],"properties":{"message_id":{"type":"integer","description":"ID of the creator note to pin or unpin."}}}]}}}},"responses":{"200":{"description":"Successful response. Shape varies by action.","content":{"application/json":{"schema":{"oneOf":[{"title":"AddMessageResponse","type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"object","properties":{"id":{"type":"integer"},"stack_id":{"type":"integer"},"messages":{"type":"string","description":"The message content."},"message_type":{"type":"string","enum":["community","creator_notes"]},"pinned":{"type":"boolean"},"created_at":{"type":"integer","description":"Unix timestamp."},"user":{"type":"object","properties":{"id":{"type":"integer"},"username":{"type":"string"},"avatar":{"type":"string","nullable":true}}}}}}},{"title":"GetAllResponse","type":"object","properties":{"success":{"type":"boolean"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/ChatMessage"}},"pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"total":{"type":"integer"},"total_pages":{"type":"integer"},"has_next":{"type":"boolean"},"has_prev":{"type":"boolean"}}},"message_type_supported":{"type":"boolean"},"pinned_notes":{"type":"array","nullable":true,"description":"Only present when message_type is creator_notes. Contains pinned creator notes outside pagination.\n","items":{"$ref":"#/components/schemas/ChatMessage"}}}},{"title":"TogglePinResponse","type":"object","properties":{"success":{"type":"boolean"},"message_id":{"type":"integer"},"pinned":{"type":"boolean"}}}]}}}},"400":{"description":"Validation error (missing fields, message too long/short, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden (not the stack creator for creator_notes / togglePin).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Chat or message not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```


# Stack Wars

## Stack wars listings and details

> Public endpoint for viewing stack war competitions and their AI-generated summaries. Admin actions (create, ai-summary) are on a separate endpoint.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"StackObject":{"type":"object","description":"Canonical stack representation returned by discovery and fetch actions. Exact fields may vary by context (discovery vs portfolio vs trending).\n","properties":{"id":{"type":"integer"},"stack_name":{"type":"string"},"slug":{"type":"string"},"description":{"type":"string","nullable":true},"topic":{"type":"string","nullable":true,"description":"Stack risk/duration category."},"creator_fee":{"type":"number"},"price":{"type":"number","nullable":true},"weighted_market_cap":{"type":"number","nullable":true},"change4H":{"type":"number","nullable":true},"change1D":{"type":"number","nullable":true},"change1W":{"type":"number","nullable":true},"change1M":{"type":"number","nullable":true},"changeAll":{"type":"number","nullable":true},"token_count":{"type":"integer"},"investor_count":{"type":"integer"},"is_company_stack":{"type":"boolean"},"archived":{"type":"boolean"},"show_creator_holdings":{"type":"boolean"},"created_at":{"type":"integer","description":"Unix timestamp."},"time_p":{"type":"integer","nullable":true,"description":"Unix timestamp of last price update."},"tvl":{"type":"number","nullable":true,"description":"Total Value Locked in USD. Only present when tvl=true in request."},"user":{"type":"object","description":"Public creator profile.","properties":{"username":{"type":"string"},"avatar":{"type":"string","nullable":true},"bio":{"type":"string","nullable":true},"stacks_count":{"type":"integer"},"telegram":{"type":"string","nullable":true},"discord":{"type":"string","nullable":true},"twitter":{"type":"string","nullable":true},"linkedin":{"type":"string","nullable":true},"personal":{"type":"string","nullable":true}}},"tokens":{"type":"array","description":"Token allocations within the stack.","items":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"image_url":{"type":"string","nullable":true},"weight":{"type":"number"},"is_verified":{"type":"boolean"}}}}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/stack_wars.php":{"post":{"tags":["Stack Wars"],"summary":"Stack wars listings and details","description":"Public endpoint for viewing stack war competitions and their AI-generated summaries. Admin actions (create, ai-summary) are on a separate endpoint.\n","parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["list","detail"]}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"oneOf":[{"title":"list","description":"No request body required.","type":"object"},{"title":"detail","type":"object","required":["stack_war_id"],"properties":{"stack_war_id":{"type":"integer","description":"ID of the stack war to retrieve."}}}]}}}},"responses":{"200":{"description":"Successful response. Shape varies by action.","content":{"application/json":{"schema":{"oneOf":[{"title":"ListResponse","type":"object","properties":{"stack_wars":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"participant_count":{"type":"integer"},"status":{"type":"string","enum":["upcoming","active","completed"]},"start_time":{"type":"integer","description":"Unix timestamp."},"end_time":{"type":"integer","description":"Unix timestamp."},"has_ai_summary":{"type":"boolean"},"current_leader":{"type":"string","nullable":true},"created_at":{"type":"integer","description":"Unix timestamp."}}}},"total":{"type":"integer"},"active_count":{"type":"integer"},"upcoming_count":{"type":"integer"}}},{"title":"DetailResponse","type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"participant_stack_ids":{"type":"array","items":{"type":"integer"}},"participant_count":{"type":"integer"},"status":{"type":"string","enum":["upcoming","active","completed"]},"start_time":{"type":"integer","description":"Unix timestamp."},"end_time":{"type":"integer","description":"Unix timestamp."},"created_at":{"type":"integer","description":"Unix timestamp."},"updated_at":{"type":"integer","nullable":true,"description":"Unix timestamp."},"ai_summary":{"type":"string","nullable":true,"description":"AI-generated markdown summary of the war."},"analyzed_at":{"type":"integer","nullable":true,"description":"Unix timestamp of last AI analysis."},"data_points_analyzed":{"type":"integer","nullable":true},"participant_stacks":{"type":"array","items":{"$ref":"#/components/schemas/StackObject"}}}}]}}}},"400":{"description":"Missing or invalid stack_war_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Stack war not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```


# Tokens

## Token search, details, listings, categories, and following

> Unified endpoint for all token information operations. The \`action\` query parameter selects the sub-operation.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"TokenObject":{"type":"object","description":"Token representation returned by list/paginated_list actions.","properties":{"id":{"type":"integer"},"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"image_url":{"type":"string","nullable":true},"decimals":{"type":"integer"},"chain":{"type":"string"},"pool_address":{"type":"string","nullable":true},"cg_id":{"type":"string","nullable":true},"price":{"type":"number","nullable":true},"market_cap":{"type":"string","nullable":true},"volume_24h":{"type":"string","nullable":true},"change4H":{"type":"number","nullable":true},"change1D":{"type":"number","nullable":true},"change1W":{"type":"number","nullable":true},"change1M":{"type":"number","nullable":true},"changeAll":{"type":"number","nullable":true},"is_verified":{"type":"boolean"},"archived":{"type":"boolean"},"categories":{"type":"array","items":{"type":"string"}}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/token_info.php":{"post":{"tags":["Tokens"],"summary":"Token search, details, listings, categories, and following","description":"Unified endpoint for all token information operations. The `action` query parameter selects the sub-operation.\n","parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["search","new","detail","list","paginated_list","fetch","categories","follow","followers"]}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"oneOf":[{"title":"search","type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Search query (token name or symbol)."},"exclusions":{"type":"array","items":{"type":"string"},"description":"Token addresses to exclude from results."},"categories":{"type":"array","items":{"type":"string"},"description":"Filter by token categories."}}},{"title":"new","type":"object","required":["token_address"],"properties":{"token_address":{"type":"string","description":"Solana token mint address to add."}}},{"title":"detail","type":"object","required":["token_address"],"properties":{"token_address":{"type":"string","description":"Solana token mint address."}}},{"title":"list","type":"object","properties":{"limit":{"type":"integer","default":50},"offset":{"type":"integer","default":0},"sort":{"type":"string","enum":["id","name","symbol","price","market_cap","volume_24h","change4H","change1D","change1W","change1M","changeAll"],"description":"Sort field."},"order":{"type":"string","enum":["ASC","DESC"]},"search":{"type":"string","description":"Free-text name/symbol filter."},"following":{"type":"string","enum":["all","following","not_following"],"description":"Filter by follow status (requires auth)."},"categories":{"type":"array","items":{"type":"string"}},"include_unverified":{"type":"boolean","description":"Include tokens without a CoinGecko ID."},"price_min":{"type":"number"},"price_max":{"type":"number"},"mcap_min":{"type":"number"},"mcap_max":{"type":"number"},"volume_min":{"type":"number"},"volume_max":{"type":"number"}}},{"title":"paginated_list","description":"Same parameters as list; returns paginated wrapper.","type":"object","properties":{"limit":{"type":"integer","default":50},"offset":{"type":"integer","default":0},"sort":{"type":"string","enum":["id","name","symbol","price","market_cap","volume_24h","change4H","change1D","change1W","change1M","changeAll"]},"order":{"type":"string","enum":["ASC","DESC"]},"search":{"type":"string"},"following":{"type":"string","enum":["all","following","not_following"]},"categories":{"type":"array","items":{"type":"string"}},"include_unverified":{"type":"boolean"},"price_min":{"type":"number"},"price_max":{"type":"number"},"mcap_min":{"type":"number"},"mcap_max":{"type":"number"},"volume_min":{"type":"number"},"volume_max":{"type":"number"}}},{"title":"fetch","description":"Alias for list.","type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"sort":{"type":"string"},"order":{"type":"string","enum":["ASC","DESC"]},"search":{"type":"string"},"following":{"type":"string"},"categories":{"type":"array","items":{"type":"string"}},"include_unverified":{"type":"boolean"},"price_min":{"type":"number"},"price_max":{"type":"number"},"mcap_min":{"type":"number"},"mcap_max":{"type":"number"},"volume_min":{"type":"number"},"volume_max":{"type":"number"}}},{"title":"categories","description":"No request body required.","type":"object"},{"title":"follow","type":"object","required":["token_address"],"properties":{"token_address":{"type":"string","description":"Solana token address to follow/unfollow (toggle)."}}},{"title":"followers","type":"object","required":["token_address"],"properties":{"token_address":{"type":"string"}}}]}}}},"responses":{"200":{"description":"Successful response. Shape varies by action.","content":{"application/json":{"schema":{"oneOf":[{"title":"SearchResponse","type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"address":{"type":"string"},"icon":{"type":"string","nullable":true},"symbol":{"type":"string"},"is_verified":{"type":"boolean"}}}},{"title":"NewTokenResponse","type":"object","properties":{"token_address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"image_url":{"type":"string","nullable":true},"decimals":{"type":"integer"},"pool_address":{"type":"string","nullable":true},"cg_id":{"type":"string","nullable":true}}},{"title":"TokenDetailResponse","type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"image_url":{"type":"string","nullable":true},"decimals":{"type":"integer"},"pool_address":{"type":"string","nullable":true},"price":{"type":"number","nullable":true},"market_cap":{"type":"string","nullable":true,"description":"Market cap as a string (may be very large)."},"volume_24h":{"type":"string","nullable":true},"change4H":{"type":"number","nullable":true},"change1D":{"type":"number","nullable":true},"change1W":{"type":"number","nullable":true},"change1M":{"type":"number","nullable":true},"changeAll":{"type":"number","nullable":true},"chain":{"type":"string"},"description":{"type":"string","nullable":true},"categories":{"type":"array","items":{"type":"string"}},"is_verified":{"type":"boolean"},"archived":{"type":"boolean"},"user_has_held":{"type":"boolean","description":"Whether the authenticated user has ever held this token. False when unauthenticated."},"user_following":{"type":"boolean","description":"Whether the authenticated user follows this token. False when unauthenticated."},"socials":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"url":{"type":"string"}}}}}},{"title":"TokenListResponse","type":"array","items":{"$ref":"#/components/schemas/TokenObject"}},{"title":"TokenPaginatedListResponse","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TokenObject"}},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}},{"title":"CategoriesResponse","type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"token_count":{"type":"integer"}}}},{"title":"FollowResponse","type":"object","properties":{"following":{"type":"boolean"},"message":{"type":"string"}}},{"title":"TokenFollowersResponse","type":"object","properties":{"followers":{"type":"integer"},"is_following":{"type":"boolean","description":"Whether the authenticated user follows this token. False when unauthenticated."},"success":{"type":"string"}}}]}}}},"400":{"description":"Missing or invalid parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Token not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```


# Token Trading

## Token trading info and company stack statistics

> Provides trading readiness information for tokens (ensuring a company stack exists) and aggregate company stack statistics.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/token_trading.php":{"post":{"tags":["Token Trading"],"summary":"Token trading info and company stack statistics","description":"Provides trading readiness information for tokens (ensuring a company stack exists) and aggregate company stack statistics.\n","parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["get_trading_info","get_company_stats"]}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"oneOf":[{"title":"get_trading_info","type":"object","description":"At least one of token_address or token_id is required.\n","properties":{"token_address":{"type":"string","description":"Solana token mint address."},"token_id":{"type":"integer","description":"Internal token ID."}}},{"title":"get_company_stats","description":"No request body required.","type":"object"}]}}}},"responses":{"200":{"description":"Successful response. Shape varies by action.","content":{"application/json":{"schema":{"oneOf":[{"title":"TradingInfoResponse","type":"object","properties":{"company_stack_id":{"type":"integer","description":"ID of the company stack for this token."},"token":{"type":"object","properties":{"id":{"type":"integer"},"chain":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"address":{"type":"string"},"notes":{"type":"string","nullable":true},"image_url":{"type":"string","nullable":true},"pool_address":{"type":"string","nullable":true},"decimals":{"type":"integer"},"cg_id":{"type":"string","nullable":true},"archived":{"type":"boolean"},"last_updated":{"type":"string","nullable":true}}},"trading_enabled":{"type":"boolean"},"display_name":{"type":"string"},"stack_name":{"type":"string"},"slug":{"type":"string","nullable":true},"message":{"type":"string"}}},{"title":"CompanyStatsResponse","type":"object","properties":{"total_company_stacks":{"type":"integer"}}}]}}}},"400":{"description":"Missing token_address and token_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Token not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Failed to prepare token for trading.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```


# Trading

## Trading and wallet operations

> Handles all trading actions (swap, balance inquiries, withdrawals, key export). The specific operation is selected via the \`action\` query parameter. All actions require authentication.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/txn.php":{"post":{"tags":["Trading"],"summary":"Trading and wallet operations","operationId":"tradingOperations","description":"Handles all trading actions (swap, balance inquiries, withdrawals, key export). The specific operation is selected via the `action` query parameter. All actions require authentication.\n","parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["swap","rebalance","balance","usdc_balance","total_balance","address","withdraw_usdc","export_key"]},"description":"The trading action to perform."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"oneOf":[{"title":"SwapRequest","type":"object","required":["stack_id","amount","cue"],"properties":{"stack_id":{"type":"integer","description":"ID of the stack to trade."},"amount":{"type":"number","description":"For buys (cue=fromUSDC): USDC amount to spend. For sells (cue=toUSDC): percentage of holdings to sell (1-100).\n"},"cue":{"type":"string","enum":["fromUSDC","toUSDC"],"description":"Direction of the swap."}}},{"title":"RebalanceRequest","type":"object","required":["stack_id"],"properties":{"stack_id":{"type":"integer","description":"ID of the stack to rebalance holdings for."}}},{"title":"WithdrawUsdcRequest","type":"object","required":["address","amount","verification_code"],"properties":{"address":{"type":"string","description":"Destination wallet address."},"amount":{"type":"number","description":"USDC amount to withdraw."},"verification_code":{"type":"string","description":"SMS verification code."}}},{"title":"ExportKeyRequest","type":"object","required":["verification_code","has_acknowledged_risk"],"properties":{"verification_code":{"type":"string","description":"SMS verification code."},"has_acknowledged_risk":{"type":"boolean","enum":[true],"description":"Must be true to confirm risk acknowledgment."}}}]}}}},"responses":{"200":{"description":"Successful response. Shape depends on action.","content":{"application/json":{"schema":{"oneOf":[{"title":"SwapResponse","type":"object","properties":{"order_id":{"type":"string","description":"Unique identifier for the created order."}}},{"title":"RebalanceResponse","type":"object","properties":{"rebalance_id":{"type":"string","description":"Unique identifier for the rebalance operation."},"sell_order_id":{"type":"string","description":"Order ID for the sell phase."},"buy_order_id":{"type":"string","description":"Order ID for buy-only rebalance (when no sells needed)."},"status":{"type":"string","enum":["SELLING","BUYING"],"description":"Current rebalance phase."},"sells_count":{"type":"integer","description":"Number of sell swaps initiated."},"buys_count":{"type":"integer","description":"Number of buy swaps planned."},"total_portfolio_value_usdc":{"type":"number","description":"Total portfolio value in USDC at rebalance time."},"allocation_version":{"type":"integer","description":"Target allocation version number."}}},{"title":"BalanceResponse","type":"array","items":{"type":"object","properties":{"mint":{"type":"string","description":"Token mint address."},"amount":{"type":"number","description":"Token balance as a number."},"amountString":{"type":"string","description":"Token balance as a string."},"decimals":{"type":"integer","description":"Token decimal places."}}}},{"title":"UsdcBalanceResponse","type":"object","properties":{"balance":{"type":"number","description":"USDC balance."}}},{"title":"TotalBalanceResponse","type":"object","properties":{"total_balance":{"type":"string","description":"Total portfolio balance in USDC."}}},{"title":"AddressResponse","type":"object","properties":{"pubkey":{"type":"string","description":"Wallet public key."}}},{"title":"WithdrawUsdcResponse","type":"object","description":"Transaction details for the withdrawal."},{"title":"ExportKeyResponse","type":"object","properties":{"byte_array":{"type":"array","items":{"type":"integer"},"description":"Private key as byte array."},"base_58":{"type":"string","description":"Private key in Base58 encoding."}}}]}}}},"400":{"description":"Bad request (missing fields, invalid parameters, insufficient balance, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Stack not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (rebalance already in progress).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Order management

> Provides order details, partial order handling, retry, sell-all, and retry chain lookups. All actions require authentication and an \`order\_id\` in the request body.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/orders.php":{"post":{"tags":["Trading"],"summary":"Order management","description":"Provides order details, partial order handling, retry, sell-all, and retry chain lookups. All actions require authentication and an `order_id` in the request body.\n","operationId":"manageOrder","parameters":[{"name":"action","in":"query","required":false,"schema":{"type":"string","enum":["details","status","partial_details","acknowledge","retry","sell_all","retry_chain"],"default":"details"},"description":"The order action to perform. Defaults to `details`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"title":"OrderIdRequest","type":"object","required":["order_id"],"properties":{"order_id":{"type":"string","description":"Unique order identifier."}}},{"title":"RetryRequest","type":"object","required":["order_id"],"properties":{"order_id":{"type":"string","description":"Unique order identifier."},"slippage":{"type":"integer","minimum":1,"maximum":51,"description":"Custom slippage tolerance for the retry (optional)."}}}]}}}},"responses":{"200":{"description":"Successful response. Shape depends on action.","content":{"application/json":{"schema":{"oneOf":[{"title":"OrderDetailsResponse","type":"object","properties":{"order":{"type":"object","properties":{"order_id":{"type":"string"},"status":{"type":"string","enum":["PENDING","SUCCESS","FAILED","PARTIAL"]},"type":{"type":"string","enum":["fromUSDC","toUSDC"]},"created_at":{"type":"string"},"partial_completion_action":{"type":"string","nullable":true}}},"transactions":{"type":"array","items":{"type":"object","properties":{"order_id":{"type":"string"},"success":{"type":"boolean"},"txn_hash":{"type":"string","nullable":true}}}},"transaction_count":{"type":"integer"}}},{"title":"PartialDetailsResponse","type":"object","properties":{"order_id":{"type":"string"},"order_info":{"type":"object","description":"Detailed order metadata."},"stack_info":{"type":"object","properties":{"id":{"type":"integer"},"stack_name":{"type":"string"},"slug":{"type":"string"}}},"successful_tokens":{"type":"array","items":{"type":"object"}},"failed_tokens":{"type":"array","items":{"type":"object"}},"summary":{"type":"object","properties":{"total_tokens_in_stack":{"type":"integer"},"successful_token_count":{"type":"integer"},"failed_token_count":{"type":"integer"},"success_rate":{"type":"number"}}},"available_actions":{"type":"object","properties":{"acknowledge":{"type":"boolean"},"retry":{"type":"boolean"},"sell_all":{"type":"boolean"}}}}},{"title":"AcknowledgeResponse","type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"order_id":{"type":"string"}}},{"title":"RetryResponse","type":"object","properties":{"order_id":{"type":"string"},"stack_id":{"type":"integer"},"parent_order_id":{"type":"string"},"retry_attempt":{"type":"integer"},"failed_tokens_attempted":{"type":"integer"},"status":{"type":"string"}}},{"title":"SellAllResponse","type":"object","properties":{"order_id":{"type":"string"},"stack_id":{"type":"integer"}}},{"title":"RetryChainResponse","type":"object","properties":{"order_id":{"type":"string"},"retry_chain":{"type":"array","items":{"type":"object","properties":{"order_id":{"type":"string"},"parent_order_id":{"type":"string","nullable":true},"retry_attempt":{"type":"integer"},"status":{"type":"string","enum":["PENDING","SUCCESS","FAILED","PARTIAL"]},"type":{"type":"string","enum":["fromUSDC","toUSDC"]},"created_at":{"type":"string"},"partial_completion_action":{"type":"string","nullable":true}}}},"total_attempts":{"type":"integer"}}}]}}}},"400":{"description":"Bad request (missing order_id, invalid slippage, invalid action, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Order not found or not owned by the authenticated user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## List authenticated user's orders

> Returns a paginated list of all orders for the authenticated user.

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/user_orders.php":{"post":{"tags":["Trading"],"summary":"List authenticated user's orders","description":"Returns a paginated list of all orders for the authenticated user.","operationId":"listUserOrders","parameters":[{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"minimum":0},"description":"Pagination offset."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"minimum":1,"maximum":100},"description":"Number of orders to return."}],"responses":{"200":{"description":"Paginated list of user orders.","content":{"application/json":{"schema":{"type":"object","properties":{"orders":{"type":"array","items":{"type":"object","properties":{"order_id":{"type":"string"},"stack_id":{"type":"integer"},"type":{"type":"string","enum":["fromUSDC","toUSDC"]},"status":{"type":"string","enum":["PENDING","SUCCESS","FAILED","PARTIAL"]},"created_at":{"type":"string"},"parent_order_id":{"type":"string","nullable":true},"retry_attempt":{"type":"integer","nullable":true},"partial_completion_action":{"type":"string","nullable":true},"stack_name":{"type":"string","nullable":true},"stack_symbol":{"type":"string","nullable":true}}}},"pagination":{"type":"object","properties":{"offset":{"type":"integer"},"limit":{"type":"integer"},"total_count":{"type":"integer"},"has_more":{"type":"boolean"},"has_previous":{"type":"boolean"},"page":{"type":"integer"},"per_page":{"type":"integer"},"total_pages":{"type":"integer"}}}}}}}},"400":{"description":"Invalid pagination parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## List outstanding partial orders for a stack

> Returns a paginated list of the authenticated user's outstanding partial orders (status=PARTIAL, partial\_completion\_action=pending) for a given stack.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/stack_partial_orders.php":{"post":{"tags":["Trading"],"summary":"List outstanding partial orders for a stack","description":"Returns a paginated list of the authenticated user's outstanding partial orders (status=PARTIAL, partial_completion_action=pending) for a given stack.\n","operationId":"listStackPartialOrders","parameters":[{"name":"stack_id","in":"query","required":true,"schema":{"type":"integer"},"description":"ID of the stack to query."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"minimum":0},"description":"Pagination offset."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"minimum":1,"maximum":100},"description":"Number of orders to return."}],"responses":{"200":{"description":"Paginated list of outstanding partial orders.","content":{"application/json":{"schema":{"type":"object","properties":{"stack":{"type":"object","properties":{"id":{"type":"integer"},"stack_name":{"type":"string"},"stack_token_name":{"type":"string"}}},"outstanding_partial_orders":{"type":"array","items":{"type":"object","properties":{"order_id":{"type":"string"},"user_id":{"type":"integer"},"stack_id":{"type":"integer"},"type":{"type":"string"},"status":{"type":"string"},"usdc_amount":{"type":"number"},"creator_fee":{"type":"number"},"platform_fee":{"type":"number"},"expected_amount":{"type":"number","nullable":true},"created_at":{"type":"string"},"parent_order_id":{"type":"string","nullable":true},"retry_attempt":{"type":"integer","nullable":true},"partial_completion_action":{"type":"string"},"username":{"type":"string","nullable":true}}}},"pagination":{"type":"object","properties":{"offset":{"type":"integer"},"limit":{"type":"integer"},"total_count":{"type":"integer"},"has_more":{"type":"boolean"},"has_previous":{"type":"boolean"},"page":{"type":"integer"},"per_page":{"type":"integer"},"total_pages":{"type":"integer"}}}}}}}},"400":{"description":"Missing or invalid stack_id, invalid pagination parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Stack not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Transaction history

> Retrieve the authenticated user's transaction history, a single transaction detail, or a transaction summary. The specific operation is selected via the \`action\` query parameter.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/transaction_history.php":{"get":{"tags":["Trading"],"summary":"Transaction history","description":"Retrieve the authenticated user's transaction history, a single transaction detail, or a transaction summary. The specific operation is selected via the `action` query parameter.\n","operationId":"getTransactionHistory","parameters":[{"name":"action","in":"query","required":false,"schema":{"type":"string","enum":["list","detail","summary"],"default":"list"},"description":"The history action to perform."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"minimum":0},"description":"Pagination offset (action=list only)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"minimum":1,"maximum":100},"description":"Number of transactions to return (action=list only)."},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["buy","sell","deposit","withdrawal"]},"description":"Filter by transaction type (action=list only)."},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["PENDING","PROCESSING","SUCCESS","FAILED","PARTIAL"]},"description":"Filter by transaction status (action=list only)."},{"name":"stack_id","in":"query","required":false,"schema":{"type":"integer"},"description":"Filter by stack ID (action=list only). Cannot be combined with token_address."},{"name":"token_address","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by token address (action=list only). Cannot be combined with stack_id."},{"name":"order_id","in":"query","required":false,"schema":{"type":"string"},"description":"Order ID to look up (action=detail only, required for detail)."}],"responses":{"200":{"description":"Successful response. Shape depends on action.","content":{"application/json":{"schema":{"oneOf":[{"title":"TransactionListResponse","type":"object","properties":{"transactions":{"type":"array","items":{"type":"object","properties":{"order_id":{"type":"string"},"stack_id":{"type":"integer","nullable":true},"transaction_type":{"type":"string","enum":["buy","sell","deposit","withdrawal"]},"status":{"type":"string","enum":["PENDING","PROCESSING","SUCCESS","FAILED","PARTIAL"]},"usdc_amount":{"type":"number"},"expected_amount":{"type":"number","nullable":true},"sell_percentage":{"type":"number","nullable":true},"slippage":{"type":"number","nullable":true},"creator_fee":{"type":"number","nullable":true},"platform_fee":{"type":"number","nullable":true},"created_at":{"type":"string"},"updated_at":{"type":"string","nullable":true},"parent_order_id":{"type":"string","nullable":true},"retry_attempt":{"type":"integer","nullable":true},"partial_completion_action":{"type":"string","nullable":true},"is_company_stack":{"type":"boolean"},"asset":{"type":"object","nullable":true,"properties":{"type":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string","nullable":true},"symbol":{"type":"string","nullable":true},"address":{"type":"string","nullable":true},"image_url":{"type":"string","nullable":true},"archived":{"type":"boolean"}}},"tokens":{"type":"array","items":{"type":"object"}},"transaction_hash":{"type":"string","nullable":true},"from_wallet":{"type":"string","nullable":true,"description":"Present for deposits/withdrawals only."},"to_wallet":{"type":"string","nullable":true,"description":"Present for deposits/withdrawals only."},"block_slot":{"type":"integer","nullable":true,"description":"Present for deposits/withdrawals only."}}}},"pagination":{"type":"object","properties":{"offset":{"type":"integer"},"limit":{"type":"integer"},"total_count":{"type":"integer"},"has_more":{"type":"boolean"},"has_previous":{"type":"boolean"},"page":{"type":"integer"},"total_pages":{"type":"integer"}}}}},{"title":"TransactionDetailResponse","type":"object","properties":{"transaction":{"type":"object","description":"Same fields as list items, plus a `token_transactions` array with per-token breakdown.\n","properties":{"order_id":{"type":"string"},"token_transactions":{"type":"array","items":{"type":"object","properties":{"token_id":{"type":"integer"},"name":{"type":"string"},"symbol":{"type":"string"},"address":{"type":"string"},"image_url":{"type":"string","nullable":true},"amount":{"type":"number"},"usdc_paid":{"type":"number"},"decimals":{"type":"integer"},"archived":{"type":"boolean"}}}}}}}},{"title":"TransactionSummaryResponse","type":"object","properties":{"summary":{"type":"object","properties":{"total_transactions":{"type":"integer"},"total_buys":{"type":"integer"},"total_sells":{"type":"integer"},"total_deposits":{"type":"integer"},"total_withdrawals":{"type":"integer"},"successful_transactions":{"type":"integer"},"failed_transactions":{"type":"integer"},"pending_transactions":{"type":"integer"}}}}}]}}}},"400":{"description":"Bad request (invalid filters, missing order_id for detail, conflicting filters).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Transaction not found (action=detail).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method not allowed (only GET is accepted).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Fee calculations and bounds

> Calculate trading fees, retrieve minimum buy amount, or get creator fee bounds. No authentication required.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/fee.php":{"post":{"tags":["Trading"],"summary":"Fee calculations and bounds","description":"Calculate trading fees, retrieve minimum buy amount, or get creator fee bounds. No authentication required.\n","operationId":"feeOperations","parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["calculate","min_buy","creator_fee_bounds"]},"description":"The fee action to perform."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"oneOf":[{"title":"CalculateFeeRequest","type":"object","required":["amount","stack_id"],"properties":{"amount":{"type":"number","description":"USDC amount to calculate fees for."},"stack_id":{"type":"integer","description":"ID of the stack being traded."}}}]}}}},"responses":{"200":{"description":"Successful response. Shape depends on action.","content":{"application/json":{"schema":{"oneOf":[{"title":"CalculateFeeResponse","type":"object","properties":{"fee_display":{"type":"string","description":"Human-readable fee string (e.g. \"~$1.50 fee\")."},"estimated_blockchain_fees_saved":{"type":"string","description":"Estimated blockchain fees saved (e.g. \"$2.40\")."}}},{"title":"MinBuyResponse","type":"object","properties":{"min_buy":{"type":"number","description":"Minimum buy amount in micro-USDC."}}},{"title":"CreatorFeeBoundsResponse","type":"object","properties":{"min":{"type":"number","description":"Minimum creator fee percentage."},"max":{"type":"number","description":"Maximum creator fee percentage."},"default":{"type":"number","description":"Default creator fee percentage."}}}]}}}},"400":{"description":"Bad request (missing amount, invalid stack ID, amount below minimum).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```


# Social

## Stack and user follow/unfollow operations

> Manage stack subscriptions and user follow relationships. Auth requirements vary by action.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/subscription.php":{"post":{"tags":["Social"],"summary":"Stack and user follow/unfollow operations","description":"Manage stack subscriptions and user follow relationships. Auth requirements vary by action.\n","operationId":"subscriptionOperations","parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["followers","follow","unfollow","follow_user","unfollow_user","user_followers","user_following","user_follow_status"]},"description":"The subscription action to perform."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"title":"StackFollowRequest","description":"Used for `followers`, `follow`, and `unfollow` actions.","type":"object","required":["stack_id"],"properties":{"stack_id":{"type":"integer","description":"ID of the stack."}}},{"title":"UserFollowRequest","description":"Used for `follow_user`, `unfollow_user`, `user_followers`, `user_following`, and `user_follow_status` actions.\n","type":"object","required":["username"],"properties":{"username":{"type":"string","description":"Username of the target user."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20,"description":"Number of items to return (user_followers / user_following only).\n"},"offset":{"type":"integer","minimum":0,"default":0,"description":"Pagination offset (user_followers / user_following only).\n"}}}]}}}},"responses":{"200":{"description":"Successful response. Shape depends on action.","content":{"application/json":{"schema":{"oneOf":[{"title":"FollowersResponse","description":"Response for `followers` action. Auth required.","type":"object","properties":{"followers":{"type":"integer","description":"Total follower count for the stack."},"is_following":{"type":"boolean","description":"Whether the authenticated user follows this stack."},"success":{"type":"string"}}},{"title":"FollowResponse","description":"Response for `follow` action. Auth required.","type":"object","properties":{"success":{"type":"string"}}},{"title":"UnfollowResponse","description":"Response for `unfollow` action. Auth required.","type":"object","properties":{"success":{"type":"string"}}},{"title":"FollowUserResponse","description":"Response for `follow_user` action. Auth required.","type":"object","properties":{"success":{"type":"string"}}},{"title":"UnfollowUserResponse","description":"Response for `unfollow_user` action. Auth required.","type":"object","properties":{"success":{"type":"string"}}},{"title":"UserFollowersResponse","description":"Response for `user_followers` action. Auth optional.","type":"object","properties":{"follower_count":{"type":"integer"},"is_following":{"type":"boolean","description":"Whether the authenticated user follows this user (false if unauthenticated)."},"followers":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string"},"avatar":{"type":"string","nullable":true}}}},"success":{"type":"string"}}},{"title":"UserFollowingResponse","description":"Response for `user_following` action. No auth required.","type":"object","properties":{"following_count":{"type":"integer"},"following":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string"},"avatar":{"type":"string","nullable":true}}}},"success":{"type":"string"}}},{"title":"UserFollowStatusResponse","description":"Response for `user_follow_status` action. Auth required.","type":"object","properties":{"is_following":{"type":"boolean"},"follows_back":{"type":"boolean"},"success":{"type":"string"}}}]}}}},"400":{"description":"Bad request (missing fields, already following, not following, user not found, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Creator leaderboard

> Returns a ranked list of creators sorted by the chosen metric. Authentication is optional; when authenticated, \`is\_following\` is populated for each creator.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]},{}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/user_info.php?action=leaderboard":{"get":{"tags":["Social"],"summary":"Creator leaderboard","description":"Returns a ranked list of creators sorted by the chosen metric. Authentication is optional; when authenticated, `is_following` is populated for each creator.\n","operationId":"getLeaderboard","parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["leaderboard"]}},{"name":"period","in":"query","required":false,"schema":{"type":"string","enum":["4h","7d","30d","3m","all","ath"],"default":"7d"},"description":"Time period for leaderboard metrics."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"maximum":100},"description":"Number of creators to return."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"minimum":0},"description":"Pagination offset."},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","enum":["points","pnl","stacks_created","last_activity","stack_trades","hit_rate","best_stack_ath"],"default":"points"},"description":"Metric to sort creators by."}],"responses":{"200":{"description":"Leaderboard data.","content":{"application/json":{"schema":{"type":"object","properties":{"creators":{"type":"array","items":{"type":"object","properties":{"rank":{"type":"integer"},"username":{"type":"string"},"avatar":{"type":"string","nullable":true},"stacks_created":{"type":"integer"},"stack_trades":{"type":"integer"},"hit_rate":{"type":"number","nullable":true},"best_stack_ath":{"type":"number","nullable":true},"combined_pnl":{"type":"number","nullable":true},"points":{"type":"number"},"last_activity":{"type":"string","nullable":true},"last_accessed":{"type":"string","nullable":true},"last_active":{"type":"string","nullable":true},"top_stack":{"type":"object","nullable":true},"follower_count":{"type":"integer"},"is_following":{"type":"boolean","nullable":true}}}},"pagination":{"type":"object","properties":{"total_count":{"type":"integer"},"has_next":{"type":"boolean"},"offset":{"type":"integer"},"limit":{"type":"integer"}}},"metadata":{"type":"object","properties":{"period":{"type":"string"},"sort_by":{"type":"string"},"updated_at":{"type":"string","nullable":true},"source":{"type":"string","description":"Cache source (redis, db, realtime)."}}}}}}}},"400":{"description":"Invalid sort_by parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Top creators

> Returns up to 5 top creators with their stack and follower counts. Authentication is optional; when authenticated, \`is\_following\` is populated.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]},{}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}}},"paths":{"/api/user_info.php?action=top_creators":{"post":{"tags":["Social"],"summary":"Top creators","description":"Returns up to 5 top creators with their stack and follower counts. Authentication is optional; when authenticated, `is_following` is populated.\n","operationId":"getTopCreators","parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["top_creators"]}}],"responses":{"200":{"description":"Array of top creators.","content":{"application/json":{"schema":{"type":"array","maxItems":5,"items":{"type":"object","properties":{"username":{"type":"string"},"avatar":{"type":"string","nullable":true},"stack_count":{"type":"integer"},"follower_count":{"type":"integer"},"is_following":{"type":"boolean","nullable":true}}}}}}}}}}}}
```

## Public user profile

> Returns a user's public profile information. No authentication required.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/user_info.php?action=public_profile":{"post":{"tags":["Social"],"summary":"Public user profile","description":"Returns a user's public profile information. No authentication required.\n","operationId":"getPublicProfile","parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["public_profile"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["username"],"properties":{"username":{"type":"string","description":"Username to look up."}}}}}},"responses":{"200":{"description":"Public profile data.","content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string"},"avatar":{"type":"string","nullable":true},"bio":{"type":"string","nullable":true},"created_at":{"type":"string"},"slippage":{"type":"number","nullable":true},"priority_fee":{"type":"number","nullable":true},"telegram":{"type":"string","nullable":true},"discord":{"type":"string","nullable":true},"twitter":{"type":"string","nullable":true},"linkedin":{"type":"string","nullable":true},"personal":{"type":"string","nullable":true}}}}}},"404":{"description":"User not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Public user profile metrics

> Returns a user's public profile performance metrics. No authentication required.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/user_info.php?action=public_profile_metrics":{"post":{"tags":["Social"],"summary":"Public user profile metrics","description":"Returns a user's public profile performance metrics. No authentication required.\n","operationId":"getPublicProfileMetrics","parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","enum":["public_profile_metrics"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["username"],"properties":{"username":{"type":"string","description":"Username to look up."}}}}}},"responses":{"200":{"description":"Public profile metrics data.","content":{"application/json":{"schema":{"type":"object","properties":{"best_stack_ath":{"type":"number","nullable":true},"hit_rate":{"type":"number","nullable":true},"combined_pnl":{"type":"number","nullable":true},"followers":{"type":"integer"},"stack_count":{"type":"integer"},"points":{"type":"number","nullable":true}}}}}},"404":{"description":"User not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Generate a referral link

> Creates a new referral link with an auto-generated access code for the authenticated user.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/refer.php":{"post":{"tags":["Social"],"summary":"Generate a referral link","description":"Creates a new referral link with an auto-generated access code for the authenticated user.\n","operationId":"generateReferralLink","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["referral_code"],"properties":{"referral_code":{"type":"string","description":"The referral code to embed in the link."}}}}}},"responses":{"200":{"description":"Referral link created.","content":{"application/json":{"schema":{"type":"object","properties":{"referral_link":{"type":"string","description":"Full referral URL."},"access_code":{"type":"string","description":"Generated early-access code."},"access_code_name":{"type":"string","description":"Descriptive name of the access code."},"referral_code":{"type":"string","description":"The referral code that was provided."},"expires_at":{"type":"string","description":"Expiration timestamp of the access code."}}}}}},"400":{"description":"Missing referral_code or invalid body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"User not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method not allowed (only POST is accepted).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Get referral data

> Returns the authenticated user's multi-level referral tree with volume data for each referred user.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"ReferralVolumeData":{"type":"object","properties":{"username":{"type":"string"},"total_successful_orders":{"type":"integer"},"total_orders":{"type":"integer"},"total_volume_micro_usdc":{"type":"integer"},"total_volume_usdc":{"type":"number"},"total_platform_fees_micro_usdc":{"type":"integer"},"total_platform_fees_usdc":{"type":"number"},"total_creator_fees_micro_usdc":{"type":"integer"},"total_creator_fees_usdc":{"type":"number"},"first_order_timestamp":{"type":"integer","nullable":true},"last_order_timestamp":{"type":"integer","nullable":true},"buy_volume_micro_usdc":{"type":"integer"},"buy_volume_usdc":{"type":"number"},"sell_volume_micro_usdc":{"type":"integer"},"sell_volume_usdc":{"type":"number"},"buy_orders_count":{"type":"integer"},"sell_orders_count":{"type":"integer"},"success_rate":{"type":"number"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/referrals.php":{"get":{"tags":["Social"],"summary":"Get referral data","description":"Returns the authenticated user's multi-level referral tree with volume data for each referred user.\n","operationId":"getReferrals","responses":{"200":{"description":"Multi-level referral data with volume statistics.","content":{"application/json":{"schema":{"type":"object","properties":{"level1":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"username":{"type":"string"},"volume_data":{"$ref":"#/components/schemas/ReferralVolumeData"}}}},"level2":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"username":{"type":"string"},"volume_data":{"$ref":"#/components/schemas/ReferralVolumeData"}}}},"level3":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"username":{"type":"string"},"volume_data":{"$ref":"#/components/schemas/ReferralVolumeData"}}}},"summary":{"type":"object","properties":{"total_referrals":{"type":"integer"},"total_volume_usdc":{"type":"number"},"total_platform_fees_usdc":{"type":"number"},"total_successful_orders":{"type":"integer"},"by_level":{"type":"object","additionalProperties":{"type":"object","properties":{"count":{"type":"integer"},"total_volume_usdc":{"type":"number"},"total_platform_fees_usdc":{"type":"number"},"total_successful_orders":{"type":"integer"}}}}}},"pagination":{"type":"object","description":"Pagination metadata from the incentive service."}}}}}},"401":{"description":"User not authenticated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"User not found or username not set.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method not allowed (only GET is accepted).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```


# Market Data

## Bulk stack price stats

> Returns current prices and percentage change stats for up to 1000 stacks. No authentication required.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/bulk_stack_stats.php":{"post":{"tags":["Market Data"],"summary":"Bulk stack price stats","description":"Returns current prices and percentage change stats for up to 1000 stacks. No authentication required.\n","operationId":"getBulkStackStats","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stack_ids"],"properties":{"stack_ids":{"type":"array","items":{"type":"integer"},"maxItems":1000,"description":"Array of stack IDs (max 1000)."}}}}}},"responses":{"200":{"description":"Array of stack stats in the same order as the input.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"stack_id":{"type":"integer"},"found":{"type":"boolean"},"price":{"type":"number","nullable":true,"description":"Current stack price. Present only when found=true."},"stats":{"type":"object","nullable":true,"description":"Percentage change stats. Present only when found=true.","properties":{"change4H":{"type":"number","nullable":true},"change1D":{"type":"number","nullable":true},"change1W":{"type":"number","nullable":true},"change1M":{"type":"number","nullable":true},"changeAll":{"type":"number","nullable":true}}}}}}}}},"400":{"description":"Invalid input (missing or empty stack_ids, exceeds 1000).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Bulk token price stats

> Returns current prices and percentage change stats for up to 1000 tokens by address. No authentication required.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/bulk_token_stats.php":{"post":{"tags":["Market Data"],"summary":"Bulk token price stats","description":"Returns current prices and percentage change stats for up to 1000 tokens by address. No authentication required.\n","operationId":"getBulkTokenStats","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["addresses"],"properties":{"addresses":{"type":"array","items":{"type":"string"},"maxItems":1000,"description":"Array of token addresses (max 1000)."}}}}}},"responses":{"200":{"description":"Array of token stats in the same order as the input.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"found":{"type":"boolean"},"price":{"type":"number","nullable":true,"description":"Current token price. Present only when found=true."},"stats":{"type":"object","nullable":true,"description":"Percentage change stats. Present only when found=true.","properties":{"change4H":{"type":"number","nullable":true},"change1D":{"type":"number","nullable":true},"change1W":{"type":"number","nullable":true},"change1M":{"type":"number","nullable":true},"changeAll":{"type":"number","nullable":true}}}}}}}}},"400":{"description":"Invalid input (missing or empty addresses, exceeds 1000).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```


# Search

## Search stacks, creators, and tokens

> Performs a simple stack name search or a faceted search across stacks, creators, and tokens. If any of \`filters\`, \`sort\`, or \`pagination\` keys are present in the body, the faceted search is used; otherwise simple search is used. No authentication required.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/search.php":{"post":{"tags":["Search"],"summary":"Search stacks, creators, and tokens","description":"Performs a simple stack name search or a faceted search across stacks, creators, and tokens. If any of `filters`, `sort`, or `pagination` keys are present in the body, the faceted search is used; otherwise simple search is used. No authentication required.\n","operationId":"search","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"title":"SimpleSearchRequest","type":"object","required":["query"],"properties":{"query":{"type":"string","description":"Search query string."}}},{"title":"FacetedSearchRequest","type":"object","required":["query"],"properties":{"query":{"type":"string","description":"Search query string."},"filters":{"type":"object","properties":{"entity_types":{"type":"array","items":{"type":"string"},"description":"Entity types to include in results (e.g. stacks, creators, tokens)."}}},"sort":{"type":"object","properties":{"field":{"type":"string","description":"Field to sort results by."},"direction":{"type":"string","enum":["asc","desc"],"description":"Sort direction."}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","minimum":1,"default":1,"description":"Page number."},"per_page":{"type":"integer","minimum":1,"maximum":50,"default":20,"description":"Results per page."}}}}}]}}}},"responses":{"200":{"description":"Search results. Shape depends on search mode.","content":{"application/json":{"schema":{"oneOf":[{"title":"SimpleSearchResponse","type":"array","items":{"type":"object","properties":{"stack_name":{"type":"string"},"stack_id":{"type":"integer"},"slug":{"type":"string"},"description_truncated":{"type":"string","nullable":true}}}},{"title":"FacetedSearchResponse","type":"object","properties":{"results":{"type":"object","properties":{"stacks":{"type":"array","items":{"type":"object"}},"creators":{"type":"array","items":{"type":"object"}},"tokens":{"type":"array","items":{"type":"object"}}}},"facets":{"type":"object","properties":{"categories":{"type":"object"},"price_ranges":{"type":"object"},"market_cap_ranges":{"type":"object"},"creators":{"type":"object"}}},"meta":{"type":"object","properties":{"total_results":{"type":"integer"},"query":{"type":"string"},"execution_time":{"type":"number","description":"Search execution time in seconds."},"page":{"type":"integer"},"per_page":{"type":"integer"},"has_more":{"type":"boolean"}}}}}]}}}},"400":{"description":"Missing or empty query.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method not allowed (only POST is accepted).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported media type (Content-Type must be application/json).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```


# Indexify API

## Get stack chart payload with version segments

> Returns token amounts for each allocation version segment so the frontend can build accurate historical charts across allocation edits. Includes a \`segments\` array with time ranges and per-version base amounts, plus a backwards-compatible \`tokens\` field with the current allocation.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[],"paths":{"/api/charts.php?action=stack-chart-payload":{"get":{"operationId":"getStackChartPayload","summary":"Get stack chart payload with version segments","description":"Returns token amounts for each allocation version segment so the frontend can build accurate historical charts across allocation edits. Includes a `segments` array with time ranges and per-version base amounts, plus a backwards-compatible `tokens` field with the current allocation.\n","parameters":[{"name":"slug","in":"query","schema":{"type":"string"},"description":"Stack slug (either slug or stack_id required)."},{"name":"stack_id","in":"query","schema":{"type":"integer"},"description":"Stack ID (either slug or stack_id required)."},{"name":"bucket","in":"query","schema":{"type":"string","enum":["1s","1m","5m","30m","1h","24h"],"default":"5m"},"description":"Chart candle bucket size."},{"name":"endTime","in":"query","schema":{"type":"integer"},"description":"End timestamp for pagination."},{"name":"includeTokenValues","in":"query","schema":{"type":"string","enum":["true","false"]},"description":"Whether to include per-token values in the chart response."}],"responses":{"200":{"description":"Chart payload with version segments.","content":{"application/json":{"schema":{"type":"object","properties":{"stack_id":{"type":"integer"},"payload":{"type":"object","properties":{"segments":{"type":"array","description":"Version segments ordered chronologically. Each segment represents one allocation version with its time range and token base amounts.\n","items":{"type":"object","properties":{"version":{"type":"integer","description":"Version number (matches version_history endpoint)."},"start":{"type":"integer","description":"Unix timestamp when this allocation became active."},"end":{"type":"integer","nullable":true,"description":"Unix timestamp when this allocation was replaced. null for the current live allocation.\n"},"tokens":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"Solana token address."},"amount":{"type":"number","description":"Base token amount for this version."}}}}}}},"tokens":{"type":"array","description":"Current base token amounts (backwards compatibility).","items":{"type":"object","properties":{"address":{"type":"string"},"amount":{"type":"number"}}}},"bucket":{"type":"string"},"limit":{"type":"integer"},"includeTokenValues":{"type":"boolean"}}}}}}}},"400":{"description":"Missing parameters or invalid bucket.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Stack not found or no base token amounts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}}}
```

## Get chart markers for a stack

> Returns buy/sell/inception/closed/allocation\_change markers for overlay on stack price charts. Requires authentication for buy/sell markers. Allocation change markers are included at each version transition point.<br>

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/charts.php?action=chart-markers":{"get":{"operationId":"getChartMarkers","summary":"Get chart markers for a stack","description":"Returns buy/sell/inception/closed/allocation_change markers for overlay on stack price charts. Requires authentication for buy/sell markers. Allocation change markers are included at each version transition point.\n","parameters":[{"name":"slug","in":"query","schema":{"type":"string"},"description":"Stack slug (either slug or stack_id required)."},{"name":"stack_id","in":"query","schema":{"type":"integer"},"description":"Stack ID (either slug or stack_id required)."},{"name":"start","in":"query","schema":{"type":"integer"},"description":"Start of time range (unix timestamp). Defaults to 30 days ago."},{"name":"end","in":"query","schema":{"type":"integer"},"description":"End of time range (unix timestamp). Defaults to now."}],"responses":{"200":{"description":"Chart markers within the requested time range.","content":{"application/json":{"schema":{"type":"object","properties":{"stack_id":{"type":"integer"},"start":{"type":"integer"},"end":{"type":"integer"},"markers":{"type":"array","items":{"type":"object","required":["type","time","time_iso"],"properties":{"type":{"type":"string","enum":["inception","closed","buy","sell","allocation_change"]},"time":{"type":"integer","description":"Unix timestamp."},"time_iso":{"type":"string","description":"ISO 8601 timestamp."},"order_id":{"type":"integer","description":"Present on buy/sell markers only."},"amount_usdc":{"type":"number","nullable":true,"description":"USDC amount, present on buy/sell markers only."},"status":{"type":"string","description":"Order status, present on buy/sell markers only."},"version":{"type":"integer","description":"The version that became active at this point. Present on allocation_change markers only.\n"},"creator_note":{"type":"string","nullable":true,"description":"Creator's note about the allocation change. Present on allocation_change markers only.\n"}}}}}}}}},"400":{"description":"Missing slug/stack_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Stack not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```


# DeAnon

## Identify known holders of a token

> Fetches all token holders for a given Solana mint address and cross-references wallet addresses against a curated lookup table of over 20,000 known wallet-to-Twitter mappings, and returns identified holders sorted by balance descending with pagination.

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[],"paths":{"/api/deanon.php?action=holders":{"get":{"operationId":"deanonHolders","summary":"Identify known holders of a token","description":"Fetches all token holders for a given Solana mint address and cross-references wallet addresses against a curated lookup table of over 20,000 known wallet-to-Twitter mappings, and returns identified holders sorted by balance descending with pagination.","tags":["DeAnon"],"parameters":[{"name":"mint","in":"query","required":true,"schema":{"type":"string","minLength":32,"maxLength":44},"description":"Solana token mint address (32-44 Base58 characters)"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"description":"Number of results per page (1-100)"},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0},"description":"Number of results to skip for pagination"}],"responses":{"200":{"description":"Identified holders for the given token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeanonHoldersResponse"}}}},"400":{"description":"Invalid or missing mint address.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"DeanonHoldersResponse":{"type":"object","description":"Response from the DeAnon holders endpoint. Contains identified token holders matched against a curated wallet-to-Twitter lookup table.","properties":{"mint":{"type":"string","description":"The requested token mint address"},"total_holders_fetched":{"type":"integer","description":"Total number of token accounts fetched from Helius RPC (up to 10,000)"},"identified_count":{"type":"integer","description":"Number of holders matched against the lookup table"},"identified_holders":{"type":"array","description":"Paginated list of identified holders, sorted by balance descending","items":{"type":"object","properties":{"rank":{"type":"integer","description":"1-based rank by balance across all identified holders"},"owner":{"type":"string","description":"Solana wallet address"},"twitter":{"type":"string","description":"Twitter/X profile URL"},"balance":{"type":"number","description":"Token balance in human-readable units (adjusted for decimals)"},"pct_supply":{"type":"number","description":"Percentage of total supply held, rounded to 6 decimal places"}}}},"pagination":{"type":"object","properties":{"offset":{"type":"integer","description":"Current offset"},"limit":{"type":"integer","description":"Current page size"},"total_count":{"type":"integer","description":"Total number of identified holders"},"has_more":{"type":"boolean","description":"True if there are more results after this page"},"has_previous":{"type":"boolean","description":"True if offset > 0"},"page":{"type":"integer","description":"Current page number (1-based)"},"total_pages":{"type":"integer","description":"Total number of pages"}}}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}}}
```


# Limit Orders

## Place a new limit order

> Place a conditional order that triggers automatically when a token reaches a target price. Supports limit buys (buy + lte), stop losses (sell + lte), take profits (sell + gte), and breakout buys (buy + gte). Balances are checked at fill time only — no escrow. A company stack is auto-created for the token if one does not exist. DFlow-only tokens are auto-detected and routed accordingly.\
> \*\*Limits\*\*: 20 active orders per user, 1 active order per token per user, minimum buy amount 1 USDC.

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"LimitOrderPlaceResponse":{"type":"object","description":"Subset of limit order fields returned by the place action. Does not include token metadata or display fields.","properties":{"order_id":{"type":"string","description":"16-character unique order identifier"},"status":{"type":"string","enum":["ACTIVE"]},"token_address":{"type":"string","description":"Solana token mint address"},"side":{"type":"string","enum":["buy","sell"]},"condition_type":{"type":"string","enum":["lte","gte"]},"trigger_price":{"type":"number","description":"Target USD price threshold"},"amount":{"type":"number","description":"For buys: USDC amount. For sells: percentage (0-100)"},"stack_id":{"type":"integer","description":"Company stack ID used for the trade"},"swap_provider":{"type":"string","enum":["jupiter","dflow"]},"created_at":{"type":"integer","description":"Unix timestamp of order creation"},"expires_at":{"type":"integer","nullable":true,"description":"Unix timestamp for automatic expiration, or null if no expiry"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/limit_orders.php?action=place":{"post":{"operationId":"limitOrderPlace","summary":"Place a new limit order","description":"Place a conditional order that triggers automatically when a token reaches a target price. Supports limit buys (buy + lte), stop losses (sell + lte), take profits (sell + gte), and breakout buys (buy + gte). Balances are checked at fill time only — no escrow. A company stack is auto-created for the token if one does not exist. DFlow-only tokens are auto-detected and routed accordingly.\n**Limits**: 20 active orders per user, 1 active order per token per user, minimum buy amount 1 USDC.","tags":["Limit Orders"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["token_address","side","condition_type","trigger_price","amount"],"properties":{"token_address":{"type":"string","description":"Solana token mint address"},"side":{"type":"string","enum":["buy","sell"],"description":"Order direction. \"buy\" purchases the token with USDC, \"sell\" sells existing holdings"},"condition_type":{"type":"string","enum":["lte","gte"],"description":"Price comparison. \"lte\" triggers when price <= target, \"gte\" triggers when price >= target"},"trigger_price":{"type":"number","description":"USD price threshold that triggers the order. Must be > 0"},"amount":{"type":"number","description":"For buys: USDC amount (minimum 1 USDC). For sells: percentage of holdings (0-100)"},"expires_at":{"type":"integer","nullable":true,"description":"Optional unix timestamp for order expiration. Must be in the future. Omit for no expiry"}}}}}},"responses":{"200":{"description":"Order placed successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LimitOrderPlaceResponse"}}}},"400":{"description":"Validation error — missing/invalid fields, minimum amount not met, invalid percentage, archived token with buy side, or invalid expires_at.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Token not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Per-user limit reached (20 active orders) or per-token limit reached (1 active order per token).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Cancel an active limit order

> Cancel a limit order that has not yet been triggered. Only orders in ACTIVE status can be cancelled. Orders in TRIGGERED, FILLING, FILLED, FAILED, or CANCELLED status cannot be cancelled. The order is removed from both the database and Redis.

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/limit_orders.php?action=cancel":{"post":{"operationId":"limitOrderCancel","summary":"Cancel an active limit order","description":"Cancel a limit order that has not yet been triggered. Only orders in ACTIVE status can be cancelled. Orders in TRIGGERED, FILLING, FILLED, FAILED, or CANCELLED status cannot be cancelled. The order is removed from both the database and Redis.","tags":["Limit Orders"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["order_id"],"properties":{"order_id":{"type":"string","description":"The 16-character limit order ID to cancel"}}}}}},"responses":{"200":{"description":"Order cancelled successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"order_id":{"type":"string"},"status":{"type":"string"}}}}}},"400":{"description":"Order is not in ACTIVE status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Order not found or does not belong to the authenticated user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## List user's limit orders

> Returns all limit orders for the authenticated user, ordered by creation time (newest first). Supports optional filtering by status and/or token address. Returns an empty array if no orders match.

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"LimitOrder":{"type":"object","description":"Full limit order object returned by list and get actions. Includes token metadata and display fields.","properties":{"order_id":{"type":"string","description":"16-character unique order identifier"},"token_address":{"type":"string","description":"Solana token mint address"},"token_symbol":{"type":"string","nullable":true,"description":"Token ticker symbol"},"token_name":{"type":"string","nullable":true,"description":"Token display name"},"token_image":{"type":"string","nullable":true,"description":"Token logo URL"},"side":{"type":"string","enum":["buy","sell"],"description":"Order direction"},"condition_type":{"type":"string","enum":["lte","gte"],"description":"\"lte\" triggers when price <= target, \"gte\" triggers when price >= target"},"trigger_price":{"type":"number","description":"Target USD price threshold"},"amount":{"type":"number","description":"For buys: USDC amount. For sells: percentage of holdings (0-100)"},"amount_display":{"type":"string","description":"Human-readable amount — \"$50.00\" for buys, \"50%\" for sells"},"status":{"type":"string","enum":["ACTIVE","TRIGGERED","FILLING","FILLED","FAILED","CANCELLED"],"description":"Current lifecycle status"},"stack_id":{"type":"integer","description":"Company stack ID used for the trade"},"swap_provider":{"type":"string","enum":["jupiter","dflow"],"description":"Swap provider used for execution"},"created_at":{"type":"integer","description":"Unix timestamp of order creation"},"updated_at":{"type":"integer","nullable":true,"description":"Unix timestamp of last status change"},"triggered_at":{"type":"integer","nullable":true,"description":"Unix timestamp when the price condition was met"},"triggered_price":{"type":"number","nullable":true,"description":"Actual USD price that triggered the order"},"filled_at":{"type":"integer","nullable":true,"description":"Unix timestamp when the fill completed"},"fill_order_id":{"type":"string","nullable":true,"description":"Linked stack_orders.order_id for the fill"},"error_message":{"type":"string","nullable":true,"description":"Failure reason (only present when status is FAILED)"},"expires_at":{"type":"integer","nullable":true,"description":"Unix timestamp for automatic expiration, or null if no expiry"}}}}},"paths":{"/api/limit_orders.php?action=list":{"get":{"operationId":"limitOrderList","summary":"List user's limit orders","description":"Returns all limit orders for the authenticated user, ordered by creation time (newest first). Supports optional filtering by status and/or token address. Returns an empty array if no orders match.","tags":["Limit Orders"],"parameters":[{"name":"status","in":"query","schema":{"type":"string","enum":["ACTIVE","TRIGGERED","FILLING","FILLED","FAILED","CANCELLED"]},"description":"Filter by order status"},{"name":"token_address","in":"query","schema":{"type":"string"},"description":"Filter by Solana token mint address"}],"responses":{"200":{"description":"List of limit orders. Returns an empty array if no orders match the filters.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LimitOrder"}}}}}}}}}}
```

## Get a single limit order

> Returns full details for a specific limit order including token metadata and fill information. The order must belong to the authenticated user.

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"servers":[{"url":"https://api.indexify.finance","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key with the `ix_` prefix. You can generate an API Key by navigating to Settings -> API Key in the web app. Pass it in the `X-API-KEY` header on every request."}},"schemas":{"LimitOrder":{"type":"object","description":"Full limit order object returned by list and get actions. Includes token metadata and display fields.","properties":{"order_id":{"type":"string","description":"16-character unique order identifier"},"token_address":{"type":"string","description":"Solana token mint address"},"token_symbol":{"type":"string","nullable":true,"description":"Token ticker symbol"},"token_name":{"type":"string","nullable":true,"description":"Token display name"},"token_image":{"type":"string","nullable":true,"description":"Token logo URL"},"side":{"type":"string","enum":["buy","sell"],"description":"Order direction"},"condition_type":{"type":"string","enum":["lte","gte"],"description":"\"lte\" triggers when price <= target, \"gte\" triggers when price >= target"},"trigger_price":{"type":"number","description":"Target USD price threshold"},"amount":{"type":"number","description":"For buys: USDC amount. For sells: percentage of holdings (0-100)"},"amount_display":{"type":"string","description":"Human-readable amount — \"$50.00\" for buys, \"50%\" for sells"},"status":{"type":"string","enum":["ACTIVE","TRIGGERED","FILLING","FILLED","FAILED","CANCELLED"],"description":"Current lifecycle status"},"stack_id":{"type":"integer","description":"Company stack ID used for the trade"},"swap_provider":{"type":"string","enum":["jupiter","dflow"],"description":"Swap provider used for execution"},"created_at":{"type":"integer","description":"Unix timestamp of order creation"},"updated_at":{"type":"integer","nullable":true,"description":"Unix timestamp of last status change"},"triggered_at":{"type":"integer","nullable":true,"description":"Unix timestamp when the price condition was met"},"triggered_price":{"type":"number","nullable":true,"description":"Actual USD price that triggered the order"},"filled_at":{"type":"integer","nullable":true,"description":"Unix timestamp when the fill completed"},"fill_order_id":{"type":"string","nullable":true,"description":"Linked stack_orders.order_id for the fill"},"error_message":{"type":"string","nullable":true,"description":"Failure reason (only present when status is FAILED)"},"expires_at":{"type":"integer","nullable":true,"description":"Unix timestamp for automatic expiration, or null if no expiry"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}},"paths":{"/api/limit_orders.php?action=get":{"get":{"operationId":"limitOrderGet","summary":"Get a single limit order","description":"Returns full details for a specific limit order including token metadata and fill information. The order must belong to the authenticated user.","tags":["Limit Orders"],"parameters":[{"name":"order_id","in":"query","required":true,"schema":{"type":"string"},"description":"The 16-character limit order ID"}],"responses":{"200":{"description":"Limit order details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LimitOrder"}}}},"404":{"description":"Order not found or does not belong to the authenticated user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```


# Models

## The Error object

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}}}
```

## The SuccessMessage object

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"components":{"schemas":{"SuccessMessage":{"type":"object","required":["success","message"],"properties":{"success":{"type":"boolean"},"message":{"type":"string"}}}}}}
```

## The UserPublic object

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"components":{"schemas":{"UserPublic":{"type":"object","properties":{"username":{"type":"string"},"avatar":{"type":"string","nullable":true},"bio":{"type":"string","nullable":true},"stacks_count":{"type":"integer"},"telegram":{"type":"string","nullable":true},"discord":{"type":"string","nullable":true},"twitter":{"type":"string","nullable":true},"linkedin":{"type":"string","nullable":true},"personal":{"type":"string","nullable":true}}}}}}
```

## The TokenObject object

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"components":{"schemas":{"TokenObject":{"type":"object","description":"Token representation returned by list/paginated_list actions.","properties":{"id":{"type":"integer"},"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"image_url":{"type":"string","nullable":true},"decimals":{"type":"integer"},"chain":{"type":"string"},"pool_address":{"type":"string","nullable":true},"cg_id":{"type":"string","nullable":true},"price":{"type":"number","nullable":true},"market_cap":{"type":"string","nullable":true},"volume_24h":{"type":"string","nullable":true},"change4H":{"type":"number","nullable":true},"change1D":{"type":"number","nullable":true},"change1W":{"type":"number","nullable":true},"change1M":{"type":"number","nullable":true},"changeAll":{"type":"number","nullable":true},"is_verified":{"type":"boolean"},"archived":{"type":"boolean"},"categories":{"type":"array","items":{"type":"string"}}}}}}}
```

## The StackObject object

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"components":{"schemas":{"StackObject":{"type":"object","description":"Canonical stack representation returned by discovery and fetch actions. Exact fields may vary by context (discovery vs portfolio vs trending).\n","properties":{"id":{"type":"integer"},"stack_name":{"type":"string"},"slug":{"type":"string"},"description":{"type":"string","nullable":true},"topic":{"type":"string","nullable":true,"description":"Stack risk/duration category."},"creator_fee":{"type":"number"},"price":{"type":"number","nullable":true},"weighted_market_cap":{"type":"number","nullable":true},"change4H":{"type":"number","nullable":true},"change1D":{"type":"number","nullable":true},"change1W":{"type":"number","nullable":true},"change1M":{"type":"number","nullable":true},"changeAll":{"type":"number","nullable":true},"token_count":{"type":"integer"},"investor_count":{"type":"integer"},"is_company_stack":{"type":"boolean"},"archived":{"type":"boolean"},"show_creator_holdings":{"type":"boolean"},"created_at":{"type":"integer","description":"Unix timestamp."},"time_p":{"type":"integer","nullable":true,"description":"Unix timestamp of last price update."},"tvl":{"type":"number","nullable":true,"description":"Total Value Locked in USD. Only present when tvl=true in request."},"user":{"type":"object","description":"Public creator profile.","properties":{"username":{"type":"string"},"avatar":{"type":"string","nullable":true},"bio":{"type":"string","nullable":true},"stacks_count":{"type":"integer"},"telegram":{"type":"string","nullable":true},"discord":{"type":"string","nullable":true},"twitter":{"type":"string","nullable":true},"linkedin":{"type":"string","nullable":true},"personal":{"type":"string","nullable":true}}},"tokens":{"type":"array","description":"Token allocations within the stack.","items":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"image_url":{"type":"string","nullable":true},"weight":{"type":"number"},"is_verified":{"type":"boolean"}}}}}}}}}
```

## The PaginationOffsetLimit object

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"components":{"schemas":{"PaginationOffsetLimit":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}}
```

## The PaginationPage object

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"components":{"schemas":{"PaginationPage":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"total":{"type":"integer"},"total_pages":{"type":"integer"},"has_next":{"type":"boolean"},"has_prev":{"type":"boolean"}}}}}}
```

## The ChatMessage object

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"components":{"schemas":{"ChatMessage":{"type":"object","properties":{"id":{"type":"integer"},"stack_id":{"type":"integer"},"messages":{"type":"string","description":"Message content."},"message_type":{"type":"string","enum":["community","creator_notes"]},"pinned":{"type":"boolean"},"created_at":{"type":"integer","description":"Unix timestamp."},"user":{"type":"object","properties":{"username":{"type":"string"},"avatar":{"type":"string","nullable":true}}}}}}}}
```

## The ReferralVolumeData object

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"components":{"schemas":{"ReferralVolumeData":{"type":"object","properties":{"username":{"type":"string"},"total_successful_orders":{"type":"integer"},"total_orders":{"type":"integer"},"total_volume_micro_usdc":{"type":"integer"},"total_volume_usdc":{"type":"number"},"total_platform_fees_micro_usdc":{"type":"integer"},"total_platform_fees_usdc":{"type":"number"},"total_creator_fees_micro_usdc":{"type":"integer"},"total_creator_fees_usdc":{"type":"number"},"first_order_timestamp":{"type":"integer","nullable":true},"last_order_timestamp":{"type":"integer","nullable":true},"buy_volume_micro_usdc":{"type":"integer"},"buy_volume_usdc":{"type":"number"},"sell_volume_micro_usdc":{"type":"integer"},"sell_volume_usdc":{"type":"number"},"buy_orders_count":{"type":"integer"},"sell_orders_count":{"type":"integer"},"success_rate":{"type":"number"}}}}}}
```

## The LimitOrder object

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"components":{"schemas":{"LimitOrder":{"type":"object","description":"Full limit order object returned by list and get actions. Includes token metadata and display fields.","properties":{"order_id":{"type":"string","description":"16-character unique order identifier"},"token_address":{"type":"string","description":"Solana token mint address"},"token_symbol":{"type":"string","nullable":true,"description":"Token ticker symbol"},"token_name":{"type":"string","nullable":true,"description":"Token display name"},"token_image":{"type":"string","nullable":true,"description":"Token logo URL"},"side":{"type":"string","enum":["buy","sell"],"description":"Order direction"},"condition_type":{"type":"string","enum":["lte","gte"],"description":"\"lte\" triggers when price <= target, \"gte\" triggers when price >= target"},"trigger_price":{"type":"number","description":"Target USD price threshold"},"amount":{"type":"number","description":"For buys: USDC amount. For sells: percentage of holdings (0-100)"},"amount_display":{"type":"string","description":"Human-readable amount — \"$50.00\" for buys, \"50%\" for sells"},"status":{"type":"string","enum":["ACTIVE","TRIGGERED","FILLING","FILLED","FAILED","CANCELLED"],"description":"Current lifecycle status"},"stack_id":{"type":"integer","description":"Company stack ID used for the trade"},"swap_provider":{"type":"string","enum":["jupiter","dflow"],"description":"Swap provider used for execution"},"created_at":{"type":"integer","description":"Unix timestamp of order creation"},"updated_at":{"type":"integer","nullable":true,"description":"Unix timestamp of last status change"},"triggered_at":{"type":"integer","nullable":true,"description":"Unix timestamp when the price condition was met"},"triggered_price":{"type":"number","nullable":true,"description":"Actual USD price that triggered the order"},"filled_at":{"type":"integer","nullable":true,"description":"Unix timestamp when the fill completed"},"fill_order_id":{"type":"string","nullable":true,"description":"Linked stack_orders.order_id for the fill"},"error_message":{"type":"string","nullable":true,"description":"Failure reason (only present when status is FAILED)"},"expires_at":{"type":"integer","nullable":true,"description":"Unix timestamp for automatic expiration, or null if no expiry"}}}}}}
```

## The LimitOrderPlaceResponse object

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"components":{"schemas":{"LimitOrderPlaceResponse":{"type":"object","description":"Subset of limit order fields returned by the place action. Does not include token metadata or display fields.","properties":{"order_id":{"type":"string","description":"16-character unique order identifier"},"status":{"type":"string","enum":["ACTIVE"]},"token_address":{"type":"string","description":"Solana token mint address"},"side":{"type":"string","enum":["buy","sell"]},"condition_type":{"type":"string","enum":["lte","gte"]},"trigger_price":{"type":"number","description":"Target USD price threshold"},"amount":{"type":"number","description":"For buys: USDC amount. For sells: percentage (0-100)"},"stack_id":{"type":"integer","description":"Company stack ID used for the trade"},"swap_provider":{"type":"string","enum":["jupiter","dflow"]},"created_at":{"type":"integer","description":"Unix timestamp of order creation"},"expires_at":{"type":"integer","nullable":true,"description":"Unix timestamp for automatic expiration, or null if no expiry"}}}}}}
```

## The DeanonHoldersResponse object

```json
{"openapi":"3.0.3","info":{"title":"Indexify API","version":"0.1.12-beta"},"components":{"schemas":{"DeanonHoldersResponse":{"type":"object","description":"Response from the DeAnon holders endpoint. Contains identified token holders matched against a curated wallet-to-Twitter lookup table.","properties":{"mint":{"type":"string","description":"The requested token mint address"},"total_holders_fetched":{"type":"integer","description":"Total number of token accounts fetched from Helius RPC (up to 10,000)"},"identified_count":{"type":"integer","description":"Number of holders matched against the lookup table"},"identified_holders":{"type":"array","description":"Paginated list of identified holders, sorted by balance descending","items":{"type":"object","properties":{"rank":{"type":"integer","description":"1-based rank by balance across all identified holders"},"owner":{"type":"string","description":"Solana wallet address"},"twitter":{"type":"string","description":"Twitter/X profile URL"},"balance":{"type":"number","description":"Token balance in human-readable units (adjusted for decimals)"},"pct_supply":{"type":"number","description":"Percentage of total supply held, rounded to 6 decimal places"}}}},"pagination":{"type":"object","properties":{"offset":{"type":"integer","description":"Current offset"},"limit":{"type":"integer","description":"Current page size"},"total_count":{"type":"integer","description":"Total number of identified holders"},"has_more":{"type":"boolean","description":"True if there are more results after this page"},"has_previous":{"type":"boolean","description":"True if offset > 0"},"page":{"type":"integer","description":"Current page number (1-based)"},"total_pages":{"type":"integer","description":"Total number of pages"}}}}}}}}
```


