ShipHero Integration

Describe the problem/error/question

Trying to integrate with Shiphero using HTTP Request, Custom Auth, but getting a “Invalid Custom Auth JSON” error. Ultimate goal is to pull current inventory levels for all SKUs

What is the error message (if any)?

“Invalid Custom Auth JSON”

Please share your workflow

{
“nodes”: [
{
“parameters”: {
“url”: “https://public-api.shiphero.com/graphql”,
“authentication”: “genericCredentialType”,
“genericAuthType”: “httpCustomAuth”,
“options”: {}
},
“type”: “n8n-nodes-base.httpRequest”,
“typeVersion”: 4.3,
“position”: [
208,
0
],
“id”: “2ab2047e-fc43-435f-abf8-b092a699ba82”,
“name”: “HTTP Request”,
“credentials”: {
“httpCustomAuth”: {
“id”: “7djxJJeCG5GTB7LE”,
“name”: “Custom Auth account”
}
}
}
],
“connections”: {
“HTTP Request”: {
“main”: [

]
}
},
“pinData”: {},
“meta”: {
“templateCredsSetupCompleted”: true,
“instanceId”: “8b87715e4b60fab5d549cd02506fe285380d7857df6b6912c9cdc845e6e22e98”
}
}

Share the output returned by the last node

According to Shiphero I need a JWT bearer token. Shiphero Help Doc: Getting Started – Developer Resources | ShipHero

Information on your n8n setup

  • n8n version:
  • Database (default: SQLite):
  • n8n EXECUTIONS_PROCESS setting (default: own, main):
  • Running n8n via (Docker, npm, n8n cloud, desktop app):
  • Operating system:

Hi @AKE, please can you share your workflow again in a code block so we can have a look at your config

@Wouter_Nigrini - thanks for your reply! Please see below:

This is still not in a code block but I can see what youre trying to do. There are two options

Option 1:

You can try and use the Oauth2 credential type using client credentials

Set the token url

Your username in the Client Id field

Your Password in the Secret field

And make sure to select Body as the auth so the username and password is sent in body and not headers

Option 2:

Create a new workflow which will act as the bridge for calling shiphero apis.

Call the token url using a http node as per the documantation link, then use the token in the header: Authorization: Bearer TOKEN_RESPONSE.

Then in your workflow where you want to call the ship api, you call the workflow you just created using the below node and passing any params you might need. This sub-workflow will ack as a re-usable method / function for everywhere you want to use this api call

1 Like

@Wouter_Nigrini
Created a new work flow (great call) and used the information provided in option 1 to set up http request. Received the following error:
{
“errorMessage”: “Bad request - please check your parameters”,
“errorDescription”: “HTTP status 400”,
“errorDetails”: {
“rawErrorMessage”: [
“HTTP status 400”
],
“httpCode”: “400”
},
“n8nDetails”: {
“nodeName”: “HTTP Request”,
“nodeType”: “n8n-nodes-base.httpRequest”,
“nodeVersion”: 4.3,
“itemIndex”: 0,
“time”: “1/3/2026, 10:59:19 AM”,
“n8nVersion”: “2.1.5 (Cloud)”,
“binaryDataMode”: “filesystem”,
“stackTrace”: [
“NodeApiError: Bad request - please check your parameters”,
" at ExecuteContext.execute (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-nodes-base@file+packages+nodes-base_@[email protected]_asn1.js@5_8da18263ca0574b0db58d4fefd8173ce/node_modules/n8n-nodes-base/nodes/HttpRequest/V3/HttpRequestV3.node.ts:859:16)“,
" at processTicksAndRejections (node:internal/process/task_queues:105:5)”,
" at WorkflowExecute.executeNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@[email protected]_@[email protected]_ec37920eb95917b28efaa783206b20f3/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1045:8)“,
" at WorkflowExecute.runNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@[email protected]_@[email protected]_ec37920eb95917b28efaa783206b20f3/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1226:11)”,
" at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@[email protected]_@[email protected]_ec37920eb95917b28efaa783206b20f3/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1662:27",
" at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@[email protected]_@[email protected]_ec37920eb95917b28efaa783206b20f3/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:2274:11"
]
}
}

From the looks of it, the auth did work, reached the server and then returned a 400 bad request. This is likely because your http node has no further params set.

Which request are you trying to call on the shiphero api ?

Im looking for something like this: Examples – Developer Resources | ShipHero. I would like to pull inventory levels for each SKU in warehouse id “Primary”