# Algodex API v1

## 💱 Algodex API

[![algodex-php](https://github.com/algodex/algodex-api/actions/workflows/docker-image.yml/badge.svg?branch=main)](https://github.com/algodex/algodex-api/actions/workflows/docker-image.yml)

The following is the 1.0 backend API for Algodex. This is a DeFi service to allow users to trade assets on the Algorand network directly between each other, with wallets hosted elsewhere on MyAlgo Wallet.

The 2.0 backend is a major architectural refactoring and is currently under development.

### Endpoints

Algodex Mainnet: `https://app.algodex.com/[api here]`

Algodex Testnet: `https://testnet.algodex.com/[api here]`

## 📝 API Documentation

#### Fetching a list of all orders for an ASA

**Params**

* assetId: the asset ID to search orders for
* getAssetInfo (optional): set to true to also return asset information

**Example**

<https://testnet.algodex.com/algodex-backend/orders.php?assetId=15322902>

## Fetch Asset Orders

<mark style="color:blue;">`GET`</mark> `https://testnet.algodex.com/algodex-backend/orders.php`

Returns orders for an asset

#### Query Parameters

| Name                                      | Type     | Description |
| ----------------------------------------- | -------- | ----------- |
| assetID<mark style="color:red;">\*</mark> | 22295876 |             |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
   "sellASAOrdersInEscrow":[
      {
         "assetLimitPriceInAlgos":"9000.000000000000",
         "asaPrice":"9000.000000000000",
         "assetLimitPriceD":9000,
         "assetLimitPriceN":1,
         "algoAmount":498000,
         "asaAmount":987,
         "assetId":22295876,
         "appId":22045522,
         "escrowAddress":"ZJO7QGK3KASYG35D5N4CSX76OKPQLLTLJ6CZ6YTEG4GGT2OC235UJI3U6M",
         "ownerAddress":"ACWISBRHEYQKVILSCEDNWCNOSTMIOQIHV3KLPBXHDZAJHVZT7AYM6PE6ZE",
         "version":6,
         "minimumExecutionSizeInAlgo":0,
         "round":20353010,
         "unix_time":1647328756,
         "formattedPrice":"900.000000",
         "formattedASAAmount":"0.00987",
         "decimals":5
      },
      // More...
   ],
   "buyASAOrdersInEscrow":[
      {
         "assetLimitPriceInAlgos":"10.000000000000",
         "asaPrice":"10.000000000000",
         "assetLimitPriceD":10,
         "assetLimitPriceN":1,
         "algoAmount":4530000,
         "asaAmount":0,
         "assetId":22295876,
         "appId":22045503,
         "escrowAddress":"7ULXUOXU5XQ76G2QZL5ZGQZMCFJBBXU72ZCDIS5KCCDHAOLZDW4XS5HNBQ",
         "ownerAddress":"AK6WGVO34V2QPTXCJYNDZC32ZQQCZMTC3SRYPWQR4CCW266YX2CKL6H3W4",
         "version":6,
         "minimumExecutionSizeInAlgo":0,
         "round":22651961,
         "unix_time":1657060128,
         "formattedPrice":"1.000000",
         "formattedASAAmount":"4.53000",
         "decimals":5
      },
      // More...
   ]
}
```

{% endtab %}
{% endtabs %}

#### Fetching a list of orders for a wallet

**Params**

* ownerAddr: the owner address to search orders for
* getAssetInfo (optional): set to true to also return asset information

**Example**

<https://testnet.algodex.com/algodex-backend/orders.php?ownerAddr=SPFRPFCZR4OSKKTCNGY5KOCS55RXWC6VJYU7SGQ4EUEVFIDUPAL4EKLJ3Q>

## Fetch Wallet Orders

<mark style="color:blue;">`GET`</mark> `https://testnet.algodex.com/algodex-backend/orders.php`

Returns orders for a wallet

#### Query Parameters

| Name                                        | Type      | Description |
| ------------------------------------------- | --------- | ----------- |
| ownerAddr<mark style="color:red;">\*</mark> | {address} |             |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
    // Response
    
    "sellASAOrdersInEscrow":[],
    "buyASAOrdersInEscrow":[]
}

```

{% endtab %}
{% endtabs %}

#### Fetching the trade history for an ASA

**Params**

* assetId: the asset ID to search the trade history for
* getAssetInfo (optional): set to true to also return asset information

**Example**

<https://testnet.algodex.com/algodex-backend/trade_history.php?assetId=15322902>

## Fetch Asset TradeHistory

<mark style="color:blue;">`GET`</mark> `https://testnet.algodex.com/algodex-backend/trade_history.php`

