# Webhooks

## Webhooks

Before webhooks, the only way to get data out of Scoreholio Seasons was to log in and run a report or an export — a manual, after-the-fact snapshot.

Webhooks flip that around. Instead of you coming to get the data, Scoreholio pushes it to you the moment something changes. You give us a URL, tell us which events you care about, and we knock on that URL every time one of them happens.

<br>

This means you can:

* Sync members into your CRM the moment they sign up — no nightly export.
* Post to Slack/Discord/Teams when a new tournament is created.
* Trigger an email when a season transaction is recorded.
* Keep an external dashboard or spreadsheet up to date in real time.

Webhooks are currently the only way to programmatically get data out of Seasons. There is no public REST API.

### Don't have a developer? Use Zapier.

You don't need to write any code to use webhooks. Zapier (and similar tools like Make, n8n, or Pipedream) can catch a Scoreholio webhook and turn it into almost any action you can think of — add a row to a Google Sheet, send a Mailchimp campaign, post in Slack, create a HubSpot contact, send an SMS, and so on.

Here's how to wire it up in Zapier:

1. In Zapier, create a new Zap and choose Webhooks by Zapier as the trigger.
2. Pick the Catch Hook event.
3. Zapier will give you a URL that looks something like <https://hooks.zapier.com/hooks/catch/12345/abcde/>. Copy it.
4. In Scoreholio, go to Settings → Webhooks → Add Webhook, paste that URL in, and pick the events you want.
5. Save. Now do the thing in Scoreholio that should trigger the event (e.g. add a test member) so Zapier can see what the payload looks like.
6. Back in Zapier, click Test trigger — you should see the event come through.
7. Add whatever action you want next: Google Sheets, Slack, Mailchimp, Gmail, etc.

Zapier's free plan includes Webhooks by Zapier, but heavy event volumes may push you onto a paid plan. If you're expecting lots of events, check Zapier's task limits.

The same pattern works for Make, n8n, Pipedream, and other no-code tools — they all have a "webhook trigger" or "catch webhook" step.

### What can you listen for?

Whenever one of these things happens in your account, we'll send a message to your URL:

* Seasons — created, updated, deleted
* Tournaments — created, updated, deleted
* Members — created, updated, deleted
* Season transactions — created, updated, deleted
* Organizers — created, updated, deleted
* Teams — created, updated, deleted (only if team rankings are turned on for that season)

You pick exactly which ones you care about — no need to subscribe to all of them.

### How to set one up

1. Open <https://seasons.scoreholio.com> and login with your Pro Account
2. Go to Settings → Webhooks
3. Click Add Webhook
4. Paste the URL where you want us to send the events (e.g. <https://your-server.com/scoreholio-events>, or your Zapier Catch Hook URL)
5. Check the boxes for the events you care about
6. (Optional) Pick specific seasons to watch — leave it blank to get events for all seasons
7. Click Save

When you save it, we'll show you a signing secret — copy it somewhere safe. We will only show it once. You'll need it to verify that messages are really coming from us (see below).

### "Just for these seasons" vs "all seasons"

By default a webhook fires for every season in your account. If you only care about, say, your Spring 2026 league, click Edit Seasons in the form and pick the ones you want.

Heads-up: season.created, season.updated, and season.deleted always fire for every season regardless of this filter — because at the moment a season is created or deleted, the filter doesn't really apply yet.

### How do I know it's really Scoreholio?

Every request we send includes a header called X-Scoreholio-Signature. It's a fingerprint made from your signing secret plus the body of the message.

When you receive a webhook:

1. Take the raw request body
2. Compute the same fingerprint using your signing secret
3. Compare it to the value in the header
4. If they match → it's us. If they don't → throw it away.

This stops random people on the internet from POSTing fake events to your URL.

If you're using Zapier (or another no-code tool), you can skip the signature check — Zapier's webhook URLs are already a long random string that's nearly impossible to guess. Signature verification is mainly for when you're running your own server.

### Pausing a webhook

If your server is down for maintenance, you don't have to delete the webhook — just edit it and flip Active to Paused. We'll stop sending until you flip it back.

### How do I know it's working?

The webhook list shows you, for each one:

* Last — was the most recent delivery a ✓ or a ✗
* When — how long ago we last tried to send

If you keep seeing ✗, your URL probably isn't responding with a 2xx status code, or it's down.

### Deleting

Click Options → Delete on the row. It stops receiving events immediately. (The signing secret is gone forever too, so if you ever re-create it, you'll get a new secret.)

<br>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.scoreholio.com/scoreholio-seasons/what-is-scoreholio-seasons/webhooks.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
