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.nametype
string
Optional
Nullable
Validation:
lenient — falls back to apiRequest when unrecognisedStored in
tools.typedescription
string
Optional
Nullable
Validation:
lenientStored in
tools.descriptionserver
object
Optional
Nullable
Validation:
lenient — any partial shape is accepted while draftingStored in
tools.serverdestinations
array
Optional
Nullable
Validation:
lenientStored in
tools.destinationsmessages
array
Optional
Nullable
Validation:
lenientStored in
tools.messagesmetadata
object
Optional
Nullable
Validation:
lenientStored in
tools.metadataErrors
| Status | Meaning | Body |
|---|---|---|
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
}
}
Response — POST
/tools/draft
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
}
}