Volt GraphQL API
The Volt GraphQL API is the primary way for apps to interact with the Volt platform.
Terms of Service
API Endpoints
https://api.respondflow.com/graphql
Version
v1.0
Respond Flow
Prior to 2022, Volt was known as Respond Flow. As we're making the transition to our new name, you may see technical details and domains that refer to Respond Flow throughout the documentation. Note that this is not a mistake, and no support for existing endpoints will be dropped for customers once the transition is complete.
Retrieving an Access Token
To generate an access token, log in to your Volt account, navigate to Settings and click the Developers tab. If the tab is not available, be sure your user has proper permissions to manage users in Volt.
Validating Webhooks
Each Volt webhook event that we send you will include a cryptographic signature in the X-Respond-Flow-Signature
header. The signature allows you to validate that webhooks were not sent by a third-party. Our RSA public key is available at https://callbacks.respondflow.com/id_rsa.pub, which can be used to validate the signature sent with each request using a standard cryptographic library in your language of choice.
GraphQL Quick Intro
We strongly suggest using a GraphQL client library in the language of your choice when interacting with the Volt GraphQL API. Using a GraphQL client library will make it easier to take advantage of static typing, API schema introspection, and other features that let you quickly and reliably build into the Volt GraphQL API. For more information, check out What is a GraphQL client and why would I use one?.
Below is an example using python
Endpoint
You will use the API endpoint documented at the top of this page
url = "https://api.respondflow.com/graphql"
Headers
Your authorization will be your Bearer token
headers = {
"Content-Type": 'application/json',
"Authorization": "Bearer GENERATED_TOKEN"}
Variables
Where you see $variable: Type! in the examples, these should be passed beside the query
variables = {'primaryPhone':"+10003334444", 'phoneNumber': "+10000000464"}
Query Building
One of the benefits of GraphQL is that it will only return you the data you request, but this means that you must specify all the fields you need from the data. Where an example query may have many fields available
query contact(
$primaryPhone: String!,
$phoneNumber: String!
) {
contact(
primaryPhone: $primaryPhone,
phoneNumber: $phoneNumber
) {
id
account {
...AccountFragment
}
organization {
...OrganizationFragment
}
phoneNumber
name
mappedNumber
customFields {
...ContactCustomFieldFragment
}
createdAt
lastUpdatedAt
lists {
...ListFragment
}
blocked
}
}
You could reduce them to only the fields you want in the query
query contact(
$primaryPhone: String!,
$phoneNumber: String!
) {
contact(
primaryPhone: $primaryPhone,
phoneNumber: $phoneNumber
) {
name
mappedNumber
lastUpdatedAt
blocked
}
}
Similarly, the Contact object example has connected sub-objects (such as an Account attached to a Contact) and does not show all the fields of those sub-objects.
account {
...AccountFragment
}
To get these sub-objects, you will need to expand their fields from linked types:
- AccountFragment->Account
- OrganizationFragment->Organization,
- ListFragment->List
query contact($primaryPhone: String!, $phoneNumber: String!) {
contact(primaryPhone: $primaryPhone, phoneNumber: $phoneNumber) {
id
account {
id,
createdBy,
organization {
id,
companyName,
domain,
size,
industry,
createdAt,
lastUpdatedAt,
isOnFreeTrial,
isActive},
name,
primaryPhone,
createdAt,
lastUpdatedAt,
callForwardingNumber,
location
}
organization {
id,
companyName,
domain,
size,
industry,
createdAt,
lastUpdatedAt,
isOnFreeTrial,
isActive
}
phoneNumber
name
mappedNumber
customFields {
key
type
value
}
createdAt
lastUpdatedAt
lists {
id
createdBy
name
createdAt
lastUpdatedAt
size
querySourceListName
queryNameSearchTerm
}
blocked
}
}
Expanding all the sub-objects can make it repetitive. You also may not care about every field for these sub-objects. You can reduce them just as you can the main fields in the query.
query_text = """
query contact($primaryPhone: String!, $phoneNumber: String!) {
contact(primaryPhone: $primaryPhone, phoneNumber: $phoneNumber) {
id
account {
name,
primaryPhone
}
organization {
id,
companyName
}
phoneNumber
name
mappedNumber
createdAt
lastUpdatedAt
lists {
id
Name
}
blocked
}
}
"""
Sending the Request
With all the above, we can now use a graphql library with an http transport to send this along
from gql import Client, gql
from gql.transport.aiohttp import AIOHTTPTransport
# Create a transport with the endpoint and headers
transport = AIOHTTPTransport(url=url, headers=headers)
# Create a GraphQL client using the AIOHTTPTransport transport
client = Client(transport=transport, fetch_schema_from_transport=True)
# Give gql the query
query = gql(query_text)
# Execute the query with variables
result = client.execute(query, variable_values=variables)
print(result)
The same can be achieved with the requests library, but note that querying requires a POST request
import requests
import json
response = requests.post(url=url, json={"query": query_text, "variables": variables}, headers=headers)
print("response status code: ", response.status_code)
if response.status_code == 200:
content = json.loads(response.content)
print(content['data'])
else:
print(response.content)
Queries
contact
Description
Get a contact by phone number
Response
Returns a Contact
Example
Query
query contact(
$primaryPhone: String!,
$phoneNumber: String!
) {
contact(
primaryPhone: $primaryPhone,
phoneNumber: $phoneNumber
) {
id
account {
...AccountFragment
}
organization {
...OrganizationFragment
}
phoneNumber
name
mappedNumber
customFields {
...ContactCustomFieldFragment
}
createdAt
lastUpdatedAt
lists {
...ListFragment
}
blocked
}
}
Variables
{
"primaryPhone": "xyz789",
"phoneNumber": "abc123"
}
Response
{
"data": {
"contact": {
"id": 4,
"account": Account,
"organization": Organization,
"phoneNumber": "abc123",
"name": "abc123",
"mappedNumber": "xyz789",
"customFields": [ContactCustomField],
"createdAt": "xyz789",
"lastUpdatedAt": "xyz789",
"lists": [List],
"blocked": true
}
}
}
conversation
Description
Get a conversation between two entities
Response
Returns a Conversation!
Example
Query
query conversation(
$to: String!,
$from: String!,
$before: String
) {
conversation(
to: $to,
from: $from,
before: $before
) {
messages {
...MessageFragment
}
pageInfo {
...PageInfoFragment
}
}
}
Variables
{
"to": "xyz789",
"from": "xyz789",
"before": "xyz789"
}
Response
{
"data": {
"conversation": {
"messages": [Message],
"pageInfo": PageInfo
}
}
}
inbox
Description
Get inbox for account
Response
Returns an Inbox
Example
Query
query inbox(
$from: String!,
$before: String
) {
inbox(
from: $from,
before: $before
) {
account {
...AccountFragment
}
items {
...InboxMessageFragment
}
pageInfo {
...PageInfoFragment
}
}
}
Variables
{
"from": "xyz789",
"before": "xyz789"
}
Response
{
"data": {
"inbox": {
"account": Account,
"items": [InboxMessage],
"pageInfo": PageInfo
}
}
}
legacyMessage
Description
Get a message by provider ID
Response
Returns a Message
Arguments
Name | Description |
---|---|
id - ID!
|
Message ID assigned by telecom provider (uuid) |
Example
Query
query legacyMessage($id: ID!) {
legacyMessage(id: $id) {
id
legacyId
account {
...AccountFragment
}
organization {
...OrganizationFragment
}
toNumber
fromNumber
status
statusDescription
media
body
sentAt
confirmedAt
wave {
...WaveFragment
}
contact {
...ContactFragment
}
errorCode
}
}
Variables
{"id": 4}
Response
{
"data": {
"legacyMessage": {
"id": "4",
"legacyId": "xyz789",
"account": Account,
"organization": Organization,
"toNumber": "abc123",
"fromNumber": "abc123",
"status": "abc123",
"statusDescription": "xyz789",
"media": ["xyz789"],
"body": "xyz789",
"sentAt": "abc123",
"confirmedAt": "abc123",
"wave": Wave,
"contact": Contact,
"errorCode": "xyz789"
}
}
}
list
Description
Get a list
Response
Returns a List!
Example
Query
query list(
$primaryPhone: String!,
$listName: String!
) {
list(
primaryPhone: $primaryPhone,
listName: $listName
) {
id
createdBy
name
createdAt
lastUpdatedAt
account {
...AccountFragment
}
size
querySourceListName
queryNameSearchTerm
queryCustomFields {
...ListQueryRuleFragment
}
}
}
Variables
{
"primaryPhone": "xyz789",
"listName": "abc123"
}
Response
{
"data": {
"list": {
"id": "4",
"createdBy": "xyz789",
"name": "xyz789",
"createdAt": "abc123",
"lastUpdatedAt": "abc123",
"account": Account,
"size": 987,
"querySourceListName": "abc123",
"queryNameSearchTerm": "abc123",
"queryCustomFields": [ListQueryRule]
}
}
}
message
Description
Get a message by Volt ID
Example
Query
query message($id: ID!) {
message(id: $id) {
id
legacyId
account {
...AccountFragment
}
organization {
...OrganizationFragment
}
toNumber
fromNumber
status
statusDescription
media
body
sentAt
confirmedAt
wave {
...WaveFragment
}
contact {
...ContactFragment
}
errorCode
}
}
Variables
{"id": 4}
Response
{
"data": {
"message": {
"id": "4",
"legacyId": "xyz789",
"account": Account,
"organization": Organization,
"toNumber": "xyz789",
"fromNumber": "xyz789",
"status": "xyz789",
"statusDescription": "abc123",
"media": ["xyz789"],
"body": "xyz789",
"sentAt": "abc123",
"confirmedAt": "xyz789",
"wave": Wave,
"contact": Contact,
"errorCode": "xyz789"
}
}
}
wave
Description
Get a wave by ID
Response
Returns a Wave
Arguments
Name | Description |
---|---|
id - ID!
|
Numeric id assigned to a Wave given in the id attribute |
Example
Query
query wave($id: ID!) {
wave(id: $id) {
id
scheduledTime
name
account {
...AccountFragment
}
organization {
...OrganizationFragment
}
body
media
sentBy
lists {
...ListFragment
}
totalMessages
totalMessagesDelivered
totalMessagesFailed
type
}
}
Variables
{"id": "4"}
Response
{
"data": {
"wave": {
"id": 4,
"scheduledTime": "abc123",
"name": "abc123",
"account": Account,
"organization": Organization,
"body": "abc123",
"media": ["xyz789"],
"sentBy": "xyz789",
"lists": [List],
"totalMessages": 123,
"totalMessagesDelivered": 123,
"totalMessagesFailed": 123,
"type": "abc123"
}
}
}
webhooks
Description
Get all webhooks
Response
Returns [Webhook]!
Example
Query
query webhooks {
webhooks {
id
organization {
...OrganizationFragment
}
url
createdAt
lastUpdatedAt
primaryPhone
eventTypes
}
}
Response
{
"data": {
"webhooks": [
{
"id": "4",
"organization": Organization,
"url": "xyz789",
"createdAt": "xyz789",
"lastUpdatedAt": "abc123",
"primaryPhone": "xyz789",
"eventTypes": ["MESSAGE_RECEIVED"]
}
]
}
}
Mutations
addContactsToList
Description
Add one or many contacts to an existing list
Response
Returns a List!
Arguments
Name | Description |
---|---|
primaryPhone - String!
|
Primary number on the Volt account (as shown in the interface) |
listName - String!
|
The name of the list; must be unique per account |
phoneNumbers - [String!]!
|
The phone numbers of contacts to add to the list |
Example
Query
mutation addContactsToList(
$primaryPhone: String!,
$listName: String!,
$phoneNumbers: [String!]!
) {
addContactsToList(
primaryPhone: $primaryPhone,
listName: $listName,
phoneNumbers: $phoneNumbers
) {
id
createdBy
name
createdAt
lastUpdatedAt
account {
...AccountFragment
}
size
querySourceListName
queryNameSearchTerm
queryCustomFields {
...ListQueryRuleFragment
}
}
}
Variables
{
"primaryPhone": "xyz789",
"listName": "xyz789",
"phoneNumbers": ["xyz789"]
}
Response
{
"data": {
"addContactsToList": {
"id": 4,
"createdBy": "xyz789",
"name": "abc123",
"createdAt": "xyz789",
"lastUpdatedAt": "abc123",
"account": Account,
"size": 987,
"querySourceListName": "abc123",
"queryNameSearchTerm": "xyz789",
"queryCustomFields": [ListQueryRule]
}
}
}
createMessage
Description
Send a message
Response
Returns a Message!
Arguments
Name | Description |
---|---|
to - String!
|
Number to which to send the message |
from - String!
|
Primary number on the Volt account (as shown in the interface, the message will be mapped appropriately) |
body - String!
|
Text body of the message |
media - [String!]
|
Media (URLs) to attach to the image |
passthrough - String
|
(optional; up to 512 bytes) plain text data passed through in webhooks via the X-Volt-Passthrough header |
Example
Query
mutation createMessage(
$to: String!,
$from: String!,
$body: String!,
$media: [String!],
$passthrough: String
) {
createMessage(
to: $to,
from: $from,
body: $body,
media: $media,
passthrough: $passthrough
) {
id
legacyId
account {
...AccountFragment
}
organization {
...OrganizationFragment
}
toNumber
fromNumber
status
statusDescription
media
body
sentAt
confirmedAt
wave {
...WaveFragment
}
contact {
...ContactFragment
}
errorCode
}
}
Variables
{
"to": "xyz789",
"from": "xyz789",
"body": "xyz789",
"media": ["abc123"],
"passthrough": "abc123"
}
Response
{
"data": {
"createMessage": {
"id": "4",
"legacyId": "abc123",
"account": Account,
"organization": Organization,
"toNumber": "abc123",
"fromNumber": "xyz789",
"status": "xyz789",
"statusDescription": "xyz789",
"media": ["xyz789"],
"body": "xyz789",
"sentAt": "xyz789",
"confirmedAt": "abc123",
"wave": Wave,
"contact": Contact,
"errorCode": "xyz789"
}
}
}
createOrUpdateContact
Description
Create or update a contact
Response
Returns a Contact!
Arguments
Name | Description |
---|---|
name - String!
|
Display name of the contact |
phoneNumber - String!
|
Contact's phone number |
accountPhone - String!
|
Primary number on the Volt account (as shown in the interface) |
customFields - [ContactCustomFieldInput]!
|
Key-value pairs containing other identifying information on the contact |
blocked - Boolean!
|
If the contact should be marked as blocked, and receivals not processed |
Example
Query
mutation createOrUpdateContact(
$name: String!,
$phoneNumber: String!,
$accountPhone: String!,
$customFields: [ContactCustomFieldInput]!,
$blocked: Boolean!
) {
createOrUpdateContact(
name: $name,
phoneNumber: $phoneNumber,
accountPhone: $accountPhone,
customFields: $customFields,
blocked: $blocked
) {
id
account {
...AccountFragment
}
organization {
...OrganizationFragment
}
phoneNumber
name
mappedNumber
customFields {
...ContactCustomFieldFragment
}
createdAt
lastUpdatedAt
lists {
...ListFragment
}
blocked
}
}
Variables
{
"name": "xyz789",
"phoneNumber": "xyz789",
"accountPhone": "abc123",
"customFields": [ContactCustomFieldInput],
"blocked": true
}
Response
{
"data": {
"createOrUpdateContact": {
"id": "4",
"account": Account,
"organization": Organization,
"phoneNumber": "abc123",
"name": "xyz789",
"mappedNumber": "xyz789",
"customFields": [ContactCustomField],
"createdAt": "xyz789",
"lastUpdatedAt": "xyz789",
"lists": [List],
"blocked": false
}
}
}
createOrUpdateList
Description
Create a or update a list
Response
Returns a List!
Arguments
Name | Description |
---|---|
primaryPhone - String!
|
Primary number on the Volt account (as shown in the interface) |
listQuery - ListQuery!
|
List building information |
Example
Query
mutation createOrUpdateList(
$primaryPhone: String!,
$listQuery: ListQuery!
) {
createOrUpdateList(
primaryPhone: $primaryPhone,
listQuery: $listQuery
) {
id
createdBy
name
createdAt
lastUpdatedAt
account {
...AccountFragment
}
size
querySourceListName
queryNameSearchTerm
queryCustomFields {
...ListQueryRuleFragment
}
}
}
Variables
{
"primaryPhone": "xyz789",
"listQuery": ListQuery
}
Response
{
"data": {
"createOrUpdateList": {
"id": "4",
"createdBy": "xyz789",
"name": "xyz789",
"createdAt": "xyz789",
"lastUpdatedAt": "abc123",
"account": Account,
"size": 123,
"querySourceListName": "xyz789",
"queryNameSearchTerm": "xyz789",
"queryCustomFields": [ListQueryRule]
}
}
}
deleteWebhook
Description
Delete a webhook by id
Response
Returns a Webhook
Arguments
Name | Description |
---|---|
id - ID!
|
Numeric id assigned to a Webhook given in the id attribute |
Example
Query
mutation deleteWebhook($id: ID!) {
deleteWebhook(id: $id) {
id
organization {
...OrganizationFragment
}
url
createdAt
lastUpdatedAt
primaryPhone
eventTypes
}
}
Variables
{"id": 4}
Response
{
"data": {
"deleteWebhook": {
"id": "4",
"organization": Organization,
"url": "xyz789",
"createdAt": "xyz789",
"lastUpdatedAt": "abc123",
"primaryPhone": "abc123",
"eventTypes": ["MESSAGE_RECEIVED"]
}
}
}
registerWebhook
Description
Create a webhook destination
Response
Returns a Webhook
Arguments
Name | Description |
---|---|
url - String!
|
URL of the POST request Volt will make with a message status update |
primaryPhone - String
|
Root phone number of a specific account with which webhook is registered; defaults to all if not specified |
eventTypes - [WebhookEventType]
|
A list of events that will trigger a webhook; requires primaryPhone to be specified; defaults to all |
Example
Query
mutation registerWebhook(
$url: String!,
$primaryPhone: String,
$eventTypes: [WebhookEventType]
) {
registerWebhook(
url: $url,
primaryPhone: $primaryPhone,
eventTypes: $eventTypes
) {
id
organization {
...OrganizationFragment
}
url
createdAt
lastUpdatedAt
primaryPhone
eventTypes
}
}
Variables
{
"url": "xyz789",
"primaryPhone": "abc123",
"eventTypes": ["MESSAGE_RECEIVED"]
}
Response
{
"data": {
"registerWebhook": {
"id": 4,
"organization": Organization,
"url": "abc123",
"createdAt": "abc123",
"lastUpdatedAt": "abc123",
"primaryPhone": "abc123",
"eventTypes": ["MESSAGE_RECEIVED"]
}
}
}
scheduleMessage
Description
Schedule a singular message
Response
Returns a Wave
Arguments
Name | Description |
---|---|
primaryPhone - String!
|
Primary number on the Volt account (as shown in the interface) |
message - MessageSchedulingJob!
|
Other messaging information |
Example
Query
mutation scheduleMessage(
$primaryPhone: String!,
$message: MessageSchedulingJob!
) {
scheduleMessage(
primaryPhone: $primaryPhone,
message: $message
) {
id
scheduledTime
name
account {
...AccountFragment
}
organization {
...OrganizationFragment
}
body
media
sentBy
lists {
...ListFragment
}
totalMessages
totalMessagesDelivered
totalMessagesFailed
type
}
}
Variables
{
"primaryPhone": "xyz789",
"message": MessageSchedulingJob
}
Response
{
"data": {
"scheduleMessage": {
"id": 4,
"scheduledTime": "abc123",
"name": "xyz789",
"account": Account,
"organization": Organization,
"body": "abc123",
"media": ["abc123"],
"sentBy": "xyz789",
"lists": [List],
"totalMessages": 123,
"totalMessagesDelivered": 123,
"totalMessagesFailed": 123,
"type": "xyz789"
}
}
}
scheduleWave
Description
Schedule a wave
Response
Returns a Wave
Arguments
Name | Description |
---|---|
type - WaveType!
|
Wave type (account/organization) |
primaryPhone - String
|
Primary number on the Volt account (as shown in the interface) |
status - NewWaveStatus!
|
Status of the wave (draft/scheduled, draft waves will not be processed) |
wave - WaveSchedulingJob!
|
Other messaging information |
Example
Query
mutation scheduleWave(
$type: WaveType!,
$primaryPhone: String,
$status: NewWaveStatus!,
$wave: WaveSchedulingJob!
) {
scheduleWave(
type: $type,
primaryPhone: $primaryPhone,
status: $status,
wave: $wave
) {
id
scheduledTime
name
account {
...AccountFragment
}
organization {
...OrganizationFragment
}
body
media
sentBy
lists {
...ListFragment
}
totalMessages
totalMessagesDelivered
totalMessagesFailed
type
}
}
Variables
{
"type": "account",
"primaryPhone": "xyz789",
"status": "draft",
"wave": WaveSchedulingJob
}
Response
{
"data": {
"scheduleWave": {
"id": "4",
"scheduledTime": "xyz789",
"name": "abc123",
"account": Account,
"organization": Organization,
"body": "xyz789",
"media": ["abc123"],
"sentBy": "xyz789",
"lists": [List],
"totalMessages": 987,
"totalMessagesDelivered": 123,
"totalMessagesFailed": 987,
"type": "abc123"
}
}
}
Types
Account
Fields
Field Name | Description |
---|---|
id - ID!
|
ID of the account owning the phone number |
organization - Organization!
|
Root organization to which the account is associated |
createdBy - String!
|
Email of user who created the account |
name - String!
|
Name of the account |
primaryPhone - String!
|
Root phone number of the account (aside from numbers in pool if enabled) |
createdAt - String!
|
Account creation date |
lastUpdatedAt - String!
|
Time the organization was last updated |
callForwardingNumber - String
|
Number to which a call to the primaryPhone or any phone in the pool is forwarded |
location - String
|
Location of the entity this account represents |
Example
{
"id": 4,
"organization": Organization,
"createdBy": "abc123",
"name": "abc123",
"primaryPhone": "xyz789",
"createdAt": "abc123",
"lastUpdatedAt": "xyz789",
"callForwardingNumber": "xyz789",
"location": "xyz789"
}
Boolean
Description
The Boolean
scalar type represents true
or false
.
Example
true
Contact
Fields
Field Name | Description |
---|---|
id - ID!
|
ID of the contact |
account - Account
|
Account to which the contact is associated |
organization - Organization
|
Root organization to which the contact is associated |
phoneNumber - String!
|
Contact's receiving phone number |
name - String!
|
Name of the contact |
mappedNumber - String
|
Number the contact is mapped to if number pooling is enabled |
customFields - [ContactCustomField!]!
|
Custom field values on the contact |
createdAt - String!
|
Contact creation date |
lastUpdatedAt - String!
|
Time the contact was last updated |
lists - [List!]!
|
Lists to which this contact is a member |
blocked - Boolean!
|
If the contact is blocked |
Example
{
"id": "4",
"account": Account,
"organization": Organization,
"phoneNumber": "abc123",
"name": "xyz789",
"mappedNumber": "abc123",
"customFields": [ContactCustomField],
"createdAt": "abc123",
"lastUpdatedAt": "abc123",
"lists": [List],
"blocked": false
}
ContactCustomField
ContactCustomFieldInput
Conversation
Fields
Field Name | Description |
---|---|
messages - [Message!]!
|
Messages in conversation |
pageInfo - PageInfo!
|
Paging information on conversation |
Example
{
"messages": [Message],
"pageInfo": PageInfo
}
ID
Description
The ID
scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4"
) or integer (such as 4
) input value will be accepted as an ID.
Example
"4"
Inbox
Fields
Field Name | Description |
---|---|
account - Account
|
Account to which the contact is associated |
items - [InboxMessage!]!
|
Inbox Items for the account |
pageInfo - PageInfo!
|
Paging information on conversation |
Example
{
"account": Account,
"items": [InboxMessage],
"pageInfo": PageInfo
}
InboxMessage
Example
{
"contact": Contact,
"lastMessage": "abc123",
"isUnread": true,
"lastMessageTime": "xyz789"
}
Int
Description
The Int
scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.
Example
987
List
Fields
Field Name | Description |
---|---|
id - ID!
|
ID of the list |
createdBy - String!
|
Email of the user who created the list |
name - String!
|
Name of the list |
createdAt - String!
|
List creation date |
lastUpdatedAt - String!
|
Time the list was last updated |
account - Account
|
Account to which the list is associated |
size - Int!
|
Number of contacts on this list |
querySourceListName - String
|
The name of the list used as the basis for filtering based on a query; defaults to the All list |
queryNameSearchTerm - String
|
Filters list contacts by name |
queryCustomFields - [ListQueryRule!]
|
Filters list contacts by a rule |
Example
{
"id": "4",
"createdBy": "abc123",
"name": "abc123",
"createdAt": "abc123",
"lastUpdatedAt": "abc123",
"account": Account,
"size": 123,
"querySourceListName": "abc123",
"queryNameSearchTerm": "xyz789",
"queryCustomFields": [ListQueryRule]
}
ListQuery
Description
Outlines a query used in our contact center to define a list.
Fields
Input Field | Description |
---|---|
listName - String!
|
The name of the new list; must be unique per account |
querySourceListName - String
|
The name of the list used as the basis for filtering based on a query |
queryNameSearchTerm - String
|
Filters list contacts by name |
queryCustomFields - [ListQueryRuleInput!]
|
Filters list contacts by a rule |
Example
{
"listName": "xyz789",
"querySourceListName": "xyz789",
"queryNameSearchTerm": "abc123",
"queryCustomFields": [ListQueryRuleInput]
}
ListQueryOperator
Description
An operator used for comparison during list filtering
Values
Enum Value | Description |
---|---|
|
Contact value is greater than the query rule value |
|
Contact value is greater than or equal to the query rule value |
|
Contact value is less than the query rule value |
|
Contact value is less than or equal to the query rule value |
|
Contact value is numerically equal to the query rule value |
|
Contact value is before the query rule value; valid for Dates |
|
Contact value is after the query rule value; valid for Dates |
|
Contact value is equivalent to the query rule value; valid for text |
|
Contact value contains the query rule value; valid for text |
|
Contact value is not numerically equal to the query rule value |
|
Contact value does not contain the query rule value; valid for text |
Example
"gt"
ListQueryRule
Description
Describes a filtering rule for a list query
Fields
Field Name | Description |
---|---|
field - String!
|
A custom dynamic field used in a query; should already be defined on an organization |
operator - ListQueryOperator!
|
An operator used for comparison during filtering |
queryValue - String!
|
The JSON-serialized value of a query field |
Example
{
"field": "xyz789",
"operator": "gt",
"queryValue": "xyz789"
}
ListQueryRuleInput
Description
Describes a filtering rule for a list query
Fields
Input Field | Description |
---|---|
field - String!
|
A custom dynamic field used in a query; should already be defined on an organization |
operator - ListQueryOperator!
|
An operator used for comparison during filtering |
queryValue - String!
|
The JSON-serialized value of a query field |
Example
{
"field": "xyz789",
"operator": "gt",
"queryValue": "abc123"
}
Message
Fields
Field Name | Description |
---|---|
id - ID!
|
Volt assigned message ID |
legacyId - String!
|
Provider assigned message ID |
account - Account
|
Account from which the message originated |
organization - Organization
|
Organization from which the message originated |
toNumber - String!
|
Number to which the message was sent |
fromNumber - String!
|
Number from which the message originated |
status - String!
|
Message status (failed, sending, sent, or delivered) |
statusDescription - String!
|
Detailed description associated with message status |
media - [String!]!
|
Media sent with the message |
body - String!
|
Message body |
sentAt - String!
|
Time the message was sent to provider |
confirmedAt - String!
|
Time message status was confirmed by provider |
wave - Wave
|
Wave from which the message originated |
contact - Contact
|
Contact on the receiving end of the message |
errorCode - String
|
Error code associated with message failure (if applicable) |
Example
{
"id": 4,
"legacyId": "abc123",
"account": Account,
"organization": Organization,
"toNumber": "xyz789",
"fromNumber": "xyz789",
"status": "abc123",
"statusDescription": "abc123",
"media": ["xyz789"],
"body": "xyz789",
"sentAt": "xyz789",
"confirmedAt": "xyz789",
"wave": Wave,
"contact": Contact,
"errorCode": "abc123"
}
MessageSchedulingJob
Fields
Input Field | Description |
---|---|
scheduledTime - String!
|
Time the message will be sent in UTC (YYYY-MM-DD HH:MM:SS) |
messageBody - String!
|
Body of the message |
contactNumbers - [String!]!
|
Contacts associated with the message |
media - [String!]
|
Media to be sent with the message |
Example
{
"scheduledTime": "abc123",
"messageBody": "xyz789",
"contactNumbers": ["xyz789"],
"media": ["abc123"]
}
NewWaveStatus
Values
Enum Value | Description |
---|---|
|
Signifies a draft wave |
|
Signifies a scheduled wave |
Example
"draft"
Organization
Fields
Field Name | Description |
---|---|
id - ID!
|
ID of the organization tied to the access token |
companyName - String!
|
Name of the organization that owns the phone numbers used in messaging |
domain - String
|
Web domain of the organization |
size - String
|
Organization size as input during onboarding |
industry - String
|
Organization industry as input during onboarding |
createdAt - String!
|
Organization creation date |
lastUpdatedAt - String!
|
Time the organization was last updated |
isOnFreeTrial - Boolean!
|
If the organization is on a free trial |
isActive - Boolean!
|
If the organization is active (has not submit disabling request) |
Example
{
"id": "4",
"companyName": "abc123",
"domain": "abc123",
"size": "xyz789",
"industry": "xyz789",
"createdAt": "xyz789",
"lastUpdatedAt": "xyz789",
"isOnFreeTrial": false,
"isActive": false
}
PageInfo
String
Description
The String
scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
Example
"xyz789"
Wave
Fields
Field Name | Description |
---|---|
id - ID!
|
ID of the wave |
scheduledTime - String!
|
Time the wave is scheduled to begin processing |
name - String!
|
Name of the wave |
account - Account
|
Account from which the wave originated |
organization - Organization
|
Root organization from which the wave originiated |
body - String!
|
Message body |
media - [String!]!
|
Associated media |
sentBy - String!
|
Sending user |
lists - [List!]
|
Lists included in the wave |
totalMessages - Int!
|
Total message in the wave |
totalMessagesDelivered - Int!
|
Total messages delivered |
totalMessagesFailed - Int!
|
Total messages failed |
type - String!
|
Wave type (one of contact, account, or group) |
Example
{
"id": 4,
"scheduledTime": "xyz789",
"name": "abc123",
"account": Account,
"organization": Organization,
"body": "xyz789",
"media": ["abc123"],
"sentBy": "xyz789",
"lists": [List],
"totalMessages": 987,
"totalMessagesDelivered": 987,
"totalMessagesFailed": 987,
"type": "xyz789"
}
WaveSchedulingJob
Fields
Input Field | Description |
---|---|
waveName - String!
|
Name of the wave |
scheduledTime - String!
|
Time the wave will be sent in UTC (YYYY-MM-DD HH:MM:SS) |
messageBody - String!
|
Body of the wave |
listNames - [String!]!
|
Lists involved in the wave |
media - [String]
|
Media associated with the wave |
Example
{
"waveName": "xyz789",
"scheduledTime": "abc123",
"messageBody": "xyz789",
"listNames": ["xyz789"],
"media": ["abc123"]
}
WaveType
Values
Enum Value | Description |
---|---|
|
Signifies an account wave |
|
Signifies a group wave |
Example
"account"
Webhook
Fields
Field Name | Description |
---|---|
id - ID!
|
Webhook ID |
organization - Organization!
|
Root organization to which this webhook is associated |
url - String!
|
Webhook destination URL |
createdAt - String!
|
Webhook creation date |
lastUpdatedAt - String!
|
Time the webhook was last updated |
primaryPhone - String
|
Root phone number of a specific account with which webhook is registered; defaults to all if not specified |
eventTypes - [WebhookEventType!]
|
A list of events that will trigger a webhook; requires primaryPhone to be specified; defaults to all |
Example
{
"id": "4",
"organization": Organization,
"url": "xyz789",
"createdAt": "xyz789",
"lastUpdatedAt": "abc123",
"primaryPhone": "xyz789",
"eventTypes": ["MESSAGE_RECEIVED"]
}
WebhookEventType
Description
An event that a webhook can be configured to receive
Values
Enum Value | Description |
---|---|
|
An event triggered by an inbound message |
|
An event triggered by a delivery or failure receipt from a carrier |
|
An event triggered when a message is sent to a carrier |
|
An event triggered when an inbound phone call begins (only applicable with call forwarding) |
|
An event triggered when an inbound phone call ends (only applicable with call forwarding) |
Example
"MESSAGE_RECEIVED"