Skip to main content
Wildo.ai Coming soon

Events and external data

Check an endpoint before relying on it

Send a signed diagnostic through the real delivery transport and distinguish remote refusal from a local send failure.

A signed test reaches an endpoint and reports its rejection for diagnosis.

Check an endpoint before relying on it

An endpoint test sends a synthetic signed request through the same transport used for event delivery. It tells an administrator whether the endpoint accepted it, refused it, could not be reached or was never sent.

That distinction helps locate the next action: fix the receiver, the address or the application’s signing configuration.

Example — Find a wrong endpoint path

An administrator tests a new endpoint and receives a rejection response. The request reached a server, so the next step is to inspect its path or verification response rather than treating it as a connection outage.

For engineers

The webhookConfig.testEndpoint operation accepts an endpointId in its request body, uses the stored endpoint and the application’s signing key. It is an update-like operation because it sends real traffic, even though it creates no delivery-log row. It shares sendSignedWebhookRequest with the delivery worker, so timeout, signature header, URL guard and redirect behavior are exercised on the same path.

This is a real outbound request with synthetic claims. The receiver should identify the probe and verify it without treating it as an ordinary business event. It does not create a delivery-log row; the operation records an audit event separately.

The request and response below come from webhook-config.shared.resources-config.schemas.ts, with documentation comments omitted. Send the stored endpoint’s ID in the operation body; the returned URL confirms which destination was tested. The diagnostic includes both the transport verdict and details for correlating the attempt with the receiver.

export const WebhookConfig_TestEndpointRequestDto = z.object({
  endpointId: z.string().min(1),
});

export const WebhookConfig_TestEndpointResponseDto = z.object({
  endpointId: z.string(),
  url: z.string(),
  transportIsPlaintext: z.boolean(),
  outcome: z.enum(WebhookEndpointProbeOutcome),
  responseStatus: z.number().int().optional(),
  responseBodyTruncated: z.string().optional(),
  failureReason: z.string().optional(),
  durationMs: z.number().int().nonnegative(),
  signatureJti: z.string(),
  attemptedAt: z.date(),
});

Read the diagnostic outcome, not only the API status: a successfully executed probe may return HTTP 200 with UNREACHABLE. Unknown endpoint IDs, missing configuration and rate-limit refusal are request errors.

ACCEPTED means the endpoint returned 2xx. It only supports confidence in signature verification when that receiver actually verifies before responding; a server returning 200 unconditionally proves reachability, not verification. REJECTED retains a response status; UNREACHABLE covers transport failures; NOT_SENT separates a local signing problem.

Acknowledge a verified probe without running business work

Use the receiver verification shown in signed webhook delivery. It verifies the signature and raw-body hash before returning the authenticated synthetic claim. This illustrative handler fragment uses that verifyDelivery helper; acknowledge sends the HTTP response and handleBusinessEventOnce is the receiver’s own durable deduplication and business handler.

const delivery = verifyDelivery(headers, rawBody, applicationPublicKeyPem);
if (delivery.synthetic) {
  acknowledge(204);
  return;
}

await handleBusinessEventOnce(delivery.deliveryId, delivery.event);
acknowledge(204);

Do not branch on an unverified body field or decoded JWT. A failed verification must not receive a successful acknowledgment. The genuine event path must persist its delivery identity with its business effect; the probe path deliberately performs neither business work nor ordinary delivery processing.

Make the result actionable

Register and expose the webhook configuration’s normal administration operations. The test is rate-limited, and its limiter fails closed if unavailable. Do not add a second generic HTTP test button: it could pass while the actual signing or delivery path fails.

The probe is a diagnostic, not a guarantee of future delivery. After acceptance, emit a real configured resource event and inspect the delivery log and receiver behavior. Keep endpoint test handlers free of unintended business side effects and use HTTPS endpoints just as for production deliveries.

Building a B2B product or an internal tool?

Wildo is not self-service yet. Tell us what you have in mind and we will say plainly whether it fits, and what happens next.