# Welcome!

## How to Sell TPAs on Your Website Using StageMeta API

This document provides a step-by-step guide on how to sell Teleport Plaque Address (TPAs) on your website using StageMeta API. With StageMeta API, you can integrate the functionality of the StageMeta marketplace into your website, allowing users to buy and sell TPAs directly on your platform.

We will cover the technical aspects of the process, including how to set up the API and authenticate user requests, as well as how to look up, prepare, and buy TPAs. You will also learn how to check the availability of a username before minting a TPA, ensuring that your users can create unique and valuable digital assets.

By following the instructions in this guide, you can easily integrate the power of StageMeta into your website and offer your users a seamless and secure way to buy and sell TPAs. Whether you are a developer looking to build a custom marketplace or a non-technical user looking to add a new revenue stream to your website, this guide will provide you with the knowledge and tools you need to get started.

### Four Easy Steps to Sell TPAs on Your Website Using StageMeta Rest API

This document provides a clear and concise guide on the four easy steps to sell Third Party Applications (TPAs) on your website using StageMeta API. With this API, you can seamlessly integrate the functionality of the StageMeta marketplace into your website and offer your users a secure and reliable way to buy and sell TPAs.

{% content-ref url="/pages/s18yNErIlMiFubmx9dTm" %}
[Quick Start](/quick-start)
{% endcontent-ref %}

## Want to deep dive?

Dive a little deeper and start exploring our API reference to get an idea of everything that's possible with the API:

{% content-ref url="/pages/t9ifqyNFWCcn1fmBWDbq" %}
[API Reference](/reference/api-reference)
{% endcontent-ref %}


# Quick Start

### Four Easy Steps to Sell TPAs on Your Website Using StageMeta REST API

* Lookup API: Use the Lookup API to check the availability of a specific TPA. This step ensures that the TPA you are trying to sell has a unique identifier and can be minted without any errors.
* Prepare API: Use the Prepare API to format the TPA data before sending it to the blockchain. This step ensures that the TPA data is properly formatted and ready for the blockchain.

You can generate an API key from your Dashboard at any time.

* Owner Username API: Use the Owner Username API to get the owner of the TPA. This step is essential to ensure that the TPA has a valid username and is eligible for Meta energy.
* Buy API: Use the Buy API to purchase the TPA and send it to the buyer's wallet. This step completes the transaction and ensures that the buyer receives the TPA they purchased.

### **Base URL in all API calls**

Production Version:

> `https://api.stagemeta.world`

Staging (Test) Version:&#x20;

> `https://api.stagemeta.dev`

{% hint style="warning" %}
**Good to know:** For using the staging environment you have to switch your wallet to goerli test network.
{% endhint %}

## Make your first request

To make your first request, send an authenticated request to the pets endpoint. This will create a `pet`, which is nice.

## Featured Plaques list

<mark style="color:green;">`POST`</mark> `https://api.stagemeta.dev/plaques/featured`

Get the list of featured plaques.

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

```javascript
{
  "count": 20,
  "plaques": [
    {
      "id": 1000,
      "createdAt": "2023-03-28T15:06:27.483Z",
      "updatedAt": "2023-03-29T10:11:25.086Z",
      "deletedAt": null,
      "name": "tpa-000",
      "alphabetPart": "tpa",
      "numberPart": "000",
      "image": "https://cdn.stagemeta.world/palques/tpa-000.jpg",
      "price": 0,
      "currency": "ETH",
      "marketplace": "stage",
      "tokenId": null,
      "mappedPlaqueId": null,
      "contractAddress": "0x000000000000000000000000000000000000000",
      "featured": true,
      "description": "",
      "standard": "ERC-1155",
      "metadata": null,
      "building_id": null,
      "wallet_address": null,
      "condition": "VIRGIN",
      "assignAt": null,
      "saleAt": null,
      "featuredAt": "2023-03-28T15:06:27.481Z",
      "mintedAt": null,
      "status": "AVAILABLE",
      "minted": false,
      "token_id": null
    }
  ],
  
}
```

{% endtab %}
{% endtabs %}

Take a look at what you might call this method:

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

```
curl -X 'GET' \ 'https://api.stagemeta.world/plaques/featured' \ -H 'accept: */*'
```

{% endtab %}

{% tab title="Node" %}

```javascript
fetch('https://api.stagemeta.world/plaques/featured', {
  method: 'GET',
  headers: {
    'accept': '*/*'
  }
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
```

{% endtab %}
{% endtabs %}


# API Reference

## Plaque Lookup API

The Plaque Lookup API allows you to check if a plaque is available or already sold on the blockchain. This API provides information about the plaque price, status, and other important details to help you make an informed decision when selling plaque

{% content-ref url="/pages/FLBAcAFvWZ34TwmOVkQz" %}
[Plaque Lookup API](/reference/api-reference/plaque-lookup-api)
{% endcontent-ref %}

## Plaque Prepare API

The Stagemeta Plaques Prepare API allows developers to prepare a plaque to be minted on the Stagemeta blockchain. This API generates the metadata necessary for the plaque to be minted and provides information on pricing, energy usage, and more. This document will provide information on how to use the Stagemeta Plaques Prepare API, including details on the request, response, and errors. to users:

{% content-ref url="/pages/tl69iNpnbufIrDNhyF1D" %}
[Plaques Prepare API](/reference/api-reference/plaques-prepare-api)
{% endcontent-ref %}

## Owner Username API

The Owner Username API is used to retrieve the username of the owner of a particular plaque.

{% content-ref url="/pages/0L2ueUtYvN6KEJpsAIdM" %}
[Owner Username API](/reference/api-reference/owner-username-api)
{% endcontent-ref %}

## Featured Plaques API

This API endpoint allows users to retrieve a list of all featured plaques. Featured plaques are those that have been selected by our team to be highlighted and promoted on our platform.

{% content-ref url="/pages/CTZPL0x1H9npRjyKv6B4" %}
[Featured Plaques API](/reference/api-reference/featured-plaques-api)
{% endcontent-ref %}