Returns trade history for asset

#### Query Parameters

| Name    | Type     | Description |
| ------- | -------- | ----------- |
| assetId | 22295876 |             |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
   "transactions":[
      {
         "PK_trade_history_id":666370,
         "transaction_id":null,
         "group_id":"jBVPEG4TgT8yxfC24lIqX6uKuo1nXy9tTX3b\/zlp8jk=",
         "unix_time":1657975266,
         "block_round":22863925,
         "application_id":22045503,
         "asset_id":22295876,
         "asaPrice":"10.000000000000",
         "algoAmount":2000,
         "asaAmount":200,
         "asaBuyerAddress":"AK6WGVO34V2QPTXCJYNDZC32ZQQCZMTC3SRYPWQR4CCW266YX2CKL6H3W4",
         "asaSellerAddress":"WE3IEXZEVEM63WYRA352BKEYN3F5I3ITNCJMKGUUROCNA3G5LEGDGJJDMQ",
         "tradeType":"sellASA",
         "formattedPrice":"1.000000",
         "formattedASAAmount":"0.00200"
      },
      // More...
   ]
}
```

{% endtab %}
{% endtabs %}

#### Fetching the trade history for a wallet

**Params**

* ownerAddr: the owner address to search the trade history for
* getAssetInfo (optional): set to true to also return asset information

**Example**

<https://testnet.algodex.com/algodex-backend/trade_history.php?ownerAddr=SPFRPFCZR4OSKKTCNGY5KOCS55RXWC6VJYU7SGQ4EUEVFIDUPAL4EKLJ3Q>

## Fetch Wallet TradeHistory

<mark style="color:blue;">`GET`</mark> `https://testnet.algodex.com/algodex-backend/trade_history.php`

#### Query Parameters

| Name                                        | Type      | Description         |
| ------------------------------------------- | --------- | ------------------- |
| ownerAddr<mark style="color:red;">\*</mark> | {address} | Wallet address      |
| getAssetInfo                                | true      | Boolean Query param |

{% tabs %}
{% tab title="200: OK " %}

```javascript
// Example response
{
   "allAssets": [
      {
         "created-at-round":15917936,
         "deleted":false,
         "index":22060777,
         "params":{
            "clawback":"XTEI2ZFNQJVFNOKZIS5WN7OVOKCUKGVL5MEBYSIVUXI76NAPR4G3KPFOJI",
            "creator":"XTEI2ZFNQJVFNOKZIS5WN7OVOKCUKGVL5MEBYSIVUXI76NAPR4G3KPFOJI",
            "decimals":2,
            "default-frozen":false,
            "freeze":"XTEI2ZFNQJVFNOKZIS5WN7OVOKCUKGVL5MEBYSIVUXI76NAPR4G3KPFOJI",
            "manager":"XTEI2ZFNQJVFNOKZIS5WN7OVOKCUKGVL5MEBYSIVUXI76NAPR4G3KPFOJI",
            "name":"WaveCoin",
            "name-b64":"V2F2ZUNvaW4=",
            "reserve":"XTEI2ZFNQJVFNOKZIS5WN7OVOKCUKGVL5MEBYSIVUXI76NAPR4G3KPFOJI",
            "total":20000000,
            "unit-name":"WAVE",
            "unit-name-b64":"V0FWRQ==",
            "url":"https:\/\/glasswave.co\/wavecoin",
            "url-b64":"aHR0cHM6Ly9nbGFzc3dhdmUuY28vd2F2ZWNvaW4="
         }
      }
    ],
    "transactions": [
        {
            "PK_trade_history_id": 666444,
            "transaction_id": null,
            "group_id": "B8kNQ9\/V\/GesMBDGLpfA69jOxZM2TBaC5B6VkFFcWT0=",
            "unix_time": 1658130896,
            "block_round": 22900760,
            "application_id": 22045503,
            "asset_id": 22060777,
            "asaPrice": "90000.000000000000",
            "algoAmount": 900000,
            "asaAmount": 10,
            "asaBuyerAddress": "ZXPEYJMWFLULILWJHWB3Y6DFI4ADE7XVMGARAH734ZJ5ECXAR4YVMRZ4EM",
            "asaSellerAddress": "TQS4D62BRXX6XQY72EESMUPYVNN45MP2UYHNXP7UTFKOMINDTJCC3N5XWU",
            "tradeType": "buyASA",
            "formattedPrice": "9.000000",
            "formattedASAAmount": "0.10"
        },
    ]
}
```

