Reference · Tools

HelpScout

Manage conversations, customers, mailboxes, and threads in HelpScout with binary attachment support.

Action (binary) Productivity v1 Binary data

The HelpScout node works with conversations, customers, mailboxes and threads through the Mailbox API v2, and handles file attachments as binary data in both directions. A typical build is creating a conversation from a form submission with the uploaded file attached, then adding threads as the case develops.

Node type
Action (binary)
Parameters
42
Outputs
Output, Error
Credentials
HelpScout OAuth2

HelpScout

Manage HelpScout conversations, customers, mailboxes, and threads

Overview

HelpScout integration for the Mailbox API v2. Supports CRUD operations on conversations (create, delete, get, getAll), customers (create, get, getAll, properties, update), mailboxes (get, getAll), and threads (create with file attachments, getAll). Thread creation supports binary attachments that are base64-encoded and sent to the HelpScout API. Uses OAuth2 client credentials authentication.

Category: Productivity
Tool Name: helpscout
Version: 1

Appearance: Icon: si-helpscout | Color: #1292EE

Node Type

Action (Binary) — handles file/binary data operations

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires HelpScout OAuth2 credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Conversationconversation
Customercustomer
Mailboxmailbox
Threadthread

Operations

Conversation (conversation)

OperationValueDescription
CreatecreateCreate a new conversation
DeletedeleteDelete a conversation
GetgetGet a conversation
Get ManygetAllGet many conversations

Customer (customer)

OperationValueDescription
CreatecreateCreate a new customer
GetgetGet a customer
Get ManygetAllGet many customers
PropertiespropertiesGet customer property definitions
UpdateupdateUpdate a customer

Mailbox (mailbox)

OperationValueDescription
GetgetGet a mailbox
Get ManygetAllGet many mailboxes

Thread (thread)

OperationValueDescription
CreatecreateCreate a new thread
Get ManygetAllGet many threads

Parameters

Customer: Properties takes no parameters of its own — see All Operations.

String, number, JSON and collection fields are resolved per input item, so they accept {{ $json.field }} expressions.

Conversation: Create

ParameterTypeRequiredDefaultDescription
Mailbox ID (mailboxId)stringYesID of the mailbox where the conversation is being created. Use the Mailbox: Get Many operation to find mailbox IDs.
StatusoptionsYesactiveConversation status.
Options: active, closed, pending
SubjectstringYesConversation subject line.
Type (type)optionsYesemailConversation type.
Options: chat, email, phone
Resolve Data (resolveData)booleanNotrueWhether to fetch the full conversation after creation. If false, only the ID and URI are returned.
Additional Fields (additionalFields)collectionNo{}Optional fields to set on the new conversation. One of Customer Email or Customer ID must be set here, or the item fails.
— Assign TonumberNo0User ID to assign the conversation to.
— Auto ReplybooleanNofalseWhether to send an auto-reply if there is at least one customer thread.
— Closed AtstringNoISO 8601 datetime when the conversation was closed (for imports).
— Created AtstringNoISO 8601 datetime when the conversation was created.
— Customer EmailstringNoCustomer email address. Either this or Customer ID is required.
— Customer IDnumberNo0Customer ID. Either this or Customer Email is required.
— ImportedbooleanNofalseWhether to suppress outgoing emails and notifications.
— TagsstringNoComma-separated list of tag names to add to the conversation.
— User IDnumberNo0ID of the user creating the conversation.
ThreadsjsonNo[]JSON array of thread objects. Each thread: { “type”: “chat|customer|note|phone|reply”, “text”: “message body”, “bcc”: [], “cc”: [], “draft”: false }.

Conversation: Delete

ParameterTypeRequiredDefaultDescription
Conversation ID (conversationId)stringYesThe ID of the conversation.

Conversation: Get

ParameterTypeRequiredDefaultDescription
Conversation ID (conversationId)stringYesThe ID of the conversation.

Conversation: Get Many

