Automations

Run workflows with schedules, Live Chat events, and third-party inbound hooks. Skills call AI, email, marketing, chat, and partner webhooks.

Generally availableOpenAPIMarkdown

Overview

Automations is a live workflow runner for Umney Connect. Create workflows with triggers and skill steps, set active=true, then run them manually, on a schedule, on Live Chat events, or from third-party webhooks. Create an Automations token with automations:manage.

ItemValue
ServiceAutomations
StatusPublic Automations API generally available · real runner live
Permissionsautomations:manage
Live token shapeumk_live_automations_<prefix>_<secret>
Test token shapeumk_test_automations_<prefix>_<secret>
DashboardDashboard → Automations
OpenAPI/developers/openapi-automations.json
Docs (AI)/developers/automations.md
Third-party systems: Connect does not crawl Nest/CRM/other apps. Your backend fetches data with that system's credentials, then passes it as context on POST …/run or POST /v1/automations/hooks/inbound. Use {{context}} and {{payload.*}} in step inputs.
Agent OS surfaces (sessions, agents, memory, approvals, tool profiles, channels, marketplace, SLO) are available on the public Automations API and runner. Use Dashboard → Automations for the control UI.

Get started

  1. Enable Automations in Dashboard → Billing. Enable other products your skills need (AI Agent, Business Email, Marketing, Live Chat).
  2. Dashboard → Developers → create token → product Automations → automations:manage.
  3. POST /v1/automations/workflows with triggerJson, stepsJson, active:true.
  4. POST /v1/automations/workflows/{id}/run with optional context from your third-party system.
  5. GET /v1/automations/runs/{runId} until status is succeeded or failed.

API tokens

Authorization: Bearer umk_live_automations_<prefix>_<secret>
API base: https://umneyconnect.com/api
PermissionAllows
automations:manageCRUD workflows/sequences; run workflows; list runs/messages/logs; inbound hook with API key

Concepts

ResourceDescription
Workflowtrigger_json + steps_json + active — executed by the runner
SequenceOrdered steps; POST …/sequences/{id}/run materializes a linked workflow and enqueues a real run
RunDurable execution: queued → running → succeeded|failed|cancelled|waiting_approval
FlowTask Flow ledger with revision across cancel/retry
SessionTranscript + memory summary (dm/group/run/channel/workspace)
AgentProfile with system prompt, tool profile, route keys
SkillReal action: AI, email, chat, voice read, memory, channel deliver, webhook, subagent
ApprovalHuman gate; pauses run until decide
PackSandboxed marketplace skill graph (allowlisted skills only)

Triggers

trigger_json.typeBehavior
manualOnly POST …/run or inbound with workflowId
scheduleinterval (everySeconds), one-shot at, or 5-field UTC cron
heartbeatSame as schedule; use for ambient checklists
eventFires when Connect emits Live Chat events (e.g. conversation.created, message.created)
webhookInbound POST /v1/automations/hooks/inbound with API key or trigger_json.webhook.token
channelInbound via POST /v1/automations/channels/{id}/inbound (Slack/Telegram/WhatsApp/webhook)

Example cron triggerJson

{
  "schemaVersion": 1,
  "type": "schedule",
  "schedule": { "kind": "cron", "cron": "0 9 * * 1-5" }
}

Example triggerJson

{
  "schemaVersion": 1,
  "type": "event",
  "event": { "type": "conversation.created" }
}

{
  "schemaVersion": 1,
  "type": "schedule",
  "schedule": { "kind": "interval", "everySeconds": 900 }
}

{
  "schemaVersion": 1,
  "type": "webhook",
  "webhook": { "token": "replace-with-long-secret-min-16-chars" }
}

Skills (live)

