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:
param:TAGoperator:CONTAINSvalue:"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:
- "Assigned agent" is "Current User".
- "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!
}
Header
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
}
Link
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
- 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!
}