n8n
The official n8n community node - automate orboto from your workflows.
n8n-nodes-orboto is the official community node for the n8n workflow
platform. It brings two nodes:
- orboto (action node): tickets, milestones, projects, docs, time entries, labels, saved searches, and agent messaging.
- orboto Trigger: fires your workflow on workspace events, delivered as HMAC-verified webhooks.
Install
In n8n: Settings → Community nodes → Install and enter
n8n-nodes-orboto.
Self-hosted n8n can also install it manually into the user folder and restart:
cd ~/.n8n/custom
npm install n8n-nodes-orbotoCommunity nodes are enabled by default on both n8n Cloud and self-hosted instances.
Credentials
Two credential types, both accepting a self-hosted base URL (either
https://orboto.example.com or https://orboto.example.com/api work):
- orboto API (simplest) - an API key from orboto (Profile → API keys, or an admin-issued bot key) plus your instance base URL. Use a dedicated bot identity per workflow so activity stays attributable and revocable. The credential test performs an authenticated read for immediate feedback.
- orboto OAuth2 API - for instances with OAuth enabled. An
administrator creates a static OAuth client under Admin → OAuth
clients in orboto; paste its client id (and secret, if confidential)
into the credential. The flow is PKCE with the
api offline_accessscope, so tokens refresh automatically, and the authorize/token URLs are discovered from the base URL.
The orboto node
Action node covering the orboto REST API, organized by resource:
| Resource | Operations |
|---|---|
| Ticket | Create, Get, Get Many (filters, Return All/Limit), Update, Delete, Move (change status), Assign, Unassign, Comment, Log Time, Add Label, Remove Label, OQL Query, Set/Clear Milestone, Set/Clear Version, Dependencies (Add/Remove/Get), Checklists (Add Item, Check, Uncheck), Attachments (Add, Get Many), Bulk Update |
| Milestone | Create, Get, Get Many, Update, Close |
| Project | Create, Get, Get Many, Update, Get Primer Facts, Get AI Primer |
| Doc | Create, Get, Get Many, Update, Ask Docs (RAG), Ingest URL |
| Time Entry | Log, Get Many, Edit, Delete (ticket-scoped) |
| User | Get Project Members |
| Label | Create, Get Many |
| Saved Search | Create, Get Many, Run (OQL/JQL) |
| Agent | Notify, Get Messages, Ack Messages - the n8n-to-agent bridge |
Ticket references accept a key (ACME-42), a number (42), or a UUID
anywhere the node asks for one. Dropdowns for project, milestone,
status, member, label, version, and doc space load live from your
connected instance instead of requiring you to paste ids.
Rate limit: 600 requests/minute per instance. For large batches, prefer the bulk-update operation over looping per-ticket updates, and turn on Continue On Fail so one bad row doesn't stop the whole run.
Error handling as first-class options, not opaque failures:
- 422 language enforcement - enable Allow Language Mismatch to
create/update anyway; the response carries a
languageWarning. - 409 duplicate block - enable Allow Duplicate plus a required
justification;
similarWarningsland in the node output so the workflow can branch on them. - 423 legal hold (delete) and 429 rate limit - both documented on the relevant operation, with the retry guidance you'd expect.
The orboto Trigger node
Fires your workflow on orboto events over the webhook system:
- Auto-registers a project-scoped webhook when you activate the workflow, and removes it when you deactivate it - no manual webhook setup in orboto.
- Every delivery is verified against the
X-Orboto-Signatureheader (HMAC-SHA256, constant-time compare); unsigned or forged requests are rejected before your workflow runs. - Events:
ticket.created,ticket.updated,ticket.deleted,ticket.ready,ticket.checklist_item.completed,comment.created,comment.updated,comment.deleted,project.member_added,project.member_removed,milestone.created,milestone.updated,version.released,symphony.candidates_changed,inbound.signal.received,agent.escalation_raised- plus a free-text field so a newer orboto version's events still work before the node ships a dedicated dropdown entry for them.
n8n must be reachable from your orboto instance for the webhook delivery
to land - set WEBHOOK_URL / N8N_WEBHOOK_URL if n8n runs behind a
reverse proxy.
Walkthrough: notify a chat channel on new tickets
This builds the smallest complete workflow - two nodes - so you can see exactly how the trigger and the credential fit together before combining them into something bigger.
- Create a new workflow in n8n and add an orboto Trigger node as the starting node (n8n prompts you to pick a trigger when the canvas is empty).
- On the node, select your orboto OAuth2 API or orboto API credential (see Credentials above - create one first if you haven't).
- Set Project - the dropdown loads your orboto projects live, so pick one instead of typing a key.
- Under Events, check
ticket.created. Leave the other events unchecked - each checked event adds to the same webhook registration, so you can always come back and add more later. - Add a second node - an HTTP Request node pointed at your chat tool's incoming webhook, or any messaging node your n8n instance has available. Connect it to the orboto Trigger node's output.
- In the second node, reference the trigger's output data to build your
message - for example
{{$json.ticket.key}}: {{$json.ticket.title}}pulls the new ticket's key and title straight from the event payload. - Save, then Activate the workflow (the toggle in the top right). Activating is what actually registers the webhook in orboto - nothing fires while the workflow is only saved as a draft.
- Create a test ticket in the project you selected. Within moments, the second node should run and your chat channel should receive the message.
If nothing arrives, work through the Troubleshooting table below - the two most common causes are the workflow not actually being activated, and n8n's webhook URL not being reachable from your orboto instance.
Example flows
Beyond the walkthrough above, these are the other patterns worth knowing about - all use the same two nodes, just wired differently:
- Scheduled work: a cron trigger creates a recurring ticket, labeled
agent:<tag>so your agent fleet picks it up. - Event bridge: orboto Trigger on
ticket.createdposts to your team chat. - Nightly digest: a Schedule Trigger runs an OQL query and posts an aggregated summary - e.g. everything closed in the last 24 hours.
- Escalation: trigger on comments matching a keyword like "BLOCKED", notify a human channel.
- Two-way sync: orboto Trigger pushes changes outbound to an external system, and an inbound webhook from that system updates the orboto ticket back - with a loop guard so the two directions don't fight each other.
The package ships importable example workflows covering these patterns, installed alongside the node.
Troubleshooting
| Symptom | Fix |
|---|---|
| Credential test fails | Confirm the base URL is reachable from wherever n8n runs (not just your browser), and that the API key hasn't been revoked. Both https://host and https://host/api are accepted - try the other form if one fails. |
| orboto Trigger never fires | Check the workflow is activated (the webhook only registers on activation) and that n8n's public webhook URL is reachable from your orboto instance - set WEBHOOK_URL/N8N_WEBHOOK_URL if n8n sits behind a proxy. |
| Trigger fires but the workflow shows a signature error | The delivery's X-Orboto-Signature didn't match - this usually means the webhook was edited or re-created outside n8n after the trigger registered it. Deactivate and reactivate the workflow to re-register cleanly. |
| Bulk ticket updates fail partway through | Enable Continue On Fail on the node so one bad row doesn't abort the batch, then re-run on just the failed items. |
| A create/update silently returns a warning instead of failing | Check the node output for languageWarning or similarWarnings - these are the 422/409 guardrails surfacing as data rather than an error, by design; branch on them in your workflow. |
| Hitting rate limits on a large sync | 600 requests/minute per instance - batch with the bulk-update operation, add a wait node between large loops, or split the sync across a schedule. |