---
title: Resend API Integration on Truto
slug: resend
category: Email
canonical: "https://truto.one/integrations/detail/resend/"
---

# Resend API Integration on Truto



**Category:** Email  
**Status:** Generally available

## MCP-ready AI tools

Truto exposes 77 tools for Resend that AI agents can call directly.

- **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).

## How it works

1. **Link your customer's Resend account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach Resend.** The Proxy API is a 1-to-1 mapping of the Resend API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **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

- **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.

## FAQs

### 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.

## Related reading

- [Connect Resend to ChatGPT: Automate Email Marketing and Contacts](https://truto.one/blog/connect-resend-to-chatgpt-automate-email-marketing-and-contacts/) — Learn how to connect Resend to chatgpt using Truto. Step-by-step guide to tool calling, API quirks, and autonomous workflows.
- [Connect Resend to Claude: Manage Domains, Templates, and Delivery](https://truto.one/blog/connect-resend-to-claude-manage-domains-templates-and-delivery/) — Learn how to connect Resend to Claude using Truto's managed MCP server. This guide covers setup, domain verification, contact management, and tool calling.
- [Connect Resend to AI Agents: Orchestrate Automated Email Workflows](https://truto.one/blog/connect-resend-to-ai-agents-orchestrate-automated-email-workflows/) — Learn how to connect Resend to AI agents using Truto to automate transactional emails, manage marketing contacts, and orchestrate complex delivery workflows.