{% endtab %}
{% endtabs %}

#### Fetching all recently traded ASAs, their prices, and information

**Params**

None currently. This will eventually have different sort parameters.

#### Fetching chart info for an ASA

This currently returns the trades aggregated for the daily frequency. This will eventually different chart options

**Params**

assetId: the asset ID to get the chart information for chartTime: Time interval to pick from \['1m', '5m', '15m', '1h', '4h', '1d']

**Example**

<https://testnet.algodex.com/algodex-backend/charts2.php?assetId=15322902&chartTime=15m>

## Fetch Asset Chart

<mark style="color:blue;">`GET`</mark> `https://testnet.algodex.com/algodex-backend/charts2.php`

Returns chart for an Asset

#### Query Parameters

| Name                                        | Type     | Description                                              |
| ------------------------------------------- | -------- | -------------------------------------------------------- |
| assetId<mark style="color:red;">\*</mark>   | 15322902 | Asset ID                                                 |
| chartTime<mark style="color:red;">\*</mark> | 15m      | Can be either of `['1m', '5m', '15m', '1h', '4h', '1d']` |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
   // Response
   "current_price":"758.006622516556",
   "previous_trade_price":"758.006622516556",
   "last_period_closing_price":"758.006622516556",
   "asset_info":{
      "asset":{
         "created-at-round":13596306,
         "deleted":false,
         "index":15322902,
         "params":{
            "clawback":"PBSSJ2W6FDXVRPT4L4FGHTX2IHY3VREI44SB7VJTVT75UT6ER3CTVD6B74",
            "creator":"PBSSJ2W6FDXVRPT4L4FGHTX2IHY3VREI44SB7VJTVT75UT6ER3CTVD6B74",
            "decimals":6,
            "default-frozen":false,
            "freeze":"PBSSJ2W6FDXVRPT4L4FGHTX2IHY3VREI44SB7VJTVT75UT6ER3CTVD6B74",
            "manager":"PBSSJ2W6FDXVRPT4L4FGHTX2IHY3VREI44SB7VJTVT75UT6ER3CTVD6B74",
            "name":"Lamps",
            "name-b64":"TGFtcHM=",
            "reserve":"PBSSJ2W6FDXVRPT4L4FGHTX2IHY3VREI44SB7VJTVT75UT6ER3CTVD6B74",
            "total":100000000000,
            "unit-name":"LAMP",
            "unit-name-b64":"TEFNUA=="
         }
      }
   },
   "chart_data":[
      {
         "asaVolume":0.000604,
         "algoVolume":0.457836,
         "low":"758.006622516556",
         "formatted_low":"758.006623",
         "high":"758.006622516556",
         "formatted_high":"758.006623",
         "close":"758.006622516556",
         "formatted_close":"758.006623",
         "open":"758.006622516556",
         "formatted_open":"758.006623",
         "dateTime":"2022-07-26T16:30:00Z",
         "unixTime":1658853000,
         "date":"2022-07-26"
      },
      {
         "asaVolume":0.000604,
         "algoVolume":0.457836,
         "low":"758.006622516556",
         "formatted_low":"758.006623",
         "high":"758.006622516556",
         "formatted_high":"758.006623",
         "close":"758.006622516556",
         "formatted_close":"758.006623",
         "open":"758.006622516556",
         "formatted_open":"758.006623",
         "dateTime":"2022-07-26T14:30:00Z",
         "unixTime":1658845800,
         "date":"2022-07-26"
      },
      // More...
   ],
   "spread_info":{
      "max_bid":"1801.0000",
      "min_sell":"953.0302",
      "spread":-847.9698
   }
}
```

{% endtab %}
{% endtabs %}

#### Getting complete asset information for an asset that is traded or untraded

This will fetch asset for an information that is either traded or untraded

**Params**

* assetId: the assetId of the asset

#### Searching Asset information by name or ID

This will query both Algodex and Algoexplorer and present results for both

**Params**

query: The query string. This can be an integer (for the asset id), or a string to search for the asset name or unit name. Partial name matches work as well.

**Examples**

* <https://testnet.algodex.com/algodex-backend/asset_search.php?query=15322902>
* <https://testnet.algodex.com/algodex-backend/asset_search.php?query=LAMP>
* [https://testnet.algodex.com/algodex-backend/asset\_search.php?query=DOUG](https://testnet.algodex.com/algodex-backend/asset_search.php?query=doug)
* [https://testnet.algodex.com/algodex-backend/asset\_search.php?query=LAM](https://testnet.algodex.com/algodex-backend/asset_search.php?query=LAMP)

## Search Assets

<mark style="color:blue;">`GET`</mark> `https://testnet.algodex.com/algodex-backend/asset_search.php`

