> For the complete documentation index, see [llms.txt](https://docs.floral.fun/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.floral.fun/integration-guides/quest-platforms.md).

# Quest platforms

1. **Add Floral as a platform.** Show Connect Floral beside your other social accounts, and offer Floral quest types to campaign creators.
2. **Link the account.** Run [Floral Connect](/authentication/floral-connect.md) with `profile:read quests:verify`, then store the `id` from `GET /v1/users/me`.
3. **Set up the campaign.** Check targets when a campaign is created: `GET /v1/posts/{id}` must succeed for like, comment, repost and quote quests, since non-public posts can't be verified. Creators can paste an ID from a post's floral.fun link, or a `@handle` for accounts and communities. For `join_community` quests, `GET /v1/communities/{id}` shows whether the community is paid or holders-only.
4. **Verify on demand.** When a participant clicks Verify, call `POST /v1/quests/verify` with `campaign_id` and your campaign window. Each campaign needs its own `campaign_id`. With a backend, an [app token](/authentication/scopes-and-tokens.md#which-token-to-use) saves storing a token for each user. There's no bulk endpoint, so check one user and action at a time and stay within your [rate limit](/developer-resources/rate-limits.md).
5. **Award once.** Use `verification_id`, as described in [Preventing duplicate rewards](/api-reference/verification.md#preventing-duplicate-rewards), and allow only one reward per Floral `id` per campaign.

Handle these outcomes:

| Response                                                 | What to do                                                                               |
| -------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| `verified: false`, `not_completed`                       | Ask the user to complete the action                                                      |
| `verified: false`, `not_public`                          | The repost or quote isn't public. Ask the user to change its audience                    |
| `verified: false`, `before_campaign` or `after_campaign` | The action is outside the campaign window. Don't award                                   |
| `verified: false`, `completion_time_unknown`             | Floral has no time on record for the action. Don't award, or ask the user to do it again |
| `401 invalid_token`                                      | Refresh the token. If that returns `invalid_grant`, ask the user to reconnect            |
| `403 user_not_linked`                                    | The user disconnected. Ask them to reconnect                                             |
| `404 target_not_found`                                   | The target was deleted or made non-public. Tell the campaign creator                     |
| `429 rate_limited`                                       | Wait for `Retry-After`, then retry                                                       |

## Post-creation quests

Use `create_post` for quests such as "post about us with #floral". Send your rules on each check. See [Verify a new post](/api-reference/verification.md#verify-a-new-post-with-create_post). Tell participants the post must be public, because `reason` won't distinguish a private post from no post.


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.floral.fun/integration-guides/quest-platforms.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
