All skills
resend avatar

/resend-cli

@edbfece official
by resendresend/resend-skills193 stars
28

Operate the Resend platform from the terminal — send emails (including React Email .tsx templates via --react-email), manage domains, contacts, broadcasts, templates, webhooks, API keys, logs, automations, and events via the `resend` CLI. Use when the user wants to run Resend commands in the shell, scripts, or CI/CD pipelines, or send/preview React Email templates. Always load this skill before running `resend` commands — it contains the non-interactive flag contract and gotchas that prevent silent failures.

Use this Skill: https://skilld.dev/gh/resend/resend-skills/resend-cli

This session only. Nothing lands on disk.

referencescontacts.md

≈1.1k tokens on demand. Your agent reads this file only when SKILL.md points to it.

contacts

Detailed flag specifications for resend contacts commands.


contacts list

Flag Type Default Description
--limit <n> number 10 Max results (1-100)
--after <cursor> string — Forward pagination
--before <cursor> string — Backward pagination

contacts create

Flag Type Required Description
--email <email> string Yes Contact email
--first-name <name> string No First name
--last-name <name> string No Last name
--unsubscribed boolean No Globally unsubscribe
--properties <json> string No Custom properties JSON
--segment-id <id...> string[] No Add to segment(s)

contacts get

Argument: <id|email> — Contact UUID or email address (both accepted)


contacts update

Argument: <id|email> — Contact UUID or email address

Flag Type Description
--unsubscribed boolean Set unsubscribed
--no-unsubscribed boolean Re-subscribe
--properties <json> string Merge properties (set key to null to clear)

contacts delete

Argument: <id|email> — Contact UUID or email address

Flag Type Required Description
--yes boolean Yes (non-interactive) Skip confirmation

Alias: rm


contacts segments

List segments a contact belongs to.

Argument: <id|email> — Contact UUID or email


contacts add-segment

Argument: <contactId> — Contact UUID or email

Flag Type Required Description
--segment-id <id> string Yes (non-interactive) Segment ID to add to

contacts remove-segment

Arguments: <id|email> <segmentId>


contacts topics

List contact's topic subscriptions.

Argument: <id|email> — Contact UUID or email


contacts update-topics

Argument: <id|email> — Contact UUID or email

Flag Type Required Description
--topics <json> string Yes (non-interactive) JSON array: [{"id":"topic-uuid","subscription":"opt_in"}]

Subscription values: opt_in | opt_out


contacts imports create

Bulk-import contacts from a local CSV file. The file is uploaded as multipart form data (max 100MB). Imports run asynchronously — the command returns an import id immediately while the file is processed in the background (poll with contacts imports get).

Flag Type Required Description
--file <path> string Yes (non-interactive) Path to the CSV file to import
--column-map <json> string No JSON object mapping contact fields to CSV column headers: {"email":"Email","firstName":"First Name","properties":{"plan":{"column":"Plan","type":"string"}}}
--on-conflict <strategy> string No How to handle existing contacts: upsert (default, updates) or skip
--segment-id <id...> string[] No Add imported contacts to segment(s) — repeatable
--topics <json> string No JSON array: [{"id":"topic-uuid","subscription":"opt_in"}]

Mappable contact fields: email, firstName, lastName, unsubscribed, properties.

Without --column-map, columns are matched by the lowercase names email (required), first_name, last_name — matching is case-sensitive, so a CSV with Email/First Name headers fails with create_error (422 "missing required email column"). Use --column-map to import such a file.


contacts imports get

Retrieve a contact import's status and counts.

Argument: [id] — Contact import ID (interactive picker when omitted)

Status values: queued | in_progress | completed | failed


contacts imports list

Flag Type Default Description
--limit <n> number 10 Max results (1-100)
--after <cursor> string — Forward pagination
--before <cursor> string — Backward pagination
--status <status> string — Filter by status: queued | in_progress | completed | failed

Alias: ls

Source: SKILL.md on GitHub