Search for an asset

#### Query Parameters

| Name                                    | Type     | Description                                |
| --------------------------------------- | -------- | ------------------------------------------ |
| query<mark style="color:red;">\*</mark> | 15322902 | User can query by `[Asset ID, Asset Name]` |

{% tabs %}
{% tab title="200: OK " %}

```javascript
[
    {
        "assetName": "Lamps",
        "unitName": "LAMP",
        "verified": false,
        "destroyed": false,
        "assetId": 15322902,
        "isTraded": true,
        "decimals": 6,
        "total": 100000000000,
        "priceChg24Pct": 0.0007417558230212168,
        "price": "758.006622516556",
        "formattedPrice": "758.006623",
        "hasOrders": true,
        "formattedASALiquidity": "140.339924",
        "formattedAlgoLiquidity": "234882.457618"
    }
]
```

{% endtab %}
{% endtabs %}

#### Getting package and smart contract version

This is for checking compatibility between the client and the server. If the escrowContractVersion is different, then any orders placed into the order book will *not* show up in the UI!

#### Getting asset information for a wallet address

This will query Algodex and return all the assets belonging to a wallet, along with price information and how many are in orders

**Params**

* ownerAddr: the owner address to retrieve the assets for.

**Examples**

* <https://testnet.algodex.com/algodex-backend/wallet_assets.php?ownerAddr=WYWRYK42XADLY3O62N52BOLT27DMPRA3WNBT2OBRT65N6OEZQWD4OSH6PI>

## Fetch Wallet Assets

<mark style="color:blue;">`GET`</mark> `https://testnet.algodex.com/algodex-backend/wallet_assets.php`

Returns asset for a wallet

#### Query Parameters

| Name                                        | Type      | Description    |
| ------------------------------------------- | --------- | -------------- |
| ownerAddr<mark style="color:red;">\*</mark> | {address} | Wallet Address |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
    "allAssets": [
        {
            "assetId": 16525344,
            "amount": 48596878092,
            "asaInOrder": 0,
            "name": "Alex Play 1",
            "unit_name": "ALEX1",
            "decimals": 5,
            "formattedTotalASAAmount": "485968.78092",
            "formattedASAInOrder": "0",
            "formattedASAAvailable": "485968.78092",
            "formattedPrice": null,
            "formattedTotalAlgoEquiv": null
        },
        {
            "assetId": 24253358,
            "amount": 1,
            "asaInOrder": 0,
            "name": "AlgoDesk Test ASA",
            "unit_name": "AD-TEST",
            "decimals": 0,
            "formattedTotalASAAmount": "1",
            "formattedASAInOrder": "0",
            "formattedASAAvailable": "1",
            "formattedPrice": null,
            "formattedTotalAlgoEquiv": null
        },
    ]
}
```

{% endtab %}
{% endtabs %}

#### Getting asset information for all assets

**Examples**

{% embed url="<https://api-testnet-public.algodex.com/algodex-backend/assets.php>" %}

## Fetch Assets

<mark style="color:blue;">`GET`</mark> `https://api-testnet-public.algodex.com/algodex-backend/assets.php`

Return assets list

#### Query Parameters

| Name | Type     | Description                      |
| ---- | -------- | -------------------------------- |
| id   | 22295876 | Asset ID (Returns single object} |

{% tabs %}
{% tab title="200: OK " %}

```javascript

// Example response without ID Query
{
   "ok":true,
   "rows":366,
   "data":[
      {
         "id":15322902,
         "unix_time":1658853136,
         "price":758.006622516556,
         "priceBefore":758.001,
         "price24Change":0.0007417558230212168,
         "isTraded":true
      },
      {
         "id":33698417,
         "unix_time":1658331321,
         "price":0.760032540259,
         "priceBefore":0.760032540259,
         "price24Change":0,
         "isTraded":true
      },
   ]
}

// Example response with ID Query
{
   "ok":true,
   "rows":1,
   "data":[
      {
         "id":22295876,
         "unix_time":1657975266,
         "price":10,
         "priceBefore":10,
         "price24Change":0,
         "isTraded":true
      }
   ]
}

```

{% endtab %}
{% endtabs %}
