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 1 month 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-28T20:38:17.341182136Z",
      "usdcValue": "0"
    },
    {
      "symbol": "ETH",
      "total": "1000000000000",
      "available": "500000",
      "lastUpdated": "2025-05-28T20:38:17.341201327Z",
      "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-28T20:38:17.343893055Z",
      "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-28T20:38:17.343893055Z",
    "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_01jwc9vzzsfsm8azy4dh76d9ct",
      "clientOrderId": null,
      "status": "Partial",
      "marketId": "BTC/ETH",
      "side": "Buy",
      "amount": "100",
      "executions": [
        {
          "tradeId": "trade_01jwc9vzzsfsm8azy4dh76d9cv",
          "timestamp": "2025-05-28T20:38:17.337796101Z",
          "amount": "50",
          "price": "500",
          "role": "Maker",
          "feeAmount": "0",
          "feeSymbol": "ETH",
          "marketId": "BTC/ETH"
        }
      ],
      "timing": {
        "createdAt": "2025-05-28T20:38:17.338105234Z",
        "updatedAt": null,
        "closedAt": null,
        "sequencerTimeNs": "0"
      }
    },
    {
      "type": "limit",
      "id": "order_01jwc9vzztehgay9wsw93v5kte",
      "clientOrderId": null,
      "status": "Open",
      "marketId": "BTC/ETH",
      "side": "Buy",
      "amount": "100",
      "originalAmount": "100",
      "autoReduced": false,
      "price": "100",
      "executions": [
        {
          "tradeId": "trade_01jwc9vzztehgay9wsw93v5ktf",
          "timestamp": "2025-05-28T20:38:17.338150945Z",
          "amount": "50",
          "price": "500",
          "role": "Maker",
          "feeAmount": "0",
          "feeSymbol": "ETH",
          "marketId": "BTC/ETH"
        }
      ],
      "timing": {
        "createdAt": "2025-05-28T20:38:17.338156165Z",
        "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

after-timestampstringOptional

Return trades executed after 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-28T20:38:17.360786862Z",
      "orderId": "1234",
      "clientOrderId": "client-1234",
      "marketId": "BTC/ETH",
      "executionRole": "Taker",
      "counterOrderId": "4321",
      "side": "Buy",
      "amount": "12345",
      "notional": "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-28T20:38:17.343176377Z",
      "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-28T20:38:17.343176377Z",
    "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"
  },
  "createdAt": "2025-05-28T20:38:17.417240596Z",
  "currentPrice": "1.23",
  "totalSupply": "1234567",
  "marketCap": "6500.00",
  "lastTradedAt": "2025-05-28T20:38:17.417260607Z",
  "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-28T20:38:17.417267667Z",
  "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

Direction to sort (Up, Down)

Example: UpPossible 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",
      1748464697455,
      "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:
dirstring · enumOptional

Sort direction

Example: UpPossible values:
searchstringOptional

Search string

safe-searchbooleanOptional

Safe search

pageintegerOptional

Page to return

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"
      },
      "createdAt": "2025-05-28T20:38:17.417240596Z",
      "currentPrice": "1.23",
      "totalSupply": "1234567",
      "marketCap": "6500.00",
      "lastTradedAt": "2025-05-28T20:38:17.417260607Z",
      "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-28T20:38:17.417267667Z",
      "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": "01jwc9w05je2zawdtrpzxydhfv",
      "name": "Pool name",
      "feeRate": 500000,
      "tvl": "0",
      "h24Volume": "0",
      "h24Fees": "0",
      "h24Yield": "0",
      "createdAt": "2025-05-28T20:38:17.522907518Z"
    }
  ]
}

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"
      },
      "createdAt": "2025-05-28T20:38:17.417240596Z",
      "currentPrice": "1.23",
      "totalSupply": "1234567",
      "marketCap": "6500.00",
      "lastTradedAt": "2025-05-28T20:38:17.417260607Z",
      "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-28T20:38:17.417267667Z",
      "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"
        },
        "createdAt": "2025-05-28T20:38:17.417240596Z",
        "currentPrice": "1.23",
        "totalSupply": "1234567",
        "marketCap": "6500.00",
        "lastTradedAt": "2025-05-28T20:38:17.417260607Z",
        "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-28T20:38:17.417267667Z",
        "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": "01jwc9vzxke4ktgcxftz1vp6b3",
      "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": "01jwc9vzxke4ktgcxftz1vp6b3",
  "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-28T20:38:17.268941266Z"
}

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"
      },
      "createdAt": "2025-05-28T20:38:17.417240596Z",
      "currentPrice": "1.23",
      "totalSupply": "1234567",
      "marketCap": "6500.00",
      "lastTradedAt": "2025-05-28T20:38:17.417260607Z",
      "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-28T20:38:17.417267667Z",
      "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"
        },
        "createdAt": "2025-05-28T20:38:17.417240596Z",
        "currentPrice": "1.23",
        "totalSupply": "1234567",
        "marketCap": "6500.00",
        "lastTradedAt": "2025-05-28T20:38:17.417260607Z",
        "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-28T20:38:17.417267667Z",
        "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",
  "walletAddresses": [
    "bcrt1q5jdpyt2x5utsqgaazdf6jr4cc7yeaec0me0e4u",
    "0x039e48a1FFE19e8Fa7c573B4cb73b585402FDA34"
  ]
}

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": "0x9a70C106F89a842246ebB328f6FBfF35a5987610",
      "verifyingChainId": "0"
    }
  ],
  "cancelOrders": [
    {
      "orderId": "123",
      "marketId": "BTC/ETH",
      "side": "Buy",
      "amount": "100",
      "nonce": "123",
      "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
      "signingAddress": "0x5a815285C0cC8a1750a0cc9dc27D65AAEACb4395",
      "verifyingChainId": "0"
    }
  ]
}
200

