# SendPing > SendPing is an email platform for developers: send transactional and marketing email at scale through a simple REST API, with webhooks, audiences, segments, templates, automations, and deliverability tooling. Free tier available; paid plans from $14/month. Key facts: - REST API base URL: `https://www.sendping.co/api` — authenticate with an API key (`mb_` prefix) as a Bearer token. - Official SDKs: Node.js, Python, Go, Ruby, PHP, Rust, Java, .NET, plus a CLI. - Sending requires a verified custom domain (DKIM/SPF/DMARC guided setup). - Webhooks cover delivery, open, click, bounce, complaint, and unsubscribe events. - Sign up at [www.sendping.co](https://www.sendping.co/) — no credit card required. ## Documentation - [Introduction](https://www.sendping.co/docs/index.md): SendPing is a developer email platform: send transactional and marketing email from your own verified domain over a clean REST API, with delivery tracking, webhooks, audiences, and campaigns. - [Quickstart](https://www.sendping.co/docs/quickstart.md): Send your first email with the SendPing API in a few minutes. - [Authentication](https://www.sendping.co/docs/authentication.md): Authenticate every API request with a Bearer API key. - [Create an API key](https://www.sendping.co/docs/create-an-api-key.md): Get started sending email by creating an API key to authenticate your SendPing requests. - [Add a domain](https://www.sendping.co/docs/add-a-domain.md): Get started sending email by adding and verifying a domain you own. - [Explore sending features](https://www.sendping.co/docs/explore-sending-features.md): SendPing has a wide range of features for sending both transactional and marketing email. - [Next.js](https://www.sendping.co/docs/send-with/nextjs.md): Send your first email from a Next.js Route Handler with the official sendping SDK. - [Node.js](https://www.sendping.co/docs/send-with/nodejs.md): Send your first email from Node.js using the global fetch and the SendPing API. - [PHP](https://www.sendping.co/docs/send-with/php.md): Send your first email from PHP using cURL against the SendPing API. - [Python](https://www.sendping.co/docs/send-with/python.md): Send your first email from Python using requests against the SendPing API. - [Ruby](https://www.sendping.co/docs/send-with/ruby.md): Send your first email from Ruby using Net::HTTP against the SendPing API. - [Go](https://www.sendping.co/docs/send-with/go.md): Send your first email from Go using net/http against the SendPing API. - [Rust](https://www.sendping.co/docs/send-with/rust.md): Send your first email from Rust using reqwest against the SendPing API. - [Elixir](https://www.sendping.co/docs/send-with/elixir.md): Send your first email from Elixir using Req against the SendPing API. - [Java](https://www.sendping.co/docs/send-with/java.md): Send your first email from Java using the built-in HttpClient against the SendPing API. - [.NET](https://www.sendping.co/docs/send-with/dotnet.md): Send your first email from .NET using HttpClient against the SendPing API. - [Astro](https://www.sendping.co/docs/send-with/astro.md): Send your first email from an Astro Action using the sendping SDK. - [Nuxt](https://www.sendping.co/docs/send-with/nuxt.md): Send your first email from a Nuxt server route using the sendping SDK. - [Remix](https://www.sendping.co/docs/send-with/remix.md): Send your first email from a Remix resource route using the sendping SDK. - [SvelteKit](https://www.sendping.co/docs/send-with/sveltekit.md): Send your first email from a SvelteKit endpoint using the sendping SDK. - [RedwoodJS](https://www.sendping.co/docs/send-with/redwoodjs.md): Send your first email from a RedwoodJS serverless function using the sendping SDK. - [Express](https://www.sendping.co/docs/send-with/express.md): Send your first email from an Express route using the sendping SDK. - [Hono](https://www.sendping.co/docs/send-with/hono.md): Send your first email from a Hono route using the sendping SDK. - [Bun](https://www.sendping.co/docs/send-with/bun.md): Send your first email from a Bun server using the sendping SDK. - [Django](https://www.sendping.co/docs/send-with/django.md): Send your first email from a Django view by calling the SendPing API with requests. - [FastAPI](https://www.sendping.co/docs/send-with/fastapi.md): Send your first email from a FastAPI endpoint by calling the SendPing API with httpx. - [Flask](https://www.sendping.co/docs/send-with/flask.md): Send your first email from a Flask route by calling the SendPing API with requests. - [Laravel](https://www.sendping.co/docs/send-with/laravel.md): Send your first email from a Laravel controller by calling the SendPing API with the Http facade. - [Ruby on Rails](https://www.sendping.co/docs/send-with/rails.md): Send your first email from a Rails controller by calling the SendPing API with Net::HTTP. - [Phoenix](https://www.sendping.co/docs/send-with/phoenix.md): Send your first email from a Phoenix app by calling the SendPing API with an Elixir HTTP client. - [Sinatra](https://www.sendping.co/docs/send-with/sinatra.md): Send your first email from a Sinatra app using Net::HTTP against the SendPing API. - [Symfony](https://www.sendping.co/docs/send-with/symfony.md): Send your first email from a Symfony controller using the Symfony HttpClient against the SendPing API. - [Axum](https://www.sendping.co/docs/send-with/axum.md): Send your first email from an Axum handler using reqwest against the SendPing API. - [Encore.ts](https://www.sendping.co/docs/send-with/encore-ts.md): Send your first email from an Encore.ts API endpoint using the sendping SDK. - [Encore.go](https://www.sendping.co/docs/send-with/encore-go.md): Send your first email from an Encore Go API endpoint using net/http against the SendPing API. - [AWS Lambda](https://www.sendping.co/docs/send-with/aws-lambda.md): Send your first email from an AWS Lambda function using the sendping SDK. - [Cloudflare Workers](https://www.sendping.co/docs/send-with/cloudflare-workers.md): Send your first email from a Cloudflare Worker using the sendping SDK. - [Vercel Functions](https://www.sendping.co/docs/send-with/vercel-functions.md): Send your first email from a Vercel Function using the sendping SDK. - [Deno Deploy](https://www.sendping.co/docs/send-with/deno-deploy.md): Send your first email from Deno Deploy by calling the SendPing API with fetch. - [Supabase Edge Functions](https://www.sendping.co/docs/send-with/supabase-edge-functions.md): Send your first email from a Supabase Edge Function by calling the SendPing API with fetch. - [Railway](https://www.sendping.co/docs/send-with/railway.md): Deploy an app to Railway that sends your first email using the sendping SDK. - [Auth0](https://www.sendping.co/docs/send-with/auth0.md): Send Auth0 transactional emails — verification codes, password resets, and more — through SendPing. - [Send emails with Node.js](https://www.sendping.co/docs/integrations/nodejs.md): Send email from Node.js using the sendping npm SDK — install once and call mb.emails.send(). - [Send emails with Next.js](https://www.sendping.co/docs/integrations/nextjs.md): Send email from a Next.js Route Handler or Server Action using the sendping SDK — your API key stays on the server. - [Send emails with Python](https://www.sendping.co/docs/integrations/python.md): Send email from Python with the official sendping package — zero dependencies, configured module-level like stripe or resend. - [Send emails with Django](https://www.sendping.co/docs/integrations/django.md): Send email from a Django view by calling the SendPing REST API with requests or httpx. - [Send emails with PHP](https://www.sendping.co/docs/integrations/php.md): Send email from PHP with the official sendping/sendping Composer package — no runtime dependencies beyond the curl and json extensions. - [Send emails with PHP & Laravel](https://www.sendping.co/docs/integrations/php-laravel.md): Call the SendPing REST API from Laravel with the Http facade, or from plain PHP with cURL. - [Send emails with Ruby](https://www.sendping.co/docs/integrations/ruby-rails.md): Send email from Ruby or Rails with the official sendping gem — zero runtime dependencies, plain-hash params, and typed errors. - [Send emails with Go](https://www.sendping.co/docs/integrations/go.md): Send email from Go with the official sendping-go module — typed request structs, context variants, and zero third-party dependencies. - [Send emails with Rust](https://www.sendping.co/docs/integrations/rust.md): Send email from Rust with the official sendping crate — async, typed errors, and built on reqwest with rustls. - [Send emails with Java & Kotlin](https://www.sendping.co/docs/integrations/java.md): Send email from Java or Kotlin with the official co.sendping:sendping SDK — zero dependencies, Java 11+. - [Send emails with .NET & C#](https://www.sendping.co/docs/integrations/dotnet.md): Send email from C# with the official SendPing NuGet package — async, typed, BCL-only, and ready for IHttpClientFactory. - [Send emails over raw HTTP / cURL](https://www.sendping.co/docs/integrations/http.md): The canonical POST /emails request — headers, body, and response — that any HTTP client can reproduce. - [Managing emails](https://www.sendping.co/docs/emails/managing.md): The email lifecycle, every delivery status, previewing HTML/text, and reading the per-email event log. - [Schedule email](https://www.sendping.co/docs/emails/schedule.md): Send an email at a future time with scheduled_at, then reschedule or cancel it before it goes out. - [Attachments](https://www.sendping.co/docs/emails/attachments.md): Attach files to an email as base64 content or a hosted URL, with per-file and total size limits. - [Batch sending](https://www.sendping.co/docs/emails/batch.md): Send up to 100 emails in a single request with POST /emails/batch. - [Custom headers](https://www.sendping.co/docs/emails/headers.md): Attach custom MIME headers to an email with the headers object. - [Idempotency keys](https://www.sendping.co/docs/emails/idempotency.md): Safely retry a send without sending twice using the Idempotency-Key header. - [Email bounces](https://www.sendping.co/docs/emails/bounces.md): How SendPing records hard and soft bounces, and suppresses permanent or repeatedly failing recipients. - [Email suppressions](https://www.sendping.co/docs/emails/suppressions.md): The account-wide suppression list: how recipients are added and how suppressed sends are skipped. - [Unsubscribe links](https://www.sendping.co/docs/emails/unsubscribe.md): A `POST /emails` send carries an opt-out only when it sets `topic_id`; campaigns inject a per-contact unsubscribe link and List-Unsubscribe header automatically. - [Embed inline images](https://www.sendping.co/docs/emails/embed-images.md): Reference an attachment from your HTML with a cid: source so an image renders inline in the body of the email. - [Send test emails](https://www.sendping.co/docs/emails/send-test.md): Simulate delivered, bounced, complained, and suppressed events with SendPing test addresses — without harming your domain reputation. - [Deliverability insights](https://www.sendping.co/docs/emails/deliverability-insights.md): Best-practice checks SendPing runs against a sent email, split into Attention items and Improvements, to help your mail reach the inbox. - [Receiving emails](https://www.sendping.co/docs/receiving/introduction.md): Receive inbound email on a SendPing domain: every message is parsed and delivered to your webhook as an email.received event. - [Custom receiving domains](https://www.sendping.co/docs/receiving/custom-domains.md): Receive inbound email on your own domain by adding an MX record and subscribing a webhook to email.received. - [Get email content](https://www.sendping.co/docs/receiving/get-email-content.md): Fetch the HTML body, plain text, and headers of a received email with the Receiving API. - [Process receiving attachments](https://www.sendping.co/docs/receiving/attachments.md): List a received email’s attachments and download each one from its download_url. - [Forward received emails](https://www.sendping.co/docs/receiving/forward-emails.md): Forward an inbound email to another address — either with the built-in forward endpoint, or by downloading the raw message, parsing it, and re-sending via POST /emails. - [Reply to received emails](https://www.sendping.co/docs/receiving/reply-to-emails.md): Reply in-thread by setting In-Reply-To (and References) to the received message_id when sending via POST /emails. - [Managing campaigns](https://www.sendping.co/docs/campaigns/managing.md): Compose a marketing email against a sending domain, preview merge tags, then send it now or schedule it for later — with a per-contact unsubscribe and budget-capped async delivery. - [Performance tracking](https://www.sendping.co/docs/campaigns/tracking.md): Every campaign recipient is sent as an individual tracked email, so opens, clicks, bounces, and complaints surface per-contact in the dashboard and via webhooks. - [Automations](https://www.sendping.co/docs/automations/overview.md): Automate emails with custom events. - [Steps](https://www.sendping.co/docs/automations/steps.md): Steps and their properties in automation workflows. - [Trigger](https://www.sendping.co/docs/automations/trigger.md): The first step of every automation — the event that starts a run for a contact. - [Condition](https://www.sendping.co/docs/automations/condition.md): Branch a contact down one of two paths based on event or contact data. - [Delay](https://www.sendping.co/docs/automations/delay.md): Pause an automation for a fixed duration before continuing to the next step. - [Wait for Event](https://www.sendping.co/docs/automations/wait-for-event.md): Hold an automation until a specific event arrives, with an optional timeout and filter rule. - [Send Email](https://www.sendping.co/docs/automations/send-email.md): Send a templated email to the contact as a step in your automation. - [Add to Segment](https://www.sendping.co/docs/automations/add-to-segment.md): Add the current contact to a segment as a step in your automation. - [Contact Update](https://www.sendping.co/docs/automations/contact-update.md): Update a contact's name, subscription status, or custom properties during an automation. - [Contact Delete](https://www.sendping.co/docs/automations/contact-delete.md): Remove the contact that triggered the automation from its audience. - [Custom Events](https://www.sendping.co/docs/automations/custom-events.md): Define custom events to trigger automations. - [Connections](https://www.sendping.co/docs/automations/connections.md): Connections between steps in automation workflows. - [Runs](https://www.sendping.co/docs/automations/runs.md): Monitor and debug your automation executions. - [Templates](https://www.sendping.co/docs/templates/overview.md): Save reusable email content and render it with variables at send time. - [Send with a template](https://www.sendping.co/docs/templates/sending.md): Reference a saved template from POST /emails and fill its variables. - [Working with variables](https://www.sendping.co/docs/templates/variables.md): Define custom variables with types and fallback values on a template, then supply their values when you send. - [Version history](https://www.sendping.co/docs/templates/version-history.md): Templates have a draft vs published lifecycle and a full version history, so you can iterate safely without disrupting live sends. - [Your audience](https://www.sendping.co/docs/audiences/overview.md): An audience is a named contact list. Build one, fill it with contacts, and send a campaign to everyone on it. - [Managing contacts](https://www.sendping.co/docs/audiences/contacts.md): Add contacts to an audience with an email and optional name, track their subscribe state, and address them by id or email. - [Managing unsubscribed contacts](https://www.sendping.co/docs/audiences/unsubscribed.md): How a contact becomes unsubscribed and why campaigns skip them. - [Segments](https://www.sendping.co/docs/segments/overview.md): Save reusable filters over a sending domain’s contacts and target campaigns at a subset of them. - [Topics](https://www.sendping.co/docs/topics/overview.md): Subscription categories within a sending domain. Contacts choose which topics they receive; a campaign can target a single topic. - [Contact properties](https://www.sendping.co/docs/audiences/properties.md): Store extra data on contacts with default and custom properties, then use them to personalize campaigns. - [Migrating from Audiences to Segments](https://www.sendping.co/docs/segments/migrating.md): How SendPing moved from per-audience Contacts to a global Contacts model with Segments and Topics — what changed, how unsubscribes work now, and what to do. - [Managing domains](https://www.sendping.co/docs/domains/managing.md): Add a sending domain, work through DNS verification, re-verify, and delete domains. - [DNS records (SPF, DKIM)](https://www.sendping.co/docs/domains/dns.md): The SPF and DKIM records SendPing generates for a domain, what each one does, and how to publish them — plus the DMARC record you publish yourself. - [Open and click tracking](https://www.sendping.co/docs/domains/tracking.md): Per-domain open and click tracking: how the open pixel and link rewriting work, and how events surface. - [Choosing a region](https://www.sendping.co/docs/domains/region.md): Each domain is created in the sending region you pass, which its MAIL FROM / SPF records reference. - [Implementing DMARC](https://www.sendping.co/docs/domains/dmarc.md): Publish a DMARC TXT record to protect your domain from spoofing, then graduate the policy from none to quarantine to reject. - [Implementing BIMI](https://www.sendping.co/docs/domains/bimi.md): Display your brand logo as the sender avatar in supporting inboxes by publishing a BIMI record backed by a DMARC policy and a mark certificate. - [Claiming a domain](https://www.sendping.co/docs/domains/claim.md): Take over a domain that another account has already verified by proving DNS control through the claim flow. - [Logs](https://www.sendping.co/docs/logs/overview.md): Every email has a per-email event timeline — sent, delivered, bounced, complained, opened, clicked, delivery_delayed — in the dashboard, via GET /emails/:id, and forwarded to webhooks. - [API keys](https://www.sendping.co/docs/api-keys/overview.md): Create, scope, edit, and revoke API keys in the dashboard. Keys start with mb_, carry a full_access or sending_access permission, and are shown in full exactly once. - [Managing webhooks](https://www.sendping.co/docs/webhooks/overview.md): Subscribe an HTTPS endpoint to delivery and engagement events. SendPing POSTs a signed JSON payload to your URL and retries with backoff on failure. - [Event types](https://www.sendping.co/docs/webhooks/events.md): The full set of webhook events SendPing emits, the JSON payload shape, and a sample request body. - [Verify webhook requests](https://www.sendping.co/docs/webhooks/verify.md): Every webhook request is signed with HMAC-SHA256 over ".". Recompute the signature with your signing secret and compare it against the X-SendPing-Signature header. - [email.sent](https://www.sendping.co/docs/webhooks/emails/sent.md): Fires when an email is accepted by SendPing and handed off for delivery to the recipient's mail server. - [email.delivered](https://www.sendping.co/docs/webhooks/emails/delivered.md): Fires when the recipient's mail server accepts the message for delivery. - [email.delivery_delayed](https://www.sendping.co/docs/webhooks/emails/delivery-delayed.md): Fires when an email could not be delivered due to a temporary issue and will be retried. - [email.complained](https://www.sendping.co/docs/webhooks/emails/complained.md): Fires when an email was delivered but the recipient marked it as spam. - [email.bounced](https://www.sendping.co/docs/webhooks/emails/bounced.md): Fires when the recipient's mail server permanently rejected the email. The address is added to your suppression list. - [email.opened](https://www.sendping.co/docs/webhooks/emails/opened.md): Fires the first time a recipient opens the email. Requires open tracking on the sending domain. - [email.clicked](https://www.sendping.co/docs/webhooks/emails/clicked.md): Fires the first time a recipient clicks a tracked link in the email. Requires click tracking on the sending domain. - [email.failed](https://www.sendping.co/docs/webhooks/emails/failed.md): Fires when an email fails to send due to an error such as an invalid recipient, domain issue, or a reached quota. - [email.scheduled](https://www.sendping.co/docs/webhooks/emails/scheduled.md): Fires when an email is accepted for sending at a future time. - [email.received](https://www.sendping.co/docs/webhooks/emails/received.md): Fires when an inbound email arrives at one of your verified receiving domains. Carries metadata only. - [email.replied](https://www.sendping.co/docs/webhooks/emails/replied.md): Fires the first time a recipient replies to an email you sent. - [email.unsubscribed](https://www.sendping.co/docs/webhooks/emails/unsubscribed.md): Fires the first time a recipient unsubscribes from your mail. - [email.suppressed](https://www.sendping.co/docs/webhooks/emails/suppressed.md): Fires when SendPing suppresses a send because the address is on your account suppression list. - [contact.created](https://www.sendping.co/docs/webhooks/contacts/created.md): Fires when a contact is successfully created in one of your audiences. - [contact.updated](https://www.sendping.co/docs/webhooks/contacts/updated.md): Fires when a contact is successfully updated. - [contact.deleted](https://www.sendping.co/docs/webhooks/contacts/deleted.md): Fires when a contact is successfully deleted. - [domain.created](https://www.sendping.co/docs/webhooks/domains/created.md): Fires when a domain is successfully created, before its DNS records are verified. - [domain.updated](https://www.sendping.co/docs/webhooks/domains/updated.md): Fires when a domain changes — most commonly as its verification status advances. - [domain.deleted](https://www.sendping.co/docs/webhooks/domains/deleted.md): Fires when a domain is successfully deleted from your account. - [Retries](https://www.sendping.co/docs/webhooks/retries-and-replays.md): How SendPing retries failed webhook deliveries: up to 5 attempts on a fixed backoff schedule, and where to inspect the delivery history. - [Webhook ingester](https://www.sendping.co/docs/webhooks/ingester.md): A self-hosted, open-source service that receives, verifies, and stores every SendPing webhook event in your own database — with signature verification, idempotent storage, and connectors for Postgres, MySQL, MongoDB, and data warehouses. - [How to store webhooks data](https://www.sendping.co/docs/webhooks/store-data.md): Why you should persist your SendPing webhook events, what to store, and a complete native-HTTP handler that verifies the signature and inserts each event into your own database. - [Managing teams](https://www.sendping.co/docs/settings/teams.md): Share a SendPing account with teammates and switch between the teams you belong to. - [Custom unsubscribe page](https://www.sendping.co/docs/settings/custom-unsubscribe.md): Customize the unsubscribe footer and behavior applied to your mail. - [Billing & plans](https://www.sendping.co/docs/settings/billing.md): How plans and usage work, and where to manage billing. - [AI Onboarding](https://www.sendping.co/docs/ai/onboarding.md): Everything you need to onboard your AI agent to SendPing — the MCP server, docs for agents, the Chat SDK, and production best practices. - [MCP Server](https://www.sendping.co/docs/ai/mcp-server.md): Use the SendPing MCP server to give your AI agent native access to the full SendPing platform over natural language. - [DMARC Analyzer](https://www.sendping.co/docs/ai/dmarc-analyzer.md): Analyze DMARC XML reports with a free, open-source tool — view it in your browser or self-host it for automated email digests. - [SendPing Skill](https://www.sendping.co/docs/ai/skill-sendping.md): Teach an AI agent to send single and batch emails through the SendPing API with built-in retries and idempotency. - [React Email Skill](https://www.sendping.co/docs/ai/skill-react-email.md): Teach an AI agent to build responsive, cross-client HTML emails using React components, then send the rendered HTML via SendPing. - [Email Best Practices Skill](https://www.sendping.co/docs/ai/skill-email-best-practices.md): Give an AI agent the operational knowledge to build production-ready email: authentication, compliance, deliverability, webhooks, and suppression. - [Agent Email Inbox Skill](https://www.sendping.co/docs/ai/skill-agent-inbox.md): Give an AI agent a secure inbox to receive and act on inbound email, with five security levels that defend against prompt injection and spoofing. - [Chat SDK](https://www.sendping.co/docs/ai/chat-sdk.md): A pattern for building conversational, two-way email on SendPing — send with the SDK, receive via webhooks, thread with email headers. - [Chat SDK Attachments](https://www.sendping.co/docs/ai/chat-sdk-attachments.md): Handle inbound email attachments in a conversational-email integration built on SendPing webhooks and the SDK. - [Chat SDK Card Emails](https://www.sendping.co/docs/ai/chat-sdk-cards.md): Send rich, structured HTML card emails by rendering a card object to HTML with React Email and sending it via SendPing. - [Chat SDK Proactive Outreach](https://www.sendping.co/docs/ai/chat-sdk-outreach.md): Start new email conversations proactively by sending a fresh email with the SendPing SDK — replies flow back through your inbound webhook. - [v0](https://www.sendping.co/docs/ai/v0.md): Add email sending with SendPing to a v0 project by asking the chat to wire it up with your API key. - [Lovable](https://www.sendping.co/docs/ai/lovable.md): Add email sending with SendPing to a Lovable project, storing your API key securely via Supabase. - [Bolt.new](https://www.sendping.co/docs/ai/bolt.md): Add email sending with SendPing to a Bolt.new project using a .env-stored API key. - [Base44](https://www.sendping.co/docs/ai/base44.md): Add email sending with SendPing to a Base44 app using backend functions and a stored API key. - [Replit](https://www.sendping.co/docs/ai/replit.md): Add email sending with SendPing to a Replit project with an API key and verified from address. - [Leap.new](https://www.sendping.co/docs/ai/leap.md): Add email sending with SendPing to a Leap.new project using an Infrastructure secret. - [Anything](https://www.sendping.co/docs/ai/anything.md): Add email sending with SendPing to an Anything project by adding the API key as a project secret. - [Devin](https://www.sendping.co/docs/ai/devin.md): Connect Devin to SendPing over MCP so the agent can send emails, manage contacts, and run campaigns. - [Paper](https://www.sendping.co/docs/ai/paper.md): Combine the Paper and SendPing MCP servers so your agent can turn a Paper design into a SendPing template or campaign. - [OpenClaw](https://www.sendping.co/docs/ai/openclaw.md): Give your OpenClaw AI agent an inbox with SendPing — send reports, parse newsletters and receipts, and receive replies via signed webhooks, with a leveled security model. - [Examples](https://www.sendping.co/docs/resources/examples.md): Copy-paste recipes for the most common SendPing tasks — sending, batching, scheduling, attachments, contacts, and webhooks — using nothing but an HTTP client. - [SDKs](https://www.sendping.co/docs/resources/sdks.md): Official SDKs for Node.js, Python, Go, Ruby, PHP, Rust, Java, and .NET — plus a CLI, and a clean REST API for everything else. - [CLI Quickstart](https://www.sendping.co/docs/resources/cli-quickstart.md): Install the official sendping CLI and send your first email from the terminal in three commands. - [CLI for AI agents](https://www.sendping.co/docs/resources/cli-agents.md): Use SendPing from AI agent workflows and CI/CD pipelines — non-interactive sends, stdin piping, batch, idempotent retries, scheduling, and webhook feedback loops, all over plain HTTP. - [CLI](https://www.sendping.co/docs/resources/cli.md): Drive SendPing from the terminal — the official `sendping-cli`, or plain curl. - [Security](https://www.sendping.co/docs/resources/security.md): An overview of how SendPing protects your data and your account — encryption, access controls, key management, and responsible disclosure. - [Integrations](https://www.sendping.co/docs/resources/integrations.md): Connect SendPing to the tools you already use — AI builders, no-code automation, notification platforms, CMSs, and developer tools — over its clean REST API. ## API Reference - [API Reference](https://www.sendping.co/docs/api/introduction.md): The SendPing REST API: base URL, authentication, content type, idempotency, rate limits, and error format. - [Errors](https://www.sendping.co/docs/api/errors.md): Every error returns a JSON body with statusCode, name, and message. - [Usage limits](https://www.sendping.co/docs/api/limits.md): Recipient counts, batch size, attachment size, and the daily sending quota. - [Create Contact Property](https://www.sendping.co/docs/api/contact-properties-create.md): POST /contact-properties — define a custom property for your contacts. - [Retrieve Contact Property](https://www.sendping.co/docs/api/contact-properties-get.md): GET /contact-properties/:id — retrieve a contact property by its ID. - [List Contact Properties](https://www.sendping.co/docs/api/contact-properties-list.md): GET /contact-properties — retrieve a list of contact properties. - [Update Contact Property](https://www.sendping.co/docs/api/contact-properties-update.md): PATCH /contact-properties/:id — update an existing contact property. - [Delete Contact Property](https://www.sendping.co/docs/api/contact-properties-delete.md): DELETE /contact-properties/:id — remove an existing contact property. - [Add Contact to Segment](https://www.sendping.co/docs/api/contacts-add-to-segment.md): POST /contacts/:id/segments/:segment_id — add an existing contact to a segment. - [Remove Contact from Segment](https://www.sendping.co/docs/api/contacts-remove-from-segment.md): DELETE /contacts/:id/segments/:segment_id — remove an existing contact from a segment. - [List Contact Segments](https://www.sendping.co/docs/api/contacts-list-segments.md): GET /contacts/:id/segments — retrieve the segments a contact is part of. - [Retrieve Contact Topics](https://www.sendping.co/docs/api/contacts-get-topics.md): GET /contacts/:id/topics — retrieve a list of topic subscriptions for a contact. - [Update Contact Topics](https://www.sendping.co/docs/api/contacts-update-topics.md): PATCH /contacts/:id/topics — update topic subscriptions for a contact. - [List Polls](https://www.sendping.co/docs/api/polls-list.md): GET /polls — list emails that have in-email poll responses. - [Retrieve Poll Results](https://www.sendping.co/docs/api/polls-get.md): GET /polls/:emailId — the aggregated answer breakdown for one email. - [Campaign Follow-ups & Controls](https://www.sendping.co/docs/api/campaigns-followups.md): Engagement follow-ups, mailing-list To, and the unsubscribe policy on POST /campaigns. - [Import from Google Sheet](https://www.sendping.co/docs/api/audiences-import-sheet.md): POST /audiences/:id/contacts/import-sheet — import a link-shared sheet; headers become merge tags. - [List Sent Emails](https://www.sendping.co/docs/api/emails-list.md): GET /emails — list the emails your account has sent, newest first. - [List Attachments](https://www.sendping.co/docs/api/emails-list-attachments.md): GET /emails/:id/attachments — list the attachments on a sent email. - [Retrieve Attachment](https://www.sendping.co/docs/api/emails-get-attachment.md): GET /emails/:id/attachments/:attachment_id — fetch a single attachment from a sent email. - [List Received Emails](https://www.sendping.co/docs/api/emails-received-list.md): GET /emails/receiving — list the emails received by your domains. - [Retrieve Received Email](https://www.sendping.co/docs/api/emails-received-get.md): GET /emails/receiving/:id — fetch a single received email, its body, headers, and attachments. - [List Received Attachments](https://www.sendping.co/docs/api/emails-received-list-attachments.md): GET /emails/receiving/:id/attachments — list the attachments on a received email. - [Retrieve Received Attachment](https://www.sendping.co/docs/api/emails-received-get-attachment.md): GET /emails/receiving/:id/attachments/:attachment_id — fetch a single attachment from a received email. - [Delete Received Email](https://www.sendping.co/docs/api/emails-received-delete.md): DELETE /emails/receiving/:id — permanently delete a received email and its stored objects. - [Mark Received Email Read or Unread](https://www.sendping.co/docs/api/emails-received-update.md): PATCH /emails/receiving/:id — mark a received email as read or unread. - [Download Raw Received Email](https://www.sendping.co/docs/api/emails-received-raw.md): GET /emails/receiving/:id/raw — download the original RFC 822 .eml bytes for a received email. - [Forward Received Email](https://www.sendping.co/docs/api/emails-received-forward.md): POST /emails/receiving/:id/forward — forward a received email (with its attachments) to another address. - [Reply to Received Email](https://www.sendping.co/docs/api/receiving-reply.md): POST /emails/receiving/:id/reply — threaded reply to the sender; plus AI reply intent. - [List Logs](https://www.sendping.co/docs/api/logs-list.md): GET /logs — list the API request logs for your account. - [Retrieve Log](https://www.sendping.co/docs/api/logs-get.md): GET /logs/:id — fetch a single API request log with its request and response bodies. - [Pagination](https://www.sendping.co/docs/api/pagination.md): How cursor-based pagination works across SendPing list endpoints: limit, after, before, and has_more. - [Batch Delivery Modes](https://www.sendping.co/docs/api/emails-batch-delivery.md): How POST /emails/batch decides between sending inline (200) and queueing for background delivery (202). - [Claim Domain](https://www.sendping.co/docs/api/domains-claim.md): POST /domains/claim — claim a domain that is already verified by another account. - [Get Domain Claim](https://www.sendping.co/docs/api/domains-get-claim.md): GET /domains/:domain_id/claim — retrieve the latest claim for a domain. - [Verify Domain Claim](https://www.sendping.co/docs/api/domains-verify-claim.md): POST /domains/:domain_id/claim/verify — trigger DNS verification for a domain claim. - [Create Webhook](https://www.sendping.co/docs/api/webhooks-create.md): POST /webhooks — create a webhook to receive real-time notifications about email events. - [Rotate Webhook Secret](https://www.sendping.co/docs/api/webhooks-rotate.md): POST /webhooks/:id/rotate — replace the signing secret for a webhook. - [Test Webhook](https://www.sendping.co/docs/api/webhooks-test.md): POST /webhooks/:id/test — send a test event to a webhook endpoint. - [Retrieve Webhook](https://www.sendping.co/docs/api/webhooks-get.md): GET /webhooks/:id — retrieve a single webhook. - [List Webhooks](https://www.sendping.co/docs/api/webhooks-list.md): GET /webhooks — list every webhook on your account. - [Update Webhook](https://www.sendping.co/docs/api/webhooks-update.md): PATCH /webhooks/:id — update a webhook’s endpoint, events, or status. - [Delete Webhook](https://www.sendping.co/docs/api/webhooks-delete.md): DELETE /webhooks/:id — remove a webhook. - [Send Event](https://www.sendping.co/docs/api/events-send.md): POST /events/send — send a custom event to trigger automations for a contact. - [Create Event](https://www.sendping.co/docs/api/events-create.md): POST /events — create a custom event definition, optionally with a payload schema. - [List Events](https://www.sendping.co/docs/api/events-list.md): GET /events — list your custom event definitions. - [Update Event](https://www.sendping.co/docs/api/events-update.md): PATCH /events/:id — update a custom event definition's payload schema. - [Delete Event](https://www.sendping.co/docs/api/events-delete.md): DELETE /events/:id — delete a custom event definition. - [List Send Sources](https://www.sendping.co/docs/api/emails-sources.md): GET /emails/sources — per-source send and engagement rollups for campaigns, automations and individual sends. - [Send an email](https://www.sendping.co/docs/api/emails-send.md): POST /emails — send a single transactional email. - [Send a batch](https://www.sendping.co/docs/api/emails-batch.md): POST /emails/batch — send up to 100 emails in one request. - [Retrieve an email](https://www.sendping.co/docs/api/emails-get.md): GET /emails/:id — fetch an email object and its event log. - [Update an email](https://www.sendping.co/docs/api/emails-update.md): PATCH /emails/:id — reschedule a scheduled email. - [Cancel an email](https://www.sendping.co/docs/api/emails-cancel.md): POST /emails/:id/cancel — cancel a scheduled email. - [Create a domain](https://www.sendping.co/docs/api/domains-create.md): POST /domains — add a sending domain and get its SPF and DKIM records. - [Retrieve a domain](https://www.sendping.co/docs/api/domains-get.md): GET /domains/:id — fetch a single domain and its current DNS record statuses. - [Check MX records](https://www.sendping.co/docs/api/domains-mx-check.md): GET /domains/mx-check — preflight a hostname's existing MX records before enabling receiving. - [List domains](https://www.sendping.co/docs/api/domains-list.md): GET /domains — list every domain on your account. - [Update a domain](https://www.sendping.co/docs/api/domains-update.md): PATCH /domains/:id — toggle open and click tracking. - [Verify a domain](https://www.sendping.co/docs/api/domains-verify.md): POST /domains/:id/verify — re-check DNS and update the domain status. - [Set up DNS automatically](https://www.sendping.co/docs/api/domains-dns.md): Detect a domain's DNS provider and apply records automatically via Cloudflare, GoDaddy, or Namecheap. - [Delete a domain](https://www.sendping.co/docs/api/domains-delete.md): DELETE /domains/:id — remove a domain and its sending identity. - [Create audience](https://www.sendping.co/docs/api/audiences-create.md): POST /audiences — create a new contact list. - [Retrieve audience](https://www.sendping.co/docs/api/audiences-get.md): GET /audiences/:id — fetch a single audience by id. - [List audiences](https://www.sendping.co/docs/api/audiences-list.md): GET /audiences — page through the audiences you own. - [Delete audience](https://www.sendping.co/docs/api/audiences-delete.md): DELETE /audiences/:id — delete an audience and its contacts. - [Create contact](https://www.sendping.co/docs/api/contacts-create.md): POST /contacts — add a contact to a sending domain (upsert by email). - [Retrieve contact](https://www.sendping.co/docs/api/contacts-get.md): GET /contacts/:id — fetch a contact by id or email. - [Update contact](https://www.sendping.co/docs/api/contacts-update.md): PATCH /contacts/:id — partially update a contact. - [Delete contact](https://www.sendping.co/docs/api/contacts-delete.md): DELETE /contacts/:id — remove a contact by id or email. - [List contacts](https://www.sendping.co/docs/api/contacts-list.md): GET /contacts — list every contact on a sending domain. - [Update audience](https://www.sendping.co/docs/api/audiences-update.md): PATCH /audiences/:id — rename an audience. - [Import contacts (array)](https://www.sendping.co/docs/api/contacts-batch.md): POST /contacts/batch — bulk-import contacts into a sending domain from a JSON array. - [Import contacts (CSV)](https://www.sendping.co/docs/api/contacts-import.md): POST /audiences/:audience_id/contacts/import — bulk-import contacts from a CSV. - [Create campaign](https://www.sendping.co/docs/api/campaigns-create.md): POST /campaigns — create a draft campaign against a sending domain. - [Retrieve campaign](https://www.sendping.co/docs/api/campaigns-get.md): GET /campaigns/:id — fetch a single campaign. - [List campaigns](https://www.sendping.co/docs/api/campaigns-list.md): GET /campaigns — list your campaigns, newest first. - [Update campaign](https://www.sendping.co/docs/api/campaigns-update.md): PATCH /campaigns/:id — edit a draft campaign. - [Send campaign](https://www.sendping.co/docs/api/campaigns-send.md): POST /campaigns/:id/send — send a draft now or schedule it. - [Cancel campaign](https://www.sendping.co/docs/api/campaigns-cancel.md): POST /campaigns/:id/cancel — return a scheduled campaign to draft, or terminally stop one that is already sending. - [Delete campaign](https://www.sendping.co/docs/api/campaigns-delete.md): DELETE /campaigns/:id — permanently delete a campaign. - [Get Campaign A/B Result](https://www.sendping.co/docs/api/campaigns-ab.md): GET /campaigns/:id/ab — retrieve the A/B winner evaluation for a campaign. - [Get Campaign Engagement](https://www.sendping.co/docs/api/campaigns-engagement.md): GET /campaigns/:id/engagement — list the individual recipients who opened, clicked, or replied. - [Create API key](https://www.sendping.co/docs/api/api-keys-create.md): POST /api-keys — dashboard-only. Keys are generated in the dashboard; an API key cannot mint a key. - [List API keys](https://www.sendping.co/docs/api/api-keys-list.md): GET /api-keys — list your API keys (metadata only). - [Update API key](https://www.sendping.co/docs/api/api-keys-update.md): PATCH /api-keys/:id — dashboard-only. Key permissions are changed in the dashboard; an API key cannot re-scope a key. - [Delete API key](https://www.sendping.co/docs/api/api-keys-delete.md): DELETE /api-keys/:id — dashboard-only. Keys are revoked in the dashboard; an API key cannot revoke a key. - [Create segment](https://www.sendping.co/docs/api/segments-create.md): POST /segments — save a reusable filter over a sending domain’s contacts. - [List segments](https://www.sendping.co/docs/api/segments-list.md): GET /segments — list a sending domain’s segments. - [Retrieve segment](https://www.sendping.co/docs/api/segments-get.md): GET /segments/:id — fetch a single segment. - [List segment contacts](https://www.sendping.co/docs/api/segments-contacts.md): GET /segments/:id/contacts — the contacts that match a segment. - [Update segment](https://www.sendping.co/docs/api/segments-update.md): PATCH /segments/:id — edit a segment’s name or filter. - [Delete segment](https://www.sendping.co/docs/api/segments-delete.md): DELETE /segments/:id — remove a segment. - [Create topic](https://www.sendping.co/docs/api/topics-create.md): POST /topics — create a subscription topic within a sending domain. - [List topics](https://www.sendping.co/docs/api/topics-list.md): GET /topics — list the topics on a sending domain. - [Retrieve topic](https://www.sendping.co/docs/api/topics-get.md): GET /topics/:id — retrieve a single topic. - [Update topic](https://www.sendping.co/docs/api/topics-update.md): PATCH /topics/:id — rename a topic or change its description. - [Delete topic](https://www.sendping.co/docs/api/topics-delete.md): DELETE /topics/:id — delete a topic and all per-contact subscription state for it. - [Create Automation](https://www.sendping.co/docs/api/automations-create.md): POST /automations — create an entire automation flow in a single request. - [Add Automation Step](https://www.sendping.co/docs/api/automations-add-step.md): POST /automations/:id/steps — append a step to a disabled automation. - [Update Automation Step](https://www.sendping.co/docs/api/automations-update-step.md): PATCH /automations/:id/steps/:stepId — edit a step in place (type/config) on a disabled automation. - [Update Automation](https://www.sendping.co/docs/api/automations-update.md): PATCH /automations/:id — rename, enable or disable, re-point the domain or trigger, or replace the connection graph. - [List Automations](https://www.sendping.co/docs/api/automations-list.md): GET /automations — list your automations, newest first. - [Retrieve Automation](https://www.sendping.co/docs/api/automations-get.md): GET /automations/:id — retrieve one automation with its steps, connections, and enrollment counts. - [Stop Automation](https://www.sendping.co/docs/api/automations-stop.md): POST /automations/:id/stop — stop an automation from creating new runs. - [List Automation Runs](https://www.sendping.co/docs/api/automations-list-runs.md): GET /automations/:id/runs — list the runs of an automation, with optional status filtering. - [Retrieve Automation Run](https://www.sendping.co/docs/api/automations-get-run.md): GET /automations/:id/runs/:runId — retrieve one run including its step-by-step trace. - [Delete Automation](https://www.sendping.co/docs/api/automations-delete.md): DELETE /automations/:id — permanently delete an automation and everything attached to it. - [Delete Automation Step](https://www.sendping.co/docs/api/automations-delete-step.md): DELETE /automations/:id/steps/:stepId — remove a step from a disabled automation. - [Create template](https://www.sendping.co/docs/api/templates-create.md): POST /templates — save a reusable template. - [List templates](https://www.sendping.co/docs/api/templates-list.md): GET /templates — list your templates. - [Retrieve template](https://www.sendping.co/docs/api/templates-get.md): GET /templates/:id — fetch a single template. - [Update template](https://www.sendping.co/docs/api/templates-update.md): PATCH /templates/:id — edit a template's name, subject, or body. - [Publish template](https://www.sendping.co/docs/api/templates-publish.md): POST /templates/:id/publish — snapshot the draft and make it live. - [Duplicate template](https://www.sendping.co/docs/api/templates-duplicate.md): POST /templates/:id/duplicate — copy a template into a new draft. - [Delete template](https://www.sendping.co/docs/api/templates-delete.md): DELETE /templates/:id — remove a template. ## Knowledge Base - [Which sending feature should I use?](https://www.sendping.co/docs/kb/which-sending-feature.md): Transactional emails (POST /emails) are for one-to-one app email; campaigns are for one-to-many marketing to a sending domain’s contacts. How to choose. - [What addresses can I use for testing?](https://www.sendping.co/docs/kb/test-addresses.md): Use the mailbox simulator addresses to deterministically trigger delivered, bounce, and complaint events without harming your reputation. - [How do I create a sender / from address?](https://www.sendping.co/docs/kb/create-sender.md): You do not pre-create senders in SendPing — any address on a verified domain works as a from. Use the Name format. - [How do I set up automated (E2E) testing?](https://www.sendping.co/docs/kb/e2e-testing.md): Build an end-to-end test: use a sending_access API key, send to the mailbox simulator addresses, then assert on the returned email id and the webhook events. - [Knowledge Base](https://www.sendping.co/docs/kb/introduction.md): A collection of answers to frequently asked questions and step-by-step guides for getting the most out of SendPing. - [Can I receive emails with SendPing?](https://www.sendping.co/docs/kb/receive-emails.md): Yes — SendPing supports receiving inbound email via webhooks. Get notified on email.received, then retrieve full content and attachments through the Receiving API. - [Forward emails with SendPing Inbound](https://www.sendping.co/docs/kb/forward-inbound.md): Receive inbound email on a verified domain, get the email.received webhook, then fetch the content and attachments and forward the message on with POST /emails. - [Embed the React Email editor](https://www.sendping.co/docs/kb/embed-react-email-editor.md): Add the open-source React Email visual editor to your own app: install it, mount the base editor, theme it, add the Inspector sidebar, and send the exported HTML with POST /emails. - [Template emails with React Email](https://www.sendping.co/docs/kb/react-email-templates.md): Author email templates as React components with React Email — full TypeScript and Tailwind support and a live preview server — then render them to HTML and send with POST /emails. - [Get started with SendPing and Supabase](https://www.sendping.co/docs/kb/supabase-getting-started.md): Send Supabase Auth and Edge Function emails through SendPing: verify your domain and call the HTTPS Email API from a Deno Edge Function or Auth Hook. - [Setting up SendPing for multi-tenant apps](https://www.sendping.co/docs/kb/multi-tenant.md): Two patterns for SaaS apps that send on behalf of tenants: a single SendPing account with domain-scoped keys, or separate accounts (BYOK). Trade-offs in isolation, billing, and deliverability. - [Send emails with n8n and SendPing](https://www.sendping.co/docs/kb/n8n.md): Use the SendPing HTTP Request node in n8n to send email, plus a webhook trigger node to start workflows on delivery, bounce, and other email events. - [Add SendPing DNS records on Cloudflare](https://www.sendping.co/docs/integrations/cloudflare.md): Publish the SPF, DKIM, and DMARC records SendPing generates for your domain using the Cloudflare dashboard. - [Add SendPing DNS records on GoDaddy](https://www.sendping.co/docs/integrations/godaddy.md): Publish the SPF, DKIM, and DMARC records SendPing generates for your domain using the GoDaddy DNS Management page. - [Add SendPing DNS records on Namecheap](https://www.sendping.co/docs/integrations/namecheap.md): Publish the SPF, DKIM, and DMARC records SendPing generates for your domain using Namecheap’s Advanced DNS tab. - [Add SendPing DNS records on AWS Route 53](https://www.sendping.co/docs/integrations/route53.md): Publish the SPF, DKIM, and DMARC records SendPing generates for your domain in an AWS Route 53 hosted zone. - [Add SendPing DNS records on Vercel](https://www.sendping.co/docs/integrations/vercel.md): Publish the SPF, DKIM, and DMARC records SendPing generates for your domain using Vercel’s Domains DNS records UI. - [Add SendPing DNS records on Squarespace / Google Domains](https://www.sendping.co/docs/integrations/squarespace.md): Publish the SPF, DKIM, and DMARC records SendPing generates for your domain using Squarespace Domains (which now manages former Google Domains). - [What if my domain isn't verifying?](https://www.sendping.co/docs/kb/domain-not-verifying.md): A step-by-step checklist for a domain stuck at pending or failed: confirm the records were added exactly, wait for propagation, clear conflicting records, and re-verify. - [Should I send from a subdomain or the root domain?](https://www.sendping.co/docs/kb/subdomain-vs-root.md): Why sending from a dedicated subdomain like mail. or send. isolates sending reputation from your root domain — and how a verified root already covers its subdomains. - [Do I need 2048-bit DKIM?](https://www.sendping.co/docs/kb/dkim-key-size.md): How DKIM key size is handled in SendPing — it generates a 2048-bit key pair for you and you publish one DKIM TXT record holding the public key, so there is no size to choose. - [How do I avoid conflicts with my MX records?](https://www.sendping.co/docs/kb/mx-conflicts.md): The MX record SendPing adds lives on the send. MAIL FROM subdomain and only routes bounce/complaint feedback — it is separate from your inbound MX. Never remove your real MX records. - [DMARC explained: policy, alignment, and rollout](https://www.sendping.co/docs/kb/dmarc.md): What DMARC is, why SendPing starts you at p=none, how to monitor and then tighten to quarantine or reject, and how alignment works through the SPF MAIL FROM and DKIM. - [DreamHost](https://www.sendping.co/docs/kb/dreamhost.md): Publish the SPF, DKIM, and DMARC records SendPing generates for your domain using the DreamHost panel’s DNS editor. - [Gandi](https://www.sendping.co/docs/kb/gandi.md): Publish the SPF, DKIM, and DMARC records SendPing generates for your domain using Gandi’s DNS Records tab — including the required trailing dot on MX values. - [Hetzner](https://www.sendping.co/docs/kb/hetzner.md): Publish the SPF, DKIM, and DMARC records SendPing generates for your domain using the Hetzner Console (or legacy Hetzner DNS Console). - [Hostinger](https://www.sendping.co/docs/kb/hostinger.md): Publish the SPF, DKIM, and DMARC records SendPing generates for your domain using Hostinger’s DNS / Nameservers manager. - [IONOS](https://www.sendping.co/docs/kb/ionos.md): Publish the SPF, DKIM, and DMARC records SendPing generates for your domain using the IONOS DNS manager. - [Porkbun](https://www.sendping.co/docs/kb/porkbun.md): Publish the SPF, DKIM, and DMARC records SendPing generates for your domain using Porkbun’s DNS editor. - [Strato](https://www.sendping.co/docs/kb/strato.md): Publish the SPF, DKIM, and DMARC records SendPing generates for your domain on Strato — including creating the send subdomain to host the MX record. - [Domain already registered by another account](https://www.sendping.co/docs/kb/domain-already-registered.md): Resolve the 403 “domain already registered” error by confirming domain ownership and account access, and requesting a release if needed. - [How do I send with an avatar?](https://www.sendping.co/docs/kb/send-with-avatar.md): Show your logo or photo as an avatar in recipients' inboxes. Per-provider profile pictures only cover that provider; BIMI and Apple Branded Mail let your logo show across an entire domain. - [How do I set up Apple Branded Mail?](https://www.sendping.co/docs/kb/apple-branded-mail.md): Apple Branded Mail displays your logo as an avatar in Apple Mail on recent iOS, iPadOS, and macOS. It needs no certificate, accepts more image formats than BIMI, and requires a strict DMARC policy plus an Apple Business Connect account. - [How to avoid Gmail's spam folder](https://www.sendping.co/docs/kb/avoid-gmail-spam.md): Gmail filters on authentication, sender reputation, and recipient engagement. Authenticate your domain, keep complaints low, and send mail people want. - [How to avoid Outlook's spam folder](https://www.sendping.co/docs/kb/avoid-outlook-spam.md): Outlook and Microsoft 365 weight sender reputation heavily and run aggressive link/attachment scanners. Authenticate, build reputation slowly, and keep complaints near zero. - [How to avoid iCloud's spam folder](https://www.sendping.co/docs/kb/avoid-icloud-spam.md): Apple's iCloud Mail is strict on authentication and complaints, and Apple Mail Privacy Protection inflates open rates. Authenticate, keep lists clean, and don't trust opens from Apple clients. - [Why are my emails going to spam?](https://www.sendping.co/docs/kb/why-spam.md): The usual culprits: missing authentication, weak sender reputation, high complaints, poor list hygiene, sudden volume spikes, or spammy content — and how to fix each. - [Why is an address on my suppression list?](https://www.sendping.co/docs/kb/suppression-list.md): SendPing auto-adds an address to your account-wide suppression list on a hard bounce, a complaint, or an unsubscribe — and skips it on every later send to protect your reputation. - [Domain & sending warm-up guide](https://www.sendping.co/docs/kb/warm-up.md): Build sender reputation by ramping volume gradually and mailing your most engaged recipients first. A practical schedule for new domains. - [Should I add an unsubscribe link?](https://www.sendping.co/docs/kb/unsubscribe-link.md): Yes for bulk and marketing mail — it's required by law and by mailbox providers. SendPing campaigns auto-inject a per-contact link and a List-Unsubscribe header. Transactional opt-out is sender-driven. - [What counts as email consent?](https://www.sendping.co/docs/kb/consent.md): Explicit opt-in is real consent; purchased and scraped lists are not. A practical look at CAN-SPAM and CASL basics and what they require. - [Keeping your audiences healthy](https://www.sendping.co/docs/kb/audience-hygiene.md): Remove bounces and unsubscribes, re-engage or drop inactive contacts, and watch your complaint rate. A clean list is the foundation of inbox placement. - [Maximize deliverability for Supabase Auth emails](https://www.sendping.co/docs/kb/supabase-auth-deliverability.md): Five steps to land Supabase authentication emails — verifications, magic links, password resets — in the inbox when sending through SendPing: custom domain, a dedicated subdomain, no tracking, link-scanner handling, and DMARC. - [Sending to Apple Private Relay](https://www.sendping.co/docs/kb/apple-private-relay.md): Reliably deliver to @privaterelay.appleid.com (Sign in with Apple's Hide My Email). Register your sending domains — including SendPing's return-path subdomain — and from-addresses in the Apple Developer Portal, and authenticate with SPF and DKIM. - [How do Dedicated IPs work?](https://www.sendping.co/docs/kb/dedicated-ips.md): SendPing sends on a shared, professionally-managed IP pool by default, and Scale plans can add a dedicated IP. Here's why shared is the right default for most senders, what a dedicated IP actually buys you, and when it helps versus hurts. - [Why use Topics?](https://www.sendping.co/docs/kb/why-use-topics.md): Topics let recipients opt out of one kind of email without unsubscribing from everything. That keeps engagement high and complaints low — which protects deliverability. Here's when to use Topics, and how they differ from Segments. - [Account quotas and limits](https://www.sendping.co/docs/kb/quotas.md): How the plan sending quotas, per-request limits, and rate limiting work — and how to raise your limits. - [Does SendPing require production approval?](https://www.sendping.co/docs/kb/production-approval.md): No — there is no approval step. New accounts start on the Free plan limits, and higher limits come from upgrading your plan. - [How to handle API keys securely](https://www.sendping.co/docs/kb/handling-api-keys.md): Best practices for SendPing API keys: keep them server-side, scope them to sending, rotate them, and revoke leaked keys. - [How do I fix CORS issues?](https://www.sendping.co/docs/kb/cors.md): The SendPing API is server-to-server. Calling it from a browser triggers CORS errors and leaks your key — proxy through your own backend instead. - [How do I keep sensitive data out of SendPing?](https://www.sendping.co/docs/kb/sensitive-data.md): What SendPing retains in the email log, and how to avoid putting secrets you do not want stored into subjects and bodies. - [How does pricing work?](https://www.sendping.co/docs/kb/pricing.md): SendPing pricing is usage-based by emails sent, with a free tier for getting started. - [How do I change my account email?](https://www.sendping.co/docs/kb/change-account-email.md): Change the email address on your SendPing account from your account settings in the dashboard. - [How do I delete my account or team?](https://www.sendping.co/docs/kb/delete-account.md): Delete your SendPing account or team from settings, and what happens to your domains, API keys, and data. - [Where can I find documents like DPA or W-9?](https://www.sendping.co/docs/kb/downloading-documents.md): Download compliance and tax documents — penetration test attestation, SOC 2 report, DPA, and W-9 — from Settings → Documents in the SendPing dashboard. - [Why am I getting a restricted_api_key error?](https://www.sendping.co/docs/kb/403-errors.md): A 401 restricted_api_key means your API key lacks permission for the action. Here is how to tell that apart from a missing User-Agent header (a 403), an unverified or mismatched domain (a 422), and new-account sending restrictions. - [It says delivered but the recipient didn't get it](https://www.sendping.co/docs/kb/delivered-not-received.md): A delivered event means the receiving mail server accepted the message — not that it reached the inbox. Here is where a "delivered but missing" email usually ends up. - [Why aren't my open rates accurate?](https://www.sendping.co/docs/kb/open-rates-accuracy.md): Open tracking relies on a 1x1 pixel, which modern mail clients distort in both directions. Treat opens as a directional signal, not an exact count. - [Opportunistic vs enforced TLS](https://www.sendping.co/docs/kb/tls.md): TLS encrypts email in transit between mail servers. Opportunistic TLS prioritizes delivery; enforced TLS prioritizes confidentiality. Here is the tradeoff. - [What attachment types aren't supported?](https://www.sendping.co/docs/kb/unsupported-attachments.md): Attachments are capped at 25 MB per file and 40 MB total, and executable/dangerous file types are widely rejected by receiving providers. Link to large or risky files instead. ## Comparisons Honest comparisons against other email services — pricing checked against public pricing pages, with verified-on dates and concessions on every page. - [All comparisons](https://www.sendping.co/vs): SendPing vs every major email API and platform. - [Alternative guides](https://www.sendping.co/alternatives): why teams switch, what each tool still does well, 5-step migrations. - [SendPing vs Resend](https://www.sendping.co/vs/resend): Resend is a developer-focused email API best known for React Email, polished docs, and a strong presence in the JavaScript ecosystem. - [SendPing vs SendGrid](https://www.sendping.co/vs/sendgrid): SendGrid is Twilio’s email platform — one of the oldest and largest, built for high-volume senders and enterprise deliverability programs. - [SendPing vs Mailgun](https://www.sendping.co/vs/mailgun): Mailgun is a long-running transactional email API from Sinch, with strong parsing and routing features, popular with engineering teams since 2010. - [SendPing vs Postmark](https://www.sendping.co/vs/postmark): Postmark is ActiveCampaign’s transactional email service, famous for deliverability focus, message streams, and publishing its own time-to-inbox metrics. - [SendPing vs Amazon SES](https://www.sendping.co/vs/amazon-ses): Amazon SES is raw email-sending infrastructure from AWS — the lowest per-email price available, with everything above the SMTP/API layer left for you to build. - [SendPing vs MailerSend](https://www.sendping.co/vs/mailersend): MailerSend is the transactional email service from the MailerLite family, known for approachable design, a drag-and-drop template editor, and email verification tools. - [SendPing vs SMTP2GO](https://www.sendping.co/vs/smtp2go): SMTP2GO is a reliability-focused SMTP relay and email API with a long-standing free tier, popular for getting application and device email delivered with minimal fuss. - [SendPing vs Mailjet](https://www.sendping.co/vs/mailjet): Mailjet is a European email service from Sinch (sister to Mailgun), combining an email API with a drag-and-drop editor and team collaboration features. - [SendPing vs ZeptoMail](https://www.sendping.co/vs/zeptomail): ZeptoMail is Zoho’s transactional-only email service with pay-as-you-go credit pricing, popular with cost-conscious teams — especially in India. - [SendPing vs Mandrill](https://www.sendping.co/vs/mandrill): Mandrill is Mailchimp Transactional — an add-on for sending application email, available only alongside a paid Mailchimp Standard or Premium marketing plan. - [SendPing vs Brevo](https://www.sendping.co/vs/brevo): Brevo is an all-in-one marketing platform (formerly Sendinblue) — email, SMS, WhatsApp, chat, and a CRM — priced by email volume with unlimited contacts on paid plans. - [SendPing vs Loops](https://www.sendping.co/vs/loops): Loops is "email for SaaS" — marketing, product, and transactional email behind a Notion-style editor, priced by contact count with unlimited sends. - [SendPing vs Customer.io](https://www.sendping.co/vs/customer-io): Customer.io is a behavioral messaging platform for lifecycle marketing — data-driven journeys across email, push, in-app, and SMS, priced by profile count. ## Blog Guides on deliverability, authentication, and email engineering. The [blog index](https://www.sendping.co/blogs) includes the latest articles published through RankWin CMS. Published articles also provide a plain-text version at their /raw URL. ## Datasets - [Email provider comparison dataset (JSON, CC-BY-4.0)](https://www.sendping.co/data/email-providers-comparison.json): machine-readable pricing and feature comparison of 13 email services with verified-on dates. Free to cite with attribution. ## Optional - [Features overview](https://www.sendping.co/features): What the platform does, feature by feature. - [Pricing](https://www.sendping.co/pricing): Free, Pro ($14/mo), and Scale ($63/mo) plans. - [FAQ](https://www.sendping.co/faq): Common questions about domains, sending, and deliverability. - [Changelog](https://www.sendping.co/changelog): Latest product updates.