LogoLogo
funkybit
funkybit
funkybit
  • Overview
  • Architecture
  • Security
  • Getting Started
  • Developers
    • Authentication
    • Websocket API
    • REST API
Powered by GitBook
On this page
  1. Developers

REST API

PreviousWebsocket API

Last updated 22 days ago

The signature for creating an order can be either from an EVM or a Bitcoin wallet, regardless of the assets being traded. However, before an order containing a Bitcoin asset can be placed, a Bitcoin wallet must have been authorized; conversely, before an order containing an EVM asset can be placed, an EVM wallet must have been authorized. See the Authorize wallet API call below.

When signing an order with a fixed amount with an EVM wallet, create the signature by signing this EIP-712 message:

const message = {
  sender: address,
  baseChainId: baseChainId,
  baseToken: baseTokenAddress,
  quoteChainId: quoteChainId,
  quoteToken: quoteTokenAddress,
  amount: amount,
  price: price,
  nonce: Date.now()
}
const eip712 = {
  domain: {
    name: 'funkybit',
    chainId: chainId
  },
  types: {
    EIP712Domain: [
      { name: 'name', type: 'string' },
      { name: 'chainId', type: 'uint32' }
    ],
    'Order': [
      { name: 'sender', type: 'address' },
      { name: 'baseChainId', type: 'uint256' },
      { name: 'baseToken', type: 'address' },
      { name: 'quoteChainId', type: 'uint256' },
      { name: 'quoteToken', type: 'address' },
      { name: 'amount', type: 'int256' },
      { name: 'price', type: 'uint256' },
      { name: 'nonce', type: 'int256' }
    ]
  },
  message: message,
  primaryType: 'Order'
}

When signing an order with a percentage amount with an EVM wallet, create the signature by signing this EIP-712 message:

const message = {
  sender: address,
  baseChainId: baseChainId,
  baseToken: baseTokenAddress,
  quoteChainId: quoteChainId,
  quoteToken: quoteTokenAddress,
  percentage: percentage,
  price: price,
  nonce: Date.now()
}
const eip712 = {
  domain: {
    name: 'funkybit',
    chainId: chainId
  },
  types: {
    EIP712Domain: [
      { name: 'name', type: 'string' },
      { name: 'chainId', type: 'uint32' }
    ],
    'Order': [
      { name: 'sender', type: 'address' },
      { name: 'baseChainId', type: 'uint256' },
      { name: 'baseToken', type: 'address' },
      { name: 'quoteChainId', type: 'uint256' },
      { name: 'quoteToken', type: 'address' },
      { name: 'percentage', type: 'int256' },
      { name: 'price', type: 'uint256' },
      { name: 'nonce', type: 'int256' }
    ]
  },
  message: message,
  primaryType: 'Order'
}

When signing an order with a Bitcoin wallet, create the signature by signing a message constructed as follows:

const amountDescription = isPercentage ? `${amount}% of your` : amount
const swapDescription = isBuy ? `Swap ${amountDescription} ${quoteSymbol} for ${baseSymbol}` : `Swap ${amountDescription} ${baseSymbol} for ${quoteSymbol}`
const priceDescription = isLimit ? `Price: ${price}` : `Price: Market`
const message = `[funkybit] Please sign this message to authorize a swap. This action will not cost any gas fees.\n${swapDescription}\n${priceDescription}\nAddress: ${address}, Nonce: ${nonce}`

The bitcoin signature should be created following the same rules as for authentication.

The signature for cancelling an order can be either from an EVM or a Bitcoin wallet, regardless of the assets being traded.

When signing an order cancellation with an EVM wallet, create the signature by signing this EIP-712 message:

const message = {
  sender: address,
  marketId: marketId,
  amount: amount,
  nonce: Date.now()
}
const eip712 = {
  domain: {
    name: 'funkybit',
    chainId: chainId
  },
  types: {
    EIP712Domain: [
      { name: 'name', type: 'string' },
      { name: 'chainId', type: 'uint32' }
    ],
    'CancelOrder': [
      { name: 'sender', type: 'address' },
      { name: 'marketId', type: 'string' },
      { name: 'amount', type: 'int256' },
      { name: 'nonce', type: 'int256' }
    ]
  },
  message: message,
  primaryType: 'CancelOrder'
}

When signing an order cancellation with a Bitcoin wallet, create the signature by signing a message constructed as follows:

const swapDescription = isBuy ? `Swap ${amount} ${quoteSymbol} for ${baseSymbol}` : `Swap ${amount} ${baseSymbol} for ${quoteSymbol}`
const message = `[funkybit] Please sign this message to authorize order cancellation. This action will not cost any gas fees.\n${swapDescription}\nAddress: ${address}, Nonce: ${nonce}`

The bitcoin signature should be created following the same rules as for authentication.

When withdrawing an EVM asset, create the signature by signing this EIP-712 message (the chainId must be the correct one for the token being withdrawn):

const message = {
  sender: address,
  token: tokenAddress,
  amount: amount,
  nonce: Date.now()
}
const eip712 = {
  domain: {
    name: 'funkybit',
    chainId: chainId
  },
  types: {
    EIP712Domain: [
      { name: 'name', type: 'string' },
      { name: 'chainId', type: 'uint32' }
    ],
    'Withdraw': [
      { name: 'sender', type: 'address' },
      { name: 'token', type: 'address' },
      { name: 'amount', type: 'uint256' },
      { name: 'nonce', type: 'uint64' }
    ]
  },
  message: message,
  primaryType: 'Withdraw'
}

When withdrawing a Bitcoin asset, create the signature by signing this message:

const message = `[funkybit] Please sign this message to authorize withdrawal of ${amountInSats} ${symbol} from the exchange to your wallet.\nAddress: ${address}, Timestamp: ${new Date().toISOString()}`

The bitcoin signature should be created following the same rules as for authentication.

This is used to authorize a Bitcoin wallet for an existing EVM account, or to authorize an EVM wallet for an existing Bitcoin account. A given account can have at most 1 Bitcoin wallet and 1 EVM wallet. The wallet being added must not have already been added as either a primary or an additional wallet.

To authorize a Bitcoin wallet for an existing EVM wallet, sign this EIP-712 message (any valid chain id can be used):

