---
title: "Calculate discount for wallet at merchant"
method: GET
path: "/v1/discount/check"
tags: ["Discounts & Codes"]
---

# Calculate discount for wallet at merchant

`GET /v1/discount/check`

## Request

- Base URL: `https://api.insumermodel.com`
- URL: `https://api.insumermodel.com/v1/discount/check`
- Auth: none required

Checks on-chain balances server-side and calculates the total discount. Free to call: it does not consume credits. Returns tier and discount per token, but never raw balance amounts. A frozen XRPL trust line earns no tier.

## Query parameters

- `wallet` string
- `solanaWallet` string
- `xrplWallet` string
- `merchant` string, required

## Response `200`

Discount calculation

- object
  - `ok` true
  - `data` object
    - `eligible` boolean
    - `totalDiscount` integer
    - `discountMode` 'highest' | 'stack' | 'capped'
    - `breakdown` DiscountBreakdown[]
      - `symbol` string
      - `tier` string
      - `discount` integer
      - `chain` string: Chain name (present only in GET /v1/discount/check responses, omitted in /v1/verify, /v1/acp/discount, /v1/ucp/discount). A token configured with alsoOn and held on more than one of its networks lists them, comma-separated ("Ethereum, Arbitrum").
    - `merchantId` string
    - `merchantName` string
    - `chainsChecked` string[]
    - `walletTerms` WalletTerms: What this store gives a wallet with and without proof of control, so an agent can decide before calling whether to sign. A proven wallet gets the full discount its holdings earn (under the store's tiers and cap), without the daily limit for unproven wallets.
      - `proofAccepted` string[]: Wallet types whose proof is accepted. Currently ["evm"].
      - `proven` object
        - `maxDiscountsPerWalletPerDay` unknown
      - `unproven` object
        - `maxDiscount` integer, nullable: At most this percent without proof; 0 = no discount; null = the same as proven.
        - `maxDiscountsPerWalletPerDay` integer, nullable: Discount codes per unproven wallet per UTC day; null = no limit.
    - `discountIfProven` integer: Present only when the store gives wallets without proof less. totalDiscount is then what /v1/verify gives without a walletProof, and this is what it gives with one.
  - `meta` Meta
    - `version` string
    - `timestamp` string, date-time

## Other responses

- `400`: Missing or invalid parameters
- `404`: Merchant not found
- `409`: The store's recognition is paused by its owner: "This store's recognition is paused." No credit is used and no code is created.
- `500`: Unexpected server error. Safe to retry; no credits are charged on a 500. Router endpoints return the standard error envelope; standalone endpoints (the ones whose 200 is a flat object) return a flat {"error": "..."} object.
- `503`: A read did not complete. Nothing is concluded about the wallet. Retry.

---

[API](https://skmtc.dev/insumermodel/apis/insumerapi.md) · [All operations](https://skmtc.dev/insumermodel/apis/insumerapi/llms.txt) · [OpenAPI document](https://skmtc.dev/insumermodel/apis/insumerapi/revisions/91f56fe9e3d8?raw)
