# Token

## Resumo

Tokens são a representação de um ativo na rede blockchain, eles podem ser de diferentes tipos como Tokens Fungíveis (ERC20), Tokens Não Fungíveis (ERC721) e Tokens Semi Fungíveis (ERC1155)

> Tokens estão diretamente relacionados a Coleções, e podem ser operados em massa pelos endpoint da coleção a qual pertencem ou individualmente através dessa seção.

* Tokens Fungíveis são geralmente utilizados como moeda, ele é representado nessa API como um token único com *Total Supply* maior que zero.
* Tokens Não Fungíveis são popularmente conhecidos como NFTs, eles representam ativos únicos na rede blockchain e são representados nessa API como tokens únicos e com *Total Supply* **igual a 1**
* Tokens Semi Fungíveis representam ativos raros na rede blockchain, um Tokens Semi Fungível possui *Total Supply* maior que zero.

Diferentes tipos de tokens podem estar associados a diferentes tipos de benefícios, tokens fungíveis podem trazer benefícios de acordo com as configurações da empresa emissora, como por exemplo, oferecer benefícios para usuários que fizerem *hold* do token, ou podem ser usados como meio de precificação e pagamento de NFTs, que por sua vez podem ser combinados de diferentes formas e entregar beneficios diferentes dependendo da classificação de cada token.

**Gestão de tokens web3**

Os métodos web3 disponíveis nessa seção são os métodos mais comuns relacionados a um único token, se o métodos buscado não estiver disponível nessa seção ele poderá ser utilizados diretamente na Coleção.

Todas as operações Web3 são enviadas para uma fila e executadas de forma assíncrona.

### Objeto Token

<details>

<summary>Exemplo de Objeto de Token</summary>

```javascript
{
      "id": "j48arwr2q8wdsf",
      "tokenId": "1",
      "collectionId": "321",
      "name": "My Token",
      "supply": "10",
      "displayMediaUrl": "http://url.com/token.png",
      "displayMediaType": "image" | "video" | "gif",
      "metadata": {
        "en": {
          "mediaDescription": "Good Morning"
        },
        "pt": {
          "mediaDescription": "Bom dia"
        }
      },
      "owners": [
        {
          "userId": "rwet87fds15",
          "quantity": "3"
        },
        {
          "userId": "kyu871dtaw8s",
          "quantity": "1"
        },
      ],
      "tags": ["ambiental", "arte", "empreeendedorismo"],
      "transactionType": "sale" | "auction" | "airdrop",
      "sale": {
        "price": "12",
        "decimals": "2"
        "currency": "eth",
      },
      "auction": {
        "initialPrice": "100",
        "minIncreasePrice": "10",
        "decimals": "2",
        "currency": "eth"
      },
      "status": "private" | "public",
      "statusWeb3": "private" | "deployed"
}
```

</details>

### Endpoints

* **Tokens**

  * **GET** /v1/tokens/
  * **GET** /v1/tokens/:tokenId

* **Gestão de Tokens**

  * **GET** /v1/tokens/owned
  * **GET** /v1/tokens/manage
  * **GET** /v1/tokens/:tokenId/manage
  * **PATCH** /v1/tokens/:tokenId/manage

* **Gestão do token na web3**
  * **GET** /v1/tokend/:tokenId/manage/web3/ownerOf
  * **GET** /v1/tokend/:tokenId/manage/web3/ballanceOf/:address
  * **POST** /v1/tokend/:tokenId/manage/web3/mint
  * **POST** /v1/tokend/:tokenId/manage/web3/burn
  * **POST** /v1/tokend/:tokenId/manage/web3/transfer
  * **POST** /v1/tokend/:tokenId/manage/web3/transferFrom

### Tokens

## Lista os tokens públicos da plataforma

<mark style="color:blue;">`GET`</mark> `https://goblockchain.io/gotokens-api/v1/tokens`

Nível de permissionamento necessário: qualquer

#### Query Parameters

| Name         | Type   | Description                                    |
| ------------ | ------ | ---------------------------------------------- |
| limit        | String | Limite de resultados da busca                  |
| offset       | String | Quantidade de resultados para avançar da busca |
| communityId  | String | ID da Comunidade                               |
| companyId    | String | ID da Empresa                                  |
| collectionId | String | ID da Coleção                                  |
| currency     | String | Tipo de moeda utilizada                        |
| tags         | Array  | Tags do Token                                  |

{% tabs %}
{% tab title="200: OK " %}
{% tabs %}
{% tab title="Exemplo de Resposta" %}