## Latest Contract API

The Contract API is used to retrieve the latest deployed version of the Stagemeta contract. This API provides a JSON response containing the contract's address and ABI.

{% content-ref url="/pages/bfH6xbx4cAsPKaGzjzHa" %}
[Latest contract API](/reference/api-reference/latest-contract-api)
{% endcontent-ref %}

## Plaques List API

The Stagemeta plaques API allows developers to retrieve information about unique Metaverse Teleport plaques. This includes details about the plaque such as its ID, name, status, condition, and sale information. The API also allows developers to filter and sort the results based on various criteria, such as the plaque's condition, marketplace, status, and featured status.

{% content-ref url="/pages/Adh1AR0EFYkQlpN1vY8B" %}
[Plaques List API](/reference/api-reference/plaques-list-api)
{% endcontent-ref %}

## Buy Plaque API

The Buy Plaque API allows a user to buy a plaque by providing payment information and personal details. The API uses the HTTP POST method to send a request to the server and HTTP response codes to return the status of the request.

{% content-ref url="/pages/qUD7rPJjobEp9tCwPKBZ" %}
[Buy Plaque API](/reference/api-reference/buy-plaque-api)
{% endcontent-ref %}

## Stage Wallet Authentication API

The Stage Wallet Authentication API allows a user to sign in or sign in without any third-party wallet like meta mask, by signing up with this API we create a wallet on the eth network for you.

{% content-ref url="/pages/gYogUELK0BOOOZfhPjpB" %}
[Stage Wallet Authentication API](/reference/api-reference/stage-wallet-authentication-api)
{% endcontent-ref %}

## Email Verification API

The Email Verification API allows a user to verify his own email address and get an authentication token to sign in.&#x20;

{% content-ref url="/pages/tLAGUHQUWgx4Xbfx5m5J" %}
[Email Verification API](/reference/api-reference/email-verification-api)
{% endcontent-ref %}

## Orders Statistics API

The Orders Statistics API allows you to retrieve information about plaques sold within a specific time range. This API is accessible via an HTTP GET request and requires the `from` and `to` parameters to specify the date range.

{% content-ref url="/pages/YyVsEFt9XHTMAbEY1l7Y" %}
[Orders Statistics API](/reference/api-reference/orders-statistics-api)
{% endcontent-ref %}

## Request For Private Key API

This Request allows users to get an email two-factor code for getting their own private key.

{% content-ref url="/pages/pq7mlhbF4G5tu46HDUMY" %}
[Request For Private Key API](/reference/api-reference/request-for-private-key-api)
{% endcontent-ref %}

## Private Key API

This Request will return users their own private key to import or buy with a stage wallet account.

{% content-ref url="/pages/Z6ALiMCMgMoxj25M2klE" %}
[Private Key API](/reference/api-reference/private-key-api)
{% endcontent-ref %}

## User Profile API

The API endpoint is used for retrieving and updating user profiles on the Stagemeta platform. The HTTP GET request retrieves the profile of the currently authenticated user by providing an access token in the Authorization header. The response body contains a JSON object with the user's profile data. The HTTP POST request updates the user's profile with the provided information. The request body contains multipart form data including the new username, password, phone number, and an optional image encoded in base64. The response body contains a JSON object with the updated user profile data as well as a new access token if the authorization token has expired or been refreshed. Both requests require a valid access token for authentication.

{% content-ref url="/pages/zcphvp6Tn7GkVHBF3NzJ" %}
[User Profile API](/reference/api-reference/user-profile-api)
{% endcontent-ref %}


# Plaque Lookup API

The Plaque Lookup API allows you to check if a plaque is available or already sold on the blockchain. This API provides information about the plaque price, status, and other important details to help you make an informed decision when selling plaque

### Plaque Lookup API

<mark style="color:blue;">`GET`</mark> `https://api.stagemeta.dev/plaques/lookup`

#### Query Parameters

| Name                                   | Type      | Description  |
| -------------------------------------- | --------- | ------------ |
| name<mark style="color:red;">\*</mark> | \[String] | Plaque Names |

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

```javascript
[
  {
    "price": "57589090322729260",
    "priceEth": "0.05758909032272926",
    "priceUsd": "102.201631",
    "currency": "ETH",
    "description": "Purchase a unique Metaverse Teleport plaque address that is a new and innovative way to 		  represent real-world objects with outstanding value in Metaverse. Metaverse plaque owners can assign to a thriving land in our Metaverse to create a fully functional business.",
    "status": "AVAILABLE",
    "name": "nyc-000",
    "image": null,
   .
   .
   .
  },
  {
    "price": "0",
    "priceEth": "0",
    "priceUsd": "0.000000",
    "currency": "ETH",
    "description": "Purchase a unique Metaverse Teleport plaque address that is a new and innovative way to represent real-world objects with outstanding value in Metaverse. Metaverse plaque owners can assign to a thriving land in our Metaverse to create a fully functional business.",
    "status": "SOLD",
    "name": "uae-000",
    "image": "https://cdn.stagemeta.world/palques/UAE-000.jpg",
    .
    .
    .
  }
]
```

{% endtab %}
{% endtabs %}

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

```bash
curl -X 'GET'  
'[https://api.stagemeta.dev/plaques/lookup?name=nyc-000&name=uae-000
-H 'accept: application/json'
```

{% endtab %}

{% tab title="Node" %}
{% code overflow="wrap" %}

```javascript
fetch('https://api.stagemeta.world/plaques/lookup?name=nyc-000&name=uae-000', {
  headers: {
    'Accept': 'application/json'
  }
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
```

{% endcode %}
{% endtab %}
{% endtabs %}


# Plaques Prepare API

The Stagemeta Plaques Prepare API allows developers to prepare a plaque to be minted on the Stagemeta blockchain. This API generates the metadata necessary for the plaque to be minted and provides information on pricing, energy usage, and more. This document will provide information on how to use the Stagemeta Plaques Prepare API, including details on the request, response, and errors.

### Plaque Lookup API

