List Conversations (v3)
List and filter conversations. Use the threads resource link inside the Conversation entity to load conversation threads.
Request
GET /v3/conversations HTTP/1.1
Authorization: Bearer oauth_token
Request parameters can be used to filter conversations. All parameters are joined by the AND operator.
If you want closed conversations in a specific inbox, call:
curl https://api.helpscout.net/v3/conversations?inboxId=123&status=closed
Every filter is a typed URL parameter. Parameters that accept more than one value (inboxId, contactId, tag, status) take them comma separated, and a conversation matches when it has any of the values given. Unknown parameters, blank values and values of the wrong type are rejected with a 400 Bad Request.
By default only active conversations are listed. This is equivalent to ?status=active. If you want to list all conversations, use ?status=all.
Conversations are sorted by conversation id (id) from newest to oldest, which is equivalent to sorting by creation date (createdAt).
Note: If using the embed=threads parameter with this call, you will see truncated chat threads. This is by design. To view Beacon chat threads in full, call the List Threads (v3) endpoint for that conversation instead.
URL Parameters
| Parameter | Type | Examples | Description |
|---|---|---|---|
inboxId |
number |
inboxId=123inboxId=123,567 |
Filters conversations from a specific inbox id. Use comma separated values for more inboxes |
contactId |
number |
contactId=123contactId=123,567 |
Filters conversations belonging to a specific contact (customer) id. Use comma separated values for more contacts |
email |
string |
email=john@appleseed.com |
Filters conversations by the exact email address of the contact (customer). Accepts a single address |
status |
enumeration |
status=activestatus=open,closed |
Filter conversations by status (defaults to active): activeallclosedopenpendingspamSee Status values for details |
tag |
string |
tag=redtag=red,blue |
Filter conversations by tag name. Use comma separated values for more tags |
assignedId |
number |
assignedId=1771 |
Filters conversations by assignee id |
number |
number |
number=123 |
Looks up conversation by conversation number |
createdSince |
date |
createdSince=2018-05-04T12:00:03Z |
Filters conversations created after this timestamp |
modifiedSince |
date |
modifiedSince=2018-05-04T12:00:03Z |
Filters conversations modified after this timestamp |
customFieldsByIds |
special |
customFieldsByIds=123:bluecustomFieldsByIds=123:blue,234:99 |
Filters conversations by custom fields, using custom field IDs. Requires exactly one inboxId value.Expected format is id:value,id:valueSee Custom Fields search for details |
embed |
enumeration |
embed=threads |
Allows embedding/loading of sub-entities, allowed values are: threads |
cursor |
string |
cursor=eyJpZCI6MTIzfQ== |
Cursor for pagination. See Pagination |
Status values
| Value | What it lists |
|---|---|
active |
Active conversations (the default when status is omitted) |
pending |
Pending conversations |
closed |
Closed conversations |
spam |
Conversations marked as spam |
open |
Active and pending conversations, shorthand for status=active,pending |
all |
Conversations in every status; any other value passed alongside all is ignored |
Values can be combined with a comma, for example ?status=active,closed lists conversations that are either active or closed.
Custom Fields search
customFieldsByIds
This is a fairly low level search - the values are expected in a fieldId:value format and you can either
- use multiple
customFieldsByIdsparams like this?customFieldsByIds=123:green&customFieldsByIds=234:blue - or join the values yourself:
?customFieldsByIds=123:green,234:blue.
Rules:
customFieldsByIdsrequires exactly oneinboxId— custom field ids are inbox-scoped, so this filter must be combined with a singleinboxIdvalue. OmittinginboxId, or passing more than one, returns a400 Bad Requestresponse.- the filtering is done via an exact match for all field types with the exception of text fields, which are searched in a full text search manner
- multiple filters use the
ANDoperator - all custom field filters must match - for the Dropdown custom field type the value is the dropdown option ID (you can use the Inbox Fields endpoint to fetch all IDs)
Pagination
This endpoint uses cursor-based pagination. Follow the next link in the response to load the next page of results.
- The response
_linkscontainsself,first, and (when more results are available)next. - To page forward, request the URL in
_links.next.href, or pass itscursorvalue in thecursorparameter. - When
_links.nextis absent, there are no more results. - There are no
lastorprevlinks, and nopageobject.
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json
{
"_embedded" : {
"conversations" : [ {
"_links" : {
"self" : {
"href" : "..."
},
"mailbox" : {
"href" : "..."
},
"primaryCustomer" : {
"href" : "..."
},
"createdByUser" : {
"href" : "..."
},
"closedBy" : {
"href" : "..."
},
"threads" : {
"href" : "..."
},
"assignee" : {
"href" : "..."
},
"web" : {
"href" : "..."
}
},
"id" : 10,
"number" : 12,
"threads" : 2,
"type" : "email",
"folderId" : 11,
"status" : "closed",
"state" : "published",
"subject" : "Help",
"preview" : "Preview",
"mailboxId" : 13,
"assignee" : {
"id" : 99,
"type" : "user",
"first" : "Mr",
"last" : "Robot",
"email" : "none@nowhere.com"
},
"createdBy" : {
"id" : 12,
"type" : "system_user",
"email" : "bear@acme.com"
},
"createdAt" : "2012-03-15T22:46:22Z",
"closedBy" : 14,
"closedByUser" : {
"id" : 14,
"type" : "user",
"first" : "Clo",
"last" : "Ser",
"photoUrl" : "pic.jpg",
"email" : "closer@closers.com"
},
"closedAt" : "2012-03-16T14:07:23Z",
"userUpdatedAt" : "2012-03-16T14:07:23Z",
"customerWaitingSince" : {
"time" : "2012-07-24T20:18:33Z",
"friendly" : "20 hours ago"
},
"source" : {
"type" : "email",
"via" : "customer"
},
"tags" : [ {
"id" : 9150,
"color" : "#929499",
"tag" : "vip",
"styles" : {
"dark" : {
"background" : {
"fill" : "#37A4FF"
},
"text" : {
"fill" : "#161616"
}
},
"default" : {
"background" : {
"fill" : "#ACE3FF"
},
"text" : {
"fill" : "#1D2B36"
}
}
}
} ],
"cc" : [ "bear@normal.com" ],
"bcc" : [ "bear@secret.com" ],
"primaryCustomer" : {
"id" : 238604,
"type" : "customer",
"first" : "Rob",
"last" : "Robertovic",
"email" : "rob@acme.com"
},
"snooze" : {
"snoozedBy" : 4,
"snoozedUntil" : "2024-06-03T12:00:00Z",
"unsnoozeOnCustomerReply" : true
},
"nextEvent" : {
"time" : "2024-06-03T12:00:00Z",
"eventType" : "snooze",
"userId" : 4,
"cancelOnCustomerReply" : true
},
"customFields" : [ {
"id" : 8,
"name" : "Account Type",
"value" : "8518",
"text" : "Free"
}, {
"id" : 6688,
"name" : "Account Status",
"value" : "33077",
"text" : "Trial"
}, {
"id" : 9105,
"name" : "ai-topic",
"value" : "41194",
"text" : "Billing",
"systemType" : "topic"
} ],
"_embedded" : {
"threads" : [ ]
}
} ]
},
"_links" : {
"next" : {
"href" : "..."
},
"self" : {
"href" : "..."
},
"first" : {
"href" : "..."
}
}
}
Response fields
| Path | Type | Description |
|---|---|---|
_embedded.conversations |
Array |
Array of Conversation (v3) objects |
_links.self |
Object |
Link to the current page |
_links.first |
Object |
Link to the first page |
_links.next |
Object |
Link to the next page (only present when more results are available) |