SolidHooksSolidHooks/ Docs

How SolidHooks works

The pipeline a webhook follows, the objects involved and how they relate, and where the API, dashboard and agents fit.

SolidHooks sits between the service that sends a webhook and the endpoint that needs it. It accepts the request, checks it, stores it, and delivers it to every destination you routed it to, retrying on failure.

The pipeline

provider → source (verified) → event (stored) → connections (matched) → deliveries (retried) → destination
  1. A provider posts to a source's ingest URL.
  2. The source verifies the request, if verification is configured.
  3. The request is stored as an event.
  4. Connections attached to the source are matched, optionally filtered by event type.
  5. Each match produces a delivery.
  6. The delivery is sent to the destination and retried on failure.

The objects

organisation
├── connectors            (organisation-level, used by private destinations)
└── project
    ├── source ──┐
    │            ├── connection → destination
    │            │
    ├── event ───┘        (stored per source)
    └── delivery          (one event × one connection)
ObjectWhat it is
OrganisationThe billing and tenancy boundary. API keys belong to it.
ProjectA namespace inside an organisation. Sources, destinations, connections, events and deliveries each live in exactly one.
SourceAn inbound endpoint with an ingest URL (https://sdhk.events/<maskId>). It can verify requests.
DestinationAn outbound HTTP endpoint, either public or private.
ConnectorAn organisation-level agent you run in your network so a destination can be reached without a public URL. See Private delivery.
ConnectionRoutes one source to one destination, optionally filtered by event type. A source can have many.
EventA stored inbound request: raw body, headers and parsed payload.
DeliveryOne event shipped to one destination through one connection, with its attempts.

What happens to one request

When a request reaches an ingest URL, SolidHooks works through these checks in order:

  1. Rate limit. If the source has a rate limit set, requests over it get 429 before any storage happens. See Rate limits.
  2. Verification. The configured verifier checks the signature. On failure the caller gets an opaque 401, and the request is stored as an event with status: "rejected" and a rejectionReason. Rejected events are never deduplicated and never delivered. See Verification.
  3. Idempotency. If the source has idempotencyKeys and an earlier event matches, the response is {"ok":true,"duplicate":true} and nothing new is stored. See Idempotency.
  4. Quota. If the organisation has used its delivery quota on a plan that hard-caps, the request is refused with 429 QUOTA_EXCEEDED before anything is stored. Duplicates never count against it. See Plans.
  5. Store and route. The event is stored and the response is {"ok":true,"eventId":"evt_..."}.

After step 5, the event gets a status:

StatusMeaning
receivedMatched at least one connection and was dispatched.
filteredConnections exist, but their event-type filters excluded it.
unmatchedThe source has no active connections.
rejectedFailed verification.

Fan-out and billing

An event routed to three connections creates three deliveries. The delivery is the billable unit, so fan-out multiplies what you use.

  • Retries reuse the same delivery and are free.
  • A replay creates new deliveries and is billed.
  • Duplicate requests and rejected events create no deliveries.

Where the API, dashboard and agents fit

All three act on the same resources.

  • API. https://api.solidhooks.com/v1/ with an API key. Everything the dashboard does for webhooks is available here, and the OpenAPI spec is at /v1/spec.json.
  • Dashboard. dash.solidhooks.com is where you sign up, create API keys, complete the first billing checkout and approve agents.
  • Agents. An agent can use an API key a human gave it, or its own delegated identity that a human approves. See Agent Auth. The agent guide is served at /llms-full.txt on the API host.

Webhooks themselves only go to the ingest origin. The management API has no ingest endpoint.

Next steps

  • Quickstart — build the pipeline and send a test request
  • Sources — providers and verification
  • Connections — routing and filters
  • Retries — how failed deliveries are retried