<mark style="color:blue;">`GET`</mark> `https://api.stagemeta.dev/plaques/prepare/{plaqueName}`

#### Path Parameters

| Name                                         | Type   | Description    |
| -------------------------------------------- | ------ | -------------- |
| plaqueName<mark style="color:red;">\*</mark> | String | Name of plaque |

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

```javascript
[
  {
    "price": "57589090322729260",
    "priceEth": "0.05758909032272926",
    "priceUsd": "102.201631",
    "currency": "ETH",
    "description": "Purchase a unique Metaverse Teleport plaque address that is a new and innovative way to 		  represent real-world objects with outstanding value in Metaverse. Metaverse plaque owners can assign to a thriving land in our Metaverse to create a fully functional business.",
    "status": "AVAILABLE",
    "name": "nyc-000",
    "image": null,
   .
   .
   .
  },
  {
    "price": "0",
    "priceEth": "0",
    "priceUsd": "0.000000",
    "currency": "ETH",
    "description": "Purchase a unique Metaverse Teleport plaque address that is a new and innovative way to represent real-world objects with outstanding value in Metaverse. Metaverse plaque owners can assign to a thriving land in our Metaverse to create a fully functional business.",
    "status": "SOLD",
    "name": "uae-000",
    "image": "https://cdn.stagemeta.world/palques/UAE-000.jpg",
    .
    .
    .
  }
]
```

{% endtab %}

{% tab title="500: Internal Server Error There was an error in preparing the plaque. Please contact Stagemeta support." %}

{% endtab %}

{% tab title="401: Unauthorized The access token provided in the Authorization header is invalid." %}

{% endtab %}

{% tab title="404: Not Found The plaque specified in the endpoint does not exist" %}

{% endtab %}
{% endtabs %}

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

```bash
curl -X 'GET'  
'[https://api.stagemeta.dev/plaques/lookup?name=nyc-000&name=uae-000
-H 'accept: application/json'
```

{% endtab %}

{% tab title="Node" %}
{% code overflow="wrap" %}

```javascript
fetch('https://api.stagemeta.dev/plaques/prepare/tpa-000', {
  method: 'POST',
  headers: {
    'accept': '*/*',
    'Authorization': 'Bearer ACCESS_TOKEN'
  },
})
  .then(response => {
    console.log(response);
    // handle response
  })
  .catch(error => console.error(error));
```

{% endcode %}
{% endtab %}
{% endtabs %}


# Owner Username API

The Owner Username API is used to retrieve the username of the owner of a particular plaque.

### Owner Username API

<mark style="color:blue;">`GET`</mark> `https://api.stagemeta.dev/plaques/owner-username`

#### Query Parameters

| Name | Type      | Description  |
| ---- | --------- | ------------ |
| name | \[String] | plaque names |

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

```javascript
{
  "image": "https://cdn.stagemeta.dev/palques/TPA-000.jpg",
  "metadata": "https://api.stagemeta.world/plaques/tpa-000/metadata.json",
  "price": "57589090322729260",
  "priceUsdt": "102.598996",
  "method": "mintTransfer",
  "networkEnergyPercent": "50",
  "networkEnergyEth": "0.02879454516136463",
  "networkEnergyUsdt": "51.299498",
  "canGetDeltaEnergy": false
}
```

{% endtab %}

{% tab title="500: Internal Server Error There was an error in preparing the plaque. Please contact Stagemeta support." %}

{% endtab %}

{% tab title="401: Unauthorized The access token provided in the Authorization header is invalid." %}

{% endtab %}

{% tab title="404: Not Found The plaque specified in the endpoint does not exist" %}

{% endtab %}
{% endtabs %}

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

```bash
curl -X 'GET' \
  'https://api.stagemeta.dev/plaques/owner-username?name=nnn-000' \
  -H 'accept: */*'
```

{% endtab %}

{% tab title="Node" %}
{% code overflow="wrap" %}

```javascript
fetch('https://api.stagemeta.dev/plaques/owner-username?name=nnn-000', {
  headers: {
    'accept': '*/*'
  }
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error))
```

{% endcode %}
{% endtab %}
{% endtabs %}


# Featured Plaques API

This API endpoint allows users to retrieve a list of all featured plaques. Featured plaques are those that have been selected by our team to be highlighted and promoted on our platform.

### Featured Plaques API

<mark style="color:blue;">`GET`</mark> `https://api.stagemeta.dev/plaques/featured`

#### Query Parameters

| Name     | Type   | Description                                                                                                                                                                                                                                                  |
| -------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| skip     | Number |                                                                                                                                                                                                                                                              |
| limit    | Number |                                                                                                                                                                                                                                                              |
| orderBy  | String | `p.id`, `p.updated_at`, `p.updatedAt`, `p.status`, `p.sale_at`, `p.featured_at`, `p.minted_at`                                                                                                                                                               |
| filterBy | String | `p.updated_at`, `p.sale_at`, `p.featured_at`, `p.minted_at`                                                                                                                                                                                                  |
| sort     | String | `ASC`, `DESC`                                                                                                                                                                                                                                                |
| search   | String |                                                                                                                                                                                                                                                              |
| filters  | Object | *Example* : `{ "filters": { "condition": ["VIRGIN", "USED", "DAMAGED"], "marketplace": ["OPENSEA","STAGE"], "status": ["AVAILABLE", "SOLD", "MINTED", "LOCKED"], "featured": true, "from": "2022-03-13T22:25:30.475Z", "to": "2023-03-13T22:25:30.475Z" } }` |

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

```javascript
{
  "count": 20,
  "plaques": [
    {
      "id": 1000,
      "createdAt": "2023-03-28T15:06:27.483Z",
      "updatedAt": "2023-03-29T10:11:25.086Z",
      "deletedAt": null,
      "name": "tpa-000",
      "alphabetPart": "tpa",
      "numberPart": "000",
      "image": "https://cdn.stagemeta.world/palques/tpa-000.jpg",
      "price": 0,
      "currency": "ETH",
      "marketplace": "stage",
      "tokenId": null,
      "mappedPlaqueId": null,
      "contractAddress": "0x000000000000000000000000000000000000000",
      "featured": true,
      "description": "",
      "standard": "ERC-1155",
      "metadata": null,
      "building_id": null,
      "wallet_address": null,
      "condition": "VIRGIN",
      "assignAt": null,
      "saleAt": null,
      "featuredAt": "2023-03-28T15:06:27.481Z",
      "mintedAt": null,
      "status": "AVAILABLE"
    },
    .
    .
    .
  ],
  
}
```

