# Opensend > Self-hosted email with Next.js, Convex, and AWS SES. Every page in one file: https://opensend.cc/docs/llms-full.txt ## Get started - [Introduction](https://opensend.cc/docs/index.md): Send email from your own infrastructure with a Resend-compatible API. - [Create an API key](https://opensend.cc/docs/create-an-api-key.md): Authenticate server requests with a team-scoped key. - [Add and verify a domain](https://opensend.cc/docs/add-a-domain.md): Connect a domain you own before sending email. - [Self-host in 10 minutes](https://opensend.cc/docs/self-host-in-10-minutes.md): Install Opensend with one command and prebuilt Docker images. - [Migrate from Resend](https://opensend.cc/docs/migrate-from-resend.md): Move domains, webhooks, templates, and contacts to your own Opensend installation. ## Quickstarts - [Send with Node.js](https://opensend.cc/docs/quickstarts/nodejs.md): Send your first email from Node.js. - [Send with Next.js](https://opensend.cc/docs/quickstarts/nextjs.md): Send your first email from Next.js. - [Send with Express](https://opensend.cc/docs/quickstarts/express.md): Send your first email from Express. - [Send with Bun](https://opensend.cc/docs/quickstarts/bun.md): Send your first email from Bun. - [Send with Hono](https://opensend.cc/docs/quickstarts/hono.md): Send your first email from Hono. - [Send with cURL / HTTP](https://opensend.cc/docs/quickstarts/http.md): Use the REST API without an SDK. - [Send with SMTP](https://opensend.cc/docs/quickstarts/smtp.md): Submit messages through your installation’s TLS SMTP gateway. - [Send with Better Auth emails](https://opensend.cc/docs/quickstarts/better-auth.md): Send your first email from Better Auth emails. ## Self-hosting - [Requirements](https://opensend.cc/docs/self-hosting/requirements.md): Server size, tools and public origins for a self-hosted install. - [Docker Compose](https://opensend.cc/docs/self-hosting/docker-compose.md): Install manually with prebuilt release images, or build from source. - [Reverse proxy and TLS](https://opensend.cc/docs/self-hosting/reverse-proxy.md): Serve the three public origins over HTTPS, with the Caddy add-on or your own proxy, and add TLS for custom tracking hosts. - [Change the public URL](https://opensend.cc/docs/self-hosting/change-public-url.md): Move a provisioned installation to a new backend URL, for example from a temporary tunnel to a permanent host. - [Environment variables](https://opensend.cc/docs/self-hosting/environment-variables.md): Configure Compose images, public origins, ports, and backend settings. - [AWS SES onboarding](https://opensend.cc/docs/self-hosting/aws-ses.md): Connect your AWS account and prepare your sending regions. - [SES tenancy](https://opensend.cc/docs/self-hosting/ses-tenancy.md): Understand how teams map to AWS SES tenants. - [Self-hosted Convex](https://opensend.cc/docs/self-hosting/self-hosted-convex.md): Use the optional dashboard and migrate CLI to operate your backend. - [Convex Cloud](https://opensend.cc/docs/self-hosting/convex-cloud.md): Run the Opensend dashboard on your server with Convex Cloud as the backend. - [SMTP gateway](https://opensend.cc/docs/self-hosting/smtp-gateway.md): Expose authenticated submission with trusted TLS. - [Recovering an account](https://opensend.cc/docs/self-hosting/recovering-an-account.md): Recover access using account flows or an operator command. - [Upgrading](https://opensend.cc/docs/self-hosting/upgrading.md): Back up, upgrade release images, and restore a backup if you need to roll back. - [Security notes](https://opensend.cc/docs/self-hosting/security.md): Protect installation secrets and limit credential access. - [Background jobs and retention](https://opensend.cc/docs/self-hosting/background-jobs.md): Understand import jobs, export limits, and automatic cleanup. ## Domains - [Manage domains](https://opensend.cc/docs/dashboard/domains/manage.md): Add a sending domain, publish its DNS records, and change its settings. - [DMARC](https://opensend.cc/docs/dashboard/domains/dmarc.md): Publish a DMARC policy for your domain. - [Open and click tracking](https://opensend.cc/docs/dashboard/domains/tracking.md): Measure opens and clicks through a tracking subdomain served by your own installation. - [TLS policy](https://opensend.cc/docs/dashboard/domains/tls.md): Choose whether delivery to receiving mail servers must use TLS. - [Regions](https://opensend.cc/docs/dashboard/domains/regions.md): Choose the AWS region a domain sends from. ## Emails - [Sending emails](https://opensend.cc/docs/dashboard/emails/sending.md): Send transactional mail from a verified domain and follow it in the dashboard. - [Share emails](https://opensend.cc/docs/dashboard/emails/share.md): Create a temporary public link to a sent or received email. - [Batch sending](https://opensend.cc/docs/dashboard/emails/batch.md): Send between 1 and 100 messages in one request. - [Attachments](https://opensend.cc/docs/dashboard/emails/attachments.md): Attach files using base64 content or a public HTTPS URL. - [Inline images](https://opensend.cc/docs/dashboard/emails/inline-images.md): Embed images using Content-ID attachments. - [Schedule email](https://opensend.cc/docs/dashboard/emails/scheduling.md): Queue an email for a future time. - [Custom headers](https://opensend.cc/docs/dashboard/emails/custom-headers.md): Add application headers to outgoing mail. - [Idempotency keys](https://opensend.cc/docs/dashboard/emails/idempotency.md): Retry HTTP submissions without queuing another copy. - [Bounces](https://opensend.cc/docs/dashboard/emails/bounces.md): Inspect recipient delivery failures. - [Suppressions](https://opensend.cc/docs/dashboard/emails/suppressions.md): Stop sending to addresses that bounced, complained, or asked not to be contacted. - [Tags](https://opensend.cc/docs/dashboard/emails/tags.md): Attach identifiers to an email for later correlation. - [Unsubscribe links](https://opensend.cc/docs/dashboard/emails/unsubscribe-links.md): Give recipients a way to manage their email preferences. - [Email metrics](https://opensend.cc/docs/dashboard/emails/metrics.md): Query delivery counts and rates for your installation. ## Receiving - [Receiving emails](https://opensend.cc/docs/dashboard/receiving/introduction.md): Receive email for a domain connected to your installation. - [Manage received emails](https://opensend.cc/docs/dashboard/receiving/manage.md): Find and read received messages in the dashboard. - [Receiving attachments](https://opensend.cc/docs/dashboard/receiving/attachments.md): Download attachments using short-lived signed URLs. - [Get email content](https://opensend.cc/docs/dashboard/receiving/content.md): Retrieve HTML, plain text, headers, and raw MIME. ## Broadcasts - [Broadcasts](https://opensend.cc/docs/dashboard/broadcasts.md): Write one email and send it to a segment of your contacts. ## Automations - [Automations](https://opensend.cc/docs/dashboard/automations/introduction.md): Build workflows that start when your app sends a custom event. - [Trigger](https://opensend.cc/docs/dashboard/automations/trigger.md): Start runs with a custom event your app sends. - [Condition](https://opensend.cc/docs/dashboard/automations/condition.md): Branch a run on the trigger payload or the contact's data. - [Delay](https://opensend.cc/docs/dashboard/automations/delay.md): Pause a run for a set time. - [Wait for event](https://opensend.cc/docs/dashboard/automations/wait-for-event.md): Pause a run until an event arrives for the same contact, or a timeout passes. - [Send email](https://opensend.cc/docs/dashboard/automations/send-email.md): Send a published template to the run's contact. - [Contact steps](https://opensend.cc/docs/dashboard/automations/contact-steps.md): Update or delete the run's contact, or add it to a segment. - [Runs](https://opensend.cc/docs/dashboard/automations/runs.md): Follow each run's status and step results, and stop a run. ## Templates - [Template editor](https://opensend.cc/docs/dashboard/templates/editor.md): Write reusable emails, publish them, and send them from the API or automations. - [Template variables](https://opensend.cc/docs/dashboard/templates/variables.md): Personalize a template with values supplied at send time. - [Template versions](https://opensend.cc/docs/dashboard/templates/version-history.md): How a template's draft and published version relate. ## Audience - [Contacts](https://opensend.cc/docs/dashboard/audience/contacts.md): Store the people you email, with their properties, segments, and topic choices. - [Contact properties](https://opensend.cc/docs/dashboard/audience/properties.md): Store your own string and number fields on contacts. - [Segments](https://opensend.cc/docs/dashboard/audience/segments.md): Group contacts to target broadcasts. - [Topics](https://opensend.cc/docs/dashboard/audience/topics.md): Let contacts choose which kinds of email they receive. - [Unsubscribe page](https://opensend.cc/docs/dashboard/audience/unsubscribe-page.md): The page where contacts manage their topic preferences or unsubscribe. - [Contact imports](https://opensend.cc/docs/dashboard/audience/imports.md): Upload a CSV and follow its background import through the API. ## Dashboard - [Logs](https://opensend.cc/docs/dashboard/logs.md): Inspect the API and SMTP requests your team made. - [Exports](https://opensend.cc/docs/dashboard/exports.md): Download filtered dashboard lists as CSV. - [OAuth apps](https://opensend.cc/docs/dashboard/oauth-apps.md): Authorize integrations for a single team. - [Usage](https://opensend.cc/docs/dashboard/usage.md): See your team's email volume and audience size, and the shared Amazon SES quota. - [Keyboard shortcuts](https://opensend.cc/docs/dashboard/keyboard-shortcuts.md): Move around the dashboard and act on lists without the mouse. - [Profile](https://opensend.cc/docs/dashboard/profile.md): Manage your own account: email, teams, sign-in methods, MFA, apps, and deletion. ## Team - [Team roles](https://opensend.cc/docs/dashboard/team/roles.md): What members, team admins, and the installation administrator can do. - [Invitations](https://opensend.cc/docs/dashboard/team/invitations.md): Invite people to your team. - [SSO](https://opensend.cc/docs/dashboard/team/sso.md): Let your team sign in with your OpenID Connect identity provider. ## Webhooks - [Webhooks](https://opensend.cc/docs/webhooks/introduction.md): Receive signed HTTP notifications when email, contact, domain, and suppression state changes. - [Create a webhook](https://opensend.cc/docs/webhooks/create.md): Add a public HTTPS endpoint in the dashboard or through the REST API, and manage it afterwards. - [Verify webhook requests](https://opensend.cc/docs/webhooks/verify.md): Check the Svix-compatible signature on every request before you trust its payload. - [Retries and replays](https://opensend.cc/docs/webhooks/retries.md): How failed deliveries are retried, when an endpoint is disabled, and how to replay an event. ## Webhook events - [email.sent](https://opensend.cc/docs/webhooks/events/email-sent.md): Amazon SES accepted the email for delivery. - [email.delivered](https://opensend.cc/docs/webhooks/events/email-delivered.md): The recipient's mail server accepted the email. - [email.delivery_delayed](https://opensend.cc/docs/webhooks/events/email-delivery-delayed.md): Amazon SES could not deliver yet and is still trying. - [email.opened](https://opensend.cc/docs/webhooks/events/email-opened.md): The tracking pixel in the email was loaded. - [email.clicked](https://opensend.cc/docs/webhooks/events/email-clicked.md): A tracked link in the email was followed. - [email.bounced](https://opensend.cc/docs/webhooks/events/email-bounced.md): The recipient's mail server rejected the email. - [email.complained](https://opensend.cc/docs/webhooks/events/email-complained.md): A recipient marked the email as spam. - [email.received](https://opensend.cc/docs/webhooks/events/email-received.md): An incoming email was stored for a receiving domain. - [email.failed](https://opensend.cc/docs/webhooks/events/email-failed.md): The email could not be sent. - [email.scheduled](https://opensend.cc/docs/webhooks/events/email-scheduled.md): An email was accepted with a future send time. - [email.suppressed](https://opensend.cc/docs/webhooks/events/email-suppressed.md): The email was not sent because no recipient could receive it. - [contact.created](https://opensend.cc/docs/webhooks/events/contact-created.md): A contact was created. - [contact.updated](https://opensend.cc/docs/webhooks/events/contact-updated.md): A contact's fields, segments, or topic choices changed. - [contact.deleted](https://opensend.cc/docs/webhooks/events/contact-deleted.md): A contact was deleted. - [domain.created](https://opensend.cc/docs/webhooks/events/domain-created.md): A domain was added to the team. - [domain.updated](https://opensend.cc/docs/webhooks/events/domain-updated.md): A domain's status or settings changed. - [domain.deleted](https://opensend.cc/docs/webhooks/events/domain-deleted.md): A domain was removed from the team. - [suppression.added](https://opensend.cc/docs/webhooks/events/suppression-added.md): An address was added to the team's suppression list. - [suppression.removed](https://opensend.cc/docs/webhooks/events/suppression-removed.md): An address was removed from the team's suppression list. ## API reference - [API introduction](https://opensend.cc/docs/api-reference/introduction.md): Use your installation’s HTTP API with bearer authentication. - [Compatibility with Resend](https://opensend.cc/docs/api-reference/compatibility.md): Understand supported operations and the differences to account for when migrating. ## API · Emails - [Send Email](https://opensend.cc/docs/api-reference/emails/send.md): Send an email from a verified sender (requires sending or full access). Suppressed recipients are excluded, and unsubscribe headers are not added automatically. - [Send Batch Emails](https://opensend.cc/docs/api-reference/emails/batch.md): Send up to 100 emails in one request, without attachments (requires sending or full access). Requests are limited to 1 MiB; strict validation rejects the whole batch, while permissive validation returns successful IDs and errors by input index. - [List Sent Emails](https://opensend.cc/docs/api-reference/emails/list.md): List email metadata without message bodies (requires full access). Emails are kept for 30 days after sending or failure; pending emails remain available. - [Retrieve Sent Email](https://opensend.cc/docs/api-reference/emails/get.md): Retrieve an email, including its content, tags, and scheduled send time (requires full access). Unavailable content and message IDs are null, and missing recipient lists are empty arrays. - [Update Email](https://opensend.cc/docs/api-reference/emails/update.md): Reschedule an email that has not been released for delivery (requires full access). Returns the email ID, or a 422 error if delivery has already started. - [Cancel Email](https://opensend.cc/docs/api-reference/emails/cancel.md): Cancel a scheduled email before it is released for delivery (requires full access). Returns the email ID, or a 422 error if delivery has already started. - [Retrieve Metrics](https://opensend.cc/docs/api-reference/emails/metrics.md): Retrieve email metrics for your team or domains, with 15-minute precision and a maximum range of one year (requires full access). A request can cover up to 31 domain-period spans. - [List Attachments](https://opensend.cc/docs/api-reference/emails/attachments.md): List attachments for a sent email with download links that expire after one hour (requires full access). Deleting the team or expiring the email revokes these links. - [Retrieve Attachment](https://opensend.cc/docs/api-reference/emails/attachment.md): Retrieve a sent email attachment with a download link that expires after one hour (requires full access). Deleting the team or expiring the email revokes the link. - [Share Email](https://opensend.cc/docs/api-reference/emails/share.md): Create a public link for a sent or received email. Defaults to 48 hours; longer or invalid durations return 422. ## API · Receiving - [List Received Emails](https://opensend.cc/docs/api-reference/receiving/list.md): List received email metadata, newest first, without bodies, headers, or authentication details (requires full access). Received emails are kept for 30 days. - [Retrieve Received Email](https://opensend.cc/docs/api-reference/receiving/get.md): Retrieve a received email with authentication results and a raw MIME download link that expires after one hour (requires full access). If parsing fails, metadata and raw MIME remain available, but decoded content and attachments are empty. - [List Attachments](https://opensend.cc/docs/api-reference/receiving/attachments.md): List attachments for a received email with download links that expire after one hour (requires full access). - [Retrieve Attachment](https://opensend.cc/docs/api-reference/receiving/attachment.md): Retrieve a received email attachment with a download link that expires after one hour (requires full access). List parameters are ignored. ## API · Broadcasts - [Create Broadcast](https://opensend.cc/docs/api-reference/broadcasts/create.md): Create a broadcast with HTML or plain text content (requires full access). Recipients are checked for suppressions and subscription preferences before sending, and personalized unsubscribe links are included. - [List Broadcasts](https://opensend.cc/docs/api-reference/broadcasts/list.md): List broadcasts for your team (requires full access). - [Retrieve Broadcast](https://opensend.cc/docs/api-reference/broadcasts/get.md): Retrieve a broadcast (requires full access). - [Update Broadcast](https://opensend.cc/docs/api-reference/broadcasts/update.md): Edit a draft or canceled broadcast, or rename a broadcast in any other state (requires full access). Use the send endpoint to schedule delivery; send and scheduled_at fields are ignored here. - [Send Broadcast](https://opensend.cc/docs/api-reference/broadcasts/send.md): Send a broadcast now or schedule it for later (requires full access). Recipients are selected when sending begins, with suppression and subscription checks repeated before delivery. - [Cancel Broadcast](https://opensend.cc/docs/api-reference/broadcasts/cancel.md): Cancel a scheduled broadcast before recipient selection begins (requires full access). Once sending begins, the broadcast cannot be canceled and submitted emails cannot be recalled. - [Duplicate Broadcast](https://opensend.cc/docs/api-reference/broadcasts/duplicate.md): Copy a broadcast into a new draft with the same recipients, sender, subject, reply-to, preview text, and content (requires full access). The copy name adds " (copy)" and is limited to 70 characters. - [Delete Broadcast](https://opensend.cc/docs/api-reference/broadcasts/delete.md): Delete a draft, canceled, or scheduled broadcast (requires full access). Deleting a scheduled broadcast cancels its send, and related cleanup may finish after the response. - [List Recipients](https://opensend.cc/docs/api-reference/broadcasts/recipients.md): List a broadcast’s recipients and delivery results (requires full access). Completed reports are kept for 30 days. - [List Clicked Links](https://opensend.cc/docs/api-reference/broadcasts/clicked-links.md): List broadcast links ranked by total clicks, highest first (requires full access). Unique clicks count distinct recipient messages, and completed reports are kept for 30 days. ## API · Automations - [Create Automation](https://opensend.cc/docs/api-reference/automations/create.md): Create an automation with one trigger and up to 100 execution steps (requires full access). Definitions are limited to 64 KiB and 12 levels of nesting; unsupported steps, options, cycles, and joins return 422. - [Update Automation](https://opensend.cc/docs/api-reference/automations/update.md): Update an automation’s name, status, or workflow (requires full access). Disable it in a separate request before editing steps and connections; enabled workflow edits return 422. - [Retrieve Automation](https://opensend.cc/docs/api-reference/automations/get.md): Retrieve an automation (requires full access). - [List Automations](https://opensend.cc/docs/api-reference/automations/list.md): List automations for your team (requires full access). - [Duplicate Automation](https://opensend.cc/docs/api-reference/automations/duplicate.md): Copy an automation’s workflow and settings into a disabled automation with a copy suffix in its name (requires full access). - [Stop Automation](https://opensend.cc/docs/api-reference/automations/stop.md): Disable an automation to prevent new runs (requires full access). Existing runs continue to completion. - [Delete Automation](https://opensend.cc/docs/api-reference/automations/delete.md): Delete an automation and stop its execution (requires full access). Run history is removed after deletion. - [List Automation Runs](https://opensend.cc/docs/api-reference/automations/list-runs.md): List runs for an automation, optionally filtered by status (requires full access). - [Retrieve Automation Run](https://opensend.cc/docs/api-reference/automations/get-run.md): Retrieve an automation run and its step history in workflow order (requires full access). ## API · Events - [Create Event](https://opensend.cc/docs/api-reference/events/create.md): Create an event definition (requires full access). - [List Events](https://opensend.cc/docs/api-reference/events/list.md): List events for your team (requires full access). - [Retrieve Event](https://opensend.cc/docs/api-reference/events/get.md): Retrieve an event definition by ID or name (requires full access). - [Update Event](https://opensend.cc/docs/api-reference/events/update.md): Update an event’s payload schema by ID or name (requires full access). A null or omitted schema clears the definition’s validation rules. - [Delete Event](https://opensend.cc/docs/api-reference/events/delete.md): Delete an event definition by ID or name (requires full access). Related cleanup may finish after the response. - [Send Event](https://opensend.cc/docs/api-reference/events/send.md): Send an event to trigger automations, even if the event has no saved definition (requires full access). Sent events are kept for 30 days and are not forwarded to webhooks. ## API · Templates - [Create Template](https://opensend.cc/docs/api-reference/templates/create.md): Create a draft email template (requires full access). Variables are inferred from inline merge tags unless explicit definitions are supplied. - [List Templates](https://opensend.cc/docs/api-reference/templates/list.md): List templates for your team (requires full access). - [Retrieve Template](https://opensend.cc/docs/api-reference/templates/get.md): Retrieve the current template draft and its variables (requires full access). Each template has one draft and one published version; earlier versions are unavailable. - [Update Template](https://opensend.cc/docs/api-reference/templates/update.md): Update a template draft without changing the published version (requires full access). The current version ID changes when the draft is edited and stays the same when published. - [Publish Template](https://opensend.cc/docs/api-reference/templates/publish.md): Publish the current template draft for sending (requires full access). Nonempty HTML is required, and publishing replaces the previous published version. - [Duplicate Template](https://opensend.cc/docs/api-reference/templates/duplicate.md): Copy the current template draft with a unique alias and a copy suffix in its name (requires full access). This endpoint accepts no body options. - [Delete Template](https://opensend.cc/docs/api-reference/templates/delete.md): Delete a template, including its draft and published version (requires full access). ## API · Contacts - [Create Contact](https://opensend.cc/docs/api-reference/contacts/create.md): Create a contact or update an existing contact with the same email address, ignoring case (requires full access). Supplied fields and segment memberships are merged into the contact. - [List Contacts](https://opensend.cc/docs/api-reference/contacts/list.md): List contacts for your team (requires full access). - [Retrieve Contact](https://opensend.cc/docs/api-reference/contacts/get.md): Retrieve a contact by ID or URL-encoded email address (requires full access). - [Update Contact](https://opensend.cc/docs/api-reference/contacts/update.md): Update a contact by ID or URL-encoded email address (requires full access). The email address cannot be changed; any supplied email field is ignored. - [Delete Contact](https://opensend.cc/docs/api-reference/contacts/delete.md): Delete a contact by ID or URL-encoded email address (requires full access). Related cleanup may finish after the response. - [List Contact Segments](https://opensend.cc/docs/api-reference/contacts/segments.md): List segments for a contact, ordered by segment creation time rather than when the contact joined (requires full access). - [Add Contact to Segment](https://opensend.cc/docs/api-reference/contacts/add-to-segment.md): Add a contact to a segment and return the segment ID (requires full access). Adding an existing membership leaves it unchanged. - [Delete Contact Segment](https://opensend.cc/docs/api-reference/contacts/remove-from-segment.md): Remove a contact from a segment (requires full access). The response includes the contact ID and the segment ID as audienceId. - [Retrieve Contact Topics](https://opensend.cc/docs/api-reference/contacts/topics.md): List a contact’s subscription choices, including topic defaults, newest topic first (requires full access). - [Update Contact Topics](https://opensend.cc/docs/api-reference/contacts/update-topics.md): Update up to 100 topic subscription choices for a contact (requires full access). Explicit choices override each topic’s default. ## API · Contact properties - [Create Contact Property](https://opensend.cc/docs/api-reference/contact-properties/create.md): Create a string or number property for contacts (requires full access). Your team can have up to 100 properties, and property keys keep their original spelling. - [List Contact Properties](https://opensend.cc/docs/api-reference/contact-properties/list.md): List contact properties for your team (requires full access). - [Retrieve Contact Property](https://opensend.cc/docs/api-reference/contact-properties/get.md): Retrieve a contact property (requires full access). - [Update Contact Property](https://opensend.cc/docs/api-reference/contact-properties/update.md): Update the fallback value of a contact property (requires full access). Its key and type cannot be changed. - [Delete Contact Property](https://opensend.cc/docs/api-reference/contact-properties/delete.md): Delete a contact property and remove its values from contacts (requires full access). The property disappears immediately, but its key remains reserved until cleanup finishes. ## API · Contact imports - [Create Contact Import](https://opensend.cc/docs/api-reference/contact-imports/create.md): Import contacts from a CSV file (requires full access). Existing contacts are updated by default, and contact webhooks are not emitted for imported rows. - [Retrieve Contact Import](https://opensend.cc/docs/api-reference/contact-imports/get.md): Retrieve a contact import’s status and row counts (requires full access). - [List Contact Imports](https://opensend.cc/docs/api-reference/contact-imports/list.md): List contact imports, optionally filtered by status (requires full access). ## API · Segments - [Create Segment](https://opensend.cc/docs/api-reference/segments/create.md): Create a segment to organize contacts (requires full access). Your team can have up to 500 segments. - [List Segments](https://opensend.cc/docs/api-reference/segments/list.md): List segments for your team (requires full access). - [Retrieve Segment](https://opensend.cc/docs/api-reference/segments/get.md): Retrieve a segment (requires full access). - [Update Segment](https://opensend.cc/docs/api-reference/segments/update.md): Update a segment (requires full access). - [Delete Segment](https://opensend.cc/docs/api-reference/segments/delete.md): Delete a segment while keeping its contacts (requires full access). Membership cleanup may finish after the response. - [List Segment Contacts](https://opensend.cc/docs/api-reference/segments/contacts.md): List contacts in a segment, newest membership first (requires full access). Use a contact ID as the pagination cursor. ## API · Topics - [Create Topic](https://opensend.cc/docs/api-reference/topics/create.md): Create a topic to manage subscription preferences (requires full access). Your team can have up to 100 topics. - [List Topics](https://opensend.cc/docs/api-reference/topics/list.md): List topics for your team (requires full access). - [Retrieve Topic](https://opensend.cc/docs/api-reference/topics/get.md): Retrieve a topic (requires full access). - [Update Topic](https://opensend.cc/docs/api-reference/topics/update.md): Update a topic name, description, or visibility (requires full access). Supplying default_subscription returns 422 because the default cannot be changed. - [Delete Topic](https://opensend.cc/docs/api-reference/topics/delete.md): Delete a topic (requires full access). Subscription cleanup may finish after the response. ## API · Domains - [Create Domain](https://opensend.cc/docs/api-reference/domains/create.md): Add a domain for sending or receiving email (requires full access). Setup runs asynchronously; receiving requires a supported region. - [List Domains](https://opensend.cc/docs/api-reference/domains/list.md): List your domains and their verification status (requires full access). Statuses are pending, verified, partially_verified, or failed. - [Retrieve Domain](https://opensend.cc/docs/api-reference/domains/get.md): Retrieve a domain and the DNS records needed to verify it (requires full access). Records include DMARC; TrackingCAA and CAA records are not returned. - [Update Domain](https://opensend.cc/docs/api-reference/domains/update.md): Update tracking, TLS, or receiving settings for a domain that has completed setup (requires full access). Omitted or null settings stay unchanged; receiving requires a supported region. - [Verify Domain](https://opensend.cc/docs/api-reference/domains/verify.md): Start DNS verification or retry a failed domain setup (requires full access). Verification runs asynchronously and is limited to one request per domain every 10 seconds; earlier retries return 422. - [Delete Domain](https://opensend.cc/docs/api-reference/domains/delete.md): Delete a domain from your team (requires full access). Removal and related cleanup may finish after the response. - [Claim a domain](https://opensend.cc/docs/api-reference/domains/claim.md): Start a claim for a domain that another team has already verified. The domain is recreated under your account with fresh DKIM keys, so the previous account's DNS records cannot be reused. Returns a TXT record to add to your DNS to prove ownership. Uses the same request body as creating a domain. - [Retrieve a domain claim](https://opensend.cc/docs/api-reference/domains/get-claim.md): Retrieve the latest claim for the placeholder domain created by the claim. - [Verify a domain claim](https://opensend.cc/docs/api-reference/domains/verify-claim.md): Trigger asynchronous DNS verification and ownership transfer for a domain claim. The claim stays `pending` while verification runs; poll the retrieve endpoint for status. Once `completed`, the transferred domain has new DKIM records that must be added to DNS and verified via the standard domain verify endpoint. ## API · Logs - [List Logs](https://opensend.cc/docs/api-reference/logs/list.md): List your team’s API, SMTP, and dashboard logs (requires full access). Logs are kept for 30 days; unsupported query filters are ignored. - [Retrieve Log](https://opensend.cc/docs/api-reference/logs/get.md): Retrieve a log with its request and response details (requires full access). Secrets are redacted and bodies are truncated at 64 KiB. ## API · API keys - [Create API key](https://opensend.cc/docs/api-reference/api-keys/create.md): Create an API key (requires full access). - [List API keys](https://opensend.cc/docs/api-reference/api-keys/list.md): List API keys for your team (requires full access). - [Delete API key](https://opensend.cc/docs/api-reference/api-keys/delete.md): Delete an API key (requires full access). - [Update API key](https://opensend.cc/docs/api-reference/api-keys/update.md): Update an API key (requires full access). ## API · Suppressions - [Add Suppression](https://opensend.cc/docs/api-reference/suppressions/add.md): Suppress an email address to prevent sending to it (requires full access). The address is normalized and the suppression origin is manual. - [Retrieve Suppression](https://opensend.cc/docs/api-reference/suppressions/get.md): Retrieve a suppression by ID or URL-encoded normalized email address (requires full access). The source email ID may be null. - [List Suppressions](https://opensend.cc/docs/api-reference/suppressions/list.md): List suppressed email addresses, optionally filtered by origin (requires full access). The source email ID may be null. - [Remove Suppression](https://opensend.cc/docs/api-reference/suppressions/remove.md): Remove a suppression by ID or URL-encoded normalized email address (requires full access). - [Add Batch Suppressions](https://opensend.cc/docs/api-reference/suppressions/batch-add.md): Suppress 1–100 email addresses in one request and return results in input order (requires full access). The request is atomic; duplicate normalized addresses return the existing suppression ID. - [Remove Batch Suppressions](https://opensend.cc/docs/api-reference/suppressions/batch-remove.md): Remove 1–100 suppressions by email address or ID (requires full access). The request is atomic; a missing or inaccessible entry rejects the whole batch. ## API · OAuth grants - [List Grants](https://opensend.cc/docs/api-reference/oauth/list.md): List your team’s OAuth grants (requires full access). Resource is null because grants cover the installation; revocation details may be unavailable. - [Revoke Grant](https://opensend.cc/docs/api-reference/oauth/revoke.md): Revoke an OAuth grant and immediately invalidate its tokens (requires full access). Missing or already revoked grants return 404. ## API · Webhooks - [Create Webhook](https://opensend.cc/docs/api-reference/webhooks/create.md): Create a webhook to receive event notifications (requires full access). Your team can have up to 100 webhooks; save the signing secret returned in the response. - [Retrieve Webhook](https://opensend.cc/docs/api-reference/webhooks/get.md): Retrieve a webhook’s endpoint, events, and status (requires full access). The signing secret is only returned when creating the webhook or rotating the secret. - [List Webhooks](https://opensend.cc/docs/api-reference/webhooks/list.md): List webhooks for your team (requires full access). - [Update Webhook](https://opensend.cc/docs/api-reference/webhooks/update.md): Update a webhook (requires full access). - [Delete Webhook](https://opensend.cc/docs/api-reference/webhooks/delete.md): Delete a webhook and stop further deliveries (requires full access). Delivery history is removed after deletion. - [Rotate Signing Secret](https://opensend.cc/docs/api-reference/webhooks/rotate-signing-secret.md): Generate and retrieve a new webhook signing secret (requires full access). Deliveries are signed with both the new and immediately preceding secrets for 24 hours. - [List Events](https://opensend.cc/docs/api-reference/webhooks/list-events.md): List original webhook events, newest first; replaying an event does not add another entry (requires full access). Only limit and after pagination are supported; before returns an error. - [Retrieve Event](https://opensend.cc/docs/api-reference/webhooks/get-event.md): Retrieve an event’s payload, delivery status, and next attempt time (requires full access). - [Replay Event](https://opensend.cc/docs/api-reference/webhooks/replay-event.md): Queue one manual delivery of an event to an enabled webhook, preserving its ID and any automatic retries (requires full access). Disabled webhooks return 422, and the manual attempt does not create further retries. - [List Attempts](https://opensend.cc/docs/api-reference/webhooks/list-event-attempts.md): List recorded automatic and manual delivery attempts from the last 90 days, with response bodies limited to 4 KiB (requires full access). Only limit and after pagination are supported; before returns an error. ## API · Audiences - [Create Audience](https://opensend.cc/docs/api-reference/audiences/create.md): Create an audience (requires full access). This deprecated endpoint is an alias for segments. - [Retrieve Audience](https://opensend.cc/docs/api-reference/audiences/get.md): Retrieve an audience (requires full access). This deprecated endpoint is an alias for segments. - [List Audiences](https://opensend.cc/docs/api-reference/audiences/list.md): List audiences for your team (requires full access). This deprecated endpoint is an alias for segments. - [Delete Audience](https://opensend.cc/docs/api-reference/audiences/delete.md): Delete an audience (requires full access). This deprecated endpoint is an alias for segments. ## API · Usage - [Retrieve account usage](https://opensend.cc/docs/api-reference/usage/get.md): Team usage in UTC calendar periods with self-hosted limits. The SES sending quota is shared across the installation. See docs/rest-api.md for intentional plan differences and upgrade backfills. ## SDKs & tools - [SDKs and tools](https://opensend.cc/docs/sdks.md): The Opensend Node SDK and MCP server for your self-hosted API.