ParameterTypeRequiredDefaultDescription
Return All (returnAll)booleanNofalseWhether to return all results or only up to a given limit.
Limit (limit)numberNo50Max number of results to return. (shown when Return All is false)
Options (options)collectionNo{}Filters and sorting for the conversation listing.
— Assign TonumberNo0Filter by assignee user ID.
— EmbedoptionsNoEmbed thread data in the response.
Options: threads
— Folder IDstringNoFilter by folder ID.
— Mailbox IDstringNoFilter by mailbox ID.
— Modified SincestringNoISO 8601 datetime. Returns only conversations modified after this date.
— NumbernumberNo0Look up by conversation number.
— QuerystringNoAdvanced search query string.
— Sort FieldoptionsNoField the results are sorted on.
Options: createdAt, customerEmail, customerName, mailboxid, modifiedAt, number, score, status, subject
— Sort OrderoptionsNodescSort direction.
Options: asc, desc
— StatusoptionsNoactiveFilter conversations by status.
Options: active, all, closed, open, pending, spam
— TagsstringNoComma-separated tag names to filter by.

Customer: Create

ParameterTypeRequiredDefaultDescription
Resolve Data (resolveData)booleanNotrueWhether to fetch the full customer record after creation.
Additional Fields (additionalFields)collectionNo{}Customer fields to set. At least one field across this collection and the JSON fields below must be set, or the item fails.
— AgenumberNo1Customer age.
— First NamestringNoFirst name (1-40 characters).
— GenderoptionsNoCustomer gender.
Options: female, male, unknown
— Job TitlestringNoJob title (max 60 characters).
— Last NamestringNoCustomer last name.
— LocationstringNoCustomer location.
— NotesstringNoBackground notes about the customer.
— OrganizationstringNoCompany or organization the customer belongs to.
— Photo URLstringNoURL of the customer’s photo.
AddressjsonNo{}JSON object: { “line1”: "", “line2”: "", “city”: "", “state”: "", “country”: “US”, “postalCode”: "" }.
EmailsjsonNo[]JSON array: [{ “type”: “work|home|other”, “value”: “email@example.com” }].
PhonesjsonNo[]JSON array: [{ “type”: “work|home|fax|pager|other”, “value”: “+1234567890” }].
Chat HandlesjsonNo[]JSON array: [{ “type”: “aim|gtalk|icq|msn|other|qq|skype|xmpp|yahoo”, “value”: “handle” }].
Social ProfilesjsonNo[]JSON array: [{ “type”: “facebook|twitter|linkedin|…”, “value”: “url_or_handle” }].
WebsitesjsonNo[]JSON array: [{ “value”: “https://example.com” }].

Customer: Get

ParameterTypeRequiredDefaultDescription
Customer IDstringYesThe ID of the customer.

Customer: Get Many

ParameterTypeRequiredDefaultDescription
Return All (returnAll)booleanNofalseWhether to return all results or only up to a given limit.
Limit (limit)numberNo50Max number of results to return. (shown when Return All is false)
Options (options)collectionNo{}Filters and sorting for the customer listing.
— First NamestringNoFilter by first name.
— Last NamestringNoFilter by last name.
— Mailbox IDstringNoFilter by mailbox ID.
— Modified SincestringNoISO 8601 datetime filter.
— Sort FieldoptionsNoscoreField the results are sorted on.
Options: score, firstName, lastName, modifiedAt
— Sort OrderoptionsNodescSort direction.
Options: asc, desc
— QuerystringNoAdvanced search query.

Customer: Update

ParameterTypeRequiredDefaultDescription
Customer IDstringYesThe ID of the customer.
Update FieldscollectionNo{}Fields to change on the customer — set at least one, otherwise the item fails.
— AgenumberNo1Customer age.
— First NamestringNoCustomer first name.
— GenderoptionsNoCustomer gender.
Options: female, male, unknown
— Job TitlestringNoCustomer job title.
— Last NamestringNoCustomer last name.
— LocationstringNoCustomer location.
— NotesstringNoBackground notes about the customer.
— OrganizationstringNoCompany or organization the customer belongs to.
— Photo URLstringNoURL of the customer’s photo.

Mailbox: Get

ParameterTypeRequiredDefaultDescription
Mailbox ID (mailboxId)stringYesThe ID of the mailbox.

Mailbox: Get Many

ParameterTypeRequiredDefaultDescription
Return All (returnAll)booleanNofalseWhether to return all results or only up to a given limit.
Limit (limit)numberNo50Max number of results to return. (shown when Return All is false)

Thread: Create

ParameterTypeRequiredDefaultDescription
Conversation ID (conversationId)stringYesThe ID of the conversation to add the thread to.
Type (type)optionsYesnoteThe type of thread to create.
Options: chat, customer, note, phone, reply
TextstringYesThe message body text (HTML supported).
Additional Fields (additionalFields)collectionNo{}Optional fields to set on the new thread. One of Customer Email or Customer ID must be set here, or the item fails.
— Created AtstringNoISO 8601 datetime for thread creation time.
— Customer EmailstringNoCustomer email. Either this or Customer ID is required.
— Customer IDnumberNo0Customer ID. Either this or Customer Email is required.
— DraftbooleanNofalseWhether to create as a draft (note type only).
— ImportedbooleanNofalseWhether to suppress outgoing emails and notifications.
Manual AttachmentsjsonNo[]JSON array of manual attachments: [{ “fileName”: “file.pdf”, “mimeType”: “application/pdf”, “data”: “base64string” }].
Binary Attachment PropertiesstringNoComma-separated binary property names to attach (e.g. “data,attachment_0”). Each binary property will be base64-encoded and sent as an attachment.

Thread: Get Many

ParameterTypeRequiredDefaultDescription
Conversation ID (conversationId)stringYesThe ID of the conversation to get threads for.
Return All (returnAll)booleanNofalseWhether to return all results or only up to a given limit.
Limit (limit)numberNo50Max number of results to return. (shown when Return All is false)

All Operations

ParameterTypeRequiredDefaultDescription
Max ConcurrencynumberNo10Maximum number of items to process concurrently.

Output Data

Exactly one output item per input item — this node never fans out, not even on the Get Many operations. Binary data on the input item is forwarded unchanged; attachments you send with a thread are uploaded to HelpScout and are not returned as binary.

How the response reaches the item depends on its shape:

  • Listings are nested, not merged. When HelpScout returns an array, the records are written to results on the output item and their number to resultCount. The rest of the item JSON passes through untouched. An empty listing still produces one item, with results: [] and resultCount: 0.
  • Single records are merged at the top level. When HelpScout returns one object, its fields are spread onto the item JSON, so response fields can overwrite incoming fields of the same name.
  • Operations with no response body set success: true on the item, leaving the rest of the item JSON in place.
OperationWhat lands on the output item
Conversation: CreateThe full conversation record merged at the top level when Resolve Data is on; with it off, only id and uri
Conversation: Deletesuccess: true
Conversation: GetThe conversation record merged at the top level
Conversation: Get Manyresults (conversations) and resultCount
Customer: CreateThe full customer record merged at the top level when Resolve Data is on; with it off, only id and uri
Customer: GetThe customer record merged at the top level
Customer: Get Manyresults (customers) and resultCount
Customer: Propertiesresults (property definitions) and resultCount
Customer: Updatesuccess: true
Mailbox: GetThe mailbox record merged at the top level
Mailbox: Get Manyresults (mailboxes) and resultCount
Thread: Createsuccess: true
Thread: Get Manyresults (threads) and resultCount

Reference the result downstream by expression — {{ $json.resultCount }} for a listing, {{ $json.id }} for a create with Resolve Data off. Because listings arrive as one item holding an array, use a Split Out node on results when you need one workflow item per record.

Usage Examples

  • Create a new conversation in HelpScout
  • List all customers
  • Add a thread with file attachment to a conversation
  • Get conversation details by ID
  • Update customer information

Example Configuration

Create a new conversation:

{
  "type": "helpscout",
  "parameters": {
    "resource": "conversation",
    "operation": "create",
    "mailboxId": "12345",
    "subject": "Customer Support Request",
    "type": "email",
    "status": "active",
    "resolveData": true,
    "additionalFields": {
      "customerEmail": "customer@example.com",
      "tags": "urgent,billing",
      "assignTo": 67890
    },
    "threads": [
      {
        "type": "customer",
        "text": "I need help with my billing inquiry.",
        "draft": false
      }
    ]
  }
}

Get all conversations with filters:

{
  "type": "helpscout",
  "parameters": {
    "resource": "conversation",
    "operation": "getAll",
    "returnAll": false,
    "limit": 50,
    "options": {
      "status": "active",
      "mailbox": "12345",
      "sortField": "createdAt",
      "sortOrder": "desc",
      "query": "billing"
    }
  }
}

Create a new customer:

{
  "type": "helpscout",
  "parameters": {
    "resource": "customer",
    "operation": "create",
    "resolveData": true,
    "additionalFields": {
      "firstName": "John",
      "lastName": "Doe",
      "organization": "Acme Corp",
      "jobTitle": "Manager"
    },
    "emails": [
      {
        "type": "work",
        "value": "john.doe@acme.com"
      }
    ],
    "phones": [
      {
        "type": "work",
        "value": "+1-555-123-4567"
      }
    ],
    "address": {
      "line1": "123 Business St",
      "city": "Business City",
      "state": "BC",
      "country": "US",
      "postalCode": "12345"
    }
  }
}

Update a customer:

{
  "type": "helpscout",
  "parameters": {
    "resource": "customer",
    "operation": "update",
    "customerId": "98765",
    "updateFields": {
      "jobTitle": "Senior Manager",
      "organization": "Acme Corporation",
      "location": "New York, NY"
    }
  }
}

Create a thread with attachments:

{
  "type": "helpscout",
  "parameters": {
    "resource": "thread",
    "operation": "create",
    "conversationId": "54321",
    "type": "reply",
    "text": "Thank you for contacting us. Please find the requested document attached.",
    "additionalFields": {
      "draft": false,
      "customerEmail": "customer@example.com"
    },
    "attachmentsManual": [
      {
        "fileName": "invoice.pdf",
        "mimeType": "application/pdf",
        "data": "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PAovVHlwZSAvQ2F0YWxvZwo..."
      }
    ]
  }
}

Get all customers with a search query:

{
  "type": "helpscout",
  "parameters": {
    "resource": "customer",
    "operation": "getAll",
    "returnAll": false,
    "limit": 25,
    "options": {
      "query": "john",
      "sortField": "score",
      "sortOrder": "desc",
      "modifiedSince": "2024-01-01T00:00:00Z"
    }
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

Manage HelpScout conversations, customers, mailboxes, and threads with file attachment support via the Mailbox API v2.

Frequently asked questions

Can it handle attachments?

Yes — attachment support is built in, so binary data from an upstream node can be uploaded onto a conversation, and attachments can be pulled back out as binary for storage or processing.

What is a thread versus a conversation?

A conversation is the case; threads are the individual messages and notes within it. The node manages both, so you can open a case and then append replies or internal notes to it.

Which API version does it use?

Mailbox API v2, authenticated with a Help Scout OAuth2 credential — the same credential the Help Scout Trigger uses.

How do I react to incoming support activity?

Pair it with the Help Scout Trigger: the trigger starts the workflow on an event, and this node performs the follow-up work such as replying, tagging or fetching customer detail.

Build with the HelpScout node

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need HelpScout OAuth2 credentials first.

Open BusyBot

Last updated . Spotted something wrong? Tell us.