---
title: "Duplicate Automation API"
slug: duplicate-automation-api
description: "Duplicate an existing automation directly from the API."
created_at: "2026-08-26"
updated_at: "2026-08-26"
image: https://cdn.resend.com/posts/duplicate-automation-api.jpg
humans: ["gabriel-miranda"]
---

Most new automations start from one that already works. Previously, duplicating an Automation was only possible from the Dashboard.

Today we're releasing a new API endpoint to [duplicate an automation](/docs/api-reference/automations/duplicate-automation).

## How it works

Pass the ID of an existing Automation and the API creates a copy:

- The copy is named after the original with a `(Copy)` suffix.
- All steps and connections are copied from the currently published version, or from the most recent version if none is published.
- The copy starts as a **disabled draft**. Nothing runs until you review and publish it.

## Duplicating an Automation

To duplicate an Automation, use the Automation's ID with the duplicate endpoint.

<CodeTabs codeHeight={250}>
```nodejs
import { Resend } from 'resend';

const resend = new Resend('re_xxxxxxxxx');

const { data, error } = await resend.automations.duplicate(
  'c9b16d4f-ba6c-4e2e-b044-6bf4404e57fd',
);
```

```php
$resend = Resend::client('re_xxxxxxxxx');

$resend->automations->duplicate('c9b16d4f-ba6c-4e2e-b044-6bf4404e57fd');
```

```python
import resend

resend.api_key = "re_xxxxxxxxx"

resend.Automations.duplicate("c9b16d4f-ba6c-4e2e-b044-6bf4404e57fd")
```

```ruby
require "resend"

Resend.api_key = "re_xxxxxxxxx"

Resend::Automations.duplicate("c9b16d4f-ba6c-4e2e-b044-6bf4404e57fd")
```

```go
import "github.com/resend/resend-go/v3"

client := resend.NewClient("re_xxxxxxxxx")

duplicated, _ := client.Automations.Duplicate("c9b16d4f-ba6c-4e2e-b044-6bf4404e57fd")
```

```rust
use resend_rs::{Resend, Result};

#[tokio::main]
async fn main() -> Result<()> {
  let resend = Resend::new("re_xxxxxxxxx");

  let _duplicated = resend
    .automations
    .duplicate("c9b16d4f-ba6c-4e2e-b044-6bf4404e57fd")
    .await?;

  Ok(())
}
```

```java
Resend resend = new Resend("re_xxxxxxxxx");

DuplicateAutomationResponseSuccess data = resend.automations().duplicate("c9b16d4f-ba6c-4e2e-b044-6bf4404e57fd");
```

```dotnet
using Resend;

IResend resend = ResendClient.Create( "re_xxxxxxxxx" );

var duplicated = await resend.AutomationDuplicateAsync( new Guid( "c9b16d4f-ba6c-4e2e-b044-6bf4404e57fd" ) );
```

```curl
curl -X POST 'https://api.resend.com/automations/c9b16d4f-ba6c-4e2e-b044-6bf4404e57fd/duplicate' \
     -H 'Authorization: Bearer re_xxxxxxxxx'
```

```cli
resend automations duplicate c9b16d4f-ba6c-4e2e-b044-6bf4404e57fd
```
</CodeTabs>

The endpoint returns the ID of the new Automation:

```json
{
  "object": "automation",
  "id": "e169aa45-1ecf-4183-9955-b1499d5701d3"
}
```

The duplicate Automation API is part of a larger move to bring the full functionality of the dashboard into the API, CLI, and MCP, so you can build how you want.

If you have any questions, please reach out to us and we'll be happy to help.
