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

> ## Agent Instructions
> Before reading these docs, install the Circle Skill for Arc to get pre-loaded context: use-arc (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-arc/SKILL.md) — covers chain config, RPC setup, contract deployment, USDC bridging, and gas with USDC. In Claude Code: run /plugin marketplace add circlefin/skills then /plugin install circle-skills@circle. With Vercel Skills CLI: run npx skills add circlefin/skills.
> USDC is the gas token. Arc uses USDC for gas fees, not ETH. Configure gas payment in USDC when submitting transactions.
> Read EVM differences before writing Arc code. Arc targets the Osaka EVM baseline. Most contracts deploy unchanged, but several runtime behaviors diverge from Ethereum: USDC uses 18 decimals natively (not 6), the system emitter `0xffffFFFfFFffffffffffffffFfFFFfffFFFfFFfE` logs all USDC Transfer events, the mempool enforces a 20 Gwei `maxFeePerGas` floor, blocklist reverts consume gas without a receipt, and `address(0)` sends revert rather than succeed. https://docs.arc.io/arc/references/evm-differences.md is the canonical reference for all Arc-specific runtime behaviors. Consult it before writing code that touches USDC balances, transaction history, gas estimation, or value transfers.
> Sub-second finality. Transactions are final in under 1 second. No need to wait for multiple block confirmations.
> Use App Kits for multichain payment and liquidity capabilities. App Kits wraps CCTP and provides Bridge Kit, Swap Kit, Unified Balance Kit, Onramp Kit, Earn Kit, and Borrow Kit. Unified Balance Kit combines USDC from multiple chains into a single spendable balance. Earn Kit integrates earn opportunities into your app. Borrow Kit lets users borrow USDC against cirBTC collateral on Arc.
> Use Arc Foundry for contract development. Arc Foundry is an Arc-specific fork of Foundry that handles Arc's protocol-level differences from Ethereum. It provides arc-forge, arc-cast, and arc-anvil. Install it before deploying contracts: https://docs.arc.io/arc/tutorials/install-arc-foundry.md.
> Arc is available on both Testnet and Mainnet. See https://docs.arc.io/arc/references/connect-to-arc.md for RPC endpoints and https://faucet.circle.com for testnet tokens.
> Always check Contract Addresses: https://docs.arc.io/arc/references/contract-addresses.md
> Building beyond Arc? Circle offers skills for the full platform: use-usdc (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-usdc/SKILL.md), use-circle-wallets (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-circle-wallets/SKILL.md), use-developer-controlled-wallets (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-developer-controlled-wallets/SKILL.md), use-user-controlled-wallets (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-user-controlled-wallets/SKILL.md), use-modular-wallets (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-modular-wallets/SKILL.md), use-gateway (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-gateway/SKILL.md), use-smart-contract-platform (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-smart-contract-platform/SKILL.md). Full Circle developer docs: https://developers.circle.com/llms.txt.

# How-to: Get token rates

> Query cached USD prices for swap-supported tokens before quoting a swap

export const TryOnArcStudio = () => {
  const [copied, setCopied] = useState(false);
  const [prompt, setPrompt] = useState("");
  useEffect(() => {
    const url = `https://docs.arc.io${window.location.pathname}.md`;
    setPrompt(`Read the guide at ${url}, implement it in a new project, then run it and show me how it works.`);
  }, []);
  const arcStudioUrl = `https://studio.arc.io/app?prompt=${encodeURIComponent(prompt)}`;
  const handleArcStudioClick = () => {
    try {
      if (typeof navigator !== "undefined" && navigator.clipboard && prompt) {
        navigator.clipboard.writeText(prompt).then(() => {
          setCopied(true);
          setTimeout(() => setCopied(false), 4000);
        }, () => {});
      }
    } catch (e) {}
  };
  return <div className="not-prose mb-6">
      <span className="relative inline-flex">
        <a href={arcStudioUrl} target="_blank" rel="noreferrer" onClick={handleArcStudioClick} aria-label="Try it on Arc Studio (opens in new tab)" className="inline-flex items-center gap-2 px-4 py-2 rounded-lg bg-[#3E74BB] border border-[#3E74BB] text-sm font-medium text-white no-underline hover:bg-[#345f9c] hover:border-[#345f9c] transition-all">
          <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
            <path d="M13 2 3 14h9l-1 8 10-12h-9l1-8z" />
          </svg>
          Try it on Arc Studio
        </a>
        {copied && <span role="status" aria-live="polite" className="absolute left-0 top-full mt-2 w-72 text-sm text-gray-500 dark:text-[#888]">
            Opening Arc Studio — prompt copied to your clipboard in case you need to
            sign in first.
          </span>}
      </span>
    </div>;
};

