Suspend an account
This page needs your own installation with an Embed license.
POST/
Suspends an account: its triggers stop and its people can only look.
Needs a partner key: Authorization: Bearer gre_…, from Platform › Partner keys. Call it from your server only.
Parameters
Path
accountIdRequired · stringYour ID for the customer’s account: 1 to 255 bytes of UTF-8, case-sensitive. URL-encode it: it may contain
/.
Headers
Idempotency-KeyOptional · stringUp to 255 characters. The same request with the same key within 24 hours answers the first result again, with
Idempotency-Replayed: true.
Body
reasonOptional · stringUp to 200 characters, for your records.
What stops
Webhooks answer 503 with Retry-After; schedules and checks for new items pause. Its people’s sessions end and come back read-only. Its data is kept. See Usage, suspension and deletion.
Responses
- 200OK
The account. Suspending a suspended account changes nothing.
A field isn’t valid.
details.fieldnames it.- 404
NOT_FOUNDYou have no account with this ID.
The account is deleted. Restore it first, within 30 days.
- 409
CONFLICTA request with this
Idempotency-Keyis still running. Retry shortly. This
Idempotency-Keywas already used with a different request.Something failed on the installation’s side. Try again.
Any call can also answer: 401 UNAUTHORIZED · 403 EMBED_NOT_LICENSED · 403 IP_NOT_ALLOWED · 413 PAYLOAD_TOO_LARGE · 415 INVALID_CONTENT_TYPE · 429 RATE_LIMITED · 503 BUSY. See Errors.
Request
GORUNNER="https://automations.example.com"
GORUNNER_EMBED_KEY="YOUR_PARTNER_KEY" # gre_…
ACCOUNT_ID="acct-bakery"
URL="$GORUNNER/api/embed/v1/accounts/$ACCOUNT_ID/"
URL="${URL}suspend"
curl -X POST "$URL" \
-H "Authorization: Bearer $GORUNNER_EMBED_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"reason": "Invoice overdue"
}'const GORUNNER = "https://automations.example.com";
const KEY = process.env.GORUNNER_EMBED_KEY; // gre_…
const ACCOUNT_ID = encodeURIComponent("acct-bakery");
const res = await fetch(
`${GORUNNER}/api/embed/v1/accounts/` +
`${ACCOUNT_ID}/suspend`,
{
method: "POST",
headers: {
Authorization: `Bearer ${KEY}`,
"Idempotency-Key": crypto.randomUUID(),
"Content-Type": "application/json",
},
body: JSON.stringify({ reason: "Invoice overdue" }),
},
);
const { data } = await res.json();import os, uuid, requests
from urllib.parse import quote
GORUNNER = "https://automations.example.com"
KEY = os.environ["GORUNNER_EMBED_KEY"] # gre_…
ACCOUNT_ID = quote("acct-bakery", safe="")
res = requests.post(
f"{GORUNNER}/api/embed/v1/accounts/"
f"{ACCOUNT_ID}/suspend",
headers={
"Authorization": f"Bearer {KEY}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={"reason": "Invoice overdue"},
)
data = res.json()["data"]Response · 200 OK
{
"data": {
"id": "acct-bakery",
"name": "Bakery Ltd",
"status": "suspended",
"turnOff": [],
"pieces": null,
"assistant": {
"monthlyTokens": null
},
"limits": {
"concurrentRuns": null
},
"workspaces": 2,
"members": 5,
"suspendedAt": "2026-10-25T09:00:00Z",
"suspendedReason": "Invoice overdue",
"deletedAt": null,
"purgeAfter": null,
"createdAt": "2026-10-20T08:00:00Z",
"updatedAt": "2026-10-25T09:00:00Z",
"organizationId": "e9d2b6f1-3a7c-4d05-b8e4-1c6f2a9d7b30",
"aiSignIn": {
"address": null
}
}
}Every field
Body
reasonOptional · string
Response · 200 OK
dataobjectidstringnamestringstatusstringOne of
active,suspended,deleted.turnOffarray of stringspiecesarray of strings or nullNull inherits the installation’s list.
assistantobjectmonthlyTokensinteger or nulllimitsobjectconcurrentRunsinteger or nullHow many runs this account may have executing at once. Null = the installation’s default (Platform › Settings › General), 0 = no limit. Runs over it wait in line and start in order; none is refused for it.
workspacesintegermembersintegerDistinct people with access.
suspendedAttime or nullsuspendedReasonstring or nulldeletedAttime or nullpurgeAftertime or nullcreatedAttimeupdatedAttimeorganizationIdUUIDThe installation’s own id, for support.
aiSignInobjectaddressURL or nullThis account’s own AI app sign-in address: where an AI app’s sign-in sends this account’s people instead of the installation’s address. Null: they go to the installation’s address (Platform › What customers get › Developers). It is used only while its website is still one of the installation’s allowed websites or one of this account’s own; otherwise the installation’s address is used, or, when the installation has none, no AI app can sign in to the account (
mcp.signInFromsays which).mcpobject or nullOnly on GET /accounts/{accountId}: the account’s MCP addresses as its people find them on the MCP page. Null while Tokens or MCP is off for the account, or it is deleted. While an AI app can sign in to it (AI app sign-in on, and a sign-in address to send its people to: the account’s own
aiSignIn.addressor the installation’s), they are the account’s own addresses andsignInis true; otherwise the plain addresses tokens use.buildURL or nullThe address that builds and manages workflows; null while MCP building (
mcpBuild) is off.toolsURLThe address that calls the published workflows.
signInbooleanWhether an AI app can connect by signing in: through the account’s own
aiSignIn.addresswhile its website is allowed, or the installation’s AI app sign-in address.signInFromstring or nullWhose address a sign-in uses:
account(its ownaiSignIn.address) orinstallation; null whensignInis false.installationwhileaiSignIn.addressis set means its website is no longer allowed for the account.One of
account,installation,null.