Skip to main content

Objects

Account

No description

type Account {
activatedAt: DateTime
expiresAt: DateTime
id: ID!
state: AccountState!
subdomain: String!
}

AccountIntegration

No description

type AccountIntegration implements Integration {
createdAt: DateTime!
id: ID!
legacyId: String!
provider: IntegrationProvider!
settings: IntegrationSettings!
uid: String
updatedAt: DateTime!
}

AccountPreferenceUpsertPayload

Autogenerated return type of AccountPreferenceUpsert

type AccountPreferenceUpsertPayload {
accountPreferences: AccountPreferences
clientMutationId: String
errors: [UserError!]!
}

AccountPreferences

No description

type AccountPreferences {
helplyAccountId: String
helplyCopilotGuidance: String
twoFactorAuthenticationGloballyEnforced: Boolean!
}

Address

A full address.

type Address {
city: String
country: String
postalCode: String
state: String
street: String
street2: String
}

Agent

An agent is a user on Groove that is part of an organization.

To find all active agents, along with the teams they belong to, ordered by name:

query Agents {
agents {
edges {
node {
account {
id
subdomain
}
avatarUrl
createdAt
email
id
name
role
state
subdomain
preferences {
edges {
node {
key
value
}
}
}
teams {
edges {
node {
id
name
}
}
pageInfo {
hasNextPage
}
}
oauthCredentials {
edges {
node {
uid
provider
accessToken
refreshToken
expiresAt
createdAt
updatedAt
}
}
}
username
updatedAt
twoFactorAuthCode {
uri
code
}
}
}
}
}

To query for invited agents:

query Agents {
agents(filter: {state: INVITED}){
edges {
node {
id
name
}
}
}
}

To reverse order the search:

query Agents {
agents( orderBy: { field: NAME, direction: DESC } ) {
edges {
node {
id
name
}
}
}
}

To fetch agents ordered by the most times you assigned them to a conversation:

query Agents {
agents( orderBy: { field: ASSIGNMENT_COUNT, direction: DESC } ) {
nodes {
id
name
}
}
}

To fetch a single agent:

query Node {
node(id: $agentId) {
... on Agent {
id
name
}
}
}
type Agent implements Node, Timestamped {
account: Account!
assignmentCount: Int!
avatarUrl: Url!
conversationCount: Int!
createdAt: DateTime!
defaultNotificationPreferences: [AgentNotificationPreference!]!
email: String!
firstName: String
helplyCopilotAuthGrant: String
helplyIdentifyToken: String
id: ID!
lastName: String
name: String!
notificationPreferences(
after: String
before: String
first: Int
last: Int
): AgentNotificationPreferenceConnection
oauthCredentials(
after: String
before: String
first: Int
last: Int
): OauthCredentialsConnection
preferences(
after: String
before: String
first: Int
last: Int
): AgentPreferenceConnection!
role: AgentRole!
state: AgentState!
status2fa: AgentTwoFactorAuthStatus!
subdomain: String!
teams(
after: String
before: String
first: Int
last: Int
filter: TeamFilter
orderBy: TeamOrder
): TeamConnection
twoFactorAuthCode: TwoFactorAuthCode
updatedAt: DateTime!
username: String
}

AgentChanged

A conversation was reassigned to another agent.

type AgentChanged implements Timestamped {
createdAt: DateTime!
from: Agent
id: ID!
to: Agent
updatedAt: DateTime!
}

AgentConnection

The connection type for Agent.

type AgentConnection {
edges: [AgentEdge]
nodes: [Agent]
pageInfo: PageInfo!
totalCount: Int!
totalPageCount: Int!
}

AgentEdge

An edge in a connection.

type AgentEdge {
cursor: String!
node: Agent
}

AgentNotificationPreference

No description

type AgentNotificationPreference implements Node, Timestamped {
agent: Agent!
createdAt: DateTime!
event: String
id: ID!
key: String!
namespace: AgentNotificationPreferenceNotificationNamespaceType!
scopeId: ID
scopeType: String
updatedAt: DateTime!
value: [AgentNotificationPreferenceNotificationType!]!
}

AgentNotificationPreferenceBulkDeletePayload

Autogenerated return type of AgentNotificationPreferenceBulkDelete

type AgentNotificationPreferenceBulkDeletePayload {
clientMutationId: String
errors: [UserError!]!
ids: [ID!]
}

AgentNotificationPreferenceBulkUpsertPayload

Autogenerated return type of AgentNotificationPreferenceBulkUpsert

type AgentNotificationPreferenceBulkUpsertPayload {
clientMutationId: String
errors: [UserError!]!
notificationPreferences: [AgentNotificationPreference!]
}

AgentNotificationPreferenceConnection

The connection type for AgentNotificationPreference.

type AgentNotificationPreferenceConnection {
edges: [AgentNotificationPreferenceEdge]
nodes: [AgentNotificationPreference]
pageInfo: PageInfo!
}

AgentNotificationPreferenceEdge

An edge in a connection.

type AgentNotificationPreferenceEdge {
cursor: String!
node: AgentNotificationPreference
}

AgentPreference

No description

type AgentPreference {
agent: Agent!
key: String!
namespace: String
value: Untyped!
}

AgentPreferenceConnection

The connection type for AgentPreference.

type AgentPreferenceConnection {
edges: [AgentPreferenceEdge]
nodes: [AgentPreference]
pageInfo: PageInfo!
}

AgentPreferenceDeletePayload

Autogenerated return type of AgentPreferenceDelete

type AgentPreferenceDeletePayload {
clientMutationId: String
errors: [UserError!]!
}

AgentPreferenceEdge

An edge in a connection.

type AgentPreferenceEdge {
cursor: String!
node: AgentPreference
}

AgentPreferenceUpsertPayload

Autogenerated return type of AgentPreferenceUpsert

type AgentPreferenceUpsertPayload {
agentPreference: AgentPreference
clientMutationId: String
errors: [UserError!]!
}

AgentResetLoginAttemptsPayload

Autogenerated return type of AgentResetLoginAttempts

type AgentResetLoginAttemptsPayload {
agent: Agent
clientMutationId: String
errors: [UserError!]!
}

AgentResetPasswordPayload

Autogenerated return type of AgentResetPassword

type AgentResetPasswordPayload {
clientMutationId: String
errors: [UserError!]!
}

AgentSendAdminEmailNotificationPayload

Autogenerated return type of AgentSendAdminEmailNotification

type AgentSendAdminEmailNotificationPayload {
clientMutationId: String
errors: [UserError!]!
}

AiSuggestion

No description

type AiSuggestion {
conversationId: String!
id: ID!
type: String!
value: JSON
}

AiSuggestionConnection

The connection type for AiSuggestion.

type AiSuggestionConnection {
edges: [AiSuggestionEdge]
nodes: [AiSuggestion]
pageInfo: PageInfo!
}

AiSuggestionEdge

An edge in a connection.

type AiSuggestionEdge {
cursor: String!
node: AiSuggestion
}

Article

An article from a Knowledge Base. Each article can be assigned to one category.

To fetch multiple Knowledge Bases with related articles:

query KbArticles {
articles {
totalCount
totalPageCount
edges {
node {
attachments {
nodes {
id
}
}
body
category {
id
}
createdAt
deletedAt
description
id
ratings {
nodes {
id
}
}
ratingsType
relatedArticles{
nodes {
id
}
}
tags
updatedAt

... on Publishable {
author {
id
email
}
description
featured
meta {
description
robots
}
openGraph {
description
imageUrl
title
}
pageTitle
position
publishedAt
slug
state
title
updater {
id
email
}
}

}
}
}
}

To fetch only the latest 5 articles:

query KbArticles {
articles(
first: 5,
filter: {
knowledgeBase: "Support"
},
orderBy: {
field: UPDATED_AT,
direction: DESC
}
){
totalCount
totalPageCount
edges {
node {
id
title
}
}
}
}

To search for articles:

query KbArticles {
articles(
filter: {
knowledgeBase: "Support",
keywords: "rad"
}
){
totalCount
totalPageCount
edges {
node {
id
title
}
}
}
}
type Article implements Node, Timestamped, Publishable {
attachments(
after: String
before: String
first: Int
last: Int
): ArticleAttachmentConnection
author: Agent
body: String
category: KbCategory
createdAt: DateTime!
currentSlug: String
currentVersion: ArticleVersion
deletedAt: DateTime
description: String
featured: Boolean!
id: ID!
knowledgeBase: KnowledgeBase!
latestVersion: ArticleVersion
meta: Meta
openGraph: OpenGraph
pageTitle: String
position: Int!
previousSlugs: [String!]!
publishedAt: DateTime
ratings(
after: String
before: String
first: Int
last: Int
): ArticleRatingConnection
ratingsType: ArticleRatingTypes
relatedArticles(
after: String
before: String
first: Int
last: Int
): ArticleConnection
slug: String
state: PublishState!
tags: [String!]
title: String
updatedAt: DateTime!
updater: Agent
url: String
}

An object that can be published, for example Knowledge Base categories or articles.

For example:


... on Publishable {
author {
id
email
}
description
featured
meta {
description
robots
}
openGraph {
description
imageUrl
title
}
pageTitle
position
publishedAt
slug
state
title
updater {
id
email
}
}

ArticleAttachment

A file attached to a Knowledge Base article.

type ArticleAttachment implements Node, Timestamped {
createdAt: DateTime!
fileName: String!
id: ID!
mimeType: String!
name: String
size: Int!
updatedAt: DateTime!
url: Url
uuid: String
}

ArticleAttachmentConnection

The connection type for ArticleAttachment.

type ArticleAttachmentConnection {
edges: [ArticleAttachmentEdge]
nodes: [ArticleAttachment]
pageInfo: PageInfo!
}

ArticleAttachmentEdge

An edge in a connection.

type ArticleAttachmentEdge {
cursor: String!
node: ArticleAttachment
}

ArticleConnection

The connection type for Article.

type ArticleConnection {
edges: [ArticleEdge]
nodes: [Article]
pageInfo: PageInfo!
totalCount: Int!
totalPageCount: Int!
}

ArticleEdge

An edge in a connection.

type ArticleEdge {
cursor: String!
node: Article
}

ArticleRating

A rating given to an article by a visitor of the Knowledge Base.

type ArticleRating implements Node, Timestamped {
count: Int!
createdAt: DateTime!
id: ID!
updatedAt: DateTime!
value: Int!
}

ArticleRatingConnection

The connection type for ArticleRating.

type ArticleRatingConnection {
edges: [ArticleRatingEdge]
nodes: [ArticleRating]
pageInfo: PageInfo!
}

ArticleRatingEdge

An edge in a connection.

type ArticleRatingEdge {
cursor: String!
node: ArticleRating
}

ArticleVersion

No description

type ArticleVersion implements Timestamped {
body: String
createdAt: DateTime!
description: String
metaRobots: String
pageTitle: String
publishedAt: DateTime
title: String
updatedAt: DateTime!
}

Assignment

The agents and/or teams that are assigned to the conversation.

type Assignment {
agent: Agent
at: DateTime
team: Team
}

AsyncRpcPayload

Autogenerated return type of AsyncRpc

type AsyncRpcPayload {
clientMutationId: String
errors: [UserError!]!
jobId: ID
}

Attachment

A file attached to a message.

type Attachment implements Node, Timestamped {
contentId: String
createdAt: DateTime!
creator: Agent
deliverBy: DateTime
downloadUrl: String
fileName: String
fileSize: String
fileType: String
id: ID!
s3Key: String
scanReport: AttachmentScanReport
type: AttachmentType
updatedAt: DateTime!
url: String
}

AttachmentConnection

The connection type for Attachment.

type AttachmentConnection {
edges: [AttachmentEdge]
nodes: [Attachment]
pageInfo: PageInfo!
}

AttachmentEdge

An edge in a connection.

type AttachmentEdge {
cursor: String!
node: Attachment
}

AttachmentScanReport

The attachment scan report

type AttachmentScanReport {
matches: [String!]!
status: AttachmentScanReportStatus!
}

BillingFeatureType

The billing feature name value pair

type BillingFeatureType {
key: String!
name: String!
value: BillingFeatureValueType!
}

BillingType

No description

type BillingType {
availableFeatures: [BillingFeatureType!]!
cardSetupIntents: [CardSetupIntent!]!
creditCards: [CreditCard!]!
discount: Discount
plans(
state: [PlanState!] = [TRIAL, PAID]
): [Plan!]!
pricings(
showAll: Boolean = false
): [Pricing!]!
usages: [BillingUsageType!]!
}

Fetch all available features of the current plan of current account:

query FeaturesQuery {
billing {
availableFeatures {
key
name
value
}
}
}

Fetch all usage for the current account:

query FeaturesQuery {
billing {
usage {
key
value
}
}
}

BillingUsageType

The billing usage name value pair

type BillingUsageType {
key: String!
value: BillingFeatureValueType!
}

Browser

The web browser used by the contact.

type Browser {
family: String
version: String
}

CancelDowngradePayload

Autogenerated return type of CancelDowngrade

type CancelDowngradePayload {
clientMutationId: String
errors: [UserError!]!
}

CannedReply

A canned reply is a prewritten answer to commonly asked customer questions.

To fetch all canned replies:

query CannedReplies {
cannedReplies {
nodes {
body
category {
id
}
createdAt
creator {
id
}
id
name
snippet
subject
updatedAt
lastUsedAt
countUsed
attachments {
id
}
}
}
}

To fetch all canned replies with a given search string:

query CannedReplies {
cannedReplies( filter: { keywords: "foo" } ) {
nodes {
id
name
}
}
}

To fetch all canned replies with a given search string in a particular category:

query CannedReplies {
cannedReplies( filter: { keywords: "foo", category_ids: [ "crc_123456" ] } ) {
nodes {
id
name
}
}
}
type CannedReply implements Node, Timestamped, Utilizationabled {
attachments(
after: String
before: String
first: Int
last: Int
): AttachmentConnection!
automaticActions: [CannedReplyAutomaticAction!]!
body: String
category: CannedReplyCategory
countUsed: Int!
createdAt: DateTime!
creator: Agent
id: ID!
interpolatedBody(
contactId: ID!
conversationId: ID
messageId: ID
channelId: ID
): String
lastUsedAt: DateTime
mailboxIds: [String!]
name: String
snippet: String
subject: String
updatedAt: DateTime!
}

CannedReplyAutomaticAction

No description

type CannedReplyAutomaticAction {
type: String
value: String
}

CannedReplyCategory

A canned reply category is a grouping for canned replies.

To fetch all canned reply categories in the account:

query CannedReplyCategories{
cannedReplyCategories {
nodes {
createdAt
id
name
updatedAt
}
pageInfo {
hasNextPage
}
}
}

To fetch all canned reply categories with a given search string:

query CannedReplyCategories{
cannedReplyCategories(filter: { keyword: "Billing" }){
nodes {
createdAt
id
name
updatedAt
}
pageInfo {
hasNextPage
}
}
}
type CannedReplyCategory implements Node, Timestamped {
cannedReplies(
after: String
before: String
first: Int
last: Int
filter: CannedReplyFilter
orderBy: CannedReplyOrder
): CannedReplyConnection
createdAt: DateTime!
id: ID!
locked: Boolean!
name: String!
updatedAt: DateTime!
}

