PulsePigeonemail infrastructure

Core endpoints

Use the deployed resources.

  • POST /v1/messages accepts one message and returns 202.
  • POST /v1/messages/batch accepts up to 100 independently keyed items.
  • GET /v1/messages lists tenant-scoped messages.
  • GET /v1/message-logs queries message-log records.
  • GET /v1/events returns delivery events, optionally filtered by message id.
  • POST /v1/compliance/suppressions adds one tenant-wide suppression.
  • GET /v1/webhooks/status lists status webhook subscriptions.
  • PUT /v1/webhooks/status and PATCH /v1/webhooks/status create or update a subscription.
  • GET /v1/webhooks/status/deliveries lists status webhook delivery attempts.

Responses carry X-Request-ID. Error responses use HTTP status codes and structured detail codes; clients should inspect the response contract before deciding whether to retry.

cURL example

Send against the public REST schema.

curl -X POST https://api.pulsepigeon.com/v1/messages \
  -H "Authorization: Bearer $PULSEPIGEON_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-123-receipt" \
  -d '{
    "project_id": "project_123",
    "from_email": "[email protected]",
    "to": [{"email": "[email protected]"}],
    "subject": "Your receipt",
    "text": "Order 123 is complete.",
    "category": "billing",
    "metadata": {"order_id": "123"}
  }'

The single-message idempotency header is optional. Supply a stable key for the logical send so network retries collapse to one accepted message. A reused key with a different body returns409 idempotency_key_reused.

Webhooks

Consume only the events the delivery model emits.

Public delivery event types are accepted, queued, delivered, deferred, bounced, and complained. Status webhook payloads use a timestamped signature over canonical JSON. Store the raw body until signature verification is complete.

Failed status webhook deliveries use a configurable retry budget, defaulting to three attempts. Authorized replay usesPOST /v1/webhooks/status/{id}/deliveries/{delivery_id}/replay.

SDK status

Python and TypeScript SDKs are available.

TypeScript and Python SDKs are published at version 1.0.0 on npm and PyPI for the project-key surface. Use the REST API for tenant-wide and operator-gated resources.

Request limits

Use enforced limits, not advertised guesses.

  • Batch requests contain at most 100 items.
  • The batch request body is capped at 10,000,000 bytes.
  • A message can carry at most 10 attachments.
  • Single-message recipients are represented as an array of email objects.
  • Plan email and retention limits are published on the pricing page.

Read next