Method GET/partner/webhooks/{webhook_id}

Read one notification subscription of your brand, with its address, its event types and its delivery health. Scope webhooks:read.

On this page

You read a single notification subscription, designated by its number. By the end of this page, you will know how to retrieve its destination address, the list of events it is subscribed to, whether it is on or off, and whether our deliveries to it succeed.

Full address:

HTTP
GET https://api.sealtrust.io/v1/partner/webhooks/{webhook_id}

The same endpoint also answers without the /v1 prefix, at https://api.sealtrust.io/partner/webhooks/{webhook_id}. Both addresses call the same code. Use the /v1 form for a new integration.

#Authorization

An API key in the Authorization header, in Bearer form, carrying the webhooks:read scope. A key that does not carry this scope receives a 403 whose message names the missing scope.

A subscription is visible only to a key of the brand it belongs to. A subscription number that belongs to another brand answers 404, just like a number that does not exist. The response never says whether the subscription exists elsewhere.

This read stays open whatever your plan. Only creating and changing a subscription require your plan to include notifications.

#Rate limit

We measure the rate over a fixed 60 second window. We apply the value set on your account if we set one, otherwise the one from your plan. With neither, the fallback value is 120 calls per window.

Two counters overlap, with the same limit: one per key, one for the sum of all your brand's keys. Creating extra keys therefore does not raise the total rate allowed.

We authenticate your key first. We then check the limit, before checking the webhooks:read scope and before any read of the subscription.

A refusal returns 429 with Retry-After, expressed in seconds remaining in the current window. This value is never below 1. Set your retries from Retry-After.

#Rate limit headers

The response carries a set of X-RateLimit-* headers describing the more constraining of the two counters, your key's or your brand's.

HeaderContent
X-RateLimit-Limitthe limit applied over the window
X-RateLimit-Remainingwhat you have left in the current window
X-RateLimit-Resetthe timestamp of the end of the window, in seconds
X-RateLimit-Scopekey or brand, the counter used as the reference

We check your key before running its counter. A 401 response therefore carries only the set from the second counter, and no X-RateLimit-Scope.

#Path and query parameters

NameTypeRequiredDescription
webhook_idintegeryesThe subscription number, as creation and the list return it in the id field.

This endpoint has no query parameter.

#Headers

NameTypeRequiredDescription
AuthorizationstringyesBearer followed by your API key.

#Request body

None. This request has no body.

#Example request

Reading subscription number 7.

curl -i https://api.sealtrust.io/v1/partner/webhooks/7 \
  -H "Authorization: Bearer st_test_0000000000000000000000000000000000000000000000"

#Example response

HTTP code 200.

JSON
{
  "id": 7,
  "brand_id": 12,
  "url": "https://exemple-sas.test/sealtrust/evenements",
  "events": [
    "product.minted",
    "batch.completed"
  ],
  "is_active": true,
  "health": "healthy",
  "created_at": "2026-08-14T09:12:44.318000Z",
  "updated_at": "2026-08-20T07:03:11.902000Z"
}

The response has eight fields and nothing else.

FieldTypeDescription
idintegerThe subscription number.
brand_idintegerYour brand number.
urlstringThe address that receives the notifications. It always starts with https://.
eventsstring[]The event types this subscription is subscribed to. An empty list means no event will be delivered.
is_activebooleantrue when the subscription is on.
healthstringhealthy or degraded. See below.
created_atstringDate and time of creation, in universal time, formatted as ISO 8601.
updated_atstringDate and time of the last change, in universal time, formatted as ISO 8601.

health reads healthy as long as our deliveries to this address succeed. It moves to degraded when the last retry attempt fails in turn, and it returns to healthy as soon as a delivery succeeds. We write only these two values.

#Errors

The body of an error response carries a detail field.

CodeConditionWhat to do
401The Authorization header is missing. detail reads Missing Authorization header. The response also carries WWW-Authenticate: Bearer.Add the header.
401The Authorization header does not start with Bearer followed by a space. detail reads Invalid Authorization header format (expected 'Bearer <token>'). The response also carries WWW-Authenticate: Bearer.Fix the form of the header.
401What follows Bearer is empty, or shorter than 40 characters. detail reads Invalid API key format. This response does not carry WWW-Authenticate.Send the full secret, as the console displayed it to you at creation.
401The key sent is unknown. detail reads Invalid API key.Check that you are sending the full secret, with no space and no line break.
403The key is no longer in the active state. detail reads API key is revoked or API key is expired, depending on its state.Create a new key in the console.
403The key has passed its expiry date. detail reads API key has expired. We then switch its state to expired.Create a new key. The old one will never become valid again.
403The key does not carry the webhooks:read scope. detail reads Missing required scope: webhooks:read.Create a key carrying this scope. The scopes of an existing key cannot be changed.
404No subscription carries this number in your brand. detail reads Webhook subscription not found.Check the number with GET /v1/partner/webhooks. A subscription of another brand gives the same response, and so does a number larger than any number assigned.
422The number sent in the path is not an integer. The response details the rejected field.Send the id field as the list returns it, with no quotation marks and no decimal point.
429The rate limit of the key is reached. detail names the limit and the window. The Retry-After header and the X-RateLimit-* family accompany the response, with X-RateLimit-Scope: key.Wait the number of seconds given by Retry-After, then retry.
429The rate limit of the brand is reached, across all keys. X-RateLimit-Scope reads brand, and X-RateLimit-Remaining reads 0.Wait the number of seconds given by Retry-After. Creating an extra key does not raise this limit.
500A failure on our side. The body carries a short sentence, with no technical detail. Do not compare it character by character. The response carries an X-Request-Id header.Retry. If the failure persists, send us the value of X-Request-Id.
503The rate limiting service is momentarily unavailable. We refuse the call. detail reads Rate limiting temporarily unavailable, please retry shortly.Retry in a few moments. No data was read or changed.

#See also

Your answer opens a pre-filled email in your mail app, addressed to contact@sealtrust.io. You read it over before sending it.

Suggest a correctionReport a problem