const message = {
  message: `[funkybit] Please sign this message to authorize Bitcoin wallet ${authorizedAddress}. This action will not cost any gas fees.`,
  address: address.toLowercase(),
  authorizedAddress: authorizedAddress,
  chainId: chainId,
  timestamp: new Date().toISOString(),
}
const eip712 = {
  domain: {
    name: 'funkybit',
    chainId: chainId
  },
  types: {
    EIP712Domain: [
      { name: 'name', type: 'string' },
      { name: 'chainId', type: 'uint32' }
    ],
    'Authorize': [
      { name: 'message', type: 'string' },
      { name: 'address', type: 'string' },
      { name: 'authorizedAddress', type: 'string' },
      { name: 'chainId', type: 'uint32' },
      { name: 'timestamp', type: 'string' }
    ]
  },
  message: message,
  primaryType: 'Authorize'
}

To authorize an EVM wallet for an existing Bitcoin wallet, sign this message:

const message = `[funkybit] Please sign this message to authorize EVM wallet ${authorizedAddress.toLowerCase()}. This action will not cost any gas fees.\nAddress: ${address}, Timestamp: ${new Date().toISOString()}`

The bitcoin signature should be created following the same rules as for authentication.

Get account configuration

get
Responses
200
OK
application/json
get
GET /v1/account-config HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "id": "123",
  "newSymbols": [
    {
      "name": "USDC",
      "description": "USD Coin",
      "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "decimals": 18,
      "faucetSupported": false,
      "iconUrl": "https://icons/usdc.svg",
      "withdrawalFee": "1",
      "chainId": "1337",
      "chainName": "Base"
    }
  ],
  "associatedSymbols": [
    {
      "name": "USDC",
      "description": "USD Coin",
      "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "decimals": 18,
      "faucetSupported": false,
      "iconUrl": "https://icons/usdc.svg",
      "withdrawalFee": "1",
      "chainId": "1337",
      "chainName": "Base"
    }
  ],
  "role": "User",
  "authorizedAddresses": [
    {
      "address": "0x0000000000000000000000000000000000000000",
      "networkType": "Evm"
    }
  ],
  "nickName": "Nick Name",
  "avatarUrl": "https://icons/avatar.svg",
  "inviteCode": "WYZFRORSQDI",
  "ordinalsAddress": "bcrt1qdca3sam9mldju3ssryrrcmjvd8pgnw30ccaggx",
  "funkybits": "85000.00",
  "referredByNickName": null
}

Mark symbol as added

post
Path parameters
symbolNamestringRequired

Symbol Name

Responses
204Success
post
POST /v1/account-config/{symbolName} HTTP/1.1
Host: api.funkybit.fun
Accept: */*
204Success

No content

Get balances

get
Responses
200
OK
application/json
get
GET /v1/balances HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "balances": [
    {
      "symbol": "USDC",
      "total": "0",
      "available": "0",
      "lastUpdated": "2025-05-06T16:58:45.928420800Z",
      "usdcValue": "0"
    },
    {
      "symbol": "ETH",
      "total": "1000000000000",
      "available": "500000",
      "lastUpdated": "2025-05-06T16:58:45.928805399Z",
      "usdcValue": "10"
    }
  ]
}

Get configuration

get
Responses
200
OK
application/json
get
GET /v1/config HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "chains": [
    {
      "id": "1337",
      "name": "Base",
      "contracts": [
        {
          "name": "Exchange",
          "address": "0x0000000000000000000000000000000000000000",
          "nativeDepositAddress": "0x0000000000000000000000000000000000000000",
          "tokenDepositAddress": "0x0000000000000000000000000000000000000000"
        }
      ],
      "symbols": [
        {
          "name": "USDC",
          "description": "USD Coin",
          "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
          "decimals": 18,
          "faucetSupported": false,
          "iconUrl": "https://icons/usdc.svg",
          "withdrawalFee": "1",
          "chainId": "1337",
          "chainName": "Base"
        }
      ],
      "jsonRpcUrl": "https://demo-anvil.funkybit.fun",
      "blockExplorerNetName": "funkybit Demo Base",
      "blockExplorerUrl": "https://demo-otterscan.funkybit.fun"
    }
  ],
  "markets": [
    {
      "id": "USDC/DAI",
      "baseSymbol": "USDC",
      "baseDecimals": 18,
      "quoteSymbol": "DAI",
      "quoteDecimals": 6,
      "tickSize": "0.01",
      "lastPrice": "0.995",
      "minFee": "1",
      "feeRate": "0",
      "type": "Clob"
    }
  ],
  "feeRates": {
    "maker": "1.0",
    "taker": "2.0"
  },
  "minimumRune": "AAAAAA"
}

List deposits

get
Responses
200
OK
application/json
get
GET /v1/deposits HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "deposits": [
    {
      "id": "id",
      "symbol": "USDC",
      "amount": "200000",
      "status": "Pending",
      "error": null,
      "createdAt": "2025-05-06T16:58:45.932119440Z",
      "txHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
    }
  ]
}

Get deposit

get
Path parameters
depositIdstringRequired

Deposit Id

Responses
200
OK
application/json
get
GET /v1/deposits/{depositId} HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "deposit": {
    "id": "id",
    "symbol": "USDC",
    "amount": "200000",
    "status": "Pending",
    "error": null,
    "createdAt": "2025-05-06T16:58:45.932119440Z",
    "txHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
  }
}

Get last price for market

get
Path parameters
marketIdstringRequired

Market Id

Responses
200
OK
application/json
get
GET /v1/last-price/{marketId} HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "lastPrice": "0.995"
}

Get consumptions

get
Responses
200
OK
application/json
get
GET /v1/consumptions HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "consumptions": [
    [
      "BTC/ETH",
      "1000000000000000000",
      "2000000000000000000"
    ]
  ]
}

Get order book

get
Path parameters
marketIdstringRequired

Market Id

Responses
200
OK
application/json
get
GET /v1/order-book/{marketId} HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "marketId": "BTC/ETH",
  "bids": [
    {
      "price": "16.75",
      "size": "1"
    },
    {
      "price": "16.70",
      "size": "2"
    }
  ],
  "asks": [
    {
      "price": "16.80",
      "size": "1"
    },
    {
      "price": "16.85",
      "size": "2"
    }
  ],
  "last": {
    "price": "16.75",
    "direction": "Up"
  }
}

List orders

get
Query parameters
statusesstringOptional

Comma-separated list of order statuses to filter on

marketIdstringOptional

Market id to filter on

Responses
200
OK
application/json
get
GET /v1/orders HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "orders": [
    {
      "type": "market",
      "id": "order_01jtk8j794fjraps658pz0g0zn",
      "clientOrderId": null,
      "status": "Partial",
      "marketId": "BTC/ETH",
      "side": "Buy",
      "amount": "100",
      "executions": [
        {
          "tradeId": "trade_01jtk8j796ejeak96zt7qbxmgh",
          "timestamp": "2025-05-06T16:58:45.926562310Z",
          "amount": "50",
          "price": "500",
          "role": "Maker",
          "feeAmount": "0",
          "feeSymbol": "ETH",
          "marketId": "BTC/ETH"
        }
      ],
      "timing": {
        "createdAt": "2025-05-06T16:58:45.927232674Z",
        "updatedAt": null,
        "closedAt": null,
        "sequencerTimeNs": "0"
      }
    },
    {
      "type": "limit",
      "id": "order_01jtk8j797exh9gv05w4zv8xss",
      "clientOrderId": null,
      "status": "Open",
      "marketId": "BTC/ETH",
      "side": "Buy",
      "amount": "100",
      "originalAmount": "100",
      "autoReduced": false,
      "price": "100",
      "executions": [
        {
          "tradeId": "trade_01jtk8j797exh9gv05w4zv8xst",
          "timestamp": "2025-05-06T16:58:45.927318106Z",
          "amount": "50",
          "price": "500",
          "role": "Maker",
          "feeAmount": "0",
          "feeSymbol": "ETH",
          "marketId": "BTC/ETH"
        }
      ],
      "timing": {
        "createdAt": "2025-05-06T16:58:45.927328107Z",
        "updatedAt": null,
        "closedAt": null,
        "sequencerTimeNs": "0"
      }
    }
  ]
}

Cancel open orders

delete
Query parameters
marketIdsstringOptional

Comma-separated list of market ids to cancel orders

Responses
204Success
delete
DELETE /v1/orders HTTP/1.1
Host: api.funkybit.fun
Accept: */*
204Success

