---
title: "List your webhooks (ULTRA, direct keys only; never includes the secret)"
method: GET
path: "/webhooks"
---

# List your webhooks (ULTRA, direct keys only; never includes the secret)

`GET /webhooks`

## Request

- Base URL: `https://api.livetennisapi.com/api/public/v1`
- URL: `https://api.livetennisapi.com/api/public/v1/webhooks`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

## Response `200`

Your webhooks

- object
  - `data` Webhook[]
    - `id` integer
    - `url` string
    - `events` string[]
    - `enabled` boolean: Set to false automatically after 25 consecutive delivery failures — delete and re-register to resume.
    - `created_at` string, date-time, nullable
    - `last_delivery_at` string, date-time, nullable
    - `consecutive_failures` integer
    - `last_error` string, nullable
    - `secret` string: Present ONLY on the 201 registration response — shown exactly once
    - `secret_note` string
  - `meta` object
    - `count` integer

## Other responses

- `401`: Missing, unknown, or disabled credentials
- `403`: Your tier doesn't unlock this endpoint
- `429`: Rate limit exceeded (Retry-After header present). Three body shapes, told apart by `error` and `scope`: the per-MINUTE limit (`rate_limited`, with `upgrade_url`, `tier` and `price` naming the next tier up); the per-DAY quota (`rate_limited` with `scope: "day"`, `limit_per_day`, and `resets_at` — the absolute ISO instant the daily window resets); and `abuse_throttled` with `retry_at_epoch` — a 24-hour block applied to clients that keep hammering far past their cap, which a well-behaved retry loop never sees. Fix the loop rather than retrying through it.

---

[API](https://skmtc.dev/livetennisapi/apis/live-tennis-api.md) · [All operations](https://skmtc.dev/livetennisapi/apis/live-tennis-api/llms.txt) · [OpenAPI document](https://skmtc.dev/livetennisapi/apis/live-tennis-api/revisions/7881947e8e43?raw)
