SendHub's REST-like API allows you to control & interact with your SendHub account programmatically.
Note: this documentation is in Beta and may be updated periodically.
Gets a list of contacts
See also: List Group Contacts
limit | integer [ 1 .. 1000 ] Default: 20 (Pagination) How many records to return |
offset | integer Default: 0 (Pagination) How many records to skip |
number | string Examples:
Filters contacts by their phone The value must be in the E.164 format and URI-encoded (eg. |
name | string Examples:
Filters contacts by their |
screened | boolean Examples:
Filters the contacts by their |
blocked | boolean Examples:
Filters the contacts by opt-out status (eg. if they texted |
ordering | string Enum: "name" "-name" "date_created" "-date_created" "date_modified" "-date_modified" "id" "-id" "blocked" "-blocked" "screened" "-screened" "is_owned" "-is_owned" "keyword" "-keyword" "number" "-number" Examples:
Sort contacts by a specified field (prepend a hyphen to reverse order) Must be a built-in contact field, not a custom field |
object (meta) | |
Array of objects (Contact) |
{- "meta": {
- "limit": 1,
- "next": "/v1/contacts?limit=1&offset=1",
- "offset": 0,
- "previous": null
}, - "objects": [
- {
- "blocked": false,
- "date_created": "2022-03-03T14:30:43.434051",
- "date_modified": "2022-03-09T17:00:32.795897",
- "deleted": false,
- "groups": [ ],
- "id": "116006957944371848",
- "id_str": "116006957944371848",
- "is_owned": true,
- "keyword": "acme",
- "landline": false,
- "local_gateway": false,
- "my-custom-field-2": "my-custom-field-2",
- "name": "ACME Alerts",
- "number": "+18002222228",
- "resource_uri": "/v1/contacts/116006957944371848",
- "screened": false
}
]
}
Creates or updates a contact
You can add arbitrary custom fields to a contact (see [Custom Fields](#todo: add link here))
Note: the contact's id
is required in the request payload if the supplied number
already exists in your contacts
This operation doesn't remove properties that aren't specified when updating an existing contact
blocked | boolean (blocked) Opt-out status (eg. if they texted |
contactId (string) or contactIdInt (string) (contactIdBoth) | |
keyword | string (contactKeyword) The keyword must be unique and is generated by the contact's name by default. Learn more about how contact keywords are used here. |
name required | string (contactName) [ 1 .. 128 ] characters The contact's name |
number required | string (contactNumber) ^\+1\d{10}$ The contact's phone number |
screened | boolean (screened) Whether the contact has been blocked by you |
Array of groupId (string) or groupIdInt (integer) or groupResourceUri (string) (listOfGroupIds) List of group resource URIs and/or IDs | |
property name* additional property | string or null (customField) Custom field(s) There's no limit to the number or size of custom fields (this may be subject to change in the future) except for a total limit of 65,535 bytes for the string of the json object that they're stored in Note: Custom fields may add very slight load time per contact. This is typically only noticable when listing many contacts that have a large amount of custom fields
Note: Setting the value to |
blocked | boolean (blocked) Opt-out status (eg. if they texted |
deleted | boolean (deleted) |
id_str | string (idStr) ^\d+$ Same as id but always a string |
is_owned | boolean (isOwned) This is used internally and may be expanded upon or removed in the future |
keyword | string (contactKeyword) The keyword must be unique and is generated by the contact's name by default. Learn more about how contact keywords are used here. |
name required | string (contactName) [ 1 .. 128 ] characters The contact's name |
number required | string (contactNumber) ^\+1\d{10}$ The contact's phone number |
screened | boolean (screened) Whether the contact has been blocked by you |
id | string (contactId) ^\d+$ The contact ID |
date_created | string (timestamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
date_modified | string (timestamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
local_gateway | boolean (localGateway) True if the contact is a SendHub line |
resource_uri | string (contactResourceUri) ^\/v\d+(\.\d+)*\/contacts\/\d+$ Resource URI for this contact |
groups | Array of strings (listOfGroupResourceUris) List of group resource URIs |
landline | boolean (landline) Whether SendHub has determined the contact's number is a landline number |
landline_override | boolean (landlineOverride) TODO: |
property name* additional property | string or null (customField) Custom field(s) There's no limit to the number or size of custom fields (this may be subject to change in the future) except for a total limit of 65,535 bytes for the string of the json object that they're stored in Note: Custom fields may add very slight load time per contact. This is typically only noticable when listing many contacts that have a large amount of custom fields
Note: Setting the value to |
{- "id": "116006957938283973",
- "name": "John Smith",
- "number": "+19198915828"
}
{- "blocked": false,
- "date_created": "2021-08-24T19:44:31.266590",
- "date_modified": "2021-08-24T19:44:31.266590",
- "deleted": false,
- "groups": [ ],
- "id": "116006957938283973",
- "id_str": "116006957938283973",
- "is_owned": true,
- "keyword": "john",
- "local_gateway": false,
- "name": "John Smith",
- "number": "+19198915828",
- "resource_uri": "/v1/contacts/116006957938283973",
- "screened": false,
- "landline": false,
- "landline_override": false,
- "contact_id": "116006957938283973"
}
Creates, updates, or deletes multiple contacts in one request
Array of upsertContactRequestWithoutId (object) or upsertContactRequestWithoutId (object) (upsertContactRequest) |
{- "objects": [
- {
- "blocked": true,
- "id": "string",
- "keyword": "john",
- "name": "string",
- "number": "string",
- "screened": true,
- "groups": [
- "string"
], - "property1": "string",
- "property2": "string"
}
]
}
[- {
- "blocked": true,
- "deleted": true,
- "id_str": "string",
- "is_owned": true,
- "keyword": "john",
- "name": "string",
- "number": "string",
- "screened": true,
- "id": "string",
- "date_created": "2021-08-01T03:48:55.350453",
- "date_modified": "2021-08-01T03:48:55.350453",
- "local_gateway": true,
- "resource_uri": "/v1/contacts/116006957938017590",
- "groups": [
- "/v1/groups/115999753870991332"
], - "landline": true,
- "landline_override": true,
- "property1": "string",
- "property2": "string"
}
]
Retrieves a contact by its id
required | integer or string The contact ID |
blocked | boolean (blocked) Opt-out status (eg. if they texted |
deleted | boolean (deleted) |
id_str | string (idStr) ^\d+$ Same as id but always a string |
is_owned | boolean (isOwned) This is used internally and may be expanded upon or removed in the future |
keyword | string (contactKeyword) The keyword must be unique and is generated by the contact's name by default. Learn more about how contact keywords are used here. |
name required | string (contactName) [ 1 .. 128 ] characters The contact's name |
number required | string (contactNumber) ^\+1\d{10}$ The contact's phone number |
screened | boolean (screened) Whether the contact has been blocked by you |
id | string (contactId) ^\d+$ The contact ID |
date_created | string (timestamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
date_modified | string (timestamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
local_gateway | boolean (localGateway) True if the contact is a SendHub line |
resource_uri | string (contactResourceUri) ^\/v\d+(\.\d+)*\/contacts\/\d+$ Resource URI for this contact |
groups | Array of strings (listOfGroupResourceUris) List of group resource URIs |
landline | boolean (landline) Whether SendHub has determined the contact's number is a landline number |
landline_override | boolean (landlineOverride) TODO: |
property name* additional property | string or null (customField) Custom field(s) There's no limit to the number or size of custom fields (this may be subject to change in the future) except for a total limit of 65,535 bytes for the string of the json object that they're stored in Note: Custom fields may add very slight load time per contact. This is typically only noticable when listing many contacts that have a large amount of custom fields
Note: Setting the value to |
{- "blocked": false,
- "date_created": "2021-08-24T19:44:31.266590",
- "date_modified": "2021-08-24T19:44:31.266590",
- "deleted": false,
- "groups": [ ],
- "id": "116006957938283973",
- "id_str": "116006957938283973",
- "is_owned": true,
- "keyword": "john",
- "local_gateway": false,
- "name": "John Smith",
- "number": "+19198915828",
- "resource_uri": "/v1/contacts/116006957938283973",
- "screened": false,
- "landline": false,
- "landline_override": false
}
Updates an individual contact referenced by its id
You can add arbitrary custom fields to a contact (see Custom Fields)
Note: this is a replace operation; any properties the contact already has that you don't specify in your request will be removed
required | integer or string The contact ID |
blocked | boolean (blocked) Opt-out status (eg. if they texted |
required | contactId (string) or contactIdInt (string) (contactIdBoth) |
keyword | string (contactKeyword) The keyword must be unique and is generated by the contact's name by default. Learn more about how contact keywords are used here. |
name required | string (contactName) [ 1 .. 128 ] characters The contact's name |
number required | string (contactNumber) ^\+1\d{10}$ The contact's phone number |
screened | boolean (screened) Whether the contact has been blocked by you |
Array of groupId (string) or groupIdInt (integer) or groupResourceUri (string) (listOfGroupIds) List of group resource URIs and/or IDs | |
property name* additional property | string or null (customField) Custom field(s) There's no limit to the number or size of custom fields (this may be subject to change in the future) except for a total limit of 65,535 bytes for the string of the json object that they're stored in Note: Custom fields may add very slight load time per contact. This is typically only noticable when listing many contacts that have a large amount of custom fields
Note: Setting the value to |
blocked | boolean (blocked) Opt-out status (eg. if they texted |
deleted | boolean (deleted) |
id_str | string (idStr) ^\d+$ Same as id but always a string |
is_owned | boolean (isOwned) This is used internally and may be expanded upon or removed in the future |
keyword | string (contactKeyword) The keyword must be unique and is generated by the contact's name by default. Learn more about how contact keywords are used here. |
name required | string (contactName) [ 1 .. 128 ] characters The contact's name |
number required | string (contactNumber) ^\+1\d{10}$ The contact's phone number |
screened | boolean (screened) Whether the contact has been blocked by you |
id | string (contactId) ^\d+$ The contact ID |
date_created | string (timestamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
date_modified | string (timestamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
local_gateway | boolean (localGateway) True if the contact is a SendHub line |
resource_uri | string (contactResourceUri) ^\/v\d+(\.\d+)*\/contacts\/\d+$ Resource URI for this contact |
groups | Array of strings (listOfGroupResourceUris) List of group resource URIs |
landline | boolean (landline) Whether SendHub has determined the contact's number is a landline number |
landline_override | boolean (landlineOverride) TODO: |
contactId (string) or contactIdInt (string) (contactIdBoth) | |
property name* additional property | string or null (customField) Custom field(s) There's no limit to the number or size of custom fields (this may be subject to change in the future) except for a total limit of 65,535 bytes for the string of the json object that they're stored in Note: Custom fields may add very slight load time per contact. This is typically only noticable when listing many contacts that have a large amount of custom fields
Note: Setting the value to |
{- "id": "116006957938283973",
- "name": "John Smith",
- "number": "+19198915828"
}
{- "blocked": false,
- "date_created": "2021-08-24T19:44:31.266590",
- "date_modified": "2021-08-24T19:44:31.266590",
- "deleted": false,
- "groups": [ ],
- "id": "116006957938283973",
- "id_str": "116006957938283973",
- "is_owned": true,
- "keyword": "john",
- "local_gateway": false,
- "name": "John Smith",
- "number": "+19198915828",
- "resource_uri": "/v1/contacts/116006957938283973",
- "screened": false,
- "landline": false,
- "landline_override": false,
- "contact_id": "116006957938283973"
}
Lists contacts in a specified group
group_id required | string The group ID |
limit | integer [ 1 .. 1000 ] Default: 20 (Pagination) How many records to return |
offset | integer Default: 0 (Pagination) How many records to skip |
number | string Examples:
Filters contacts by their phone The value must be in the E.164 format and URI-encoded (eg. |
name | string Examples:
Filters contacts by their |
screened | boolean Examples:
Filters the contacts by their |
blocked | boolean Examples:
Filters the contacts by opt-out status (eg. if they texted |
ordering | string Enum: "name" "-name" "date_created" "-date_created" "date_modified" "-date_modified" "id" "-id" "blocked" "-blocked" "screened" "-screened" "is_owned" "-is_owned" "keyword" "-keyword" "number" "-number" Examples:
Sort contacts by a specified field (prepend a hyphen to reverse order) Must be a built-in contact field, not a custom field |
object (meta) | |
Array of objects (Contact) |
{- "meta": {
- "limit": 20,
- "next": null,
- "offset": 0,
- "previous": null
}, - "objects": [
- {
- "blocked": false,
- "date_created": "2021-08-24T19:44:31.266590",
- "date_modified": "2021-08-24T19:44:31.266590",
- "deleted": false,
- "groups": [ ],
- "id": "116006957938017590",
- "id_str": "116006957938017590",
- "is_owned": true,
- "keyword": "bob",
- "local_gateway": false,
- "name": "Bob Parker",
- "number": "+12015716227",
- "resource_uri": "/v1/contacts/116006957938017590",
- "screened": false,
- "landline": false,
- "landline_override": false
}
]
}
Gets a list of groups
limit | integer [ 1 .. 1000 ] Default: 20 (Pagination) How many records to return |
offset | integer Default: 0 (Pagination) How many records to skip |
object (meta) | |
Array of objects (group) |
{- "meta": {
- "limit": 20,
- "next": null,
- "offset": 0,
- "previous": null
}, - "objects": [
- {
- "date_created": "2021-08-24T19:44:31.266590",
- "date_modified": "2021-08-24T19:44:31.266590",
- "deleted": false,
- "id": "115999753870990933",
- "id_str": "115999753870990933",
- "is_shared": false,
- "name": "ACME Product Alerts",
- "parent_id": null,
- "parent_user_id": null,
- "permissions": "write",
- "resource_uri": "/v1/groups/115999753870990933",
- "share_invite_count": 0,
- "size": 1,
- "slug": "alerts",
- "text_to_subscribe": true,
- "ttjResponse": "Thanks for opting in!\nOpt-out anytime by replying UNSUBSCRIBE ALERTS"
}, - {
- "date_created": "2021-08-24T19:44:31.266590",
- "date_modified": "2021-08-24T19:44:31.266590",
- "deleted": false,
- "id": "115999753870990932",
- "id_str": "115999753870990932",
- "is_shared": false,
- "name": "New Leads",
- "parent_id": null,
- "parent_user_id": null,
- "permissions": "write",
- "resource_uri": "/v1/groups/115999753870990932",
- "share_invite_count": 0,
- "size": 1,
- "slug": "leads",
- "text_to_subscribe": false,
- "ttjResponse": "You are now subscribed."
}
]
}
Creates a group
name required | string (groupName) [ 1 .. 128 ] characters The group's name |
is_shared | boolean (isShared) Deprecated Whether the group is shared between the lines |
slug | string (groupSlug) The "keyword" used to text-to-join Defaults to the group name lowercased, without any spaces and not duplicate by appending an incrementing number if needed |
mediums | string or null (groupMediums) Deprecated This is used internally and may be expanded upon or removed in the future |
permissions | string or null (groupPermissions) Default: "write" Value: "write" |
text_to_subscribe | boolean (textToSubscribe) Default: false Whether to enable text-to-join functionality for this group |
ttjResponse | string (ttjResponse) <= 70 Default: "You are now subscribed." A custom response sent when someone texts-to-join this group |
date_created | string (timestamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
date_modified | string (timestamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
deleted | boolean (deleted) |
id | string (groupId) ^\d+$ The group ID |
id_str | string (idStr) ^\d+$ Same as id but always a string |
is_shared | boolean (isShared) Deprecated Whether the group is shared between the lines |
name | string (groupName) [ 1 .. 128 ] characters The group's name |
parent_id | string or null (nullableString) |
parent_user_id | string or null (nullableString) |
permissions | string or null (groupPermissions) Default: "write" Value: "write" |
resource_uri | string (groupResourceUri) ^\/v\d+(\.\d+)*\/groups\/\d+$ Resource URI for this group |
share_invite_count | integer or null (nullableInteger) |
size | integer or null (groupSize) The number of contacts that are a memeber of this group |
slug | string (groupSlug) The "keyword" used to text-to-join Defaults to the group name lowercased, without any spaces and not duplicate by appending an incrementing number if needed |
text_to_subscribe | boolean (textToSubscribe) Default: false Whether to enable text-to-join functionality for this group |
ttjResponse | string (ttjResponse) <= 70 Default: "You are now subscribed." A custom response sent when someone texts-to-join this group |
mediums | string or null (groupMediums) Deprecated This is used internally and may be expanded upon or removed in the future |
{- "name": "ACME Product Alerts"
}
{- "date_created": "2021-08-24T19:44:31.266590",
- "date_modified": "2021-08-24T19:44:31.266590",
- "deleted": false,
- "id": "115999753870990933",
- "id_str": "115999753870990933",
- "is_shared": false,
- "name": "ACME Product Alerts",
- "parent_id": null,
- "parent_user_id": null,
- "permissions": "write",
- "resource_uri": "/v1/groups/115999753870990933",
- "share_invite_count": null,
- "size": null,
- "slug": "alerts",
- "text_to_subscribe": true,
- "ttjResponse": "Thanks for opting in!\nOpt-out anytime by replying UNSUBSCRIBE ALERTS",
- "mediums": null
}
Gets an individual group by its id
group_id required | string The group ID |
date_created | string (timestamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
date_modified | string (timestamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
deleted | boolean (deleted) |
id | string (groupId) ^\d+$ The group ID |
id_str | string (idStr) ^\d+$ Same as id but always a string |
is_shared | boolean (isShared) Deprecated Whether the group is shared between the lines |
name | string (groupName) [ 1 .. 128 ] characters The group's name |
parent_id | string or null (nullableString) |
parent_user_id | string or null (nullableString) |
permissions | string or null (groupPermissions) Default: "write" Value: "write" |
resource_uri | string (groupResourceUri) ^\/v\d+(\.\d+)*\/groups\/\d+$ Resource URI for this group |
share_invite_count | integer or null (nullableInteger) |
size | integer or null (groupSize) The number of contacts that are a memeber of this group |
slug | string (groupSlug) The "keyword" used to text-to-join Defaults to the group name lowercased, without any spaces and not duplicate by appending an incrementing number if needed |
text_to_subscribe | boolean (textToSubscribe) Default: false Whether to enable text-to-join functionality for this group |
ttjResponse | string (ttjResponse) <= 70 Default: "You are now subscribed." A custom response sent when someone texts-to-join this group |
{- "date_created": "2021-08-24T19:44:31.266590",
- "date_modified": "2021-08-24T19:44:31.266590",
- "deleted": false,
- "id": "115999753870990933",
- "id_str": "115999753870990933",
- "is_shared": false,
- "name": "ACME Product Alerts",
- "parent_id": null,
- "parent_user_id": null,
- "permissions": "write",
- "resource_uri": "/v1/groups/115999753870990933",
- "share_invite_count": 0,
- "size": 1,
- "slug": "alerts",
- "text_to_subscribe": true,
- "ttjResponse": "Thanks for opting in!\nOpt-out anytime by replying UNSUBSCRIBE ALERTS"
}
Updates an individual group referenced by its id
Note: this is a replace operation; any properties the group already has that you don't specify in your request will be set to their defaults
group_id required | string The group ID |
name required | string (groupName) [ 1 .. 128 ] characters The group's name |
is_shared | boolean (isShared) Deprecated Whether the group is shared between the lines |
slug | string (groupSlug) The "keyword" used to text-to-join Defaults to the group name lowercased, without any spaces and not duplicate by appending an incrementing number if needed |
mediums | string or null (groupMediums) Deprecated This is used internally and may be expanded upon or removed in the future |
permissions | string or null (groupPermissions) Default: "write" Value: "write" |
text_to_subscribe | boolean (textToSubscribe) Default: false Whether to enable text-to-join functionality for this group |
ttjResponse | string (ttjResponse) <= 70 Default: "You are now subscribed." A custom response sent when someone texts-to-join this group |
id required | string (contactId) ^\d+$ The contact ID |
date_created | string (timestamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
date_modified | string (timestamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
deleted | boolean (deleted) |
id | string (groupId) ^\d+$ The group ID |
id_str | string (idStr) ^\d+$ Same as id but always a string |
is_shared | boolean (isShared) Deprecated Whether the group is shared between the lines |
name | string (groupName) [ 1 .. 128 ] characters The group's name |
parent_id | string or null (nullableString) |
parent_user_id | string or null (nullableString) |
permissions | string or null (groupPermissions) Default: "write" Value: "write" |
resource_uri | string (groupResourceUri) ^\/v\d+(\.\d+)*\/groups\/\d+$ Resource URI for this group |
share_invite_count | integer or null (nullableInteger) |
size | integer or null (groupSize) The number of contacts that are a memeber of this group |
slug | string (groupSlug) The "keyword" used to text-to-join Defaults to the group name lowercased, without any spaces and not duplicate by appending an incrementing number if needed |
text_to_subscribe | boolean (textToSubscribe) Default: false Whether to enable text-to-join functionality for this group |
ttjResponse | string (ttjResponse) <= 70 Default: "You are now subscribed." A custom response sent when someone texts-to-join this group |
mediums | string or null (groupMediums) Deprecated This is used internally and may be expanded upon or removed in the future |
{- "id": "115999753870990933",
- "name": "ACME Product Alerts"
}
{- "date_created": "2021-08-24T19:44:31.266590",
- "date_modified": "2021-08-24T19:44:31.266590",
- "deleted": false,
- "id": "115999753870990933",
- "id_str": "115999753870990933",
- "is_shared": false,
- "name": "ACME Product Alerts",
- "parent_id": null,
- "parent_user_id": null,
- "permissions": "write",
- "resource_uri": "/v1/groups/115999753870990933",
- "share_invite_count": 0,
- "size": 1,
- "slug": "alerts",
- "text_to_subscribe": true,
- "ttjResponse": "Thanks for opting in!\nOpt-out anytime by replying UNSUBSCRIBE ALERTS",
- "mediums": null
}
Lists contacts in a specified group
group_id required | string The group ID |
limit | integer [ 1 .. 1000 ] Default: 20 (Pagination) How many records to return |
offset | integer Default: 0 (Pagination) How many records to skip |
number | string Examples:
Filters contacts by their phone The value must be in the E.164 format and URI-encoded (eg. |
name | string Examples:
Filters contacts by their |
screened | boolean Examples:
Filters the contacts by their |
blocked | boolean Examples:
Filters the contacts by opt-out status (eg. if they texted |
ordering | string Enum: "name" "-name" "date_created" "-date_created" "date_modified" "-date_modified" "id" "-id" "blocked" "-blocked" "screened" "-screened" "is_owned" "-is_owned" "keyword" "-keyword" "number" "-number" Examples:
Sort contacts by a specified field (prepend a hyphen to reverse order) Must be a built-in contact field, not a custom field |
object (meta) | |
Array of objects (Contact) |
{- "meta": {
- "limit": 20,
- "next": null,
- "offset": 0,
- "previous": null
}, - "objects": [
- {
- "blocked": false,
- "date_created": "2021-08-24T19:44:31.266590",
- "date_modified": "2021-08-24T19:44:31.266590",
- "deleted": false,
- "groups": [ ],
- "id": "116006957938017590",
- "id_str": "116006957938017590",
- "is_owned": true,
- "keyword": "bob",
- "local_gateway": false,
- "name": "Bob Parker",
- "number": "+12015716227",
- "resource_uri": "/v1/contacts/116006957938017590",
- "screened": false,
- "landline": false,
- "landline_override": false
}
]
}
Add and/or remove contacts from a group
group_id required | string The group ID |
required | Array of contactId (string) or contactIdInt (string) (contactIdBoth) Contact ids that you want to add to this group |
{- "add": [
- "116006957942993390",
- "116006957943010580",
- "116006957938017580"
]
}
{- "add": [
- "116006957938017580"
], - "errors": { },
- "remove": [
- "116006957942993390",
- "116006957943010580"
]
}
Gets a list of inbox threads
Note: the URL must include the forward-slash after /v1/inbox
The next
field in the meta
object doesn't include this forward-slash in the URI it provides
We suggest constructing your URIs via your code and using the next
field to determine if there's a next page (eg. if next
is null)
limit | integer [ 1 .. 1000 ] Default: 20 (Pagination) How many records to return |
offset | integer Default: 0 (Pagination) How many records to skip |
object (meta) | |
Array of objects (inboxThread) |
{- "meta": {
- "limit": 1,
- "next": "/v1/inbox?limit=1&offset=1",
- "offset": 0,
- "previous": null,
- "unread": 9
}, - "objects": [
- {
- "contacts": [
- {
- "blocked": false,
- "deleted": false,
- "groups": [
- "ACME Alerts"
], - "id": 116006957938017580,
- "id_str": "116006957938017590",
- "is_owned": true,
- "keyword": "johnsmithy",
- "name": "John Smithy",
- "number": "+12015716227",
- "screened": false
}
], - "created_at": "2020-03-27T22:50:35.283171",
- "deleted": false,
- "direction": "incoming",
- "groups": [ ],
- "id": "115995236880212923",
- "labels": [
- "starred"
], - "last_read_at": "2022-03-08T20:38:03.476505",
- "modified_at": "2022-03-09T23:21:46.661440",
- "resource_uri": "/v1/threads/115988808193508637",
- "scheduled_at": null,
- "sent": "2022-03-09T23:21:46.135757",
- "text": "Hey got 'em\nFile: http://sh.gl/CNpLW5",
- "threadId": "115988808193508637",
- "type": "message-in",
- "unread": true
}
]
}
Gets an individual thread by its id
thread_id required | integer <int64> >= 1 The thread ID |
object (threadMeta) | |
Array of objects |
{- "meta": {
- "limit": 20,
- "next": null,
- "offset": 0,
- "previous": null,
- "hasUnread": false,
- "labels": [
- "starred"
]
}, - "objects": [
- {
- "attachments": [
- {
- "filename": "SendHub_Logo.png",
- "id": "336909160859829608",
- "isWriteable": true,
- "mimetype": "image/png",
- "size": 18884,
}
], - "contacts": [ ],
- "deleted": false,
- "direction": "to",
- "groups": [
- {
- "check_all": false,
- "deleted": false,
- "id": "115999753870990933",
- "id_str": "115999753870990933",
- "mediums": "[\"sms\"]",
- "name": "ACME Product Alerts",
- "slug": "alerts",
- "text_to_subscribe": true,
- "ttjResponse": "Thanks for opting in!\nOpt-out anytime by replying UNSUBSCRIBE ALERTS"
}
], - "hash": "",
- "id": "115995236870818976",
- "modified_at": "2021-08-24T19:44:31.266590",
- "resource_uri": "/v1/messages/115995236870818976",
- "scheduled_at": null,
- "sent": "2021-08-24T19:44:31.266590",
- "text": "Short Link?\nFile: http://sh.gl/IuvJma",
- "type": "message-out",
- "unread": false
}, - {
- "attachments": [ ],
- "contacts": [ ],
- "deleted": false,
- "direction": "to",
- "groups": [
- {
- "check_all": false,
- "deleted": false,
- "id": "115999753870990933",
- "id_str": "115999753870990933",
- "mediums": "[\"sms\"]",
- "name": "ACME Product Alerts",
- "slug": "alerts",
- "text_to_subscribe": true,
- "ttjResponse": "Thanks for opting in!\nOpt-out anytime by replying UNSUBSCRIBE ALERTS"
}
], - "hash": "",
- "id": "115995236870818148",
- "modified_at": "2021-08-24T19:44:31.266590",
- "resource_uri": "/v1/messages/115995236870818148",
- "scheduled_at": "2021-08-24T19:44:31",
- "sent": "2021-08-24T19:44:31.266590",
- "shortlink": "",
- "text": "Hello,\n\nThis is a scheduled alert.",
- "type": "message-out",
- "unread": false
}, - {
- "attachments": [ ],
- "contacts": [ ],
- "deleted": false,
- "direction": "to",
- "groups": [
- {
- "check_all": false,
- "deleted": false,
- "id": "115999753870990933",
- "id_str": "115999753870990933",
- "mediums": "[\"sms\"]",
- "name": "ACME Product Alerts",
- "slug": "alerts",
- "text_to_subscribe": true,
- "ttjResponse": "Thanks for opting in!\nOpt-out anytime by replying UNSUBSCRIBE ALERTS"
}
], - "hash": "",
- "id": "115995236870818517",
- "modified_at": "2021-08-24T19:44:31.266590",
- "resource_uri": "/v1/messages/115995236870818517",
- "scheduled_at": null,
- "sent": "2021-08-24T19:44:31.266590",
- "shortlink": "",
- "text": "Hello,\n\nThis is our second product alert.",
- "type": "message-out",
- "unread": false
}, - {
- "attachments": [ ],
- "contacts": [ ],
- "deleted": false,
- "direction": "to",
- "groups": [
- {
- "check_all": false,
- "deleted": false,
- "id": "115999753870990933",
- "id_str": "115999753870990933",
- "mediums": "[\"sms\"]",
- "name": "ACME Product Alerts",
- "slug": "alerts",
- "text_to_subscribe": true,
- "ttjResponse": "Thanks for opting in!\nOpt-out anytime by replying UNSUBSCRIBE ALERTS"
}
], - "hash": "",
- "id": "115995236870812489",
- "modified_at": "2021-08-24T19:44:31.266590",
- "resource_uri": "/v1/messages/115995236870812489",
- "scheduled_at": null,
- "sent": "2021-08-24T19:44:31.266590",
- "shortlink": "",
- "text": "Hello,\n\nThis is our first product alert.",
- "type": "message-out",
- "unread": false
}
]
}
Deletes an individual thread by its id
thread_id required | integer <int64> >= 1 The thread ID |
message | string |
{- "message": "Thread successfully deleted"
}
Sends an SMS (or MMS based on your plan) to a list of contacts, phone numbers or groups.
text required | string (messageText) [ 1 .. 1600 ] The text content of the message Note: Be sure you understand SMS segmenting ((learn more here)[https://sendhub.force.com/support/s/article/how-am-i-billed-for-long-messages]) |
scheduled_at | string or null (scheduledAt) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[-+]\d{4}... The date & time in UTC to schedule the message to be sent at. Note: it must be exactly 24-characters long and in this format: |
Attachment via URL (object) or Attachment via Base64-encoded file (object) (mms) | |
required | Array of (contactId (string) or contactIdInt (string)) or strings (messageContactIdsOrNumbers) [ 1 .. 25 ] items |
acknowledgment required | string or null (acknowledgment) non-empty |
required | Array of objects unique |
created_at required | string (messageCreatedAt) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ UTC timestamp of when the message was created |
deleted required | boolean (deleted) |
direction required | string (directionToFrom) Enum: "to" "from" The direction of the message; |
force_shortlink_creation required | boolean (forceShortlinkCreation) If |
required | Array of objects unique |
id required | string non-empty |
id_is_thread_id required | boolean |
message_id required | string non-empty |
required | object |
modified_at required | string non-empty |
resource_uri required | string non-empty |
scheduled_at required | string or null (scheduledAt) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[-+]\d{4}... The date & time in UTC to schedule the message to be sent at. Note: it must be exactly 24-characters long and in this format: |
sent | string or null (sent) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ The date & time in UTC the message was sent at. |
shortlink required | string non-empty |
text required | string non-empty |
thread_id required | string non-empty |
type required | string non-empty |
unread | boolean or null (messageUnread) Whether or not the message is marked as unread Changing this will mark the corresponding thread as read or unread |
via_shortcode required | boolean |
{- "contacts": [
- "+18884445555"
], - "text": "Hello there"
}
{- "acknowledgment": "Message queued for sending.",
- "contacts": [
- {
- "blocked": false,
- "date_created": "2020-04-08T17:57:38",
- "date_modified": "2021-08-25T06:41:06",
- "deleted": false,
- "extra_info": "{}",
- "id": "116006957938283973",
- "id_str": "116006957938283973",
- "is_owned": true,
- "keyword": "deleted116006957938283973",
- "name": "John Smith",
- "number": "+19198915828",
- "screened": false,
- "smsGateway": "sendhub",
- "user_id": "283014186889381821"
}
], - "created_at": "2021-09-07T19:28:39.099805",
- "deleted": false,
- "direction": "to",
- "force_shortlink_creation": false,
- "groups": [
- {
- "check_all": false,
- "date_created": "2021-08-10T18:33:57",
- "date_modified": "2021-08-30T18:23:00",
- "deleted": false,
- "id": "115999753870991332",
- "id_str": "115999753870991332",
- "is_shared": false,
- "mediums": "[\"sms\"]",
- "name": "ACME Alerts",
- "permissions": "write",
- "slug": "alerts",
- "text_to_subscribe": true,
- "ttjResponse": "Thanks for opting in!\nOpt-out anytime by replying UNSUBSCRIBE ALERTS",
- "user_id": "283014186889381821"
}
], - "id": "115988808197247577",
- "id_is_thread_id": true,
- "message_id": "115995236872293501",
- "mms": {
- "filename": "funny_video.mp4"
}, - "modified_at": "2021-09-07T19:28:39.123132",
- "resource_uri": "/v1/threads/115988808197247577",
- "scheduled_at": null,
- "sent": "2021-09-07T19:28:39.099805",
- "text": "Hey got 'em'\nFile: http://sh.gl/5vUtCa",
- "thread_id": "115988808197247577",
- "type": "message-out",
- "unread": null,
- "via_shortcode": false
}
Retrieves an existing message by its Id
message_id required | string The message ID |
acknowledgment required | string or null (acknowledgment) non-empty |
required | Array of objects (messageNestedContact) |
created_at required | string (createdTs) non-empty ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
deleted required | boolean (deleted) |
direction required | string (direction) Enum: "outbound-api" "incoming" The direction of the message; |
force_shortlink_creation required | boolean (forceShortlinkCreation) If |
required | Array of objects (messageNestedGroup) |
id required | string (dynamicThreadId) ^\d+$ If |
id_is_thread_id required | boolean (idIsThreadId) Determines whether |
message_id required | string (messageId) ^\d+$ The message ID |
modified_at required | string (modifiedTs) non-empty ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
resource_uri required | string (messageResourceUri) ^\/v\d+(\.\d+)*\/messages\/\d+$ Resource URI for this message |
scheduled_at required | string or null (scheduledAt) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[-+]\d{4}... The date & time in UTC to schedule the message to be sent at. Note: it must be exactly 24-characters long and in this format: |
sent required | string or null (sent) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ The date & time in UTC the message was sent at. |
shortlink required | string (shortlink) ^$|^https?://sh.gl/[a-zA-Z0-9]+$ A short link generated by SendHub when you send a message with an attachment or with |
text required | string (messageText) [ 1 .. 1600 ] The text content of the message Note: Be sure you understand SMS segmenting ((learn more here)[https://sendhub.force.com/support/s/article/how-am-i-billed-for-long-messages]) |
thread_id required | string (threadId) ^\d+$ The thread ID |
type required | string (messageType) Enum: "voicecall-in" "voicecall-out" "voicecall-missed" "voicecall-voicemail" "message-out" "message-in" The type of the message (if on the thread object, then the type of the last message in the thread) |
unread required | boolean or null (messageUnread) Whether or not the message is marked as unread Changing this will mark the corresponding thread as read or unread |
via_shortcode required | boolean (messageViaShortcode) Send the message via your account's Short Code number (requires a plan with Short Code access (learn more here)[https://sendhub.force.com/support/s/article/shortcode]) |
object or object (mmsOnlyFilename) |
{- "acknowledgment": "Message queued for sending.",
- "contacts": [
- {
- "blocked": true,
- "deleted": true,
- "id": "string",
- "id_str": "string",
- "is_owned": true,
- "keyword": "john",
- "name": "string",
- "number": "string",
- "screened": true,
- "user_id": "string",
- "date_created": "2021-08-01T03:48:34",
- "date_modified": "2021-08-01T03:48:34",
- "extra_info": "string",
- "smsGateway": "sendhub"
}
], - "created_at": "string",
- "deleted": true,
- "direction": "outbound-api",
- "force_shortlink_creation": true,
- "groups": [
- {
- "id": "string",
- "id_str": "string",
- "name": "string",
- "slug": "string",
- "text_to_subscribe": false,
- "mediums": "string",
- "check_all": true,
- "deleted": true,
- "ttjResponse": "You are now subscribed.",
- "date_created": "2021-08-01T03:48:34",
- "date_modified": "2021-08-01T03:48:34",
- "is_shared": true,
- "permissions": "write",
- "user_id": "string"
}
], - "id": "string",
- "id_is_thread_id": true,
- "message_id": "string",
- "modified_at": "string",
- "resource_uri": "/v1/messages/123",
- "scheduled_at": "string",
- "sent": "string",
- "shortlink": "string",
- "text": "string",
- "thread_id": "string",
- "type": "voicecall-in",
- "unread": true,
- "via_shortcode": true,
}
Updates a scheduled message
message_id required | string The message ID |
text required | string (messageText) [ 1 .. 1600 ] The text content of the message Note: Be sure you understand SMS segmenting ((learn more here)[https://sendhub.force.com/support/s/article/how-am-i-billed-for-long-messages]) |
scheduled_at | string or null (scheduledAt) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[-+]\d{4}... The date & time in UTC to schedule the message to be sent at. Note: it must be exactly 24-characters long and in this format: |
Attachment via URL (object) or Attachment via Base64-encoded file (object) (mms) | |
required | Array of (contactId (string) or contactIdInt (string)) or strings (messageContactIdsOrNumbers) [ 1 .. 25 ] items |
text required | string (messageText) [ 1 .. 1600 ] The text content of the message Note: Be sure you understand SMS segmenting ((learn more here)[https://sendhub.force.com/support/s/article/how-am-i-billed-for-long-messages]) |
scheduled_at | string or null (scheduledAt) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[-+]\d{4}... The date & time in UTC to schedule the message to be sent at. Note: it must be exactly 24-characters long and in this format: |
Attachment via URL (object) or Attachment via Base64-encoded file (object) (mms) | |
required | Array of (contactId (string) or contactIdInt (string)) or strings (messageContactIdsOrNumbers) [ 1 .. 25 ] items |
{- "contacts": [
- "+18884445555"
], - "text": "Hello there"
}
{- "text": "string",
- "scheduled_at": "string",
- "contacts": [ ]
}
Deletes an individual message by its id
message_id required | string The message ID |
message | string Success message |
{- "message": "Record successfully deleted"
}
Gets your line's Settings
api_key | string non-empty |
auto_attendant_greeting_url | string or null |
auto_upgrade_plan | boolean |
automated_sms_response | string or null <= 160 |
conference_lines_enabled | boolean |
createdTs | string (createdTs) non-empty ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
customer_id | string or null (customerId) |
deleted | boolean or null (deletedNullable) |
desktop_notifications | boolean |
disable_incoming_sms | boolean |
email_calling_notifications | boolean |
ent_toll_free_enabled | boolean or null |
enterprise_id | string (enterpriseId) ^\d+$ The enterprise ID |
firstPaymentTs | string or null (nullableStringRO) |
hide_link_in_bulk_messages | boolean |
id | string (internalId) ^\d+$ This is an internal ID and is not the same as a user ID (SendHub line) |
image | string or null (nullableStringRO) |
is_verified_email | boolean |
mfa_enabled | boolean or null |
mfa_enforced | boolean |
mixpanelid | string or null Deprecated This is used internally and may be expanded upon or removed in the future |
modifiedTs | string (modifiedTs) non-empty ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
month_start | string (dateRO) ^\d{4}-\d{2}-\d{2}$ |
name | string (userName) [ 1 .. 120 ] characters User's (SendHub line's) name |
onboarding_mobile_finished | boolean (onboardingMobileFinished) Deprecated This is used internally and may be expanded upon or removed in the future |
onboarding_web_finished | boolean (onboardingWebFinished) Deprecated This is used internally and may be expanded upon or removed in the future |
payment_period_end | string (dateRO) ^\d{4}-\d{2}-\d{2}$ |
payment_period_start | string (dateRO) ^\d{4}-\d{2}-\d{2}$ |
pending_email | string or null (nullableStringRO) |
pending_phone_number | string or null (nullableStringRO) |
phone_number | string (personalCell) ^\+1\d{10}$ The |
object | |
pusher_key | string (pusherKey) non-empty |
registration_status | string (registrationStatus) non-empty Enum: "created" "email_verified" "payment_method_absent" "completed" |
resource_uri | string Value: "/settings" |
send_only_via_short_code | boolean |
send_only_via_toll_free | boolean |
settings_json | string non-empty |
siftScienceLabel | string or null |
signature | string or null non-empty |
sms_forwarding | string or null non-empty |
sms_fwd_help | boolean |
sms_webhook_url | string or null |
sound_notifications | boolean |
toll_free_number | string or null |
toll_free_primary | boolean |
transcribe_voice_mails | boolean |
voicemail_greeting_url | string or null |
{- "api_key": "12a26b3bc48d52e69f70a82a94a13a29a3fa41a5",
- "auto_attendant_greeting_url": null,
- "auto_upgrade_plan": false,
- "automated_sms_response": "Thank you for reaching out!\nWe'll respond shortlyWe'll respond shortlyWe'll respond shortlyWe'll respond shortly",
- "conference_lines_enabled": true,
- "createdTs": "2019-12-19T21:09:21.293391",
- "customer_id": null,
- "deleted": null,
- "desktop_notifications": true,
- "disable_incoming_sms": true,
- "email_calling_notifications": true,
- "ent_toll_free_enabled": false,
- "enterprise_id": "232267963371095740",
- "firstPaymentTs": null,
- "hide_link_in_bulk_messages": true,
- "id": "115999530581874548",
- "image": null,
- "is_verified_email": true,
- "mfa_enabled": false,
- "mfa_enforced": false,
- "mixpanelid": null,
- "modifiedTs": "2021-08-25T12:06:22.025499",
- "month_start": "2021-04-20",
- "name": "Product Alerts",
- "onboarding_mobile_finished": false,
- "onboarding_web_finished": false,
- "payment_period_end": "2020-01-19",
- "payment_period_start": "2019-12-19",
- "pending_email": null,
- "pending_phone_number": null,
- "phone_number": "+18888888888",
- "plan_usage": {
- "api_requests": "5208",
- "current_plan": {
- "api_requests": 40000,
- "groups": -1,
- "max_sms_recipients": 150,
- "maxpergroup": -1,
- "messages": 24000,
- "plan_cost": 100000,
- "plan_id": 1943,
- "plan_name": "Basic 2021 - 4000 SMS 250 Min - Annual",
- "voice_minutes": -1
}, - "groups": 1,
- "maxpergroup": 1,
- "messages": "77",
- "voice_mail_transcriptions": 0,
- "voice_minutes": "1"
}, - "pusher_key": "1234567890abcdef1234",
- "registration_status": "completed",
- "resource_uri": "/settings",
- "send_only_via_short_code": false,
- "send_only_via_toll_free": false,
- "settings_json": "{\"kazoo_callflow_id\": \"XXX\", \"transcribe_voice_mails\": true, \"kazoo_temporal_rule_id\": \"XXX\", \"kazoo_user_id\": \"XXX\", \"activityLogPath\": \"http://sendhub-prod-user-files.s3.amazonaws.com/activityLogs/2/XXX.csv\", \"toll_free_primary\": true, \"msg_send_rate_limit_timeout\": null, \"sound_notifications\": true, \"desktop_notifications\": true, \"kazoo_device_ids\": [\"XXX\"], \"sms_fwd_help\": true, \"kazoo_account_id\": \"XXX\", \"email_calling_notifications\": true, \"send_only_via_short_code\": false, \"send_only_via_toll_free\": false, \"hide_link_in_bulk_messages\": true, \"kazoo_voicemail_id\": \"XXX\", \"msg_send_rate_limit\": null, \"kazoo_account_realm\": \"232267963371095740.sip.sendhub.com\", \"kazoo_allowed\": true, \"kazoo_auto_attendant_menu_id\": \"XXX\", \"kazoo_vm_media_id\": \"XXX\", \"sms_webhook_url\": null, \"mask_caller_id\": true, \"sms_config\": {\"last_example_ts\": \"1629209040\", \"last_keyword_reminder_ts\": \"1629892091\", \"last_sms_contact_id\": \"116006957937271730\"}}",
- "siftScienceLabel": null,
- "signature": "Best Regards,\nSendHub Support",
- "sms_forwarding": "115999691431257661",
- "sms_fwd_help": true,
- "sms_webhook_url": null,
- "sound_notifications": true,
- "toll_free_number": null,
- "toll_free_primary": true,
- "transcribe_voice_mails": true,
- "voicemail_greeting_url": null
}
Updates your SendHub line's settings
automated_sms_response | string or null <= 160 |
desktop_notifications | boolean |
disable_incoming_sms | boolean |
email_calling_notifications | boolean |
hide_link_in_bulk_messages | boolean |
name | string (userName) [ 1 .. 120 ] characters User's (SendHub line's) name |
phone_number | string (personalCell) ^\+1\d{10}$ The |
send_only_via_short_code | boolean |
send_only_via_toll_free | boolean |
signature | string or null non-empty |
sms_forwarding | string or null non-empty |
sms_fwd_help | boolean |
sms_webhook_url | string or null |
sound_notifications | boolean |
toll_free_primary | boolean |
transcribe_voice_mails | boolean |
mask_caller_id | boolean |
api_key | string non-empty |
auto_attendant_greeting_url | string or null |
auto_upgrade_plan | boolean |
automated_sms_response | string or null <= 160 |
conference_lines_enabled | boolean |
createdTs | string (createdTs) non-empty ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
customer_id | string or null (customerId) |
deleted | boolean or null (deletedNullable) |
desktop_notifications | boolean |
disable_incoming_sms | boolean |
email_calling_notifications | boolean |
ent_toll_free_enabled | boolean or null |
enterprise_id | string (enterpriseId) ^\d+$ The enterprise ID |
firstPaymentTs | string or null (nullableStringRO) |
hide_link_in_bulk_messages | boolean |
id | string (internalId) ^\d+$ This is an internal ID and is not the same as a user ID (SendHub line) |
image | string or null (nullableStringRO) |
is_verified_email | boolean |
mfa_enabled | boolean or null |
mfa_enforced | boolean |
mixpanelid | string or null Deprecated This is used internally and may be expanded upon or removed in the future |
modifiedTs | string (modifiedTs) non-empty ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ A UTC timestamp
|
month_start | string (dateRO) ^\d{4}-\d{2}-\d{2}$ |
name | string (userName) [ 1 .. 120 ] characters User's (SendHub line's) name |
onboarding_mobile_finished | boolean (onboardingMobileFinished) Deprecated This is used internally and may be expanded upon or removed in the future |
onboarding_web_finished | boolean (onboardingWebFinished) Deprecated This is used internally and may be expanded upon or removed in the future |
payment_period_end | string (dateRO) ^\d{4}-\d{2}-\d{2}$ |
payment_period_start | string (dateRO) ^\d{4}-\d{2}-\d{2}$ |
pending_email | string or null (nullableStringRO) |
pending_phone_number | string or null (nullableStringRO) |
phone_number | string (personalCell) ^\+1\d{10}$ The |
object | |
pusher_key | string (pusherKey) non-empty |
registration_status | string (registrationStatus) non-empty Enum: "created" "email_verified" "payment_method_absent" "completed" |
resource_uri | string Value: "/settings" |
send_only_via_short_code | boolean |
send_only_via_toll_free | boolean |
settings_json | string non-empty |
siftScienceLabel | string or null |
signature | string or null non-empty |
sms_forwarding | string or null non-empty |
sms_fwd_help | boolean |
sms_webhook_url | string or null |
sound_notifications | boolean |
toll_free_number | string or null |
toll_free_primary | boolean |
transcribe_voice_mails | boolean |
voicemail_greeting_url | string or null |
mask_caller_id | boolean |
{- "automated_sms_response": "string",
- "desktop_notifications": true,
- "disable_incoming_sms": true,
- "email_calling_notifications": true,
- "hide_link_in_bulk_messages": true,
- "name": "string",
- "phone_number": "string",
- "send_only_via_short_code": true,
- "send_only_via_toll_free": true,
- "signature": "string",
- "sms_forwarding": "string",
- "sms_fwd_help": true,
- "sms_webhook_url": "string",
- "sound_notifications": true,
- "toll_free_primary": true,
- "transcribe_voice_mails": true,
- "mask_caller_id": true
}
{- "api_key": "12a26b3bc48d52e69f70a82a94a13a29a3fa41a5",
- "auto_attendant_greeting_url": null,
- "auto_upgrade_plan": false,
- "automated_sms_response": "Thank you for reaching out!\nWe'll respond shortlyWe'll respond shortlyWe'll respond shortlyWe'll respond shortly",
- "conference_lines_enabled": true,
- "createdTs": "2019-12-19T21:09:21.293391",
- "customer_id": null,
- "deleted": null,
- "desktop_notifications": true,
- "disable_incoming_sms": true,
- "email_calling_notifications": true,
- "ent_toll_free_enabled": false,
- "enterprise_id": "232267963371095740",
- "firstPaymentTs": null,
- "hide_link_in_bulk_messages": true,
- "id": "115999530581874548",
- "image": null,
- "is_verified_email": true,
- "mfa_enabled": false,
- "mfa_enforced": false,
- "mixpanelid": null,
- "modifiedTs": "2021-08-25T12:06:22.025499",
- "month_start": "2021-04-20",
- "name": "Product Alerts",
- "onboarding_mobile_finished": false,
- "onboarding_web_finished": false,
- "payment_period_end": "2020-01-19",
- "payment_period_start": "2019-12-19",
- "pending_email": null,
- "pending_phone_number": null,
- "phone_number": "+18888888888",
- "plan_usage": {
- "api_requests": "5208",
- "current_plan": {
- "api_requests": 40000,
- "groups": -1,
- "max_sms_recipients": 150,
- "maxpergroup": -1,
- "messages": 24000,
- "plan_cost": 100000,
- "plan_id": 1943,
- "plan_name": "Basic 2021 - 4000 SMS 250 Min - Annual",
- "voice_minutes": -1
}, - "groups": 1,
- "maxpergroup": 1,
- "messages": "77",
- "voice_mail_transcriptions": 0,
- "voice_minutes": "1"
}, - "pusher_key": "1234567890abcdef1234",
- "registration_status": "completed",
- "resource_uri": "/settings",
- "send_only_via_short_code": false,
- "send_only_via_toll_free": false,
- "settings_json": "{\"kazoo_callflow_id\": \"XXX\", \"transcribe_voice_mails\": true, \"kazoo_temporal_rule_id\": \"XXX\", \"kazoo_user_id\": \"XXX\", \"activityLogPath\": \"http://sendhub-prod-user-files.s3.amazonaws.com/activityLogs/2/XXX.csv\", \"toll_free_primary\": true, \"msg_send_rate_limit_timeout\": null, \"sound_notifications\": true, \"desktop_notifications\": true, \"kazoo_device_ids\": [\"XXX\"], \"sms_fwd_help\": true, \"kazoo_account_id\": \"XXX\", \"email_calling_notifications\": true, \"send_only_via_short_code\": false, \"send_only_via_toll_free\": false, \"hide_link_in_bulk_messages\": true, \"kazoo_voicemail_id\": \"XXX\", \"msg_send_rate_limit\": null, \"kazoo_account_realm\": \"232267963371095740.sip.sendhub.com\", \"kazoo_allowed\": true, \"kazoo_auto_attendant_menu_id\": \"XXX\", \"kazoo_vm_media_id\": \"XXX\", \"sms_webhook_url\": null, \"mask_caller_id\": true, \"sms_config\": {\"last_example_ts\": \"1629209040\", \"last_keyword_reminder_ts\": \"1629892091\", \"last_sms_contact_id\": \"116006957937271730\"}}",
- "siftScienceLabel": null,
- "signature": "Best Regards,\nSendHub Support",
- "sms_forwarding": "115999691431257661",
- "sms_fwd_help": true,
- "sms_webhook_url": null,
- "sound_notifications": true,
- "toll_free_number": null,
- "toll_free_primary": true,
- "transcribe_voice_mails": true,
- "voicemail_greeting_url": null,
- "mask_caller_id": true
}
Gets details about your SendHub line
required | Array of Auth Group (object) or Auth Group (object) or Auth Group (object) or Auth Group (object) (authGroups) non-empty unique |
date_joined required | string (dateJoined) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}$ Timestamp that this SendHub User (line) was created |
downvotes required | integer (downvotes) Deprecated This is used internally and may be expanded upon or removed in the future |
email required | string (email) ^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!... |
enterprise required | string or null (enterpriseName) <= 255 characters Your company name |
enterprise_id required | string (enterpriseId) ^\d+$ The enterprise ID |
enterpriseJoinLink required | string (enterpriseJoinLink) ^https?://sh\.gl/[a-zA-Z0-9]+$ Deprecated This is used internally and may be expanded upon or removed in the future |
enterpriseSize required | integer (enterpriseSize) How manu Users (lines) your account has |
mixpanel_id required | string or null <int64> (mixpanelId) Deprecated This is used internally and may be expanded upon or removed in the future |
name required | string or null (enterpriseName) <= 255 characters Your company name |
onboarding_mobile_finished required | boolean (onboardingMobileFinished) Deprecated This is used internally and may be expanded upon or removed in the future |
onboarding_web_finished required | boolean (onboardingWebFinished) Deprecated This is used internally and may be expanded upon or removed in the future |
payment_plan_id required | integer <int64> (planId) The plan ID |
resource_uri required | string (profileResourceUri) ^\/v\d+(\.\d+)*\/profile$ Resource URI for this User's profile |
sendhub_number required | string (formattedSendhubNumber) ^\(\d{3}\) \d{3}-\d{4}$ This line's SendHub number (formatted) |
unread required | integer (profileUnread) Shows how many unread threads this User (line) has |
upvotes required | integer (upvotes) Deprecated This is used internally and may be expanded upon or removed in the future |
user_id required | string (userId) ^\d+$ The ID of a SendHub user (an individual line) |
username required | string (username) [ 1 .. 254 ] characters User's (SendHub line's) username |
{- "auth_groups": [
- {
- "id": 7,
- "name": "Account Administrators"
}, - {
- "id": 5,
- "name": "Restricted Users"
}, - {
- "id": 9,
- "name": "Billing Administrators"
}
], - "date_joined": "2019-12-19T21:09:21.216167",
- "downvotes": 0,
- "email": "alerts@acme.com",
- "enterprise": "ACME Inc.",
- "enterpriseSize": 6,
- "enterprise_id": "232267963371095740",
- "mixpanel_id": null,
- "name": "Product Alerts",
- "onboarding_mobile_finished": false,
- "onboarding_web_finished": false,
- "payment_plan_id": 1268,
- "resource_uri": "/v1/profile",
- "sendhub_number": "(201) 571-6227",
- "unread": 0,
- "upvotes": 0,
- "user_id": "283014186889381821",
- "username": "alerts@acme.com"
}
Gets your enterprise account's details
enterprise_id required | string Your enterprise account's ID Note: You can find your |
brand_id | string or null (brandId) 10DLC Brand ID |
createdTs required | string non-empty |
customerId required | string non-empty |
hasAccessToChatSupport required | boolean Deprecated |
hash required | string non-empty |
id required | string non-empty |
joinUrl required | string non-empty Deprecated |
modifiedTs required | string non-empty |
month_start required | string non-empty |
name required | string or null (enterpriseName) <= 255 characters Your company name |
payment_plan_id required | integer |
resource_uri required | string non-empty |
settingsJson required | string non-empty |
shortcode_allowed required | boolean |
{- "brand_id": {
- "$ref": "#/components/schemas/brandId"
}, - "createdTs": "2018-06-07T17:59:51.186701",
- "customerId": "cus_D0TMCytXFqWuNO",
- "hasAccessToChatSupport": true,
- "hash": "XXX",
- "id": "232267963371095740",
- "modifiedTs": "2021-08-24T19:31:26.420082",
- "month_start": "2021-08-09",
- "name": "ACME Inc.",
- "payment_plan_id": 11,
- "resource_uri": "/v1/enterprises/232267963371095740",
- "settingsJson": "{\"mms_enabled\": false, \"integrationsAllowed\": true, \"activityLogPath\": \"http://sendhub-prod-user-files.s3.amazonaws.com/activityLogs/2/XXX.csv\"}",
- "shortcode_allowed": false
}
Lists your enterprise account's users (lines)
enterprise_id required | string Your enterprise account's ID Note: You can find your |
object (meta) | |
Array of objects (listNestedUser) |
{- "meta": {
- "offset": 0,
- "limit": 0,
- "previous": "string",
- "next": "string"
}, - "objects": [
- {
- "createdTs": "string",
- "disable_incoming_sms": true,
- "enterprise_id": "string",
- "enterprise_id_str": "string",
- "id": "string",
- "id_str": "string",
- "image": "string",
- "is_verified_email": true,
- "modifiedTs": "string",
- "name": "string",
- "onboarding_mobile_finished": true,
- "onboarding_web_finished": true,
- "payment_period_end": "string",
- "payment_period_start": "string",
- "payment_schedule_id": "1",
- "pending_phone_number": "string",
- "phone_number": "string",
- "registration_status": "created",
- "sendhub_number": "string",
- "settings_json": "string",
- "signature": "string",
- "twilio_phone_number_id": "string",
- "twilio_phone_number_id_str": "string",
- "user_id": "string",
- "user_id_str": "string"
}
]
}
Gets a user (line)
enterprise_id required | string Your enterprise account's ID Note: You can find your |
user_id required | integer <int64> >= 1 The SendHub user (line)'s ID Note: You can find your |
createdTs required | string (createdTsWithoutDecimal) non-empty ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$ A UTC timestamp
|
disable_incoming_sms required | boolean (disableIncomingSms) |
enterprise_id required | string (enterpriseId) ^\d+$ The enterprise ID |
enterprise_id_str required | string (enterpriseIdStr) ^\d+$ The enterprise ID |
id required | string (id) ^\d+$ |
id_str required | string (idStr) ^\d+$ Same as id but always a string |
image required | string (image) The URL for this user's profile image |
is_verified_email required | boolean (isVerifiedEmail) Whether this user's email has been verified |
modifiedTs required | string (modifiedTsWithoutDecimal) non-empty ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$ A UTC timestamp
|
name required | string (userName) [ 1 .. 120 ] characters User's (SendHub line's) name |
onboarding_mobile_finished required | boolean (onboardingMobileFinished) Deprecated This is used internally and may be expanded upon or removed in the future |
onboarding_web_finished required | boolean (onboardingWebFinished) Deprecated This is used internally and may be expanded upon or removed in the future |
payment_period_end required | string (paymentPeriodEnd) ^\d{4}-\d{2}-\d{2}$ |
payment_period_start required | string (paymentPeriodStart) ^\d{4}-\d{2}-\d{2}$ |
payment_schedule_id required | string (paymentScheduleId) non-empty ^\d+$ Enum: "1" "2" "3" Your plan's payment schedule type:
|
pending_phone_number | string (pendingPhoneNumber) ^\+1\d{10}|$ Phone number waiting to be verified for the "Personal Cell" field |
phone_number | string (personalCell) ^\+1\d{10}$ The |
registration_status required | string (registrationStatus) non-empty Enum: "created" "email_verified" "payment_method_absent" "completed" |
sendhub_number required | string (sendhubNumber) ^\+1\d{10}$ This line's SendHub number (E.164 format) |
settings_json required | string (settingsJson) non-empty |
signature required | string (signature) Signature that the SendHub apps append to new messages Note: SendHub does not use this field when sending via the API |
required | id (string) or idInt (integer) (twilioPhoneNumberId) Deprecated This is used internally and may be expanded upon or removed in the future |
required | id (string) or idInt (integer) (twilioPhoneNumberIdStr) Deprecated This is used internally and may be expanded upon or removed in the future |
user_id required | string (userId) ^\d+$ The ID of a SendHub user (an individual line) |
user_id_str required | string (userId) ^\d+$ The ID of a SendHub user (an individual line) |
required | Array of Auth Group (object) or Auth Group (object) or Auth Group (object) or Auth Group (object) (authGroups) non-empty unique |
username required | string (username) [ 1 .. 254 ] characters User's (SendHub line's) username |
{- "id": "115999530581874548",
- "user_id": "283014186889381821",
- "enterprise_id": "232267963371095740",
- "phone_number": "+18888888888",
- "twilio_phone_number_id": "115999766167712690",
- "registration_status": "completed",
- "image": "",
- "signature": "Best Regards,\nACME Inc.",
- "disable_incoming_sms": false,
- "automated_sms_response": "",
- "payment_schedule_id": "1",
- "payment_period_start": "2019-12-19",
- "payment_period_end": "2020-01-19",
- "onboarding_web_finished": false,
- "onboarding_mobile_finished": false,
- "settings_json": "{\"kazoo_callflow_id\": \"XXX\", \"transcribe_voice_mails\": true, \"kazoo_temporal_rule_id\": \"XXX\", \"kazoo_user_id\": \"XXX\", \"activityLogPath\": \"http://sendhub-prod-user-files.s3.amazonaws.com/activityLogs/2/XXX.csv\", \"toll_free_primary\": false, \"msg_send_rate_limit_timeout\": null, \"sound_notifications\": true, \"desktop_notifications\": true, \"kazoo_device_ids\": [\"XXX\"], \"sms_fwd_help\": true, \"kazoo_account_id\": \"XXX\", \"email_calling_notifications\": true, \"send_only_via_short_code\": false, \"send_only_via_toll_free\": false, \"hide_link_in_bulk_messages\": true, \"kazoo_voicemail_id\": \"XXX\", \"msg_send_rate_limit\": null, \"kazoo_account_realm\": \"232267963371095740.sip.sendhub.com\", \"kazoo_allowed\": true, \"kazoo_auto_attendant_menu_id\": \"XXX\", \"kazoo_vm_media_id\": \"XXX\", \"sms_webhook_url\": null, \"mask_caller_id\": false, \"sms_config\": {\"last_example_ts\": \"1629209040\", \"last_keyword_reminder_ts\": \"1629873648\", \"last_sms_contact_id\": \"116006957938283973\"}}",
- "is_verified_email": true,
- "createdTs": "2019-12-19T21:09:21",
- "modifiedTs": "2021-08-25T06:47:16",
- "auth_groups": [
- {
- "id": 7,
- "name": "Account Administrators"
}, - {
- "id": 5,
- "name": "Restricted Users"
}, - {
- "id": 9,
- "name": "Billing Administrators"
}
], - "username": "alerts@acme.com",
- "id_str": "115999530581874548",
- "user_id_str": "283014186889381821",
- "enterprise_id_str": "232267963371095740",
- "twilio_phone_number_id_str": "115999766167712690",
- "name": "Product Alerts",
- "sendhub_number": "+12015716227",
- "sms_forwarding": "115999691431257661"
}
Log in via username & password
authenticationType | string Enum: "sendhub" "manager" |
sessionId | string |
username | string |
password | string |
authToken | string |
authenticationType | string (authenticationType) Enum: "sendhub" "manager" |
csrf_token | string |
emailAddress | string |
kazooApiPassword | string or null |
password | string Always giong to return '******' |
resource_uri | string Value: "/api/v1/auth" |
sendhub_number | string (sendhubNumber) ^\+1\d{10}$ This line's SendHub number (E.164 format) |
object | |
sipDeviceId | string or null (nullableString) |
sipPassword | string or null (nullableString) |
user_id | string (userId) ^\d+$ The ID of a SendHub user (an individual line) |
username | string (username) [ 1 .. 254 ] characters User's (SendHub line's) username |
{- "authenticationType": "sendhub",
- "sessionId": "string",
- "username": "string",
- "password": "string"
}
{- "authToken": "string",
- "authenticationType": "sendhub",
- "csrf_token": "string",
- "emailAddress": "string",
- "kazooApiPassword": "string",
- "password": "string",
- "resource_uri": "/api/v1/auth",
- "sendhub_number": "string",
- "settings": {
- "automated_sms_response": "string",
- "customer_id": "string",
- "deleted": true,
- "disable_incoming_sms": true,
- "enterprise": 0,
- "entitlement": "string",
- "id": "string",
- "is_verified_email": true,
- "mixpanelid": "string",
- "onboarding_mobile_finished": true,
- "onboarding_web_finished": true,
- "payment_schedule": 1,
- "pending_email": "string",
- "pending_phone_number": "string",
- "phone_number": "string",
- "registration_status": "created",
- "settings_json": "string",
- "siftScienceLabel": "string",
- "signature": "string",
- "smsForwardingNumber": 0,
- "twilio_phone_number": "string",
- "user": 0,
- "_payment_plan": "string"
}, - "sipDeviceId": "string",
- "sipPassword": "string",
- "user_id": "string",
- "username": "string"
}