No content

List trades

get
Query parameters
before-timestampstringOptional

Return trades executed before provided timestamp

limitstringOptional

Number of trades to return

Responses
200
OK
application/json
get
GET /v1/trades HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "trades": [
    {
      "id": "trade_1234",
      "timestamp": "2025-05-06T16:58:45.957815897Z",
      "orderId": "1234",
      "clientOrderId": "client-1234",
      "marketId": "BTC/ETH",
      "executionRole": "Taker",
      "counterOrderId": "4321",
      "side": "Buy",
      "amount": "12345",
      "price": "17.61",
      "feeAmount": "500",
      "feeSymbol": "ETH",
      "settlementStatus": "Pending"
    }
  ]
}

List withdrawals

get
Responses
200
OK
application/json
get
GET /v1/withdrawals HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "withdrawals": [
    {
      "id": "id",
      "symbol": "USDC",
      "amount": "200000",
      "status": "Pending",
      "error": null,
      "createdAt": "2025-05-06T16:58:45.930876163Z",
      "txHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "fee": "20"
    }
  ]
}

Get withdrawal

get
Path parameters
withdrawalIdstringRequired

Withdrawal Id

Responses
200
OK
application/json
get
GET /v1/withdrawals/{withdrawalId} HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "withdrawal": {
    "id": "id",
    "symbol": "USDC",
    "amount": "200000",
    "status": "Pending",
    "error": null,
    "createdAt": "2025-05-06T16:58:45.930876163Z",
    "txHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "fee": "20"
  }
}

Get Coin

get
Path parameters
coinNamestringRequired

Coin Name

Responses
200
OK
application/json
get
GET /v1/coin/{coinName} HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "symbol": {
    "name": "DOG•GO•TO•THE•MOON:bitcoin",
    "description": "A description",
    "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    "decimals": 18,
    "faucetSupported": false,
    "iconUrl": "#",
    "withdrawalFee": "1",
    "chainId": "bitcoin",
    "chainName": "Bitcoin",
    "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
  },
  "createdBy": {
    "name": "User nickname",
    "userId": "123"
  },
  "currentPrice": "1.23",
  "marketCap": "6500.00",
  "lastTradedAt": "2025-05-06T16:58:45.994097922Z",
  "progress": "43.5",
  "status": "BondingCurveAmm",
  "sequenceNumber": 1,
  "h24Volume": "0",
  "h24Change": "0",
  "d7Change": "0",
  "tvl": "0",
  "h24PoolVolume": "0",
  "h24PoolFees": "0",
  "h24MinPoolYield": "0",
  "h24MaxPoolYield": "0",
  "lastPoolCreatedAt": "2025-05-06T16:58:45.994111282Z",
  "links": [
    {
      "type": "Web",
      "url": "https://example.com"
    }
  ]
}

Get Coin Activity

get
Path parameters
coinNamestringRequired

Coin Name

Query parameters
sortstring · enumOptional

Field to sort by (Timestamp)

Example: TimestampPossible values:
orderstring · enumOptional

Field to order (Asc, Desc)

Example: AscPossible values:
sidestring · enumOptional

Filter by order side (Buy, Sell)

Example: BuyPossible values:
Responses
200
OK
application/json
get
GET /v1/coin/{coinName}/activity HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "marketId": "DOG•GO•TO•THE•MOON:bitcoin/tUSDC:84532",
  "trades": [
    [
      "trade_123",
      "Buy",
      "100000",
      "0.006",
      "600",
      1746550726024,
      "0x0000...0000",
      "0"
    ]
  ]
}

Get Coin Market

get
Path parameters
coinNamestringRequired

Coin Name

Responses
200
OK
application/json
get
GET /v1/coin/{coinName}/market HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "id": "USDC/DAI",
  "baseSymbol": {
    "name": "USDC",
    "description": "USD Coin",
    "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    "decimals": 18,
    "faucetSupported": false,
    "iconUrl": "https://icons/usdc.svg",
    "withdrawalFee": "1",
    "chainId": "1337",
    "chainName": "Base"
  },
  "quoteSymbol": {
    "name": "USDC",
    "description": "USD Coin",
    "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    "decimals": 18,
    "faucetSupported": false,
    "iconUrl": "https://icons/usdc.svg",
    "withdrawalFee": "1",
    "chainId": "1337",
    "chainName": "Base"
  },
  "tickSize": "0.01",
  "lastPrice": "0.995",
  "minFee": "1",
  "feeRate": "0",
  "type": "Clob"
}

List coins

get
Query parameters
sortstring · enumOptional