```javascript
[
    {
      "id":"1"
      "tokenId": "123",
      "collectionId": "321",
      "transactionType": "sale",
      "name": "My E-sports Token 1",
      "sale": {
        "price": "12",
        "decimals": "2",
        "currency": "ETH"
      },
      "supply": "100",
      "tags": ["esportes"],
      "displayMediaType": "image",
      "displayMediaUrl": "https://placehold.it/300x300",
      "owners": [
        {
          "quantity": "2",
          "userId": "0242ac120002"
        }
      ],
    },
    {
      "id":"2"
      "tokenId": "456",
      "collectionId": "654",
      "transactionType": "airdrop",
      "name": "My E-sports Token 2",
      "supply": "500",
      "tags": ["esportes"],
      "displayMediaType": "image",
      "displayMediaUrl": "https://placehold.it/300x300",
      "owners": [
        {
          "quantity": "2",
          "userId": "bfb46d00-5ae3-11ed-9b6a-0242ac120002"
        }
      ],
   }
]
```

{% endtab %}

{% tab title="Campos da Resposta" %}

* **`id`** *- String*

  Identificador único de um Token no Banco de Dados.

* **`tokenId`** *- String*

  Identificador que guarda a referência ao ID do Token relativo ao seu contrato.

* **`collectionId`** *- String*

  Identificador que guarda a referência do ID da Coleção de Tokens em nosso Banco de Dados.

* **`name`***- String*

  Nome do Token em nosso Banco de Dados.

* **`transactionType`** - String

  Tipo de transação utilizada na negociação do Token.

* **`sale`** *- Object*

  Quando um Token é listado como do tipo *`sale`*, ele armazena seus dados de preço e moeda principal em um objeto específico.

  * **`price`** *- String*

    Valor relativo ao preço agregado à transação do Token, seja para uma operação de compra ou venda.
  * **`decimals`** *- String*

    Número de casas decimais que deve ser considerado em relação ao campo price.&#x20;
  * **`currency`** *- String*

    Nome da moeda utilizada para o pagamento da transação, podendo ser relativo à moedas tradicionais ou criptomoedas.

* **`auction`** *- Object*

  Quando um Token é listado como do tipo *`auction`*, ele armazena seus dados de preço inicial e moeda principal em um objeto específico.

  * **`initialPrice`** *- String*

    Valor relativo ao preço inicial de leilão agregado à transação do Token.
  * **`minIncreasePrice`** *- String*

    Valor relativo ao incremento mínimo de cada oferta de leilão de um Token.
  * **`decimals`** *- String*

    Número de casas decimais que deve ser considerado em relação aos campos anteriores.&#x20;
  * **`currency`** *- String*

    Nome da moeda utilizada para o pagamento da transação, podendo ser relativo à moedas tradicionais ou criptomoedas.

* **`supply`** - String

  Quantidade existente do Token.

* **`displayMediaType`** - String

  Tipo de mídia associada ao Token.

* **`displayMediaUrl`** - String

  Endereço da mídia relacionada ao Token.

* **`owners`** *- Array of Objects*

  Armazena todos os identificadores de donos do Token.

  * **`userId`** *- String*

    Identificador único relativo ao dono do Token em nosso Banco de Dados.
  * **`quantity`** *- String*

    Quantidade de unidades do Token que determinado dono possui.

* **`tags`** *- Array*

  Conjunto de tags do token.
  {% endtab %}
  {% endtabs %}
  {% endtab %}
  {% endtabs %}

## Exibe detalhes de tokens públicos

<mark style="color:blue;">`GET`</mark> `https://goblockchain.io/gotokens-api/v1/tokens/:tokenId`

Nível de permissionamento necessário: qualquer

#### Path Parameters

| Name                                      | Type   | Description |
| ----------------------------------------- | ------ | ----------- |
| tokenId<mark style="color:red;">\*</mark> | String | ID do token |

{% tabs %}
{% tab title="200: OK " %}
{% tabs %}
{% tab title="Exemplo de Resposta" %}

```javascript
{
    "id":"1"
    "tokenId": "123",
    "collectionId": "321",
    "transactionType": "sale",
    "name": "My E-sports Token 1",
    "sale": {
      "price": "12",
      "decimals": "2",
      "currency": "ETH"
    },
    "supply": "100",
    "tags": ["esportes"],
    "displayMediaType": "image",
    "displayMediaUrl": "https://placehold.it/300x300",
    "owners": [
      {
        "quantity": "2",
        "userId": "0242ac120002"
      }
  ],
}
```

{% endtab %}

{% tab title="Campos da Resposta" %}

* **`id`** *- String*

  Identificador único de um Token no Banco de Dados.

* **`tokenId`** *- String*

  Identificador que guarda a referência ao ID do Token relativo ao seu contrato.

* **`collectionId`** *- String*

  Identificador que guarda a referência do ID da Coleção de Tokens em nosso Banco de Dados.

* **`name`***- String*

  Nome do Token em nosso Banco de Dados.

* **`transactionType`** - String

  Tipo de transação utilizada na negociação do Token.

* **`sale`** *- Object*

  Quando um Token é listado como do tipo *`sale`*, ele armazena seus dados de preço e moeda principal em um objeto específico.

  * **`price`** *- String*

    Valor relativo ao preço agregado à transação do Token, seja para uma operação de compra ou venda.
  * **`decimals`** *- String*

    Número de casas decimais que deve ser considerado em relação ao campo price.&#x20;
  * **`currency`** *- String*

    Nome da moeda utilizada para o pagamento da transação, podendo ser relativo à moedas tradicionais ou criptomoedas.

