PulsePigeonemail infrastructure

Integration path

StepRule
Create projectPOST /v1/projects with an Idempotency-Key for the setup operation.
Create API keyPOST /v1/api-keys and store the one-time secret immediately.
Send messagePOST /v1/messages with one idempotency key per business event.
Track statusUse message logs or signed status webhooks for final delivery state.

Send example

curl -X POST "$PULSEPIGEON_API_URL/v1/messages" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: password-reset-user-123-event-456" \
  -H "Authorization: Bearer $PULSEPIGEON_API_KEY" \
  -d '{
    "project_id":"proj_123",
    "from_email":"[email protected]",
    "to":[{"email":"[email protected]"}],
    "subject":"Reset your password",
    "text":"Use the secure reset link in this email.",
    "category":"security"
  }'

Webhook signature

Verify HMAC-SHA256 over timestamp plus canonical JSON body.

PulsePigeon-Signature: t=1783380000,v1=<hex-hmac>
signed_payload = "<timestamp>.<canonical-json-body>"

Suppression import

curl -X POST "$PULSEPIGEON_API_URL/v1/suppressions/import" \
  -H "Content-Type: text/csv" \
  -H "Authorization: Bearer $PULSEPIGEON_API_KEY" \
  --data-binary @suppressions.csv

Error handling

StatusMeaningAction
202AcceptedTrack final state through logs or webhooks.
409Idempotency conflictUse the same body or generate a new key.
423Sending haltedStop sends and review suspension or kill-switch state.
429Rate limitedBack off until tenant or provider capacity resets.