Why placeholders show as text when PlaceholderAPI is not working
A placeholder such as %pvpmanager_combat_timeleft% shows as plain text when nothing on the server knows its name, so TAB, the chat plugin or the scoreboard passes it on unchanged. There is no error in the console for this. The text simply arrives as you typed it.
The word before the first underscore is the identifier, and it decides who should answer. pvpmanager points to PvPManager, vault to the Vault expansion, player to the Player expansion. PlaceholderAPI keeps a list of identifiers that are registered. Some arrive with the plugin itself, as soon as PlaceholderAPI is there to register them. Others are small expansions you download from PlaceholderAPI's eCloud.
| Placeholder | Identifier | Where it comes from |
|---|---|---|
%pvpmanager_combat_timeleft% | pvpmanager | PvPManager itself, once PlaceholderAPI is installed |
%vault_eco_balance% | vault | eCloud expansion Vault, plus Vault and an economy plugin |
%player_name% | player | eCloud expansion Player |
%server_online% | server | eCloud expansion Server |
%luckperms_prefix% | luckperms | eCloud expansion LuckPerms |
We saw this one on a customer server
A combat timer showed %pvpmanager_combat_timeleft% in the tab list and above players' heads. PvPManager was fine. PlaceholderAPI was not installed, so PvPManager had nowhere to register its placeholders.
Test a placeholder with /papi parse
/papi parse me %player_name% asks PlaceholderAPI to fill in a placeholder right now, so you know in one line whether the placeholder works before you blame TAB or your scoreboard. me means yourself, so it only works in game. From the console, name an online player, or use --null for placeholders that do not need a player.
Console; in game, start with /
papi parse MossyOtter %player_name%
papi parse MossyOtter %vault_eco_balance%
papi parse --null %server_online%
papi list| What you get back | What it means | Next step |
|---|---|---|
| A real value, like your name | The placeholder works | The problem is in the plugin that shows it |
| The placeholder, unchanged | Nobody registered that identifier, or it is misspelled | Check /papi list and the spelling |
The server does not know /papi | PlaceholderAPI is not installed, or it did not start | Install it and restart |
/papi list prints every registered identifier after A total of ... placeholder hook(s) are active. If the word before the first underscore of your placeholder is not in that list, nothing can fill it in yet. There are no placeholder hooks active! means no expansion is registered at all.
PAPI ecloud download: install the missing expansion
/papi ecloud download Player installs the expansion behind every %player_...% placeholder, and /papi reload switches it on. The same goes for Server, Vault, LuckPerms and the rest. PlaceholderAPI confirms the download and reminds you of the reload, so do not skip it.
Console; in game, start with /
papi ecloud download Vault
papi reload
papi parse MossyOtter %vault_eco_balance%/papi ecloud placeholders Vault lists what an expansion offers before you install it, and /papi ecloud list installed shows what you already have. When a download does not work, the reply says why:
| PlaceholderAPI says | What to do |
|---|---|
Failed to find an expansion named: ... | There is no eCloud expansion by that name. If the placeholder belongs to a plugin like PvPManager, that plugin registers it itself: install the plugin and restart. |
The eCloud Manager is not enabled! To enable it, set 'cloud_enabled' to true and reload the plugin. | Set cloud_enabled: true in plugins/PlaceholderAPI/config.yml and restart the server. |
There is no available data from the eCloud. Please try running /papi ecloud refresh. | Run /papi ecloud refresh and try again. If it stays empty, the server cannot reach the eCloud right now. |
A plugin's own placeholders never need the eCloud. They register when that plugin starts, and only if PlaceholderAPI is already there. So when you add PlaceholderAPI to a server that has been running for a while, restart once. That lets PvPManager and plugins like it start after PlaceholderAPI and register their placeholders.
TAB placeholders not working: what TAB fills in itself
TAB fills in more than 30 placeholders of its own, such as %player%, %online%, %ping%, %world% and %tps%, without PlaceholderAPI. Everything else, like %vault_eco_balance% or a combat timer from another plugin, TAB hands to PlaceholderAPI. Notice the difference in shape: TAB's own names have no plugin name in front, and some use a hyphen, such as %luckperms-prefix%.
When /papi parse gives a real value but TAB still shows the placeholder, check the spelling in TAB's own config first; one missing % is enough. A value that works but lags behind comes from TAB's refresh timer. Under placeholder-refresh-intervals in TAB's config.yml, the default is 500 milliseconds, and a single placeholder can get its own interval.
plugins/TAB/config.yml
placeholder-refresh-intervals:
default-refresh-interval: 500
"%server_uptime%": 1000Fix a placeholder that shows as text, step by step
Copy the placeholder exactly
Take it from the config that shows it, percent signs included. Most failures that are not a missing expansion turn out to be a typo.
Run /papi parse
In game,
/papi parse mefollowed by the placeholder. A real value means the placeholder is fine and the displaying plugin needs a look.Install PlaceholderAPI if /papi is unknown
On Lodehost, open the Plugins tab, search the plugin catalog for PlaceholderAPI and click Install. Then restart, so the other plugins register their placeholders with it.
Add the expansion that is missing
Compare the identifier with
/papi list. For an eCloud expansion, run/papi ecloud downloadwith its name, then/papi reload. For a plugin's own placeholders, make sure that plugin is installed and started.Parse again, then look in game
When
/papi parsereturns a value, the tab list, chat or scoreboard picks it up at its next refresh.
Written and checked by the Lodehost team, last reviewed on 7 November 2026.