Sort order

Example: TimestampPossible values:
searchstringOptional

Search string

safe-searchbooleanOptional

Safe search

Responses
200
OK
application/json
get
GET /v1/coins HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "coins": [
    {
      "symbol": {
        "name": "DOG•GO•TO•THE•MOON:bitcoin",
        "description": "A description",
        "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
        "decimals": 18,
        "faucetSupported": false,
        "iconUrl": "#",
        "withdrawalFee": "1",
        "chainId": "bitcoin",
        "chainName": "Bitcoin",
        "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
      },
      "createdBy": {
        "name": "User nickname",
        "userId": "123"
      },
      "currentPrice": "1.23",
      "marketCap": "6500.00",
      "lastTradedAt": "2025-05-06T16:58:45.994097922Z",
      "progress": "43.5",
      "status": "BondingCurveAmm",
      "sequenceNumber": 1,
      "h24Volume": "0",
      "h24Change": "0",
      "d7Change": "0",
      "tvl": "0",
      "h24PoolVolume": "0",
      "h24PoolFees": "0",
      "h24MinPoolYield": "0",
      "h24MaxPoolYield": "0",
      "lastPoolCreatedAt": "2025-05-06T16:58:45.994111282Z",
      "links": [
        {
          "type": "Web",
          "url": "https://example.com"
        }
      ]
    }
  ]
}

List pools

get
Path parameters
coinNamestringRequired

Coin Name

Responses
200
OK
application/json
get
GET /v1/coins/{coinName}/pools HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "pools": [
    {
      "id": "01jtk8j7d5f4xry9c7wdcey68r",
      "name": "Pool name",
      "feeRate": 500000,
      "tvl": "0",
      "h24Volume": "0",
      "h24Fees": "0",
      "h24Yield": "0",
      "createdAt": "2025-05-06T16:58:46.053535498Z"
    }
  ]
}

Get consumptions

get
Responses
200
OK
application/json
get
GET /v1/consumptions HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "consumptions": [
    [
      "BTC/ETH",
      "1000000000000000000",
      "2000000000000000000"
    ]
  ]
}

List Fave Coins

get
Responses
200
OK
application/json
get
GET /v1/fave-coins HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "coins": [
    {
      "symbol": {
        "name": "DOG•GO•TO•THE•MOON:bitcoin",
        "description": "A description",
        "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
        "decimals": 18,
        "faucetSupported": false,
        "iconUrl": "#",
        "withdrawalFee": "1",
        "chainId": "bitcoin",
        "chainName": "Bitcoin",
        "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
      },
      "createdBy": {
        "name": "User nickname",
        "userId": "123"
      },
      "currentPrice": "1.23",
      "marketCap": "6500.00",
      "lastTradedAt": "2025-05-06T16:58:45.994097922Z",
      "progress": "43.5",
      "status": "BondingCurveAmm",
      "sequenceNumber": 1,
      "h24Volume": "0",
      "h24Change": "0",
      "d7Change": "0",
      "tvl": "0",
      "h24PoolVolume": "0",
      "h24PoolFees": "0",
      "h24MinPoolYield": "0",
      "h24MaxPoolYield": "0",
      "lastPoolCreatedAt": "2025-05-06T16:58:45.994111282Z",
      "links": [
        {
          "type": "Web",
          "url": "https://example.com"
        }
      ]
    }
  ]
}

Add coin to faves

post
Path parameters
coinNamestringRequired

Coin Name

Responses
201Success
post
POST /v1/fave-coins/{coinName} HTTP/1.1
Host: api.funkybit.fun
Accept: */*
201Success

No content

Remove coin from faves

delete
Path parameters
coinNamestringRequired

Coin Name

Responses
204Success
delete
DELETE /v1/fave-coins/{coinName} HTTP/1.1
Host: api.funkybit.fun
Accept: */*
204Success

No content

Get last price for market

get
Path parameters
marketIdstringRequired

Market Id

Responses
200
OK
application/json
get
GET /v1/last-price/{marketId} HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "lastPrice": "0.995"
}

Get My Portfolio

get
Responses
200
OK
application/json
get
GET /v1/my-portfolio HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "portfolio": [
    {
      "coin": {
        "symbol": {
          "name": "DOG•GO•TO•THE•MOON:bitcoin",
          "description": "A description",
          "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
          "decimals": 18,
          "faucetSupported": false,
          "iconUrl": "#",
          "withdrawalFee": "1",
          "chainId": "bitcoin",
          "chainName": "Bitcoin",
          "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
        },
        "createdBy": {
          "name": "User nickname",
          "userId": "123"
        },
        "currentPrice": "1.23",
        "marketCap": "6500.00",
        "lastTradedAt": "2025-05-06T16:58:45.994097922Z",
        "progress": "43.5",
        "status": "BondingCurveAmm",
        "sequenceNumber": 1,
        "h24Volume": "0",
        "h24Change": "0",
        "d7Change": "0",
        "tvl": "0",
        "h24PoolVolume": "0",
        "h24PoolFees": "0",
        "h24MinPoolYield": "0",
        "h24MaxPoolYield": "0",
        "lastPoolCreatedAt": "2025-05-06T16:58:45.994111282Z",
        "links": [
          {
            "type": "Web",
            "url": "https://example.com"
          }
        ]
      },
      "usdcValue": "0",
      "pnl": "0",
      "balance": "0"
    }
  ]
}

Get my positions

get
Responses
200
OK
application/json
get
GET /v1/my-positions HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "positions": [
    {
      "poolId": "01jtk8j77pefss93m84exdc1cz",
      "poolName": "pool name",
      "baseSymbol": {
        "name": "DOG•GO•TO•THE•MOON:bitcoin",
        "description": "A description",
        "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
        "decimals": 18,
        "faucetSupported": false,
        "iconUrl": "#",
        "withdrawalFee": "1",
        "chainId": "bitcoin",
        "chainName": "Bitcoin",
        "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
      },
      "quoteSymbol": {
        "name": "DOG•GO•TO•THE•MOON:bitcoin",
        "description": "A description",
        "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
        "decimals": 18,
        "faucetSupported": false,
        "iconUrl": "#",
        "withdrawalFee": "1",
        "chainId": "bitcoin",
        "chainName": "Bitcoin",
        "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
      },
      "liquidityValue": "100",
      "poolShare": "0.03",
      "earnedFees": "1.23",
      "pendingFees": "0.03"
    }
  ]
}