CannedReplyCategoryConnection

The connection type for CannedReplyCategory.

type CannedReplyCategoryConnection {
edges: [CannedReplyCategoryEdge]
nodes: [CannedReplyCategory]
pageInfo: PageInfo!
}

CannedReplyCategoryEdge

An edge in a connection.

type CannedReplyCategoryEdge {
cursor: String!
node: CannedReplyCategory
}

CannedReplyConnection

The connection type for CannedReply.

type CannedReplyConnection {
edges: [CannedReplyEdge]
nodes: [CannedReply]
pageInfo: PageInfo!
totalCount: Int!
totalPageCount: Int!
}

CannedReplyEdge

An edge in a connection.

type CannedReplyEdge {
cursor: String!
node: CannedReply
}

CardSetupIntent

Represents the intent of a customer to create/replace a payment method on there account

Fetch all setup intents for the current account:

query SetupIntentsQuery {
billing {
cardSetupIntents {
id,
clientSecret
usage
status
createdAt
}
}
}
type CardSetupIntent {
clientSecret: String!
createdAt: DateTime!
id: ID!
status: SetupIntentStatus!
usage: SetupIntentUsage!
}

CardSetupIntentCreatePayload

Autogenerated return type of CardSetupIntentCreate

type CardSetupIntentCreatePayload {
clientMutationId: String
errors: [UserError!]!
setupIntent: CardSetupIntent
}

CardSetupIntentSucceedPayload

Autogenerated return type of CardSetupIntentSucceed

type CardSetupIntentSucceedPayload {
clientMutationId: String
errors: [UserError!]!
setupIntent: CardSetupIntent
}

ChannelChanged

A conversation was moved to another channel.

type ChannelChanged implements Timestamped {
createdAt: DateTime!
from: Channel
id: ID!
to: Channel
updatedAt: DateTime!
}

ChannelConnection

The connection type for Channel.

type ChannelConnection {
edges: [ChannelEdge]
nodes: [Channel]
pageInfo: PageInfo!
totalCount: Int!
totalPageCount: Int!
}

ChannelDeletePayload

Autogenerated return type of ChannelDelete

type ChannelDeletePayload {
clientMutationId: String
deletedChannelId: ID!
errors: [UserError!]!
}

ChannelEdge

An edge in a connection.

type ChannelEdge {
cursor: String!
node: Channel
}

ChannelIntegration

No description

type ChannelIntegration implements Integration {
channel: Channel!
createdAt: DateTime!
id: ID!
legacyId: String!
provider: IntegrationProvider!
settings: IntegrationSettings!
uid: String
updatedAt: DateTime!
}

CheckAccessByMatrixIdsPayload

Autogenerated return type of CheckAccessByMatrixIds

type CheckAccessByMatrixIdsPayload {
clientMutationId: String
errors: [UserError!]!
rooms: [RoomAccess!]
}

ClickCreatePayload

Autogenerated return type of ClickCreate

type ClickCreatePayload {
clickId: String
clientMutationId: String
errors: [UserError!]!
}

CommentDeleted

A comment was deleted.

type CommentDeleted {
id: ID!
}

CommentEdited

A comment was edited.

type CommentEdited {
id: ID!
}

CommentReacted

A reaction was left on a comment.

type CommentReacted {
id: ID!
isAdded: Boolean!
reaction: String!
}

Company

A company represents an organization containing one or more contacts.

type Company implements Node, Timestamped, CustomFieldValuesField {
contacts(
after: String
before: String
first: Int
last: Int
): ContactConnection
conversationCount: Int!
createdAt: DateTime!
createdBy: Agent!
customFieldValues(
after: String
before: String
first: Int
last: Int
filter: CustomFieldValuesFilter
): CustomFieldValueConnection
domain: String
id: ID!
logoUrl: String
name: String
updatedAt: DateTime!
updatedBy: Agent!
}

CompanyAddContactsPayload

Autogenerated return type of CompanyAddContacts

type CompanyAddContactsPayload {
clientMutationId: String
company: Company!
errors: [UserError!]!
}

CompanyConnection

The connection type for Company.

type CompanyConnection {
edges: [CompanyEdge]
nodes: [Company]
pageInfo: PageInfo!
totalCount: Int!
totalPageCount: Int!
}

CompanyCreatePayload

Autogenerated return type of CompanyCreate

type CompanyCreatePayload {
clientMutationId: String
company: Company
errors: [UserError!]!
}

CompanyDeletePayload

Autogenerated return type of CompanyDelete

type CompanyDeletePayload {
clientMutationId: String
deletedCompanyId: ID
errors: [UserError!]!
}

CompanyEdge

An edge in a connection.

type CompanyEdge {
cursor: String!
node: Company
}

CompanyMergePayload

Autogenerated return type of CompanyMerge

type CompanyMergePayload {
clientMutationId: String
errors: [UserError!]!
target: Company!
}

CompanyRemoveContactsPayload

Autogenerated return type of CompanyRemoveContacts

type CompanyRemoveContactsPayload {
clientMutationId: String
company: Company!
errors: [UserError!]!
}

Condition

A folder condition provides the logic for matching relevant conversations.

For example, to match conversations with the "suggestion" tag:

  1. param: TAG
  2. operator: CONTAINS
  3. value: "suggestion"

To fetch all folders and their conditions:

query Folders {
folders {
edges {
node {
conditions {
edges {
node {
id
param
operator
value
}
}
pageInfo {
hasNextPage
}
}
createdAt
id
matchType
name
updatedAt
}
}
}
}
type Condition implements Node, Timestamped {
createdAt: DateTime!
id: ID!
operator: ConditionOperator!
param: ConditionParam!
source: ConditionSourceUnion
updatedAt: DateTime!
value: String
}

ConditionConnection

The connection type for Condition.

type ConditionConnection {
edges: [ConditionEdge]
nodes: [Condition]
pageInfo: PageInfo!
}

ConditionEdge

An edge in a connection.

type ConditionEdge {
cursor: String!
node: Condition
}

Contact

that role is defined by their participation with a particular conversation. This means the same contact could be the customer on one conversation, and a collaborator on another.

type Contact implements Node, Timestamped, CustomFieldValuesField {
avatarUrl: String
companies(
after: String
before: String
first: Int
last: Int
): CompanyConnection
contactType: ContactType!
conversationCount: Int!
createdAt: DateTime!
createdBy: Agent
customFieldValues(
after: String
before: String
first: Int
last: Int
filter: CustomFieldValuesFilter
): CustomFieldValueConnection
email: EmailAddress
firstName: String
hasEnduser: Boolean!
id: ID!
lastName: String
lastSeenAt: DateTime
name: String
role: ContactRole
secondaryEmails: [EmailAddress!]
updatedAt: DateTime!
updatedBy: Agent!
}

ContactChange

A conversation was reassigned to another contact.

type ContactChange implements Timestamped {
createdAt: DateTime!
from: Contact
id: ID!
to: Contact
updatedAt: DateTime!
}

ContactConnection

The connection type for Contact.

type ContactConnection {
edges: [ContactEdge]
nodes: [Contact]
pageInfo: PageInfo!
totalCount: Int!
totalPageCount: Int!
}

ContactCreatePayload

Autogenerated return type of ContactCreate

type ContactCreatePayload {
clientMutationId: String
contact: Contact
errors: [UserError!]!
}

ContactDeletePayload

Autogenerated return type of ContactDelete

type ContactDeletePayload {
clientMutationId: String
deletedContactId: ID
errors: [UserError!]!
}

ContactEdge

An edge in a connection.

type ContactEdge {
cursor: String!
node: Contact
}

ContactMergePayload

Autogenerated return type of ContactMerge

type ContactMergePayload {
clientMutationId: String
errors: [UserError!]!
target: Contact!
}

ContactOpenedMessage

A contact opened a message.

type ContactOpenedMessage implements Timestamped {
createdAt: DateTime!
id: ID!
message: Message!
updatedAt: DateTime!
}

ContactResyncPayload

Autogenerated return type of ContactResync

type ContactResyncPayload {
clientMutationId: String
contact: Contact!
errors: [UserError!]!
}

ContactUpdatePayload

Autogenerated return type of ContactUpdate

type ContactUpdatePayload {
clientMutationId: String
contact: Contact!
errors: [UserError!]!
}

conversationAddNotePayload

Autogenerated return type of conversationAddNote

type conversationAddNotePayload {
changesetId: String
clientMutationId: String
conversation: Conversation
deletedDraftId: String
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
message: Note
}

ConversationAssignPayload

Autogenerated return type of ConversationAssign

type ConversationAssignPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationAttachment

A file attached to a message.

type ConversationAttachment implements Node, Timestamped {
changesetId: String!
commentId: String!
contentId: String
createdAt: DateTime!
creator: Agent
deliverBy: DateTime
downloadUrl: String
fileName: String
fileSize: String
fileType: String
id: ID!
s3Key: String
scanReport: AttachmentScanReport
ticketId: String!
type: AttachmentType
updatedAt: DateTime!
url: String
}

ConversationAttachmentConnection

The connection type for ConversationAttachment.

type ConversationAttachmentConnection {
edges: [ConversationAttachmentEdge]
nodes: [ConversationAttachment]
pageInfo: PageInfo!
}

ConversationAttachmentEdge

An edge in a connection.

type ConversationAttachmentEdge {
cursor: String!
node: ConversationAttachment
}

ConversationBulkDeletePayload

Autogenerated return type of ConversationBulkDelete

type ConversationBulkDeletePayload {
clientMutationId: String
errors: [UserError!]!
jid: String!
}

ConversationChangeChannelPayload

Autogenerated return type of ConversationChangeChannel

type ConversationChangeChannelPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationChangeContactPayload

Autogenerated return type of ConversationChangeContact

type ConversationChangeContactPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationClosePayload

Autogenerated return type of ConversationClose

type ConversationClosePayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationConnection

The connection type for Conversation.

type ConversationConnection {
edges: [ConversationEdge]
nodes: [Conversation]
pageInfo: PageInfo!
totalCount: Int!
totalCountCapped: Boolean!
totalPageCount: Int!
}

ConversationCounts

The statistics about the messages and interactions in the conversation.

type ConversationCounts {
attachments: Int!
interactions: Int!
messages: Int!
notes: Int!
stateChanges: Int!
}

ConversationCreateEmailPayload

Autogenerated return type of ConversationCreateEmail

type ConversationCreateEmailPayload {
changesetId: String
clientMutationId: String
conversation: EmailConversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

conversationDeleteNotePayload

Autogenerated return type of conversationDeleteNote

type conversationDeleteNotePayload {
changesetId: String
clientMutationId: String
conversation: Conversation
deletedMessageId: ID!
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationDeletePayload

Autogenerated return type of ConversationDelete

type ConversationDeletePayload {
clientMutationId: String
deletedConversationIds: [ID!]!
diffs: [Diff!]!
errors: [UserError!]!
}

ConversationDeleted

A conversation was moved to trash.

type ConversationDeleted implements Timestamped {
createdAt: DateTime!
id: ID!
updatedAt: DateTime!
}

ConversationEdge

An edge in a connection.

type ConversationEdge {
cursor: String!
node: Conversation
}

conversationEditNotePayload

Autogenerated return type of conversationEditNote

type conversationEditNotePayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
message: Note
}

ConversationFollowPayload

Autogenerated return type of ConversationFollow

type ConversationFollowPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationForwardPayload

Autogenerated return type of ConversationForward

type ConversationForwardPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
deletedDraftId: String
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
message: Message
}

ConversationForwardV2Payload

Autogenerated return type of ConversationForwardV2

type ConversationForwardV2Payload {
changesetId: String
clientMutationId: String
conversation: Conversation
deletedDraftId: String
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
message: Message
}

conversationLinkResourcePayload

Autogenerated return type of conversationLinkResource

type conversationLinkResourcePayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationLogPayload

Autogenerated return type of ConversationLog

type ConversationLogPayload {
changesetId: String
clientMutationId: String
conversation: EmailConversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationMergePayload

Autogenerated return type of ConversationMerge

type ConversationMergePayload {
changesetId: String
clientMutationId: String
errors: [UserError!]!
source: Conversation!
sourceDiffs: [Diff!]!
target: Conversation!
targetDiffs: [Diff!]!
}

ConversationMerged

A conversation was merged into another conversation.

type ConversationMerged implements Timestamped {
createdAt: DateTime!
id: ID!
sourceChannelId: ID
sourceContactId: ID
sourceCreatedAt: DateTime
sourceNumber: Int!
target: Conversation!
updatedAt: DateTime!
}

ConversationMoveMessagePayload

Autogenerated return type of ConversationMoveMessage

type ConversationMoveMessagePayload {
changesetId: String
clientMutationId: String
conversation: Conversation!
errors: [UserError!]!
}

ConversationOpenPayload

Autogenerated return type of ConversationOpen

type ConversationOpenPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationPreferences

No description

type ConversationPreferences {
defaultReplyState: ConversationReplyState!
groupFolders: Boolean!
scopedContactsSearch: Boolean!
showAllInboxes: Boolean!
}

ConversationReplyPayload

Autogenerated return type of ConversationReply

type ConversationReplyPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
deletedDraftId: String
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
message: Message
}

conversationRestorePayload

Autogenerated return type of conversationRestore

type conversationRestorePayload {
clientMutationId: String
conversations(
after: String
before: String
first: Int
last: Int
): ConversationConnection
diffs: [Diff!]!
errors: [UserError!]!
}

ConversationRestored

A conversation was restored from trash.

type ConversationRestored implements Timestamped {
createdAt: DateTime!
id: ID!
updatedAt: DateTime!
}

ConversationSnoozePayload

Autogenerated return type of ConversationSnooze

type ConversationSnoozePayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationSpamPayload

Autogenerated return type of ConversationSpam

type ConversationSpamPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationStarPayload

Autogenerated return type of ConversationStar

type ConversationStarPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationStarred

The conversation was starred.

type ConversationStarred implements Timestamped {
createdAt: DateTime!
id: ID!
updatedAt: DateTime!
}

ConversationSubjectPayload

Autogenerated return type of ConversationSubject

type ConversationSubjectPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationTagPayload

Autogenerated return type of ConversationTag

type ConversationTagPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

conversationToggleNoteReactionPayload

Autogenerated return type of conversationToggleNoteReaction

type conversationToggleNoteReactionPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
message: Note
}

ConversationTrashPayload

Autogenerated return type of ConversationTrash

type ConversationTrashPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationUnassignPayload

Autogenerated return type of ConversationUnassign

type ConversationUnassignPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

conversationUndoSendPayload

Autogenerated return type of conversationUndoSend

type conversationUndoSendPayload {
changesetId: String
clientMutationId: String
diffs: [Diff!]!
errors: [UserError!]!
}

ConversationUnfollowPayload

Autogenerated return type of ConversationUnfollow

type ConversationUnfollowPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationUnreadPayload

Autogenerated return type of ConversationUnread

type ConversationUnreadPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationUnstarPayload

Autogenerated return type of ConversationUnstar

type ConversationUnstarPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

ConversationUnstarred

The conversation was unstarred.

type ConversationUnstarred implements Timestamped {
createdAt: DateTime!
id: ID!
updatedAt: DateTime!
}

ConversationUntagPayload

Autogenerated return type of ConversationUntag

type ConversationUntagPayload {
changesetId: String
clientMutationId: String
conversation: Conversation
diffs: [Diff!]!
errors: [UserError!]!
eventGroup: EventGroupType
}

Coupon

Represents a coupon that can be associated with a discount.

type Coupon {
amountOff: Int
createdAt: DateTime!
duration: CouponDuration!
durationInMonths: Int
id: ID!
maxRedemptions: Int
name: String
percentOff: Int
timesRedeemed: Int!
valid: Boolean!
}

Credentials

No description

type Credentials {
createdAt: DateTime!
expiresAt: DateTime
expiresIn: Int
token: String!
}

CreditCard

Represents all the credit cards currently added to the groove account

Fetch all credit cards for the current account:

query CreditCardsQuery {
billing {
creditCards {
id,
name
brand
country
cvcCheck
expiryMonth
expiryYear
funding
last4
}
}
}
type CreditCard {
brand: String!
country: String
cvcCheck: String
expiryMonth: Int!
expiryYear: Int!
funding: CreditCardFunding!
id: ID!
last4: String!
name: String
}

CrmEnduserUpsertPayload

Autogenerated return type of CrmEnduserUpsert

type CrmEnduserUpsertPayload {
clientMutationId: String
contactId: ID!
errors: [UserError!]!
}

CustomDomain

A custom domain lets you customize the URL of your Knowledge Base.

It contains expiry and Let's Encrypt certificate details.

type CustomDomain {
domain: String
expiresAt: String
letsencrypt: Boolean!
status: String
valid: Boolean
}

CustomField

Custom fields provide agents with the ability to define extra data on a contact or company, along with the means of specifying how that information is entered and displayed.

type CustomField implements Node, Timestamped {
allowedOperators: [SupportedOperatorType!]
category: CustomFieldCategory!
createdAt: DateTime!
createdBy: Agent!
deletable: Boolean!
description: String
handleType: CustomFieldHandleType
hidden: Boolean!
icon: CustomFieldIcon!
id: ID!
isArray: Boolean!
key: String!
name: String
options(
after: String
before: String
first: Int
last: Int
): CustomFieldOptionConnection
placeholder: String
position: Int
required: Boolean!
type: CustomFieldType!
updatedAt: DateTime!
updatedBy: Agent!
}

CustomFieldCategory

A grouping of contact or company fields.

type CustomFieldCategory implements Node, Timestamped {
createdAt: DateTime!
customFields(
after: String
before: String
first: Int
last: Int
): CustomFieldConnection!
deletable: Boolean!
id: ID!
key: String!
name: String!
type: CustomFieldCategoryType!
updatedAt: DateTime!
}

CustomFieldCategoryConnection

The connection type for CustomFieldCategory.

type CustomFieldCategoryConnection {
edges: [CustomFieldCategoryEdge]
nodes: [CustomFieldCategory]
pageInfo: PageInfo!
}

CustomFieldCategoryCreatePayload

Autogenerated return type of CustomFieldCategoryCreate

type CustomFieldCategoryCreatePayload {
category: CustomFieldCategory
clientMutationId: String
errors: [UserError!]!
}

CustomFieldCategoryDeletePayload

Autogenerated return type of CustomFieldCategoryDelete

type CustomFieldCategoryDeletePayload {
clientMutationId: String
deletedCategoryId: ID
errors: [UserError!]!
newCategory: CustomFieldCategory
}

CustomFieldCategoryEdge

An edge in a connection.

type CustomFieldCategoryEdge {
cursor: String!
node: CustomFieldCategory
}

CustomFieldCategoryUpdatePayload

Autogenerated return type of CustomFieldCategoryUpdate

type CustomFieldCategoryUpdatePayload {
category: CustomFieldCategory
clientMutationId: String
errors: [UserError!]!
}

CustomFieldConnection

The connection type for CustomField.

type CustomFieldConnection {
edges: [CustomFieldEdge]
nodes: [CustomField]
pageInfo: PageInfo!
}

CustomFieldCreatePayload

Autogenerated return type of CustomFieldCreate

type CustomFieldCreatePayload {
clientMutationId: String
customField: CustomField
errors: [UserError!]!
}

CustomFieldDeletePayload

Autogenerated return type of CustomFieldDelete

type CustomFieldDeletePayload {
clientMutationId: String
deletedCustomFieldId: ID
errors: [UserError!]!
}

CustomFieldEdge

An edge in a connection.

type CustomFieldEdge {
cursor: String!
node: CustomField
}

CustomFieldOption

An option for a custom field of type DROPDOWN.

type CustomFieldOption {
customField: CustomField!
label: String!
value: String!
}

CustomFieldOptionConnection

The connection type for CustomFieldOption.

type CustomFieldOptionConnection {
edges: [CustomFieldOptionEdge]
nodes: [CustomFieldOption]
pageInfo: PageInfo!
}

CustomFieldOptionDeletePayload

Autogenerated return type of CustomFieldOptionDelete

type CustomFieldOptionDeletePayload {
clientMutationId: String
deletedCustomFieldOptionId: ID
errors: [UserError!]!
}

CustomFieldOptionEdge

An edge in a connection.

type CustomFieldOptionEdge {
cursor: String!
node: CustomFieldOption
}

CustomFieldRemovePayload

Autogenerated return type of CustomFieldRemove

type CustomFieldRemovePayload {
clientMutationId: String
errors: [UserError!]!
item: CustomFieldSubjectType!
removedItemId: ID!
}

customFieldRestorePayload

Autogenerated return type of customFieldRestore

type customFieldRestorePayload {
clientMutationId: String
customField: CustomField!
errors: [UserError!]!
}

CustomFieldUpdatePayload

Autogenerated return type of CustomFieldUpdate

type CustomFieldUpdatePayload {
clientMutationId: String
customField: CustomField!
errors: [UserError!]!
}

CustomFieldValue

The value of a contact or company custom field.

type CustomFieldValue {
customField: CustomField!
id: ID!
value: ValueTypeUnion!
}

CustomFieldValueConnection

The connection type for CustomFieldValue.

type CustomFieldValueConnection {
edges: [CustomFieldValueEdge]
nodes: [CustomFieldValue]
pageInfo: PageInfo!
}

CustomFieldValueEdge

An edge in a connection.

type CustomFieldValueEdge {
cursor: String!
node: CustomFieldValue
}

CustomFieldValuesBulkUpdatePayload

Autogenerated return type of CustomFieldValuesBulkUpdate

type CustomFieldValuesBulkUpdatePayload {
clientMutationId: String
errors: [UserError!]!
jid: String
}

CustomFieldValuesUpdatePayload

Autogenerated return type of CustomFieldValuesUpdate

type CustomFieldValuesUpdatePayload {
clientMutationId: String
errors: [UserError!]!
subject: CustomFieldSubjectType!
}

CustomerRatingSetting

No description

type CustomerRatingSetting {
account: Account!
id: ID!
locale: String!
mailboxIds: [String!]
name: String!
translations: [CustomerRatingSettingTranslation!]
}

CustomerRatingSettingConnection

The connection type for CustomerRatingSetting.

type CustomerRatingSettingConnection {
edges: [CustomerRatingSettingEdge]
nodes: [CustomerRatingSetting]
pageInfo: PageInfo!
}

CustomerRatingSettingDeletePayload

Autogenerated return type of CustomerRatingSettingDelete

type CustomerRatingSettingDeletePayload {
clientMutationId: String
deletedCustomerRatingSettingId: ID
errors: [UserError!]!
}

CustomerRatingSettingEdge

An edge in a connection.

type CustomerRatingSettingEdge {
cursor: String!
node: CustomerRatingSetting
}

CustomerRatingSettingTranslation

No description

type CustomerRatingSettingTranslation {
id: ID!
locale: String!
value: String!
}

CustomerRatingSettingUpsertPayload

Autogenerated return type of CustomerRatingSettingUpsert

type CustomerRatingSettingUpsertPayload {
clientMutationId: String
customerRatingSetting: CustomerRatingSetting
errors: [UserError!]!
}

DeleteRoomPayload

Autogenerated return type of DeleteRoom

type DeleteRoomPayload {
clientMutationId: String
deletedConversationId: ID
errors: [UserError!]!
}

DemoEmailChannel

A channel for email conversations.

To fetch your active mailboxes, you can issue this query:

query Channels {
channels {
nodes {
... on DemoEmailChannel {
color
createdAt
forwardEmailAddress
fromName
id
name
signature
updatedAt
}
}
pageInfo {
hasNextPage
}
}
}

To fetch inactive mailboxes:

query Channels {
channels(filter: { state: UNCONFIRMED }) {
nodes {
... on DemoEmailChannel {
id
name
}
}
}
}

To fetch accessible folders (paginated) for each of your mailboxes:

query Channels {
channels {
nodes {
... on DemoEmailChannel {
id
name
folders {
nodes {
id
name
}
pageInfo {
hasNextPage
}
}
}
}
}
}

To fetch conversations in this mailbox, use the QueryRoot conversations field with a filter argument e.g.:

query Conversations {
conversations(filter: { channel_id: "ch_12345678" }) {
nodes {
... on Conversation {
id
number
}
}
pageInfo {
hasNextPage
}
}
}
type DemoEmailChannel implements Node, Channel, EmailInterface {
aiDraftsChannels: [EmailChannel!]
aiDraftsKnowledgeBases: [KnowledgeBase!]
aiQualityRating: String
autoBccAddress: String
color: String!
conversationCount(
state: [ConversationState!]
): Int!
createdAt: DateTime!
customFields(
after: String
before: String
first: Int
last: Int
): CustomFieldConnection!
email: String
emailTemplates: [EmailTemplate!]!
errors: [ChannelErrorTypeUnion!]!
folders(
after: String
before: String
first: Int
last: Int
filter: FolderFilter
orderBy: FolderOrder
): FolderConnection
forwardEmailAddress: String!
fromName: String!
id: ID!
incomingEmailServer: IncomingServerTypeUnion
name: String!
outgoingEmailServer: OutgoingServerTypeUnion
permittedAgents(
after: String
before: String
first: Int
last: Int
agentIds: [ID!]
): AgentConnection!
pinnedSearches(
after: String
before: String
first: Int
last: Int
filter: PinnedSearchFilter
orderBy: PinnedSearchOrder
): PinnedSearchConnection
position: Int!
provider: String!
restriction: Restriction!
senderName: String
signature: String
state: ChannelState!
tags(
after: String
before: String
first: Int
last: Int
filter: TagFilter
orderBy: TagOrder
): TagConnection
threadingType: ThreadingType!
type: ChannelType!
updatedAt: DateTime!
useAgentName: Boolean
}

A channel is a source of incoming conversations. It dictates how messages in those conversations are sent and received.

For example, an EmailChannel is a channel where messages are sent as email. To fetch all of them:

query Channels {
channels {
nodes {
... on Channel {
__typename
id
name
conversationCount
}
}
}
}

By default channels are sorted by their user-defined row-order, called their position. To sort by name instead:

query Channels {
channels( orderBy: { field: NAME, direction: ASC } ) {
nodes {
... on EmailChannel {
id
}
}
}
}

To find which agents have permission to view this channel:

query Channels {
channels {
nodes {
id
name
permittedAgents {
totalCount
nodes {
id
}
}
}
}
}

Only find channels where the user is granted access to view it:

query Channels {
channels(filter: { scope: CURRENT_USER }) {
nodes {
id
name
permittedAgents {
totalCount
nodes {
id
}
}
}
}
}

Find all channels the user is allowed to view. Admin users can always view all channels:

query Channels {
channels(filter: { scope: ALL }) {
nodes {
id
name
permittedAgents {
totalCount
nodes {
id
}
}
}
}
}

Device

The device used by the contact.

type Device {
family: String
}

Diff

Diffs represent the changes to search or folder counts as a result of a mutation.

Clients can read the diff(s) from a mutation, and apply those deltas to their cached folder counts without having to re-query the API for the correct counts.

In some cases it's possible to guess how a particular mutation might affect folder counts. Indeed, the Groove apps generally try to make an optimistic guess while the mutation request is in-flight.

Often, however, it's non-trivial to do so, and in some cases not possible. It's more more correct to rely on the API to provide the correct numbers, and these are provided conveniently inside mutation diffs.

For example, say you have a "question" tag, and there are 20 conversations with that tag applied. Then, an agent triggers a conversationUntag mutation for the "question" tag on one of those conversations. That mutation will then return a diff field showing a -1 delta for the general search query for that tag. For example:

"diffs" => [
"tag:tag_1234567" => -1,
]

The client could then cheaply recompute their cached counts for that tag, and update any previously cached search result counts.

Similarly, if you also had a folder whose rule matches all "question" tags as well, then that same mutation might result in a folder diff field like so:

"diffs" => [
"tag:tag_1234567" => -1,
"folder:fol_2345678" => -1,
]

The client could use this information to quickly update any visible folder counts without having to re-query the API.

Finally, diffs are also provided at the 'All Channels' level (like above) and for individual channels. If there was a channel where the above folder was visible, the diff results would look something like so:

"diffs" => [
"tag:tag_1234567" => -1,
"folder:fol_2345678" => -1,
"channel:ch_4567890 folder:fol_2345678" => -1,
]
type Diff {
delta: Int
query: String!
}

DisconnectMutationPayload

Autogenerated return type of DisconnectMutation

type DisconnectMutationPayload {
channel: Channel
clientMutationId: String
errors: [UserError!]!
}

Discount

Represents a discount applied to the customer or subscription

Fetch all credit cards for the current account:

query CreditCardsQuery {
billing {
discount {
id,
type
startAt
endAt
coupon {
id
duration
durationInMonths
maxRedemptions
name
percentOff
amountOff
timesRedeemed
valid
createdAt
}
}
}
}
type Discount {
coupon: Coupon!
endAt: DateTime
id: ID!
startAt: DateTime!
type: DiscountType!
}

DraftConnection

The connection type for Draft.

type DraftConnection {
edges: [DraftEdge]
nodes: [Draft]
pageInfo: PageInfo!
}

DraftDeletePayload

Autogenerated return type of DraftDelete

type DraftDeletePayload {
clientMutationId: String
deletedDraftId: String
errors: [UserError!]!
success: Boolean!
}

DraftEdge

An edge in a connection.

type DraftEdge {
cursor: String!
node: Draft
}

DraftSavePayload

Autogenerated return type of DraftSave

type DraftSavePayload {
clientMutationId: String
contextId: ID
draftId: ID!
draftType: String!
errors: [UserError!]!
payload: String
success: Boolean!
version: Int!
}

DraftUpsertPayload

Autogenerated return type of DraftUpsert

type DraftUpsertPayload {
clientMutationId: String
draft: DraftTypeUnion
errors: [UserError!]!
}

EmailChannel

A channel for email conversations.

To fetch your active mailboxes, you can issue this query:

query Channels {
channels {
nodes {
... on EmailChannel {
color
createdAt
forwardEmailAddress
fromName
id
name
signature
updatedAt
}
}
pageInfo {
hasNextPage
}
}
}

To fetch inactive mailboxes:

query Channels {
channels(filter: { state: UNCONFIRMED }) {
nodes {
... on EmailChannel {
id
name
}
}
}
}

To fetch accessible folders (paginated) for each of your mailboxes:

query Channels {
channels {
nodes {
... on EmailChannel {
id
name
folders {
nodes {
id
name
}
pageInfo {
hasNextPage
}
}
}
}
}
}

To fetch conversations in this mailbox, use the QueryRoot conversations field with a filter argument e.g.:

query Conversations {
conversations(filter: { channel_id: "ch_12345678" }) {
nodes {
... on Conversation {
id
number
}
}
pageInfo {
hasNextPage
}
}
}
type EmailChannel implements Node, Channel, EmailInterface {
aiDraftsChannels: [EmailChannel!]
aiDraftsKnowledgeBases: [KnowledgeBase!]
aiQualityRating: String
autoBccAddress: String
color: String!
conversationCount(
state: [ConversationState!]
): Int!
createdAt: DateTime!
customFields(
after: String
before: String
first: Int
last: Int
): CustomFieldConnection!
email: String
emailTemplates: [EmailTemplate!]!
errors: [ChannelErrorTypeUnion!]!
folders(
after: String
before: String
first: Int
last: Int
filter: FolderFilter
orderBy: FolderOrder
): FolderConnection
forwardEmailAddress: String!
fromName: String!
id: ID!
incomingEmailServer: IncomingServerTypeUnion
name: String!
outgoingEmailServer: OutgoingServerTypeUnion
permittedAgents(
after: String
before: String
first: Int
last: Int
agentIds: [ID!]
): AgentConnection!
pinnedSearches(
after: String
before: String
first: Int
last: Int
filter: PinnedSearchFilter
orderBy: PinnedSearchOrder
): PinnedSearchConnection
position: Int!
provider: String!
restriction: Restriction!
senderName: String
signature: String
state: ChannelState!
tags(
after: String
before: String
first: Int
last: Int
filter: TagFilter
orderBy: TagOrder
): TagConnection
threadingType: ThreadingType!
type: ChannelType!
updatedAt: DateTime!
useAgentName: Boolean
}

A channel is a source of incoming conversations. It dictates how messages in those conversations are sent and received.

For example, an EmailChannel is a channel where messages are sent as email. To fetch all of them:

query Channels {
channels {
nodes {
... on Channel {
__typename
id
name
conversationCount
}
}
}
}

By default channels are sorted by their user-defined row-order, called their position. To sort by name instead:

query Channels {
channels( orderBy: { field: NAME, direction: ASC } ) {
nodes {
... on EmailChannel {
id
}
}
}
}

To find which agents have permission to view this channel:

query Channels {
channels {
nodes {
id
name
permittedAgents {
totalCount
nodes {
id
}
}
}
}
}

Only find channels where the user is granted access to view it:

query Channels {
channels(filter: { scope: CURRENT_USER }) {
nodes {
id
name
permittedAgents {
totalCount
nodes {
id
}
}
}
}
}

Find all channels the user is allowed to view. Admin users can always view all channels:

query Channels {
channels(filter: { scope: ALL }) {
nodes {
id
name
permittedAgents {
totalCount
nodes {
id
}
}
}
}
}

EmailChannelCreatePayload

Autogenerated return type of EmailChannelCreate

type EmailChannelCreatePayload {
channel: EmailChannel
clientMutationId: String
errors: [UserError!]!
}

EmailChannelUpdatePayload

Autogenerated return type of EmailChannelUpdate

type EmailChannelUpdatePayload {
channel: EmailChannel
clientMutationId: String
errors: [UserError!]!
}

EmailConversation

A Groove conversation initiated in an email channel.

To fetch a specific conversation by ID:

query Conversation {
node(id: "cnv_12345678") {
... on Conversation {
assigned {
at
agent {
id
name
}
team {
id
name
}
}
counts {
attachments
interactions
messages
notes
stateChanges
}
createdAt
deletedAt
drafts {
nodes {
id
}
}
followers {
nodes {
id
email
}
}
id
number
snoozed {
by { id }
until
}
starred
state
stateUpdatedAt
subject
systemUpdatedAt
tags {
nodes {
id
name
}
}
updatedAt
}
}
})

To fetch all conversations in a specific channel or folder:

query Conversations {
conversations(
filter: {
channel: "ch_4567890",
folder: "fol_8901234",
}
) {
nodes {
... on Conversation {
id
number
}
}
pageInfo {
hasNextPage
}
}
}

To find conversations in "all channels" that apply to a specific folder, omit the channel.

query Conversations {
conversations( filter: { folder: "fol_8901234" }) {
nodes {
... on Conversation {
id
number
}
}
pageInfo {
hasNextPage
}
}
}

By default, conversations are returned with the newest conversations first. To sort showing oldest first:

query Conversations {
conversations( orderBy: { field: UPDATED_AT, direction: ASC } ) {
nodes {
... on Conversation {
id
number
}
}
pageInfo {
hasNextPage
}
}
}
type EmailConversation implements Node, Conversation {
assigned: Assignment
channel: Channel!
contact: Contact
counts: ConversationCounts!
createdAt: DateTime!
customFieldValues(
after: String
before: String
first: Int
last: Int
filter: CustomFieldValuesFilter
): CustomFieldValueConnection
deletedAt: DateTime
drafts(
after: String
before: String
first: Int
last: Int
): DraftConnection
followers(
after: String
before: String
first: Int
last: Int
filter: AgentFilter
orderBy: AgentOrder
): AgentConnection
id: ID!
lastUnansweredUserMessageAt: DateTime!
mentions: [Mention!]!
number: Int!
searchSummary: SearchSummary
snoozed: Snooze
starred: Boolean!
state: ConversationState!
stateUpdatedAt: DateTime
subject: String
summaryMessage: SummaryMessage
systemUpdatedAt: DateTime!
tags(
after: String
before: String
first: Int
last: Int
filter: TagFilter
orderBy: TagOrder
): TagConnection
updatedAt: DateTime!
}

A Groove conversation is a thread of messages (for example emails, chats, or notes) and associated actions or events (for example 'opened', 'snoozed', and 'assigned').

To fetch Messages/Ratings/StateChanges/etc. on a conversation, query the Events connection (on the QueryRoot) with the conversation ID.

To fetch all possible fields:

query Conversation {
node(id: "cnv_12345678") {

__typename
... on Conversation {
assigned {
at
agent {
id
name
}
team {
id
name
}
}
counts {
attachments
interactions
messages
notes
stateChanges
}
createdAt
contact {
id
email
}
deletedAt
drafts {
nodes {
id
}
}
followers {
nodes {
id
email
}
}
id
number
snoozed {
by { id }
until
}
starred
state
stateUpdatedAt
summaryMessage {
id
bodyPlainText
}
subject
systemUpdatedAt
tags {
nodes {
id
name
}
}
updatedAt

... on FacebookConversation {
facebookId
}


... on TwitterConversation {
twitterId
}


... on WidgetConversation {
browser
referrer
pageTitle
pageUrl
platform
referrer
}

}

}
}

To search conversations matching a specific keyword:

query Conversations {
conversations(filter: { keywords: "rad" }) {
edges {
node {
... on Conversation {
id
number
searchSummary {
author {
__typename
... on Agent {
email
role
}
... on Contact {
email
}
}
body
forwarded
note
}
}
}
}
}
}

EmailEngineError

Email engine error that occurred when interacting with the underlying mailbox.

type EmailEngineError implements ErrorType {
createdAt: DateTime!
message: String!
type: String!
updatedAt: DateTime!
}

EmailMarketingIntegration

No description

type EmailMarketingIntegration {
id: ID!
lists(
contactId: ID
): [EmailMarketingList!]!
type: EmailMarketingIntegrationType!
}

EmailMarketingIntegrationConnection

The connection type for EmailMarketingIntegration.

type EmailMarketingIntegrationConnection {
edges: [EmailMarketingIntegrationEdge]
nodes: [EmailMarketingIntegration]
pageInfo: PageInfo!
}

EmailMarketingIntegrationEdge

An edge in a connection.

type EmailMarketingIntegrationEdge {
cursor: String!
node: EmailMarketingIntegration
}

EmailMarketingList

No description

type EmailMarketingList {
id: String!
name: String!
}

EmailMarketingSubscription

No description

type EmailMarketingSubscription {
externalUrl: String
id: String!
listId: String!
listName: String!
subscribedAt: DateTime
}

EmailMarketingSubscriptionConnection

The connection type for EmailMarketingSubscription.

type EmailMarketingSubscriptionConnection {
edges: [EmailMarketingSubscriptionEdge]
nodes: [EmailMarketingSubscription]
pageInfo: PageInfo!
}

EmailMarketingSubscriptionCreatePayload

Autogenerated return type of EmailMarketingSubscriptionCreate

type EmailMarketingSubscriptionCreatePayload {
clientMutationId: String
errors: [UserError!]!
}

EmailMarketingSubscriptionDeletePayload

Autogenerated return type of EmailMarketingSubscriptionDelete

type EmailMarketingSubscriptionDeletePayload {
clientMutationId: String
errors: [UserError!]!
}

EmailMarketingSubscriptionEdge

An edge in a connection.

type EmailMarketingSubscriptionEdge {
cursor: String!
node: EmailMarketingSubscription
}

EmailMessage

A message created in Groove as a result of an incoming email.

Both contacts and agents can author these type of messages. For example, if an agent replies directly to a contact (possibly using a Groove notification email), then Groove will register the agent's email response as a MessageFromEmailChange.

type EmailMessage implements Node, Message, Emailable {
attachments(
after: String
before: String
first: Int
last: Int
): AttachmentConnection
author: Author
bcc(
after: String
before: String
first: Int
last: Int
): RecipientConnection
body: String
bodyPlainText: String
cannedReply: CannedReply
cc(
after: String
before: String
first: Int
last: Int
): RecipientConnection
channel: Channel!
createdAt: DateTime!
editedAt: DateTime
fromMerge: Boolean
fromMove: Boolean
id: ID!
isNote: Boolean!
parts(
after: String
before: String
first: Int
last: Int
): EmailPartConnection!
rule: Rule
sourceConversation: Conversation
summary: SummaryMessage!
to(
after: String
before: String
first: Int
last: Int
): RecipientConnection!
updatedAt: DateTime!
}

EmailPart

No description

type EmailPart {
content: String!
type: BodyPartTypeEnum!
}

EmailPartConnection

The connection type for EmailPart.

type EmailPartConnection {
edges: [EmailPartEdge]
nodes: [EmailPart]
pageInfo: PageInfo!
}

EmailPartEdge

An edge in a connection.

type EmailPartEdge {
cursor: String!
node: EmailPart
}

EmailTemplate

Represents an email template used for automated or manual email communication.

type EmailTemplate implements Timestamped {
body: String!
createdAt: DateTime!
state: EmailTemplateState!
subject: String!
trigger: EmailTemplateTrigger
updatedAt: DateTime!
}

EphemeralJobResult

No description

type EphemeralJobResult implements BaseInterface {
state: EphemeralJobResultState
value: JSON
}

Event

No description

type Event implements Previewable {
actor: Actor
change: ChangeTypeUnion
createdAt: DateTime!
id: ID!
preview: [Int!]
}

EventConnection

The connection type for Event.

type EventConnection {
edges: [EventEdge]
nodes: [Event]
pageInfo: PageInfo!
}

EventEdge

An edge in a connection.

type EventEdge {
cursor: String!
node: Event
}

EventGroupType

A group of events associated with a conversation.

query EventGroups {
eventGroups(filter: "cnv_12345678") {
edges {
node {
id
collapsed
fromMerge
isNote
isForward
isCollaborator
hasAttachments
conversationId
actor {
__typename
... on Contact {
name
}
... on Agent {
name
email
}
}
summary {
body
}
events {
nodes {
id
change {
__typename
... on Message {
body
}

}
}
}
}
}
}
}
type EventGroupType {
actor: Actor
changesetId: String!
collapsed: Boolean!
conversationId: String!
events(
after: String
before: String
first: Int
last: Int
): EventConnection!
fromMerge: Boolean!
hasAttachments: Boolean!
hasRawEmail: Boolean!
id: ID!
isCollaborator: Boolean!
isForward: Boolean!
isNote: Boolean!
lastEventId: String
parsingCompleted: Boolean!
rawEmailId: String
summary: SummaryMessage
}

EventGroupTypeConnection

The connection type for EventGroupType.

type EventGroupTypeConnection {
edges: [EventGroupTypeEdge]
nodes: [EventGroupType]
pageInfo: PageInfo!
}

EventGroupTypeEdge

An edge in a connection.

type EventGroupTypeEdge {
cursor: String!
node: EventGroupType
}

EventsShopifyCreatePayload

Autogenerated return type of EventsShopifyCreate

type EventsShopifyCreatePayload {
clientMutationId: String
errors: [UserError!]!
event: Event
}

ExcludedDomain

A domain that is excluded from being automatically created as a company.

To fetch all excluded domains:

query ExcludedDomains {
excludedDomains {
nodes {
id
domain
}
}
}
type ExcludedDomain {
domain: String!
id: ID!
}

ExcludedDomainConnection

The connection type for ExcludedDomain.

type ExcludedDomainConnection {
edges: [ExcludedDomainEdge]
nodes: [ExcludedDomain]
pageInfo: PageInfo!
}

ExcludedDomainCreatePayload

Autogenerated return type of ExcludedDomainCreate

type ExcludedDomainCreatePayload {
clientMutationId: String
errors: [UserError!]!
excludedDomain: ExcludedDomain
}

ExcludedDomainDeletePayload

Autogenerated return type of ExcludedDomainDelete

type ExcludedDomainDeletePayload {
clientMutationId: String
deletedExcludedDomainId: ID
errors: [UserError!]!
}

ExcludedDomainEdge

An edge in a connection.

type ExcludedDomainEdge {
cursor: String!
node: ExcludedDomain
}

ExcludedDomainUpdatePayload

Autogenerated return type of ExcludedDomainUpdate

type ExcludedDomainUpdatePayload {
clientMutationId: String
errors: [UserError!]!
excludedDomain: ExcludedDomain
}

Export

query Exports($filter: ExportFilter, $orderBy: ExportOrder) {
exports(filter: $filter, orderBy: $orderBy) {
nodes {
id
name
state
createdAt
updatedAt
queuedAt
startedAt
exportedAt
completedAt
failedAt
cancelledAt
dateRangeStart
dateRangeEnd
requestedBy {
id
}
}
}
}
type Export {
cancelledAt: DateTime
completedAt: DateTime
createdAt: DateTime!
dateRangeEnd: DateTime
dateRangeStart: DateTime
exportedAt: DateTime
failedAt: DateTime
id: ID!
name: String
queuedAt: DateTime
requestedBy: Agent!
startedAt: DateTime
state: ExportState!
updatedAt: DateTime!
}

ExportConnection

The connection type for Export.