{% endtab %}

{% tab title="500: Internal Server Error There was an error in preparing the plaque. Please contact Stagemeta support." %}

{% endtab %}

{% tab title="401: Unauthorized The access token provided in the Authorization header is invalid." %}

{% endtab %}

{% tab title="404: Not Found The plaque specified in the endpoint does not exist" %}

{% endtab %}
{% endtabs %}

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

```bash
curl -X 'GET' \ 'https://api.stagemeta.dev/plaques/featured' \ -H 'accept: */*'
```

{% endtab %}

{% tab title="Node" %}
{% code overflow="wrap" %}

```javascript
fetch('https://api.stagemeta.dev/plaques/featured', {
  method: 'GET',
  headers: {
    'accept': '*/*'
  }
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
```

{% endcode %}
{% endtab %}
{% endtabs %}


# Latest contract API

The Contract API is used to retrieve the latest deployed version of the Stagemeta contract. This API provides a JSON response containing the contract's address and ABI.

### Latest contract API

<mark style="color:blue;">`GET`</mark> `https://api.stagemeta.dev/contracts/latest`

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

```javascript
{
  "id": 12,
  "createdAt": "2023-01-28T17:36:38.542Z",
  "updatedAt": "2023-01-28T17:36:38.542Z",
  "deletedAt": null,
  "version": "1.1.0",
  "address": "0x83dda28e561f84cffbf8faa74f99ec57ed5dd093",
  "status": "ACTIVE",
  "abiAddress": "https://cdn.stagemeta.world/contracts/1.1.1.json"
}
```

{% endtab %}

{% tab title="500: Internal Server Error There was an error in preparing the plaque. Please contact Stagemeta support." %}

{% endtab %}

{% tab title="401: Unauthorized The access token provided in the Authorization header is invalid." %}

{% endtab %}

{% tab title="404: Not Found The plaque specified in the endpoint does not exist" %}

{% endtab %}
{% endtabs %}

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

```bash
curl -X 'GET' \ 'https://api.stagemeta.dev/contracts/latest' \ -H 'accept: application/json'
```

{% endtab %}

{% tab title="Node" %}
{% code overflow="wrap" %}

```javascript
fetch('https://api.stagemeta.dev/contracts/latest', {
  method: 'GET',
  headers: {
    'accept': 'application/json'
  }
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error))

```

{% endcode %}
{% endtab %}
{% endtabs %}


# Plaques List API

The Stagemeta plaques API allows developers to retrieve information about unique Metaverse Teleport plaques. This includes details about the plaque such as its ID, name, status, condition, and sale information. The API also allows developers to filter and sort the results based on various criteria, such as the plaque's condition, marketplace, status, and featured status.

### Plaques List API

<mark style="color:blue;">`GET`</mark> `https://api.stagemeta.dev/plaques`

#### Query Parameters

| Name     | Type   | Description                                                                                                                                                                                                                                                  |
| -------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| filters  | Object | *Example* : `{ "filters": { "condition": ["VIRGIN", "USED", "DAMAGED"], "marketplace": ["OPENSEA","STAGE"], "status": ["AVAILABLE", "SOLD", "MINTED", "LOCKED"], "featured": true, "from": "2022-03-13T22:25:30.475Z", "to": "2023-03-13T22:25:30.475Z" } }` |
| orderBy  | String | `p.updated_at`, `p.updatedAt`, `p.status`, `p.sale_at`, `p.featured_at`, `p.minted_at`                                                                                                                                                                       |
| filterBy | String | `p.updated_at`, `p.sale_at`, `p.featured_at`,`p.minted_at`                                                                                                                                                                                                   |
| skip     | Number | `ASC`, `DESC`                                                                                                                                                                                                                                                |
| limit    | Number |                                                                                                                                                                                                                                                              |
| sort     | String |                                                                                                                                                                                                                                                              |
| search   | String |                                                                                                                                                                                                                                                              |

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

```javascript
{
  "id": 12,
  "createdAt": "2023-01-28T17:36:38.542Z",
  "updatedAt": "2023-01-28T17:36:38.542Z",
  "deletedAt": null,
  "version": "1.1.0",
  "address": "0x83dda28e561f84cffbf8faa74f99ec57ed5dd093",
  "status": "ACTIVE",
  "abiAddress": "https://cdn.stagemeta.world/contracts/1.1.1.json"
}
```

{% endtab %}

{% tab title="500: Internal Server Error There was an error in preparing the plaque. Please contact Stagemeta support." %}

{% endtab %}

{% tab title="401: Unauthorized The access token provided in the Authorization header is invalid." %}

{% endtab %}

{% tab title="404: Not Found The plaque specified in the endpoint does not exist" %}

{% endtab %}
{% endtabs %}

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

```bash
curl -X 'GET' \
  'https://api.stagemeta.dev/plaques?filters[condition]=VIRGIN&filters[condition]=USED&filters[condition]=DAMAGED&filters[marketplace]=OPENSEA&filters[marketplace]=STAGE&filters[status]=AVAILABLE&filters[status]=SOLD&filters[status]=MINTED&filters[status]=LOCKED&filters[featured]=true&filters[from]=2022-03-13T22:25:30.475Z&filters[to]=2023-03-13T22:25:30.475Z&orderBy=p.id&filterBy=p.updated_at' \
  -H 'accept: application/json'
```

{% endtab %}

{% tab title="Node" %}
{% code overflow="wrap" %}

