orbotodocs
Integrations

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-orboto

Community 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_access scope, 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:

ResourceOperations
TicketCreate, 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
MilestoneCreate, Get, Get Many, Update, Close
ProjectCreate, Get, Get Many, Update, Get Primer Facts, Get AI Primer
DocCreate, Get, Get Many, Update, Ask Docs (RAG), Ingest URL
Time EntryLog, Get Many, Edit, Delete (ticket-scoped)
UserGet Project Members
LabelCreate, Get Many
Saved SearchCreate, Get Many, Run (OQL/JQL)
AgentNotify, 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; similarWarnings land 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-Signature header (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.

  1. 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).
  2. On the node, select your orboto OAuth2 API or orboto API credential (see Credentials above - create one first if you haven't).
  3. Set Project - the dropdown loads your orboto projects live, so pick one instead of typing a key.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.created posts 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

SymptomFix
Credential test failsConfirm 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 firesCheck 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 errorThe 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 throughEnable 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 failingCheck 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 sync600 requests/minute per instance - batch with the bulk-update operation, add a wait node between large loops, or split the sync across a schedule.

On this page