List eligible coins for pool creation

get
Query parameters
searchstringOptional

Search string

Responses
200
OK
application/json
get
GET /v1/pools/eligible-coins HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "coins": [
    {
      "symbol": {
        "name": "DOG•GO•TO•THE•MOON:bitcoin",
        "description": "A description",
        "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
        "decimals": 18,
        "faucetSupported": false,
        "iconUrl": "#",
        "withdrawalFee": "1",
        "chainId": "bitcoin",
        "chainName": "Bitcoin",
        "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
      },
      "hasMarket": true
    }
  ]
}

Get pool

get
Path parameters
poolIdstringRequired

Pool Id

Responses
200
OK
application/json
get
GET /v1/pools/{poolId} HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "id": "01jtk8j77pefss93m84exdc1cz",
  "name": "Pool name",
  "feeRate": 500000,
  "baseSymbol": {
    "name": "DOG•GO•TO•THE•MOON:bitcoin",
    "description": "A description",
    "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    "decimals": 18,
    "faucetSupported": false,
    "iconUrl": "#",
    "withdrawalFee": "1",
    "chainId": "bitcoin",
    "chainName": "Bitcoin",
    "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
  },
  "quoteSymbol": {
    "name": "DOG•GO•TO•THE•MOON:bitcoin",
    "description": "A description",
    "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    "decimals": 18,
    "faucetSupported": false,
    "iconUrl": "#",
    "withdrawalFee": "1",
    "chainId": "bitcoin",
    "chainName": "Bitcoin",
    "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
  },
  "baseLiquidity": "0",
  "quoteLiquidity": "0",
  "accumulatedFee": "0",
  "tvl": "0",
  "h24Volume": "0",
  "h24Fees": "0",
  "h24Yield": "0",
  "d7Volume": "0",
  "d7Fees": "0",
  "d7Yield": "0",
  "createdAt": "2025-05-06T16:58:45.880361450Z"
}

Get portfolio value history with 1-day, and 7-day balances

get
Responses
200
OK
application/json
get
GET /v1/portfolio/history HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "oneDayBalance": "9950.00",
  "sevenDayBalance": "9800.00"
}

Get rune wallet balance

get
Path parameters
runeIdstringRequired

Rune Id

Responses
200
OK
application/json
get
GET /v1/rune-wallet-balance/{runeId} HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "balance": "0"
}

Get external rune info

get
Path parameters
runeNamestringRequired

Rune Name

Responses
200
OK
application/json
get
GET /v1/runes/external/{runeName} HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "id": "12345:0",
  "name": "DOGGOTOTHEMOON",
  "formattedName": "DOG•GO•TO•THE•MOON",
  "symbol": "🐕",
  "decimals": 5,
  "imageUrl": "https://ordiscan.com/content/618ffb4e23e19566c7567841187a1c424dfd775e4f8cb633a7a3d4836784835fi0"
}

List User Coins

get
Path parameters
userIdstringRequired

User Id

Responses
200
OK
application/json
get
GET /v1/user/{userId}/coins HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "coins": [
    {
      "symbol": {
        "name": "DOG•GO•TO•THE•MOON:bitcoin",
        "description": "A description",
        "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
        "decimals": 18,
        "faucetSupported": false,
        "iconUrl": "#",
        "withdrawalFee": "1",
        "chainId": "bitcoin",
        "chainName": "Bitcoin",
        "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
      },
      "createdBy": {
        "name": "User nickname",
        "userId": "123"
      },
      "currentPrice": "1.23",
      "marketCap": "6500.00",
      "lastTradedAt": "2025-05-06T16:58:45.994097922Z",
      "progress": "43.5",
      "status": "BondingCurveAmm",
      "sequenceNumber": 1,
      "h24Volume": "0",
      "h24Change": "0",
      "d7Change": "0",
      "tvl": "0",
      "h24PoolVolume": "0",
      "h24PoolFees": "0",
      "h24MinPoolYield": "0",
      "h24MaxPoolYield": "0",
      "lastPoolCreatedAt": "2025-05-06T16:58:45.994111282Z",
      "links": [
        {
          "type": "Web",
          "url": "https://example.com"
        }
      ]
    }
  ]
}

Get User Portfolio

get
Path parameters
userIdstringRequired

User Id

Responses
200
OK
application/json
get
GET /v1/user/{userId}/portfolio HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "portfolio": [
    {
      "coin": {
        "symbol": {
          "name": "DOG•GO•TO•THE•MOON:bitcoin",
          "description": "A description",
          "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
          "decimals": 18,
          "faucetSupported": false,
          "iconUrl": "#",
          "withdrawalFee": "1",
          "chainId": "bitcoin",
          "chainName": "Bitcoin",
          "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
        },
        "createdBy": {
          "name": "User nickname",
          "userId": "123"
        },
        "currentPrice": "1.23",
        "marketCap": "6500.00",
        "lastTradedAt": "2025-05-06T16:58:45.994097922Z",
        "progress": "43.5",
        "status": "BondingCurveAmm",
        "sequenceNumber": 1,
        "h24Volume": "0",
        "h24Change": "0",
        "d7Change": "0",
        "tvl": "0",
        "h24PoolVolume": "0",
        "h24PoolFees": "0",
        "h24MinPoolYield": "0",
        "h24MaxPoolYield": "0",
        "lastPoolCreatedAt": "2025-05-06T16:58:45.994111282Z",
        "links": [
          {
            "type": "Web",
            "url": "https://example.com"
          }
        ]
      },
      "usdcValue": "0",
      "pnl": "0"
    }
  ]
}

Get user profile

get
Path parameters
userIdstringRequired

User Id

Responses
200
OK
application/json
get
GET /v1/user/{userId} HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "nickName": "Nick Name",
  "avatarUrl": "https://icons/avatar.svg"
}

Get wallet balance

get
Path parameters
symbolNamestringRequired

Symbol Name