type ExportConnection {
edges: [ExportEdge]
nodes: [Export]
pageInfo: PageInfo!
}

ExportEdge

An edge in a connection.

type ExportEdge {
cursor: String!
node: Export
}

FacebookConversation

A Groove conversation initiated from Facebook.

To fetch a specific Facebook conversation by ID:

query Conversation {
node(id: "cnv_12345678") {

... on FacebookConversation {
facebookId
}

}
})

To fetch all possible fields:

query Conversation {
node(id: "cnv_12345678") {

__typename
... on Conversation {
assigned {
at
agent {
id
name
}
team {
id
name
}
}
counts {
attachments
interactions
messages
notes
stateChanges
}
createdAt
contact {
id
email
}
deletedAt
drafts {
nodes {
id
}
}
followers {
nodes {
id
email
}
}
id
number
snoozed {
by { id }
until
}
starred
state
stateUpdatedAt
summaryMessage {
id
bodyPlainText
}
subject
systemUpdatedAt
tags {
nodes {
id
name
}
}
updatedAt

... on FacebookConversation {
facebookId
}


... on TwitterConversation {
twitterId
}


... on WidgetConversation {
browser
referrer
pageTitle
pageUrl
platform
referrer
}

}

}
})
type FacebookConversation implements Node, Conversation {
assigned: Assignment
channel: Channel!
contact: Contact
counts: ConversationCounts!
createdAt: DateTime!
customFieldValues(
after: String
before: String
first: Int
last: Int
filter: CustomFieldValuesFilter
): CustomFieldValueConnection
deletedAt: DateTime
drafts(
after: String
before: String
first: Int
last: Int
): DraftConnection
facebookId: String
followers(
after: String
before: String
first: Int
last: Int
filter: AgentFilter
orderBy: AgentOrder
): AgentConnection
id: ID!
lastUnansweredUserMessageAt: DateTime!
mentions: [Mention!]!
number: Int!
searchSummary: SearchSummary
snoozed: Snooze
starred: Boolean!
state: ConversationState!
stateUpdatedAt: DateTime
subject: String
summaryMessage: SummaryMessage
systemUpdatedAt: DateTime!
tags(
after: String
before: String
first: Int
last: Int
filter: TagFilter
orderBy: TagOrder
): TagConnection
updatedAt: DateTime!
}

A Groove conversation is a thread of messages (for example emails, chats, or notes) and associated actions or events (for example 'opened', 'snoozed', and 'assigned').

To fetch Messages/Ratings/StateChanges/etc. on a conversation, query the Events connection (on the QueryRoot) with the conversation ID.

To fetch all possible fields:

query Conversation {
node(id: "cnv_12345678") {

__typename
... on Conversation {
assigned {
at
agent {
id
name
}
team {
id
name
}
}
counts {
attachments
interactions
messages
notes
stateChanges
}
createdAt
contact {
id
email
}
deletedAt
drafts {
nodes {
id
}
}
followers {
nodes {
id
email
}
}
id
number
snoozed {
by { id }
until
}
starred
state
stateUpdatedAt
summaryMessage {
id
bodyPlainText
}
subject
systemUpdatedAt
tags {
nodes {
id
name
}
}
updatedAt

... on FacebookConversation {
facebookId
}


... on TwitterConversation {
twitterId
}


... on WidgetConversation {
browser
referrer
pageTitle
pageUrl
platform
referrer
}

}

}
}

To search conversations matching a specific keyword:

query Conversations {
conversations(filter: { keywords: "rad" }) {
edges {
node {
... on Conversation {
id
number
searchSummary {
author {
__typename
... on Agent {
email
role
}
... on Contact {
email
}
}
body
forwarded
note
}
}
}
}
}
}

FacebookDraft

No description

type FacebookDraft implements Draft {
agent: Agent!
assignment: Assignment
body: String!
contextId: ID
conversation: Conversation!
conversationId: ID!
createdAt: DateTime!
draftId: String
draftType: DraftType
id: ID!
lastSyncedAt: DateTime!
metadata: JSON!
payload: JSON
updatedAt: DateTime!
version: Int!
}

FacebookMessage

A message sent to or received from Facebook.

type FacebookMessage implements Node, Message {
attachments(
after: String
before: String
first: Int
last: Int
): AttachmentConnection
author: Author
body: String
bodyPlainText: String
cannedReply: CannedReply
channel: Channel!
createdAt: DateTime!
editedAt: DateTime
facebookId: String
fromMerge: Boolean
fromMove: Boolean
id: ID!
isNote: Boolean!
rule: Rule
sourceConversation: Conversation
summary: SummaryMessage!
updatedAt: DateTime!
}

FeatureTemplateRule

An automation rule feature template

type FeatureTemplateRule {
categories: [String!]!
description: String!
id: ID!
name: String!
personas: [String!]
planFeatures: [String!]!
popular: Boolean!
template: FeatureTemplateRuleData!
type: String!
}

FeatureTemplateRuleData

The configuration for a rule template

type FeatureTemplateRuleData {
actions: [FeatureTemplateRuleDataAction!]!
conditions: [FeatureTemplateRuleDataCondition!]!
matchType: RuleMatchTypes!
name: String!
scheduleSettings: FeatureTemplateRuleScheduleSettings
scheduleType: ScheduleType
state: RuleState!
stopUpcoming: Boolean!
triggers: [FeatureTemplateRuleDataTrigger!]!
}

FeatureTemplateRuleDataAction

Rule template action

type FeatureTemplateRuleDataAction {
toAgent: String
type: RuleActionType!
value: String
}

FeatureTemplateRuleDataCondition

A rule template condition

type FeatureTemplateRuleDataCondition {
operator: RuleConditionOperator!
param: RuleConditionParam!
value: String
}

FeatureTemplateRuleDataTrigger

A rule template configuration trigger

type FeatureTemplateRuleDataTrigger {
type: RuleTriggerType!
}

FeatureTemplateRuleScheduleSettings

The schedule settings configuration for a rule.

type FeatureTemplateRuleScheduleSettings {
day: Int
dayOfWeek: String
days: Int
seconds: Int
time: String
}

FeatureTemplates

Features Templates

type FeatureTemplates {
rules: [FeatureTemplateRule!]
}

File

A file attached to a contact or company.

type File {
contentDisposition: CustomFieldFileContentDisposition!
contentType: String!
fileName: String!
fileSize: Int!
url: String!
}

Folder

A folder contains a set of conditions that allow for smart filtering of conversations.

For example, to show only your active conversations, you can create a folder called "Mine" which contains these two conditions:

  1. "Assigned agent" is "Current User".
  2. "Status" is "Opened".

By default, folders apply to, and are visible across, all of your channels. However, you can configure them to be only visible to selected channels, agents, or teams.

To fetch all folders and their conditions:

query Folders {
folders {
nodes {
agents {
nodes {
id
email
}
pageInfo {
hasNextPage
}
}
conditions(
orderBy: { field: CREATED_AT, direction: DESC }
) {
nodes {
id
param
operator
value
}
pageInfo {
hasNextPage
}
}
conversationCount
createdAt
default
description
displayCountWhenInactive
hideIfZeroConversations
id
locked
matchType
name
position
state
teams {
nodes {
id
name
}
pageInfo {
hasNextPage
}
}
updatedAt
}
}
}

To find associated conversations in a folder, use the QueryRoot conversations with a filter argument:

conversations(filter: { folderId: "fol_1234567" }) { ...

By default folders are sorted by their user-defined row order. To sort by name instead:

query Folders {
folders( orderBy: { field: NAME, direction: ASC } ) {
nodes {
id
}
}
}

To find conversations in a folder for a specific channel:

query Folders {
folders {
nodes {
id
conversations ( channel: "ch_12345678" ) {
nodes {
... on Conversation {
id
number
}
}
pageInfo {
hasNextPage
}
}
}
}
}
type Folder implements Node, Timestamped {
agents(
after: String
before: String
first: Int
last: Int
filter: AgentFilter
orderBy: AgentOrder
): AgentConnection
channel: Channel!
channelRestriction: ChannelRestrictionType!
channels(
after: String
before: String
first: Int
last: Int
filter: ChannelFilter
orderBy: ChannelOrder
): ChannelConnection!
conditions(
after: String
before: String
first: Int
last: Int
id: ID
orderBy: ConditionOrder
): ConditionConnection
conversationCount: Int!
createdAt: DateTime!
default: Boolean!
description: String
displayCountWhenInactive: Boolean!
hideIfZeroConversations: Boolean!
id: ID!
locked: Boolean!
matchType: FolderMatchTypes!
name: String!
position: Int!
restriction: Restriction!
state: FolderState!
teams(
after: String
before: String
first: Int
last: Int
orderBy: TeamOrder
): TeamConnection
type: FolderType!
updatedAt: DateTime!
}

FolderConnection

The connection type for Folder.

type FolderConnection {
edges: [FolderEdge]
nodes: [Folder]
pageInfo: PageInfo!
totalCount: Int!
totalPageCount: Int!
}

FolderCreatePayload

Autogenerated return type of FolderCreate

type FolderCreatePayload {
clientMutationId: String
errors: [UserError!]!
folder: Folder
}

FolderDeletePayload

Autogenerated return type of FolderDelete

type FolderDeletePayload {
clientMutationId: String
deletedFolderId: ID
errors: [UserError!]!
}

FolderEdge

An edge in a connection.

type FolderEdge {
cursor: String!
node: Folder
}

FolderUpdatePayload

Autogenerated return type of FolderUpdate

type FolderUpdatePayload {
clientMutationId: String
errors: [UserError!]!
folder: Folder
}

FollowerAdded

A conversation is followed by an agent.

type FollowerAdded implements Timestamped {
createdAt: DateTime!
follower: Agent!
id: ID!
updatedAt: DateTime!
}

FollowerRemoved

A conversation is unfollowed by an agent.

type FollowerRemoved implements Timestamped {
createdAt: DateTime!
follower: Agent!
id: ID!
updatedAt: DateTime!
}

ForwardedMessage

A message forwarded by an agent from Groove to a third party.

type ForwardedMessage implements Node, Message, Delayable, Emailable {
attachments(
after: String
before: String
first: Int
last: Int
): AttachmentConnection
author: Author
bcc(
after: String
before: String
first: Int
last: Int
): RecipientConnection
body: String
bodyPlainText: String
cannedReply: CannedReply
cc(
after: String
before: String
first: Int
last: Int
): RecipientConnection
channel: Channel!
createdAt: DateTime!
deliverBy: DateTime
editedAt: DateTime
fromMerge: Boolean
fromMove: Boolean
id: ID!
isNote: Boolean!
rule: Rule
sourceConversation: Conversation
summary: SummaryMessage!
to(
after: String
before: String
first: Int
last: Int
): RecipientConnection!
updatedAt: DateTime!
}

No description

type Header {
name: String!
value: String
}

ImapServer

A server for retrieving emails using the IMAP protocol.

type ImapServer implements Server {
createdAt: DateTime!
encryption: EncryptionType
host: String!
id: ID!
port: Int!
protocol: ProtocolType!
updatedAt: DateTime!
username: String!
verified: Boolean!
}

Import

No description

type Import {
id: ID!
payed: Boolean!
redirectUrl: String!
status: String
token: String!
}

Import2CreatePayload

Autogenerated return type of Import2Create

type Import2CreatePayload {
clientMutationId: String
errors: [UserError!]!
redirectUrl: String!
}

ImportConnection

The connection type for Import.

type ImportConnection {
edges: [ImportEdge]
nodes: [Import]
pageInfo: PageInfo!
}

ImportEdge

An edge in a connection.

type ImportEdge {
cursor: String!
node: Import
}

ImportMutationPayload

Autogenerated return type of ImportMutation

type ImportMutationPayload {
clientMutationId: String
errors: [UserError!]!
jid: String
}

IntegrationAdded

An integration was added to a conversation.

type IntegrationAdded implements Timestamped {
conversationId: String!
createdAt: DateTime!
externalId: ID!
id: ID!
provider: IntegrationProvider!
title: String!
updatedAt: DateTime!
url: Url!
}

IntegrationAddedConnection

The connection type for IntegrationAdded.

type IntegrationAddedConnection {
edges: [IntegrationAddedEdge]
nodes: [IntegrationAdded]
pageInfo: PageInfo!
}

IntegrationAddedEdge

An edge in a connection.

type IntegrationAddedEdge {
cursor: String!
node: IntegrationAdded
}

IntegrationConnection

The connection type for Integration.

type IntegrationConnection {
edges: [IntegrationEdge]
nodes: [Integration]
pageInfo: PageInfo!
}

IntegrationDeleteByProviderPayload

Autogenerated return type of IntegrationDeleteByProvider

type IntegrationDeleteByProviderPayload {
clientMutationId: String
deletedIntegrationIds: [ID!]
errors: [UserError!]!
}

IntegrationDeletePayload

Autogenerated return type of IntegrationDelete

type IntegrationDeletePayload {
clientMutationId: String
deletedIntegrationId: ID
errors: [UserError!]!
}

IntegrationEdge

An edge in a connection.

type IntegrationEdge {
cursor: String!
node: Integration
}

IntegrationExternalChange

A change to a conversation was triggered by a linked integration.

type IntegrationExternalChange implements Timestamped {
action: JSON!
createdAt: DateTime!
externalId: ID!
id: ID!
provider: IntegrationProvider!
updatedAt: DateTime!
}

IntegrationJiraServerCreatePayload

Autogenerated return type of IntegrationJiraServerCreate

type IntegrationJiraServerCreatePayload {
clientMutationId: String
errors: [UserError!]!
integration: JiraServerIntegration
}

IntegrationProviderSettingsUpdatePayload

Autogenerated return type of IntegrationProviderSettingsUpdate

type IntegrationProviderSettingsUpdatePayload {
clientMutationId: String
errors: [UserError!]!
integrations(
after: String
before: String
first: Int
last: Int
): IntegrationConnection!
settings: IntegrationSettings
}

IntegrationRemoved

An integration was removed from a conversation.

type IntegrationRemoved implements Timestamped {
conversation: Conversation!
createdAt: DateTime!
externalId: ID!
id: ID!
provider: IntegrationProvider!
title: String!
updatedAt: DateTime!
url: Url!
}

IntegrationSettings

No description

type IntegrationSettings {
provider: IntegrationProvider!
settings: JSON!
}

IntegrationSettingsUpdatePayload

Autogenerated return type of IntegrationSettingsUpdate

type IntegrationSettingsUpdatePayload {
clientMutationId: String
errors: [UserError!]!
integration: IntegrationUnion!
}

IntegrationUnionConnection

The connection type for IntegrationUnion.

type IntegrationUnionConnection {
edges: [IntegrationUnionEdge]
nodes: [IntegrationUnion]
pageInfo: PageInfo!
}

IntegrationUnionEdge

An edge in a connection.

type IntegrationUnionEdge {
cursor: String!
node: IntegrationUnion
}

IpAddress

An IP address.

type IpAddress {
accuracy: Float
address: String!
city: String
country: String
domain: String
isp: String
latitude: Float
longitude: Float
organization: String
postalCode: String
subdivisions: String
timeZone: String
}

JiraServerIntegration

No description

type JiraServerIntegration implements Integration {
agent: Agent!
createdAt: DateTime!
id: ID!
legacyId: String!
provider: IntegrationProvider!
settings: IntegrationSettings!
uid: String
updatedAt: DateTime!
url: String!
username: String!
}

KbArticleDeletePayload

Autogenerated return type of KbArticleDelete

type KbArticleDeletePayload {
clientMutationId: String
deletedArticleId: ID
errors: [UserError!]!
}

KbCategory

A category from a Knowledge Base. Each category can contain multiple articles.

To fetch multiple Knowledge Bases with related categories:

query KbsWithCategories {
knowledgeBases {
nodes {
id
categories {
nodes {
articles {
nodes {
id
}
}
createdAt
coverImageUrl
id
updatedAt

... on Publishable {
author {
id
email
}
description
featured
meta {
description
robots
}
openGraph {
description
imageUrl
title
}
pageTitle
position
publishedAt
slug
state
title
updater {
id
email
}
}

}
}
}
}
}
type KbCategory implements Node, Publishable, Timestamped {
articles(
after: String
before: String
first: Int
last: Int
): ArticleConnection!
author: Agent
coverImageUrl: Url
createdAt: DateTime!
currentSlug: String
description: String
featured: Boolean!
id: ID!
knowledgeBase: KnowledgeBase!
meta: Meta
openGraph: OpenGraph
pageTitle: String
position: Int!
previousSlugs: [String!]!
publishedAt: DateTime
slug: String
state: PublishState!
title: String
updatedAt: DateTime!
updater: Agent
}

An object that can be published, for example Knowledge Base categories or articles.

For example:


... on Publishable {
author {
id
email
}
description
featured
meta {
description
robots
}
openGraph {
description
imageUrl
title
}
pageTitle
position
publishedAt
slug
state
title
updater {
id
email
}
}

KbCategoryConnection

The connection type for KbCategory.

type KbCategoryConnection {
edges: [KbCategoryEdge]
nodes: [KbCategory]
pageInfo: PageInfo!
}

KbCategoryEdge

An edge in a connection.

type KbCategoryEdge {
cursor: String!
node: KbCategory
}

KbSlugAvailabilityPayload

Autogenerated return type of KbSlugAvailability

type KbSlugAvailabilityPayload {
available: Boolean!
clientMutationId: String
errors: [UserError!]!
}

KbSubdomainAvailabilityPayload

Autogenerated return type of KbSubdomainAvailability

type KbSubdomainAvailabilityPayload {
available: Boolean!
clientMutationId: String
errors: [UserError!]!
suggestion: String
}

KnowledgeBase

A Groove Knowledge Base, containing categories and articles.

To fetch all Knowledge Bases on the account:

query Kbs {
knowledgeBases {
nodes {
createdAt
customDomain {
domain
expiresAt
letsencrypt
status
valid
}
customScriptsEnabled
enabled
gaAnonymized
gaCode
id
ipAddresses
ipAddressesEnabled
language
meta {
description
robots
}
openGraph {
description
imageUrl
title
}
pageTitle
password
passwordEnabled
primary
ratingsType
redirectLegacy
siteUrl
subdomain
subdomainUrl
title
updatedAt
newWidgetId
}
}

To fetch related articles:

query KbsWithArticles {
knowledgeBases {
nodes {
id
articles {
totalCount
totalPageCount
edges {
node {
attachments {
nodes {
id
}
}
body
category {
id
}
createdAt
deletedAt
id
ratings {
nodes {
id
}
}
ratingsType
relatedArticles{
nodes {
id
}
}
tags
updatedAt

... on Publishable {
author {
id
email
}
description
featured
meta {
description
robots
}
openGraph {
description
imageUrl
title
}
pageTitle
position
publishedAt
slug
state
title
updater {
id
email
}
}

}
}
}
}
}
}

To fetch related Knowledge Base categories:

query KbsWithCategories {
knowledgeBases {
nodes {
id
categories {
nodes {
articles {
nodes {
id
}
}
createdAt
coverImageUrl
id
updatedAt

... on Publishable {
author {
id
email
}
description
featured
meta {
description
robots
}
openGraph {
description
imageUrl
title
}
pageTitle
position
publishedAt
slug
state
title
updater {
id
email
}
}

}
}
}
}
}
type KnowledgeBase implements Node, Timestamped {
articles(
after: String
before: String
first: Int
last: Int
): ArticleConnection!
canMigrate: Boolean!
categories(
after: String
before: String
first: Int
last: Int
): KbCategoryConnection!
createdAt: DateTime!
customDomain: CustomDomain!
customScriptsEnabled: Boolean
enabled: Boolean!
gaAnonymized: Boolean
gaCode: String
gaVersion: Int
id: ID!
instantDocsKbId: String
instantDocsMigrationToken: String
instantDocsUrl: String
ipAddresses: [String!]
ipAddressesEnabled: Boolean!
isReadOnly: Boolean!
language: String
meta: Meta
migrationCutoffEnforced: Boolean!
migrationInitiatedAt: ISO8601DateTime
migrationStatus: String!
newWidgetId: ID
openGraph: OpenGraph
pageTitle: String
password: String
passwordEnabled: Boolean!
primary: Boolean!
publishedTheme: Theme!
ratingsType: KbRating!
redirectLegacy: Boolean!
siteUrl: Url!
subdomain: String!
subdomainUrl: Url!
theme: Theme!
title: String
updatedAt: DateTime!
}

KnowledgeBaseConnection

The connection type for KnowledgeBase.

type KnowledgeBaseConnection {
edges: [KnowledgeBaseEdge]
nodes: [KnowledgeBase]
pageInfo: PageInfo!
}

KnowledgeBaseEdge

An edge in a connection.

type KnowledgeBaseEdge {
cursor: String!
node: KnowledgeBase
}

A text link.

type Link {
link: String!
text: String
}

LoginPayload

Autogenerated return type of Login

type LoginPayload {
authState: AuthState!
clientMutationId: String
credentials: Credentials
errors: [UserError!]!
otpChallenge: Boolean
otpIdentifier: String
user: Agent
}

Mention

A Groove conversation initiated from a Groove Widget.

To fetch mentions for conversation by ID:

query Conversation {
node(id: "cnv_12345678") {
mentions {
id
agent {
id
}
}
}
})
type Mention {
agent: Agent
id: ID!
}

MessageMoved

A message was moved from one conversation to start another.

type MessageMoved {
destination: Conversation
id: ID!
message: Message!
}

Meta

The metadata fields for a Knowledge Base.

type Meta {
description: String
robots: String!
}

MobileNotificationPreferencesUpsertPayload

Autogenerated return type of MobileNotificationPreferencesUpsert

type MobileNotificationPreferencesUpsertPayload {
agentPreferences(
after: String
before: String
first: Int
last: Int
): AgentPreferenceConnection!
clientMutationId: String
errors: [UserError!]!
}

Money

A amount with the linked defined currency.

type Money {
amount: Float!
currencyCode: String
}

NewWidget

No description

type NewWidget {
channelColor: String!
channelType: WidgetChannelType!
createdAt: DateTime!
hasAccess: Boolean
id: ID!
kind: WidgetKind
name: String!
status: WidgetStatus
updatedAt: DateTime!
}

NewWidgetConnection

The connection type for NewWidget.

type NewWidgetConnection {
edges: [NewWidgetEdge]
nodes: [NewWidget]
pageInfo: PageInfo!
}

NewWidgetEdge

An edge in a connection.

type NewWidgetEdge {
cursor: String!
node: NewWidget
}

Note

A message created by an agent in Groove, visible only to other agents.

type Note implements Node, Message {
attachments(
after: String
before: String
first: Int
last: Int
): AttachmentConnection
author: Author
body: String
bodyPlainText: String
cannedReply: CannedReply
channel: Channel!
createdAt: DateTime!
editedAt: DateTime
fromMerge: Boolean
fromMove: Boolean
id: ID!
isNote: Boolean!
rule: Rule
sourceConversation: Conversation
summary: SummaryMessage!
updatedAt: DateTime!
}

NoteDraft

No description

type NoteDraft implements Draft {
agent: Agent!
assignment: Assignment
attachments(
after: String
before: String
first: Int
last: Int
): AttachmentConnection!
body: String!
contextId: ID
conversation: Conversation!
conversationId: ID!
createdAt: DateTime!
draftId: String
draftType: DraftType
id: ID!
lastSyncedAt: DateTime!
metadata: JSON!
payload: JSON
updatedAt: DateTime!
version: Int!
}

OauthCredentials

No description

type OauthCredentials implements Node, Timestamped {
accessToken: String!
createdAt: DateTime!
expiresAt: DateTime
id: ID!
provider: String!
refreshToken: String
uid: String!
updatedAt: DateTime!
}

OauthCredentialsConnection

The connection type for OauthCredentials.

type OauthCredentialsConnection {
edges: [OauthCredentialsEdge]
nodes: [OauthCredentials]
pageInfo: PageInfo!
}

OauthCredentialsEdge

An edge in a connection.

type OauthCredentialsEdge {
cursor: String!
node: OauthCredentials
}

OpenGraph

The Open Graph fields for a Knowledge Base.

type OpenGraph {
description: String
imageUrl: Url
title: String
}

PageInfo

Information about pagination in a connection.

type PageInfo {
endCursor: String
hasNextPage: Boolean!
hasPreviousPage: Boolean!
startCursor: String
}

PageView

An instance of a page being loaded in browser by a visitor.

type PageView {
id: String
ipAddress: IpAddress
language: String
occurredAt: String
referrer: ReferrerUrl
timeOnPage: Float
title: String
url: UrlStruct!
userAgent: UserAgent
}

PinnedSearch

A pinned search is a search query that has been stored by the user for easy reuse.

To fetch all pinned searches:

query PinnedSearches {
pinnedSearches {
nodes {
id
position
createdAt
queryId
conversationCount
}
}
}
type PinnedSearch implements Node, Timestamped {
agent: Agent!
conversationCount: Int!
createdAt: DateTime!
id: ID!
position: Int!
queryId: String
title: String!
updatedAt: DateTime!
}

PinnedSearchConnection

The connection type for PinnedSearch.

type PinnedSearchConnection {
edges: [PinnedSearchEdge]
nodes: [PinnedSearch]
pageInfo: PageInfo!
totalCount: Int!
totalPageCount: Int!
}

PinnedSearchEdge

An edge in a connection.

type PinnedSearchEdge {
cursor: String!
node: PinnedSearch
}

Plan

Represents all the plans currently added to the groove account

Fetch all plans for the current account:

query PlansQuery {
billing {
plans {
id
createdAt
expiresAt
externalId
quantity
state
updatedAt
pricing {
id
annual
externalAnnualPriceId
externalMonthlyPriceId
minimumQuantity
monthly
name
pricingModel
trialAvailable
type
usageFrom
version
addonPricingIds
features {
name
value
}
}
}
}
}
type Plan {
createdAt: DateTime!
expiresAt: DateTime
externalId: String!
id: ID!
pricing: Pricing!
quantity: Int
state: PlanState!
updatedAt: DateTime
}

Platform

No description

type Platform {
family: String
version: String
}

Pricing

Represents pricing that can be added to a groove subscription to enable features or usage on the account

Fetch all possible fields for the current account:

query PricingQuery {
billing {
pricings {
id
annual
externalAnnualPriceId
externalMonthlyPriceId
minimumQuantity
monthly
name
pricingModel
trialAvailable
type
usageFrom
version
addonPricingIds
features {
name
value
}
}
}
}

Fetch all possible fields for and all plans:

query PricingQuery {
billing {
pricings(showAll: true) {
id
annual
externalAnnualPriceId
externalMonthlyPriceId
minimumQuantity
monthly
name
pricingModel
trialAvailable
type
usageFrom
version
addonPricingIds
features {
name
value
}
}
}
}
type Pricing {
active: Boolean!
addonPricingIds: [String!]!
annual: Int!
externalAnnualPriceId: String!
externalMonthlyPriceId: String!
features: [BillingFeatureType!]!
id: String!
minimumQuantity: Int!
monthly: Int!
name: String!
pricingModel: PricingModel!
trialAvailable: Boolean!
type: PricingType!
usageFrom: PricingUsageFrom!
version: String!
}

PushToken

No description

type PushToken implements Timestamped {
createdAt: DateTime!
id: ID!
notificationCount: Int!
token: String!
updatedAt: DateTime!
}

PushTokenClearNotificationCountPayload

Autogenerated return type of PushTokenClearNotificationCount

type PushTokenClearNotificationCountPayload {
clientMutationId: String
errors: [UserError!]!
pushToken: PushToken!
}

PushTokenConnection

The connection type for PushToken.

type PushTokenConnection {
edges: [PushTokenEdge]
nodes: [PushToken]
pageInfo: PageInfo!
}

PushTokenCreatePayload

Autogenerated return type of PushTokenCreate

type PushTokenCreatePayload {
clientMutationId: String
errors: [UserError!]!
pushToken: PushToken
}

PushTokenDeletePayload

Autogenerated return type of PushTokenDelete

type PushTokenDeletePayload {
clientMutationId: String
deletedPushTokenId: ID
errors: [UserError!]!
}

PushTokenEdge

An edge in a connection.

type PushTokenEdge {
cursor: String!
node: PushToken
}

Rating

A rating is feedback on a conversation message from a contact for an agent.

type Rating implements Node, Timestamped {
agent: Agent
createdAt: DateTime!
feedback: String
grade: RatingEnum
id: ID!
message: Message!
updatedAt: DateTime!
}

RawEmail

No description

type RawEmail implements Node, Timestamped {
body: String
bodyPlainText: String
createdAt: DateTime!
headers: [Header!]
id: ID!
updatedAt: DateTime!
}

RechargeIntegration

No description

type RechargeIntegration implements Integration {
createdAt: DateTime!
fullStoreDomain: String!
id: ID!
legacyId: String!
provider: IntegrationProvider!
settings: IntegrationSettings!
storeDomain: String!
storeName: String!
uid: String
updatedAt: DateTime!
}

RecipientConnection

The connection type for Recipient.

type RecipientConnection {
edges: [RecipientEdge]
nodes: [Recipient]
pageInfo: PageInfo!
}

RecipientEdge

An edge in a connection.

type RecipientEdge {
cursor: String!
node: Recipient
}

ReferrerUrl

The address of the webpage from which the visitor came to your page.

type ReferrerUrl {
domain: String
hash: String
medium: String
path: String
protocol: String
query: String
raw: String!
searchTerm: String
source: String
}

Reply

An email message from an agent to a contact.

type Reply implements Node, Message, Delayable, Emailable {
attachments(
after: String
before: String
first: Int
last: Int
): AttachmentConnection
author: Author
bcc(
after: String
before: String
first: Int
last: Int
): RecipientConnection
body: String
bodyPlainText: String
cannedReply: CannedReply
cc(
after: String
before: String
first: Int
last: Int
): RecipientConnection
channel: Channel!
createdAt: DateTime!
deliverBy: DateTime
editedAt: DateTime
fromMerge: Boolean
fromMove: Boolean
id: ID!
isNote: Boolean!
rule: Rule
sourceConversation: Conversation
summary: SummaryMessage!
to(
after: String
before: String
first: Int
last: Int
): RecipientConnection!
updatedAt: DateTime!
}

ReplyConnection

The connection type for Reply.

type ReplyConnection {
edges: [ReplyEdge]
nodes: [Reply]
pageInfo: PageInfo!
}

ReplyDraft

No description

type ReplyDraft implements Draft {
agent: Agent!
assignment: Assignment
attachments: JSON
bcc: JSON
body: String!
cc: JSON
contextId: ID
conversation: Conversation!
conversationId: ID!
createdAt: DateTime!
draftId: String
draftType: DraftType
id: ID!
lastSyncedAt: DateTime!
metadata: JSON!
payload: JSON
subject: String
to: JSON
updatedAt: DateTime!
version: Int!
}

ReplyEdge

An edge in a connection.

type ReplyEdge {
cursor: String!
node: Reply
}

Restriction

The agents and/or teams that are assigned to the conversation.

type Restriction {
agents: [Agent!]
teams: [Team!]
type: RestrictionType!
}

Room

A Room represents a chat room

type Room {
agentId: ID
assigneeType: String
channelId: ID
contact: RoomContactType
id: ID!
isRead: Boolean
isStarred: Boolean
name: String
number: Int
roomType: RoomKindType!
snoozedUntilTimestamp: BigInt
state: RoomStateType
tags: [ID!]
teamId: ID
topic: String
updatedTimestamp: BigInt!
}

RoomAccess

No description

type RoomAccess {
hasAccess: Boolean!
id: ID!
number: Int
}

RoomConnection

The connection type for Room.

type RoomConnection {
edges: [RoomEdge]
nodes: [Room]
pageInfo: PageInfo!
totalCount: Int!
totalPageCount: Int!
}

RoomContactType

Basic contact information for this room

type RoomContactType {
id: ID!
name: String
}

RoomEdge

An edge in a connection.

type RoomEdge {
cursor: String!
node: Room
}

RoomsCount

The chat room count for the given state.

type RoomsCount {
conversationCount: Int
id: ID!
unreadCount: Int
}

RoomsCountsResult

The chat room counts with the date and time that the chat room was last updated.

type RoomsCountsResult {
data: [RoomsCount!]!
lastUpdatedAt: BigInt!
}

Rule

  1. A set of actions that will be performed on matching conversations.

To fetch all rules and their conditions:

query Rules {
rules {
nodes {
createdAt
creator {
id
}
description
id
name
position
state
updatedAt
}
}
}

By default rules are sorted by their user-defined row order. To sort by name instead:

query Rules {
rules ( orderBy: { field: NAME, direction: ASC } ) {
nodes {
id
}
}
}
type Rule implements Node, Timestamped {
actions(
after: String
before: String
first: Int
last: Int
): RuleActionConnection
conditions(
after: String
before: String
first: Int
last: Int
id: ID
orderBy: ConditionOrder
): RuleConditionConnection
createdAt: DateTime!
creator: Agent
description: String
id: ID!
lastRunAt: DateTime
matchType: RuleMatchTypes!
name: String!
position: Int!
scheduleSettings: FeatureTemplateRuleScheduleSettings
scheduleType: ScheduleType
state: RuleState!
stopUpcoming: Boolean!
totalExecutions: Int!
triggers(
after: String
before: String
first: Int
last: Int
): RuleTriggerConnection
updatedAt: DateTime!
}

RuleAction

An action to be performed by an automation rule.

type RuleAction implements Timestamped {
createdAt: DateTime!
id: ID!
replyTemplate: RuleReplyTemplate
toAgent: String
type: RuleActionType!
updatedAt: DateTime!
value: String
}

RuleActionConnection

The connection type for RuleAction.

type RuleActionConnection {
edges: [RuleActionEdge]
nodes: [RuleAction]
pageInfo: PageInfo!
}

RuleActionEdge

An edge in a connection.

type RuleActionEdge {
cursor: String!
node: RuleAction
}

RuleCondition

A rule template condition

type RuleCondition {
id: ID!
operator: RuleConditionOperator!
param: RuleConditionParam!
source: RuleConditionSourceUnion
value: String
}

RuleConditionConnection

The connection type for RuleCondition.

type RuleConditionConnection {
edges: [RuleConditionEdge]
nodes: [RuleCondition]
pageInfo: PageInfo!
}

RuleConditionEdge

An edge in a connection.

type RuleConditionEdge {
cursor: String!
node: RuleCondition
}

RuleConnection

The connection type for Rule.

type RuleConnection {
edges: [RuleEdge]
nodes: [Rule]
pageInfo: PageInfo!
}

RuleCreatePayload

Autogenerated return type of RuleCreate

type RuleCreatePayload {
clientMutationId: String
errors: [UserError!]!
rule: Rule
}

RuleDeletePayload

Autogenerated return type of RuleDelete

type RuleDeletePayload {
clientMutationId: String
deletedRuleId: ID
errors: [UserError!]!
}

RuleEdge

An edge in a connection.

type RuleEdge {
cursor: String!
node: Rule
}

RuleReplyTemplate

Represents an email message template used by rules.

type RuleReplyTemplate implements Timestamped {
attachments(
after: String
before: String
first: Int
last: Int
): AttachmentConnection!
body: String!
createdAt: DateTime!
id: ID!
subject: String
updatedAt: DateTime!
}

RuleTrigger

A trigger for an automation rule.

type RuleTrigger implements Timestamped {
createdAt: DateTime!
id: ID!
settings: JSON
type: RuleTriggerType!
updatedAt: DateTime!
}

RuleTriggerConnection

The connection type for RuleTrigger.

type RuleTriggerConnection {
edges: [RuleTriggerEdge]
nodes: [RuleTrigger]
pageInfo: PageInfo!
}

RuleTriggerEdge

An edge in a connection.

type RuleTriggerEdge {
cursor: String!
node: RuleTrigger
}

RuleUpdatePayload

Autogenerated return type of RuleUpdate

type RuleUpdatePayload {
clientMutationId: String
errors: [UserError!]!
rule: Rule
}

SalesforceIntegration

No description

type SalesforceIntegration implements Integration {
createdAt: DateTime!
id: ID!
legacyId: String!
provider: IntegrationProvider!
salesforceDomain: String!
settings: IntegrationSettings!
uid: String
updatedAt: DateTime!
}

SearchSummary

A search summary shows the details about matching messages on a conversation search.

type SearchSummary {
author: Author
body: String!
forwarded: Boolean!
note: Boolean!
}

Session

A contact visit session as recorded by the Widget.

type Session {
firstPageView: PageView
id: String
lastPageView: PageView
penultimatePageView: PageView
totalPageViews: Int
totalTimeOnPage: Float
}

ShopifyExternalChange

A change that happened on Shopify.

type ShopifyExternalChange {
changeType: ShopifyChangeType!
externalId: String!
link: String!
meta: JSON
}

ShopifyIntegration

No description

type ShopifyIntegration implements Integration {
createdAt: DateTime!
id: ID!
legacyId: String!
provider: IntegrationProvider!
settings: IntegrationSettings!
storeDomain: String!
storeName: String
uid: String
updatedAt: DateTime!
}

ShopifyV2Integration

No description

type ShopifyV2Integration implements Integration {
createdAt: DateTime!
id: ID!
legacyId: String!
provider: IntegrationProvider!
settings: IntegrationSettings!
storeDomain: String!
storeName: String!
uid: String
updatedAt: DateTime!
}

SmtpError

An error that occurred during the last attempts to send an email.

type SmtpError {
createdAt: DateTime!
message: String!
}

SmtpServer

A server for sending emails using the SMTP protocol.

type SmtpServer implements Server {
authentication: String
createdAt: DateTime!
encryption: EncryptionType
errors: [SmtpError!]!
host: String!
id: ID!
port: Int!
protocol: ProtocolType!
updatedAt: DateTime!
username: String!
verified: Boolean!
}

Snooze

A snooze represents the agent that snoozed the conversation and when it is snoozed until.

type Snooze {
by: Agent
until: DateTime
}

Snoozed

A conversation was snoozed.

type Snoozed implements Timestamped {
by: Agent
createdAt: DateTime!
id: ID!
until: DateTime
updatedAt: DateTime!
}

StarredCannedReply

A canned reply is a prewritten answer to commonly asked customer questions.

To fetch all canned replies:

query CannedReplies {
cannedReplies {
nodes {
body
category {
id
}
createdAt
creator {
id
}
id
name
snippet
subject
updatedAt
lastUsedAt
countUsed
attachments {
id
}
}
}
}

To fetch all canned replies with a given search string:

query CannedReplies {
cannedReplies( filter: { keywords: "foo" } ) {
nodes {
id
name
}
}
}

To fetch all canned replies with a given search string in a particular category:

query CannedReplies {
cannedReplies( filter: { keywords: "foo", category_ids: [ "crc_123456" ] } ) {
nodes {
id
name
}
}
}
type StarredCannedReply implements Node, Timestamped, Utilizationabled {
attachments(
after: String
before: String
first: Int
last: Int
): AttachmentConnection!
automaticActions: [CannedReplyAutomaticAction!]!
body: String
category: CannedReplyCategory
countUsed: Int!
createdAt: DateTime!
creator: Agent
id: ID!
interpolatedBody(
contactId: ID!
conversationId: ID
messageId: ID
channelId: ID
): String
lastUsedAt: DateTime
mailboxIds: [String!]
name: String
snippet: String
subject: String
updatedAt: DateTime!
}

StarredCannedReplyConnection

The connection type for StarredCannedReply.

type StarredCannedReplyConnection {
edges: [StarredCannedReplyEdge]
nodes: [StarredCannedReply]
pageInfo: PageInfo!
}

StarredCannedReplyCreatePayload

Autogenerated return type of StarredCannedReplyCreate

type StarredCannedReplyCreatePayload {
clientMutationId: String
errors: [UserError!]!
starredCannedReply: StarredCannedReply
}

StarredCannedReplyDeletePayload

Autogenerated return type of StarredCannedReplyDelete

type StarredCannedReplyDeletePayload {
clientMutationId: String
errors: [UserError!]!
messageTemplateId: ID
}

StarredCannedReplyEdge

An edge in a connection.

type StarredCannedReplyEdge {
cursor: String!
node: StarredCannedReply
}

StateChanged

The state of the conversation changed.

type StateChanged implements Timestamped {
createdAt: DateTime!
from: ConversationState
id: ID!
to: ConversationState
updatedAt: DateTime!
}

SubjectChanged

A conversation subject was updated.

type SubjectChanged implements Timestamped {
createdAt: DateTime!
from: String
id: ID!
to: String
updatedAt: DateTime!
}

SuggestionUpsertPayload

Autogenerated return type of SuggestionUpsert

type SuggestionUpsertPayload {
clientMutationId: String
errors: [UserError!]!
}

SummaryMessage

An individual message with the body truncated.

Sample usage:

query Conversations {
conversations {
nodes {
id
number
summaryMessage {
id
bodyPlainText
isNote
}
}
}
}
type SummaryMessage implements Message {
attachments(
after: String
before: String
first: Int
last: Int
): AttachmentConnection
author: Author
body: String
bodyPlainText: String
cannedReply: CannedReply
channel: Channel!
createdAt: DateTime!
editedAt: DateTime
fromMerge: Boolean
fromMove: Boolean
id: ID!
isNote: Boolean!
rule: Rule
sourceConversation: Conversation
summary: SummaryMessage!
truncated: Boolean
updatedAt: DateTime!
}

SupportedOperatorType

Represents supported operators and their associated systems in various condition types.

type SupportedOperatorType {
operator: Operator!
supportedSystems: [ConditionSystem!]!
}

SyncRpcPayload

Autogenerated return type of SyncRpc

type SyncRpcPayload {
clientMutationId: String
errors: [UserError!]!
response: JSON
}

Tag

A label that can be added to any conversation. Tags can be used in folder definitions to create 'smart' folders, in Inbox to search for specific conversations, and in Reporting to monitor trends.

To fetch all tags in the account:

query Tags {
tags {
nodes {
color
conversationCount
createdAt
creator {
id
}
id
lastUsedAt
name
updatedAt
}
pageInfo {
hasNextPage
}
}
}

To fetch all tags applied to a specific conversation:

%(query Conversation {
node(id: $conversationId) {
... on Conversation {
id
number
tags {
nodes {
color
conversationCount
createdAt
creator {
id
}
id
lastUsedAt
name
updatedAt
}
pageInfo {
hasNextPage
}
}
}
}
}

To fetch a single tag:

query Node($tagId: ID!) {
node(id: $tagId) {
... on Tag {
id
name
}
}
}
type Tag implements Node, Timestamped {
color: String
conversationCount(
filter: ConversationCountFilter
): Int!
createdAt: DateTime!
creator: Agent
id: ID!
lastUsedAt: DateTime
name: String!
updatedAt: DateTime!
}

TagBatchDeletePayload

Autogenerated return type of TagBatchDelete

type TagBatchDeletePayload {
clientMutationId: String
errors: [UserError!]!
jobId: ID!
}

TagConnection

The connection type for Tag.

type TagConnection {
edges: [TagEdge]
nodes: [Tag]
pageInfo: PageInfo!
totalCount: Int!
totalPageCount: Int!
}

TagCreatePayload

Autogenerated return type of TagCreate

type TagCreatePayload {
clientMutationId: String
errors: [UserError!]!
tag: Tag
}

TagDeletePayload

Autogenerated return type of TagDelete

type TagDeletePayload {
clientMutationId: String
deletedTagId: ID!
errors: [UserError!]!
}

TagEdge

An edge in a connection.

type TagEdge {
cursor: String!
node: Tag
}

TagMergePayload

Autogenerated return type of TagMerge

type TagMergePayload {
clientMutationId: String
errors: [UserError!]!
jobId: ID!
}

TagUpdatePayload

Autogenerated return type of TagUpdate

type TagUpdatePayload {
clientMutationId: String
errors: [UserError!]!
tag: Tag
}

Tagged

A tag was added to a conversation.

type Tagged implements Timestamped {
createdAt: DateTime!
id: ID!
tag: Tag
updatedAt: DateTime!
}

Team

A team is a group of zero or more agents.

To find all teams on your account along with the associated agents:

query Teams {
teams {
nodes {
agents {
nodes {
id
}
pageInfo {
hasNextPage
}
}
createdAt
id
description
name
updatedAt
}
}
}

By default team results are sorted by name. To sort by when they were created:

query Teams {
teams( orderBy: { field: CREATED_AT, direction: ASC } ) {
nodes {
id
name
}
}
}

To order teams by largest first:

query Teams {
teams( orderBy: { field: SIZE, direction: DESC } ) {
nodes {
id
name
}
}
}
type Team implements Node, Timestamped {
agents(
after: String
before: String
first: Int
last: Int
filter: AgentFilter
orderBy: AgentOrder
): AgentConnection
createdAt: DateTime!
description: String
id: ID!
name: String!
updatedAt: DateTime!
}

TeamChanged

A conversation was reassigned to another team.

type TeamChanged implements Timestamped {
createdAt: DateTime!
from: Team
id: ID!
to: Team
updatedAt: DateTime!
}

TeamConnection

The connection type for Team.

type TeamConnection {
edges: [TeamEdge]
nodes: [Team]
pageInfo: PageInfo!
}

TeamEdge

An edge in a connection.

type TeamEdge {
cursor: String!
node: Team
}

teamsCreatePayload

Autogenerated return type of teamsCreate

type teamsCreatePayload {
clientMutationId: String
errors: [UserError!]!
team: Team!
}

teamsDestroyPayload

Autogenerated return type of teamsDestroy

type teamsDestroyPayload {
clientMutationId: String
errors: [UserError!]!
team: Team!
}

teamsUpdatePayload

Autogenerated return type of teamsUpdate

type teamsUpdatePayload {
clientMutationId: String
errors: [UserError!]!
team: Team!
}

Text

A text string. It can represent either a single line, multiple lines, or an email.

type Text {
content: String!
}

Theme

A theme for a Knowledge Base that is provided out of the box.

To fetch all themes:

query Themes {
themes {
nodes {

createdAt
id
name
description
screenshotUrl
updatedAt

}
}
}
type Theme implements Node, Timestamped {
createdAt: DateTime!
description: String
id: ID!
name: String
screenshotUrl: String
updatedAt: DateTime!
}

ThemeConnection

The connection type for Theme.

type ThemeConnection {
edges: [ThemeEdge]
nodes: [Theme]
pageInfo: PageInfo!
}

ThemeEdge

An edge in a connection.

type ThemeEdge {
cursor: String!
node: Theme
}

Tool

No description

type Tool {
label: String
name: String!
}

ToolConnection

The connection type for Tool.

type ToolConnection {
edges: [ToolEdge]
nodes: [Tool]
pageInfo: PageInfo!
}

ToolEdge

An edge in a connection.

type ToolEdge {
cursor: String!
node: Tool
}

TwitterConversation

A Groove conversation initiated from Twitter.

To fetch a specific Twitter conversation by ID:

query Conversation {
node(id: "cnv_12345678") {

... on TwitterConversation {
twitterId
}

}
})

To fetch all possible fields:

query Conversation {
node(id: "cnv_12345678") {

__typename
... on Conversation {
assigned {
at
agent {
id
name
}
team {
id
name
}
}
counts {
attachments
interactions
messages
notes
stateChanges
}
createdAt
contact {
id
email
}
deletedAt
drafts {
nodes {
id
}
}
followers {
nodes {
id
email
}
}
id
number
snoozed {
by { id }
until
}
starred
state
stateUpdatedAt
summaryMessage {
id
bodyPlainText
}
subject
systemUpdatedAt
tags {
nodes {
id
name
}
}
updatedAt

... on FacebookConversation {
facebookId
}


... on TwitterConversation {
twitterId
}


... on WidgetConversation {
browser
referrer
pageTitle
pageUrl
platform
referrer
}

}

}
})
type TwitterConversation implements Node, Conversation {
assigned: Assignment
channel: Channel!
contact: Contact
counts: ConversationCounts!
createdAt: DateTime!
customFieldValues(
after: String
before: String
first: Int
last: Int
filter: CustomFieldValuesFilter
): CustomFieldValueConnection
deletedAt: DateTime
drafts(
after: String
before: String
first: Int
last: Int
): DraftConnection
followers(
after: String
before: String
first: Int
last: Int
filter: AgentFilter
orderBy: AgentOrder
): AgentConnection
id: ID!
lastUnansweredUserMessageAt: DateTime!
mentions: [Mention!]!
number: Int!
searchSummary: SearchSummary
snoozed: Snooze
starred: Boolean!
state: ConversationState!
stateUpdatedAt: DateTime
subject: String
summaryMessage: SummaryMessage
systemUpdatedAt: DateTime!
tags(
after: String
before: String
first: Int
last: Int
filter: TagFilter
orderBy: TagOrder
): TagConnection
twitterId: String
updatedAt: DateTime!
}