1 warning1d4 checks · Risk SAFE
  • Gen Agent Trust Hub1d

    This skill provides a comprehensive CLI for managing the Resend email platform. It includes robust documentation on credential safety, preventing accidental API key exposure, and specifically warns agents about treating inbound email content as untrusted data. The skill is published by the official Resend team and uses standard development practices.

  • Socket1d

    No alerts

  • Snyk1d

    Risk: MEDIUM · 1 issue

  • ZeroLeaks5mo

    1 finding · Score: 82/100

Signed by skilld at edbfece. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 days ago.

Activeupdated 2 days ago
Other metadata
metadata
{
  "author": "resend",
  "version": "2.15.0",
  "homepage": "https://resend.com/docs/cli-agents",
  "source": "https://github.com/resend/resend-cli",
  "openclaw": {
    "primaryEnv": "RESEND_API_KEY",
    "requires": {
      "env": [
        "RESEND_API_KEY"
      ],
      "bins": [
        "resend"
      ]
    },
    "envVars": [
      {
        "name": "RESEND_API_KEY",
        "required": true,
        "description": "Resend API key for authenticating CLI commands"
      },
      {
        "name": "RESEND_PROFILE",
        "required": false,
        "description": "Named auth profile for multi-account setups"
      }
    ],
    "install": [
      {
        "kind": "node",
        "package": "resend-cli",
        "bins": [
          "resend"
        ],
        "label": "Resend CLI"
      }
    ],
    "links": {
      "repository": "https://github.com/resend/resend-cli",
      "documentation": "https://resend.com/docs/cli"
    }
  }
}
inputs
[
  {
    "name": "RESEND_API_KEY",
    "description": "Resend API key for authenticating CLI commands. Get yours at https://resend.com/api-keys",
    "required": true
  },
  {
    "name": "RESEND_PROFILE",
    "description": "Named auth profile for multi-account setups. Selects which stored API key to use (see `resend auth`).",
    "required": false
  }
]
references
[
  "references/emails.md",
  "references/domains.md",
  "references/api-keys.md",
  "references/automations.md",
  "references/broadcasts.md",
  "references/contacts.md",
  "references/contact-properties.md",
  "references/segments.md",
  "references/templates.md",
  "references/topics.md",
  "references/logs.md",
  "references/careers.md",
  "references/suppressions.md",
  "references/webhooks.md",
  "references/auth.md",
  "references/workflows.md",
  "references/error-codes.md"
]
  • CLI
  • resend
  • email
  • react-email
  • domains
  • broadcasts
  • contacts
  • automations
  • webhooks
  • ci-cd

README badge

README badge for resend/resend-skills/resend-cli

Operate the Resend email platform from the terminal—send emails via React Email templates, manage domains, contacts, broadcasts, templates, webhooks, API keys, and automations using the `resend` CLI. Targets shell scripts, CI/CD pipelines, and agent workflows that need programmatic email operations without interactive prompts.

Generated from the current SKILL.md.

Does this skill work in non-interactive environments like CI/CD?
Yes. The CLI auto-detects non-TTY and outputs JSON without prompting. Set RESEND_API_KEY in the environment, use --quiet to suppress spinners, and pass --yes on all delete commands.
Can I send React Email .tsx templates with this skill?
Yes. Use `resend emails send --react-email ./path/to/template.tsx` along with required flags like --from, --to, and --subject.
What authentication methods does the CLI support?
The CLI resolves auth via --api-key flag, RESEND_API_KEY environment variable, or a stored profile (resend login). Use RESEND_PROFILE or --profile for multi-account setups.
Does this skill support dry-run validation?
Only `emails send` and `broadcasts create` support --dry-run. They validate the payload and print the request without calling the API. Other commands like `emails batch` and `broadcasts send` do not support dry-run.
What happens if I forget --yes on a delete command?
The CLI exits with an error in non-interactive mode and does not prompt. All delete/rm subcommands require --yes when stdin is not a TTY.

Generated from the current SKILL.md. These answers refresh after source changes.