Responses
200
OK
application/json
get
GET /v1/wallet-balance/{symbolName} HTTP/1.1
Host: api.funkybit.fun
Accept: */*
200

OK

{
  "balance": "0"
}
  • GETGet account configuration
  • POSTMark symbol as added
  • GETGet balances
  • POSTManage orders in batch
  • GETGet configuration
  • GETList deposits
  • POSTDeposit
  • GETGet deposit
  • GETGet last price for market
  • GETGet consumptions
  • GETGet order book
  • GETList orders
  • DELETECancel open orders
  • POSTCreate order
  • DELETECancel order
  • GETList trades
  • GETList withdrawals
  • POSTWithdraw
  • GETGet withdrawal
  • POSTAuthorize wallet
  • GETGet Coin
  • GETGet Coin Activity
  • GETGet Coin Market
  • GETList coins
  • GETList pools
  • POSTCreate liquidity pool
  • POSTSet Avatar URL
  • POSTSet Nickname
  • GETGet consumptions
  • GETList Fave Coins
  • POSTAdd coin to faves
  • DELETERemove coin from faves
  • GETGet last price for market
  • POSTCreate amm market
  • GETGet My Portfolio
  • GETGet my positions
  • GETList eligible coins for pool creation
  • GETGet pool
  • POSTAdd liquidity
  • POSTRemove liquidity
  • GETGet portfolio value history with 1-day, and 7-day balances
  • GETGet rune wallet balance
  • POSTCreate rune
  • GETGet external rune info
  • POSTImport rune
  • GETList User Coins
  • GETGet User Portfolio
  • GETGet user profile
  • GETGet wallet balance
  • POSTSet ordinals address

Manage orders in batch

post
Body
marketIdstringOptionalExample: BTC/ETH
Responses
200
OK
application/json
post
POST /v1/batch/orders HTTP/1.1
Host: api.funkybit.fun
Content-Type: application/json
Accept: */*
Content-Length: 720

{
  "marketId": "BTC/ETH",
  "createOrders": [
    {
      "type": "limit",
      "nonce": "123",
      "marketId": "BTC/ETH",
      "side": "Buy",
      "amount": {
        "type": "fixed",
        "value": "100"
      },
      "price": "100",
      "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
      "signingAddress": "0x382964B73D76b87F61f9eE2dCA2D44448a14C68A",
      "verifyingChainId": "0"
    }
  ],
  "cancelOrders": [
    {
      "orderId": "123",
      "marketId": "BTC/ETH",
      "side": "Buy",
      "amount": "100",
      "nonce": "123",
      "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
      "signingAddress": "0xca42DAA2D55AD9922507Cb62d69bCEF9328Cc8Ec",
      "verifyingChainId": "0"
    }
  ]
}
200

OK

{
  "createdOrders": [
    {
      "orderId": "order_01jtk8j791e69az48s1ghh8g8q",
      "clientOrderId": null,
      "requestStatus": "Accepted",
      "error": null,
      "order": {
        "type": "market",
        "nonce": "123",
        "marketId": "BTC/ETH",
        "side": "Buy",
        "amount": {
          "type": "fixed",
          "value": "100"
        },
        "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
        "signingAddress": "0x2Cdec26A9f51aF846A6E1c53622c41531DaBAa09",
        "verifyingChainId": "0"
      }
    },
    {
      "orderId": "order_01jtk8j791e69az48s1ghh8g8r",
      "clientOrderId": null,
      "requestStatus": "Accepted",
      "error": null,
      "order": {
        "type": "limit",
        "nonce": "123",
        "marketId": "BTC/ETH",
        "side": "Buy",
        "amount": {
          "type": "fixed",
          "value": "100"
        },
        "price": "100",
        "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
        "signingAddress": "0x382964B73D76b87F61f9eE2dCA2D44448a14C68A",
        "verifyingChainId": "0"
      }
    }
  ],
  "canceledOrders": [
    {
      "orderId": "order_01jtk8j792et7vj88keh0s2vf5",
      "requestStatus": "Accepted",
      "error": null
    }
  ]
}

Deposit

post
Body
symbolstringOptionalExample: USDC
amountstringOptionalExample: 1000
txHashstringOptionalExample: 0x0000000000000000000000000000000000000000000000000000000000000000
Responses
201
Created
application/json
post
POST /v1/deposits HTTP/1.1
Host: api.funkybit.fun
Content-Type: application/json
Accept: */*
Content-Length: 111

{
  "symbol": "USDC",
  "amount": "1000",
  "txHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
201

Created

{
  "deposit": {
    "id": "id",
    "symbol": "USDC",
    "amount": "200000",
    "status": "Pending",
    "error": null,
    "createdAt": "2025-05-06T16:58:45.932119440Z",
    "txHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
  }
}

Create order

post
Body
one ofOptional
or
Responses
201
Created
application/json
Responseone of
or
post
POST /v1/orders HTTP/1.1
Host: api.funkybit.fun
Content-Type: application/json
Accept: */*
Content-Length: 337

{
  "type": "market",
  "nonce": "123",
  "marketId": "BTC/ETH",
  "side": "Buy",
  "amount": {
    "type": "fixed",
    "value": "100"
  },
  "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  "signingAddress": "0x2Cdec26A9f51aF846A6E1c53622c41531DaBAa09",
  "verifyingChainId": "0"
}
201

Created

{
  "orderId": "order_01jtk8j791e69az48s1ghh8g8q",
  "requestStatus": "Accepted",
  "order": {
    "type": "market",
    "nonce": "123",
    "marketId": "BTC/ETH",
    "side": "Buy",
    "amount": {
      "type": "fixed",
      "value": "100"
    },
    "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "signingAddress": "0x2Cdec26A9f51aF846A6E1c53622c41531DaBAa09",
    "verifyingChainId": "0"
  }
}

Cancel order

delete
Path parameters
orderIdstringRequired

Order Id

Body
orderIdstringOptionalExample: 123
marketIdstringOptionalExample: BTC/ETH
sidestringOptionalExample: Buy
amountstringOptionalExample: 100
noncestringOptionalExample: 123
signaturestringOptionalExample: 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
signingAddressstringOptionalExample: 0xca42DAA2D55AD9922507Cb62d69bCEF9328Cc8Ec
verifyingChainIdstringOptionalExample: 0
Responses
204Success
delete
DELETE /v1/orders/{orderId} HTTP/1.1
Host: api.funkybit.fun
Content-Type: application/json
Accept: */*
Content-Length: 312

{
  "orderId": "123",
  "marketId": "BTC/ETH",
  "side": "Buy",
  "amount": "100",
  "nonce": "123",
  "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  "signingAddress": "0xca42DAA2D55AD9922507Cb62d69bCEF9328Cc8Ec",
  "verifyingChainId": "0"
}
204Success

No content

Withdraw

post
Body
symbolstringOptionalExample: USDC
amountstringOptionalExample: 1000
nonceintegerOptionalExample: 1
signaturestringOptionalExample: 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Responses
201
Created
application/json
post
POST /v1/withdrawals HTTP/1.1
Host: api.funkybit.fun
Content-Type: application/json
Accept: */*
Content-Length: 190