```javascript
fetch('https://api.stagemeta.dev/plaques?filters[condition]=VIRGIN&filters[condition]=USED&filters[condition]=DAMAGED&filters[marketplace]=OPENSEA&filters[marketplace]=STAGE&filters[status]=AVAILABLE&filters[status]=SOLD&filters[status]=MINTED&filters[status]=LOCKED&filters[featured]=true&filters[from]=2022-03-13T22:25:30.475Z&filters[to]=2023-03-13T22:25:30.475Z&orderBy=p.id&filterBy=p.updated_at', {
  headers: {
    'Accept': 'application/json'
  }
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
```

{% endcode %}
{% endtab %}
{% endtabs %}


# Buy Plaque API

The Buy Plaque API allows a user to buy a plaque by providing payment information and personal details. The API uses the HTTP POST method to send a request to the server and HTTP response codes to return the status of the request.

### Buy Plaque API

<mark style="color:green;">`POST`</mark> `https://api.stagemeta.dev/plaques/buy`

#### Headers

| Name          | Type   | Description           |
| ------------- | ------ | --------------------- |
| Authorization | String | `Bearer ACCESS_TOKEN` |

#### Request Body

| Name                                            | Type      | Description |
| ----------------------------------------------- | --------- | ----------- |
| names<mark style="color:red;">\*</mark>         | \[String] |             |
| card\_number<mark style="color:red;">\*</mark>  | String    |             |
| expire\_month<mark style="color:red;">\*</mark> | Number    |             |
| expire\_year<mark style="color:red;">\*</mark>  | Number    |             |
| cvv<mark style="color:red;">\*</mark>           | String    |             |
| country<mark style="color:red;">\*</mark>       | String    |             |
| city<mark style="color:red;">\*</mark>          | String    |             |
| state<mark style="color:red;">\*</mark>         | String    |             |
| postal\_code<mark style="color:red;">\*</mark>  | String    |             |
| first\_name<mark style="color:red;">\*</mark>   | String    |             |
| last\_name<mark style="color:red;">\*</mark>    | String    |             |
| line1<mark style="color:red;">\*</mark>         | String    |             |
| line2                                           | String    |             |
| username                                        | String    |             |
| email                                           | String    |             |
| walletAddress                                   | String    |             |

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

```javascript
{
  "hash": "0x0000000000000000000000000000000000000000000000000"
}
```

{% endtab %}

{% tab title="500: Internal Server Error There was an error in preparing the plaque. Please contact Stagemeta support." %}

{% endtab %}

{% tab title="401: Unauthorized The access token provided in the Authorization header is invalid." %}

{% endtab %}

{% tab title="404: Not Found The plaque specified in the endpoint does not exist" %}

{% endtab %}
{% endtabs %}

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

```bash
curl -X 'POST' \
  'https://api.stagemeta.dev/plaques/buy' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
  "names": [
    "TPA-000"
  ],
  "card_number": "1234567890123456",
  "expire_month": 10,
  "expire_year": 25,
  "cvv": "123",
  "country": "US",
  "city": "New York",
  "state": "NY",
  "postal_code": "10001",
  "first_name": "John",
  "last_name": "Doe",
  "line1": "123 Main St.",
  "line2": "",
  "username": "johndoe",
  "email": "johndoe@example.com",
  "walletAddress": "0x1234567890abcdef"
}'
```

{% endtab %}

{% tab title="Node" %}
{% code overflow="wrap" %}

```javascript
fetch('https://api.stagemeta.dev/plaques/buy', {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Authorization': 'Bearer ACCESS_TOKEN',
    'Content-Type': 'application/json'
  },
  body:{
    "names": [
      "TPA-000"
    ],
    "card_number": "1234567890123456",
    "expire_month": 10,
    "expire_year": 25,
    "cvv": "123",
    "country": "US",
    "city": "New York",
    "state": "NY",
    "postal_code": "10001",
    "first_name": "John",
    "last_name": "Doe",
    "line1": "123 Main St.",
    "line2": "",
    "username": "johndoe",
    "email": "johndoe@example.com",
    "walletAddress": "0x1234567890abcdef"
  }
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
```

{% endcode %}
{% endtab %}
{% endtabs %}


# Stage Wallet Authentication API

The Stage Wallet Authentication API allows a user to sign in or sign in without any third-party wallet like meta mask, by signing up with this API we create a wallet on the eth network for you.

after calling this API you got an email with a verification code.

### Buy Plaque API

<mark style="color:green;">`POST`</mark> `https://api.stagemeta.dev/auth/stage-wallet`

#### Request Body

| Name  | Type   | Description |
| ----- | ------ | ----------- |
| email | String |             |

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

```javascript
{
  "result": true
}
```

{% endtab %}

{% tab title="500: Internal Server Error There was an error in preparing the plaque. Please contact Stagemeta support." %}

{% endtab %}

{% tab title="401: Unauthorized The access token provided in the Authorization header is invalid." %}

{% endtab %}

{% tab title="404: Not Found The plaque specified in the endpoint does not exist" %}

{% endtab %}
{% endtabs %}

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

```bash
curl -X 'POST' \
  'https://api.stagemeta.dev/auth/stage-wallet' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -d '{
  "email": "johndoe@example.com"
}'
```

{% endtab %}

{% tab title="Node" %}
{% code overflow="wrap" %}

```javascript
fetch('https://api.stagemeta.dev/auth/stage-wallet', {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  body:{
    "email": "johndoe@example.com"
  }
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
```

{% endcode %}
{% endtab %}
{% endtabs %}


# Email Verification API

The Email Verification API allows a user to verify his own email address and get an authentication token to sign in.&#x20;

### Buy Plaque API

<mark style="color:blue;">`GET`</mark> `https://api.stagemeta.dev/auth/evaluate-email-verification-code`

#### Query Parameters

| Name                                    | Type   | Description |
| --------------------------------------- | ------ | ----------- |
| email<mark style="color:red;">\*</mark> | String |             |
| code<mark style="color:red;">\*</mark>  | Number |             |

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

