---
name: "bankr-exclusive"
description: "Buy and sell Bankr-exclusive tokens: Uniswap V4 pools gated by GateHook so only verified Bankr wallets can trade or hold them. Also covers launching new exclusive tokens (operator-assisted in v1)."
---

# Bankr Exclusive — gated pools only Bankr wallets can trade

Some tokens are **exclusive**: their Uniswap V4 pool is protected by a
GateHook contract, and the token itself only settles into verified wallets.
Ordinary swaps and aggregators CANNOT trade them — every swap needs a
single-use signed **pass** issued by the GateHook pass service.

This skill teaches you the whole flow. You never build calldata yourself:
the pass service returns a complete, ready-to-submit transaction for every
step.

## Service

- Pass service base URL: `https://api-production-38af.up.railway.app`
- Chain: Base (chainId 8453)
- All trades happen from your Base EVM wallet.

## Exclusive pool catalog

| Token | PoolId | Paired with |
|---|---|---|
| AONLY (Agent Only) | `0x3a5174e6a9feab4464f33a7f002bdc4a80d8aba8c3c03c46496e66adda7f3a98` | ETH |
| BXCL (Bankr Exclusive) | `0x3d3ab2ec86f12c32781b28b0d8d726c8a8d96d5c106e05d542d976d1521add2f` | BNKR |
| BXCL2 (Bankr Exclusive Curve) | `0xf71476f86b22636559a7298a68ae1284598304a223bbf9fee8a75889d595dcf2` | BNKR |

AONLY contract: `0x44800CC796C40a4963a65ce6B3efC089b829eBB5`
BXCL contract: `0xa5349F6b03911b171D06847084EF0A547d19F157`
BXCL2 contract: `0x0f01729025108b9bf21Ff07C16748888B0624516`

## First time only: register your wallet

Before your first trade on a pool, register your wallet — registration is
what allows exclusive tokens to settle into your wallet at all.
Registration requires proof that you control the wallet: a signature.

`POST https://api-production-38af.up.railway.app/register`
body: `{"wallet": "<YOUR_BASE_ADDRESS>", "poolId": "<POOL_ID>", "signature": "<SIG>"}`

`<SIG>` is your wallet's personal_sign (EIP-191) signature over this exact
message (your checksummed address, the poolId lowercase, one line each,
no trailing newline):

```
AONLY register
wallet: <YOUR_BASE_ADDRESS_CHECKSUMMED>
pool: <POOL_ID_LOWERCASE>
chain: 8453
```

If you call `/register` without a signature, the service replies 401 with
a `registerMessage` field — sign that exact string and resend with it as
`signature`. Wait for `{"ok": true}`. You only register once per pool.
If the response says the pool uses an operator-managed registry, tell
your user their wallet must be registered by the program operator for
that pool.

## Signing your /build calls

Every `/build` call must carry your wallet's personal_sign (EIP-191)
signature over this exact message (same format rules as registration),
sent as `"signature"` in the body:

```
AONLY authorize
wallet: <YOUR_BASE_ADDRESS_CHECKSUMMED>
pool: <POOL_ID_LOWERCASE>
chain: 8453
```

One signature works for any number of `/build` calls for that pool —
sign once per session and reuse it. If a call returns 401, it includes
an `authorizeMessage` field: sign that exact string and resend.

## How to buy an exclusive token

1. **Get the approve transaction** (first trade only):
   `POST https://api-production-38af.up.railway.app/build`
   body: `{"wallet": "<YOUR_BASE_ADDRESS>", "poolId": "<POOL_ID>", "action": "approve-buy", "signature": "<AUTH_SIG>"}`
   If the response says `"skip": true` (native ETH pairs), there is no
   approval — go straight to step 3.
2. **Submit the returned transaction exactly as given** (`to`, `data`,
   `value`) from your wallet on Base. Never modify the calldata. Note the
   `value` field: for ETH-paired pools the buy transaction carries the ETH
   being spent — submit it with that exact value.
3. **Get the buy transaction**:
   same endpoint, body: `{"wallet": "<YOUR_BASE_ADDRESS>", "poolId": "<POOL_ID>", "action": "buy", "amount": "<AMOUNT_OF_QUOTE_IN_WHOLE_UNITS>", "signature": "<AUTH_SIG>"}`
   Amount is in the pool's quote asset: `"50"` means 50 BNKR on a
   BNKR-paired pool, or 50 ETH on an ETH-paired pool (use small decimals
   like `"0.01"` for ETH).
4. **Submit it exactly as given, immediately.** The transaction embeds a
   pass that is single-use and expires in 5 minutes. If submission fails
   or the pass expires, simply call `/build` again for a fresh one and
   resubmit — never reuse an old response.
5. Report the transaction hash and your resulting token balance.

## How to sell

Same pattern with `"action": "approve-sell"` (first time only), then
`"action": "sell"` with `"amount"` in whole units of the exclusive token.

## Errors

- `401 signature required / signature does not match wallet` — sign the
  exact message the response names (`registerMessage` for `/register`,
  `authorizeMessage` for `/build`) with the wallet in the request and
  resend with it as `signature`. The signature must come from that same
  wallet — signatures for any other wallet are rejected.
- `403 wallet not verified` — your wallet is not registered for this
  pool yet. Call `/register` (see "First time only" above) and retry. Do
  NOT retry with a different wallet and do NOT try a normal swap instead.
  If `/register` says the registry is operator-managed, tell your user
  their wallet needs to be registered by the program operator.
- A reverted swap almost always means the pass expired or was already
  used. Fetch a fresh transaction from `/build` and submit again.

## Hard rules

- NEVER try to buy or sell an exclusive token with your normal swap
  tools — there is no pass attached, the pool will reject it, and you
  will waste gas.
- NEVER transfer an exclusive token to a wallet that is not verified —
  the token contract will reject the transfer. Holders are verified
  wallets only.
- All amounts in `/build` calls are whole-token units as strings.

## Launching a new exclusive token (v1: operator-assisted)

When your user wants to LAUNCH a Bankr-exclusive token, collect:
token name, ticker, total supply, and how much BNKR they will seed as the
opening liquidity. Present the summary to your user for confirmation,
then hand the parameters to the program operator. The operator deploys
the transfer-locked token, opens its BNKR-paired GateHook pool, seeds
it, and adds the pool to the catalog above — after which the token
trades with this exact skill, by any registered Bankr wallet.