* **`auction`** *- Object*

  Quando um Token é listado como do tipo *`auction`*, ele armazena seus dados de preço inicial e moeda principal em um objeto específico.

  * **`initialPrice`** *- String*

    Valor relativo ao preço inicial de leilão agregado à transação do Token.
  * **`minIncreasePrice`** *- String*

    Valor relativo ao incremento mínimo de cada oferta de leilão de um Token.
  * **`decimals`** *- String*

    Número de casas decimais que deve ser considerado em relação aos campos anteriores.&#x20;
  * **`currency`** *- String*

    Nome da moeda utilizada para o pagamento da transação, podendo ser relativo à moedas tradicionais ou criptomoedas.

* **`supply`** - String

  Quantidade existente do Token.

* **`displayMediaType`** - String

  Tipo de mídia associada ao Token.

* **`displayMediaUrl`** - String

  Endereço da mídia relacionada ao Token.

* **`owners`** *- Array of Objects*

  Armazena todos os identificadores de donos do Token.

  * **`userId`** *- String*

    Identificador único relativo ao dono do Token em nosso Banco de Dados.
  * **`quantity`** *- String*

    Quantidade de unidades do Token que determinado dono possui.

* **`tags`** *- Array*

  Conjunto de tags do token.
  {% endtab %}
  {% endtabs %}
  {% endtab %}
  {% endtabs %}

### Gestão de Tokens

## (JWT) Lista os tokens que o usuário logado possui

<mark style="color:blue;">`GET`</mark> `https://goblockchain.io/gotokens-api/v1/tokens/owned`

Nível de permissionamento necessário: `company_admin`, `company_moderator`, `community_admin`, `community_moderator`, `member`

#### Query Parameters

| Name         | Type   | Description                                    |
| ------------ | ------ | ---------------------------------------------- |
| limit        | String | Limite de resultados da busca                  |
| offset       | String | Quantidade de resultados para avançar da busca |
| communityId  | String | ID da Comunidade                               |
| companyId    | String | ID da Empresa                                  |
| collectionId | String | ID da Coleção                                  |
| tags         | Array  | Tags do Token                                  |

#### Headers

| Name                                            | Type   | Description |
| ----------------------------------------------- | ------ | ----------- |
| authorization<mark style="color:red;">\*</mark> | Bearer | JWT         |

{% tabs %}
{% tab title="200: OK " %}
{% tabs %}
{% tab title="Exemplo de Resposta" %}

```javascript
[
    {
      "id":"1"
      "tokenId": "123",
      "collectionId": "321",
      "transactionType": "sale",
      "name": "My E-sports Token 1",
      "sale": {
        "price": "12",
        "decimals": "2",
        "currency": "ETH"
      },
      "supply": "100",
      "tags": ["esportes"],
      "displayMediaType": "image",
      "displayMediaUrl": "https://placehold.it/300x300",
      "owners": [
        {
          "quantity": "2",
          "userId": "0242ac120002"
        }
      ],
    },
    {
      "id":"2"
      "tokenId": "456",
      "collectionId": "654",
      "transactionType": "airdrop",
      "name": "My E-sports Token 2",
      "supply": "500",
      "tags": ["esportes"],
      "displayMediaType": "image",
      "displayMediaUrl": "https://placehold.it/300x300",
      "owners": [
        {
          "quantity": "2",
          "userId": "bfb46d00-5ae3-11ed-9b6a-0242ac120002"
        }
      ],
   }
]
```

{% endtab %}

{% tab title="Campos da Resposta" %}

* **`id`** *- String*

  Identificador único de um Token no Banco de Dados.

* **`tokenId`** *- String*

  Identificador que guarda a referência ao ID do Token relativo ao seu contrato.

* **`collectionId`** *- String*

  Identificador que guarda a referência do ID da Coleção de Tokens em nosso Banco de Dados.

* **`name`***- String*

  Nome do Token em nosso Banco de Dados.

* **`transactionType`** - String

  Tipo de transação utilizada na negociação do Token.

* **`sale`** *- Object*

  Quando um Token é listado como do tipo *`sale`*, ele armazena seus dados de preço e moeda principal em um objeto específico.

  * **`price`** *- String*

    Valor relativo ao preço agregado à transação do Token, seja para uma operação de compra ou venda.
  * **`decimals`** *- String*

    Número de casas decimais que deve ser considerado em relação ao campo price.&#x20;
  * **`currency`** *- String*

    Nome da moeda utilizada para o pagamento da transação, podendo ser relativo à moedas tradicionais ou criptomoedas.