```javascript
{
  "user": {
    "id": 1,
    "createdAt": "2023-04-09T07:32:30.207Z",
    "updatedAt": "2023-04-11T13:54:13.299Z",
    "deletedAt": null,
    "email": "johndoe@example.com",
    "username": "johndoe",
    "image": null,
    "walletAddress": "edj8********************d7",
    "receiveEmail": true,
    "canGetDeltaEnergy": false,
    "emailVerify": true,
    "emailVerificationCodeExpireTime": "2023-04-15T13:47:54.603Z",
    "access": [],
    "stripeCustomerId": null,
    "totalEnergyReceived": 0,
    "totalPings": 0,
    "isStageWallet": true
  },
  "token": "eyJhbGciOi*****************************************NaHZ8DXCIacgA"
}
```

{% endtab %}

{% tab title="500: Internal Server Error There was an error in preparing the plaque. Please contact Stagemeta support." %}

{% endtab %}

{% tab title="401: Unauthorized The access token provided in the Authorization header is invalid." %}

{% endtab %}

{% tab title="404: Not Found The plaque specified in the endpoint does not exist" %}

{% endtab %}
{% endtabs %}

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

```bash
curl -X 'GET' \
  'https://api.stagemeta.dev/auth/evaluate-email-verification-code?email=johndoe@example.com&code=12345' \
  -H 'accept: */*'
```

{% endtab %}

{% tab title="Node" %}
{% code overflow="wrap" %}

```javascript
fetch('https://api.stagemeta.dev/auth/evaluate-email-verification-code?email=johndoe@example.com&code=72732', {
  method: 'GEt',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  }
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
```

{% endcode %}
{% endtab %}
{% endtabs %}


# Request For Private Key API

This Request allows users to get an email two-factor code for getting their own private key.

### Request For Private Key API

<mark style="color:blue;">`GET`</mark> `https://api.stagemeta.dev/metamask/request/private-key`

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

```javascript
{
  "id": 1,
  "createdAt": "2023-04-09T07:32:30.207Z",
  "updatedAt": "2023-04-15T17:38:33.396Z",
  "deletedAt": null,
  "email": "john@doe.com",
  "username": "johndoe",
  "image": null,
  "walletAddress": "0x8******************bd290",
  "receiveEmail": true,
  "canGetDeltaEnergy": false,
  "emailVerify": true,
  "emailVerificationCodeExpireTime": "2023-04-19T17:38:33.392Z",
  "access": [],
  "stripeCustomerId": "***",
  "totalEnergyReceived": 0,
  "totalPings": 0,
  "isStageWallet": true
}
```

{% endtab %}

{% tab title="500: Internal Server Error There was an error in preparing the plaque. Please contact Stagemeta support." %}

{% endtab %}

{% tab title="401: Unauthorized The access token provided in the Authorization header is invalid." %}

{% endtab %}

{% tab title="404: Not Found The plaque specified in the endpoint does not exist" %}

{% endtab %}
{% endtabs %}

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

```bash
curl -X 'GET' \
  'https://api.stagemeta.dev/metamask/request/private-key' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MzE4LCJpYXQiOjE2ODE1NzkzODN9.IVwG13FW0sF8XicJJh8W7yMOxKp5Zhsyazju1qVLI04'
```

{% endtab %}

{% tab title="Node" %}
{% code overflow="wrap" %}

```javascript
fetch('https://api.stagemeta.dev/metamask/request/private-key', {
  method: 'GET',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  }
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
```

{% endcode %}
{% endtab %}
{% endtabs %}


# Private Key API

This Request will return users their own private key to import or buy with a stage wallet account.

### Private Key API

<mark style="color:blue;">`GET`</mark> `https://api.stagemeta.dev/metamask/private-key`

#### Query Parameters

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

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

```javascript
0x9eab47a9a****************6800a7
```

{% endtab %}

{% tab title="500: Internal Server Error There was an error in preparing the plaque. Please contact Stagemeta support." %}

{% endtab %}

{% tab title="401: Unauthorized The access token provided in the Authorization header is invalid." %}

{% endtab %}

{% tab title="404: Not Found The plaque specified in the endpoint does not exist" %}

{% endtab %}
{% endtabs %}

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

```bash
curl -X 'GET' \
  'https://api.stagemeta.dev/metamask/private-key?code=123' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MzE4LCJpYXQiOjE2ODE1NzkzODN9.IVwG13FW0sF8XicJJh8W7yMOxKp5Zhsyazju1qVLI04'
```

{% endtab %}

{% tab title="Node" %}
{% code overflow="wrap" %}

```javascript
fetch('https://api.stagemeta.dev/metamask/private-key?code=123', {
  method: 'GET',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  }
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
```

{% endcode %}
{% endtab %}
{% endtabs %}


# Orders Statistics API

## Overview

The Orders/Statistics/Plaques API allows you to retrieve information about plaques sold within a specific time range. This API is accessible via a GET request and requires the `from` and `to` parameters to specify the date range.

## Request

<mark style="color:blue;">`GET`</mark> `https://api.stagemeta.dev/orders/statistics/plaques`

#### Query Parameters

| Name | Type   | Description                                                            |
| ---- | ------ | ---------------------------------------------------------------------- |
| from | String | The start date of the time range to retrieve plaques from (YYYY-MM-DD) |
| to   | String | The end date of the time range to retrieve plaques from (YYYY-MM-DD)   |

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

```json
{
  "items": [{
    "id": 0,
    "ethPrice": "1.243223",
    "usdPrice": 1002,
    "metaEnergyPercent": 25,
    "tokenId": "32",
    "plaqueName": "aaa-000"
}],
  "count": 0
}
```

{% endtab %}

{% tab title="400: Bad Request 	 'from' and 'to' must be a valid ISO 8601 date string" %}

{% endtab %}

{% tab title="500: Internal Server Error " %}

{% endtab %}
{% endtabs %}

## Example Requests

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

```bash
curl -X 'GET' \
  'https://api.stagemeta.dev/orders/statistics/plaques?from=2022-01-01&to=2023-04-13' \
  -H 'accept: application/json'
```

