Webhook IP API

API reference

Webhook IP HTTP endpoints on api.syndaq.com.

All Webhook IP endpoints are served from https://api.syndaq.com/v1/webhookip/.

Authenticated requests require a valid Webhook IP key. Lookup routes require your wk_sec_ secret key.

Endpoints overview

MethodPathAuthPurpose
GET/v1/webhookip/lookupSecret keyLookup by ?ip= (optional ?provider=)
GET/v1/webhookip/lookup/{ip}Secret keyLookup by IP in the URL path
GET/v1/webhookip/statusPublic or secret keyPlan limits and quota snapshot

Response headers

Successful and error responses may include:

HeaderDescription
X-Request-IdUnique ID for support and log correlation
X-RateLimit-LimitPlan requests per minute for this key
X-RateLimit-RemainingRequests left in the current minute window
X-RateLimit-ResetUnix timestamp when the minute window resets
X-Quota-LimitMonthly quota for the subscription
X-Quota-RemainingLookups left this calendar month (UTC)
X-Quota-PeriodCurrent quota month (YYYY-MM)
Retry-AfterSeconds to wait after HTTP 429

GET /v1/webhookip/lookup

Checks whether a public IP matches Syndaq-maintained webhook provider ranges.

Request

Pass the target IP using one of these forms:

GET /v1/webhookip/lookup/140.82.112.1
GET /v1/webhookip/lookup?ip=140.82.112.1
GET /v1/webhookip/lookup?ip=140.82.112.1&provider=github

Headers:

Authorization: Bearer wk_sec_YOUR_SECRET_KEY

v1 scope

v1 performs range matching against Syndaq's webhook provider list (for example GitHub, Stripe, Slack, and other maintained senders). Coverage may expand over time. Use alongside provider signature verification when the sender supports it.

Success response (200)

{
  "success": true,
  "ip": "140.82.112.1",
  "cached": true,
  "matched": true,
  "providers": [
    { "id": "github", "name": "GitHub" }
  ],
  "request_id": "e6d04020be9b57b1e1069d6e483c0443"
}

When no provider matches:

{
  "success": true,
  "ip": "203.0.113.10",
  "cached": true,
  "matched": false,
  "providers": [],
  "request_id": "e6d04020be9b57b1e1069d6e483c0443"
}

Response fields

FieldTypeDescription
ipstringNormalized IP address that was checked
cachedbooleantrue when Syndaq already holds a recent result for this lookup
matchedbooleantrue if the IP falls in at least one known webhook range
providersarrayMatching providers (id, name)

GET /v1/webhookip/status

Returns key status, plan limits, and quota usage without performing a lookup.

Request

GET /v1/webhookip/status
Authorization: Bearer wk_sec_YOUR_SECRET_KEY

The public key (wk_pub_) is accepted on this route.

Success response (200)

{
  "success": true,
  "status": "active",
  "product": "webhookip",
  "plan": "starter",
  "rate_limit_per_minute": 120,
  "monthly_quota": 10000,
  "quota_unlimited": false,
  "quota_remaining": 9912,
  "quota_period": "2026-07"
}

Errors

Failed requests return JSON with success: false, error, error_code, and usually request_id.

HTTPerror_codeTypical cause
400invalid_ipMissing or malformed IP address
401missing_credentialsNo API key provided
401invalid_api_keyUnknown, inactive, or revoked key
401wrong_key_typePublic key used on a lookup endpoint
403ip_not_allowedCaller IP not on the key allowlist
422ip_not_routablePrivate, reserved, or unsupported address
429rate_limit_exceededPer-minute limit exceeded
429quota_exceededMonthly quota exhausted
500internal_errorUnexpected server error

Handle non-200 responses in your application and retry transient errors with exponential backoff.