API keys & webhooks
On Developer (/dashboard/developer) you manage API keys and webhooks
for this tournament.
API keys
Section titled “API keys”“Create key” → give it a name, then pick a scope:
- Read & write — full access
- Read only — read access only
- Scores only — may only enter results
Right after creating a key, the full secret is shown once — “Copy your secret key now — for security it won’t be shown in full again.” After that you only see a masked version. In the table you can reveal a key’s value once per row, revoke it (block it), or delete it permanently.
Webhooks
Section titled “Webhooks”“Add webhook endpoint” → target URL, then the format:
- TAP JSON — POST body
{event, tournament_uuid, data}, optionally with anX-TAP-Secretheader for verification. - Discord — for a Discord channel webhook; no secret is sent here, Discord has no use for one.
Then you pick, via checkboxes, which events should be reported:
match.scheduled, match.schedule_proposed, match.schedule_agreed,
match.schedule_declined, match.schedule_defaulted, match.checkin,
match.called, match.started, score.created, match.finished,
match.reported, match.disputed, veto.completed, bracket.updated,
stage.completed, game.updated.
Each webhook can be tested, disabled, or deleted individually.
For Discord, let the bot do it
Section titled “For Discord, let the bot do it”If the target is a Discord channel, you do not have to create a webhook and copy its URL any more — and it is better not to, because that URL lets anyone who has it post in the channel.
Instead, connect the server once on the Discord card (same page, or the
Discord tab of a league), then have someone with Manage Server run
/tap-events on in the channel that should receive messages. The bot creates
the webhook there itself and tells TAP about it. Which messages arrive is then
a set of tick boxes on that card, per channel — and for a league a channel can
follow one division or the whole competition. A channel that follows the first
division keeps following it when next season puts a different tournament behind
it.
Channels set up this way are listed on the Discord card, not in the webhook table above: there is one place to change them, and disconnecting the server stops the messages.
Setting up a league’s channels in one command
Section titled “Setting up a league’s channels in one command”A league with four divisions needs four categories and eight channels, each one bound to the right division. Typed by hand that is twenty-odd steps, and every one of them can point at the wrong division.
/tap-setup-league does it in one: for every division of the running season it
creates a category named after the division with a #results and a
#matchday channel inside, binds the category — so a command typed in either
channel already means that division — and switches event messages on in
#results, so results appear there without anyone running /tap-events. Add
division: to do a single one, and league: if the server serves more than one
league.
Run it again whenever a division is added: it creates only what is missing.
The bot needs Manage Channels for this. If it was invited before this existed, Discord did not grant it — press Connect Discord once more, which does not create a second connection. The command says so if the permission is missing, and it checks Discord’s limits (500 channels, 50 categories, 50 per category) before creating anything: a half-finished server is worse than an empty one, because nothing shows where it stopped.