Logo
Search
Docs

Create tool draft

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

Save a local draft (never touches the live platform)

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 Tool N"
Stored in tools.name
type string Optional Nullable
Validation: lenient — falls back to apiRequest when unrecognised
Stored in tools.type
description string Optional Nullable
Validation: lenient
Stored in tools.description
server object Optional Nullable
Validation: lenient — any partial shape is accepted while drafting
Stored in tools.server
destinations array Optional Nullable
Validation: lenient
Stored in tools.destinations
messages array Optional Nullable
Validation: lenient
Stored in tools.messages
metadata object Optional Nullable
Validation: lenient
Stored in tools.metadata

Errors

StatusMeaningBody
401 No authenticated user {"success":false,"message":"Unauthenticated."}
403 Feature tools not enabled for the account
403 Workspace permission denied

Notes

  • name is auto-generated ("New Draft Tool 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/tools/draft \
  --header 'Authorization: Bearer <YOUR_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "",
  "type": "function",
  "description": "Looks up loyalty points for a phone number.",
  "parameters": [
    {"name": "phoneNumber", "type": "string", "description": "Caller'\''s phone number", "required": true}
  ]
}'
import requests

url = "https://app.sulus.ai/api/tools/draft"
headers = {"Authorization": "Bearer <YOUR_API_KEY>"}
payload = {
  "name": "",
  "type": "function",
  "description": "Looks up loyalty points for a phone number.",
  "parameters": [
    {"name": "phoneNumber", "type": "string", "description": "Caller's phone number", "required": true}
  ]
}

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/tools/draft"
	payload := strings.NewReader(`{
  "name": "",
  "type": "function",
  "description": "Looks up loyalty points for a phone number.",
  "parameters": [
    {"name": "phoneNumber", "type": "string", "description": "Caller's phone number", "required": true}
  ]
}`)
	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 Tool 1",
        "user_id": 42,
        "external_tool_id": "draft_Ab12Cd34Ef56",
        "status": "draft",
        "created_by": 42,
        "reseller_id": "f1e2d3c4-b5a6-4978-8901-234567890abc",
        "workspace_id": "9a8b7c6d-5e4f-4a3b-9c8d-7e6f5a4b3c2d",
        "type": "function",
        "description": "Looks up loyalty points for a phone number.",
        "function_def": {
            "name": "new_draft_tool_1",
            "parameters": [
                {
                    "name": "phoneNumber",
                    "type": "string",
                    "required": true,
                    "description": "Caller's phone number"
                }
            ]
        },
        "server": null,
        "variable_extraction_plan": null,
        "destinations": null,
        "rejection_plan": null,
        "messages": null,
        "metadata": null,
        "async": false,
        "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]"
        },
        "read_only": false,
        "coreData": null
    }
}