Supported SDK surface
Single and batch sends, project-scoped message logs and events, subscriber lists, opt-in requests, webhook signature verification, and typed errors.
Official SDKs
Typed clients for server-side applications, with project-scoped API keys and idempotent sends.
Release channel
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.
npm install @blitzglobaltech/pulsepigeonimport { 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" });Single and batch sends, project-scoped message logs and events, subscriber lists, opt-in requests, webhook signature verification, and typed errors.
Use the REST guide for tenant-wide and operator-gated resources that are not part of the project-key SDK surface.
Open the API guideSearch the API referenceWebhook verificationAPI and SDK policiesComplete SDK surface
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
| TypeScript | Python | Scope | Credential/project boundary | Endpoint | Links |
|---|---|---|---|---|---|
messages.send | send_message | messages:send | Project key: matching project. Workspace key: allowed environment. | POST /v1/messages | Reference · TS · Python |
messages.sendBatch | send_batch | messages:send | Project key: each item's project must match. Workspace key: allowed environments. | POST /v1/messages/batch | Reference · TS · Python |
messages.list | list_messages | reports:read | Project key: own project only. Workspace key: projects in allowed environments. | GET /v1/messages | Reference · TS · Python |
messages.searchLogs | search_message_logs | reports:read | Project key: own project only, including query filters. Workspace key: projects in allowed environments. | GET /v1/message-logs | Reference · TS · Python |
messages.listEvents | list_events | reports:read | Project key: own project only, including message filters. Workspace key: projects in allowed environments. | GET /v1/events | Reference · TS · Python |
domains.list | list_domains | reports:read | All-environment workspace key: workspace-wide. Project keys rejected. | GET /v1/domains | Reference · TS · Python |
domains.check | check_domain | domains:* | All-environment workspace key: workspace-wide. Project keys rejected. | POST /v1/domains/{id}/check | Reference · TS · Python |
domains.dmarcRamp | get_dmarc_ramp | reports:read | All-environment workspace key: workspace-wide. Project keys rejected. | GET /v1/domains/{id}/dmarc-ramp | Reference · TS · Python |
domains.listDmarcRamps | list_dmarc_ramps | reports:read | All-environment workspace key: workspace-wide. Project keys rejected. | GET /v1/domains/dmarc-ramp | Reference · TS · Python |
dmarc.listSources | list_dmarc_sources | reports:read | All-environment workspace key: workspace-wide. Project keys rejected. | GET /v1/deliverability/dmarc/sources | Reference · TS · Python |
webhooks.list | list_webhook_subscriptions | webhooks:* | All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance. | GET /v1/webhooks/status | Reference · TS · Python |
webhooks.upsert | upsert_webhook_subscription | webhooks:* | All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance. | PUT/PATCH /v1/webhooks/status | Reference · TS · Python |
webhooks.delete | delete_webhook_subscription | webhooks:* | All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance. | DELETE /v1/webhooks/status/{id} | Reference · TS · Python |
webhooks.listDeliveries | list_webhook_deliveries | webhooks:* | All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance. | GET /v1/webhooks/status/deliveries | Reference · TS · Python |
webhooks.health | get_webhook_health | webhooks:* | All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance. | GET /v1/webhooks/status/health | Reference · TS · Python |
webhooks.rotateSecret | rotate_webhook_secret | webhooks:* | All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance. | POST /v1/webhooks/status/{id}/rotate-secret | Reference · TS · Python |
webhooks.test | test_webhook | webhooks:* | All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance. | POST /v1/webhooks/status/{id}/test | Reference · TS · Python |
webhooks.replay | replay_webhook_delivery | webhooks:* | All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance. | POST /v1/webhooks/status/{id}/deliveries/{delivery_id}/replay | Reference · TS · Python |
suppressions.suppress | suppress_recipient | suppressions:* | All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance. | POST /v1/compliance/suppressions | Reference · TS · Python |
suppressions.exportCsv | export_suppressions | suppressions:* | All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance. | GET /v1/suppressions/export | Reference · TS · Python |
suppressions.importCsv | import_suppressions | suppressions:* | All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance. | POST /v1/suppressions/import | Reference · TS · Python |
contacts.createList | create_subscriber_list | contacts:* | Project key: own project, defaulted when omitted. Workspace key: select a project in an allowed environment, unless all-environment. Privileged issuance. | POST /v1/subscriber-lists | Reference · TS · Python |
contacts.listLists | list_subscriber_lists | contacts:* | Project key: own project only. Workspace key: projects in allowed environments; all-environment also includes workspace-wide lists. Privileged issuance. | GET /v1/subscriber-lists | Reference · TS · Python |
contacts.requestOptIn | request_subscriber_opt_in | contacts:* + messages:send | Project 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}/subscriptions | Reference · TS · Python |
contacts.erase | delete_contact | contacts:* | All-environment workspace key: workspace-wide. Project keys rejected; privileged issuance. | POST /v1/compliance/deletions | Reference · TS · Python |
verifyWebhookSignature | verify_webhook_signature | local | No API credential or project boundary: local verification with the webhook signing secret. | No network request | Reference · TS · Python |