Connect with n8n
Use n8n's HTTP Request and Webhook nodes to send data to Upper Crew and receive real-time event notifications from it.
n8n is an open-source workflow automation platform that lets you build visual pipelines without writing server code. You can connect Upper Crew to n8n in two directions:
- Send data to Upper — trigger Upper Crew API calls from inside an n8n workflow using the HTTP Request node.
- Receive data from Upper — start an n8n workflow whenever something happens in Upper by registering an n8n Webhook node URL as your Upper webhook receiver.
Before you start, make sure you have your Upper Crew API token. You can find it in the app under Settings → Webhooks — the API Token field has a copy button. See Authentication for the full details on tokens and error responses, and see the Routes and Stops reference pages for all available endpoint parameters.
Send data to Upper
Use n8n's HTTP Request node to call any ext-* endpoint on the Upper Crew API. The worked example below creates a route and then kicks off optimization — a common two-step pattern you can slot into any larger workflow.
Open your n8n workflow
Create a new workflow (or open an existing one). Add whatever trigger makes sense for your use case — a Schedule trigger, a webhook from another app, or a manual trigger while you test.
Add an HTTP Request node for "Create route"
- Click + to add a new node, then search for and select HTTP Request.
- In the node settings, set the following:
- Method:
POST - URL:
https://teamapi.upperinc.com/api/v1/ext-create-route
- Method:
- Under Authentication, choose Generic Credential Type → Header Auth.
- Set Name to
x-api-token. - Set Value to your Upper Crew API token (paste the value you copied from Settings → Webhooks).
- Set Name to
- Set Body Content Type to
JSON. - Under Body, add your JSON payload. A minimal example that creates a named route:
{
"route_name": "Morning Deliveries",
"route_date": "2026-06-30",
"optimize_for": "time",
"units": "miles",
"service_time": 120
}- Click Test step to run the node. A successful call returns:
{
"code": 200,
"message": "Route created successfully.",
"data": {
"route_id": 18452,
"route_name": "Morning Deliveries",
"route_date": "2026-06-30",
"optimize_for": "Time",
"service_time": 120,
"units": "Miles",
"pickup_settings": "Auto"
}
}Note the route_id in data — you will need it in the next node.
Add a second HTTP Request node for "Optimize route"
- Connect a second HTTP Request node to the output of the first.
- Configure it:
- Method:
POST - URL:
https://teamapi.upperinc.com/api/v1/ext-optimize-route - Same Header Auth credential (
x-api-token) as above. - Body Content Type:
JSON.
- Method:
- In the body, reference the
route_idreturned by the previous node using an n8n expression:
{
"route_id": {{ $node["HTTP Request"].json.data.route_id }},
"timezone": "America/New_York"
}- Click Test step. A successful call returns a
pendingstatus with aqueue_id:
{
"code": 200,
"message": "Optimization started successfully.",
"data": {
"route_id": 18452,
"status": "pending",
"queue_id": "6657f1a2b9d3c40012ab34cd"
}
}Optimization runs asynchronously. To check when it finishes, add a further HTTP Request node calling GET https://teamapi.upperinc.com/api/v1/ext-optimization-status?route_id=18452 and poll it (or wait a fixed interval) until data.status returns "optimized". See Routes for the full ext-optimization-status reference.
Activate and test the full workflow
Once both nodes run cleanly in test mode, click Save and then Activate to turn the workflow on. Subsequent trigger events will now create and optimize routes in Upper automatically.
Upper's response envelope is always { "code": <int>, "message": "<string>", "data": <object|array> }. In n8n expressions, reference the payload with $node["<node name>"].json.data.<field>. If the x-api-token header is missing, Upper returns HTTP 400 "Token is required."; an unrecognised token returns HTTP 401 "User not found.".
Receive data from Upper
Use n8n's Webhook node as your receiver URL, then register that URL in Upper so events are pushed to your workflow in real time.
Add a Webhook node to your n8n workflow
- In a new (or existing) n8n workflow, click + and add a Webhook node as the trigger.
- Set HTTP Method to
POST. - Set Authentication to
None(Upper sends the payload directly; you can add IP filtering or a secret in a subsequent node if needed). - Copy the Production Webhook URL shown in the node panel. It looks like:
https://your-n8n-instance.example.com/webhook/abc123xyzRegister the URL in Upper Crew
- In the Upper web app, open Settings → Webhooks.
- Paste the n8n production webhook URL into the receiver URL field.
- Save.
Upper will now POST event notifications to that URL whenever a relevant event occurs in your account (for example, a stop is updated or a route is completed). Each delivery attempt is also recorded in the delivery history on that same Settings screen. See Webhooks for more detail on managing webhook URLs and reviewing history.
Handle the incoming payload in your workflow
After the Webhook node, add any downstream nodes to act on the data Upper sends — for example:
- An If node to branch on event type.
- A Set node to map Upper fields to your own schema.
- A Send Email, Slack, or database node to notify your team or persist the data.
Test the end-to-end flow
In n8n, click Listen for test event on the Webhook node, then trigger a real event in Upper (for example, update a stop). n8n will capture one delivery so you can inspect the payload shape and build your downstream logic before activating the workflow for production.
The webhook event catalog — including the exact field names in each event payload — is pending confirmation and not fully documented at this time. The Webhook node will receive whatever Upper sends; use n8n's Listen for test event mode to inspect the real payload shape before wiring up downstream nodes.
Related
Connect with Zapier
Use Zapier's built-in Webhooks by Zapier app to trigger Zaps from Upper events or send data to Upper from any Zapier-connected app.
Access historical data
Reach historical route, stop, and driver data in Upper from the Dashboard KPIs, the Analytics reports with export, or the Route Plan for a specific route.