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.
| Item | Value |
|---|---|
| Service | Automations |
| Status | Public Automations API generally available · real runner live |
| Permissions | automations:manage |
| Live token shape | umk_live_automations_<prefix>_<secret> |
| Test token shape | umk_test_automations_<prefix>_<secret> |
| Dashboard | Dashboard → Automations |
| OpenAPI | /developers/openapi-automations.json |
| Docs (AI) | /developers/automations.md |
Get started
- Enable Automations in Dashboard → Billing. Enable other products your skills need (AI Agent, Business Email, Marketing, Live Chat).
- Dashboard → Developers → create token → product Automations → automations:manage.
- POST /v1/automations/workflows with triggerJson, stepsJson, active:true.
- POST /v1/automations/workflows/{id}/run with optional context from your third-party system.
- 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| Permission | Allows |
|---|---|
| automations:manage | CRUD workflows/sequences; run workflows; list runs/messages/logs; inbound hook with API key |
Concepts
| Resource | Description |
|---|---|
| Workflow | trigger_json + steps_json + active — executed by the runner |
| Sequence | Ordered steps; POST …/sequences/{id}/run materializes a linked workflow and enqueues a real run |
| Run | Durable execution: queued → running → succeeded|failed|cancelled|waiting_approval |
| Flow | Task Flow ledger with revision across cancel/retry |
| Session | Transcript + memory summary (dm/group/run/channel/workspace) |
| Agent | Profile with system prompt, tool profile, route keys |
| Skill | Real action: AI, email, chat, voice read, memory, channel deliver, webhook, subagent |
| Approval | Human gate; pauses run until decide |
| Pack | Sandboxed marketplace skill graph (allowlisted skills only) |
Triggers
| trigger_json.type | Behavior |
|---|---|
| manual | Only POST …/run or inbound with workflowId |
| schedule | interval (everySeconds), one-shot at, or 5-field UTC cron |
| heartbeat | Same as schedule; use for ambient checklists |
| event | Fires when Connect emits Live Chat events (e.g. conversation.created, message.created) |
| webhook | Inbound POST /v1/automations/hooks/inbound with API key or trigger_json.webhook.token |
| channel | Inbound 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)
| skillId | Requires | Input |
|---|---|---|
| log.write | Automations | message, level? |
| ai.invoke | AI Agent | input, context?, locale? (model failover via /models) |
| email.send | Business Email | to[], subject, html|text|body |
| marketing.campaign_send | Marketing + Business Email | campaignId |
| chat.post_message | Live Chat | channelId, content |
| chat.assign | Live Chat | channelId, assigneeId |
| webhook.deliver | Automations | https url, body?, headers? |
| memory.read|write | Automations | key, value?/sessionId? |
| channel.deliver | Automations + channel credentials | to, text, channelId|provider, mediaUrl? |
| voice.usage_read | Business Phone | days? |
| subagent.spawn | Automations | workflowId, context?, payload? |
| node.capture_screen|camera|audio | Paired companion node | nodeId, waitMs? (ffmpeg for camera/audio) |
| node.ping|node.files_list|node.files_read | Paired companion node | nodeId, path? |
| system.run | Node allowSystem + approval | nodeId, argv[] (no shell) |
| browser.* | Node allowBrowser | nodeId + 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}}" }
}
}
]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.
- Fetch third-party data with that system's API credentials (never store them in Connect unless you choose to).
- Call POST /v1/automations/workflows/{id}/run with { context: "…", payload: { … } } using your Automations token.
- Or POST /v1/automations/hooks/inbound with workflowId + context, using the Automations token or X-Umney-Automation-Token matching trigger_json.webhook.token.
- Reference injected fields in skill inputs via {{context}} / {{payload.*}}.
- 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)
| Method | Path | Permission | Status |
|---|---|---|---|
| GET|POST | /v1/automations | automations:manage | Live (alias → workflows) |
| GET|POST | /v1/automations/workflows | automations:manage | Live |
| PATCH|DELETE | /v1/automations/workflows/{id} | automations:manage | Live |
| POST | /v1/automations/workflows/{id}/run | automations:manage | Live |
| GET | /v1/automations/runs | automations:manage | Live |
| GET | /v1/automations/runs/{id} | automations:manage | Live |
| POST | /v1/automations/hooks/inbound | automations:manage or webhook token | Live |
| POST | /v1/automations/runs/{id}/cancel | automations:manage | Live |
| POST | /v1/automations/runs/{id}/retry | automations:manage | Live |
| GET | /v1/automations/flows | automations:manage | Live |
| GET | /v1/automations/flows/{id} | automations:manage | Live |
| GET|PUT | /v1/automations/policies | automations:manage | Live (standing orders) |
| GET|POST | /v1/automations/sessions | automations:manage | Live |
| GET | /v1/automations/sessions/{id} | automations:manage | Live |
| GET|POST | /v1/automations/agents | automations:manage | Live |
| PATCH|DELETE | /v1/automations/agents/{id} | automations:manage | Live |
| GET|PUT | /v1/automations/memory | automations:manage | Live |
| GET | /v1/automations/approvals | automations:manage | Live |
| POST | /v1/automations/approvals/{id}/decide | automations:manage | Live |
| GET|POST | /v1/automations/tool-profiles | automations:manage | Live |
| GET|PUT | /v1/automations/models | automations:manage | Live |
| GET|POST | /v1/automations/channels | automations:manage | Live |
| POST | /v1/automations/channels/{id}/inbound | channel secret or API key | Live |
| GET | /v1/automations/skills | automations:manage | Live (marketplace) |
| POST | /v1/automations/skills/install | automations:manage | Live |
| POST | /v1/automations/skills/{packId}/workflow | automations:manage | Live |
| GET | /v1/automations/slo | automations:manage | Live |
| GET|POST | /v1/automations/nodes | automations:manage | Live |
| PATCH|DELETE | /v1/automations/nodes/{id} | automations:manage | Live |
| POST | /v1/automations/nodes/claim | pairing code | Live |
| POST | /v1/automations/nodes/{id}/heartbeat | device secret | Live |
| GET | /v1/automations/nodes/{id}/commands | device secret | Live |
| POST | /v1/automations/nodes/{id}/commands/{id}/result | device secret | Live |
| GET|POST | /v1/automations/skills/sdk | automations:manage | Live |
| GET|POST | /v1/automations/sequences | automations:manage | Live |
| PATCH|DELETE | /v1/automations/sequences/{id} | automations:manage | Live |
| POST | /v1/automations/sequences/{id}/run | automations:manage | Live |
| GET | /v1/automations/messages | automations:manage | Live |
| GET | /v1/automations/logs | automations:manage | Live |
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)
| Method | Path | Purpose |
|---|---|---|
| GET|POST | /api/growth/automations/workflows | Workflows |
| GET|POST | /api/growth/automations/sequences | Sequences |
| GET | /api/growth/automations/console | Control UI aggregate (runs/sessions/agents/approvals/nodes/SLO) |
| GET|POST | /api/growth/automations/agents | Agent profiles |
| POST | /api/growth/automations/approvals/{id}/decide | Approve or reject |
| PUT | /api/growth/automations/policies | Standing orders |
| POST | /api/growth/automations/workflows/{id}/run | Enqueue manual run |
| GET | /api/growth/automations/runs|sessions|approvals|channels | Ledger lists |
| PATCH|DELETE | /api/growth/automations/{resource}/{id} | Update/delete |
| GET | /api/growth/entitlements | Addon 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
- Enable Automations (+ skill products) → mint automations:manage token.
- Create active workflow with real skills — not empty steps.
- Inject third-party knowledge via context; deliver out via webhook.deliver.
- Poll GET /v1/automations/runs/{id} for status and stepsResultJson.
- Do not invent shell/browser skills or claim Connect crawls partner APIs.