Delivery Logs
Conduit records every delivery attempt for every webhook. The records cover real inbound emails and simulated test sends. The logs are the main tool for three jobs: to make sure that a delivery succeeded, to debug a failing endpoint, and to audit what Conduit sent to your account.
Viewing logs
In the web UI
- Open the webhook detail page (
/app/webhooks/{id}). - Click Logs. For a quick view of the last few attempts, scroll to Recent Deliveries instead.
The full logs page (/app/webhooks/{id}/logs) lists every attempt, newest first,
with 20 entries per page. The sub-navigation has these filters:
| Filter | Shows |
|---|---|
| All | Every attempt. |
| Success | Only the attempts where the target returned 2xx. |
| Failure | 4xx, 5xx, timeouts, and connection errors. |
Using the API
GET /api/v1/webhooks/{id}/logs?page=1&page_size=50
For the full field list and the pagination details, see Delivery logs in the API reference.
What each column means
| Column | Description |
|---|---|
| Time | The time of the delivery attempt, in the timezone of your account. |
| Sender | The SMTP envelope sender (MAIL FROM). For a simulated entry, the synthetic sender that Conduit used. |
| Message ID | The SMTP Message-ID header from the inbound email. Empty for a simulation. |
| Transaction ID | The ID that Conduit gave to the received email and this delivery attempt. Empty for a delivery from before transaction IDs existed. |
| Status | The HTTP status from your endpoint. ERR means that Conduit could not reach it (DNS, TLS, timeout, or a refused connection). |
| Duration | The time in milliseconds, from the moment the request left Conduit to the arrival of the response. |
| Error | A short error message, when the attempt failed before Conduit could record a status. |
A SIM badge next to the sender means that the Simulate feature created the entry, and not a real inbound email.
Status color coding
| Range | Meaning | What the sending MTA sees |
|---|---|---|
2xx |
Success | 250 OK. The MTA accepted the message. |
4xx |
Permanent failure | 550. The MTA bounced the message. |
5xx or no status |
Transient failure | 450. The sending MTA retries. |
Getting Started → SMTP response codes documents how an HTTP status maps to an SMTP response. You can set your own mapping for each delivery with SMTP response headers.
Retention
Conduit keeps delivery logs for a fixed period and then deletes them
automatically. On the hosted Conduit service the default is 30 days. A
self-hosted instance sets the window with the
CONDUIT_DELIVERY_LOG_RETENTION environment variable.
For long-term retention, for compliance or analytics, fetch the logs over the API on a schedule and store them in your own system.
Debugging delivery failures
Repeated entries with a 5xx status or ERR mean that Conduit answered 450
to the sending MTA. The MTA then retries on its own schedule, and each retry
creates a new log entry. To stop the retry loop, correct the endpoint or return a
stable 2xx. For finer control, see
SMTP response headers.
If your endpoint runs but the Conduit logs show ERR, make sure that the target URL uses HTTPS with a publicly trusted certificate. Also make sure that your firewall does not block the source IP addresses of Conduit.
To make sure that a request came from Conduit, compare the logs of your own
endpoint against the attempted_at timestamp. Then verify the
X-Conduit-Signature header with your webhook secret.
Every delivery also carries an X-Conduit-Transaction-Id header. This header is
unique to the received email. Record it on your side to match a request to the
exact message that Conduit processed. The same ID appears in the Transaction ID
column, and on the log messages that Conduit writes for that email.
Next steps
- Testing Webhooks. Create a delivery on demand.
- Managing Webhooks. Deactivate, rotate, or delete a webhook.
- Using the API. Fetch the logs programmatically.