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

# Pricing and credits

> Pay per token for GLM 5.3 Flash.

export const PricingComparison = ({children}) => {
  const [comparison, setComparison] = useState(null);
  const [failed, setFailed] = useState(false);
  useEffect(() => {
    let active = true;
    const controller = new AbortController();
    const timeout = setTimeout(() => controller.abort(), 8000);
    const local = ["localhost", "127.0.0.1"].includes(window.location.hostname);
    const endpoint = `${local ? "http://127.0.0.1:3116" : "https://paretoinference.com"}/api/landing-pricing`;
    const load = async () => {
      try {
        const response = await fetch(endpoint, {
          signal: controller.signal,
          credentials: "omit",
          cache: "no-store"
        });
        if (!response.ok) throw new Error("Price comparison unavailable");
        const data = await response.json();
        const expected = ["input", "output", "cached-input"];
        if (data.model !== "z-ai/glm-5.3-flash" || data.currency !== "USD" || data.perTokens !== 1000000 || !Array.isArray(data.rows) || data.rows.length !== 3 || !data.rows.every((row, index) => row.id === expected[index] && typeof row.name === "string" && typeof row.pareto === "number" && Number.isFinite(row.pareto) && row.pareto >= 0 && (row.openRouter === null || typeof row.openRouter === "number" && Number.isFinite(row.openRouter) && row.openRouter >= 0)) || data.checkedAt !== null && (typeof data.checkedAt !== "string" || !Number.isFinite(Date.parse(data.checkedAt))) || data.discount !== null && typeof data.discount !== "string" || typeof data.delayed !== "boolean") {
          throw new Error("Invalid price comparison");
        }
        if (active) setComparison(data);
      } catch {
        if (active) setFailed(true);
      } finally {
        clearTimeout(timeout);
      }
    };
    load();
    return () => {
      active = false;
      controller.abort();
      clearTimeout(timeout);
    };
  }, []);
  if (!comparison) return <div aria-label="Token prices">
    {children}
    <p role="status">{failed ? "Price comparison temporarily unavailable. Pareto prices are shown above." : "Loading the OpenRouter comparison…"}</p>
  </div>;
  const price = value => value === null ? comparison.checkedAt ? "Not listed" : "Unavailable" : new Intl.NumberFormat("en-US", {
    style: "currency",
    currency: "USD",
    minimumFractionDigits: 2,
    maximumFractionDigits: 12
  }).format(value);
  return <div aria-label="Token prices">
    <div style={{
    overflowX: "auto"
  }}>
      <table style={{
    display: "table",
    width: "100%",
    fontVariantNumeric: "tabular-nums"
  }}>
        <thead><tr><th scope="col">Token type</th><th scope="col" style={{
    textAlign: "right"
  }}>Pareto</th><th scope="col" style={{
    textAlign: "right"
  }}>OpenRouter reference</th></tr></thead>
        <tbody>{comparison.rows.map(row => <tr key={row.id}>
          <th scope="row" style={{
    fontWeight: 400
  }}>{row.name}</th><td style={{
    textAlign: "right"
  }}>{price(row.pareto)}</td><td style={{
    textAlign: "right"
  }}>{price(row.openRouter)}</td>
        </tr>)}</tbody>
      </table>
    </div>
    <div role="status">
      {comparison.discount && <p><strong>{comparison.discount}</strong></p>}
      {comparison.checkedAt ? <p>Checked: <time dateTime={comparison.checkedAt}>{new Intl.DateTimeFormat("en-GB", {
    day: "numeric",
    month: "short",
    year: "numeric",
    timeZone: "UTC"
  }).format(new Date(comparison.checkedAt))} (UTC)</time></p> : <p>Price comparison temporarily unavailable.</p>}
      {comparison.delayed && <p>Update delayed. Showing the last checked prices.</p>}
    </div>
  </div>;
};

Buy prepaid credits and pay for the tokens you use. Pareto serves GLM 5.3 Flash on its own GPUs.

## Token prices

Prices are in USD per 1 million tokens.

<PricingComparison>
  | Token type   |  Pareto |
  | ------------ | ------: |
  | Input        |  \$0.03 |
  | Output       |  \$0.10 |
  | Cached input | \$0.006 |
</PricingComparison>

The comparison uses the [OpenRouter model catalog](https://openrouter.ai/api/v1/models) for GLM 5.3 Flash. It excludes batch pricing.

The comparison refreshes on the first visit after 24 hours. A failed check keeps the last valid prices and their check date. This does not change Pareto's prices.

Get the current OpenRouter comparison and check date from the [public pricing feed](https://paretoinference.com/api/landing-pricing). The feed uses USD per 1 million tokens. Do not assume a fixed discount.

Input includes your prompt and conversation history. Cached input is reused input charged at a lower rate. Output is the tokens the model generates. A cache hit is not guaranteed.

## Buy credits

1. Open your [dashboard](https://paretoinference.com/dashboard).
2. Add a payment card.
3. Choose an amount of credits.
4. Complete the purchase.

Token charges reduce your prepaid balance. Check your balance and usage in the dashboard.

<span id="manage-your-key" />

## Manage API keys

Create a separate named key for each router, app, or environment. All keys share your account's prepaid balance and rate limits. Creating another key does not add credits or capacity.

### Create a key

1. Open your [dashboard](https://paretoinference.com/dashboard).
2. Give the new key a name that identifies its use, such as `omniroute` or `development`.
3. Create the key.
4. Copy the complete key and save it in a secure place.

The complete key is shown only when you create it. Later visits show a masked key. Keep keys outside source control.

### Check usage

View usage for each key in the dashboard to see which router or app uses your credits.

### Replace or revoke a key

To replace a key, create a new one. Update each connection that uses the old key. Confirm that the new key works, then revoke the old key in the dashboard.

If a key is exposed, revoke it immediately. Revoking one key stops that key from working. Your other keys remain active.

See [Quickstart](/) to connect your key.