* **`auction`** *- Object*

  Quando um Token é listado como do tipo *`auction`*, ele armazena seus dados de preço inicial e moeda principal em um objeto específico.

  * **`initialPrice`** *- String*

    Valor relativo ao preço inicial de leilão agregado à transação do Token.
  * **`minIncreasePrice`** *- String*

    Valor relativo ao incremento mínimo de cada oferta de leilão de um Token.
  * **`decimals`** *- String*

    Número de casas decimais que deve ser considerado em relação aos campos anteriores.&#x20;
  * **`currency`** *- String*

    Nome da moeda utilizada para o pagamento da transação, podendo ser relativo à moedas tradicionais ou criptomoedas.

* **`supply`** - String

  Quantidade existente do Token.

* **`displayMediaType`** - String

  Tipo de mídia associada ao Token.

* **`displayMediaUrl`** - String

  Endereço da mídia relacionada ao Token.

* **`owners`** *- Array of Objects*

  Armazena todos os identificadores de donos do Token.

  * **`userId`** *- String*

    Identificador único relativo ao dono do Token em nosso Banco de Dados.
  * **`quantity`** *- String*

    Quantidade de unidades do Token que determinado dono possui.

* **`tags`** *- Array*

  Conjunto de tags do token.
  {% endtab %}
  {% endtabs %}
  {% endtab %}