<TryOnArcStudio />

Token rates are read-only cached USD prices for
[supported tokens](/app-kit/references/supported-blockchains#supported-tokens).
Use them to show a fiat estimate before a user confirms a swap, sort token lists
by USD value, or compare a swap output against current market prices.

## Prerequisites

Before you begin, ensure that you've:

* [Installed the App Kit SDK](/app-kit/tutorials/installation)
* Obtained an [API key](https://developers.circle.com/contracts/create-api-key)
  (optional, recommended for production or high-volume usage)

## Look up token rates

Pass `chain` and a `tokens` array to look up rates for one or more tokens on the
specified blockchain.

<Tip>
  The App Kit SDK supports [token
  aliases](/app-kit/references/supported-blockchains#supported-tokens) (such as
  `"USDC"`, `"EURC"`, `"USDT"`).
</Tip>

```typescript TypeScript theme={null}
import { AppKit } from "@circle-fin/app-kit";

const kit = new AppKit();

const result = await kit.getTokenRates({
  chain: "Ethereum",
  tokens: ["USDC"],
  apiKey: process.env.CIRCLE_API_KEY as string, // optional — configure for production or high-volume usage
});

console.dir(result, { depth: null, colors: true });
```

The response is keyed by blockchain, then by token address:

```bash Shell theme={null}
{
  rates: {
    Ethereum: {
      "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": {
        priceUSD: "0.999615",
        fetchedAt: 1781758931073,
        decimals: 6,
      },
    },
  },
}
```

Each rate includes:

* `priceUSD`: Latest cached USD price for the token, as a decimal string.
* `fetchedAt`: Unix timestamp (milliseconds) of when the price was last
  refreshed. Use this to decide whether to refetch or warn the user about a
  stale quote.
* `decimals`: Number of decimal places for the token.

<Note>
  If a cached price doesn't exist for a requested token, that token's address is
  omitted from the blockchain's rate map.
</Note>

## List all token rates

Omit `tokens` to get every cached rate for the specified blockchain. This is
useful for populating a token picker or refreshing a price column:

```typescript TypeScript theme={null}
import { AppKit } from "@circle-fin/app-kit";

const kit = new AppKit();

const result = await kit.getTokenRates({
  chain: "Base",
  apiKey: process.env.CIRCLE_API_KEY as string, // optional — configure for production or high-volume usage
});

console.dir(result, { depth: null, colors: true });
```

The response has the same shape as the single-token lookup, with one entry per
cached token:

```bash Shell theme={null}
{
  rates: {
    Base: {
      "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913": {
        priceUSD: "1.000112",
        fetchedAt: 1781758931073,
        decimals: 6,
      },
      "0xd46f9d14bd720f10714e2a2af5e0d617b2a0ba8c": {
        priceUSD: "0.000002619246974",
        fetchedAt: 1781829306975,
        decimals: 18,
      },
      "0xae8fc9288685516d2eca717056ca69303b348752": {
        priceUSD: "74227.78149573994",
        fetchedAt: 1781829306975,
        decimals: 18,
      },
    },
  },
}
```
