> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-pt/recompensas/integrations.md).

# Integrações

Conecte uma campaign do Rewards a uma scene do Decentraland ou a um server externo para conceder wearables e emotes automaticamente.

Depois de criar e configurar uma campanha e garantir que ela tem stock suficiente para fornecer rewards, o próximo passo é conectar a campanha a um trigger de rewards. Esse trigger pode ser uma Scene, uma Quest ou um servidor externo. Esta secção explica como podem ser feitas diferentes integrações com Rewards.

## Conceder rewards de uma Scene

Rewards podem ser integrados diretamente em scenes do Decentraland, mas esta abordagem traz alguns riscos. Como a lógica está incorporada no código da scene, que os utilizadores podem aceder, não é recomendado para minting de itens com uma raridade inferior a \[EPIC]\([Ver documentação](/creator/content-creator-pt/readme.md)#rarity).

Tenha em conta que utilizadores determinados, com conhecimento técnico suficiente, poderiam potencialmente contornar medidas de segurança como captchas, alterar os seus endereços IP e mintar todos os itens disponíveis, que depois poderiam vender no Marketplace. A principal salvaguarda contra isso é garantir uma oferta suficiente de itens, para que todos tenham uma oportunidade justa de receber uma reward.

### Flags recomendadas do dispenser

As seguintes configurações do dispenser são recomendadas para reduzir o risco de exploits neste cenário:

* \[Limit Assignments]\([Ver documentação](/creator/content-creator-pt/readme.md)#limit-assignments)
* \[Beneficiary Signature]\([Ver documentação](/creator/content-creator-pt/readme.md)#beneficiary-signature)
* \[Captcha Protection]\([Ver documentação](/creator/content-creator-pt/readme.md)#captcha-protection)
* \[Connected to Decentraland]\([Ver documentação](/creator/content-creator-pt/readme.md)#connected-to-decentraland)
* \[Position inside Decentraland]\([Ver documentação](/creator/content-creator-pt/readme.md)#position-inside-decentraland) (se isso se aplicar ao seu caso de uso)

### Exemplo

```tsx
import { getPlayer } from '@dcl/sdk/src/players'
import { signedFetch } from '@decentraland/SignedFetch'
import { getRealm } from '~system/Runtime'

export function main() {
  // 1. Obter o desafio de captcha para mostrar ao utilizador
  const request = await fetch(`https://rewards.decentraland.org/api/captcha`, {
    method: 'POST',
  })
  const captcha = await request.json()

  // 2. Exibir o captcha para o jogador completar - Veja o exemplo em studios.decentraland.org/resources

  // 3. Obter dados do utilizador
  const user = getPlayer()

  // 4. Obter o realm atual
  const realmInfo = await getRealm({})

  // 5. Enviar pedido para atribuir um wearable/emote
  const assignRequest = await signedFetch('https://rewards.decentraland.org/api/rewards', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      campaign_key: '[DISPENSER_KEY]', // chave do dispenser
      beneficiary: user.userId, // endereço Ethereum
      catalyst: realmInfo.baseUrl, // domínio do catalyst
      captcha_id: captcha.data.id, // "9e6b2d07-b47b-4204-ae87-9c4dea48f9b7"
      captcha_value: '[CAPTCHA_VALUE]', // "123456"
    }),
  })

  const reward = await assignRequest.json()
```

## Conceder rewards de uma Quest do Decentraland

Pode integrar facilmente Rewards com as [Decentraland Quests](https://github.com/decentraland/docs/tree/main/creator/deprecated/quests/overview.md), isto é ideal se quiser recompensar os utilizadores por concluírem uma quest.

### Flags recomendadas do dispenser

As seguintes configurações do dispenser são recomendadas para reduzir o risco de exploits neste cenário:

* \[Limit Assignments]\([Ver documentação](/creator/content-creator-pt/readme.md)#limit-assignments) (se isso se aplicar ao seu caso de uso)

Qualquer uma das outras flags fará com que a sua integração falhe; evite usá-las.

{% hint style="warning" %}
⚠️ A chave do dispenser deve ser mantida em segredo, por isso nunca a exponha ao utilizador em nenhum momento.
{% endhint %}

### Exemplo

Para integrar a sua Quest com o serviço Rewards, só precisa de uma chave do dispenser e de [configurar um webhook](https://github.com/decentraland/docs/tree/main/creator/deprecated/quests/rewards.md) para conceder rewards.

```js
{
    // ...
    "reward": {
        "hook": {
            "webhookUrl": "https://rewars.decentraland.org/api/rewards",
            "requestBody": {
                "campaign_key": "[DISPENSER_KEY]",
                "beneficiary": "{user_address}"
            }
        },
        // ...
    }
}
```

## Conceder rewards de um servidor personalizado

Pode integrar Rewards diretamente a partir do seu servidor, o que é ideal para realizar verificações extra antes de mintar itens. Uma vantagem adicional é que, ao contrário do código da scene, o código do seu servidor pode não ser público, tornando mais difícil para os utilizadores descobrir e explorar vulnerabilidades.

### Flags recomendadas do dispenser

As seguintes configurações do dispenser são recomendadas para reduzir o risco de exploits neste cenário:

* \[Limit Assignments]\([Ver documentação](/creator/content-creator-pt/readme.md)#limit-assignments) (se isso se aplicar ao seu caso de uso)

Ativar qualquer uma das outras flags pode complicar a sua integração ou, dependendo do seu caso de uso, potencialmente fazer com que falhe. Portanto, não é recomendado usá-las, a menos que exista uma necessidade específica. No entanto, talvez queira explorar os seus potenciais benefícios.

{% hint style="warning" %}
⚠️ A chave do dispenser deve ser mantida em segredo, por isso nunca a exponha ao utilizador em nenhum momento.
{% endhint %}

### Exemplo

```tsx
const request = await fetch('https://rewards.decentraland.org/api/rewards', {
	method: 'POST',
	headers: {
		'Content-Type': 'application/json',
	},
	body: JSON.stringify({
		campaign_key: '[DISPENSER_KEY]',
		beneficiary: '0x0f5d2fb29fb7d3cfee444a200298f468908cc942', // endereço Ethereum
	}),
})

const response = await request.json()
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.decentraland.org/creator/content-creator-pt/recompensas/integrations.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