{% endtab %}

{% tab title="Node" %}

```javascript
fetch('https://api.stagemeta.dev/orders/statistics/plaques?from=2022-01-01&to=2023-04-13', {
  headers: {
    'accept': 'application/json'
  }
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error))
```

{% endtab %}
{% endtabs %}


# User Profile API

## GET Profile data

This endpoint is used to retrieve user profile details. It requires a valid access token in the authorization header to retrieve the profile.

## HTTP Request

<mark style="color:blue;">`GET`</mark> `https://api.stagemeta.dev/auth/profile`

#### Headers

| Name                                             | Type   | Description                                             |
| ------------------------------------------------ | ------ | ------------------------------------------------------- |
| Authorization:<mark style="color:red;">\*</mark> | string | The user's access token in the format `Bearer <token>`. |

{% tabs %}
{% tab title="200: OK The request was successful and the response body contains the user profile details." %}

```json
{
  "id": 22,
  "createdAt": "2022-09-20T12:21:48.995Z",
  "updatedAt": "2023-04-18T16:09:29.327Z",
  "deletedAt": null,
  "email": "email@gmail.com",
  "username": "my-username",
  "image": "https://cdn.stagetry.dev/images/a6bbff20-3.....",
  "walletAddress": "0xf5ad068.....cc05c44c91",
  "receiveEmail": true,
  "canGetDeltaEnergy": false,
  "emailVerify": true,
  "emailVerificationCodeExpireTime": "2023-04-14T11:24:16.008Z",
  "access": [],
  "stripeCustomerId": "cus_...51V4..YyH",
  "totalEnergyReceived": 0,
  "totalPings": 0,
  "isStageWallet": false
}
```

{% endtab %}

{% tab title="401: Unauthorized  The request is not authorized because the provided access token is invalid or expired." %}

{% endtab %}
{% endtabs %}

## Example Request

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

```bash
curl -X 'GET' \
  'https://api.stagemeta.dev/auth/profile' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer <access_token>'
```

{% endtab %}

{% tab title="NodeJS" %}

```javascript
fetch('https://api.stagemeta.dev/auth/profile', {
  headers: {
    'Authorization': 'Bearer <access_token>',
    'Accept': 'application/json'
  }
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```

{% endtab %}
{% endtabs %}

## Post Profile data

This endpoint allows users to update their profile information.

## HTTP Post Request

<mark style="color:green;">`POST`</mark> `https://api.stagemeta.dev/auth/profile`

#### Headers

| Name                                            | Type   | Description                                             |
| ----------------------------------------------- | ------ | ------------------------------------------------------- |
| Authorization<mark style="color:red;">\*</mark> | string | The user's access token in the format `Bearer <token>`. |

#### Request Body

| Name        | Type   | Description               |
| ----------- | ------ | ------------------------- |
| image       | file   | The user's profile image. |
| username    | string | The user's username       |
| password    | string | The user's password.      |
| phoneNumber | string | The user's phone number.  |

{% tabs %}
{% tab title="201: Created " %}

```
{
  "user": {
    "id": 22,
    "createdAt": "2022-09-20T12:21:48.995Z",
    "updatedAt": "2023-04-18T16:09:29.327Z",
    "deletedAt": null,
    "email": "...@gmail.com",
    "username": "...",
    "image": "https://cdn.stagetry.dev/images/....png",
    "walletAddress": "0xf5ad068d....f37965cc05c44c91",
    "receiveEmail": true,
    "canGetDeltaEnergy": false,
    "emailVerify": true,
    "emailVerificationCodeExpireTime": "2023-04-14T11:24:16.008Z",
    "access": [],
    "stripeCustomerId": "cus_ND...V4cmYyH",
    "totalEnergyReceived": 0,
    "totalPings": 0,
    "isStageWallet": false
  },
  "token": "user-token"
}
```

{% endtab %}

{% tab title="401: Unauthorized The request was not authorized." %}

{% endtab %}

{% tab title="400: Bad Request " %}

{% endtab %}
{% endtabs %}

## Example Requests

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

```bash
curl -X 'POST' \
  'https://api.stagemeta.dev/auth/profile' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Content-Type: multipart/form-data' \
  -F 'username=newName' \
  -F 'password=password' \
  -F 'phoneNumber=1234567890' \
  -F 'image=base64 encoded image'
```

{% endtab %}

{% tab title="NodeJS" %}

```javascript
fetch('https://api.stagemeta.dev/auth/profile', {
  method: 'POST',
  headers: {
    'accept': '*/*',
    'Authorization': 'Bearer <access_token>',
    'Content-Type': 'multipart/form-data'
  },
  body: JSON.stringify({
    username: 'newName',
    password: 'password',
    phoneNumber: '1234567890',
    image: 'base64 encoded image'
  })
})
.then(response => {
  console.log(response.json());
})
.catch(err => {
  console.error(err);
});
```

{% endtab %}
{% endtabs %}


# Blockchain Smart-Contract

Stage Meta TPAs smart-contract public methods documentation:

{% hint style="success" %}
you can get our latest smart-contract details from [`Latest contract API`](/reference/api-reference/latest-contract-api).
{% endhint %}

## Plaque price method:

The `plaquePrice()` is a `public` method that allows users to get the current TPA price.

{% content-ref url="/pages/1IPFKesRpHmgyMlKfSB6" %}
[Plaque Price Method](/reference/blockchain-smart-contract/plaque-price-method)
{% endcontent-ref %}

## Check mintTransfer method:

The `checkMintTransfer()` is a `public` method that allows users to check whether the given TPA names are available for purchase or have already been minted. It takes two input parameters: `_names`, an array of `bytes32` representing the TPA names to be checked, and `_amounts`, an array of `uint32` representing the amount of TPAs to be checked.

{% content-ref url="/pages/LZd1ITw3jN1F773uoclY" %}
[Check mintTranfer Method](/reference/blockchain-smart-contract/check-minttranfer-method)
{% endcontent-ref %}

## MintTransfer method:

