Welcome to Juungle API. We're glad you are here. If you have any questions please contact us on Telegram (opens new window).
Juungle is an instant, 0-conf exchange with partial custody, similarly to sideshift.ai (opens new window). We hold funds as short as possible to allow for completion of trades. In fact, we can provide your private keys for your deposit address if it helps in the development of your application! However, for most cases this isn't necessary.
Juungle is able to prove an instant safe 0-conf experience through careful design of transaction dependency. Double spends are still possible, they just aren't profitable, and merely undo later actions in the graph. For example, if the NFT seller double spent, he would also undo the transaction that bought his NFT. If the NFT buyer double spent, the sale simply wouldnt go through, and a subsequent withdraw of BCH would also be eliminated.
Here is how the transaction flow looks:
Because this design is based around Bitcoin and the UTXO model, it is very easy to integrate into your application. You can use your normal tools to send transactions, and only have a minimal api surface to implement for actions specific to the exchange (such as setting price).
To sell your tokens on the exchange, first you must create an account and login. Navigate to “Account” page. From here, click on “Wallet” and a pane will open showing you your deposit address.
Send your NFTs to the deposit address given above, they will be detected automatically (though give it a few seconds for the transaction to propagate). Then, perform the following :
userId={integer}
depositTxidSet=true
purchaseTxidUnset=true
withdrawTxidUnset=true
priceSatoshisUnset=true
You can see an example of this api call here (opens new window).
To get additional information about this route:
Next, you will need to set the price of these tokens. Using the above endpoint with different options (see documentation linked above) you can retrieve the nftId
of your newly deposited tokens. These will be used in the set_price
call.
By default when you deposit the price is unset and it will not be available for purchase. You must call an endpoint using the nftId
you retrieved above. Using your JWT token, the nftId
, and priceSatoshis
you should call the /user/nfts/set_price
route.
Once that is complete, your NFT will be available to purchase by others. If you would like to subscribe to this event, watch the blockchain for when your deposit NFT UTXO moves. This will be the sale, including your payment, unless you decide to withdraw it beforehand.
To find nfts you can use the generic get NFTs route. Make sure to include these query parameters:
depositTxidSet=true
purchaseTxidUnset=true
withdrawTxidUnset=true
priceSatoshisSet=true
Such as in this api call (opens new window).
To get additional information about this route, and other options you can provide to further filter:
Check for tokens you want to show. make sure to exclude those with purchaseHold
set to true
, these ones are in the process of being purchased and your Bitcoin Cash will be refunded. This property cannot be set during search query currently.
Once you have found a NFT you would like to purchase, your next step is to create a “purchase hold” - this gives you three minutes to perform your transaction and receive your NFT.
Pass the nftId
received from the above call, along with an address to receive the NFT (or refund) at when making the following call:
This will respond with an address and the exact amount of satoshis to send to it. You must send exactly the correct amount, or your order will be refunded and your Bitcoin Cash will be returned to your toAddress
you provided during the creation of the purchase hold.
If successful, immediately a new transaction will be created sending the toAddress
the NFT, as well as sending fee to exchange and the purchase amount to the seller.