Skip to main content

Delivery & Monitoring

When you publish an event, Zyphr creates a delivery record for each matching endpoint, queues it for delivery, and tracks the full lifecycle — from initial attempt through retries to final resolution.

Delivery Lifecycle

Published → Queued → Delivering → Delivered (success)

Failed → Retrying → Delivered

Exhausted (all retries failed) → DLQ

Delivery Statuses

StatusDescription
pendingCreated, waiting in the delivery queue
deliveringCurrently being sent to the endpoint
deliveredSuccessfully delivered (2xx response)
failedLast attempt failed, retries remaining
retryingScheduled for another attempt
exhaustedAll retry attempts failed — moved to Dead Letter Queue

Viewing Deliveries

Via Dashboard

  1. Navigate to your WaaS application and open the Deliveries tab
  2. Filter by:
    • Tenant ID — See deliveries for a specific customer
    • Event Type — Filter by event type
    • Status — Show only failed, exhausted, etc.
  3. Click a delivery to see full details including request/response data

Via API

# List deliveries for an application
curl https://api.zyphr.dev/v1/waas/applications/{app_id}/deliveries \
-H "Authorization: Bearer YOUR_API_KEY" \
-G \
-d "tenant_id=tenant_abc" \
-d "status=failed" \
-d "limit=20"

# Get a specific delivery with full request/response
curl https://api.zyphr.dev/v1/waas/applications/{app_id}/deliveries/{delivery_id} \
-H "Authorization: Bearer YOUR_API_KEY"

Retry Behavior

Default Retry Policy

Failed deliveries are automatically retried with exponential backoff:

AttemptDelayCumulative
1 (initial)Immediate
21 minute1 min
35 minutes6 min
430 minutes36 min
52 hours2h 36m
612 hours14h 36m
724 hours38h 36m

After all retry attempts are exhausted, the delivery moves to exhausted status and is placed in the Dead Letter Queue (DLQ).

Custom Retry Policy

Configure per-endpoint retry behavior:

curl -X PATCH https://api.zyphr.dev/v1/waas/applications/{app_id}/endpoints/{endpoint_id} \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"retry_policy": {
"max_attempts": 4,
"intervals": [30, 300, 3600, 86400]
}
}'

Manual Retry

Retry a specific failed or exhausted delivery:

Via Dashboard

  1. Open the Deliveries tab
  2. Find the failed delivery
  3. Click the Retry button

Via API

curl -X POST https://api.zyphr.dev/v1/waas/applications/{app_id}/deliveries/{delivery_id}/retry \
-H "Authorization: Bearer YOUR_API_KEY"

Circuit Breaker

The circuit breaker protects both your infrastructure and your customers' servers from cascading failures.

How It Works

  1. Closed (normal) — Deliveries flow normally
  2. Open (tripped) — After 10 consecutive failures, the circuit opens. No deliveries are attempted.
  3. Half-Open (recovery) — After a cooldown period, a single test delivery is sent
  4. Closed (recovered) — If the test succeeds, normal delivery resumes

What Triggers It

  • 10 consecutive delivery failures to the same endpoint
  • Timeouts count as failures (30-second timeout)
  • Only consecutive failures trip the circuit — a single success resets the counter

What Happens When It Trips

  • The endpoint is automatically set to disabled
  • Pending deliveries for that endpoint are paused
  • A notification is sent (if alert hooks are configured)
  • The endpoint can be manually re-enabled from the dashboard

Rate Limiting

Zyphr rate-limits deliveries per endpoint to prevent overwhelming your customers' servers:

  • Default: 100 deliveries per second per endpoint
  • Excess deliveries are queued, not dropped
  • Rate limits apply to the delivery rate, not the publish rate

Dead Letter Queue (DLQ)

Deliveries that exhaust all retry attempts are moved to the DLQ. These deliveries:

  • Remain visible in the delivery logs with status exhausted
  • Can be manually retried from the dashboard or API
  • Are retained according to your plan's log retention period

Delivery Deduplication

Zyphr prevents double-delivery using idempotency:

  • Use the idempotency_key field when publishing events
  • If the same key is published twice, only one set of deliveries is created
  • Internal deduplication also prevents duplicate delivery records for the same event+endpoint pair

Monitoring Best Practices

Set Up Alert Hooks

Configure alert hooks to be notified when:

  • An endpoint is auto-disabled by the circuit breaker
  • Deliveries are exhausted (all retries failed)
  • Usage approaches plan limits

Review Delivery Logs Regularly

  • Check for patterns in failed deliveries (specific tenants, event types, or endpoints)
  • Monitor delivery latency trends
  • Track success rate by endpoint

Provide Delivery Visibility to Customers

Use the Embedded Portal to let your customers:

  • View their own delivery logs
  • Retry failed deliveries
  • Diagnose integration issues without contacting your support team

Log Retention

PlanRetention
Free3 days
Starter7 days
Pro30 days
Scale90 days
EnterpriseCustom

Plan Limits

PlanEvents/month
Free1,000
Starter25,000
Pro250,000
Scale2,500,000
EnterpriseUnlimited

Next Steps