Docs / Data & markets / Swap / AMM

Pools, quotes, liquidity

Swap / AMM

DRC-20 ↔ DOGE pools and bonding-curve launches on amm.dogesoft.io. Swap and liquidity are paused for now; bonding-curve launches are live.

Swap & liquidity: paused Bonding launches: live

Swap is an automated market maker for DRC-20 ↔ DOGE, plus a bonding-curve launchpad for brand-new coins. Endpoints below are relative to https://amm.dogesoft.io/api.

⏸️

Swap and liquidity are paused. Swapping, adding and removing liquidity and claiming fees are on hold for now, so don't build new integrations on them yet. Bonding-curve launches (below) are unaffected. This page will be updated when Swap returns.

Fee model

Every swap pays a 2% fee in DOGE total: 1% to liquidity providers + 1% platform (pool JSON fee: "0.01" is the LP share only). Fees are always realized in DOGE — not “2% of whatever asset you put in.” For a DOGE → DRC-20 swap, the fee is taken out of the DOGE going in, before it hits the pool's reserve calculation; for a DRC-20 → DOGE swap, it's taken out of the gross DOGE coming out. Anyone can supply liquidity to a pool and earn a pro-rata share of the LP 1%. Platform share is swept separately.

Quotes & pools

EndpointDescription
GET/POST /swap/quotePrice a swap, including the full 2% DOGE fee. Fields: tokenIn, tokenOut, amountIn (query string on GET, JSON on POST).
GET /poolsList every active pool.
GET /pools/:tokenA/:tokenBReserves and depth for one specific pool.

Other public reads

Same host, no API key. POST /bonding/launch is the exception: it requires a Doge Soft API key.

EndpointDescription
GET /tokensToken catalog.
GET /tokens/:tickOne catalog row. Tick is lowercase in the path.
GET /statsPool counts and reserve totals.
GET /analytics/:tickChart and price stats. Optional range (for example 24h).
GET /balance/:walletDOGE and DRC-20 balances the AMM sees for an address.
GET /wallet/utxos/:addressUTXOs for an address.
GET /liquidityIndex of the liquidity routes.
GET /coin-icon/:nameCoin image proxy.

There is no GET /api/prices and no GET /api/analytics/:tick/trades.

Executing a swap

EndpointDescription
POST /swap/createInitiate a swap. Alias: POST /swap/initiate. JSON: tokenIn, tokenOut, amountIn, toAddress, deadline (unix seconds). Exactly one leg is the ticker doge.
POST /swap/executeConfirm a created swap with depositTxid. Alias: POST /swap/confirm.
GET /swap/status/:idPoll a swap's settlement status.
GET /swap/history/:addressPast swaps for an address.

Providing liquidity

Pools are custodial Uniswap-v2-style on https://amm.dogesoft.io/api. To add, send DOGE + a DRC-20 ADD_LP inscription to the pool deposit address, then POST /liquidity/add with both deposit txids. To remove, wallet-sign POST /liquidity/remove with an LP amount (wallet UI supports 1–100% / half withdraw); both legs are paid out automatically. Accrued fees are in DOGE — claim via signed POST /liquidity/claim-fees (202 Accepted) or often bundled into remove payouts. The Doge Soft wallet resumes incomplete adds from an on-device queue (7-day window; DOGE-only mid-fails are retained and not double-submitted).

EndpointDescription
GET /liquidity/positions/:walletAddressYour open positions across all pools.
POST /liquidity/addDeposit both sides of a pair into a pool.
POST /liquidity/removeWithdraw a position (supports partial / half withdraw).
GET /liquidity/fees/:walletAddressUnclaimed fee balance across your positions.
POST /liquidity/claim-feesClaim accrued fees — signature-gated, settles asynchronously.

claim-fees requires a wallet-signed authorization, then atomically zeroes your unclaimed balance and records the claim. It returns 202 Accepted — settlement to your address happens shortly after, not in the same request.

Bonding-curve launches

Brand-new coins can launch through a bonding curve before they have enough depth for a real pool — see how bonding-curve pricing works.

EndpointDescription
GET /bonding/activeCoins currently on the bonding curve.
POST /bonding/launchLaunch a new bonding-curve coin. Requires a Doge Soft-issued API key — not a public self-serve endpoint.
GET /bonding/:symbolCurrent curve state for one coin.
POST /bonding/quotePrice a bonding-curve buy before committing.
POST /bonding/:symbol/reserveReserve an allocation ahead of confirmation.
POST /bonding/confirmConfirm a reserved purchase once payment lands on-chain.
ℹ️

Until the buyer's deposit is deep enough, POST /bonding/confirm returns 409 { ok: false, retryable: true, confirmations, requiredConfirmations }. If you call it once right after broadcast and give up on any non-2xx response, a real payment can land on-chain with nothing ever recorded. Retry while the response says retryable: true (every 20–30s is reasonable) until it succeeds or a generous timeout, and persist the pending confirm so it survives a reload.

ℹ️

Status. Bonding-curve launches are live. Swap execution and liquidity are paused, so a coin that completes its curve can't trade on Swap until Swap returns.