Logo
Search
Docs

Create squad draft

POST https://app.sulus.ai/api/squads/draft

Save a local draft (never touches live routing)

Authentication

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

Authorization: Bearer <YOUR_API_KEY>

Request body

name string Optional Nullable
Validation: lenient — empty auto-generates "New Draft Squad N"
Stored in squads.name
members array Optional Nullable
Validation: lenient — any composition is accepted while drafting
Stored in squads.members
membersOverrides object Optional Nullable
Validation: lenient
Stored in squads.members_overrides
variableValues object Optional Nullable
Validation: lenient
Stored in squads.variable_values
metadata object Optional Nullable
Validation: lenient
Stored in squads.metadata

Errors

StatusMeaningBody
401 Missing or invalid bearer token
403 Feature squads not enabled for the account
403 Workspace permission denied

Notes

  • name is auto-generated ("New Draft Squad N", lowest free number for the user) when omitted or blank.
  • coreData is always null on drafts — the live platform is never contacted.
curl --request POST \
  --url https://app.sulus.ai/api/squads/draft \
  --header 'Authorization: Bearer <YOUR_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "",
  "members": [
    {
      "assistantId": "a1b2c3d4-1e2f-4a3b-8c9d-0e1f2a3b4c5d",
      "assistantOverrides": {"name": "Reception", "firstMessage": "Thanks for calling, how can I help?"},
      "assistantDestinations": [],
      "position": {"x": 120.5, "y": 240.0}
    }
  ],
  "membersOverrides": {"voicemailMessage": "Please leave a message after the tone."},
  "variableValues": {"business_name": "Acme Dental"},
  "metadata": {"template_id": 5, "personality_id": 16}
}'
import requests

url = "https://app.sulus.ai/api/squads/draft"
headers = {"Authorization": "Bearer <YOUR_API_KEY>"}
payload = {
  "name": "",
  "members": [
    {
      "assistantId": "a1b2c3d4-1e2f-4a3b-8c9d-0e1f2a3b4c5d",
      "assistantOverrides": {"name": "Reception", "firstMessage": "Thanks for calling, how can I help?"},
      "assistantDestinations": [],
      "position": {"x": 120.5, "y": 240.0}
    }
  ],
  "membersOverrides": {"voicemailMessage": "Please leave a message after the tone."},
  "variableValues": {"business_name": "Acme Dental"},
  "metadata": {"template_id": 5, "personality_id": 16}
}

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

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

func main() {
	url := "https://app.sulus.ai/api/squads/draft"
	payload := strings.NewReader(`{
  "name": "",
  "members": [
    {
      "assistantId": "a1b2c3d4-1e2f-4a3b-8c9d-0e1f2a3b4c5d",
      "assistantOverrides": {"name": "Reception", "firstMessage": "Thanks for calling, how can I help?"},
      "assistantDestinations": [],
      "position": {"x": 120.5, "y": 240.0}
    }
  ],
  "membersOverrides": {"voicemailMessage": "Please leave a message after the tone."},
  "variableValues": {"business_name": "Acme Dental"},
  "metadata": {"template_id": 5, "personality_id": 16}
}`)
	req, _ := http.NewRequest("POST", url, payload)
	req.Header.Add("Authorization", "Bearer <YOUR_API_KEY>")
	req.Header.Add("Content-Type", "application/json")
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
Response 201
{
    "success": true,
    "data": {
        "name": "New Draft Squad 1",
        "external_squad_id": "draft_Ab12Cd34Ef56",
        "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": [],
                "position": {
                    "x": 120.5,
                    "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:22:03+00:00",
        "updated_at": "2026-07-30T14:22:03+00:00",
        "user": {
            "id": 42,
            "name": "Jane Cooper",
            "email": "[email protected]"
        },
        "creator": {
            "id": 42,
            "name": "Jane Cooper",
            "email": "[email protected]"
        },
        "memberCount": 1,
        "entryAssistantName": "Reception",
        "updatedAt": "2026-07-30T14:22:03+00:00",
        "createdAt": "2026-07-30T14:22:03+00:00",
        "coreData": null
    }
}