> For the complete documentation index, see [llms.txt](https://docs.mongenscave.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.mongenscave.com/premium-products/quests/supported-plugins/placeholderapi.md).

# PlaceholderAPI

With [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/) installed, the plugin registers the `quests` expansion automatically — no ecloud download needed. You can use these placeholders in any plugin that supports PlaceholderAPI.

All placeholders start with `%quests_`.

### Leveling <a href="#leveling" id="leveling"></a>

| Placeholder                | Value                                                                    |
| -------------------------- | ------------------------------------------------------------------------ |
| `%quests_level%`           | The player's quest level as a plain number.                              |
| `%quests_level_formatted%` | The level after applying your display rules (see Formatted level below). |
| `%quests_xp%`              | The player's current quest XP.                                           |
| `%quests_completed%`       | Total number of quests the player has ever completed.                    |

#### Formatted level <a href="#formatted-level" id="formatted-level"></a>

`%quests_level_formatted%` runs the raw level through the `placeholders.level` section of `config.yml`:

```yaml
placeholders:
  level:
    placeholder-condition:
      enabled: true
      levels: '%nexo_level_<player_level>%'

    overrides:
      "100": "&6MAX"
      "50": "&eVIP"
```

The lookup order is:

1. **`overrides`** — if the player's exact level is listed here, that text is returned. Handy for a `MAX` label at the level cap or special names at milestone levels.
2. **`placeholder-condition`** — if enabled, the level is inserted into the `levels` template in place of `<player_level>`, and the result is parsed as a placeholder again. The example above turns level 7 into `%nexo_level_7%`, which lets a resource-pack font plugin like Nexo render the level as a custom glyph.
3. Otherwise the plain number is returned.

### Player quests <a href="#player-quests" id="player-quests"></a>

| Placeholder                    | Value                                                                   |
| ------------------------------ | ----------------------------------------------------------------------- |
| `%quests_quests_total%`        | How many quests the player currently holds (accepted + active).         |
| `%quests_quests_accepted%`     | Quests the player has accepted but not started yet.                     |
| `%quests_quests_active%`       | Quests currently in progress.                                           |
| `%quests_quests_max_accepted%` | The player's accepted-quest limit (level and premium bonuses included). |
| `%quests_quests_max_active%`   | The player's active-quest limit (level and premium bonuses included).   |

{% hint style="info" %}
**Accepted** means the player picked the quest up from the board; **active** means they've started it and objectives are progressing. The two limits are configured under `quests.limits` in `config.yml`.
{% endhint %}

### Current quest <a href="#current-quest" id="current-quest"></a>

These two are made for scoreboards — they show what the player is working on right now:

| Placeholder                    | Value                                                                                                            |
| ------------------------------ | ---------------------------------------------------------------------------------------------------------------- |
| `%quests_current_name%`        | The display name of one of the player's ongoing quests.                                                          |
| `%quests_current_description%` | The description of that quest's most-progressed objective, with `{progress}` and `{required}` already filled in. |

If the player has **more than one** ongoing quest, the two placeholders rotate through them in sync, switching every few seconds. The interval is set in `hooks.yml`:

```yaml
hooks:
  PlaceholderAPI:
    placeholders:
      # Returned by any placeholder that has no value to show.
      empty: "---"
      # Seconds between rotations of %quests_current_name% / %quests_current_description%
      # when a player has more than one ongoing (accepted or active) quest.
      rotate-interval: 5
```

If the player has no ongoing quest, both return the `empty` text (`---` by default). The same fallback is used by every placeholder that has nothing to show.

### Daily board <a href="#daily-board" id="daily-board"></a>

| Placeholder            | Value                                                                                                                                                              |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `%quests_daily_size%`  | How many quests the player's daily board holds (level and premium bonuses included).                                                                               |
| `%quests_daily_reset%` | Time left until the player's board resets, formatted (e.g. `5h 23m`). Returns the `empty` text until the player has opened their board at least once this session. |

### Premium <a href="#premium" id="premium"></a>

| Placeholder                  | Value                                                                                                                             |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `%quests_type%`              | `premium` or `free` — lowercase, meant for comparisons in other plugins' conditions.                                              |
| `%quests_type_formatted%`    | `Premium` or `Free` — display text. Override it in `messages.yml` under `placeholders.type.premium` and `placeholders.type.free`. |
| `%quests_xp_multiplier%`     | The player's quest XP multiplier (e.g. `1.25`).                                                                                   |
| `%quests_reward_multiplier%` | The player's reward multiplier.                                                                                                   |

See the [Premium Pass](/premium-products/quests/features/premium-pass.md) page for how these values are built up.
