> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rampnow.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Chains and tokens

> Browse supported tokens and blockchains available for selling digital assets to fiat using Rampnow’s offramp.

<Note>
  Offramp asset availability is based on liquidity and network stability. Only assets with `orderConfigMap.sell.status = "active"` are enabled for user withdrawals.
</Note>

## Network Coverage

<div style={{display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1rem'}}>
  <Card title="100+ Blockchains" icon="layer-group">
    Offramp coverage across major L1s, L2s and sidechains
  </Card>

  <Card title="Thousands of Tokens" icon="coins">
    Liquid assets available for conversion into fiat
  </Card>

  <Card title="EVM & Non-EVM" icon="code-branch">
    Support for EVM chains, Bitcoin and other non-EVM networks
  </Card>

  <Card title="Dynamic Availability" icon="arrows-rotate">
    Routes managed in real time based on liquidity
  </Card>
</div>

## Supported Network Types

<Card title="Skip to Offramp Asset Explorer" icon="arrow-down" href="#supported-assets">
  Jump directly to the interactive asset list to search and filter supported offramp assets.
</Card>

<Tabs>
  <Tab title="Layer 1">
    **Major L1 blockchains (offramp-enabled):**

    * Ethereum
    * Bitcoin
    * Solana
    * Avalanche
    * BNB Smart Chain
    * PulseChain
    * Other supported mainnets
  </Tab>

  <Tab title="Layer 2">
    **Ethereum L2 networks:**

    * Arbitrum One
    * Base
    * Optimism
    * Polygon zkEVM
  </Tab>

  <Tab title="Sidechains & Alt L1s">
    **Popular alt networks:**

    * Polygon
    * Other EVM-compatible chains
  </Tab>

  <Tab title="Non-EVM & Special Networks">
    **Non-EVM or specialized networks:**

    * Bitcoin
    * Solana
    * Selected additional non-EVM chains (where supported)
  </Tab>
</Tabs>

## Popular Offramp Networks

<AccordionGroup>
  <Accordion title="Ethereum & L2 Ecosystem" icon="ethereum">
    **Offramp-enabled networks:**

    * Ethereum
    * Arbitrum One
    * Base
    * Optimism
    * Polygon
    * Other supported EVM L2s

    <Check>ERC-20 tokens with sufficient liquidity and active sell routes are eligible for fiat payouts.</Check>
  </Accordion>

  <Accordion title="Bitcoin & Major Non-EVM" icon="bitcoin">
    **Supported non-EVM cores:**

    * Bitcoin (BTC)
    * Solana (SOL)
    * Other non-EVM networks where liquidity allows

    <Tip>Native BTC and selected non-EVM assets can be cashed out directly to supported fiat rails.</Tip>
  </Accordion>

  <Accordion title="PulseChain Ecosystem" icon="bolt">
    **PulseChain-native assets:**

    * PLS
    * PLSX
    * HEX (PulseChain)
    * SOIL
    * INC

    <Info>PulseChain offramp routes are optimized in partnership with ecosystem projects and liquidity providers.</Info>
  </Accordion>

  <Accordion title="Emerging Networks" icon="rocket">
    **New & expanding chains (where supported):**

    * Additional EVM L1s and L2s
    * Selected DeFi ecosystems
    * New rollups and appchains

    <Warning>Availability may vary by region and volume.</Warning>
  </Accordion>
</AccordionGroup>

## Offramp Asset Management

<Steps>
  <Step title="Eligibility & Routing">
    Only assets with active sell routes and sufficient liquidity are made available for offramp.
  </Step>

  <Step title="Dynamic Corridor Control">
    Availability is corridor-specific (token → fiat → payout rail) and may vary per country or partner.
  </Step>

  <Step title="Automatic De-Listing">
    Assets may be temporarily or permanently disabled if liquidity, risk, or regulatory profiles change.
  </Step>
</Steps>

<Info>
  Use the interactive explorer below to search and filter supported offramp assets by token, symbol, or blockchain. Data is pulled directly from Rampnow's live configuration API (`orderConfigMap.sell.status = "active"`).
</Info>

## Real-time explorer

Use the explorer below to browse supported tokens and chains pulled directly from our API.

export const TokenExplorer = () => {
  const [tokens, setTokens] = useState([]);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);
  const [searchQuery, setSearchQuery] = useState("");
  const [selectedChain, setSelectedChain] = useState("all");
  const [selectedProduct, setSelectedProduct] = useState("all");
  useEffect(() => {
    async function load() {
      try {
        const res = await fetch("https://api.rampnow.io/api/ramp/v1/ramp_order/quote/config?apiKey=pk_live_zXuMmMzFAbfnMPQnwfEaMkabwPfKsVsg");
        if (!res.ok) throw new Error("Failed to load config");
        const json = await res.json();
        const assetConfigs = json?.data?.assetConfigs || ({});
        const normalized = Object.entries(assetConfigs).filter(([assetKey, assetConfig]) => typeof assetKey === "string" && assetKey.includes(":") && assetConfig?.orderTypeConfigs?.["sell"]?.status?.toLowerCase() === "active").map(([assetKey, assetConfig]) => {
          const [symbol, chain] = assetKey.split(":");
          return {
            symbol: symbol.trim(),
            name: symbol.trim(),
            chain: chain.trim(),
            products: ["offramp"]
          };
        }).filter(t => t.products.length > 0);
        setTokens(normalized);
        setLoading(false);
      } catch (e) {
        setError("Unable to load supported assets.");
        setLoading(false);
      }
    }
    load();
  }, []);
  const chains = useMemo(() => {
    const uniqueChains = [...new Set(tokens.map(t => t.chain))];
    return ["all", ...uniqueChains.sort()];
  }, [tokens]);
  const availableProducts = useMemo(() => {
    const set = new Set();
    tokens.forEach(t => t.products.forEach(p => set.add(p)));
    return ["all", ...Array.from(set)];
  }, [tokens]);
  const filteredTokens = useMemo(() => {
    const query = searchQuery.trim().toLowerCase();
    return tokens.filter(t => {
      const matchesSearch = !query || t.name.toLowerCase().includes(query) || t.chain.toLowerCase().includes(query);
      const matchesChain = selectedChain === "all" || t.chain === selectedChain;
      const matchesProduct = selectedProduct === "all" || t.products.includes(selectedProduct);
      return matchesSearch && matchesChain && matchesProduct;
    });
  }, [tokens, searchQuery, selectedChain, selectedProduct]);
  if (loading) return <div className="flex items-center justify-center p-10"><div className="text-sm text-zinc-950/70 dark:text-white/70">Loading...</div></div>;
  if (error) return <div className="p-4 text-sm text-red-700 bg-red-50 dark:bg-red-900/20 rounded-xl border border-red-200 dark:border-red-800">{error}</div>;
  return <div className="space-y-6 not-prose">
      <div className="text-sm text-zinc-950/70 dark:text-white/70">
        <div className="font-semibold text-zinc-950 dark:text-white mb-1">{tokens.length} tokens · {chains.length - 1} blockchains</div>
        <p>Search or filter supported assets across all networks.</p>
      </div>

      <div className="grid gap-4 md:grid-cols-2">
        <input type="text" placeholder="Search by token or blockchain..." value={searchQuery} onChange={e => setSearchQuery(e.target.value)} className="w-full px-4 py-2.5 rounded-xl border border-zinc-950/10 dark:border-white/10 bg-white dark:bg-zinc-900 text-sm text-zinc-950 dark:text-white placeholder:text-zinc-950/50 dark:placeholder:text-white/50 focus:outline-none focus:ring-2 focus:ring-zinc-950/20 dark:focus:ring-white/20" />
        <select value={selectedChain} onChange={e => setSelectedChain(e.target.value)} className="w-full px-4 py-2.5 rounded-xl border border-zinc-950/10 dark:border-white/10 bg-white dark:bg-zinc-900 text-sm text-zinc-950 dark:text-white focus:outline-none focus:ring-2 focus:ring-zinc-950/20 dark:focus:ring-white/20">
          {chains.map(chain => <option key={chain} value={chain}>{chain === "all" ? "All blockchains" : chain}</option>)}
        </select>
      </div>

      <div className="space-y-2">
        <div className="text-xs font-medium text-zinc-950/70 dark:text-white/70">Filter by product</div>
        <div className="flex flex-wrap gap-2">
          {availableProducts.map(product => <button key={product} onClick={() => setSelectedProduct(product)} className={selectedProduct === product ? "px-4 py-2 rounded-lg text-xs font-semibold border-2 border-green-500 dark:border-zinc-500 text-zinc-600 dark:text-zinc-500 bg-zinc-100 dark:bg-zinc-800 shadow-sm transition-all duration-200 ease-in-out" : "px-4 py-2 rounded-lg text-xs font-medium border-2 border-zinc-900 dark:border-white text-zinc-900 dark:text-white bg-white dark:bg-zinc-900 hover:border-green-500 dark:hover:border-zinc-500 hover:bg-zinc-50 dark:hover:bg-zinc-800 transition-all duration-200 ease-in-out"}>
  {product === "all" ? "All products" : product}
</button>)}
        </div>
      </div>

      <div className="flex justify-between text-xs text-zinc-950/70 dark:text-white/70">
        <span>Showing {filteredTokens.length} of {tokens.length}</span>
        {(searchQuery || selectedChain !== "all" || selectedProduct !== "all") && <button onClick={() => {
    setSearchQuery("");
    setSelectedChain("all");
    setSelectedProduct("all");
  }} className="font-medium text-zinc-950 dark:text-white hover:underline">Reset</button>}
      </div>

      <div className="overflow-x-auto">
        <table className="w-full text-sm">
          <thead>
            <tr className="border-b border-zinc-950/10 dark:border-white/10">
              <th className="text-left py-3 px-4 font-semibold text-zinc-950 dark:text-white">Token</th>
              <th className="text-left py-3 px-4 font-semibold text-zinc-950 dark:text-white">Symbol</th>
              <th className="text-left py-3 px-4 font-semibold text-zinc-950 dark:text-white">Blockchain</th>
            </tr>
          </thead>
          <tbody>
            {filteredTokens.map((t, idx) => <tr key={idx} className="border-b border-zinc-950/5 dark:border-white/5 hover:bg-zinc-950/5 dark:hover:bg-white/5 transition-colors">
                <td className="py-3 px-4 text-zinc-950 dark:text-white">{t.name}</td>
                <td className="py-3 px-4 text-zinc-950/70 dark:text-white/70">{t.symbol}</td>
                <td className="py-3 px-4">
                  <span className="inline-block px-2 py-0.5 rounded-md text-xs border border-zinc-950/10 dark:border-white/10 text-zinc-950/80 dark:text-white/80">
                    {t.chain}
                  </span>
                </td>
                <td className="py-3 px-4">
                </td>
              </tr>)}
          </tbody>
        </table>
      </div>
    </div>;
};

# Supported Assets

<TokenExplorer />
