> For the complete documentation index, see [llms.txt](https://dev.plyr.network/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dev.plyr.network/api-quickstart.md).

# API Quickstart

### Prerequisite

* You need to signup PLYR\[ID] first on both [Mainnet ](https://pgu.plyr.network/signup/)and [Testnet](https://pgu-testnet.vercel.app/dashboard/). This PLYR\[ID] gonna be a "Developer account and Game ID". Please set a name to be related with your game name.
* API KEY and SECRET KEY — After you signup the PLYR\[ID]. You can request us to generate API KEY Pair.

### **Basic to Call our API**

We use **"Timestamp + Body Payload"** and signs with **SECRET KEY** as  a **HMAC (SHA256) signature**. You need to include custom header apikey, signature, timestamp every time to call our API.

## Base Headers

Every API request must include these base headers:

```typescript
{
    apikey: string; // Your API key obtained from the developer portal
    signature: string; // HMAC signature of the request
    timestamp: string; // Current timestamp in milliseconds (Date.now().toString())
}
```

## Header Requirements

Format Requirements:

```
- Headers are case-sensitive
- Values must be strings
- Timestamp must be in milliseconds
```

## HMAC Signature Generation

```typescript
// Example signature generation
const timestamp = Date.now().toString();
const payload = JSON.stringify(requestBody);
const message = timestamp + payload;
const signature = crypto.createHmac('sha256', secretKey).update(message).digest('hex');
```

{% hint style="warning" %}
Always keep your API key and secret key secure. Never expose them in client-side code or public repositories.
{% endhint %}

### **Example 1: GET Method API without Body Payload.**

Let see the example of "userInfo" API endpoint.

{% tabs %}
{% tab title="Javascript" %}

```javascript
// Generate HMAC signature from timestamp + body //
const crypto = require('crypto');
const axios = require("axios");

const APIKEY = ''; // your api key
const SECRETKEY = ''; // you api secret key 

function generateHmacSignature(timestamp, body, secretkey) {
  const bodyString = JSON.stringify(body);
  const data = timestamp + bodyString;
  return crypto
    .createHmac('sha256', secretkey)
    .update(data)
    .digest('hex');
}

const timestamp = Date.now().toString();
const apiEndpoint = 'https://api-testnet.plyr.network/api';
const searchText = 'cyptofennec'; // PLYR[ID]
let hmac = generateHmacSignature(timestamp, {}, SECRETKEY); // If API required body payload (POST method) just pass the object //
let ret = await axios.get(
            apiEndpoint + "/api/user/info/" + searchTxt + '/',
            {
                headers: {
                    apikey: APIKEY,
                    signature: hmac,
                    timestamp: timestamp,
                },
            }
        );
console.log("ret data",ret.data);
```

{% endtab %}

{% tab title="Result" %}

```json
{
  plyrId: "cyptofennec",
  mirrorAddress: "0x4eaf4CE71c42758b2D4B4C23E543e1D98c8dE9C6",
  primaryAddress: "0x6Ab499c8E2f3CBc9C99034b6e2912149212bE770",
  chainId: 62831,
  avatar: "https://ipfs.plyr.network/ipfs/QmfMhXz8vqBDMHVVstnK8tykmhAN6oXv5xZunC3SXR1NWL",
  createdAt: "2024-08-05T12:48:30.429Z",
  ippClaimed: false,
  isIPP: false
}
```

{% endtab %}
{% endtabs %}

### **Example 2: POST Method API with Body Payload.**

Let see the example of "getAvatars" API endpoint.

{% tabs %}
{% tab title="Javascript" %}

```javascript
// Generate HMAC signature from timestamp + body //
const crypto = require('crypto');
const axios = require("axios");

const APIKEY = ''; // your api key
const SECRETKEY = ''; // you api secret key 

function generateHmacSignature(timestamp, body, secretkey) {
  const bodyString = JSON.stringify(body);
  const data = timestamp + bodyString;
  return crypto
    .createHmac('sha256', secretkey)
    .update(data)
    .digest('hex');
}

const timestamp = Date.now().toString();
const apiEndpoint = 'https://api-testnet.plyr.network/api';
let body = {
    plyrIds: ['fennec2', 'cyptofennec']
}
let hmac = generateHmacSignature(timestamp, body, SECRETKEY);
let ret = await axios.post(
            apiEndpoint + "/api/user/avatars",
            body,
            {
                headers: {
                    apikey: APIKEY,
                    signature: hmac,
                    timestamp: timestamp,
                },
            }
        );
console.log("ret data",ret.data);
```

{% endtab %}

{% tab title="Result" %}

```json
{
  avatars: [
    {
      plyrId: "cyptofennec",
      avatar: "https://ipfs.plyr.network/ipfs/QmfMhXz8vqBDMHVVstnK8tykmhAN6oXv5xZunC3SXR1NWL"
    },
    {
      plyrId: "fennec2",
      avatar: "https://ipfs.plyr.network/ipfs/QmYHv8HJ6SDGbGkMDwfVfXehpNNGvPrB8W2dXnd26CpPYL"
    }
  ]
}
```

{% endtab %}
{% endtabs %}
