# Introduction to Quest Protocol

Quest Protocol is the permissionless infrastructure to seamlessly connect onchain participants with onchain actions and foster sustainable network growth.

Our user-friendly applications like Quest Terminal and RabbitHole make it easy to create onchain actions known as quests and reward participation. At the heart of the ecosystem are Protocol Rewards—the mechanism designed to incentivize all contributors, including the quest creator, participant and referrer. The equitable distribution of rewards encourages ongoing engagement, ultimately boosting protocol growth and crypto participation. &#x20;

**Key features of Quest Protocol include:**

* **Permissionless access**: Any onchain individual or entity can deploy quests and distribute rewards.&#x20;
* **User-friendly interfaces**: Custom and intuitive interfaces to manage and interact with quests.&#x20;
* **Audience targeting**: Allowlists for quest creators to attract participants most aligned to their network’s goals.
* **Real-time performance insights**: Real-time data to empower quest creators to measure, iterate and optimize quest strategies.


# Mission & Principles

We believe that the future of work will become increasingly independent but coordinated. A growing population of individuals will look to break away from traditional corporate structures and discover new economic opportunities onchain. Contributing to protocols will become one of the most common jobs on the Internet.

Our mission is to create the essential public infrastructure to connect protocols to the most suitable and aligned participants. But beyond supporting protocol growth, our purpose to facilitate onchain participation is to ultimately increase economic opportunities for every individual.

To achieve this, we designed Quest Protocol with the following principles in mind:

* **No permission should be necessary.** Anyone should be able to deploy a quest without needing permission. True decentralization means opening up contributor opportunities beyond the core team and to the broader community.
* **Targeting strategies should be adaptable.** Protocols must continuously adjust their allowlist and token distribution strategies to attract the most suitable participants aligned to the protocol’s long-term growth.&#x20;
* **Token distributions are iterative, experimental games.**  Much like traditional advertising strategies, distributing incentives should be an ongoing growth experiment aimed to optimize outcomes and behaviors. We believe that protocols should [deploy multiple micro-quests and iterate based on results](https://rabbithole.mirror.xyz/Q-jEQx_DG0jD4pj5r18T3mO8j8VPKqE4TURZgaBJ5tA), rather than launch one-time airdrops.


# Ecosystem Challenges & Solutions

Maintaining and nurturing user engagement has been a long-standing challenge for many protocols. Conventional growth tactics like airdrops can generate initial excitement and increase user activity but often fail to sustain engagement in the long run.

This is a result of ineffective token distribution strategies and tools. To address these challenges, we’ve designed the tools and infrastructure for protocols to effectively engage with and distribute rewards to quest participants that bring the most value.&#x20;

#### Key advantages of Quest Protocol include:

**​​Effortless quest deployment**: Creating quests is as easy as launching a traditional ad campaign. Define an allowlist, choose an onchain action, and deposit rewards within minutes, enabling iterative and experimental token distribution strategies.

**Instant rewards claim**: Quest participants can instantly claim rewards via the smart contract upon quest completion, creating an enhanced user experience. Quest creators and referrers also receive their rewards promptly.

**Data-driven insights**: Users can analyze quest performance with ease using platforms like Dune Analytics to create custom dashboards. Actionable insights empower users to optimize quest and token distribution strategies for ongoing success.

**Precise audience targeting**: Allowlists enable quest creators to attract the most suitable and aligned participants based on specific criteria like sybil-resistance, token holdings, and completion rates.

**Equitable protocol rewards**: Quest rewards are distributed fairly among all contributors, including quest creators, participants, and referrers. This incentivizes continuous engagement and support for network growth.


# How it Works

The Quest Protocol stack is made up of the following:

* **The decentralized protocol**: makes it easy to distribute ERC20s for the completion of quests.
* **RabbitHole**: A marketplace of quests that makes it easy for participants to discover opportunities to contribute to protocols based on their wallet address.
* **Quest Terminal**: A user-friendly interface to deploy quests based on eligibility criteria and monitor results.
* **Quest SDK**: The tools and resources necessary for developers to easily integrate quests into any custom-branded interface. Developer access to Quest SDK is coming soon.

<figure><img src="/files/66fomN1rIa7hiN0LZqXE" alt=""><figcaption></figcaption></figure>


# Choosing an Action

Every quest requires a user to complete an onchain action to receive a reward. Quest Protocol currently supports a limited number of projects and networks at this time. We are adding new projects every week.

A user must complete an action on a specified network. If they complete the action on a different network, the user will not be able to complete the quest and obtain the reward.

<figure><img src="/files/rQ1BFoYjrQ90OAKIdxIv" alt=""><figcaption></figcaption></figure>


# Choosing Quest Participants

Every quest has a limited number of slots available, determined by the number of rewards. Once the rewards are claimed or time expires, the quest is completed. Choosing the right quest participants is one of the most important steps to hit your goals. If you want to reach a wide number of participants, we recommend using one of our recommended Allowlists which balances reach and sybil protection.

<figure><img src="/files/ArE8wM62FbUkiuM90QWr" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/W01B5G2jNB4nJ2rRozLn" alt=""><figcaption></figcaption></figure>


# Allowlists

You can create your own allowlists by navigating to the "Allowlists" section in Quest Terminal. To create an Allowlist, you can upload a CSV and save it. When deploying a new quest, you can choose from your saved allowlists instead of needing to upload a new CSV each time.

You can use a tool like Dune Analytics to create the list of addresses depending on what you're looking to target. Once you have the addresses, please upload the addresses all in one column. In the future, we will introduce better ways to compose Allowlists together based on available onchain data.

<figure><img src="/files/qVkQEXFdJPrEb5i0UUTs" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/cxNzlWo0eSN09Tfr2AOZ" alt=""><figcaption></figcaption></figure>


# Our Philosophy on Sybil Resistance

We believe that a user's transaction history is the strongest form of sybil resistance. We believe that users will have many wallets, and users will want to be evaluated for token distribution opportunities based on their transaction activity. We like to think of Quest Protocol as a command center to recruit the best participants into networks by incentivizing them with ownership earning opportunities (tokens).&#x20;


# Scheduling a Quest

You can choose from having quests deploy immediately, or you can schedule it for some point in the future. A quest can only have a maximum duration of 30 days. Once a quest is deployed, users can immediately start completing the quest and earning rewards.

<figure><img src="/files/WxarCtoKnZlq1KTICb8A" alt=""><figcaption></figcaption></figure>


# Choosing a Reward

Choosing the right reward is crucial to having a successful quest. At the current moment, we only support ERC20 tokens on Ethereum, Polygon, Arbitrum, and Optimism.&#x20;

To begin, first select which network you want users to receive the reward on. Then choose the token that you'd like to use (NOTE: The network the reward is on can be different than the network the action is on).&#x20;

If you don't see a token that you'd like to use, we are carefully evaluating new tokens on a periodic basis.

After selecting the reward, you will choose the reward amount. You can pick from a recommended reward which is determined by similar quests that have performed well, or a gas rebate option, which is calculated by the approximate gas cost required for a user to complete a quest. Note: If you choose a low reward amount, users may not complete the quest due to gas costs. If you choose too high of a reward and there is no allowlist, you may risk having users creating new wallets to complete the quest. Choose carefully!

<figure><img src="/files/7nU1QeomTeltMPTNGFhd" alt=""><figcaption></figcaption></figure>


# Deploying a Quest & Quest Fees

When deploying a quest, you'll need to deposit rewards into the contract that are used for quest rewards in addition to the Quest Protocol fee. Deploying requires two contract interactions, both an approval of tokens and quest deployment. (NOTE: DO NOT close out of the window or you will need to start the flow over again).

The Quest Protocol fee is calculated as 20% of the reward amount per quest participant. The fee is only paid out upon each individual quest completion. If there are no participants in the quest, no protocol fees will be paid.

<figure><img src="/files/NoNUawiLWfy2L2tR7cQc" alt=""><figcaption></figcaption></figure>


# Monitoring a Quest

When the quest is deployed, you can track results by visiting the Quest Details page under "My Quests". While you will be able to start seeing quest completions immediately, you will need to wait an hour before seeing chart data. You can click into a given quest to and see more performance details such as hourly/daily breakdown of completions, and quest participant insights like things like top protocols used, wallet balances, and transaction history info.

You can also visit the quest on RabbitHole to understand how it appears to users.

<figure><img src="/files/q06PVx79qHwScujfPXQK" alt=""><figcaption><p>My Quest list</p></figcaption></figure>

<figure><img src="/files/PidI0qjG34U7q23tg9BL" alt=""><figcaption><p>Quest Performance Insights</p></figcaption></figure>


# Withdrawing Tokens

If there are tokens still left in the contract after the quest has been completed, you can withdraw tokens by clicking the "Withdraw" button at the top of the Quest Details page.

![](/files/kIq1LOYwkNu6PawO7Qwy)

Once clicking Withdraw, a confirmation will appear showing the breakdown of how many tokens you will receive for withdrawing.

![](/files/V9kChkVnQrULxHNRvwO6)


# FAQ

<details>

<summary>How do I deploy a quest?</summary>

To create a quest, you will need tokens in your wallet to be distributed as the quest reward. Currently, we support a limited number of networks with a limited number of tokens. If you wish to use tokens outside of what is available, please open a support ticket in our discord. You will also need gas tokens to deploy the quest contract on the supported network of choice.

</details>

<details>

<summary>Does the action and reward have to be on the same network?</summary>

Nope! You can deploy quests with an action required on one network, with the reward being distributed on another.

</details>

<details>

<summary>What networks can I distribute tokens on?</summary>

We currently support Ethereum Mainnet, Optimism, Polygon, and Arbitrum. If you want us to add a new network, please let us know here.

</details>

<details>

<summary>What participants should I choose for my quest?</summary>

When creating a quest, quest creators can either choose from recommended lists made by the core team or you can upload your own list of addresses through a CSV upload. Choosing your participants depends entirely on the goals of the quest.

</details>

<details>

<summary>What are the recommended lists?</summary>

We are constantly curating the top lists so you can use them in quests. The most used Allowlists will be suggested, as those will yield the best results while balancing sybil resistance and quality.

</details>

<details>

<summary>How can I create my own Allowlist?</summary>

To create an Allowlist, you can upload a CSV and save it in the "Allowlists" section of the Quest Terminal UI. When deploying a new quest, you can choose from your saved allowlists instead of having to upload a new CSV each time.

</details>

<details>

<summary>Why is there a fee to create a quest?</summary>

Quest Protocol requires a fee upon each quest completion. The fee is 20% per reward distributed to participants. For example- if the quest completion reward to the user is 1 OP, there is a 0.2 OP fee paid to Quest Protocol for a total cost of 1.2 OP.

</details>

<details>

<summary>What happens to the tokens that are remaining in the contract when the quest is completed?</summary>

If there are any tokens in the contract, the quest creator can withdraw the tokens in the contract after the time in the quest runs out. This applies to both unused user rewards and unused tokens from the protocol fee deposit. You can withdraw the tokens by clicking into a quest and viewing the details.

</details>

<details>

<summary>Where does my quest appear when it is created?</summary>

When the quest is deployed, the quest appears on RabbitHole and any Quest Protocol interface.

</details>

<details>

<summary>What reward amount do I use for the reward amount?</summary>

If you price the quest too low, users may not complete the quest. If you price the quest too high and you don’t have an Allowlist, there is a risk of users creating multiple wallets to farm the rewards.

</details>

<details>

<summary>What is the recommended reward?</summary>

To ensure that quest deployers are rewarding the quests appropriately, we take a look at similar quests that have recently been deployed and suggest the best reward amount to meet your goals.

</details>

<details>

<summary>What is a gas rebate?</summary>

If you’re looking to incentivize users for gas for doing a transaction, you can create a quest. Note: the reward is fixed during the duration of the quest. The reward amount may be slightly higher or lower than the gas cost as a result.

</details>

<details>

<summary>How can I schedule a quest?</summary>

You can schedule a quest through the time picker. You can either have the quest start immediately or schedule it in the future. Quests have a maximum duration of 30 days.

</details>


# Protocol Rewards Overview

We believe everyone should be able to earn by participating in the growth of a protocol. That's why we launched Quest Protocol earlier this year, with tools like Quest Terminal to make deploying a quest onchain even easier. Protocol Rewards is the next step towards this vision by making it easy for anyone to earn for contributing to the growth of Quest Protocol itself. We're committed to making participation in the crypto ecosystem more accessible and rewarding for everyone.

#### The 4 Roles in the Quest Protocol Ecosystem:

* **Quest Creators** - A wallet address that deploys a quest onchain
* **Quest Referrer** - A wallet address that refers a quest participant to complete a quest
* **Quest Participant** - A wallet address that completes a quest and earns a token reward
* **Core Team** - RabbitHole team that is maintaining the quest protocol

#### There are 2 fees which are re-distributed to Quest Protocol contributors:

**Protocol Fee**- This fee is equal to 20% of the total rewards being distributed for a given quest completion. The distribution of this fee is broken down as follow:

| Quest Creator | 10% of reward amount per quest completion |
| ------------- | ----------------------------------------- |
| Core Team     | 10% of reward amount per quest completion |

**Claim Fee**- This fee is 0.000075 ETH paid by Quest Participant at the time of quest completion.

| Quest Creator  | 0.000025 ETH per quest completion |
| -------------- | --------------------------------- |
| Quest Referrer | 0.000025 ETH per quest completion |
| Core Team      | 0.000025 ETH per quest completion |

#### Total Rewards Summary

Collectively each role earns the following rewards.

| Quest Creator     | 0.000025 ETH per quest completion and 10% of the reward amount per quest completion |
| ----------------- | ----------------------------------------------------------------------------------- |
| Quest Referrer    | 0.000025 ETH per quest completion                                                   |
| Core Developer    | 0.000025 ETH per quest completion and 10% of the reward amount per quest completion |
| Quest Participant | Reward Amount                                                                       |


# Quest Referrals

This program is designed to create a win-win-win scenario benefiting quest completors, quest referrers and Quest Protocol.

#### **Referrer Benefits:**

* **New Revenue Stream**: Referrers can create a new revenue stream by layering in quests for given projects. As referred users complete quests, the referrer earns 0.000025 ETH from the claim fee of each completed quest. These referral fees are automatically distributed via smart contracts ensuring transparency and timeliness.
* **Onchain Contribution**: Referrer contributions to the quest protocol are logged onchain providing a verifiable record of their impact within the ecosystem.

#### Quest Completor Benefits

* **Learning and Rewards**: Quest Completors get the opportunity to learn about crypto protocols by completing interactive quests and earning token rewards.
* **Onchain History:** Completing quests is a great way for users to build out their onchain history and demonstrate their value in supporting the crypto ecosystem.

#### **Quest Protocol Benefits:**

* **Expanded Distribution**: Quest Protocol benefits from the expanded distribution of quests. This leads to greater engagement, community growth, and a wider reach.

### **Getting Started with the Protocol Referral Earnings Program**

1. **Quest Promotion**: You can find your personal referrer tracking links within the RabbitHole in both the "Referrals" section and within each Quest Details page. The tracking link format will simply have a “wallet\_ref=\[address]” tracking parameter attached to the end of the RabbitHole link you’d like to use.
2. **Track and Earn**: When users click your referral links and complete quests on RabbitHole, you'll earn 0.000025 ETH from the claim fee for each completed quest. Users often complete many quests in a given session and you’ll get credit for all of the quest completions driven from your clicks. These referral fees will be automatically sent to your wallet via smart contract at the time of quest completion.

We’re excited to get the opportunity to partner with you! If you have any questions or comments feel free to drop into our [Discord](https://discord.com/invite/rabbitholegg).


# Completing Quests

RabbitHole is an interface managed by the core team that allows users to view and complete quests in Quest Protocol

[**Quest Overview Page**](http://rabbithole.gg/quests) - view a list of quests that are currently live on quest protocol, and use filtering options to find ones you're most interested in.

<figure><img src="/files/aTq6UgZ2uS2ypPPSUZ0S" alt=""><figcaption></figcaption></figure>

**Quest Details Page** - Click into a given quest from the Quest Overview page to see pertinent quest information and the action required to complete the quest.

<figure><img src="/files/k8FEU79p1vaCG6jzt2Ve" alt=""><figcaption></figcaption></figure>

**Completing Quests** - The Quest Protocol indexer monitors the blockchain watching for your completion of the Quest Action. Usually this is shortly after the action is complete, but sometimes it may take minutes for the action to be acknowledged by the indexer. Once acknowledged you will be able to complete your quest by claiming the token reward.

<figure><img src="/files/xw5wn0AK1NlUkuZRgAKI" alt=""><figcaption></figcaption></figure>


# Power Score

Power Score is a reflection of your journey within Quest Protocol. The more quests you complete and the more rewards you earn, the higher your Power Score. Each quest you complete has an associated point value that goes towards your power score, as noted in the screenshot below:

<figure><img src="/files/SFFUBXpeHnaE7VXv6o0F" alt=""><figcaption></figcaption></figure>

#### **Quest Eligibility + Sybil Resistance Layer**

The Quest Protocol is a dynamic quest marketplace, where quest creators can set eligibility criteria based on user attributes they’re seeking. Power Score will now be available to creators to help them to target the top 10% or 50% highest Power Score addresses on Quest Protocol. This system helps dedicated users get access to more exclusive quest opportunities.

#### **Earning & Calculating Points**

Every quest you complete on Quest Protocol has an associated point total for it which impacts your Power Score. Here's a breakdown of how points are calculated for each quest:

* **Base Points:** Every quest, regardless of its complexity or reward, starts with a base of 10 points.
* **Reward-Based Points:** These points are derived from the reward value of a quest. The higher the quest reward is, the higher the point total. Below is a table which lays out Marginal Point Bracket for how points are calculated for a given quest (functions like a marginal tax bracket). NFT reward quests are assigned a reward value of 100k Gwei for determining quest points.

| Reward Point Brackets | Points Per Gwei |
| --------------------- | --------------- |
| 0 - 50k Gwei          | 0.0002          |
| 50k - 250k Gwei       | 0.0001          |
| 250k - 500k Gwei      | 0.00002         |
| 500k+ Gwei            | 0.000004        |

Example: A quest with a reward of 200k gwei would have points calculated as follows:

* \[Base] + \[Reward-Based Points] = 10 + \[(50k\*.0002) + ((200k - 50k)\*.0001)] = 10 + \[10 + 15] = 35 points

Other notes:

* There is a point cap of 250 for a given quest no matter how high the reward amount is.
* Quests completed from the launch of Quest Protocol in February 2023 have their associated points calculated with the above method.
* Point calculations for future quests may be subject to change.

You can stay up-to-date on your Power Score and ranking within the quest ecosystem here: <https://rabbithole.gg/leaderboard>


# Quest Protocol Contracts

| Quest Factory      | 0x52629961F71C1C2564C5aa22372CB1b9fa9EBA3E |
| ------------------ | ------------------------------------------ |
| RabbitHole Receipt | 0xEC3a9c7d612E0E0326e70D97c9310A5f57f9Af9E |
| Quest Terminal Key | 0x6Fd74033a717ebb3c60c08b37A94b6CF96DE54Ab |

* `Quest Factory` ([code](https://github.com/rabbitholegg/quest-protocol/tree/main//contracts/QuestFactory.sol))
  * Creates new `Quest` instances of an ERC-20 reward Quest.
* `RabbitHole Receipt` ([code](https://github.com/rabbitholegg/quest-protocol/tree/main//contracts/RabbitHoleReceipt.sol))
  * An ERC-721 contract that acts as a proof of on-chain activity. Claimed via usage of ECDSA sig/hash
* `ERC-20 Quest` ([code](https://github.com/rabbitholegg/quest-protocol/tree/main//contracts/Erc20Quest.sol))
  * A Quest in which the reward is an ERC-20 token


# How Contracts Work

<figure><img src="/files/GSMi6BGzDTrWbhqshOuf" alt=""><figcaption></figcaption></figure>

The sequence of events is:

1. Call `QuestFactory.createQuest(rewardType: [erc20]` defined as:

   ```
    function createQuest(
        address rewardTokenAddress_,
        uint256 endTime_,
        uint256 startTime_,
        uint256 totalParticipants_,
        uint256 rewardAmountOrTokenId_,
        string memory contractType_,
        string memory questId_
    )
   ```

   * `rewardTokenAddress_`is the contract address for the ERC20 token reward
   * `endTime` is the end time in unix for the Quest.
   * `startTime` is the start time in unix for the Quest.
   * `totalParticipants` is the total number of accounts that can participate in the Quest.
   * `rewardAmountOrTokenId_` is the reward amount if it's an ERC-20 token (ie. 1 UNI token out of the 1,000 total)
   * `contractType_` will be either an ERC-20 token.
   * `questId` is an internal UUID that connects multiple systems and acts as a universal UUID
2. Transfer rewards to the newly created Quest. You can just transfer in rewards directly.
3. The Quest Factory will keep track of receipts for a given user and quest. There is a finite amount of participants allowed which is calculated by taking the totalRewards / rewardAmountOrTokenId.
4. Execute the start function. This will validate that the Quest is ready for public and upon reaching the effective StartDate, will be ready for use.&#x20;


# Submitting Actions

If you want your project and actions to be added to Quest Protocol, you will need to submit a request for review by the core team. We require projects and actions to be verified to ensure a level of quality for users and for technical integration purposes. It's also possible to get an action added by creating a plugin for it.

Requirements for Actions:

* Actions must be onchain
* Currently supports the following networks: Ethereum, Optimism, Arbitrum, Polygon
* A single action per quest - one contract address per action

Things we need to create an Action:

* Action Type (ie. Swap, Stake, Lend, etc.)
* Contract Address
* Network that the contract lives on
* URL to complete action
* Action Description
* ABI of the smart contract
* Function name(s) that users call on the smart contract

At this time, [submitting a plugin](/for-developers/submitting-plugins) is our preferred method of submitting actions but requires more development effort. If creating a plugin isn't possible for your project feel free to follow this process still keeping in mind we're more likely to add plugins than actions.

To submit a new action, you can do so by filling out [this form](https://airtable.com/shrLVU8kSFnJPLjNn).


# Submitting Plugins

Plugins are the future of actions

Quest Plugins are how we translate transaction data into actions. It’s how our platform can take information from smart contracts deployed for any EVM native protocol and quickly parse it into a standardized format. Using this standardized action information we determine if a given user has transactions that meet the specific criteria for a given quest.

For example, writing a plugin for Uniswap that translates a `swap` action allows users to create, and complete Quests to on Uniswap . The plugin is used by our Indexing service to parse transaction data into specific information about that allowing quests to target certain amounts, certain recipients, or even certain tokens.

Plugins live in our [QuestDK-Plugin Repo](https://github.com/rabbitholegg/questdk-plugins) and can be developed from our templates with a few simple steps. Some protocol integrations are more difficult than others.

Plugin implementation is relatively simple, although it requires a strong understanding of the project you're integrating with. Oftentimes we rely on a projects API to get fresh and consistent information on the project we're integrating with. Each plugin has a user defined `pluginID` that needs to be [added to the plugin registry](https://github.com/rabbitholegg/questdk-plugins/blob/main/packages/registry/src/index.ts#L15) and should be descriptive of the project you're integrating. We also require functions to return the [list of all supported chains](https://github.com/rabbitholegg/questdk-plugins/blob/main/packages/connext/src/Connext.ts#L125) \[ `getSupportedChainIds` ], and [the list of supported tokens](https://github.com/rabbitholegg/questdk-plugins/blob/main/packages/connext/src/Connext.ts#L111) \[ `getSupportedTokenAddresses` ] for each supported chain. The supported chains and tokens are often where a project specific API can come in handy. The most complex aspect of plugin implementation is the `bridge` `mint` and `swap` functions which are used to return a `TransactionFilter`. For our backend, we store this filter in the quests `actionSpec` which we later read when applying filters in our indexer. The generally provides a way of finding or filtering out transactions that fulfill the requirements of a quest’s `action` property.

At this time we only support plugins for `swap`, `mint`, and `bridge` but we’re constantly adding new actions (`stake` forthcoming). If there’s a specific action you’d like supported please reach out.

If you'd like to build a plugin and get support for your protocol on RabbiteHole all you need to do is submit a PR with the finished plugin. When in doubt please [join our discord](https://discord.com/invite/rabbitholegg) for assistance building a plugin.


# Submitting Tokens

Quest Protocol has a token whitelist for each of the following networks. We currently support the following tokens:

Ethereum Mainnet:

* USDC
* wETH

Polygon

* UDSC
* MATIC
* wETH

Arbitrum

* ARB
* wETH
* USDC

Optimism

* OP
* wETH
* USDC

NOTE: If you'd like to submit a token to the whitelist, please get in touch at <hello@rabbithole.gg> and we'll be in touch.&#x20;


# Public API

Public RabbitHole API quest endpoints

#### Quest Retrieval

The RabbiteHole API allows third parties to list relevant quests within their application. Today, we provide simple endpoints to retrieve a paginate list of quests, or a specific quest given a `UUID`.

## Get a List of Quests

<mark style="color:blue;">`GET`</mark> `https://public-api.rabbithole.gg/v1/quests`

Returns all the quests for an address, status, and value

#### Query Parameters

| Name         | Type   | Description                               |
| ------------ | ------ | ----------------------------------------- |
| address      | String | Users address we're retrieving quests for |
| status       | String | Status of quests to return                |
| ethValue     | String | Minimum quest value to return             |
| questNetwork | String | Claim network for quest                   |
| taskNetwork  | String | Network action should be completed on     |
| pageNo       | String | For pagination                            |
| pageSize     | String | For pagination                            |

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

```json
[
  {
    "quest": {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", // UUID
      "appLink": "string",
      "iconOption": "string",
      "imagePath": "string",
      "name": "string",
      "questEnd": "string",
      "questStart": "string",
      "description": "string",
      "network": "eth-mainnet",
      "status": "string",
      "createdAt": "string",
      "contractAddress": "string",
      "creatorAddress": "string",
      "allowlistEnabled": true,
      "task": {
        "name": "string",
        "description": "string",
        "link": "string",
        "iconOption": "string",
        "contractAddress": "string",
        "network": "eth-mainnet"
      }
    },
    "reward": {
      "amount": "string",
      "allocations": 0,
      "allocationsClaimed": 0,
      "type": "string",
      "tokenSymbol": "string",
      "token": "string",
      "network": "string",
      "tokenImage": "string",
      "ethValue": "string",
      "tokenContractAddress": "string",
      "decimals": 0,
      "tokenId": "string"
    }
  }
]
```

{% endtab %}
{% endtabs %}

[**Try it Out**](https://public-api.rabbithole.gg/openapi/#/Quest/get_v1_quests)

## Get a Single Quest

<mark style="color:blue;">`GET`</mark> `https://public-api.rabbithole.gg/v1/quest`

#### Query Parameters

| Name                                      | Type   | Description       |
| ----------------------------------------- | ------ | ----------------- |
| address                                   | String | User adress       |
| questId<mark style="color:red;">\*</mark> | String | UUID of the quest |

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

```json
{
  "quest": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "appLink": "string",
    "iconOption": "string",
    "imagePath": "string",
    "name": "string",
    "questEnd": "string",
    "questStart": "string",
    "description": "string",
    "network": "eth-mainnet",
    "status": "string",
    "createdAt": "string",
    "contractAddress": "string",
    "creatorAddress": "string",
    "allowlistEnabled": true,
    "task": { // Custom task RH descriptors
      "name": "string",
      "description": "string",
      "link": "string",
      "iconOption": "string",
      "contractAddress": "string",
      "network": "eth-mainnet"
    }
  },
  "reward": {
    "amount": "string",
    "allocations": 0,
    "allocationsClaimed": 0,
    "type": "string",
    "tokenSymbol": "string",
    "token": "string",
    "network": "string",
    "tokenImage": "string",
    "ethValue": "string",
    "tokenContractAddress": "string",
    "decimals": 0,
    "tokenId": "string"
  }
}
```

{% endtab %}
{% endtabs %}

#### [Try it Out](https://public-api.rabbithole.gg/openapi/#/Quest/get_v1_quest)

#### Further Endpoints

The ability to create quests, and receive signatures to claim quests are possible today using our internal API. If you have a use case that requires retrieving quest signatures or submitting claims please reach out for information on how to complete these queries. When these endpoints are made public the correct documentation will be added here.


# Codearena Audit

Quest Protocol has been audited by Codearena. You can view the Audit results [here](https://code4rena.com/reports/2023-01-rabbithole).


