Problem creating ticket using HaloPSA module

Describe the problem/error/question

The HaloPSA module will not let me create a ticket. It tells me that we haven’t selected the client/site/user, which makes sense. Those are required fields in HaloPSA. But there doesn’t appear to be an option available to fill in the Client/Site/User. Even if there was a workaround for creating the ticket, I would still want to be able to use N8N to control the Client/Site/User that the ticket would appear under.
In order to attempt to work around this limitation, I also tried to do a raw HTTP request to Halo’s API. That isn’t returning responses. It isn’t returning anything. It says “success” but it isn’t returning the response from the HTTP request. I even tried sending an authentication request that should fail, and it just does nothing.

What is the error message (if any)?

For the HaloPSA module:

“Bad Request - please check your parameters”.

For the HTTP request (which, this request SHOULD return an error, but it isn’t):

This one shouldn’t be able to authenticate, but it just says “success”, but doesn’t actually return… Anything.

Please share your workflow

(Select the nodes on your canvas and use the keyboard shortcuts CMD+C/CTRL+C and CMD+V/CTRL+V to copy and paste the workflow.)
{
  "nodes": [
    {
      "parameters": {
        "resource": "ticket",
        "operation": "create",
        "ticketType": 5,
        "summary": "Test",
        "details": "Test",
        "additionalFields": {
          "agent_id": 13
        }
      },
      "type": "n8n-nodes-base.haloPSA",
      "typeVersion": 1,
      "position": [
        208,
        0
      ],
      "id": "4ed5e3b4-b0e7-4bef-9ad2-f89479729ae3",
      "name": "Create a ticket",
      "credentials": {
        "haloPSAApi": {
          "id": "k3FY8G1rcm1URAXY",
          "name": "HaloPSA account 2"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://halodev.halopsa.com/auth/token",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        416,
        0
      ],
      "id": "a19cf77d-663f-4702-a9a8-2f4349f3da5c",
      "name": "HTTP Request",
      "alwaysOutputData": true,
      "executeOnce": false
    }
  ],
  "connections": {
    "Create a ticket": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        []
      ]
    }
  },
  "pinData": {},
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "a81f0f1d2173241d63438b56c39af273dcaf0ddca7d6f71c5183868ad7e0bf0a"
  }
}

Share the output returned by the last node

Information on your n8n setup

  • n8n version: 2.10.3
  • Database (default: SQLite): postgres
  • n8n EXECUTIONS_PROCESS setting (default: own, main): Own
  • Running n8n via (Docker, npm, n8n cloud, desktop app): Docker
  • Operating system: Local machine that I’m editing the workflow from is Windows, Server that N8N is on is Linux.

Hi @Asawicki , welcome to the n8n community!

At this point, the best next step would be to test the Halo API call directly with HTTP Request only, without the HaloPSA node before it, and share the exact payload needed for Client/Site/User. That should help confirm whether this is a node limitation or something else.

1. HaloPSA Node Required Fields

You’re correct that Client, Site, and User are often required by the HaloPSA API for ticket creation. If those fields aren’t showing up as top-level options in the node, check the ‘Additional Fields’ dropdown. Often, n8n nodes hide these mandatory-on-the-API fields under ‘Additional Fields’ because they are dynamic depending on your specific Halo configuration.

Yeah, I already tried that:

It’s only got assigned assigned agent, start date and target date.

2. HTTP Request Node ‘Success’ with no body

The reason your HTTP Request node is returning ‘Success’ but an empty response is likely because ‘Always Output Data’ is enabled but the API returned a 204 No Content (or a similar empty response) or the authentication failed silently without a JSON body.

To debug the Halo API directly:

  • Make sure you are sending the grant_type, client_id, and client_secret as Form Data (application/x-www-form-urlencoded), not JSON, as most OAuth2 token endpoints (including Halo’s) require that specific encoding.

  • In the HTTP Request node, set ‘Response Format’ to String instead of JSON temporarily. This will show you exactly what the server returned, even if it’s not valid JSON.

So, I was trying to get ANY response back from that HTTP request node, which is why I didn’t fill it in with the correct fields. I had already tried filling in with the correct fields, and that didn’t work either. Here is that JSON for that node:

