Resend
API integration
Ship Email features without building the integration. Full Resend API access via Proxy and 70+ MCP-ready tools for AI agents — extend models and mappings to fit your product.
Talk to usUse Cases
Why integrate with Resend
Common scenarios for SaaS companies building Resend integrations for their customers.
Embed email sending in your SaaS product
Let your customers connect their own Resend account so transactional and marketing emails go out from their verified domains. This keeps deliverability, branding, and DNS ownership in your customer's hands while you orchestrate the sending logic.
Sync your user base into Resend audiences
CRMs, CDPs, and analytics platforms can push contacts, custom properties, and segments into a customer's Resend workspace. This turns your product data into actionable email cohorts without forcing users to manually maintain lists.
Trigger lifecycle automations from product events
Map internal events like 'trial_started' or 'purchase_completed' to Resend's Events API to fire native automation runs. Your customers configure the email journeys in Resend while your product drives the behavioral triggers.
Power inbound email workflows for support and ATS tools
Helpdesks, ATS platforms, and shared-inbox tools can pull parsed inbound emails and attachments from Resend into their UI. This replaces fragile IMAP setups with a clean API-based ingestion layer.
Ship headless broadcast campaign management
CMS, community, and e-commerce platforms can let users draft, schedule, and send 1-to-many broadcasts to Resend audiences without leaving the product. You own the authoring UX; Resend handles delivery.
What You Can Build
Ship these features with Truto + Resend
Concrete product features your team can ship faster by leveraging Truto’s Resend integration instead of building from scratch.
White-labeled domain onboarding
Programmatically create sending domains for tenants, surface the required DNS records in your UI, and call verify once the customer updates their DNS.
Bi-directional contact and segment sync
Push contacts with custom properties into Resend, manage segment membership as users change state, and keep audiences continuously aligned with your product data.
Batch transactional email dispatch
Send up to 100 personalized emails in a single bulk call for receipts, digests, or alert notifications without hitting per-request rate limits.
Event-driven automation triggers
Stream product events tied to a contact or email into Resend to kick off pre-built automation runs, and monitor delivery via the automation runs endpoint.
In-app broadcast scheduler
Let users compose marketing broadcasts in your interface, target a specific segment, and schedule send time — all routed through Resend's broadcast and broadcast send endpoints.
Inbound email and attachment ingestion
Pull received emails with parsed headers and bodies, then fetch attachments to thread customer replies, signed documents, or candidate responses directly into your app.
SuperAI
Resend AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
create_a_resend_api_key
Create a new API key in Resend. Returns id and token — the plaintext token is only included in this response and cannot be retrieved later, so store it immediately. Required: name.
delete_a_resend_api_key_by_id
Permanently delete a Resend API key by id. Returns an empty 200 response on success. Required: id.
list_all_resend_api_keys
List all API keys for the authenticated Resend team. Returns: id, name, created_at, last_used_at for each key.
create_a_resend_broadcast
Create a new broadcast in Resend. Returns the id of the created broadcast. Required: from, subject. Created as a draft by default; set send: true to send immediately, or combine send: true with scheduled_at to schedule delivery for a later time.
delete_a_resend_broadcast_by_id
Delete a Resend broadcast by id. Only broadcasts in draft status can be deleted; deleting a scheduled broadcast also cancels its pending delivery. Returns: object, id, deleted.
get_single_resend_broadcast_by_id
Get a single Resend broadcast by id. Returns the full broadcast object including id, name, subject, from, html, text, status, created_at, scheduled_at, and sent_at.
list_all_resend_broadcasts
List all Resend broadcasts for the team, including those created from the dashboard. Returns broadcast objects with id, segment_id, status, created_at, scheduled_at, and sent_at.
update_a_resend_broadcast_by_id
Update a draft Resend broadcast by id. Returns the id of the updated broadcast. Only broadcasts in draft status can be updated.
create_a_resend_contact_property
Create a custom contact property in Resend. Returns the new property's id. Required: key, type. The key (max 50 alphanumeric/underscore characters) and type are immutable after creation.
delete_a_resend_contact_property_by_id
Permanently delete a Resend contact property by id, removing the corresponding values stored on every contact. Returns: object, id, deleted. Required: id.
get_single_resend_contact_property_by_id
Get a single Resend contact property by id. Returns: id, key, type, fallback_value, created_at. Required: id.
list_all_resend_contact_properties
List all custom contact properties defined for the Resend team. Returns an array of properties each including id, key, type, fallback_value, and created_at.
update_a_resend_contact_property_by_id
Update the fallback_value of an existing Resend contact property. The key and type cannot be changed after creation. Returns the updated property's id. Required: id.
create_a_resend_contact_segment
Add an existing Resend contact to a segment. Returns the segment id. Required: contact_id (UUID or email address) and segment_id.
delete_a_resend_contact_segment_by_id
Remove a Resend contact from a segment. Returns the segment id and deleted: true. Required: contact_id (UUID or email address) and id (segment UUID).
list_all_resend_contact_segments
List all segments a Resend contact belongs to. Returns id, name, and created_at for each segment. Required: contact_id (UUID or email address).
create_a_resend_contact
Create a new contact in the Resend marketing audience. Returns the created contact's id. Required: email. Optionally assign the contact to segments and configure topic subscription preferences (opt_in / opt_out) in the same call.
delete_a_resend_contact_by_id
Delete a Resend contact by UUID or email address. Returns the contact id and a deleted confirmation. Required: id (UUID or email).
get_single_resend_contact_by_id
Get a single Resend contact by UUID or email address. Returns id, email, first_name, last_name, created_at, unsubscribed, and properties. Required: id (UUID or email).
list_all_resend_contacts
List all contacts in the Resend marketing audience. Returns id, email, first_name, last_name, created_at, and unsubscribed for each contact. Pass segment_id to filter to contacts belonging to a specific segment.
update_a_resend_contact_by_id
Update an existing Resend contact by UUID or email address. Returns the contact id. Required: id. Only fields included in the body are modified; omitted fields are left unchanged.
list_all_resend_contact_topics
List topic subscription preferences for a Resend contact. Returns: id, name, and subscription status for each topic. Required: contact_id (accepts either a contact UUID or email address).
update_a_resend_contact_topic_by_id
Update topic subscription preferences in bulk for a Resend contact. Returns the updated contact id. Required: contact_id (UUID or email) and a topics array, each entry specifying a topic id and subscription status (opt_in or opt_out).
create_a_resend_domain
Add a new sending domain to Resend. Returns id, name, status, region, and the full set of DNS records (SPF, DKIM, tracking CNAME) that must be configured before calling the verify endpoint. Required: name.
delete_a_resend_domain_by_id
Permanently delete a Resend domain by id. Returns object, id, and a deleted confirmation flag. Required: id. Removing a domain with a custom tracking subdomain will break existing email links that use that subdomain.
get_single_resend_domain_by_id
Retrieve a single Resend domain by id. Returns id, name, status, region, tracking settings, capabilities, and the full DNS record set (SPF, DKIM, tracking CNAME) needed for verification. Required: id.
list_all_resend_domains
List all Resend domains for the authenticated team. Returns id, name, status, region, created_at, and capabilities (sending/receiving) for each domain.
update_a_resend_domain_by_id
Update an existing Resend domain by id. Returns the updated domain id. Domain name and region cannot be changed. tracking_subdomain can only be changed once every 24 hours and can never be removed once set. Required: id.
resend_domains_verify
Verify a specific domain in Resend using id. This asynchronous operation initiates a full domain verification process and returns the domain object containing id and object fields in the response.
delete_a_resend_email_by_id
Cancel a scheduled Resend email by its UUID before it is sent. Returns the email object and id. Required: id.
list_all_resend_emails
List all emails sent by your Resend team. Returns: id, to, from, subject, last_event, created_at per email.
get_single_resend_email_by_id
Get a single sent Resend email by its UUID. Returns: id, to, from, subject, html, last_event, created_at, tags. Required: id.
resend_emails_bulk_create
Send up to 100 transactional emails in a single Resend API call. Returns an array of ids, one per submitted email. Each item requires from, to, and subject. Attachments and scheduled_at are not supported in batch.
create_a_resend_email
Send a single transactional email via Resend. Returns the created email id. Required: from, to, subject. Either html, text, or template_id must be provided as the message body.
update_a_resend_email_by_id
Reschedule a previously-scheduled Resend email by updating its delivery time. Returns: id. Required: id. Only scheduled_at is mutable and only before the email has been sent.
list_all_resend_email_attachments
List all attachments belonging to a sent email in Resend. Returns: id, filename, size, content_type, and download_url for each attachment. Required: email_id.
get_single_resend_email_attachment_by_id
Retrieve a single attachment from a sent email in Resend. Returns: id, filename, size, content_type, download_url (signed, expires shortly), and expires_at. Required: email_id, id.
list_all_resend_received_email_attachments
List attachments from a received email in resend. Returns: id, filename, size, content_type, download_url, expires_at. Required: email_id.
get_single_resend_emails_receiving_by_id
Retrieve a single received email in Resend by id. Returns the full email object including id, to, from, subject, html, text, headers, attachments, and a signed raw download URL. Required: id.
list_all_resend_logs
List Resend API request logs for the team. Returns: id, endpoint, method, response_status, user_agent, created_at. Cursor-paginated.
get_single_resend_log_by_id
Retrieve a single Resend API request log entry by id. Returns: id, endpoint, method, response_status, user_agent, request_body, response_body, created_at. Required: id. Note that request_body and response_body shapes vary per original endpoint.
create_a_resend_segment
Create a new segment in Resend for grouping contacts. Returns: id, name. Required: name.
delete_a_resend_segment_by_id
Permanently delete a Resend segment by id. Contacts that belonged to the segment are not deleted. Returns: id, deleted. Required: id.
get_single_resend_segment_by_id
Get a single Resend segment by id. Returns: id, name, created_at. Required: id.
list_all_resend_segments
List all segments in Resend for the authenticated team. Returns: id, name, created_at for each segment.
list_all_resend_segment_contacts
List contacts belonging to a specific segment in Resend. Returns a collection of contacts within the segment. Required: segment_id.
create_a_resend_template
Create a new resend email template. Returns: id and object type. Required: name. Templates must be published before they can be used to send emails; each template supports up to 50 variables.
delete_a_resend_template_by_id
Permanently delete a resend template by id (UUID or alias). Returns: id and deleted status. Required: id.
get_single_resend_template_by_id
Get a single resend template by id (UUID or alias). Returns: id, name, status, html, text, variables, has_unpublished_versions, and timestamps. Required: id.
list_all_resend_templates
List all resend email templates for the team. Returns: id, name, status, alias, created_at, updated_at for each template.
update_a_resend_template_by_id
Update an existing resend template by id. Editing a currently published template creates a new unpublished draft that must be published before it takes effect. Returns: id and object type. Required: id.
create_a_resend_topic
Create a new email subscription topic in Resend to segment your audience. Returns the created topic's id. Required: name. Note: default_subscription cannot be changed after creation.
delete_a_resend_topic_by_id
Permanently delete a Resend topic by id. Returns the topic id and a deleted: true confirmation. Required: id.
get_single_resend_topic_by_id
Retrieve a single Resend topic by id. Returns id, name, description, default_subscription, visibility, and created_at. Required: id.
list_all_resend_topics
List all email subscription topics for the Resend team. Returns an array of topic objects each including id, name, description, default_subscription, visibility, and created_at.
update_a_resend_topic_by_id
Update an existing Resend topic's name, description, or visibility by id. Returns the updated topic's id. Required: id. Note: default_subscription cannot be changed after creation.
create_a_resend_webhook
Create a new Resend webhook subscription to receive real-time email event notifications. Returns id and signing_secret (store the secret securely to verify subsequent payloads). Required: endpoint, events.
delete_a_resend_webhook_by_id
Permanently remove a Resend webhook subscription by id. Returns object, id, and deleted: true on success. Required: id.
get_single_resend_webhook_by_id
Retrieve a single Resend webhook by id. Returns id, created_at, status, endpoint, subscribed events, and signing_secret. Required: id.
list_all_resend_webhooks
List all Resend webhook endpoints configured for the team. Returns an array of webhook objects, each including id, created_at, status, endpoint, and events.
update_a_resend_webhook_by_id
Update an existing Resend webhook's endpoint URL, event subscriptions, or enabled/disabled status by id. Returns the updated webhook id. Required: id.
create_a_resend_event
Create a new custom event in Resend that can trigger Automations. Returns the created event id. Required: name. Event names cannot start with the reserved `resend:` prefix.
list_all_resend_events
List all events in Resend. Returns id, name, schema, created_at, and updated_at fields for each event.
update_a_resend_event_by_id
Update an existing event schema in Resend. Requires id. Returns object and id fields confirming the updated event.
delete_a_resend_event_by_id
Delete an existing event in Resend using id. Returns object indicating the deleted event, including fields object, id, and deleted showing the deletion status.
resend_events_send
Send a named event in Resend using either contact_id or email. Returns object and event fields in the response. Requires event and one of contact_id or email.
get_single_resend_event_by_id
Get a specific event in Resend by id. Returns object type, id, name, schema definition, created_at, and updated_at fields.
list_all_resend_automation_runs
List execution runs for a specific Resend automation. Returns: id, status, started_at, completed_at, created_at for each run. Required: automation_id. Optionally filter by one or more statuses (running, completed, failed, cancelled, skipped) via the status parameter.
get_single_resend_received_email_by_id
Get the full body and headers of a single received email in Resend. Returns: html, text, and headers. Required: id. Use html_format to control whether inline images are returned as data: URIs (default) or cid: references.
list_all_resend_received_emails
List emails received by the team's inbound mailboxes in Resend. Returns a cursor-paginated list of received email records.
create_a_resend_broadcast_send
Trigger sending of a previously-created broadcast in resend. Optionally schedule the send for a later time by supplying `scheduled_at`; omit it to send immediately. Required: `broadcast_id`.
list_all_resend_automations
List automations in Resend. Returns each automation's id, name, status, created_at, and updated_at fields.
create_a_resend_automation
Create a new automation in Resend using the required name parameter. Returns object and id fields identifying the newly created automation in the response.
update_a_resend_automation_by_id
Update an existing automation in Resend. Requires id. Returns object and id fields in the response representing the updated automation.
get_single_resend_automation_by_id
Retrieve a specific automation in Resend using id. Returns fields such as id, name, status, created_at, updated_at, steps, and connections for the automation.
resend_automations_stop
Stop a running automation in Resend. Requires id. Returns the automation object with fields: object (type of resource), id (unique identifier), and status (current automation state).
delete_a_resend_automation_by_id
Delete an existing automation in Resend using id. Returns object confirming deletion with fields: object (type of resource), id (automation identifier), and deleted (boolean indicating success).
Why Truto
Why use Truto’s MCP server for Resend
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 500+ integrations.
Auto-generated, always up to date
Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.
Fine-grained access control
Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.
Multi-tenant by design
Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.
Works with every MCP client
Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.
Built-in auth, rate limits, and error handling
Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.
Expiring and auditable servers
Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.
How It Works
From zero to integrated
Go live with Resend in under an hour. No boilerplate, no maintenance burden.
Link your customer’s Resend account
Use Truto’s frontend SDK to connect your customer’s Resend account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
We handle authentication
Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.
Call our API, we call Resend
Truto’s Proxy API is a 1-to-1 mapping of the Resend API. You call us, we call Resend, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate Resend’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about Resend on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
How do end users authenticate their Resend account?
Resend uses API key authentication. Through Truto's connected account flow, your end user pastes a Resend API key they generate from their dashboard, and Truto securely stores and injects it on every request.
Can we provision API keys programmatically for our users?
Yes. Once a workspace is connected, you can call the create, list, and delete API key endpoints to manage scoped credentials on behalf of the connected account.
Does this integration support both transactional and marketing emails?
Yes. The tool set covers single and bulk transactional sends, plus marketing primitives like audiences (contacts), segments, topics, templates, broadcasts, and automations.
How do we handle custom contact attributes?
Resend supports custom contact properties. You can create, update, list, and delete contact properties, then set those values on contacts so segments and broadcasts can target them.
Can we receive inbound emails and attachments through this integration?
Yes. You can list and fetch received emails along with their parsed metadata, and retrieve associated received-email attachments to ingest replies and uploads into your product.
How do we react to events like delivery, bounce, or opens in real time?
Resend exposes webhook management endpoints, so you can create and update webhook subscriptions per connected account. Truto can route those webhook deliveries into your application for real-time processing.
Is there a way to schedule broadcasts instead of sending immediately?
Yes. When creating a broadcast send, you can specify a scheduled delivery time so campaigns go out at a future moment without your service needing to hold the request.
From the Blog
Resend integration guides
Deep dives, architecture guides, and practical tutorials for building Resend integrations.
Resend
Get Resend integrated into your app
Our team understands what it takes to make a Resend integration successful. A short, crisp 30 minute call with folks who understand the problem.