Search all guides

Reference · Tools

HelpScout integration

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.

Works as
Action (binary)
Tool name
helpscout
Operations
4 — Create , Delete , Get , Get Many
Parameters
42
Outputs
Output, Error
Credentials
HelpScout OAuth2
Official docs
HelpScout docs developer.helpscout.com

What you can build with HelpScout

  • 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.

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.

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

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

Conversation: Create

ParameterTypeRequiredDefaultDescription
Mailbox IDstringYes—The ID of the mailbox to fetch, or to create the conversation in; use Mailbox Get Many to find mailbox IDs.
StatusoptionsYesactiveConversation status.
Options: active, closed, pending
SubjectstringYes—Conversation subject line.
Type (conversationType)optionsYesemailChannel the conversation belongs to: chat, email, or phone.
Options: chat, email, phone
Resolve DatabooleanNotrueWhether to fetch the full created record; if false, only its ID and URI are returned.
Additional FieldscollectionNo{}
Options: female
— Assign TonumberNo0User ID to assign the conversation to.
— Auto ReplybooleanNofalseWhether to send an auto-reply if there is at least one customer thread.
— Closed AtstringNo—ISO 8601 datetime when the conversation was closed (for imports).
— Created AtstringNo—ISO 8601 datetime when the conversation was created.
— Customer EmailstringNo—Customer 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.
— TagsstringNo—Comma-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 IDstringYes—The ID of the conversation to act on.

Conversation: Get

ParameterTypeRequiredDefaultDescription
Conversation IDstringYes—The ID of the conversation to act on.

Conversation: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)
OptionscollectionNo{}
Options: threads, createdAt, asc, active, score
— Assign TonumberNo0Filter by assignee user ID.
— EmbedoptionsNo—Embed thread data in the response.
Options: threads
— Folder IDstringNo—Filter by folder ID.
— Mailbox IDstringNo—Filter by mailbox ID.
— Modified SincestringNo—ISO 8601 datetime. Returns only conversations modified after this date.
— NumbernumberNo0Look up by conversation number.
— QuerystringNo—Advanced search query string.
— Sort FieldoptionsNo—
Options: createdAt, customerEmail, customerName, mailboxid, modifiedAt, number, score, status, subject
— Sort OrderoptionsNodesc
Options: asc, desc
— StatusoptionsNoactiveFilter conversations by status.
Options: active, all, closed, open, pending, spam
— TagsstringNo—Comma-separated tag names to filter by.

Customer: Create

ParameterTypeRequiredDefaultDescription
Resolve DatabooleanNotrueWhether to fetch the full created record; if false, only its ID and URI are returned.
Additional FieldscollectionNo{}
Options: female
— AgenumberNo1Customer age.
— First NamestringNo—First name (1-40 characters).
— GenderoptionsNo—
Options: female, male, unknown
— Job TitlestringNo—Job title (max 60 characters).
— Last NamestringNo—
— LocationstringNo—
— NotesstringNo—
— OrganizationstringNo—
— Photo URLstringNo—
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 IDstringYes—The ID of the customer.

Customer: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)
OptionscollectionNo{}
Options: threads, createdAt, asc, active, score
— First NamestringNo—Filter by first name.
— Last NamestringNo—Filter by last name.
— Mailbox IDstringNo—Filter by mailbox ID.
— Modified SincestringNo—ISO 8601 datetime filter.
— Sort FieldoptionsNoscore
Options: score, firstName, lastName, modifiedAt
— Sort OrderoptionsNodesc
Options: asc, desc
— QuerystringNo—Advanced search query.

Customer: Update

ParameterTypeRequiredDefaultDescription
Customer IDstringYes—The ID of the customer.
Update FieldscollectionNo{}
Options: female
— AgenumberNo1
— First NamestringNo—
— GenderoptionsNo—
Options: female, male, unknown
— Job TitlestringNo—
— Last NamestringNo—
— LocationstringNo—
— NotesstringNo—
— OrganizationstringNo—
— Photo URLstringNo—

Mailbox: Get

ParameterTypeRequiredDefaultDescription
Mailbox IDstringYes—The ID of the mailbox to fetch, or to create the conversation in; use Mailbox Get Many to find mailbox IDs.

Mailbox: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Thread: Create

ParameterTypeRequiredDefaultDescription
Conversation IDstringYes—The ID of the conversation to act on.
Type (threadType)optionsYesnoteKind of thread to add to the conversation; this selects the endpoint, so a reply, customer message, note, chat, or phone thread.
Options: chat, customer, note, phone, reply
TextstringYes—The message body text (HTML supported).
Additional FieldscollectionNo{}
Options: female
— Created AtstringNo—ISO 8601 datetime for thread creation time.
— Customer EmailstringNo—Customer 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 PropertiesstringNo—Comma-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 IDstringYes—The ID of the conversation to act on.
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max 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.

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

This tool manages HelpScout conversations, customers, mailboxes, and threads. It is ideal for creating new conversations, updating customer information, or adding threads with file attachments, rather than managing other types of records. It produces updated HelpScout records, new conversations or threads, or lists of existing items.

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 HelpScout

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 reviewed . Spotted something wrong? Tell us.