# Token Gating

### Resumo

Solução avançada permitindo uma conexão profunda com comunidades web3. Utilizando nossa API, empresas podem definir condições baseadas em tokens ERC20 e NFTs.

Essa API  é altamente flexível e poderosa, permitindo que você, como empresa, configure condições complexas para controlar o acesso.

Utilizando operadores lógicos como AND (&) e OR (|), você pode criar regras de acesso multifacetadas. Por exemplo, você pode definir uma condição que diz: "Se um membro da comunidade X possuir TokenA E TokenB, ele terá acesso", ou "Se um membro da comunidade Y possuir TokenC OU TokenD, ele terá acesso".

Desta forma, você pode usar a API para configurar um sistema de token gated personalizado que atenda às suas necessidades específicas e ajude a fomentar o envolvimento da comunidade.

## Criação do token gating

<mark style="color:green;">`POST`</mark> `https://hml-mywayend.gotokens.io/api/v1/token-gate`

## Criação do token gating

<mark style="color:green;">`POST`</mark> `https://hml-mywayend.gotokens.io/api/v1/token-gate`

Esse endpoint cria um token gate e define o benefício pode ser aplicado a esse acesso. Desde um simples acesso ou uma porcentagem de desconto.

#### Request Body

| Name                                                   | Type     | Description                                                                                                                                                                                                                                             |
| ------------------------------------------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name<mark style="color:red;">\*</mark>                 | String   | Um nome que te lembre a que token gate se refire                                                                                                                                                                                                        |
| discountPercentage                                     | Número   | Porcentagem de desconto caso o pagamento seja realizado direto pela goTokens. O número inserido será em decimais, ou seja, para dar 10% de desconto, o valor inserido será 1000. (Equivalente a 10,00%) Caso não deseje dar desconto, apague este campo |
| givesWhitelistAccess<mark style="color:red;">\*</mark> | Booleano | Se queremos dar acesso ao usuário esse parâmetro deve ser "true"                                                                                                                                                                                        |
| maxUsageLimit                                          | Número   | Se definido, será a quantidade de acessos que um usuário pode passar pelo token gate                                                                                                                                                                    |

## Cadastro dos tokens que darão acesso ao token gating

<mark style="color:green;">`POST`</mark> `https://hml-mywayend.gotokens.io/api/v1/token-gate/condition`

#### Request Body

| Name                                                  | Type   | Description                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name<mark style="color:red;">\*</mark>                | String | Um nome que te lembre a que tokens se refire                                                                                                                                                                                                                                                                                                                              |
| contractAddress<mark style="color:red;">\*</mark>     | String | Endereço do contrato dos tokens na blockchain                                                                                                                                                                                                                                                                                                                             |
| individualTokenIds                                    | Array  | <p>Se deseja explicitar os token que são válidos para o token gate, passe nesse array de strings.</p><p>Se esse valor não for passado, qualquer token do contrato será aceito.</p>                                                                                                                                                                                        |
| conditionalOperator<mark style="color:red;">\*</mark> | String | <p>O usuário precisa cumprir com os requisitos apenas para 1 token ou para todos?</p><p></p><p>Para um, colocar: "or"</p><p>Para todos, colocar: "and"</p>                                                                                                                                                                                                                |
| countType<mark style="color:red;">\*</mark>           | String | <p>Como a quantidade de tokens de um usuário é contada.</p><p>Em outras palavras, o "amount" é aplicado a 1 token ou ao conjunto de tokens?</p><p></p><p>Exemplo: Se o usuário precisa ter 1 de cada token a contagem é individual. Caso precise ter 1 token ao todo, a contagem é a soma de todos os tokens.</p><p></p><p>Valores possíveis<br>"individual" ou "sum"</p> |
| amount<mark style="color:red;">\*</mark>              | Número | Quantidade necessária para o acesso ao token gate                                                                                                                                                                                                                                                                                                                         |
| network<mark style="color:red;">\*</mark>             | String | <p>Rede blockchain do token. Valores possíveis:<br>"ethereum\_mainnet", "polygon\_mainnet", "gnosis\_mainnet",</p><p>"ethereum\_goerli",</p><p>"polygon\_mumbai",</p><p>"gnosis\_testnet",</p>                                                                                                                                                                            |

