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

# Fees, currencies and automation

> Fee snapshots and allocation, native currencies, shortfall deposits and income reservations.

export const ScreenshotPlaceholder = ({image, src, title, caption, description, lang = "zh"}) => {
  const source = image || src;
  const label = title || caption || (lang === "en" ? "Gameplay screenshot" : "游戏截图");
  const [ready, setReady] = useState(false);
  const imageRef = useRef(null);
  useEffect(() => {
    const current = imageRef.current;
    setReady(Boolean(current && current.complete && current.naturalWidth > 0));
  }, [source]);
  return <figure className="km-screenshot">
      <div className="km-screenshot-frame">
        {source ? <img ref={imageRef} src={source} alt={label} className={ready ? "km-screenshot-image" : "km-screenshot-image km-screenshot-pending"} onLoad={() => setReady(true)} onError={() => setReady(false)} /> : null}
        {!ready ? <div className="km-screenshot-placeholder">
            <svg width="36" height="36" viewBox="0 0 36 36" fill="none" aria-hidden="true">
              <rect x="5" y="6" width="26" height="24" rx="4" stroke="currentColor" strokeWidth="1.5" />
              <circle cx="13" cy="13" r="2.5" stroke="currentColor" strokeWidth="1.5" />
              <path d="M6 26L14 19L19 23L24 16L31 24" stroke="currentColor" strokeWidth="1.5" strokeLinejoin="round" />
            </svg>
            <strong>{label}</strong>
            <p>{description || (lang === "en" ? "A real gameplay screenshot will be added here." : "此处预留真实游戏截图。")}</p>
          </div> : null}
      </div>
      <figcaption>{label}</figcaption>
    </figure>;
};

<ScreenshotPlaceholder title="Fees and automation" description="A real gameplay screenshot can be added here later for fee previews, shortfalls or reservations." lang="en" />

Fee rules determine publication and transaction charges; currency configuration selects the actual transfer gateway. See [wallets and automation](/en/kitemarket/wallet) for everyday use and [currency configuration](/en/kitemarket/configuration/currencies) for settings. Persistent operation and outcome handling continues to govern funds, holds and external calls.

<span id="fees-and-existing-orders" />

<h2 id="v11-fee-rules-and-existing-orders">
  Fees and existing orders
</h2>

Existing `market.tax-bps` and `market.taxes` remain valid; 100 basis points equals 1%. Enabled `fees` selects the first matching rule in configuration order, with permission, currency, order type and declarative item conditions. With no enabled matching rule, legacy tax behavior applies.

```yaml theme={null}
fees:
  enabled: true
  rules:
    - id: sale-coins
      type: SELL
      currency: coins
      listing-fixed: 100
      listing-bps: 0
      seller-fixed: 0
      seller-bps: 500
      buyer-fixed: 0
      buyer-bps: 200
```

Fixed amounts are minor units. With `coins.scale: 2`, the listing fee is 1.00. For gross 800.00, the buyer pays 816.00 and the seller receives 760.00, excluding the separate listing fee. Minor amount `100` does not mean 100.00.

Confirmation separates listing, buyer and seller fees. Publication saves a fee snapshot; reload does not rewrite old orders. Partial fills allocate fixed fees and rounding over cumulative order turnover, with the final fill taking the remainder. Splitting purchases does not repeatedly charge the whole fixed fee.

New fee rules round the cumulative fixed share and percentage charge together, then subtract collected fees. Whole-order fees remain unchanged, and seller fees cannot exceed a fill's gross, allowing low-priced final items to settle.

Cancellation or expiry returns unfilled escrow and holds. Already charged listing fees are not refunded. Old orders retain their fees and expiry without another listing charge or extended duration.

<span id="trading-restrictions" />

<h2 id="v11-trading-restrictions">
  Trading restrictions
</h2>

`policy` can restrict worlds, players, items and creative mode. The first matching permission row in `policy.limits` controls order count, quantity, price, duration, cooldown and allowed currencies.

Confirmation and database submission enforce restrictions for commands, GUI and constrained developer requests. Changing button positions or appearance does not alter them. Existing assets retain their permitted exit paths.

<span id="new-currencies" />

<h2 id="v11-native-currencies">
  Experience points, levels and item currencies
</h2>

Existing Vault, PlayerPoints, CoinsEngine and ExcellentEconomy keep their IDs and gateways.

| Provider | Requirements |
| - | - |
| `experience` | Vanilla experience points, `scale: 0` |
| `experience-level` | Vanilla levels, `scale: 0`; mutually exclusive with points in one network |
| `item` | Actual item currency, `scale: 0`, a real `item-sample` and positive integer `denomination` |

Points and levels are not a linear exchange rate. Item currency compares the complete sample; a material name cannot replace a saved ItemStack. Changing the sample or denomination changes currency identity. Preserve the original definition while existing funds depend on it.

Transfers still check the configured gateway, real balance, player state, receive capacity and inventory space. Unavailable external plugins disable affected transfers rather than reporting fake zero or substituting adapters. See [currency configuration](/en/kitemarket/configuration/currencies).

<span id="shortfall-top-up" />

<h2 id="v11-shortfall-top-up">
  Shortfall top-up
</h2>

Insufficient-funds views read the real shortage. A confirmed successful deposit reloads order, quantity and fees before a new trade confirmation. Depositing is not proof of buying or supplying; the previous quote does not execute silently.

Changed orders, unavailable gateways and unknown external outcomes have separate results. Preserve already deposited market funds instead of repeatedly depositing to conceal a failed follow-up trade.

<span id="automatic-withdrawal-and-claims" />

<h2 id="v11-automatic-withdrawal-and-claims">
  Automatic withdrawal and claims
</h2>

Future-income withdrawal, login withdrawal and automatic claiming are separate opt-ins that default off. Bounded batches do not guarantee that one cycle completes all funds or assets.

Future income creates distinct withdrawal reservations. Reservations, holds, available funds and claimable assets are shown separately. Turning the setting off does not release existing reservations. Inspect their status before executing or explicitly releasing them.

Insufficient space, unavailable gateways, changed sessions or uncertain external effects pause the task. Automation never reexecutes UNKNOWN; inspect the original operation and evidence before resuming. See [operations](/en/kitemarket/operations).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.