OK

{
  "createdOrders": [
    {
      "orderId": "order_01jwc9vzzjfpsscf77q251zaz3",
      "clientOrderId": null,
      "requestStatus": "Accepted",
      "error": null,
      "order": {
        "type": "market",
        "nonce": "123",
        "marketId": "BTC/ETH",
        "side": "Buy",
        "amount": {
          "type": "fixed",
          "value": "100"
        },
        "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
        "signingAddress": "0xB960F8eAeD8Fc6713E98bC65bDa72530457C4804",
        "verifyingChainId": "0"
      }
    },
    {
      "orderId": "order_01jwc9vzzjfpsscf77q251zaz4",
      "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": "0x9a70C106F89a842246ebB328f6FBfF35a5987610",
        "verifyingChainId": "0"
      }
    }
  ],
  "canceledOrders": [
    {
      "orderId": "order_01jwc9vzzqfkjvz03z5pdxkvtm",
      "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-28T20:38:17.343893055Z",
    "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": "0xB960F8eAeD8Fc6713E98bC65bDa72530457C4804",
  "verifyingChainId": "0"
}
201

Created

{
  "orderId": "order_01jwc9vzzjfpsscf77q251zaz3",
  "requestStatus": "Accepted",
  "order": {
    "type": "market",
    "nonce": "123",
    "marketId": "BTC/ETH",
    "side": "Buy",
    "amount": {
      "type": "fixed",
      "value": "100"
    },
    "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "signingAddress": "0xB960F8eAeD8Fc6713E98bC65bDa72530457C4804",
    "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: 0x5a815285C0cC8a1750a0cc9dc27D65AAEACb4395
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": "0x5a815285C0cC8a1750a0cc9dc27D65AAEACb4395",
  "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-28T20:38:17.343176377Z",
    "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": "0xAcAf390700be9e84015cead55b65d905F97359A1",
    "verifyingChainId": "0",
    "quoteLiquiditySymbol": "BTC"
  },
  "name": "Pool Name"
}
201

Created

{
  "pool": {
    "id": "01jwc9vzxke4ktgcxftz1vp6b3",
    "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-28T20:38:17.268941266Z"
  },
  "initialTransferId": "lpt_01jwc9w05zegsvn2npyzyec95h"
}

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": "0xAcAf390700be9e84015cead55b65d905F97359A1",
    "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": "01jwc9vzxke4ktgcxftz1vp6b3",
    "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-28T20:38:17.268941266Z"
  },
  "initialTransferId": "lpt_01jwc9vzxne9wascxpvcr600fe"
}

Add liquidity

post
Path parameters
poolIdstringRequired

Pool Id

Body
baseLiquiditystringOptionalExample: 0
quoteLiquiditystringOptionalExample: 0
toleranceintegerOptionalExample: 100
noncestringOptional
signaturestringOptionalExample: 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
signingAddressstringOptionalExample: 0xAcAf390700be9e84015cead55b65d905F97359A1
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": "0xAcAf390700be9e84015cead55b65d905F97359A1",
  "verifyingChainId": "0",
  "quoteLiquiditySymbol": "BTC"
}
200

OK

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

Remove liquidity

post
Path parameters
poolIdstringRequired

Pool Id

Body
baseLiquiditystringOptionalExample: 0
quoteLiquiditystringOptionalExample: 0
toleranceintegerOptionalExample: 100
noncestringOptional
signaturestringOptionalExample: 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
signingAddressstringOptionalExample: 0xAcAf390700be9e84015cead55b65d905F97359A1
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": "0xAcAf390700be9e84015cead55b65d905F97359A1",
  "verifyingChainId": "0",
  "quoteLiquiditySymbol": "BTC"
}
200

OK

{
  "transferId": "lpt_01jwc9w064fzpsefk6t3dmwgt9",
  "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": "0x9b27a01D71a9c98CA82b8729C68258aFB269208a",
      "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"
    },
    "createdAt": "2025-05-28T20:38:17.417240596Z",
    "currentPrice": "1.23",
    "totalSupply": "1234567",
    "marketCap": "6500.00",
    "lastTradedAt": "2025-05-28T20:38:17.417260607Z",
    "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-28T20:38:17.417267667Z",
    "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