The `mintTransfer()` is a `payable` method that allows users to buy newly minted TPAs. To use this method, you need to send `plaquePrice * _names.length` amount of `value` in Wei to this transaction as TPAs price.

{% content-ref url="/pages/Oaz09GkYo7leW0Iw548U" %}
[MintTransfer method](/reference/blockchain-smart-contract/minttransfer-method)
{% endcontent-ref %}

## Token owners method:

The `tokenOwners()` is a `public` method that takes a plaque ID `_plaqueId` as input and returns an array of addresses of token owners who own the plaque with the given ID.

{% content-ref url="/pages/NZZ2MnRQqJXUWkrzCA6y" %}
[Token Owners Method](/reference/blockchain-smart-contract/token-owners-method)
{% endcontent-ref %}

{% hint style="info" %}
If you're using `typescript` code examples in methods page, before every example use this code here to prepare your provider to web3, ethereum wallet, smart-contract instance and abi.
{% endhint %}

<pre class="language-typescript"><code class="lang-typescript"><strong>import axios from "axios";
</strong>import { ethers, providers, utils } from "ethers";

const provider = new providers.WebSocketProvider(
    "wss://eth-sepolia.g.alchemy.com/v2/ATnZ4...." // provider
);

const signer = new ethers.Wallet(
  "aab5433a31f1bb3e...", // your ethereum wallet private key
  provider
);

const res = await axios.get(
  "https://cdn.stagemeta.dev/contracts/2.0.0.json" // StageMeta smart-contract contract abi
);
const abi = JSON.stringify(res.data);
const inter = new utils.Interface(abi);

const stageMetaContract = new ethers.Contract(
  "0x4b39ceb401769e3e...", // StageMeta smart-contract address
  abi,
  signer
);
</code></pre>


# Plaque Price Method

The `plaquePrice()` is a `public` method that allows users to get the current TPA price.

<pre class="language-solidity"><code class="lang-solidity"><strong>function plaquePrice() public view (uint256)
</strong></code></pre>

#### Input & Output

This method takes no input parameters. It returns a `uint256` value representing the current `TPA price` in wei.

#### Usage

To use this method in your web3 code, you can create a new instance of the StageMeta contract and call the `plaquePrice()` method like this:

```typescript
const tpaPriceWei = await stageMetaContract.plaquePrice()
console.log("TPA Price in eth:", utils.formatEther(tpaPriceWei));
```


# Check mintTranfer Method

The `checkMintTransfer()` is a `public` method that allows users to check whether the given TPA names are available for purchase or have already been minted. It takes two input parameters: `_names`, an array of `bytes32` representing the TPA names to be checked, and `_amounts`, an array of `uint32` representing the amount of TPAs to be checked.

```solidity
function checkMintTransfer(bytes32[] _names, uint32[] _amounts) public view returns(bool)
```

#### Input & Output

* `_names`: an array of `bytes32` representing the TPA names to be checked.
* `_amounts`: an array of `uint32` representing the amount of TPAs to be checked. The length of this array should be the same as the length of the `_names` array, and all elements should be set to 1.
* This function returns a boolean value indicating whether the given TPAs are available for purchase (`true`) or have already been minted (`false`).

#### Usage

&#x20;For example:

<pre class="language-typescript"><code class="lang-typescript"><strong>const result = await stageMetaContract.checkMintTransfer(
</strong><strong>  [
</strong><strong>    ethers.utils.formatBytes32String("aaa-000"),
</strong><strong>    ethers.utils.formatBytes32String("bbb-000")
</strong><strong>  ],
</strong><strong> [1, 1]);
</strong>console.log("check result:", result);
</code></pre>


# MintTransfer method

The `mintTransfer()` is a `payable` method that allows users to buy newly minted TPAs. To use this method, you need to send `plaquePrice * _names.length` amount of `value` in Wei to this transaction as TPAs price.

```solidity
function mintTransfer(bytes32[] _names, uint32[] _amounts, string _outputData) external payable
```

#### Input & Output

* `_names`: an array of `bytes32` representing the TPA names to be minted.
* `_amounts`: an array of `uint32` representing the amount of TPAs to be minted. The length of this array should be the same as the length of the `_names` array, and all elements should be set to 1.
* `_outputData`: a string representing the output data to be sent to us. It should be a JSON-encoded object with either a "username" or a "name" property. Recording the username or TPA name in the output data and pinging someone is optional. However, it's worth noting that to ping a TPA, the TPA owner must have registered their username on the platform. Additionally, you cannot use both the "username" and "name" properties simultaneously.
* This function doesn't return anything, only a transaction hash to follow your transaction with.

#### Usage

&#x20;To use this method, you can create a new instance of the StageMeta smart-contract and call the `mintTransfer()` method, like this:

<pre class="language-typescript"><code class="lang-typescript">const options = {
  value: ethers.utils.parseEther("0.06498719370006499"), // TPAs price
  gasLimit: 500000,
};

const mintTransferResult = await stageMetaContract.mintTransfer(
  [
    ethers.utils.formatBytes32String("aaa-888"),
<strong>    ethers.utils.formatBytes32String("aaa-999")
</strong>  ],
  [1, 1],
  JSON.stringify({
    name: 'aaa-000', //or username: 'stagemeta'
  }),
  options
);
console.log("mintTransferResult:", mintTransferResult);
</code></pre>


# Token Owners Method

The `tokenOwners()` is a `public` method that takes a plaque ID `_plaqueId` as input and returns an array of addresses of token owners who own the plaque with the given ID.

```solidity
function tokenOwners(uint32 _plaqueId) public view returns(address[] memory)
```

#### Input & Output

* `_plaqueId`: The ID of the plaque for which to retrieve the owners.
* `address[]`: An array of addresses representing the owners of the plaque with the given ID.

#### Usage

In the example below, the `tokenOwners` function is called with plaque ID `1234` and returns an array of addresses representing the owners of plaque ID `1234`.

```typescript
const result = await stageMetaContract.tokenOwners(1234);

console.log("TPA Owners:", result);
```