## Associação de condição com token gating

<mark style="color:green;">`POST`</mark> `https://hml-mywayend.gotokens.io/api/v1/token-gate/condition/{id}/add/token-gate`

#### Request Body

| Name                                                   | Type     | Description  |
| ------------------------------------------------------ | -------- | ------------ |
| name<mark style="color:red;">\*</mark>                 | String   | NVtVtd7wGfZs |
| discountPercentage                                     | Número   | CsI14yanypav |
| givesWhitelistAccess<mark style="color:red;">\*</mark> | Booleano | VFHNbLUEMw4v |
| maxUsageLimit                                          | Número   | SyFnUrxEsz01 |

## Cadastro dos tokens que darão acesso ao token gating

<mark style="color:green;">`POST`</mark> `https://hml-mywayend.gotokens.io/api/v1/token-gate/condition`

#### Request Body

| Name                                                  | Type   | Description  |
| ----------------------------------------------------- | ------ | ------------ |
| name<mark style="color:red;">\*</mark>                | String | wuZVBBEBY8mW |
| contractAddress<mark style="color:red;">\*</mark>     | String | 175t5a12m78e |
| individualTokenIds                                    | Array  | rDzojMB012cS |
| conditionalOperator<mark style="color:red;">\*</mark> | String | GqoPFn0HCf3G |
| countType<mark style="color:red;">\*</mark>           | String | NOlbiUZX9voi |
| amount<mark style="color:red;">\*</mark>              | Número | GvAeotH6mmtE |
| network<mark style="color:red;">\*</mark>             | String | DjG3laxWZ79R |

## Associação de condição com token gating

<mark style="color:green;">`POST`</mark> `https://hml-mywayend.gotokens.io/api/v1/token-gate/condition/{id}/add/token-gate`

Essa rota associa um token gate com as condições necessárias para acessar o mesmo

#### Path Parameters

| Name                               | Type   | Description                                                   |
| ---------------------------------- | ------ | ------------------------------------------------------------- |
| <mark style="color:red;">\*</mark> | String | id do grupo de tokens cadastrado (condição) no passo anterior |

#### Request Body

| Name                                         | Type  | Description                                                                                                      |
| -------------------------------------------- | ----- | ---------------------------------------------------------------------------------------------------------------- |
| benefitIds<mark style="color:red;">\*</mark> | Array | Array de strings contendo o id dos token gates que queremos associar com o grupo de tokens cadastrado (condição) |

## Verificação do Token Gating

<mark style="color:green;">`POST`</mark> `https://hml-mywayend.gotokens.io/api/v1/token-gate/check/manage`

#### Path Parameters

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

#### Request Body

| Name                                         | Type  | Description  |
| -------------------------------------------- | ----- | ------------ |
| benefitIds<mark style="color:red;">\*</mark> | Array | 6bpH3yYOJF1H |

## Verificação do Token Gating

<mark style="color:green;">`POST`</mark> `https://hml-mywayend.gotokens.io/api/v1/token-gate/check/manage`

Verifica se um usuário pode ou não acessar um conteúdo protegido por token gate

#### Request Body

| Name                                          | Type  | Description                                                              |
| --------------------------------------------- | ----- | ------------------------------------------------------------------------ |
| userWallets<mark style="color:red;">\*</mark> | Array | Lista de wallets de um usuário, caso o mesmo possua mais de uma carteira |
| benefitIds<mark style="color:red;">\*</mark>  | Array | Lista de ids de benefícios que você quer ver se o usuário tem direito    |

{% tabs %}
{% tab title="200: OK Fique atento ao campo "hasAccess", ele é um booleano que informará se o usuário passou ou não pelo token gate" %}

{% endtab %}
{% endtabs %}

#### Request Body

| Name                                          | Type  | Description  |
| --------------------------------------------- | ----- | ------------ |
| userWallets<mark style="color:red;">\*</mark> | Array | fnpLRsh8z3MU |
| benefitIds<mark style="color:red;">\*</mark>  | Array | Xw5dq3YVL7ej |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.gotokens.io/gotokens/api-fidelidade/token-gating.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