{
“nodes”: [
{
“parameters”: {
“method”: “POST”,
“url”: “https://halodev.halopsa.com/auth/token”,
“sendHeaders”: true,
“headerParameters”: {
“parameters”: [
{
“name”: “Accept”,
“value”: “application/json”
}
]
},
“sendBody”: true,
“contentType”: “multipart-form-data”,
“bodyParameters”: {
“parameters”: [
{
“name”: “grant_type”,
“value”: “client_credentials”
},
{
“name”: “client_id”,
“value”: “FILLED_IN_CORRECTLY”
},
{
“name”: “client_secret”,
“value”: “FILLED_IN_CORRECTLY”
},
{
“name”: “scope”,
“value”: “all”
}
]
},
“options”: {
“response”: {
“response”: {
“fullResponse”: true,
“responseFormat”: “json”
}
}
}
},
“type”: “n8n-nodes-base.httpRequest”,
“typeVersion”: 4.4,
“position”: [
416,
0
],
“id”: “a19cf77d-663f-4702-a9a8-2f4349f3da5c”,
“name”: “HTTP Request”,
“alwaysOutputData”: false,
“executeOnce”: false,
“onError”: “continueErrorOutput”
}
],
“connections”: {
“HTTP Request”: {
“main”: [

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

Obviously, I’m not going to include my API keys, so I have “filled those in correctly”. You’ll have to trust that I have verified the client secret and the client id are correct via using them in Postman. This is still not returning any output.

I also tried what you suggested with changing the output type to text, rather then JSON, and here’s what that looks like:

{
“nodes”: [
{
“parameters”: {
“method”: “POST”,
“url”: “https://halodev.halopsa.com/auth/token”,
“sendHeaders”: true,
“headerParameters”: {
“parameters”: [
{
“name”: “Accept”,
“value”: “application/json”
}
]
},
“sendBody”: true,
“contentType”: “multipart-form-data”,
“bodyParameters”: {
“parameters”: [
{
“name”: “grant_type”,
“value”: “client_credentials”
},
{
“name”: “client_id”,
“value”: “f6ecd2c3-f2b8-4bc5-866b-cec690bc5dfb”
},
{
“name”: “client_secret”,
“value”: “a4a47ad8-ec72-4cee-b51f-6bc8e9df842d-016b9fae-4f2a-4047-8d6a-a92f9a3f3e14”
},
{
“name”: “scope”,
“value”: “all”
}
]
},
“options”: {
“response”: {
“response”: {
“fullResponse”: true,
“responseFormat”: “text”
}
}
}
},
“type”: “n8n-nodes-base.httpRequest”,
“typeVersion”: 4.4,
“position”: [
416,
0
],
“id”: “a19cf77d-663f-4702-a9a8-2f4349f3da5c”,
“name”: “HTTP Request”,
“alwaysOutputData”: false,
“executeOnce”: false,
“onError”: “continueErrorOutput”
}
],
“connections”: {
“HTTP Request”: {
“main”: [

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

And that still isn’t returning any output.

@Asawicki

From what you shared, I think these are two separate issues: the HaloPSA node likely doesn’t expose the client/site/user fields needed for your ticket-creation case, even though the HaloPSA integration does support clients, sites, and tickets more broadly. (docs.n8n.io)
For the HTTP Request test, I’d stop using multipart-form-data for the token call and switch to application/x-www-form-urlencoded, because n8n treats those body types differently and OAuth token endpoints usually expect form-encoded data. (docs.n8n.io)
So my practical workaround would be get the token with HTTP Request using form-urlencoded, then create the ticket with HTTP Request as well if you need fields the HaloPSA node doesn’t currently expose.

On the HTTP request, I tried changing the request to the form-url-encoded, and it’s still not returning anything.

@Asawicki

Headers
Accept: application/json
Content-Type: application/x-www-form-urlencoded
send body on
in body use Body Form URL Encoded

Also, I recommend temporarily disabling continueOnFail and enabling Full Response + Response Format = String so you can see the raw API response.

Ended up figuring out the problem I was having myself: Turns out, the N8N interface is just unclear: When you click the “execute step” button… That should (probably) read “execute workflow”. Based on what I just did, it does just that: It executes the entire workflow. So, what was happening, was that it was getting to the (failing) Halo ticket creation node that I had, but it wasn’t actually getting to the HTTP request node(s). And it wasn’t giving that feedback either. So, it just appeared as if the HTTP nodes weren’t returning anything, but it just wasn’t even executing those nodes.

I found this because I just happened to hit the “execute workflow” button outside of the step… And then that gave me useful error messages, and I figured out that I should get rid of the other failing nodes before the HTTP nodes.

So: The HTTP nodes should work for what I want to do, but the HaloPSA module will not.

1 Like