skillIdRequiresInput
log.writeAutomationsmessage, level?
ai.invokeAI Agentinput, context?, locale? (model failover via /models)
email.sendBusiness Emailto[], subject, html|text|body
marketing.campaign_sendMarketing + Business EmailcampaignId
chat.post_messageLive ChatchannelId, content
chat.assignLive ChatchannelId, assigneeId
webhook.deliverAutomationshttps url, body?, headers?
memory.read|writeAutomationskey, value?/sessionId?
channel.deliverAutomations + channel credentialsto, text, channelId|provider, mediaUrl?
voice.usage_readBusiness Phonedays?
subagent.spawnAutomationsworkflowId, context?, payload?
node.capture_screen|camera|audioPaired companion nodenodeId, waitMs? (ffmpeg for camera/audio)
node.ping|node.files_list|node.files_readPaired companion nodenodeId, path?
system.runNode allowSystem + approvalnodeId, argv[] (no shell)
browser.*Node allowBrowsernodeId + navigate/screenshot/click/type/evaluate/content

Channel inbound requires config_json.inboundSecret (min 16). channel.deliver supports slack, telegram, whatsapp, webhook, and email (via Business Email).

Step types: skill | deliver | log | agent (tool-calling loop) | approval (pause for human). Agent steps use TOOL_CALL:skillId|{json} / FINAL:text.

Example stepsJson

[
  {
    "type": "skill",
    "skillId": "ai.invoke",
    "input": {
      "input": "Summarize this lead for the agent",
      "context": "{{context}}"
    }
  },
  {
    "type": "skill",
    "skillId": "webhook.deliver",
    "input": {
      "url": "https://partner.example.com/hooks/umney",
      "body": { "summary": "{{last.outputText}}", "payload": "{{payload}}" }
    }
  }
]
Phases 2–7: Task Flow, cancel/retry, standing orders, heartbeat skip/busy defer, sessions/agents/memory, approvals, tool allow/deny, model failover, Control UI (Dashboard → Automations), Slack/Telegram/WhatsApp channels + media ledger, sandboxed skills marketplace, GET /slo + /onboarding.

Third-party systems

Same model as AI Agent: Connect never crawls external systems. Your Nest Safety, CRM, ERP, or custom backend authenticates to those systems, then injects knowledge into Automations.

  1. Fetch third-party data with that system's API credentials (never store them in Connect unless you choose to).
  2. Call POST /v1/automations/workflows/{id}/run with { context: "…", payload: { … } } using your Automations token.
  3. Or POST /v1/automations/hooks/inbound with workflowId + context, using the Automations token or X-Umney-Automation-Token matching trigger_json.webhook.token.
  4. Reference injected fields in skill inputs via {{context}} / {{payload.*}}.
  5. Push results back out with webhook.deliver to any https endpoint.

Inbound from a partner backend

curl -X POST "https://umneyconnect.com/api/v1/automations/hooks/inbound" \
  -H "Authorization: Bearer $AUTOMATIONS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "workflowId": "YOUR_WORKFLOW_UUID",
    "event": "nest.case.updated",
    "context": "Case #441 status=open priority=high customer=Acme",
    "payload": { "caseId": "441", "priority": "high" },
    "idempotencyKey": "nest-441-open"
  }'

Public Automations API (token — live)