{
  "symbol": "USDC",
  "amount": "1000",
  "nonce": 1,
  "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
}
201

Created

{
  "withdrawal": {
    "id": "id",
    "symbol": "USDC",
    "amount": "200000",
    "status": "Pending",
    "error": null,
    "createdAt": "2025-05-06T16:58:45.930876163Z",
    "txHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "fee": "20"
  }
}

Authorize wallet

post
Body
authorizedAddressstringOptionalExample: 0x0000000000000000000000000000000000000000
chainIdstringOptionalExample: 1337
addressstringOptionalExample: bcrt1qdca3sam9mldju3ssryrrcmjvd8pgnw30ccaggx
timestampstringOptionalExample: 2024-08-21T14:14:13.095Z
signaturestringOptional
Responses
204Success
post
POST /v1/wallets/authorize HTTP/1.1
Host: api.funkybit.fun
Content-Type: application/json
Accept: */*
Content-Length: 194

{
  "authorizedAddress": "0x0000000000000000000000000000000000000000",
  "chainId": "1337",
  "address": "bcrt1qdca3sam9mldju3ssryrrcmjvd8pgnw30ccaggx",
  "timestamp": "2024-08-21T14:14:13.095Z",
  "signature": ""
}
204Success

No content

Create liquidity pool

post
Path parameters
coinNamestringRequired

Coin Name

Body
feeRateintegerOptionalExample: 500000
namestringOptionalExample: Pool Name
Responses
201
Created
application/json
post
POST /v1/coins/{coinName}/pools HTTP/1.1
Host: api.funkybit.fun
Content-Type: application/json
Accept: */*
Content-Length: 386

{
  "feeRate": 500000,
  "initialTransfer": {
    "baseLiquidity": "0",
    "quoteLiquidity": "0",
    "tolerance": 100,
    "nonce": "",
    "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "signingAddress": "0x464547B3e2DB609A502A2175c7dEA16084dAB69F",
    "verifyingChainId": "0",
    "quoteLiquiditySymbol": "BTC"
  },
  "name": "Pool Name"
}
201

Created

{
  "pool": {
    "id": "01jtk8j77pefss93m84exdc1cz",
    "name": "Pool name",
    "feeRate": 500000,
    "baseSymbol": {
      "name": "DOG•GO•TO•THE•MOON:bitcoin",
      "description": "A description",
      "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "decimals": 18,
      "faucetSupported": false,
      "iconUrl": "#",
      "withdrawalFee": "1",
      "chainId": "bitcoin",
      "chainName": "Bitcoin",
      "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
    },
    "quoteSymbol": {
      "name": "DOG•GO•TO•THE•MOON:bitcoin",
      "description": "A description",
      "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "decimals": 18,
      "faucetSupported": false,
      "iconUrl": "#",
      "withdrawalFee": "1",
      "chainId": "bitcoin",
      "chainName": "Bitcoin",
      "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
    },
    "baseLiquidity": "0",
    "quoteLiquidity": "0",
    "accumulatedFee": "0",
    "tvl": "0",
    "h24Volume": "0",
    "h24Fees": "0",
    "h24Yield": "0",
    "d7Volume": "0",
    "d7Fees": "0",
    "d7Yield": "0",
    "createdAt": "2025-05-06T16:58:45.880361450Z"
  },
  "initialTransferId": "lpt_01jtk8j7dafddv3bqggz0kxtrp"
}

Set Avatar URL

post
Body
urlstringOptionalExample: URL
Responses
200Success
post
POST /v1/config/avatar HTTP/1.1
Host: api.funkybit.fun
Content-Type: application/json
Accept: */*
Content-Length: 13

{
  "url": "URL"
}
200Success

No content

Set Nickname

post
Body
namestringOptionalExample: Name
Responses
200Success
post
POST /v1/config/nickname HTTP/1.1
Host: api.funkybit.fun
Content-Type: application/json
Accept: */*
Content-Length: 15

{
  "name": "Name"
}
200Success

No content

Create amm market

post
Body
symbolstringOptionalExample: AN•EXTERNAL•RUNE:bitcoin
poolNamestringOptionalExample: Pool Name
poolFeeRateintegerOptionalExample: 500000
Responses
201
Created
application/json
post
POST /v1/markets/amm HTTP/1.1
Host: api.funkybit.fun
Content-Type: application/json
Accept: */*
Content-Length: 443

{
  "symbol": "AN•EXTERNAL•RUNE:bitcoin",
  "poolName": "Pool Name",
  "poolFeeRate": 500000,
  "initialLiquidityTransfer": {
    "baseLiquidity": "0",
    "quoteLiquidity": "0",
    "tolerance": 100,
    "nonce": "",
    "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "signingAddress": "0x464547B3e2DB609A502A2175c7dEA16084dAB69F",
    "verifyingChainId": "0",
    "quoteLiquiditySymbol": "BTC"
  }
}
201

Created

{
  "market": {
    "id": "USDC/DAI",
    "baseSymbol": "USDC",
    "baseDecimals": 18,
    "quoteSymbol": "DAI",
    "quoteDecimals": 6,
    "tickSize": "0.01",
    "lastPrice": "0.995",
    "minFee": "1",
    "feeRate": "0",
    "type": "Clob"
  },
  "pool": {
    "id": "01jtk8j77pefss93m84exdc1cz",
    "name": "Pool name",
    "feeRate": 500000,
    "baseSymbol": {
      "name": "DOG•GO•TO•THE•MOON:bitcoin",
      "description": "A description",
      "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "decimals": 18,
      "faucetSupported": false,
      "iconUrl": "#",
      "withdrawalFee": "1",
      "chainId": "bitcoin",
      "chainName": "Bitcoin",
      "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
    },
    "quoteSymbol": {
      "name": "DOG•GO•TO•THE•MOON:bitcoin",
      "description": "A description",
      "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "decimals": 18,
      "faucetSupported": false,
      "iconUrl": "#",
      "withdrawalFee": "1",
      "chainId": "bitcoin",
      "chainName": "Bitcoin",
      "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
    },
    "baseLiquidity": "0",
    "quoteLiquidity": "0",
    "accumulatedFee": "0",
    "tvl": "0",
    "h24Volume": "0",
    "h24Fees": "0",
    "h24Yield": "0",
    "d7Volume": "0",
    "d7Fees": "0",
    "d7Yield": "0",
    "createdAt": "2025-05-06T16:58:45.880361450Z"
  },
  "initialTransferId": "lpt_01jtk8j77rerk9bqgestc83e5t"
}

Add liquidity

post
Path parameters
poolIdstringRequired

Pool Id

Body
baseLiquiditystringOptionalExample: 0
quoteLiquiditystringOptionalExample: 0
toleranceintegerOptionalExample: 100
noncestringOptional
signaturestringOptionalExample: 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
signingAddressstringOptionalExample: 0x464547B3e2DB609A502A2175c7dEA16084dAB69F
verifyingChainIdstringOptionalExample: 0
quoteLiquiditySymbolstringOptionalExample: BTC
Responses
200
OK
application/json
post
POST /v1/pools/{poolId}/add-liquidity HTTP/1.1
Host: api.funkybit.fun
Content-Type: application/json
Accept: */*
Content-Length: 330