A Groove conversation is a thread of messages (for example emails, chats, or notes) and associated actions or events (for example 'opened', 'snoozed', and 'assigned').

To fetch Messages/Ratings/StateChanges/etc. on a conversation, query the Events connection (on the QueryRoot) with the conversation ID.

To fetch all possible fields:

query Conversation {
node(id: "cnv_12345678") {

__typename
... on Conversation {
assigned {
at
agent {
id
name
}
team {
id
name
}
}
counts {
attachments
interactions
messages
notes
stateChanges
}
createdAt
contact {
id
email
}
deletedAt
drafts {
nodes {
id
}
}
followers {
nodes {
id
email
}
}
id
number
snoozed {
by { id }
until
}
starred
state
stateUpdatedAt
summaryMessage {
id
bodyPlainText
}
subject
systemUpdatedAt
tags {
nodes {
id
name
}
}
updatedAt

... on FacebookConversation {
facebookId
}


... on TwitterConversation {
twitterId
}


... on WidgetConversation {
browser
referrer
pageTitle
pageUrl
platform
referrer
}

}

}
}

To search conversations matching a specific keyword:

query Conversations {
conversations(filter: { keywords: "rad" }) {
edges {
node {
... on Conversation {
id
number
searchSummary {
author {
__typename
... on Agent {
email
role
}
... on Contact {
email
}
}
body
forwarded
note
}
}
}
}
}
}

