PulsePigeonemail infrastructure

Release channel

Generally available

GA

Use the TypeScript and Python guides for server-side integration. Package installation is available below for the current release.

Keep API keys on the server. Never embed a project key in browser or mobile client code.

Choose your integration

npm install @blitzglobaltech/pulsepigeon
import { PulsePigeon } from "@blitzglobaltech/pulsepigeon";

const client = new PulsePigeon(process.env.PULSEPIGEON_API_KEY!);

await client.messages.send({
  project_id: "proj_123",
  from_email: "[email protected]",
  to: [{ email: "[email protected]" }],
  subject: "Welcome",
  text: "Hello from PulsePigeon."
}, { idempotencyKey: "welcome-user-123" });

Supported SDK surface

Single and batch sends, project-scoped message logs and events, subscriber lists, opt-in requests, webhook signature verification, and typed errors.

Complete SDK surface

Every SDK method, scope, and API route

Each method links to its API reference. Our CI integration suites boot the real API and exercise this surface over HTTP. The public full-surface examples below call every listed method against your configured workspace.

Use a disposable test project, domain, and webhook endpoint with a workspace key carrying the listed scopes. The scripts mutate those resources and request one opt-in email.

The scope alone does not choose a credential boundary. API keys use Bearer authentication. Project keys stay within their own project; workspace keys follow their configured live, test, or all environment. Workspace-wide methods below require an all-environment workspace key. Workspace keys always require privileged issuance. Privileged issuance means an owner, admin, or operator session creates the key; this also applies to project keys with contacts:*, suppressions:*, or webhooks:*. Key creation also enforces the session's API-key permission and recent-MFA policy. Signed workspace sessions follow the route's role and MFA requirements rather than API-key scopes.

Run the TypeScript full-surface example · Run the Python full-surface example

TypeScriptPythonScopeCredential/project boundaryEndpointLinks
messages.sendsend_messagemessages:sendProject key: matching project. Workspace key: allowed environment.POST /v1/messagesReference · TS · Python
messages.sendBatchsend_batchmessages:sendProject key: each item's project must match. Workspace key: allowed environments.POST /v1/messages/batchReference · TS · Python
messages.listlist_messagesreports:readProject key: own project only. Workspace key: projects in allowed environments.GET /v1/messagesReference · TS · Python
messages.searchLogssearch_message_logsreports:readProject key: own project only, including query filters. Workspace key: projects in allowed environments.GET /v1/message-logsReference · TS · Python
messages.listEventslist_eventsreports:readProject key: own project only, including message filters. Workspace key: projects in allowed environments.GET /v1/eventsReference · TS · Python
domains.listlist_domainsreports:readAll-environment workspace key: workspace-wide. Project keys rejected.GET /v1/domainsReference · TS · Python
domains.checkcheck_domaindomains:*All-environment workspace key: workspace-wide. Project keys rejected.POST /v1/domains/{id}/checkReference · TS · Python
domains.dmarcRampget_dmarc_rampreports:readAll-environment workspace key: workspace-wide. Project keys rejected.GET /v1/domains/{id}/dmarc-rampReference · TS · Python
domains.listDmarcRampslist_dmarc_rampsreports:readAll-environment workspace key: workspace-wide. Project keys rejected.GET /v1/domains/dmarc-rampReference · TS · Python
dmarc.listSourceslist_dmarc_sourcesreports:readAll-environment workspace key: workspace-wide. Project keys rejected.GET /v1/deliverability/dmarc/sourcesReference · TS · Python
webhooks.listlist_webhook_subscriptionswebhooks:*All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance.GET /v1/webhooks/statusReference · TS · Python
webhooks.upsertupsert_webhook_subscriptionwebhooks:*All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance.PUT/PATCH /v1/webhooks/statusReference · TS · Python
webhooks.deletedelete_webhook_subscriptionwebhooks:*All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance.DELETE /v1/webhooks/status/{id}Reference · TS · Python
webhooks.listDeliverieslist_webhook_deliverieswebhooks:*All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance.GET /v1/webhooks/status/deliveriesReference · TS · Python
webhooks.healthget_webhook_healthwebhooks:*All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance.GET /v1/webhooks/status/healthReference · TS · Python
webhooks.rotateSecretrotate_webhook_secretwebhooks:*All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance.POST /v1/webhooks/status/{id}/rotate-secretReference · TS · Python
webhooks.testtest_webhookwebhooks:*All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance.POST /v1/webhooks/status/{id}/testReference · TS · Python
webhooks.replayreplay_webhook_deliverywebhooks:*All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance.POST /v1/webhooks/status/{id}/deliveries/{delivery_id}/replayReference · TS · Python
suppressions.suppresssuppress_recipientsuppressions:*All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance.POST /v1/compliance/suppressionsReference · TS · Python
suppressions.exportCsvexport_suppressionssuppressions:*All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance.GET /v1/suppressions/exportReference · TS · Python
suppressions.importCsvimport_suppressionssuppressions:*All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance.POST /v1/suppressions/importReference · TS · Python
contacts.createListcreate_subscriber_listcontacts:*Project key: own project, defaulted when omitted. Workspace key: select a project in an allowed environment, unless all-environment. Privileged issuance.POST /v1/subscriber-listsReference · TS · Python
contacts.listListslist_subscriber_listscontacts:*Project key: own project only. Workspace key: projects in allowed environments; all-environment also includes workspace-wide lists. Privileged issuance.GET /v1/subscriber-listsReference · TS · Python
contacts.requestOptInrequest_subscriber_opt_incontacts:* + messages:sendProject key: list must belong to own project. Workspace key: list in allowed projects; all-environment also allows workspace-wide lists. Both scopes required; privileged issuance.POST /v1/subscriber-lists/{id}/subscriptionsReference · TS · Python
contacts.erasedelete_contactcontacts:*All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance.POST /v1/compliance/deletionsReference · TS · Python
verifyWebhookSignatureverify_webhook_signaturelocalNo API credential or project boundary: local verification with the webhook signing secret.No network requestReference · TS · Python