MethodPathPermissionStatus
GET|POST/v1/automationsautomations:manageLive (alias → workflows)
GET|POST/v1/automations/workflowsautomations:manageLive
PATCH|DELETE/v1/automations/workflows/{id}automations:manageLive
POST/v1/automations/workflows/{id}/runautomations:manageLive
GET/v1/automations/runsautomations:manageLive
GET/v1/automations/runs/{id}automations:manageLive
POST/v1/automations/hooks/inboundautomations:manage or webhook tokenLive
POST/v1/automations/runs/{id}/cancelautomations:manageLive
POST/v1/automations/runs/{id}/retryautomations:manageLive
GET/v1/automations/flowsautomations:manageLive
GET/v1/automations/flows/{id}automations:manageLive
GET|PUT/v1/automations/policiesautomations:manageLive (standing orders)
GET|POST/v1/automations/sessionsautomations:manageLive
GET/v1/automations/sessions/{id}automations:manageLive
GET|POST/v1/automations/agentsautomations:manageLive
PATCH|DELETE/v1/automations/agents/{id}automations:manageLive
GET|PUT/v1/automations/memoryautomations:manageLive
GET/v1/automations/approvalsautomations:manageLive
POST/v1/automations/approvals/{id}/decideautomations:manageLive
GET|POST/v1/automations/tool-profilesautomations:manageLive
GET|PUT/v1/automations/modelsautomations:manageLive
GET|POST/v1/automations/channelsautomations:manageLive
POST/v1/automations/channels/{id}/inboundchannel secret or API keyLive
GET/v1/automations/skillsautomations:manageLive (marketplace)
POST/v1/automations/skills/installautomations:manageLive
POST/v1/automations/skills/{packId}/workflowautomations:manageLive
GET/v1/automations/sloautomations:manageLive
GET|POST/v1/automations/nodesautomations:manageLive
PATCH|DELETE/v1/automations/nodes/{id}automations:manageLive
POST/v1/automations/nodes/claimpairing codeLive
POST/v1/automations/nodes/{id}/heartbeatdevice secretLive
GET/v1/automations/nodes/{id}/commandsdevice secretLive
POST/v1/automations/nodes/{id}/commands/{id}/resultdevice secretLive
GET|POST/v1/automations/skills/sdkautomations:manageLive
GET|POST/v1/automations/sequencesautomations:manageLive
PATCH|DELETE/v1/automations/sequences/{id}automations:manageLive
POST/v1/automations/sequences/{id}/runautomations:manageLive
GET/v1/automations/messagesautomations:manageLive
GET/v1/automations/logsautomations:manageLive

Create + run

curl -X POST "https://umneyconnect.com/api/v1/automations/workflows" \
  -H "Authorization: Bearer $AUTOMATIONS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Lead enrich",
    "active": true,
    "triggerJson": { "schemaVersion": 1, "type": "manual" },
    "stepsJson": [
      { "type": "skill", "skillId": "ai.invoke", "input": { "input": "Draft a follow-up", "context": "{{context}}" } },
      { "type": "skill", "skillId": "log.write", "input": { "message": "{{last.outputText}}" } }
    ]
  }'

curl -X POST "https://umneyconnect.com/api/v1/automations/workflows/{id}/run" \
  -H "Authorization: Bearer $AUTOMATIONS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "context": "Lead from Nest: priority high", "payload": { "leadId": "99" } }'

Dashboard Growth API (JWT — live)

MethodPathPurpose
GET|POST/api/growth/automations/workflowsWorkflows
GET|POST/api/growth/automations/sequencesSequences
GET/api/growth/automations/consoleControl UI aggregate (runs/sessions/agents/approvals/nodes/SLO)
GET|POST/api/growth/automations/agentsAgent profiles
POST/api/growth/automations/approvals/{id}/decideApprove or reject
PUT/api/growth/automations/policiesStanding orders
POST/api/growth/automations/workflows/{id}/runEnqueue manual run
GET/api/growth/automations/runs|sessions|approvals|channelsLedger lists
PATCH|DELETE/api/growth/automations/{resource}/{id}Update/delete
GET/api/growth/entitlementsAddon flags

Dashboard → Automations is the Control UI (chat/sessions/runs/approvals/agents/SLO).

Errors

  • 403 — Automations (or skill product) not entitled / wrong token
  • 401 — inbound webhook token mismatch
  • 400 — inactive workflow, empty steps, missing skill input
  • 404 — workflow/run not found
  • 502 — skill failed (e.g. email provider / partner webhook)

Agent recipe

  1. Enable Automations (+ skill products) → mint automations:manage token.
  2. Create active workflow with real skills — not empty steps.
  3. Inject third-party knowledge via context; deliver out via webhook.deliver.
  4. Poll GET /v1/automations/runs/{id} for status and stepsResultJson.
  5. Do not invent shell/browser skills or claim Connect crawls partner APIs.