TwitterDraft

No description

type TwitterDraft implements Draft {
agent: Agent!
assignment: Assignment
body: String!
contextId: ID
conversation: Conversation!
conversationId: ID!
createdAt: DateTime!
draftId: String
draftType: DraftType
id: ID!
lastSyncedAt: DateTime!
metadata: JSON!
payload: JSON
updatedAt: DateTime!
version: Int!
}

TwitterMessage

A message sent to or received from Twitter.

type TwitterMessage implements Node, Message {
attachments(
after: String
before: String
first: Int
last: Int
): AttachmentConnection
author: Author
body: String
bodyPlainText: String
cannedReply: CannedReply
channel: Channel!
createdAt: DateTime!
editedAt: DateTime
fromMerge: Boolean
fromMove: Boolean
id: ID!
isNote: Boolean!
rule: Rule
sourceConversation: Conversation
summary: SummaryMessage!
twitterId: String
updatedAt: DateTime!
}

TwoFactorAuthCode

query TwoFactorAuthCode {
me {
twoFactorAuthCode {
uri
code
}
}
}
type TwoFactorAuthCode {
code: String
uri: String
}

Unsnoozed

A conversation was unsnoozed.

type Unsnoozed implements Timestamped {
by: Agent
createdAt: DateTime!
id: ID!
updatedAt: DateTime!
}

Untagged

A tag was removed from a conversation.

type Untagged implements Timestamped {
createdAt: DateTime!
id: ID!
tag: Tag
updatedAt: DateTime!
}

UpdatePresencePayload

Autogenerated return type of UpdatePresence

type UpdatePresencePayload {
accessibleWidgetIds: [ID!]
clientMutationId: String
errors: [UserError!]!
lastActiveAt: BigInt
presenceStatus: PresenceStatusType
updatedAt: BigInt
}

UploadPayloadField

No description

type UploadPayloadField {
name: String!
value: String!
}

UploadPayloadGeneratePayload

Autogenerated return type of UploadPayloadGenerate

type UploadPayloadGeneratePayload {
clientMutationId: String
errors: [UserError!]!
key: String!
previewUrl: String!
request: UploadPayloadRequest!
}

UploadPayloadRequest

No description

type UploadPayloadRequest {
contentType: String!
data: [UploadPayloadField!]!
method: String!
url: String!
}

UrlStruct

A URL.

type UrlStruct {
domain: String
hash: String
path: String
protocol: String
query: String
raw: String!
}

UserAgent

A characteristic string used to identify visitors.

type UserAgent {
browser: Browser
device: Device
platform: Platform
raw: String!
}

UserError

A user-readable error

type UserError {
message: String!
path: [String!]
type: String
}

UserIntegration

No description

type UserIntegration implements Integration {
agent: Agent
createdAt: DateTime!
id: ID!
legacyId: String!
provider: IntegrationProvider!
settings: IntegrationSettings!
uid: String
updatedAt: DateTime!
}

Wallet

No description

type Wallet implements Node, Timestamped {
autorenew: Boolean
autorenewAmount: Int
autorenewAt: ISO8601DateTime
autorenewSchedule: Int
autorenewThreshold: Int
autorenewUsedTimes: Int
autorenewUses: Int
balance: Int!
canUse: Boolean!
createdAt: DateTime!
feature: String!
id: ID!
limit: Int
limitType: String
ownerId: String!
ownerType: String!
parent: Wallet
updatedAt: DateTime!
}

WalletConnection

The connection type for Wallet.

type WalletConnection {
edges: [WalletEdge]
nodes: [Wallet]
pageInfo: PageInfo!
}

WalletEdge

An edge in a connection.

type WalletEdge {
cursor: String!
node: Wallet
}

WalletTransactionCreatePayload

Autogenerated return type of WalletTransactionCreate

type WalletTransactionCreatePayload {
clientMutationId: String
errors: [UserError!]!
success: Boolean!
}

WalletUpdatePayload

Autogenerated return type of WalletUpdate

type WalletUpdatePayload {
clientMutationId: String
errors: [UserError!]!
wallet: Wallet
}

Webhook

Represents a webhook endpoint configured for account events.

type Webhook implements Node {
createdAt: ISO8601DateTime!
event: WebhookEvent!
failureCount: Int!
failureReason: String
id: ID!
signingEnabled: Boolean!
state: WebhookState!
updatedAt: ISO8601DateTime!
url: String!
}

WebhookConnection

The connection type for Webhook.

type WebhookConnection {
edges: [WebhookEdge]
nodes: [Webhook]
pageInfo: PageInfo!
totalCount: Int!
totalPageCount: Int!
}

WebhookCreatePayload

Autogenerated return type of WebhookCreate

type WebhookCreatePayload {
clientMutationId: String
errors: [UserError!]!
webhook: Webhook
}

WebhookDeletePayload

Autogenerated return type of WebhookDelete

type WebhookDeletePayload {
clientMutationId: String
deletedWebhookId: ID
errors: [UserError!]!
}

WebhookEdge

An edge in a connection.

type WebhookEdge {
cursor: String!
node: Webhook
}

WebhookReactivatePayload

Autogenerated return type of WebhookReactivate

type WebhookReactivatePayload {
clientMutationId: String
errors: [UserError!]!
webhook: Webhook
}

WebhookTestPayload

Autogenerated return type of WebhookTest

type WebhookTestPayload {
clientMutationId: String
errors: [UserError!]!
statusCode: Int
success: Boolean!
webhook: Webhook
}

WebhookUpdatePayload

Autogenerated return type of WebhookUpdate

type WebhookUpdatePayload {
clientMutationId: String
errors: [UserError!]!
webhook: Webhook
}

WidgetConversation

A Groove conversation initiated from a Groove Widget.

To fetch a specific Widget conversation by ID:

query Conversation {
node(id: "cnv_12345678") {

... on WidgetConversation {
browser
referrer
pageTitle
pageUrl
platform
referrer
}

}
})

To fetch all possible fields:

query Conversation {
node(id: "cnv_12345678") {

__typename
... on Conversation {
assigned {
at
agent {
id
name
}
team {
id
name
}
}
counts {
attachments
interactions
messages
notes
stateChanges
}
createdAt
contact {
id
email
}
deletedAt
drafts {
nodes {
id
}
}
followers {
nodes {
id
email
}
}
id
number
snoozed {
by { id }
until
}
starred
state
stateUpdatedAt
summaryMessage {
id
bodyPlainText
}
subject
systemUpdatedAt
tags {
nodes {
id
name
}
}
updatedAt

... on FacebookConversation {
facebookId
}


... on TwitterConversation {
twitterId
}


... on WidgetConversation {
browser
referrer
pageTitle
pageUrl
platform
referrer
}

}

}
})
type WidgetConversation implements Node, Conversation {
assigned: Assignment
browser: String
channel: Channel!
contact: Contact
counts: ConversationCounts!
createdAt: DateTime!
customFieldValues(
after: String
before: String
first: Int
last: Int
filter: CustomFieldValuesFilter
): CustomFieldValueConnection
deletedAt: DateTime
drafts(
after: String
before: String
first: Int
last: Int
): DraftConnection
followers(
after: String
before: String
first: Int
last: Int
filter: AgentFilter
orderBy: AgentOrder
): AgentConnection
id: ID!
lastUnansweredUserMessageAt: DateTime!
mentions: [Mention!]!
number: Int!
pageTitle: String
pageUrl: String
platform: String
referrer: String
searchSummary: SearchSummary
snoozed: Snooze
starred: Boolean!
state: ConversationState!
stateUpdatedAt: DateTime
subject: String
summaryMessage: SummaryMessage
systemUpdatedAt: DateTime!
tags(
after: String
before: String
first: Int
last: Int
filter: TagFilter
orderBy: TagOrder
): TagConnection
updatedAt: DateTime!
}

A Groove conversation is a thread of messages (for example emails, chats, or notes) and associated actions or events (for example 'opened', 'snoozed', and 'assigned').

To fetch Messages/Ratings/StateChanges/etc. on a conversation, query the Events connection (on the QueryRoot) with the conversation ID.

To fetch all possible fields:

query Conversation {
node(id: "cnv_12345678") {

__typename
... on Conversation {
assigned {
at
agent {
id
name
}
team {
id
name
}
}
counts {
attachments
interactions
messages
notes
stateChanges
}
createdAt
contact {
id
email
}
deletedAt
drafts {
nodes {
id
}
}
followers {
nodes {
id
email
}
}
id
number
snoozed {
by { id }
until
}
starred
state
stateUpdatedAt
summaryMessage {
id
bodyPlainText
}
subject
systemUpdatedAt
tags {
nodes {
id
name
}
}
updatedAt

... on FacebookConversation {
facebookId
}


... on TwitterConversation {
twitterId
}


... on WidgetConversation {
browser
referrer
pageTitle
pageUrl
platform
referrer
}

}

}
}

To search conversations matching a specific keyword:

query Conversations {
conversations(filter: { keywords: "rad" }) {
edges {
node {
... on Conversation {
id
number
searchSummary {
author {
__typename
... on Agent {
email
role
}
... on Contact {
email
}
}
body
forwarded
note
}
}
}
}
}
}

WidgetHelplyProvisionPayload

Autogenerated return type of WidgetHelplyProvision

type WidgetHelplyProvisionPayload {
clientMutationId: String
errors: [UserError!]!
message: String
success: Boolean!
widgetCount: Int!
}

WidgetMessage

A message received from a contact using the Widget.

type WidgetMessage implements Node, Message {
attachments(
after: String
before: String
first: Int
last: Int
): AttachmentConnection
author: Author
body: String
bodyPlainText: String
cannedReply: CannedReply
channel: Channel!
createdAt: DateTime!
editedAt: DateTime
fromMerge: Boolean
fromMove: Boolean
id: ID!
isNote: Boolean!
rule: Rule
sourceConversation: Conversation
summary: SummaryMessage!
updatedAt: DateTime!
}