{% tab title="403: Forbidden " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 403" %}

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

{% tab title="401: Unauthorized " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 401" %}

<table><thead><tr><th width="152" align="center">Código</th><th>Descrição</th></tr></thead><tbody><tr><td align="center">1</td><td>Credenciais de acesso necessárias. Por favor, execute sua autenticação na plataforma.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}

## (JWT) Lista os tokens públicos e privados da plataforma

<mark style="color:blue;">`GET`</mark> `https://goblockchain.io/gotokens-api/v1/tokens/manage`

Nível de permissionamento necessário: `company_admin`, `company_moderator`, `community_admin`, `community_moderator`

#### Query Parameters

| Name         | Type   | Description                                    |
| ------------ | ------ | ---------------------------------------------- |
| limit        | String | Limite de resultados da busca                  |
| offset       | String | Quantidade de resultados para avançar da busca |
| communityId  | String | ID da Comunidade                               |
| companyId    | String | ID da Empresa                                  |
| collectionId | String | ID da Coleção                                  |
| currency     | String | Tipo de moeda utilizada                        |
| tags         | Array  | Tags do Token                                  |

#### Headers

| Name                                            | Type   | Description |
| ----------------------------------------------- | ------ | ----------- |
| authorization<mark style="color:red;">\*</mark> | Bearer | JWT         |

{% tabs %}
{% tab title="200: OK " %}
{% tabs %}
{% tab title="Exemplo de Resposta" %}

```javascript
[
    {
      "id":"1"
      "tokenId": "123",
      "collectionId": "321",
      "transactionType": "sale",
      "name": "My E-sports Token 1",
      "sale": {
        "price": "12",
        "decimals": "2",
        "currency": "ETH"
      },
      "supply": "100",
      "tags": ["esportes"],
      "displayMediaType": "image",
      "displayMediaUrl": "https://placehold.it/300x300",
      "owners": [
        {
          "quantity": "2",
          "userId": "0242ac120002"
        }
      ],
    },
    {
      "id":"2"
      "tokenId": "456",
      "collectionId": "654",
      "transactionType": "airdrop",
      "name": "My E-sports Token 2",
      "supply": "500",
      "tags": ["esportes"],
      "displayMediaType": "image",
      "displayMediaUrl": "https://placehold.it/300x300",
      "owners": [
        {
          "quantity": "2",
          "userId": "bfb46d00-5ae3-11ed-9b6a-0242ac120002"
        }
      ],
   }
]
```

{% endtab %}

{% tab title="Campos da Resposta" %}

* **`id`** *- String*

  Identificador único de um Token no Banco de Dados.

* **`tokenId`** *- String*

  Identificador que guarda a referência ao ID do Token relativo ao seu contrato.

* **`collectionId`** *- String*

  Identificador que guarda a referência do ID da Coleção de Tokens em nosso Banco de Dados.

* **`name`***- String*

  Nome do Token em nosso Banco de Dados.

* **`transactionType`** - String

  Tipo de transação utilizada na negociação do Token.

* **`sale`** *- Object*

  Quando um Token é listado como do tipo *`sale`*, ele armazena seus dados de preço e moeda principal em um objeto específico.

  * **`price`** *- String*

    Valor relativo ao preço agregado à transação do Token, seja para uma operação de compra ou venda.
  * **`decimals`** *- String*

    Número de casas decimais que deve ser considerado em relação ao campo price.&#x20;
  * **`currency`** *- String*

    Nome da moeda utilizada para o pagamento da transação, podendo ser relativo à moedas tradicionais ou criptomoedas.

* **`auction`** *- Object*

  Quando um Token é listado como do tipo *`auction`*, ele armazena seus dados de preço inicial e moeda principal em um objeto específico.

  * **`initialPrice`** *- String*

    Valor relativo ao preço inicial de leilão agregado à transação do Token.
  * **`minIncreasePrice`** *- String*

    Valor relativo ao incremento mínimo de cada oferta de leilão de um Token.
  * **`decimals`** *- String*

    Número de casas decimais que deve ser considerado em relação aos campos anteriores.&#x20;
  * **`currency`** *- String*

    Nome da moeda utilizada para o pagamento da transação, podendo ser relativo à moedas tradicionais ou criptomoedas.

* **`supply`** - String

  Quantidade existente do Token.

* **`displayMediaType`** - String

  Tipo de mídia associada ao Token.

* **`displayMediaUrl`** - String

  Endereço da mídia relacionada ao Token.

* **`owners`** *- Array of Objects*

  Armazena todos os identificadores de donos do Token.

  * **`userId`** *- String*

    Identificador único relativo ao dono do Token em nosso Banco de Dados.
  * **`quantity`** *- String*

    Quantidade de unidades do Token que determinado dono possui.

* **`tags`** *- Array*

  Conjunto de tags do token.
  {% endtab %}
  {% endtabs %}
  {% endtab %}

{% tab title="403: Forbidden " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 403" %}

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

{% tab title="401: Unauthorized " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 401" %}

<table><thead><tr><th width="152" align="center">Código</th><th>Descrição</th></tr></thead><tbody><tr><td align="center">1</td><td>Credenciais de acesso necessárias. Por favor, execute sua autenticação na plataforma.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}

## (JWT) Exibe detalhes de tokens públicos e privados

<mark style="color:blue;">`GET`</mark> `https://goblockchain.io/gotokens-api/v1/tokens/:tokenId/manage`

Nível de permissionamento necessário: `company_admin`, `company_moderator`, `community_admin`, `community_moderator`

#### Path Parameters

| Name                                      | Type   | Description |
| ----------------------------------------- | ------ | ----------- |
| tokenId<mark style="color:red;">\*</mark> | String | ID do token |

#### Headers

| Name                                            | Type   | Description |
| ----------------------------------------------- | ------ | ----------- |
| authorization<mark style="color:red;">\*</mark> | Bearer | JWT         |

{% tabs %}
{% tab title="200: OK " %}
{% tabs %}
{% tab title="Exemplo de Resposta" %}

```javascript
{
    "id":"1"
    "tokenId": "123",
    "collectionId": "321",
    "transactionType": "sale",
    "name": "My E-sports Token 1",
    "sale": {
      "price": "12",
      "decimals": "2",
      "currency": "ETH"
    },
    "supply": "100",
    "tags": ["esportes"],
    "displayMediaType": "image",
    "displayMediaUrl": "https://placehold.it/300x300",
    "owners": [
      {
        "quantity": "2",
        "userId": "0242ac120002"
      }
  ],
}
```

{% endtab %}

{% tab title="Campos da Resposta" %}

* **`id`** *- String*

  Identificador único de um Token no Banco de Dados.

* **`tokenId`** *- String*

  Identificador que guarda a referência ao ID do Token relativo ao seu contrato.

* **`collectionId`** *- String*

  Identificador que guarda a referência do ID da Coleção de Tokens em nosso Banco de Dados.

* **`name`***- String*

  Nome do Token em nosso Banco de Dados.

* **`transactionType`** - String

  Tipo de transação utilizada na negociação do Token.

* **`sale`** *- Object*

  Quando um Token é listado como do tipo *`sale`*, ele armazena seus dados de preço e moeda principal em um objeto específico.

  * **`price`** *- String*

    Valor relativo ao preço agregado à transação do Token, seja para uma operação de compra ou venda.
  * **`decimals`** *- String*

    Número de casas decimais que deve ser considerado em relação ao campo price.&#x20;
  * **`currency`** *- String*

    Nome da moeda utilizada para o pagamento da transação, podendo ser relativo à moedas tradicionais ou criptomoedas.

* **`auction`** *- Object*

  Quando um Token é listado como do tipo *`auction`*, ele armazena seus dados de preço inicial e moeda principal em um objeto específico.

  * **`initialPrice`** *- String*

    Valor relativo ao preço inicial de leilão agregado à transação do Token.
  * **`minIncreasePrice`** *- String*

    Valor relativo ao incremento mínimo de cada oferta de leilão de um Token.
  * **`decimals`** *- String*

    Número de casas decimais que deve ser considerado em relação aos campos anteriores.&#x20;
  * **`currency`** *- String*

    Nome da moeda utilizada para o pagamento da transação, podendo ser relativo à moedas tradicionais ou criptomoedas.

* **`supply`** - String

  Quantidade existente do Token.

* **`displayMediaType`** - String

  Tipo de mídia associada ao Token.

* **`displayMediaUrl`** - String

  Endereço da mídia relacionada ao Token.

* **`owners`** *- Array of Objects*

  Armazena todos os identificadores de donos do Token.

  * **`userId`** *- String*

    Identificador único relativo ao dono do Token em nosso Banco de Dados.
  * **`quantity`** *- String*

    Quantidade de unidades do Token que determinado dono possui.

* **`tags`** *- Array*

  Conjunto de tags do token.
  {% endtab %}
  {% endtabs %}
  {% endtab %}

{% tab title="400: Bad Request " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 401" %}

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

{% tab title="403: Forbidden " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 403" %}

<table><thead><tr><th width="152" align="center">Código</th><th>Descrição</th></tr></thead><tbody><tr><td align="center">1</td><td>Acesso restrito ao recurso.</td></tr><tr><td align="center">10</td><td>Credenciais de acesso expiradas. Por favor, execute novamente sua autenticação na plataforma.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}

## (JWT) Altera informações de um token

<mark style="color:purple;">`PATCH`</mark> `https://goblockchain.io/gotokens-api/v1/tokens/:tokenId/manage`

Nível de permissionamento necessário: `company_admin`

#### Path Parameters

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

#### Headers

| Name                                            | Type   | Description |
| ----------------------------------------------- | ------ | ----------- |
| authorization<mark style="color:red;">\*</mark> | Bearer | JWT         |

#### Request Body

| Name             | Type   | Description |
| ---------------- | ------ | ----------- |
| tokenId          | String |             |
| collectionId     | String |             |
| transactionType  | String |             |
| owners           | String |             |
| displayMediaUrl  | String |             |
| displayMediaType | String |             |
| supply           | String |             |
| tags             | Array  |             |

{% tabs %}
{% tab title="200: OK " %}
{% tabs %}
{% tab title="Exemplo de Resposta" %}

```javascript
{
    "id":"1"
    "tokenId": "123",
    "collectionId": "321",
    "transactionType": "sale",
    "name": "My E-sports Token 1",
    "sale": {
      "price": "12",
      "decimals": "2",
      "currency": "ETH"
    },
    "supply": "100",
    "tags": ["esportes"],
    "displayMediaType": "image",
    "displayMediaUrl": "https://placehold.it/300x300",
    "owners": [
      {
        "quantity": "2",
        "userId": "0242ac120002"
      }
  ],
}
```

{% endtab %}

{% tab title="Campos da Resposta" %}

* **`id`** *- String*

  Identificador único de um Token no Banco de Dados.

* **`tokenId`** *- String*

  Identificador que guarda a referência ao ID do Token relativo ao seu contrato.

* **`collectionId`** *- String*

  Identificador que guarda a referência do ID da Coleção de Tokens em nosso Banco de Dados.

* **`name`***- String*

  Nome do Token em nosso Banco de Dados.

* **`transactionType`** - String

  Tipo de transação utilizada na negociação do Token.

* **`sale`** *- Object*

  Quando um Token é listado como do tipo *`sale`*, ele armazena seus dados de preço e moeda principal em um objeto específico.

  * **`price`** *- String*

    Valor relativo ao preço agregado à transação do Token, seja para uma operação de compra ou venda.
  * **`decimals`** *- String*

    Número de casas decimais que deve ser considerado em relação ao campo price.&#x20;
  * **`currency`** *- String*

    Nome da moeda utilizada para o pagamento da transação, podendo ser relativo à moedas tradicionais ou criptomoedas.

* **`auction`** *- Object*

  Quando um Token é listado como do tipo *`auction`*, ele armazena seus dados de preço inicial e moeda principal em um objeto específico.

  * **`initialPrice`** *- String*

    Valor relativo ao preço inicial de leilão agregado à transação do Token.
  * **`minIncreasePrice`** *- String*

    Valor relativo ao incremento mínimo de cada oferta de leilão de um Token.
  * **`decimals`** *- String*

    Número de casas decimais que deve ser considerado em relação aos campos anteriores.&#x20;
  * **`currency`** *- String*

    Nome da moeda utilizada para o pagamento da transação, podendo ser relativo à moedas tradicionais ou criptomoedas.

* **`supply`** - String

  Quantidade existente do Token.

* **`displayMediaType`** - String

  Tipo de mídia associada ao Token.

* **`displayMediaUrl`** - String

  Endereço da mídia relacionada ao Token.

* **`owners`** *- Array of Objects*

  Armazena todos os identificadores de donos do Token.

  * **`userId`** *- String*

    Identificador único relativo ao dono do Token em nosso Banco de Dados.
  * **`quantity`** *- String*

    Quantidade de unidades do Token que determinado dono possui.

* **`tags`** *- Array*

  Conjunto de tags do token.
  {% endtab %}
  {% endtabs %}
  {% endtab %}

{% tab title="401: Unauthorized " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 401" %}

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

{% tab title="403: Forbidden " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 403" %}

<table><thead><tr><th width="152" align="center">Código</th><th>Descrição</th></tr></thead><tbody><tr><td align="center">1</td><td>Acesso restrito ao recurso.</td></tr><tr><td align="center">10</td><td>Credenciais de acesso expiradas. Por favor, execute novamente sua autenticação na plataforma.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}

### Gestão de Tokens na web3

## (JWT) Consulta o proprietário do token na web3

<mark style="color:blue;">`GET`</mark> `https://goblockchain.io/gotokens-api/v1/tokens/:tokenId/manage/web3/ownerOf`

Nível de autorização necessário: `member`

#### Path Parameters

| Name                                      | Type   | Description   |
| ----------------------------------------- | ------ | ------------- |
| tokenId<mark style="color:red;">\*</mark> | String | ID da Coleção |
| address                                   | String |               |

#### Headers

| Name                                            | Type   | Description |
| ----------------------------------------------- | ------ | ----------- |
| authorization<mark style="color:red;">\*</mark> | Bearer | JWT         |

{% tabs %}
{% tab title="200: OK " %}
{% tabs %}
{% tab title="Exemplo de Resposta" %}

```javascript
"ownerAddress": "0x89s7das87d87as7d9a8s7da7sd98a7sd98a8d79as8d7sa8d"
```

{% endtab %}

{% tab title="Campos de Resposta" %}

* **`ownerAddress`** *- String*\
  Endereço da carteira do proprietário do token
  {% endtab %}
  {% endtabs %}
  {% endtab %}

{% tab title="401: Unauthorized " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 401" %}

{% endtab %}
{% endtabs %}

{% endtab %}

{% tab title="403: Forbidden " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 403" %}

<table><thead><tr><th width="152" align="center">Código</th><th>Descrição</th></tr></thead><tbody><tr><td align="center">10</td><td>Credenciais de acesso expiradas. Por favor, execute novamente sua autenticação na plataforma.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}

## (JWT) Consulta o saldo de tokens para a carteira informada na web3

<mark style="color:blue;">`GET`</mark> `https://goblockchain.io/gotokens-api/v1/tokens/:tokenId/manage/web3/balanceOf/:address`

Nível de autorização necessário: `member`

#### Path Parameters

| Name                                      | Type   | Description   |
| ----------------------------------------- | ------ | ------------- |
| tokenId<mark style="color:red;">\*</mark> | String | ID da Coleção |
| address                                   | String |               |

#### Headers

| Name                                            | Type   | Description |
| ----------------------------------------------- | ------ | ----------- |
| authorization<mark style="color:red;">\*</mark> | Bearer | JWT         |

{% tabs %}
{% tab title="200: OK " %}
{% tabs %}
{% tab title="Exemplo de Resposta" %}

```javascript
"balanceOf": "1000"
```

{% endtab %}

{% tab title="Campos de Resposta" %}

* **`balanceOf`** *- String*\
  Saldo do token na carteira
  {% endtab %}
  {% endtabs %}
  {% endtab %}

{% tab title="401: Unauthorized " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 401" %}

{% endtab %}
{% endtabs %}

{% endtab %}

{% tab title="403: Forbidden " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 403" %}

<table><thead><tr><th width="152" align="center">Código</th><th>Descrição</th></tr></thead><tbody><tr><td align="center">10</td><td>Credenciais de acesso expiradas. Por favor, execute novamente sua autenticação na plataforma.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}

## (JWT/Wallet) Mint de Tokens na Web3

<mark style="color:green;">`POST`</mark> `https://goblockchain.io/gotokens-api/v1/tokens/:tokenId/manage/web3/mint`

Nível de autorização necessário: `company_admin`\
\
É necessário um carteira com saldo vinculada ao usuário e a carteira precisa ter permissão de execução do método no contrato.

Diferentes tokens possuem diferentes possibilidades de *mint*. ex: tokens ERC20 e ERC1155 possuem *supply* e é possível, faz o *mint* inicial para criar o token na blockchain, e posteriormente novos *mints* podem ser usados para aumentar o *supply,* caso o contrato permita, já tokens ERC721 só podem ser *mintados* a primeira vez, novos *mints* do mesmo tokenId não produzem qualquer efeito.

#### Path Parameters

| Name                                      | Type   | Description   |
| ----------------------------------------- | ------ | ------------- |
| tokenId<mark style="color:red;">\*</mark> | String | ID da Coleção |

#### Headers

| Name                                            | Type   | Description |
| ----------------------------------------------- | ------ | ----------- |
| authorization<mark style="color:red;">\*</mark> | Bearer | JWT         |

#### Request Body

| Name                                     | Type   | Description          |
| ---------------------------------------- | ------ | -------------------- |
| amount<mark style="color:red;">\*</mark> | String | Quantidade de tokens |

{% tabs %}
{% tab title="204: No Content " %}

{% endtab %}

{% tab title="401: Unauthorized " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 401" %}

{% endtab %}
{% endtabs %}

{% endtab %}

{% tab title="403: Forbidden " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 403" %}

<table><thead><tr><th width="152" align="center">Código</th><th>Descrição</th></tr></thead><tbody><tr><td align="center">10</td><td>Credenciais de acesso expiradas. Por favor, execute novamente sua autenticação na plataforma.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}

## (JWT/Wallet) Mint de Tokens na Web3

<mark style="color:green;">`POST`</mark> `https://goblockchain.io/gotokens-api/v1/tokens/:tokenId/manage/web3/burn`

Nível de autorização necessário: `member`\
\
É necessário um carteira com saldo vinculada ao usuário e a carteira precisa ter permissão de execução do método no contrato.

O método precisa existir no contrato e as regras relativas a quem pode queimar cada token também estão definidas dentro do contrato.

#### Path Parameters

| Name                                      | Type   | Description   |
| ----------------------------------------- | ------ | ------------- |
| tokenId<mark style="color:red;">\*</mark> | String | ID da Coleção |

#### Headers

| Name                                            | Type   | Description |
| ----------------------------------------------- | ------ | ----------- |
| authorization<mark style="color:red;">\*</mark> | Bearer | JWT         |

#### Request Body

| Name                                     | Type   | Description          |
| ---------------------------------------- | ------ | -------------------- |
| amount<mark style="color:red;">\*</mark> | String | Quantidade de tokens |

{% tabs %}
{% tab title="204: No Content " %}

{% endtab %}

{% tab title="401: Unauthorized " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 401" %}

{% endtab %}
{% endtabs %}

{% endtab %}

{% tab title="403: Forbidden " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 403" %}

<table><thead><tr><th width="152" align="center">Código</th><th>Descrição</th></tr></thead><tbody><tr><td align="center">10</td><td>Credenciais de acesso expiradas. Por favor, execute novamente sua autenticação na plataforma.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}

## (JWT/Wallet) Transfer de Tokens na Web3

<mark style="color:green;">`POST`</mark> `https://goblockchain.io/gotokens-api/v1/tokens/:tokenId/manage/web3/transfer`

Nível de autorização necessário: `member`\
\
É necessário um carteira com saldo vinculada ao usuário e a carteira precisa ter permissão de execução do método no contrato.

O método precisa existir no contrato e as regras relativas a quem pode transferir cada token também estão definidas dentro do contrato.

#### Path Parameters

| Name                                      | Type   | Description   |
| ----------------------------------------- | ------ | ------------- |
| tokenId<mark style="color:red;">\*</mark> | String | ID da Coleção |

#### Headers

| Name                                            | Type   | Description |
| ----------------------------------------------- | ------ | ----------- |
| authorization<mark style="color:red;">\*</mark> | Bearer | JWT         |

#### Request Body

| Name                                        | Type   | Description          |
| ------------------------------------------- | ------ | -------------------- |
| amount<mark style="color:red;">\*</mark>    | String | Quantidade de tokens |
| toAddress<mark style="color:red;">\*</mark> | String |                      |

{% tabs %}
{% tab title="204: No Content " %}

{% endtab %}

{% tab title="401: Unauthorized " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 401" %}

{% endtab %}
{% endtabs %}

{% endtab %}

{% tab title="403: Forbidden " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 403" %}

<table><thead><tr><th width="152" align="center">Código</th><th>Descrição</th></tr></thead><tbody><tr><td align="center">10</td><td>Credenciais de acesso expiradas. Por favor, execute novamente sua autenticação na plataforma.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}

## (JWT/Wallet) Transfer de Tokens na Web3

<mark style="color:green;">`POST`</mark> `https://goblockchain.io/gotokens-api/v1/tokens/:tokenId/manage/web3/transferFrom`

Nível de autorização necessário: `member`\
\
É necessário um carteira com saldo vinculada ao usuário e a carteira precisa ter permissão de execução do método no contrato.

O método precisa existir no contrato e as regras relativas a quem pode transferir cada token também estão definidas dentro do contrato.

#### Path Parameters

| Name                                      | Type   | Description   |
| ----------------------------------------- | ------ | ------------- |
| tokenId<mark style="color:red;">\*</mark> | String | ID da Coleção |

#### Headers

| Name                                            | Type   | Description |
| ----------------------------------------------- | ------ | ----------- |
| authorization<mark style="color:red;">\*</mark> | Bearer | JWT         |

#### Request Body

| Name                                        | Type   | Description          |
| ------------------------------------------- | ------ | -------------------- |
| amount<mark style="color:red;">\*</mark>    | String | Quantidade de tokens |
| toAddress<mark style="color:red;">\*</mark> | String |                      |
| fromAddress                                 | String |                      |

{% tabs %}
{% tab title="204: No Content " %}

{% endtab %}

{% tab title="401: Unauthorized " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 401" %}

{% endtab %}
{% endtabs %}

{% endtab %}

{% tab title="403: Forbidden " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 403" %}

<table><thead><tr><th width="152" align="center">Código</th><th>Descrição</th></tr></thead><tbody><tr><td align="center">10</td><td>Credenciais de acesso expiradas. Por favor, execute novamente sua autenticação na plataforma.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}