{
  "baseLiquidity": "0",
  "quoteLiquidity": "0",
  "tolerance": 100,
  "nonce": "",
  "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  "signingAddress": "0x464547B3e2DB609A502A2175c7dEA16084dAB69F",
  "verifyingChainId": "0",
  "quoteLiquiditySymbol": "BTC"
}
200

OK

{
  "transferId": "lpt_01jtk8j7dvfhx900s2wt3qn2x9",
  "disposition": "Pending",
  "rejectReason": null
}

Remove liquidity

post
Path parameters
poolIdstringRequired

Pool Id

Body
baseLiquiditystringOptionalExample: 0
quoteLiquiditystringOptionalExample: 0
toleranceintegerOptionalExample: 100
noncestringOptional
signaturestringOptionalExample: 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
signingAddressstringOptionalExample: 0x464547B3e2DB609A502A2175c7dEA16084dAB69F
verifyingChainIdstringOptionalExample: 0
quoteLiquiditySymbolstringOptionalExample: BTC
Responses
200
OK
application/json
post
POST /v1/pools/{poolId}/remove-liquidity HTTP/1.1
Host: api.funkybit.fun
Content-Type: application/json
Accept: */*
Content-Length: 330

{
  "baseLiquidity": "0",
  "quoteLiquidity": "0",
  "tolerance": 100,
  "nonce": "",
  "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  "signingAddress": "0x464547B3e2DB609A502A2175c7dEA16084dAB69F",
  "verifyingChainId": "0",
  "quoteLiquiditySymbol": "BTC"
}
200

OK

{
  "transferId": "lpt_01jtk8j7dvfhx900s2wt3qn2x9",
  "disposition": "Pending",
  "rejectReason": null
}

Create rune

post
Body
namestringOptionalExample: funkybit
descriptionstringOptional
iconstringOptionalExample: data:image/svg+xml;base64,.....
Responses
201
Created
application/json
post
POST /v1/runes HTTP/1.1
Host: api.funkybit.fun
Content-Type: application/json
Accept: */*
Content-Length: 503

{
  "name": "funkybit",
  "description": "",
  "icon": "data:image/svg+xml;base64,.....",
  "links": [
    {
      "type": "Web",
      "url": "https://well-known.com/"
    }
  ],
  "args": {
    "type": "Basic",
    "initialOrder": {
      "nonce": "123",
      "amount": {
        "value": "100"
      },
      "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
      "signingAddress": "0xE6d5e194a973D4AC5052ceA9D4D6c66727EF410f",
      "verifyingChainId": "0",
      "clientOrderId": "client-order-id",
      "adapterMarketId": null
    }
  }
}
201

Created

{
  "coin": {
    "symbol": {
      "name": "DOG•GO•TO•THE•MOON:bitcoin",
      "description": "A description",
      "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "decimals": 18,
      "faucetSupported": false,
      "iconUrl": "#",
      "withdrawalFee": "1",
      "chainId": "bitcoin",
      "chainName": "Bitcoin",
      "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
    },
    "createdBy": {
      "name": "User nickname",
      "userId": "123"
    },
    "currentPrice": "1.23",
    "marketCap": "6500.00",
    "lastTradedAt": "2025-05-06T16:58:45.994097922Z",
    "progress": "43.5",
    "status": "BondingCurveAmm",
    "sequenceNumber": 1,
    "h24Volume": "0",
    "h24Change": "0",
    "d7Change": "0",
    "tvl": "0",
    "h24PoolVolume": "0",
    "h24PoolFees": "0",
    "h24MinPoolYield": "0",
    "h24MaxPoolYield": "0",
    "lastPoolCreatedAt": "2025-05-06T16:58:45.994111282Z",
    "links": [
      {
        "type": "Web",
        "url": "https://example.com"
      }
    ]
  }
}

Import rune

post
Body
runeNamestringOptionalExample: FUNKY•RUNE
depositAmountstringOptionalExample: 10000000
depositTxHashstringOptionalExample: 0x0000000000000000000000000000000000000000000000000000000000000000
Responses
201
Created
application/json
post
POST /v1/runes/import HTTP/1.1
Host: api.funkybit.fun
Content-Type: application/json
Accept: */*
Content-Length: 139

{
  "runeName": "FUNKY•RUNE",
  "depositAmount": "10000000",
  "depositTxHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
201

Created

{
  "symbol": {
    "name": "DOG•GO•TO•THE•MOON:bitcoin",
    "description": "A description",
    "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    "decimals": 18,
    "faucetSupported": false,
    "iconUrl": "#",
    "withdrawalFee": "1",
    "chainId": "bitcoin",
    "chainName": "Bitcoin",
    "nameOnChain": "DOG•GO•TO•THE•MOON•ABCD"
  },
  "depositId": "deposit_123"
}

Set ordinals address

post
Body
ordinalsAddressstringOptionalExample: bcrt1qdca3sam9mldju3ssryrrcmjvd8pgnw30ccaggx
Responses
204Success
post
POST /v1/wallets/ordinals-address HTTP/1.1
Host: api.funkybit.fun
Content-Type: application/json
Accept: */*
Content-Length: 167

{
  "ordinalsAddress": "bcrt1qdca3sam9mldju3ssryrrcmjvd8pgnw30ccaggx",
  "proofs": {
    "addressOwnershipProof": "",
    "authorizationProof": "",
    "timestamp": "2024-12-09T14:14:13.095Z"
  }
}
204Success

No content