Skip to content
Home
Business OS Blog How it works Hosting Compare
Language
العربية Coming soon
বাংলা Coming soon
Dansk Coming soon
Deutsch Coming soon
Español Coming soon
Suomi Coming soon
Français Coming soon
עברית Coming soon
हिन्दी Coming soon
Magyar Coming soon
Bahasa Indonesia Coming soon
Italiano Coming soon
한국어 Coming soon
Latviešu Coming soon
Nederlands Coming soon
Norsk Coming soon
Polski Coming soon
Português Coming soon
Српски Coming soon
Svenska Coming soon
Türkçe Coming soon
Українська Coming soon
中文 Coming soon
Currency

AI council

Give the business's AI council a task, the same way you would in the chat. The turn runs on the business's own AI login and shows up in its chat. Poll the message until its status is complete.

Start a council turn

POST/businesses/{business}/council

approve "safe" (default) lets the council read and report only. "auto" lets it make changes within the business's permissions. Send the thread back to continue a conversation.

Needs the council:write scope.

Parameters

business integer, in path, required
The business id, from GET /businesses.

Body

message string
For example Add a wholesale enquiry form to the contact page.
approve string
For example auto
thread string, optional
For example null
curl -X POST "https://helstify.com/api/v1/businesses/60/council" \
  -H "Authorization: Bearer $HELSTIFY_KEY" \
  -H "Content-Type: application/json" \
  -d '{"message":"Add a wholesale enquiry form to the contact page.","approve":"auto","thread":null}'
const res = await fetch("https://helstify.com/api/v1/businesses/60/council", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.HELSTIFY_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
      "message": "Add a wholesale enquiry form to the contact page.",
      "approve": "auto",
      "thread": null
  }),
});
const data = await res.json();
import os, requests

res = requests.post(
    "https://helstify.com/api/v1/businesses/60/council",
    headers={"Authorization": f"Bearer {os.environ['HELSTIFY_KEY']}"},
    json={
        "message": "Add a wholesale enquiry form to the contact page.",
        "approve": "auto",
        "thread": None
    },
)
print(res.json())
Response202
{
    "ok": true,
    "message_id": 5121,
    "thread": "9b1c2e7a-4f0d-4a52-9a6e-1f0d2c3b4a59",
    "status": "running",
    "poll": "/api/v1/businesses/60/council/messages/5121"
}

Get a council reply

GET/businesses/{business}/council/messages/{message}

status is running, complete or failed. body is the council's answer once complete.

Needs the council:read scope.

Parameters

business integer, in path, required
The business id, from GET /businesses.
message integer, in path, required
The message_id from the start call.
curl "https://helstify.com/api/v1/businesses/60/council/messages/5121" \
  -H "Authorization: Bearer $HELSTIFY_KEY"
const res = await fetch("https://helstify.com/api/v1/businesses/60/council/messages/5121", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.HELSTIFY_KEY}`,
  },
});
const data = await res.json();
import os, requests

res = requests.get(
    "https://helstify.com/api/v1/businesses/60/council/messages/5121",
    headers={"Authorization": f"Bearer {os.environ['HELSTIFY_KEY']}"},
)
print(res.json())
Response200
{
    "ok": true,
    "message": {
        "id": 5121,
        "thread": "9b1c2e7a-…",
        "status": "complete",
        "body": "Added a wholesale form to /contact. It posts to orders@northwind.coffee…",
        "created_at": "2026-11-09T08:44:10Z",
        "updated_at": "2026-11-09T08:46:52Z"
    }
}

Get a conversation

GET/businesses/{business}/council/threads/{thread}

Every message in one thread, oldest first.

Needs the council:read scope.

Parameters

business integer, in path, required
The business id, from GET /businesses.
thread string, in path, required
The thread id.
curl "https://helstify.com/api/v1/businesses/60/council/threads/9b1c2e7a-4f0d-4a52-9a6e-1f0d2c3b4a59" \
  -H "Authorization: Bearer $HELSTIFY_KEY"
const res = await fetch("https://helstify.com/api/v1/businesses/60/council/threads/9b1c2e7a-4f0d-4a52-9a6e-1f0d2c3b4a59", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.HELSTIFY_KEY}`,
  },
});
const data = await res.json();
import os, requests

res = requests.get(
    "https://helstify.com/api/v1/businesses/60/council/threads/9b1c2e7a-4f0d-4a52-9a6e-1f0d2c3b4a59",
    headers={"Authorization": f"Bearer {os.environ['HELSTIFY_KEY']}"},
)
print(res.json())
Response200
{
    "ok": true,
    "thread": "9b1c2e7a-…",
    "messages": [
        {
            "id": 5120,
            "role": "user",
            "who": "API · Deploy bot",
            "status": null,
            "body": "Add a wholesale enquiry form…"
        },
        {
            "id": 5121,
            "role": "assistant",
            "who": "Full council",
            "status": "complete",
            "body": "Added a wholesale form…"
        }
    ]
}