Logo
Search
Docs

Duplicate squad

POST https://app.sulus.ai/api/squads/{id}/duplicate

Duplicate as a local draft copy

Authentication

Send a bearer token created on your dashboard's Developer page:

Authorization: Bearer <YOUR_API_KEY>

Path parameters

id string Required

The squad's public id.

Validation: the squad's external_squad_id (UUID, or draft_… slug for drafts)
Stored in squads.external_squad_id

Errors

StatusMeaningBody
404 Squad not found, or outside your account scope {"success":false,"message":"Squad not found"}
403 Workspace permission denied
500 Copy failed {"success":false,"message":"Failed to duplicate squad: <detail>"}
401 Missing or invalid bearer token
403 Feature squads not enabled for the account

Notes

  • Always a draft; the name is "<original> (Copy)" capped at 100 characters; the live platform is never contacted.
  • coreData is always null — the copy never contacts the live platform.
curl --request POST \
  --url https://app.sulus.ai/api/squads/{id}/duplicate \
  --header 'Authorization: Bearer <YOUR_API_KEY>'
import requests

url = "https://app.sulus.ai/api/squads/{id}/duplicate"
headers = {"Authorization": "Bearer <YOUR_API_KEY>"}

response = requests.post(url, headers=headers)
print(response.json())
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	url := "https://app.sulus.ai/api/squads/{id}/duplicate"
	req, _ := http.NewRequest("POST", url, nil)
	req.Header.Add("Authorization", "Bearer <YOUR_API_KEY>")
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
Response 201
{
    "success": true,
    "data": {
        "name": "Front desk (Copy)",
        "external_squad_id": "draft_Gh78Ij90Kl12",
        "status": "draft",
        "user_id": 42,
        "created_by": 42,
        "reseller_id": "f1e2d3c4-b5a6-4978-8901-234567890abc",
        "workspace_id": 7,
        "members": [
            {
                "assistantId": "a1b2c3d4-1e2f-4a3b-8c9d-0e1f2a3b4c5d",
                "assistantOverrides": {
                    "name": "Reception",
                    "firstMessage": "Thanks for calling, how can I help?"
                },
                "assistantDestinations": [
                    {
                        "type": "assistant",
                        "assistantName": "Booking",
                        "message": "One moment, transferring you.",
                        "description": "Caller wants to book an appointment",
                        "transferMode": "rolling-history"
                    }
                ],
                "position": {
                    "x": 120.5,
                    "y": 240
                }
            },
            {
                "assistantId": "b2c3d4e5-2f3a-4b4c-9d0e-1f2a3b4c5d6e",
                "assistantOverrides": {
                    "name": "Booking"
                },
                "position": {
                    "x": 420,
                    "y": 240
                }
            }
        ],
        "members_overrides": {
            "voicemailMessage": "Please leave a message after the tone."
        },
        "variable_values": {
            "business_name": "Acme Dental"
        },
        "metadata": {
            "template_id": 5,
            "personality_id": 16
        },
        "created_at": "2026-07-30T14:35:19+00:00",
        "updated_at": "2026-07-30T14:35:19+00:00",
        "user": {
            "id": 42,
            "name": "Jane Cooper",
            "email": "[email protected]"
        },
        "creator": {
            "id": 42,
            "name": "Jane Cooper",
            "email": "[email protected]"
        },
        "memberCount": 2,
        "entryAssistantName": "Reception",
        "updatedAt": "2026-07-30T14:35:19+00:00",
        "createdAt": "2026-07-30T14:35:19+00:00",
        "coreData": null
    }
}