MENU navbar-image

Introduction

This API is designed to let you do (almost) everything you can do from the timetoreply portal programatically via API requests

Authentication

We currently only support personal access tokens for authentication. These can be obtained by logging into a company administrator account on timetoreply, visiting the API section, and clicking "Generate Access Token". Tokens have an expiration time of 1 year.

All requests made to our api with these generated access tokens will be assigned to the user that generated the access token.

You can create as many access tokens as you like, and you can revoke their access at any time from the same page when you created them.

Rate Limiting

Our API is rate limited to 30 requests per minute and the lower limit of 900 requests per hour.

If you exceed these limits, responses will get a Retry-After header which indicates how long you should wait until trying again.

Dates and Times

Most Dates and Times are converted into the timezone of your user profile on the fly before being sent to you.

Reply times are usually returned in seconds, but many reply times also have a "Friendly Reply Time" which is a formatted string.

Nomenclature

General

Responses have been generally optimized for use in our own front-end, and as such, the structure of responses might not be exactly as you expect. It may also contain information that is not relevant to you. Unfortunately we currently do not offer a method to get exactly the information you want, but we may create this functionality in future.

Base URL

https://portal.timetoreply.com

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

You can generate your token by logging in and visiting TOOLS > API

Logs

Conversations - Report Conversation (Thread) Logs data

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/logs/conversations"
);

const params = {
    "from": "2020-01-01",
    "to": "2020-01-08",
    "model": "My Company",
    "model_type": "Internal",
    "exclude_cc": "0",
    "model_com": "Top Revenue Contacts",
    "model_type_com": "Contact Group",
    "exclude_cc_com": "0",
    "exclusive": "0",
    "label[0]": "vitae",
    "thread_type": "inbound,outbound,internal",
    "thread_status": "internal,await-customer,closed,await-agent",
    "has_replies": "hasReplies,hasForwards,hasNoRepliesOrForwards",
    "classification": "calculating,first,reply,reply-all,forward",
    "messageType": "inbound,outbound,internal",
    "replies_over": "15",
    "message_replies_over": "15",
    "no_reply_for": "15",
    "per_page": "2",
    "sort_by": "last_received_at_date_time",
    "direction": "desc",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/logs/conversations',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'from' => '2020-01-01',
            'to' => '2020-01-08',
            'model' => 'My Company',
            'model_type' => 'Internal',
            'exclude_cc' => '0',
            'model_com' => 'Top Revenue Contacts',
            'model_type_com' => 'Contact Group',
            'exclude_cc_com' => '0',
            'exclusive' => '0',
            'label[0]' => 'vitae',
            'thread_type' => 'inbound,outbound,internal',
            'thread_status' => 'internal,await-customer,closed,await-agent',
            'has_replies' => 'hasReplies,hasForwards,hasNoRepliesOrForwards',
            'classification' => 'calculating,first,reply,reply-all,forward',
            'messageType' => 'inbound,outbound,internal',
            'replies_over' => '15',
            'message_replies_over' => '15',
            'no_reply_for' => '15',
            'per_page' => '2',
            'sort_by' => 'last_received_at_date_time',
            'direction' => 'desc',
            'page' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/logs/conversations?from=2020-01-01&to=2020-01-08&model=My+Company&model_type=Internal&exclude_cc=&model_com=Top+Revenue+Contacts&model_type_com=Contact+Group&exclude_cc_com=&exclusive=&label[]=vitae&thread_type=inbound%2Coutbound%2Cinternal&thread_status=internal%2Cawait-customer%2Cclosed%2Cawait-agent&has_replies=hasReplies%2ChasForwards%2ChasNoRepliesOrForwards&classification=calculating%2Cfirst%2Creply%2Creply-all%2Cforward&messageType=inbound%2Coutbound%2Cinternal&replies_over=15&message_replies_over=15&no_reply_for=15&per_page=2&sort_by=last_received_at_date_time&direction=desc&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "threads": {
        "current_page": 1,
        "data": [
            {
                "id": 481,
                "init_agent_reply_time": 0,
                "init_agent_action_time": 47867,
                "total_agent_reply_time": 47867,
                "last_received_at_date_time": "Feb 1st 2023 19:28:29",
                "thread_type": "inbound",
                "thread_status": "await-customer",
                "raw_init_agent_reply_time": 50097,
                "init_agent_reply_message_id": "[email protected]",
                "init_reply_agent_id": 1,
                "time_to_close": null,
                "raw_time_to_close": null,
                "touches": 2,
                "nudges": 1,
                "friendly_initial_reply_time": "00s",
                "friendly_raw_initial_reply_time": "13h:54m:57s",
                "friendly_total_reply_time": "13h:17m:47s",
                "microsoft_conversations": [],
                "email_usernames": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_usernames_from": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_usernames_reply_to": [],
                "email_usernames_to": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_usernames_received": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_domains": [
                    "barton.com",
                    "timetoreply.com"
                ],
                "date_times": [
                    "2023-02-01 05:32:07",
                    "2023-02-01 18:49:54",
                    "2023-02-01 19:27:04",
                    "2023-02-01 19:28:29"
                ],
                "message_classifications": [
                    "first",
                    "follow-up",
                    "reply"
                ],
                "message_subjects": [
                    "cultivate robust channels",
                    "RE: cultivate robust channels"
                ],
                "messages": [
                    {
                        "internet_message_id": "[email protected]",
                        "date_time": "Feb 1st 2023 19:28:29",
                        "subject": "RE: cultivate robust channels",
                        "references": [
                            "[email protected]",
                            "[email protected]",
                            "[email protected]"
                        ],
                        "replytime": 0,
                        "classification": "follow-up",
                        "raw_replytime": 85,
                        "friendly_reply_time": "00s",
                        "friendly_raw_reply_time": "01m:25s",
                        "email_domains": [
                            "timetoreply.com",
                            "barton.com"
                        ],
                        "email_domains_from": [
                            "timetoreply.com"
                        ],
                        "email_domains_to": [
                            "barton.com"
                        ],
                        "email_domains_reply_to": [],
                        "email_domains_received": [
                            "barton.com"
                        ],
                        "email_usernames": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "email_usernames_from": [
                            "[email protected]"
                        ],
                        "email_usernames_to": [
                            "[email protected]"
                        ],
                        "email_usernames_cc": [],
                        "email_usernames_reply_to": [],
                        "email_usernames_received": [
                            "[email protected]"
                        ],
                        "is_initial_reply": false,
                        "is_newest_message": true,
                        "message_type": "outbound",
                        "labels": [],
                        "is_touch": true,
                        "is_nudge": false,
                        "touch_time": 85,
                        "timestamp": 1675279709,
                        "is_closing_email": false,
                        "is_included_in_stats": true,
                        "reply_is_relevant": true,
                        "reply_is_outlier": false,
                        "agents_read_status": [],
                        "friendly_touch_time": "01m:25s"
                    },
                    {
                        "internet_message_id": "[email protected]",
                        "date_time": "Feb 1st 2023 19:27:04",
                        "subject": "RE: cultivate robust channels",
                        "references": [
                            "[email protected]"
                        ],
                        "replytime": 0,
                        "classification": "reply",
                        "raw_replytime": 2230,
                        "friendly_reply_time": "00s",
                        "friendly_raw_reply_time": "37m:10s",
                        "email_domains": [
                            "timetoreply.com",
                            "barton.com"
                        ],
                        "email_domains_from": [
                            "timetoreply.com"
                        ],
                        "email_domains_to": [
                            "barton.com"
                        ],
                        "email_domains_reply_to": [],
                        "email_domains_received": [
                            "barton.com"
                        ],
                        "email_usernames": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "email_usernames_from": [
                            "[email protected]"
                        ],
                        "email_usernames_to": [
                            "[email protected]"
                        ],
                        "email_usernames_cc": [],
                        "email_usernames_reply_to": [],
                        "email_usernames_received": [
                            "[email protected]"
                        ],
                        "is_initial_reply": true,
                        "is_newest_message": false,
                        "message_type": "outbound",
                        "labels": [],
                        "is_touch": true,
                        "is_nudge": false,
                        "touch_time": null,
                        "timestamp": 1675279624,
                        "is_closing_email": false,
                        "is_included_in_stats": true,
                        "reply_is_relevant": true,
                        "reply_is_outlier": false,
                        "agents_read_status": [],
                        "friendly_touch_time": "N/A"
                    },
                    {
                        "internet_message_id": "[email protected]",
                        "date_time": "Feb 1st 2023 18:49:54",
                        "subject": "RE: cultivate robust channels",
                        "references": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "replytime": 47867,
                        "classification": "follow-up",
                        "raw_replytime": 47867,
                        "friendly_reply_time": "13h:17m:47s",
                        "friendly_raw_reply_time": "13h:17m:47s",
                        "email_domains": [
                            "barton.com",
                            "timetoreply.com"
                        ],
                        "email_domains_from": [
                            "barton.com"
                        ],
                        "email_domains_to": [
                            "timetoreply.com"
                        ],
                        "email_domains_reply_to": [],
                        "email_domains_received": [
                            "timetoreply.com"
                        ],
                        "email_usernames": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "email_usernames_from": [
                            "[email protected]"
                        ],
                        "email_usernames_to": [
                            "[email protected]"
                        ],
                        "email_usernames_cc": [],
                        "email_usernames_reply_to": [],
                        "email_usernames_received": [
                            "[email protected]"
                        ],
                        "is_initial_reply": false,
                        "is_newest_message": false,
                        "message_type": "inbound",
                        "labels": [],
                        "is_touch": false,
                        "is_nudge": true,
                        "touch_time": null,
                        "timestamp": 1675277394,
                        "is_closing_email": false,
                        "is_included_in_stats": true,
                        "reply_is_relevant": false,
                        "reply_is_outlier": false,
                        "agents_read_status": {
                            "[email protected]": true
                        },
                        "friendly_touch_time": "N/A"
                    },
                    {
                        "internet_message_id": "[email protected]",
                        "date_time": "Feb 1st 2023 05:32:07",
                        "subject": "cultivate robust channels",
                        "references": null,
                        "replytime": null,
                        "classification": "first",
                        "raw_replytime": null,
                        "friendly_reply_time": "N/A",
                        "friendly_raw_reply_time": "N/A",
                        "email_domains": [
                            "barton.com",
                            "timetoreply.com"
                        ],
                        "email_domains_from": [
                            "barton.com"
                        ],
                        "email_domains_to": [
                            "timetoreply.com"
                        ],
                        "email_domains_reply_to": [],
                        "email_domains_received": [
                            "timetoreply.com"
                        ],
                        "email_usernames": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "email_usernames_from": [
                            "[email protected]"
                        ],
                        "email_usernames_to": [
                            "[email protected]"
                        ],
                        "email_usernames_cc": [],
                        "email_usernames_reply_to": [],
                        "email_usernames_received": [
                            "[email protected]"
                        ],
                        "is_initial_reply": false,
                        "is_newest_message": false,
                        "message_type": "inbound",
                        "labels": [
                            "UNREAD"
                        ],
                        "is_touch": false,
                        "is_nudge": false,
                        "touch_time": null,
                        "timestamp": 1675229527,
                        "is_closing_email": false,
                        "is_included_in_stats": true,
                        "reply_is_relevant": false,
                        "reply_is_outlier": false,
                        "agents_read_status": {
                            "[email protected]": false
                        },
                        "friendly_touch_time": "N/A"
                    }
                ],
                "labels": [
                    "UNREAD"
                ],
                "has_contact_success": false,
                "contact_success_time": null,
                "contact_reply_time": null,
                "deal": null,
                "subject": "RE: cultivate robust channels",
                "initial_reply_is_relevant": true,
                "initial_reply_is_included_in_stats": true,
                "initial_reply_is_outlier": false,
                "friendly_time_to_close": "N/A",
                "friendly_raw_time_to_close": "N/A"
            },
            {
                "id": 203,
                "init_agent_reply_time": 1465,
                "init_agent_action_time": 1465,
                "total_agent_reply_time": 13534,
                "last_received_at_date_time": "Feb 1st 2023 17:58:48",
                "thread_type": "inbound",
                "thread_status": "await-agent",
                "raw_init_agent_reply_time": 1465,
                "init_agent_reply_message_id": "[email protected]",
                "init_reply_agent_id": 4,
                "time_to_close": null,
                "raw_time_to_close": null,
                "touches": 1,
                "nudges": 0,
                "friendly_initial_reply_time": "24m:25s",
                "friendly_raw_initial_reply_time": "24m:25s",
                "friendly_total_reply_time": "03h:45m:34s",
                "microsoft_conversations": [],
                "email_usernames": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_usernames_from": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_usernames_reply_to": [],
                "email_usernames_to": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_usernames_received": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_domains": [
                    "crooks.com",
                    "timetoreply.com"
                ],
                "date_times": [
                    "2023-02-01 14:13:14",
                    "2023-02-01 14:37:39",
                    "2023-02-01 17:58:48"
                ],
                "message_classifications": [
                    "first",
                    "reply"
                ],
                "message_subjects": [
                    "Web Enquiry Form: visualize cross-media mindshare",
                    "RE: Web Enquiry Form: visualize cross-media mindshare"
                ],
                "messages": [
                    {
                        "internet_message_id": "[email protected]",
                        "date_time": "Feb 1st 2023 17:58:48",
                        "subject": "RE: Web Enquiry Form: visualize cross-media mindshare",
                        "references": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "replytime": 12069,
                        "classification": "reply",
                        "raw_replytime": 12069,
                        "friendly_reply_time": "03h:21m:09s",
                        "friendly_raw_reply_time": "03h:21m:09s",
                        "email_domains": [
                            "crooks.com",
                            "timetoreply.com"
                        ],
                        "email_domains_from": [
                            "crooks.com"
                        ],
                        "email_domains_to": [
                            "timetoreply.com"
                        ],
                        "email_domains_reply_to": [],
                        "email_domains_received": [
                            "timetoreply.com"
                        ],
                        "email_usernames": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "email_usernames_from": [
                            "[email protected]"
                        ],
                        "email_usernames_to": [
                            "[email protected]"
                        ],
                        "email_usernames_cc": [],
                        "email_usernames_reply_to": [],
                        "email_usernames_received": [
                            "[email protected]"
                        ],
                        "is_initial_reply": false,
                        "is_newest_message": true,
                        "message_type": "inbound",
                        "labels": [],
                        "is_touch": false,
                        "is_nudge": false,
                        "touch_time": null,
                        "timestamp": 1675274328,
                        "is_closing_email": false,
                        "is_included_in_stats": true,
                        "reply_is_relevant": false,
                        "reply_is_outlier": false,
                        "agents_read_status": {
                            "[email protected]": true
                        },
                        "friendly_touch_time": "N/A"
                    },
                    {
                        "internet_message_id": "[email protected]",
                        "date_time": "Feb 1st 2023 14:37:39",
                        "subject": "RE: Web Enquiry Form: visualize cross-media mindshare",
                        "references": [
                            "[email protected]"
                        ],
                        "replytime": 1465,
                        "classification": "reply",
                        "raw_replytime": 1465,
                        "friendly_reply_time": "24m:25s",
                        "friendly_raw_reply_time": "24m:25s",
                        "email_domains": [
                            "timetoreply.com",
                            "crooks.com"
                        ],
                        "email_domains_from": [
                            "timetoreply.com"
                        ],
                        "email_domains_to": [
                            "crooks.com"
                        ],
                        "email_domains_reply_to": [],
                        "email_domains_received": [
                            "crooks.com"
                        ],
                        "email_usernames": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "email_usernames_from": [
                            "[email protected]"
                        ],
                        "email_usernames_to": [
                            "[email protected]"
                        ],
                        "email_usernames_cc": [],
                        "email_usernames_reply_to": [],
                        "email_usernames_received": [
                            "[email protected]"
                        ],
                        "is_initial_reply": true,
                        "is_newest_message": false,
                        "message_type": "outbound",
                        "labels": [
                            "UNREAD",
                            "CATEGORY_PROMOTIONS",
                            "CATEGORY_PERSONAL"
                        ],
                        "is_touch": true,
                        "is_nudge": false,
                        "touch_time": null,
                        "timestamp": 1675262259,
                        "is_closing_email": false,
                        "is_included_in_stats": true,
                        "reply_is_relevant": true,
                        "reply_is_outlier": false,
                        "agents_read_status": [],
                        "friendly_touch_time": "N/A"
                    },
                    {
                        "internet_message_id": "[email protected]",
                        "date_time": "Feb 1st 2023 14:13:14",
                        "subject": "Web Enquiry Form: visualize cross-media mindshare",
                        "references": null,
                        "replytime": null,
                        "classification": "first",
                        "raw_replytime": null,
                        "friendly_reply_time": "N/A",
                        "friendly_raw_reply_time": "N/A",
                        "email_domains": [
                            "crooks.com",
                            "timetoreply.com"
                        ],
                        "email_domains_from": [
                            "crooks.com"
                        ],
                        "email_domains_to": [
                            "timetoreply.com"
                        ],
                        "email_domains_reply_to": [],
                        "email_domains_received": [
                            "timetoreply.com"
                        ],
                        "email_usernames": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "email_usernames_from": [
                            "[email protected]"
                        ],
                        "email_usernames_to": [
                            "[email protected]"
                        ],
                        "email_usernames_cc": [],
                        "email_usernames_reply_to": [],
                        "email_usernames_received": [
                            "[email protected]"
                        ],
                        "is_initial_reply": false,
                        "is_newest_message": false,
                        "message_type": "inbound",
                        "labels": [],
                        "is_touch": false,
                        "is_nudge": false,
                        "touch_time": null,
                        "timestamp": 1675260794,
                        "is_closing_email": false,
                        "is_included_in_stats": true,
                        "reply_is_relevant": false,
                        "reply_is_outlier": false,
                        "agents_read_status": {
                            "[email protected]": true
                        },
                        "friendly_touch_time": "N/A"
                    }
                ],
                "labels": [
                    "UNREAD",
                    "CATEGORY_PROMOTIONS",
                    "CATEGORY_PERSONAL"
                ],
                "has_contact_success": true,
                "contact_success_time": 13534,
                "contact_reply_time": 12069,
                "deal": {
                    "id": 23,
                    "deal_stage": 1,
                    "deal_value": 1571,
                    "owner": 5,
                    "name": "Rustic Silk Shoes"
                },
                "subject": "RE: Web Enquiry Form: visualize cross-media mindshare",
                "initial_reply_is_relevant": true,
                "initial_reply_is_included_in_stats": true,
                "initial_reply_is_outlier": false,
                "friendly_time_to_close": "N/A",
                "friendly_raw_time_to_close": "N/A"
            }
        ],
        "first_page_url": "https://portal.timetoreply.com/api/logs/conversations?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=1",
        "from": 1,
        "last_page": 169,
        "last_page_url": "https://portal.timetoreply.com/api/logs/conversations?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=169",
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/conversations?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=1",
                "label": "1",
                "active": true
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/conversations?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=2",
                "label": "2",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/conversations?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=3",
                "label": "3",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/conversations?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=4",
                "label": "4",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/conversations?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=5",
                "label": "5",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/conversations?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=6",
                "label": "6",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/conversations?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=7",
                "label": "7",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/conversations?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=8",
                "label": "8",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/conversations?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=9",
                "label": "9",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/conversations?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=10",
                "label": "10",
                "active": false
            },
            {
                "url": null,
                "label": "...",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/conversations?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=168",
                "label": "168",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/conversations?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=169",
                "label": "169",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/conversations?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=2",
                "label": "Next »",
                "active": false
            }
        ],
        "next_page_url": "https://portal.timetoreply.com/api/logs/conversations?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=2",
        "path": "https://portal.timetoreply.com/api/logs/conversations",
        "per_page": 2,
        "prev_page_url": null,
        "to": 2,
        "total": 337
    },
    "stats": {
        "threads": {
            "total": 337,
            "internal": 28,
            "inbound": 257,
            "outbound": 52,
            "sent_internally": 0,
            "await_customer": 0,
            "await_agent": 0,
            "closed": 0,
            "have_replies": 269,
            "have_replies_from_agents": 245,
            "have_no_replies_from_agents": 92,
            "completionRatio": {
                "ratio": 85.99,
                "numerator": 221,
                "denominator": 257
            },
            "labels": {
                "total": 0,
                "list": []
            }
        },
        "messages": {
            "count": 850,
            "initial": 0,
            "replies": 507,
            "forward": 0,
            "follow_up": 0,
            "received": {
                "count": 0,
                "initial": 0,
                "replies": 0,
                "forward": 0,
                "follow_up": 0,
                "initial_replies": 0,
                "dayOfWeek": {
                    "Monday": 0,
                    "Tuesday": 0,
                    "Wednesday": 0,
                    "Thursday": 0,
                    "Friday": 0,
                    "Saturday": 0,
                    "Sunday": 0
                },
                "hourOfDay": {
                    "00:00": 0,
                    "01:00": 0,
                    "02:00": 0,
                    "03:00": 0,
                    "04:00": 0,
                    "05:00": 0,
                    "06:00": 0,
                    "07:00": 0,
                    "08:00": 0,
                    "09:00": 0,
                    "10:00": 0,
                    "11:00": 0,
                    "12:00": 0,
                    "13:00": 0,
                    "14:00": 0,
                    "15:00": 0,
                    "16:00": 0,
                    "17:00": 0,
                    "18:00": 0,
                    "19:00": 0,
                    "20:00": 0,
                    "21:00": 0,
                    "22:00": 0,
                    "23:00": 0
                }
            },
            "sent": {
                "count": 419,
                "initial": 0,
                "replies": 300,
                "forward": 0,
                "follow_up": 0,
                "initial_replies": 221,
                "dayOfWeek": {
                    "Monday": 0,
                    "Tuesday": 0,
                    "Wednesday": 0,
                    "Thursday": 0,
                    "Friday": 0,
                    "Saturday": 0,
                    "Sunday": 0
                },
                "hourOfDay": {
                    "00:00": 0,
                    "01:00": 0,
                    "02:00": 0,
                    "03:00": 0,
                    "04:00": 0,
                    "05:00": 0,
                    "06:00": 0,
                    "07:00": 0,
                    "08:00": 0,
                    "09:00": 0,
                    "10:00": 0,
                    "11:00": 0,
                    "12:00": 0,
                    "13:00": 0,
                    "14:00": 0,
                    "15:00": 0,
                    "16:00": 0,
                    "17:00": 0,
                    "18:00": 0,
                    "19:00": 0,
                    "20:00": 0,
                    "21:00": 0,
                    "22:00": 0,
                    "23:00": 0
                }
            }
        },
        "overallTTR": {
            "friendly": "N/A",
            "raw": null,
            "friendly_no_business": "N/A",
            "raw_no_business": null,
            "percentileRanks": [],
            "percentileRanksRaw": [],
            "within_sla": null,
            "within_sla_percentage_friendly": 0,
            "sla_breach": null,
            "sla_breach_percentage_friendly": 0,
            "excluded_from_sla": 300,
            "excluded_from_sla_percentage_friendly": 100
        },
        "initialTTR": {
            "friendly": "01h:43m",
            "raw": 6204.110599078341,
            "friendly_no_business": "05h:53m",
            "raw_no_business": 21203.576036866358,
            "percentileRanks": [],
            "percentileRanksRaw": [],
            "within_sla": 0,
            "within_sla_percentage_friendly": 0,
            "sla_breach": 0,
            "sla_breach_percentage_friendly": 0,
            "excluded_from_sla": 221,
            "excluded_from_sla_percentage_friendly": 100
        },
        "overallTTF": {
            "friendly": "N/A",
            "raw": null,
            "friendly_no_business": "N/A",
            "raw_no_business": null
        },
        "overallTTC": {
            "friendly": "N/A",
            "raw": null,
            "friendly_no_business": "N/A",
            "raw_no_business": null,
            "percentileRanks": [],
            "percentileRanksRaw": [],
            "within_sla": 0,
            "within_sla_percentage_friendly": 0,
            "sla_breach": 0,
            "sla_breach_percentage_friendly": 0
        },
        "dailyStats": []
    }
}
 

Request   

GET api/logs/conversations

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

from   string  optional  

The start date of your request in the format "YYYY-MM-DD". Must be less than or equal to "to". Example: 2020-01-01

to   string  optional  

The end date of your request in the format "YYYY-MM-DD". Must be greater than or equal to "from". Example: 2020-01-08

model   string  optional  

Name, email address or domain you want statistics for. Use the models endpoint to get a list. Example: My Company

model_type   string  optional  

Model Type of the model being queried. Use "Contact" for email address and domain. Example: Internal

exclude_cc   boolean  optional  

Should we exclude CC messages from the statistics. Example: false

model_com   string  optional  

Model Communicating With, same as Model, except now for who/what the Model is communicating with. Example: Top Revenue Contacts

model_type_com   string  optional  

Model Type of the model you are communicating with. Use "Contact" for email address and domain. Example: Contact Group

exclude_cc_com   boolean  optional  

Should we exclude CC messages from the statistics for the communicating with model. Example: false

exclusive   boolean  optional  

Should we only focus on statistics where exclusively Model and ModelCom were involved?. Example: false

search   string  optional  

Search a specific email subject line (warning this is very slow!).

label   string[]  optional  

Label, if your mail provider supports labels/categories, you can filter your results using them.

thread_type   string  optional  

A comma separated list (no spaces) of any combination of the following: inbound,outbound,internal. Example: inbound,outbound,internal

thread_status   string  optional  

A comma separated list (no spaces) of any combination of the following: internal,await-customer,closed,await-agent. Example: internal,await-customer,closed,await-agent

has_replies   string  optional  

A comma separated list (no spaces) of any combination of the following: hasReplies,hasForwards,hasNoRepliesOrForwards. Example: hasReplies,hasForwards,hasNoRepliesOrForwards

classification   string  optional  

A comma separated list (no spaces) of any combination of the following: calculating,first,reply,reply-all,forward,follow-up. Example: calculating,first,reply,reply-all,forward

messageType   string  optional  

A comma separated list (no spaces) of any combination of the following: inbound,outbound,internal. Example: inbound,outbound,internal

replies_over   integer  optional  

Limit results to conversations with first reply times over X minutes. Should not be used at same time as message_replies_over. Example: 15

message_replies_over   integer  optional  

Limit results to messages where the reply time was over X minutes. Should not be used at same time as replies_over. Example: 15

no_reply_for   integer  optional  

Limit results to messages that have not had a reply for at least X minutes. Example: 15

per_page   integer  optional  

For paginated results, how many results per page. Max 200. Example: 2

sort_by   string  optional  

Field Name to sort conversations (threads) by. Defaults to last_received_at_date_time. Example: last_received_at_date_time

direction   string  optional  

Direction in which to sort paginated results. Must be either asc or desc. Example: desc

page   integer  optional  

For paginated results, which page to get. Example: 1

Conversations - Find by subject or email Find Conversation from a subject line or email address

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/logs/conversations/get-by-subject-or-email"
);

const params = {
    "search": "Support Query",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/logs/conversations/get-by-subject-or-email',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'search' => 'Support Query',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/logs/conversations/get-by-subject-or-email?search=Support+Query" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
[]
 

Request   

GET api/logs/conversations/get-by-subject-or-email

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

search   string  optional  

Search a specific email subject line or email address. Example: Support Query

Conversations - Find Entire Conversation from a single Message ID

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/logs/conversations/get-by-internet-message-id"
);

const params = {
    "internet_message_id": "[email protected]",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/logs/conversations/get-by-internet-message-id',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'internet_message_id' => '[email protected]',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/logs/conversations/get-by-internet-message-id?internet_message_id=1601678270iYOoAwCjDD%40TnlYu0KwPhwXxhcTAeHFJMHlI.DrfT" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "messages": [],
    "last_received_at_date_time": "",
    "subject": "",
    "initial_reply_is_relevant": true,
    "initial_reply_is_included_in_stats": true,
    "initial_reply_is_outlier": false,
    "friendly_time_to_close": "N/A",
    "friendly_raw_time_to_close": "N/A"
}
 

Request   

GET api/logs/conversations/get-by-internet-message-id

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

internet_message_id   string   

The internet message id of the message for which you want the entire conversation. Example: [email protected]

Conversations - Close Endpoint For marking Conversations as closed.

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/logs/conversations/mark-closed"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "ids": [
        8,
        6,
        7,
        5,
        3,
        0,
        9
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/logs/conversations/mark-closed',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'ids' => [
                8,
                6,
                7,
                5,
                3,
                0,
                9,
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/logs/conversations/mark-closed" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"ids\": [
        8,
        6,
        7,
        5,
        3,
        0,
        9
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "ids": [
        3,
        5,
        6,
        7,
        8,
        9
    ]
}
 

Request   

POST api/logs/conversations/mark-closed

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

ids   integer[]   

An array of Conversation/Thread IDs to marked off as closed.

Messages - Report Message Logs data

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/logs/messages"
);

const params = {
    "from": "2020-01-01",
    "to": "2020-01-08",
    "model": "My Company",
    "model_type": "Internal",
    "exclude_cc": "0",
    "model_com": "Top Revenue Contacts",
    "model_type_com": "Contact Group",
    "exclude_cc_com": "0",
    "exclusive": "0",
    "label[0]": "omnis",
    "thread_type": "inbound,outbound,internal",
    "thread_status": "internal,await-customer,closed,await-agent",
    "has_replies": "hasReplies,hasForwards,hasNoRepliesOrForwards",
    "classification": "calculating,first,reply,reply-all,forward",
    "messageType": "inbound,outbound,internal",
    "replies_over": "15",
    "message_replies_over": "15",
    "no_reply_for": "15",
    "per_page": "2",
    "sort_by": "date_time",
    "direction": "desc",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/logs/messages',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'from' => '2020-01-01',
            'to' => '2020-01-08',
            'model' => 'My Company',
            'model_type' => 'Internal',
            'exclude_cc' => '0',
            'model_com' => 'Top Revenue Contacts',
            'model_type_com' => 'Contact Group',
            'exclude_cc_com' => '0',
            'exclusive' => '0',
            'label[0]' => 'omnis',
            'thread_type' => 'inbound,outbound,internal',
            'thread_status' => 'internal,await-customer,closed,await-agent',
            'has_replies' => 'hasReplies,hasForwards,hasNoRepliesOrForwards',
            'classification' => 'calculating,first,reply,reply-all,forward',
            'messageType' => 'inbound,outbound,internal',
            'replies_over' => '15',
            'message_replies_over' => '15',
            'no_reply_for' => '15',
            'per_page' => '2',
            'sort_by' => 'date_time',
            'direction' => 'desc',
            'page' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/logs/messages?from=2020-01-01&to=2020-01-08&model=My+Company&model_type=Internal&exclude_cc=&model_com=Top+Revenue+Contacts&model_type_com=Contact+Group&exclude_cc_com=&exclusive=&label[]=omnis&thread_type=inbound%2Coutbound%2Cinternal&thread_status=internal%2Cawait-customer%2Cclosed%2Cawait-agent&has_replies=hasReplies%2ChasForwards%2ChasNoRepliesOrForwards&classification=calculating%2Cfirst%2Creply%2Creply-all%2Cforward&messageType=inbound%2Coutbound%2Cinternal&replies_over=15&message_replies_over=15&no_reply_for=15&per_page=2&sort_by=date_time&direction=desc&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "stats": {
        "threads": {
            "total": 0,
            "internal": 0,
            "inbound": 0,
            "outbound": 0,
            "sent_internally": 0,
            "await_customer": 0,
            "await_agent": 0,
            "closed": 0,
            "have_replies": 0,
            "have_replies_from_agents": 0,
            "have_no_replies_from_agents": 0,
            "completionRatio": {
                "ratio": 0,
                "numerator": 222,
                "denominator": 0
            },
            "labels": {
                "total": 0,
                "list": []
            }
        },
        "messages": {
            "count": 855,
            "initial": 0,
            "replies": 0,
            "forward": 0,
            "follow_up": 0,
            "received": {
                "count": 517,
                "initial": 196,
                "replies": 236,
                "forward": 41,
                "follow_up": 44,
                "initial_replies": 54,
                "dayOfWeek": {
                    "Monday": 0,
                    "Tuesday": 0,
                    "Wednesday": 0,
                    "Thursday": 0,
                    "Friday": 0,
                    "Saturday": 0,
                    "Sunday": 0
                },
                "hourOfDay": {
                    "00:00": 0,
                    "01:00": 0,
                    "02:00": 0,
                    "03:00": 0,
                    "04:00": 0,
                    "05:00": 0,
                    "06:00": 0,
                    "07:00": 0,
                    "08:00": 0,
                    "09:00": 0,
                    "10:00": 0,
                    "11:00": 0,
                    "12:00": 0,
                    "13:00": 0,
                    "14:00": 0,
                    "15:00": 0,
                    "16:00": 0,
                    "17:00": 0,
                    "18:00": 0,
                    "19:00": 0,
                    "20:00": 0,
                    "21:00": 0,
                    "22:00": 0,
                    "23:00": 0
                }
            },
            "sent": {
                "count": 421,
                "initial": 68,
                "replies": 302,
                "forward": 48,
                "follow_up": 3,
                "initial_replies": 222,
                "dayOfWeek": {
                    "Monday": 0,
                    "Tuesday": 0,
                    "Wednesday": 0,
                    "Thursday": 0,
                    "Friday": 0,
                    "Saturday": 0,
                    "Sunday": 0
                },
                "hourOfDay": {
                    "00:00": 0,
                    "01:00": 0,
                    "02:00": 0,
                    "03:00": 0,
                    "04:00": 0,
                    "05:00": 0,
                    "06:00": 0,
                    "07:00": 0,
                    "08:00": 0,
                    "09:00": 0,
                    "10:00": 0,
                    "11:00": 0,
                    "12:00": 0,
                    "13:00": 0,
                    "14:00": 0,
                    "15:00": 0,
                    "16:00": 0,
                    "17:00": 0,
                    "18:00": 0,
                    "19:00": 0,
                    "20:00": 0,
                    "21:00": 0,
                    "22:00": 0,
                    "23:00": 0
                }
            }
        },
        "overallTTR": {
            "friendly": "01h:37m",
            "raw": 5855.543046357616,
            "friendly_no_business": "06h:03m",
            "raw_no_business": 21806.17880794702,
            "percentileRanks": [],
            "percentileRanksRaw": [],
            "within_sla": null,
            "within_sla_percentage_friendly": 0,
            "sla_breach": null,
            "sla_breach_percentage_friendly": 0,
            "excluded_from_sla": 302,
            "excluded_from_sla_percentage_friendly": 100
        },
        "initialTTR": {
            "friendly": "N/A",
            "raw": null,
            "friendly_no_business": "N/A",
            "raw_no_business": null,
            "percentileRanks": [],
            "percentileRanksRaw": [],
            "within_sla": 0,
            "within_sla_percentage_friendly": 0,
            "sla_breach": 0,
            "sla_breach_percentage_friendly": 0,
            "excluded_from_sla": 0,
            "excluded_from_sla_percentage_friendly": 0
        },
        "overallTTF": {
            "friendly": "N/A",
            "raw": null,
            "friendly_no_business": "N/A",
            "raw_no_business": null
        },
        "overallTTC": {
            "friendly": "N/A",
            "raw": null,
            "friendly_no_business": "N/A",
            "raw_no_business": null,
            "percentileRanks": [],
            "percentileRanksRaw": [],
            "within_sla": 0,
            "within_sla_percentage_friendly": 0,
            "sla_breach": 0,
            "sla_breach_percentage_friendly": 0
        },
        "dailyStats": []
    },
    "messages": {
        "current_page": 1,
        "data": [
            {
                "email_usernames_from": [
                    "[email protected]"
                ],
                "replytime": 0,
                "touch_time": 85,
                "references": [
                    "[email protected]",
                    "[email protected]",
                    "[email protected]"
                ],
                "email_domains_reply_to": [],
                "is_newest_message": true,
                "subject": "RE: cultivate robust channels",
                "friendly_reply_time": "00s",
                "raw_replytime": 85,
                "friendly_raw_reply_time": "01m:25s",
                "is_touch": true,
                "date_time": "Feb 1st 2023 19:28:29",
                "email_usernames_to": [
                    "[email protected]"
                ],
                "email_domains_received": [
                    "barton.com"
                ],
                "email_domains": [
                    "timetoreply.com",
                    "barton.com"
                ],
                "email_usernames_received": [
                    "[email protected]"
                ],
                "is_initial_reply": false,
                "message_type": "outbound",
                "classification": "follow-up",
                "email_usernames_reply_to": [],
                "labels": [],
                "is_nudge": false,
                "internet_message_id": "[email protected]",
                "email_domains_from": [
                    "timetoreply.com"
                ],
                "email_domains_to": [
                    "barton.com"
                ],
                "email_usernames": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_usernames_cc": [],
                "thread_id": 481,
                "timestamp": 1675279709,
                "is_closing_email": false,
                "is_included_in_stats": true,
                "reply_is_relevant": true,
                "reply_is_outlier": false,
                "agents_read_status": [],
                "friendly_touch_time": "01m:25s",
                "thread_message_count": 4
            },
            {
                "email_usernames_from": [
                    "g.[email protected]"
                ],
                "replytime": 0,
                "touch_time": null,
                "references": [
                    "[email protected]"
                ],
                "email_domains_reply_to": [],
                "is_newest_message": false,
                "subject": "RE: cultivate robust channels",
                "friendly_reply_time": "00s",
                "raw_replytime": 2230,
                "friendly_raw_reply_time": "37m:10s",
                "is_touch": true,
                "date_time": "Feb 1st 2023 19:27:04",
                "email_usernames_to": [
                    "[email protected]"
                ],
                "email_domains_received": [
                    "barton.com"
                ],
                "email_domains": [
                    "timetoreply.com",
                    "barton.com"
                ],
                "email_usernames_received": [
                    "[email protected]"
                ],
                "is_initial_reply": true,
                "message_type": "outbound",
                "classification": "reply",
                "email_usernames_reply_to": [],
                "labels": [],
                "is_nudge": false,
                "internet_message_id": "[email protected]",
                "email_domains_from": [
                    "timetoreply.com"
                ],
                "email_domains_to": [
                    "barton.com"
                ],
                "email_usernames": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_usernames_cc": [],
                "thread_id": 481,
                "timestamp": 1675279624,
                "is_closing_email": false,
                "is_included_in_stats": true,
                "reply_is_relevant": true,
                "reply_is_outlier": false,
                "agents_read_status": [],
                "friendly_touch_time": "N/A",
                "thread_message_count": 4
            }
        ],
        "first_page_url": "https://portal.timetoreply.com/api/logs/messages?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=1",
        "from": 1,
        "last_page": 428,
        "last_page_url": "https://portal.timetoreply.com/api/logs/messages?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=428",
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/messages?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=1",
                "label": "1",
                "active": true
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/messages?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=2",
                "label": "2",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/messages?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=3",
                "label": "3",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/messages?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=4",
                "label": "4",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/messages?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=5",
                "label": "5",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/messages?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=6",
                "label": "6",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/messages?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=7",
                "label": "7",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/messages?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=8",
                "label": "8",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/messages?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=9",
                "label": "9",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/messages?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=10",
                "label": "10",
                "active": false
            },
            {
                "url": null,
                "label": "...",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/messages?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=427",
                "label": "427",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/messages?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=428",
                "label": "428",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/messages?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=2",
                "label": "Next »",
                "active": false
            }
        ],
        "next_page_url": "https://portal.timetoreply.com/api/logs/messages?model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=2",
        "path": "https://portal.timetoreply.com/api/logs/messages",
        "per_page": 2,
        "prev_page_url": null,
        "to": 2,
        "total": 855
    }
}
 

Request   

GET api/logs/messages

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

from   string  optional  

The start date of your request in the format "YYYY-MM-DD". Must be less than or equal to "to". Example: 2020-01-01

to   string  optional  

The end date of your request in the format "YYYY-MM-DD". Must be greater than or equal to "from". Example: 2020-01-08

model   string  optional  

Name, email address or domain you want statistics for. Use the models endpoint to get a list. Example: My Company

model_type   string  optional  

Model Type of the model being queried. Use "Contact" for email address and domain. Example: Internal

exclude_cc   boolean  optional  

Should we exclude CC messages from the statistics. Example: false

model_com   string  optional  

Model Communicating With, same as Model, except now for who/what the Model is communicating with. Example: Top Revenue Contacts

model_type_com   string  optional  

Model Type of the model you are communicating with. Use "Contact" for email address and domain. Example: Contact Group

exclude_cc_com   boolean  optional  

Should we exclude CC messages from the statistics for the communicating with model. Example: false

exclusive   boolean  optional  

Should we only focus on statistics where exclusively Model and ModelCom were involved?. Example: false

search   string  optional  

Search a specific email subject line (warning this is very slow!).

label   string[]  optional  

Label, if your mail provider supports labels/categories, you can filter your results using them.

thread_type   string  optional  

A comma separated list (no spaces) of any combination of the following: inbound,outbound,internal. Example: inbound,outbound,internal

thread_status   string  optional  

A comma separated list (no spaces) of any combination of the following: internal,await-customer,closed,await-agent. Example: internal,await-customer,closed,await-agent

has_replies   string  optional  

A comma separated list (no spaces) of any combination of the following: hasReplies,hasForwards,hasNoRepliesOrForwards. Example: hasReplies,hasForwards,hasNoRepliesOrForwards

classification   string  optional  

A comma separated list (no spaces) of any combination of the following: calculating,first,reply,reply-all,forward,follow-up. Example: calculating,first,reply,reply-all,forward

messageType   string  optional  

A comma separated list (no spaces) of any combination of the following: inbound,outbound,internal. Example: inbound,outbound,internal

replies_over   integer  optional  

Limit results to conversations with first reply times over X minutes. Should not be used at same time as message_replies_over. Example: 15

message_replies_over   integer  optional  

Limit results to messages where the reply time was over X minutes. Should not be used at same time as replies_over. Example: 15

no_reply_for   integer  optional  

Limit results to messages that have not had a reply for at least X minutes. Example: 15

per_page   integer  optional  

For paginated results, how many results per page. Max 200. Example: 2

sort_by   string  optional  

Field Name to sort messages by. Defaults to date_time. Example: date_time

direction   string  optional  

Direction in which to sort paginated results. Must be either asc or desc. Example: desc

page   integer  optional  

For paginated results, which page to get. Example: 1

Stats - Breakdown Get the conversations or emails that make up a given statistic.

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/logs/stat-breakdown"
);

const params = {
    "stat": "threads.total",
    "from": "2020-01-01",
    "to": "2020-01-08",
    "model": "My Company",
    "model_type": "Internal",
    "exclude_cc": "0",
    "model_com": "Top Revenue Contacts",
    "model_type_com": "Contact Group",
    "exclude_cc_com": "0",
    "exclusive": "0",
    "label[0]": "sapiente",
    "thread_type": "inbound,outbound,internal",
    "thread_status": "internal,await-customer,closed,await-agent",
    "has_replies": "hasReplies,hasForwards,hasNoRepliesOrForwards",
    "classification": "calculating,first,reply,reply-all,forward",
    "messageType": "inbound,outbound,internal",
    "replies_over": "15",
    "message_replies_over": "15",
    "no_reply_for": "15",
    "per_page": "2",
    "sort_by": "last_received_at_date_time",
    "direction": "desc",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/logs/stat-breakdown',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'stat' => 'threads.total',
            'from' => '2020-01-01',
            'to' => '2020-01-08',
            'model' => 'My Company',
            'model_type' => 'Internal',
            'exclude_cc' => '0',
            'model_com' => 'Top Revenue Contacts',
            'model_type_com' => 'Contact Group',
            'exclude_cc_com' => '0',
            'exclusive' => '0',
            'label[0]' => 'sapiente',
            'thread_type' => 'inbound,outbound,internal',
            'thread_status' => 'internal,await-customer,closed,await-agent',
            'has_replies' => 'hasReplies,hasForwards,hasNoRepliesOrForwards',
            'classification' => 'calculating,first,reply,reply-all,forward',
            'messageType' => 'inbound,outbound,internal',
            'replies_over' => '15',
            'message_replies_over' => '15',
            'no_reply_for' => '15',
            'per_page' => '2',
            'sort_by' => 'last_received_at_date_time',
            'direction' => 'desc',
            'page' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&from=2020-01-01&to=2020-01-08&model=My+Company&model_type=Internal&exclude_cc=&model_com=Top+Revenue+Contacts&model_type_com=Contact+Group&exclude_cc_com=&exclusive=&label[]=sapiente&thread_type=inbound%2Coutbound%2Cinternal&thread_status=internal%2Cawait-customer%2Cclosed%2Cawait-agent&has_replies=hasReplies%2ChasForwards%2ChasNoRepliesOrForwards&classification=calculating%2Cfirst%2Creply%2Creply-all%2Cforward&messageType=inbound%2Coutbound%2Cinternal&replies_over=15&message_replies_over=15&no_reply_for=15&per_page=2&sort_by=last_received_at_date_time&direction=desc&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "data": {
        "current_page": 1,
        "data": [
            {
                "id": 481,
                "init_agent_reply_time": 0,
                "init_agent_action_time": 47867,
                "total_agent_reply_time": 47867,
                "last_received_at_date_time": "Feb 1st 2023 19:28:29",
                "thread_type": "inbound",
                "thread_status": "await-customer",
                "raw_init_agent_reply_time": 50097,
                "init_agent_reply_message_id": "[email protected]",
                "init_reply_agent_id": 1,
                "time_to_close": null,
                "raw_time_to_close": null,
                "touches": 2,
                "nudges": 1,
                "friendly_initial_reply_time": "00s",
                "friendly_raw_initial_reply_time": "13h:54m:57s",
                "friendly_total_reply_time": "13h:17m:47s",
                "microsoft_conversations": [],
                "email_usernames": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_usernames_from": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_usernames_reply_to": [],
                "email_usernames_to": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_usernames_received": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_domains": [
                    "barton.com",
                    "timetoreply.com"
                ],
                "date_times": [
                    "2023-02-01 05:32:07",
                    "2023-02-01 18:49:54",
                    "2023-02-01 19:27:04",
                    "2023-02-01 19:28:29"
                ],
                "message_classifications": [
                    "first",
                    "follow-up",
                    "reply"
                ],
                "message_subjects": [
                    "cultivate robust channels",
                    "RE: cultivate robust channels"
                ],
                "messages": [
                    {
                        "internet_message_id": "[email protected]",
                        "date_time": "Feb 1st 2023 19:28:29",
                        "subject": "RE: cultivate robust channels",
                        "references": [
                            "[email protected]",
                            "[email protected]",
                            "[email protected]"
                        ],
                        "replytime": 0,
                        "classification": "follow-up",
                        "raw_replytime": 85,
                        "friendly_reply_time": "00s",
                        "friendly_raw_reply_time": "01m:25s",
                        "email_domains": [
                            "timetoreply.com",
                            "barton.com"
                        ],
                        "email_domains_from": [
                            "timetoreply.com"
                        ],
                        "email_domains_to": [
                            "barton.com"
                        ],
                        "email_domains_reply_to": [],
                        "email_domains_received": [
                            "barton.com"
                        ],
                        "email_usernames": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "email_usernames_from": [
                            "[email protected]"
                        ],
                        "email_usernames_to": [
                            "[email protected]"
                        ],
                        "email_usernames_cc": [],
                        "email_usernames_reply_to": [],
                        "email_usernames_received": [
                            "[email protected]"
                        ],
                        "is_initial_reply": false,
                        "is_newest_message": true,
                        "message_type": "outbound",
                        "labels": [],
                        "is_touch": true,
                        "is_nudge": false,
                        "touch_time": 85,
                        "timestamp": 1675279709,
                        "is_closing_email": false,
                        "is_included_in_stats": true,
                        "reply_is_relevant": true,
                        "reply_is_outlier": false,
                        "agents_read_status": [],
                        "friendly_touch_time": "01m:25s"
                    },
                    {
                        "internet_message_id": "[email protected]",
                        "date_time": "Feb 1st 2023 19:27:04",
                        "subject": "RE: cultivate robust channels",
                        "references": [
                            "[email protected]"
                        ],
                        "replytime": 0,
                        "classification": "reply",
                        "raw_replytime": 2230,
                        "friendly_reply_time": "00s",
                        "friendly_raw_reply_time": "37m:10s",
                        "email_domains": [
                            "timetoreply.com",
                            "barton.com"
                        ],
                        "email_domains_from": [
                            "timetoreply.com"
                        ],
                        "email_domains_to": [
                            "barton.com"
                        ],
                        "email_domains_reply_to": [],
                        "email_domains_received": [
                            "barton.com"
                        ],
                        "email_usernames": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "email_usernames_from": [
                            "[email protected]"
                        ],
                        "email_usernames_to": [
                            "[email protected]"
                        ],
                        "email_usernames_cc": [],
                        "email_usernames_reply_to": [],
                        "email_usernames_received": [
                            "[email protected]"
                        ],
                        "is_initial_reply": true,
                        "is_newest_message": false,
                        "message_type": "outbound",
                        "labels": [],
                        "is_touch": true,
                        "is_nudge": false,
                        "touch_time": null,
                        "timestamp": 1675279624,
                        "is_closing_email": false,
                        "is_included_in_stats": true,
                        "reply_is_relevant": true,
                        "reply_is_outlier": false,
                        "agents_read_status": [],
                        "friendly_touch_time": "N/A"
                    },
                    {
                        "internet_message_id": "[email protected]",
                        "date_time": "Feb 1st 2023 18:49:54",
                        "subject": "RE: cultivate robust channels",
                        "references": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "replytime": 47867,
                        "classification": "follow-up",
                        "raw_replytime": 47867,
                        "friendly_reply_time": "13h:17m:47s",
                        "friendly_raw_reply_time": "13h:17m:47s",
                        "email_domains": [
                            "barton.com",
                            "timetoreply.com"
                        ],
                        "email_domains_from": [
                            "barton.com"
                        ],
                        "email_domains_to": [
                            "timetoreply.com"
                        ],
                        "email_domains_reply_to": [],
                        "email_domains_received": [
                            "timetoreply.com"
                        ],
                        "email_usernames": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "email_usernames_from": [
                            "[email protected]"
                        ],
                        "email_usernames_to": [
                            "[email protected]"
                        ],
                        "email_usernames_cc": [],
                        "email_usernames_reply_to": [],
                        "email_usernames_received": [
                            "[email protected]"
                        ],
                        "is_initial_reply": false,
                        "is_newest_message": false,
                        "message_type": "inbound",
                        "labels": [],
                        "is_touch": false,
                        "is_nudge": true,
                        "touch_time": null,
                        "timestamp": 1675277394,
                        "is_closing_email": false,
                        "is_included_in_stats": true,
                        "reply_is_relevant": false,
                        "reply_is_outlier": false,
                        "agents_read_status": {
                            "[email protected]": true
                        },
                        "friendly_touch_time": "N/A"
                    },
                    {
                        "internet_message_id": "[email protected]",
                        "date_time": "Feb 1st 2023 05:32:07",
                        "subject": "cultivate robust channels",
                        "references": null,
                        "replytime": null,
                        "classification": "first",
                        "raw_replytime": null,
                        "friendly_reply_time": "N/A",
                        "friendly_raw_reply_time": "N/A",
                        "email_domains": [
                            "barton.com",
                            "timetoreply.com"
                        ],
                        "email_domains_from": [
                            "barton.com"
                        ],
                        "email_domains_to": [
                            "timetoreply.com"
                        ],
                        "email_domains_reply_to": [],
                        "email_domains_received": [
                            "timetoreply.com"
                        ],
                        "email_usernames": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "email_usernames_from": [
                            "[email protected]"
                        ],
                        "email_usernames_to": [
                            "[email protected]"
                        ],
                        "email_usernames_cc": [],
                        "email_usernames_reply_to": [],
                        "email_usernames_received": [
                            "[email protected]"
                        ],
                        "is_initial_reply": false,
                        "is_newest_message": false,
                        "message_type": "inbound",
                        "labels": [
                            "UNREAD"
                        ],
                        "is_touch": false,
                        "is_nudge": false,
                        "touch_time": null,
                        "timestamp": 1675229527,
                        "is_closing_email": false,
                        "is_included_in_stats": true,
                        "reply_is_relevant": false,
                        "reply_is_outlier": false,
                        "agents_read_status": {
                            "[email protected]": false
                        },
                        "friendly_touch_time": "N/A"
                    }
                ],
                "labels": [
                    "UNREAD"
                ],
                "has_contact_success": false,
                "contact_success_time": null,
                "contact_reply_time": null,
                "deal": null,
                "subject": "RE: cultivate robust channels",
                "initial_reply_is_relevant": true,
                "initial_reply_is_included_in_stats": true,
                "initial_reply_is_outlier": false,
                "friendly_time_to_close": "N/A",
                "friendly_raw_time_to_close": "N/A"
            },
            {
                "id": 203,
                "init_agent_reply_time": 1465,
                "init_agent_action_time": 1465,
                "total_agent_reply_time": 13534,
                "last_received_at_date_time": "Feb 1st 2023 17:58:48",
                "thread_type": "inbound",
                "thread_status": "await-agent",
                "raw_init_agent_reply_time": 1465,
                "init_agent_reply_message_id": "[email protected]",
                "init_reply_agent_id": 4,
                "time_to_close": null,
                "raw_time_to_close": null,
                "touches": 1,
                "nudges": 0,
                "friendly_initial_reply_time": "24m:25s",
                "friendly_raw_initial_reply_time": "24m:25s",
                "friendly_total_reply_time": "03h:45m:34s",
                "microsoft_conversations": [],
                "email_usernames": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_usernames_from": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_usernames_reply_to": [],
                "email_usernames_to": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_usernames_received": [
                    "[email protected]",
                    "[email protected]"
                ],
                "email_domains": [
                    "crooks.com",
                    "timetoreply.com"
                ],
                "date_times": [
                    "2023-02-01 14:13:14",
                    "2023-02-01 14:37:39",
                    "2023-02-01 17:58:48"
                ],
                "message_classifications": [
                    "first",
                    "reply"
                ],
                "message_subjects": [
                    "Web Enquiry Form: visualize cross-media mindshare",
                    "RE: Web Enquiry Form: visualize cross-media mindshare"
                ],
                "messages": [
                    {
                        "internet_message_id": "[email protected]",
                        "date_time": "Feb 1st 2023 17:58:48",
                        "subject": "RE: Web Enquiry Form: visualize cross-media mindshare",
                        "references": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "replytime": 12069,
                        "classification": "reply",
                        "raw_replytime": 12069,
                        "friendly_reply_time": "03h:21m:09s",
                        "friendly_raw_reply_time": "03h:21m:09s",
                        "email_domains": [
                            "crooks.com",
                            "timetoreply.com"
                        ],
                        "email_domains_from": [
                            "crooks.com"
                        ],
                        "email_domains_to": [
                            "timetoreply.com"
                        ],
                        "email_domains_reply_to": [],
                        "email_domains_received": [
                            "timetoreply.com"
                        ],
                        "email_usernames": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "email_usernames_from": [
                            "[email protected]"
                        ],
                        "email_usernames_to": [
                            "[email protected]"
                        ],
                        "email_usernames_cc": [],
                        "email_usernames_reply_to": [],
                        "email_usernames_received": [
                            "[email protected]"
                        ],
                        "is_initial_reply": false,
                        "is_newest_message": true,
                        "message_type": "inbound",
                        "labels": [],
                        "is_touch": false,
                        "is_nudge": false,
                        "touch_time": null,
                        "timestamp": 1675274328,
                        "is_closing_email": false,
                        "is_included_in_stats": true,
                        "reply_is_relevant": false,
                        "reply_is_outlier": false,
                        "agents_read_status": {
                            "[email protected]": true
                        },
                        "friendly_touch_time": "N/A"
                    },
                    {
                        "internet_message_id": "[email protected]",
                        "date_time": "Feb 1st 2023 14:37:39",
                        "subject": "RE: Web Enquiry Form: visualize cross-media mindshare",
                        "references": [
                            "[email protected]"
                        ],
                        "replytime": 1465,
                        "classification": "reply",
                        "raw_replytime": 1465,
                        "friendly_reply_time": "24m:25s",
                        "friendly_raw_reply_time": "24m:25s",
                        "email_domains": [
                            "timetoreply.com",
                            "crooks.com"
                        ],
                        "email_domains_from": [
                            "timetoreply.com"
                        ],
                        "email_domains_to": [
                            "crooks.com"
                        ],
                        "email_domains_reply_to": [],
                        "email_domains_received": [
                            "crooks.com"
                        ],
                        "email_usernames": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "email_usernames_from": [
                            "[email protected]"
                        ],
                        "email_usernames_to": [
                            "[email protected]"
                        ],
                        "email_usernames_cc": [],
                        "email_usernames_reply_to": [],
                        "email_usernames_received": [
                            "[email protected]"
                        ],
                        "is_initial_reply": true,
                        "is_newest_message": false,
                        "message_type": "outbound",
                        "labels": [
                            "UNREAD",
                            "CATEGORY_PROMOTIONS",
                            "CATEGORY_PERSONAL"
                        ],
                        "is_touch": true,
                        "is_nudge": false,
                        "touch_time": null,
                        "timestamp": 1675262259,
                        "is_closing_email": false,
                        "is_included_in_stats": true,
                        "reply_is_relevant": true,
                        "reply_is_outlier": false,
                        "agents_read_status": [],
                        "friendly_touch_time": "N/A"
                    },
                    {
                        "internet_message_id": "[email protected]",
                        "date_time": "Feb 1st 2023 14:13:14",
                        "subject": "Web Enquiry Form: visualize cross-media mindshare",
                        "references": null,
                        "replytime": null,
                        "classification": "first",
                        "raw_replytime": null,
                        "friendly_reply_time": "N/A",
                        "friendly_raw_reply_time": "N/A",
                        "email_domains": [
                            "crooks.com",
                            "timetoreply.com"
                        ],
                        "email_domains_from": [
                            "crooks.com"
                        ],
                        "email_domains_to": [
                            "timetoreply.com"
                        ],
                        "email_domains_reply_to": [],
                        "email_domains_received": [
                            "timetoreply.com"
                        ],
                        "email_usernames": [
                            "[email protected]",
                            "[email protected]"
                        ],
                        "email_usernames_from": [
                            "[email protected]"
                        ],
                        "email_usernames_to": [
                            "[email protected]"
                        ],
                        "email_usernames_cc": [],
                        "email_usernames_reply_to": [],
                        "email_usernames_received": [
                            "[email protected]"
                        ],
                        "is_initial_reply": false,
                        "is_newest_message": false,
                        "message_type": "inbound",
                        "labels": [],
                        "is_touch": false,
                        "is_nudge": false,
                        "touch_time": null,
                        "timestamp": 1675260794,
                        "is_closing_email": false,
                        "is_included_in_stats": true,
                        "reply_is_relevant": false,
                        "reply_is_outlier": false,
                        "agents_read_status": {
                            "[email protected]": true
                        },
                        "friendly_touch_time": "N/A"
                    }
                ],
                "labels": [
                    "UNREAD",
                    "CATEGORY_PROMOTIONS",
                    "CATEGORY_PERSONAL"
                ],
                "has_contact_success": true,
                "contact_success_time": 13534,
                "contact_reply_time": 12069,
                "deal": {
                    "id": 23,
                    "deal_stage": 1,
                    "deal_value": 1571,
                    "owner": 5,
                    "name": "Rustic Silk Shoes"
                },
                "subject": "RE: Web Enquiry Form: visualize cross-media mindshare",
                "initial_reply_is_relevant": true,
                "initial_reply_is_included_in_stats": true,
                "initial_reply_is_outlier": false,
                "friendly_time_to_close": "N/A",
                "friendly_raw_time_to_close": "N/A"
            }
        ],
        "first_page_url": "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=1",
        "from": 1,
        "last_page": 169,
        "last_page_url": "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=169",
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=1",
                "label": "1",
                "active": true
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=2",
                "label": "2",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=3",
                "label": "3",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=4",
                "label": "4",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=5",
                "label": "5",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=6",
                "label": "6",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=7",
                "label": "7",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=8",
                "label": "8",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=9",
                "label": "9",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=10",
                "label": "10",
                "active": false
            },
            {
                "url": null,
                "label": "...",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=168",
                "label": "168",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=169",
                "label": "169",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=2",
                "label": "Next »",
                "active": false
            }
        ],
        "next_page_url": "https://portal.timetoreply.com/api/logs/stat-breakdown?stat=threads.total&model=My%20Company&model_type=Internal&model_com=Top%20Revenue%20Contacts&model_type_com=Contact%20Group&per_page=2&direction=desc&page=2",
        "path": "https://portal.timetoreply.com/api/logs/stat-breakdown",
        "per_page": 2,
        "prev_page_url": null,
        "to": 2,
        "total": 338
    },
    "type": "threads",
    "show_column": null,
    "friendly_name": "Total Conversations",
    "explainer": "All conversations."
}
 

Request   

GET api/logs/stat-breakdown

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

stat   string  optional  

The stat to get the breakdown for. Example: threads.total

from   string  optional  

The start date of your request in the format "YYYY-MM-DD". Must be less than or equal to "to". Example: 2020-01-01

to   string  optional  

The end date of your request in the format "YYYY-MM-DD". Must be greater than or equal to "from". Example: 2020-01-08

model   string  optional  

Name, email address or domain you want statistics for. Use the models endpoint to get a list. Example: My Company

model_type   string  optional  

Model Type of the model being queried. Use "Contact" for email address and domain. Example: Internal

exclude_cc   boolean  optional  

Should we exclude CC messages from the statistics. Example: false

model_com   string  optional  

Model Communicating With, same as Model, except now for who/what the Model is communicating with. Example: Top Revenue Contacts

model_type_com   string  optional  

Model Type of the model you are communicating with. Use "Contact" for email address and domain. Example: Contact Group

exclude_cc_com   boolean  optional  

Should we exclude CC messages from the statistics for the communicating with model. Example: false

exclusive   boolean  optional  

Should we only focus on statistics where exclusively Model and ModelCom were involved?. Example: false

search   string  optional  

Search a specific email subject line (warning this is very slow!).

label   string[]  optional  

Label, if your mail provider supports labels/categories, you can filter your results using them.

thread_type   string  optional  

A comma separated list (no spaces) of any combination of the following: inbound,outbound,internal. Example: inbound,outbound,internal

thread_status   string  optional  

A comma separated list (no spaces) of any combination of the following: internal,await-customer,closed,await-agent. Example: internal,await-customer,closed,await-agent

has_replies   string  optional  

A comma separated list (no spaces) of any combination of the following: hasReplies,hasForwards,hasNoRepliesOrForwards. Example: hasReplies,hasForwards,hasNoRepliesOrForwards

classification   string  optional  

A comma separated list (no spaces) of any combination of the following: calculating,first,reply,reply-all,forward,follow-up. Example: calculating,first,reply,reply-all,forward

messageType   string  optional  

A comma separated list (no spaces) of any combination of the following: inbound,outbound,internal. Example: inbound,outbound,internal

replies_over   integer  optional  

Limit results to conversations with first reply times over X minutes. Should not be used at same time as message_replies_over. Example: 15

message_replies_over   integer  optional  

Limit results to messages where the reply time was over X minutes. Should not be used at same time as replies_over. Example: 15

no_reply_for   integer  optional  

Limit results to messages that have not had a reply for at least X minutes. Example: 15

per_page   integer  optional  

For paginated results, how many results per page. Max 200. Example: 2

sort_by   string  optional  

Field Name to sort conversations (threads) by. Defaults to last_received_at_date_time. Example: last_received_at_date_time

direction   string  optional  

Direction in which to sort paginated results. Must be either asc or desc. Example: desc

page   integer  optional  

For paginated results, which page to get. Example: 1

Entities

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/search"
);

const params = {
    "per_page": "2",
    "page": "1",
    "search": "Top Revenue",
    "type": "all",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/search',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'per_page' => '2',
            'page' => '1',
            'search' => 'Top Revenue',
            'type' => 'all',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/search?per_page=2&page=1&search=Top+Revenue&type=all" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "current_page": 1,
    "data": [
        {
            "id": 1,
            "name": "Top Revenue Customers",
            "email_usernames": [
                "[email protected]",
                "[email protected]"
            ],
            "customer_domains": [
                "kling.com",
                "lakin.net"
            ],
            "model_type": "Contact Group",
            "icon": "user-friends"
        },
        {
            "id": 1,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        }
    ],
    "first_page_url": "https://portal.timetoreply.com/api/entities/search?per_page=2&search=Top%20Revenue&type=all&page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "https://portal.timetoreply.com/api/entities/search?per_page=2&search=Top%20Revenue&type=all&page=1",
    "links": [
        {
            "url": null,
            "label": "« Previous",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/search?per_page=2&search=Top%20Revenue&type=all&page=1",
            "label": "1",
            "active": true
        },
        {
            "url": null,
            "label": "Next »",
            "active": false
        }
    ],
    "next_page_url": null,
    "path": "https://portal.timetoreply.com/api/entities/search",
    "per_page": 2,
    "prev_page_url": null,
    "to": 2,
    "total": 2
}
 

Mailboxes - List List all mailboxes

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents"
);

const params = {
    "sort_by": "name",
    "direction": "asc",
    "per_page": "2",
    "page": "1",
    "product_type": "success",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/agents',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'sort_by' => 'name',
            'direction' => 'asc',
            'per_page' => '2',
            'page' => '1',
            'product_type' => 'success',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/agents?sort_by=name&direction=asc&per_page=2&page=1&product_type=success" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "current_page": 1,
    "data": [
        {
            "id": 2,
            "company_id": 1,
            "company_name": "timetoreply",
            "name": "Koby Maggio",
            "email": "[email protected]",
            "main_type": "Google",
            "active": true,
            "created_at": "2023-01-25 19:48:26",
            "email_usernames": [
                "[email protected]"
            ],
            "time_zone": {
                "id": 29,
                "php_timezone": "Europe/London",
                "friendly_name": "Greenwich Mean Time =>  Dublin, Edinburgh, Lisbon, London"
            },
            "newest_message_date": "2023-01-31 17:27:04",
            "ingestion_started_date": "2023-01-13 17:17:10",
            "ingestion_completed_date": "2023-02-01 19:48:35",
            "ingestion_duration": "458h:31m",
            "ingestion_duration_seconds": 1650685,
            "user_permissions": [],
            "search_string": "Koby Maggio [email protected]",
            "leave_days": [],
            "work_days": [],
            "business_hours": [],
            "product_type": "success",
            "is_user": false,
            "last_used_addon": null,
            "optimiser_installed": false
        },
        {
            "id": 4,
            "company_id": 1,
            "company_name": "timetoreply",
            "name": "Peggie Bosco",
            "email": "[email protected]",
            "main_type": "Google",
            "active": true,
            "created_at": "2023-01-25 19:48:26",
            "email_usernames": [
                "[email protected]"
            ],
            "time_zone": {
                "id": 29,
                "php_timezone": "Europe/London",
                "friendly_name": "Greenwich Mean Time =>  Dublin, Edinburgh, Lisbon, London"
            },
            "newest_message_date": null,
            "ingestion_started_date": "2022-07-01 14:46:50",
            "ingestion_completed_date": "2022-10-17 09:07:33",
            "ingestion_duration": "2586h:20m",
            "ingestion_duration_seconds": 9310843,
            "user_permissions": [],
            "search_string": "Peggie Bosco [email protected]",
            "leave_days": [],
            "work_days": [],
            "business_hours": [],
            "product_type": "success",
            "is_user": false,
            "last_used_addon": null,
            "optimiser_installed": false
        }
    ],
    "first_page_url": "https://portal.timetoreply.com/api/entities/agents?direction=asc&per_page=2&product_type=success&page=1",
    "from": 1,
    "last_page": 2,
    "last_page_url": "https://portal.timetoreply.com/api/entities/agents?direction=asc&per_page=2&product_type=success&page=2",
    "links": [
        {
            "url": null,
            "label": "« Previous",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/agents?direction=asc&per_page=2&product_type=success&page=1",
            "label": "1",
            "active": true
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/agents?direction=asc&per_page=2&product_type=success&page=2",
            "label": "2",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/agents?direction=asc&per_page=2&product_type=success&page=2",
            "label": "Next »",
            "active": false
        }
    ],
    "next_page_url": "https://portal.timetoreply.com/api/entities/agents?direction=asc&per_page=2&product_type=success&page=2",
    "path": "https://portal.timetoreply.com/api/entities/agents",
    "per_page": 2,
    "prev_page_url": null,
    "to": 2,
    "total": 3
}
 

Request   

GET api/entities/agents

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

sort_by   string  optional  

The field to sort the mailboxes by. Example: name

direction   string  optional  

Sort asc or desc. Example: asc

per_page   number  optional  

The number of mailboxes to show per page. Example: 2

page   number  optional  

The page number. Example: 1

search   string  optional  

Optional search string.

product_type   string  optional  

Optional product type filter. Example: success

Mailboxes - Invite Create a mailbox invitation

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/invite"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Peter Rabbit",
    "type": 1,
    "email": "[email protected]",
    "message": "Hey Pete, please accept this invite."
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/agents/invite',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Peter Rabbit',
            'type' => 1,
            'email' => '[email protected]',
            'message' => 'Hey Pete, please accept this invite.',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/agents/invite" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Peter Rabbit\",
    \"type\": 1,
    \"email\": \"[email protected]\",
    \"message\": \"Hey Pete, please accept this invite.\"
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "success": true,
    "authURL": "https://portal.timetoreply.com/authenticate/2?expires=1675453743&signature=5207d39d44cc05d83ac959486e23717fc4c2f6e5d87c2fd5050afcdf7adfc7e2",
    "id": 2
}
 

Request   

POST api/entities/agents/invite

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

The name of the Mailbox user. Example: Peter Rabbit

type   integer   

The type of Mailbox (1 = Gmail, 2 = O365, 4 = MS Exchange, 5 = Mimecast). Example: 1

email   string   

The email address of the Mailbox. Example: [email protected]

message   string  optional  

A personalised message to send to the mailbox during invitation. Example: Hey Pete, please accept this invite.

Authentication Invites - Remind Remind A Mailbox about an Authentication Invitation

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/remind/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "PATCH",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->patch(
    'https://portal.timetoreply.com/api/entities/agents/remind/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PATCH \
    "https://portal.timetoreply.com/api/entities/agents/remind/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "status": "Please check the inbox (and spam folder) of the mailbox you just added. Click on the link in the email to grant access to timetoreply so that we can start measuring your email reply times."
}
 

Request   

PATCH api/entities/agents/remind/{authentication_invite}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

authentication_invite   integer   

The ID of the Authentication invite. Example: 1

Authentication Invites - Delete Delete an Authentication Invitation

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/invite/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://portal.timetoreply.com/api/entities/agents/invite/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://portal.timetoreply.com/api/entities/agents/invite/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

{
    "status": "Authentication invite deleted."
}
 

Request   

DELETE api/entities/agents/invite/{authentication_invite}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

authentication_invite   integer   

The ID of the Authentication invite. Example: 1

Entities - IT Help Request Help from your IT team to set up timetoreply

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/it-help"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Peter Rabbit",
    "email": "[email protected]",
    "message": "Hey Peter, please could you help me getting timetoreply set up?"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/agents/it-help',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Peter Rabbit',
            'email' => '[email protected]',
            'message' => 'Hey Peter, please could you help me getting timetoreply set up?',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/agents/it-help" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Peter Rabbit\",
    \"email\": \"[email protected]\",
    \"message\": \"Hey Peter, please could you help me getting timetoreply set up?\"
}"

Example response (202):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "status": "Email Sent successfully"
}
 

Request   

POST api/entities/agents/it-help

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

The name of your friendly IT person. Example: Peter Rabbit

email   string   

The email of your friendly IT person. Example: [email protected]

message   string  optional  

An optional message to give to your IT person. Example: Hey Peter, please could you help me getting timetoreply set up?

Mailboxes -Exchange - Bulk Add Store a list of Exchange Mailboxes

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/store-bulk-exchange"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "service_account_email": "[email protected]",
    "service_account_password": "secret",
    "emails": [
        "[email protected]"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/agents/store-bulk-exchange',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'service_account_email' => '[email protected]',
            'service_account_password' => 'secret',
            'emails' => [
                '[email protected]',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/agents/store-bulk-exchange" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"service_account_email\": \"[email protected]\",
    \"service_account_password\": \"secret\",
    \"emails\": [
        \"[email protected]\"
    ]
}"

Example response (200):

{
    "total": 4,
    "maxAgents": 100,
    "limitAgents": true
}
 

Request   

POST api/entities/agents/store-bulk-exchange

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

service_account_email   string   

The email address of the service account to use for authentication. Example: [email protected]

service_account_password   string   

The password of the service account to use for authentication. Example: secret

emails   string[]  optional  

An array of email address to add. This field is optional, but you must supply either a list of emails or a CSV.

emails_csv   file  optional  

A CSV of email addresses to add. This file upload is optional but you must supply either a CSV or a list of emails.

Mailboxes -Mimecast - Update List Force an update of potential Mimecast mailboxes

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/mimecast/force-sync-agents"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/agents/mimecast/force-sync-agents',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/agents/mimecast/force-sync-agents" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

No-example
 

Request   

POST api/entities/agents/mimecast/force-sync-agents

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Mailboxes -Mimecast - Token Generate a Mimecast token from a username and password

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/mimecast/auth"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "username": "[email protected]",
    "password": "secret"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/agents/mimecast/auth',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'username' => '[email protected]',
            'password' => 'secret',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/agents/mimecast/auth" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"username\": \"[email protected]\",
    \"password\": \"secret\"
}"

Example response (200):

{
    "status": "We have successfully created a Mimecast authentication token. Please go to https://portal.timetoreply.com/api/entities/agents/load-bulk-agents-mimecast to select which mailboxes to add"
}
 

Request   

POST api/entities/agents/mimecast/auth

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

username   string   

The Mimecast username. Example: [email protected]

password   string   

The Mimecast password. Example: secret

Mailboxes -Mimecast - List Load potential Mimecast mailboxes

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/mimecast/load-bulk-agents"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/agents/mimecast/load-bulk-agents',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/agents/mimecast/load-bulk-agents" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

No-example
 

Request   

GET api/entities/agents/mimecast/load-bulk-agents

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Mailboxes -Mimecast - Search Search potential Mimecast Mailboxes

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/mimecast/search-agents"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/agents/mimecast/search-agents',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/agents/mimecast/search-agents" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

No-example
 

Request   

POST api/entities/agents/mimecast/search-agents

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Mailboxes -Mimecast - Bulk Add Add a list of email addresses as mailboxes

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/mimecast/select-bulk"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "emails": [
        "[email protected]"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/agents/mimecast/select-bulk',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'emails' => [
                '[email protected]',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/agents/mimecast/select-bulk" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"emails\": [
        \"[email protected]\"
    ]
}"

Example response (200):

[
    "[email protected]"
]
 

Request   

POST api/entities/agents/mimecast/select-bulk

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

emails   string[]   

An array of Mimecast emails.

Mailboxes -O365 - List Load potential O365 Mailboxes

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/microsoft/load-bulk-agents"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/agents/microsoft/load-bulk-agents',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/agents/microsoft/load-bulk-agents" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

{
    "name": "Peter Rabbit",
    "id": "12345abcd",
    "mail": "[email protected]",
    "userPrincipalName": "[email protected]"
}
 

Request   

GET api/entities/agents/microsoft/load-bulk-agents

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Mailboxes -O365 - Search Search potential O365 Mailboxes

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/microsoft/search-bulk-agents"
);

const params = {
    "search": "peter",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/agents/microsoft/search-bulk-agents',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'search' => 'peter',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/agents/microsoft/search-bulk-agents?search=peter" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

No-example
 

Request   

GET api/entities/agents/microsoft/search-bulk-agents

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

search   string   

The search term to use. This will search for mailboxes beginning with the search string. Example: peter

Mailboxes -O365 - Bulk Add Store a list of O365 Mailboxes

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/microsoft/select-bulk"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "users": [
        {
            "id": "12345-12345-12345",
            "mail": "[email protected]",
            "name": "Peter Rabbit",
            "userPrincipalName": "[email protected]"
        }
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/agents/microsoft/select-bulk',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'users' => [
                [
                    'id' => '12345-12345-12345',
                    'mail' => '[email protected]',
                    'name' => 'Peter Rabbit',
                    'userPrincipalName' => '[email protected]',
                ],
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/agents/microsoft/select-bulk" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"users\": [
        {
            \"id\": \"12345-12345-12345\",
            \"mail\": \"[email protected]\",
            \"name\": \"Peter Rabbit\",
            \"userPrincipalName\": \"[email protected]\"
        }
    ]
}"

Example response (200):

{
    "total": 4,
    "maxAgents": 100,
    "limitAgents": true
}
 

Request   

POST api/entities/agents/microsoft/select-bulk

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

users   object[]   

An array of O365 "user" objects.

id   string   

The O365 user ID. Example: 12345-12345-12345

mail   string   

The O365 user Email. Example: [email protected]

name   string   

The O365 user's name. Example: Peter Rabbit

userPrincipalName   string   

The O365 User Principal Name. Example: [email protected]

Mailboxes -Gmail - List Load potential Gmail mailboxes

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/gmail/load-bulk-agents"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/agents/gmail/load-bulk-agents',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/agents/gmail/load-bulk-agents" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

No-example
 

Request   

GET api/entities/agents/gmail/load-bulk-agents

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Mailboxes -Gmail - Bulk Add Add multiple mailboxes at once

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/gmail/select-bulk"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "users": [
        {
            "email": "[email protected]",
            "name": "Peter Rabbit"
        }
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/agents/gmail/select-bulk',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'users' => [
                [
                    'email' => '[email protected]',
                    'name' => 'Peter Rabbit',
                ],
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/agents/gmail/select-bulk" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"users\": [
        {
            \"email\": \"[email protected]\",
            \"name\": \"Peter Rabbit\"
        }
    ]
}"

Example response (200):

[
    "[email protected]"
]
 

Request   

POST api/entities/agents/gmail/select-bulk

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

users   object[]  optional  

an array of gmail "user" objects with fields email and name.

email   string   

The email address of the mailbox to add. Example: [email protected]

name   string   

The name of the mailbox to add. Example: Peter Rabbit

Mailboxes -Imap - Update Update Imap Mailbox

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/1/imap"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "host": "mail.example.com",
    "port": 143,
    "encryption": "tls",
    "username": "[email protected]",
    "password": "secret"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->patch(
    'https://portal.timetoreply.com/api/entities/agents/1/imap',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'host' => 'mail.example.com',
            'port' => 143,
            'encryption' => 'tls',
            'username' => '[email protected]',
            'password' => 'secret',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PATCH \
    "https://portal.timetoreply.com/api/entities/agents/1/imap" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"host\": \"mail.example.com\",
    \"port\": 143,
    \"encryption\": \"tls\",
    \"username\": \"[email protected]\",
    \"password\": \"secret\"
}"

Example response (200):

{
    "status": "Agent IMAP credentials updated successfully."
}
 

Request   

PATCH api/entities/agents/{agent_id}/imap

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

agent   integer   

The ID of the agent/mailbox to update. Example: 1

Body Parameters

host   string   

The IMAP Host. Example: mail.example.com

port   integer   

The IMAP port. Example: 143

encryption   string   

The IMAP encryption type. Example: tls

username   string   

The IMAP username. Example: [email protected]

password   string   

The IMAP password. Example: secret

Mailboxes -EWS - Update Update Imap Mailbox

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/1/ews"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "host": "outlook.office365.com\/EWS\/Exchange.asmx",
    "version": "Exchange2013",
    "username": "[email protected]",
    "password": "secret"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->patch(
    'https://portal.timetoreply.com/api/entities/agents/1/ews',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'host' => 'outlook.office365.com/EWS/Exchange.asmx',
            'version' => 'Exchange2013',
            'username' => '[email protected]',
            'password' => 'secret',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PATCH \
    "https://portal.timetoreply.com/api/entities/agents/1/ews" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"host\": \"outlook.office365.com\\/EWS\\/Exchange.asmx\",
    \"version\": \"Exchange2013\",
    \"username\": \"[email protected]\",
    \"password\": \"secret\"
}"

Example response (200):

{
    "status": "Agent EWS credentials updated successfully."
}
 

Request   

PATCH api/entities/agents/{agent_id}/ews

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

agent   integer   

The ID of the agent/mailbox to update. Example: 1

Body Parameters

host   string   

The EWS Host. Example: outlook.office365.com/EWS/Exchange.asmx

version   string   

The EWS host version. Example: Exchange2013

username   string   

The EWS username. Example: [email protected]

password   string   

The EWS password. Example: secret

Mailboxes - Delete Delete a mailbox

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://portal.timetoreply.com/api/entities/agents/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://portal.timetoreply.com/api/entities/agents/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

{
    "status": "Agent deletion complete."
}
 

Request   

DELETE api/entities/agents/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

agent   integer   

The ID of the mailbox to delete. Example: 1

Mailboxes - Re-authenticate Send a re-authentication request to a mailbox.

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/1/re-auth"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/agents/1/re-auth',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/agents/1/re-auth" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "status": "We've sent the Re-Authentication email to Gia Haley. Please ask them to check their email and SPAM box"
}
 

Request   

GET api/entities/agents/{agent_id}/re-auth

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

agent   integer   

The ID of the mailbox to send a re-authentication request to. Example: 1

Mailboxes - Update Update a mailbox

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/1/update"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Peter Rabbit",
    "timeZone": 1,
    "aliases": [
        "[email protected]"
    ]
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->patch(
    'https://portal.timetoreply.com/api/entities/agents/1/update',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Peter Rabbit',
            'timeZone' => 1,
            'aliases' => [
                '[email protected]',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PATCH \
    "https://portal.timetoreply.com/api/entities/agents/1/update" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Peter Rabbit\",
    \"timeZone\": 1,
    \"aliases\": [
        \"[email protected]\"
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "status": "Agent updated successfully. Since the agent aliases or timezone were updated, we will now update reply times in the background"
}
 

Request   

PATCH api/entities/agents/{id}/update

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

agent   integer   

The ID of the mailbox to update. Example: 1

Body Parameters

name   string   

The name of the mailbox. Example: Peter Rabbit

timeZone   integer   

The ID of the TimeZone for the mailbox. Example: 1

aliases   string[]  optional  

An array of email aliases for the mailbox.

Mailboxes - Search all Searches all mailboxes for a given string including in Gmail, O365 if authenticated using admin credentials.

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/agents/search-all-company-mailboxes"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/agents/search-all-company-mailboxes',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/agents/search-all-company-mailboxes" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

No-example
 

Request   

GET api/entities/agents/search-all-company-mailboxes

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Contacts - List

requires authentication

Get all existing contacts.

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contacts"
);

const params = {
    "sort_by": "name",
    "direction": "asc",
    "per_page": "25",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/contacts',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'sort_by' => 'name',
            'direction' => 'asc',
            'per_page' => '25',
            'page' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/contacts?sort_by=name&direction=asc&per_page=25&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "current_page": 1,
    "data": [
        {
            "id": 585,
            "company_id": 1,
            "name": "[email protected]",
            "type": "email",
            "crm_type": null,
            "search_string": "[email protected]",
            "is_lead": false
        },
        {
            "id": 99,
            "company_id": 1,
            "name": "[email protected]",
            "type": "email",
            "crm_type": null,
            "search_string": "[email protected]",
            "is_lead": false
        }
    ],
    "first_page_url": "https://portal.timetoreply.com/api/entities/contacts?direction=asc&per_page=2&page=1",
    "from": 1,
    "last_page": 325,
    "last_page_url": "https://portal.timetoreply.com/api/entities/contacts?direction=asc&per_page=2&page=325",
    "links": [
        {
            "url": null,
            "label": "« Previous",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contacts?direction=asc&per_page=2&page=1",
            "label": "1",
            "active": true
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contacts?direction=asc&per_page=2&page=2",
            "label": "2",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contacts?direction=asc&per_page=2&page=3",
            "label": "3",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contacts?direction=asc&per_page=2&page=4",
            "label": "4",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contacts?direction=asc&per_page=2&page=5",
            "label": "5",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contacts?direction=asc&per_page=2&page=6",
            "label": "6",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contacts?direction=asc&per_page=2&page=7",
            "label": "7",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contacts?direction=asc&per_page=2&page=8",
            "label": "8",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contacts?direction=asc&per_page=2&page=9",
            "label": "9",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contacts?direction=asc&per_page=2&page=10",
            "label": "10",
            "active": false
        },
        {
            "url": null,
            "label": "...",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contacts?direction=asc&per_page=2&page=324",
            "label": "324",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contacts?direction=asc&per_page=2&page=325",
            "label": "325",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contacts?direction=asc&per_page=2&page=2",
            "label": "Next »",
            "active": false
        }
    ],
    "next_page_url": "https://portal.timetoreply.com/api/entities/contacts?direction=asc&per_page=2&page=2",
    "path": "https://portal.timetoreply.com/api/entities/contacts",
    "per_page": 2,
    "prev_page_url": null,
    "to": 2,
    "total": 649
}
 

Request   

GET api/entities/contacts

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

sort_by   string  optional  

The field to sort the customers by. Example: name

direction   string  optional  

Sort asc or desc. Example: asc

per_page   integer  optional  

For paginated results, how many results per page. Max 200. Example: 25

page   integer  optional  

For paginated results, which page to get. Example: 1

search   string  optional  

Optional search string.

Contacts - Store

requires authentication

Store a new contact

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contacts"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "[email protected]"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/contacts',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => '[email protected]',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/contacts" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"[email protected]\"
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 815,
    "name": "[email protected]",
    "email_usernames": [
        "[email protected]"
    ],
    "model_type": "Contact",
    "icon": "user"
}
 

Request   

POST api/entities/contacts

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string  optional  

The email address or domain of the Contact. Example: [email protected]

Contacts - Store

requires authentication

Store a new contact

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contacts/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "[email protected]"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->put(
    'https://portal.timetoreply.com/api/entities/contacts/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => '[email protected]',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://portal.timetoreply.com/api/entities/contacts/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"[email protected]\"
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 1,
    "name": "[email protected]",
    "email_usernames": [
        "[email protected]"
    ],
    "model_type": "Contact",
    "icon": "user"
}
 

Request   

PUT api/entities/contacts/{id}

PATCH api/entities/contacts/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the contact. Example: 1

Body Parameters

name   string  optional  

The email address or domain of the Contact. Example: [email protected]

Contacts - Delete Delete a contact

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contacts/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://portal.timetoreply.com/api/entities/contacts/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://portal.timetoreply.com/api/entities/contacts/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

{
    "status": "Contact deleted."
}
 

Request   

DELETE api/entities/contacts/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

contact   integer   

The ID of the contact to Delete. Example: 1

Contacts - Delete multi Delete multiple contacts

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contacts/delete-multiple"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "ids": [
        1,
        2
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/contacts/delete-multiple',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'ids' => [
                1,
                2,
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/contacts/delete-multiple" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"ids\": [
        1,
        2
    ]
}"

Example response (200):

{
    "status": "Contacts deleted."
}
 

Request   

POST api/entities/contacts/delete-multiple

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

ids   string[]   

The IDs of the contacts to Delete.

Contacts - Search for possible leads Searches through your conversations to find possible leads.

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contacts/search-possible-leads"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/contacts/search-possible-leads',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/contacts/search-possible-leads" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

[
    {
        "email": "[email protected]"
    },
    {
        "email": "[email protected]"
    }
]
 

Request   

GET api/entities/contacts/search-possible-leads

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Contacts - Create multiple Stores multiple email addresses as contacts/leads

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contacts/create-multi"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "customers": [
        {
            "name": "[email protected]",
            "is_lead": true
        }
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/contacts/create-multi',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'customers' => [
                [
                    'name' => '[email protected]',
                    'is_lead' => true,
                ],
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/contacts/create-multi" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"customers\": [
        {
            \"name\": \"[email protected]\",
            \"is_lead\": true
        }
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
[
    {
        "company_id": 1,
        "name": "[email protected]",
        "type": "email",
        "is_lead": true,
        "id": 816
    }
]
 

Request   

POST api/entities/contacts/create-multi

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

customers   object[]   

The array of customers to create.

name   string   

The email or domain of the customer. Example: [email protected]

is_lead   boolean   

Whether the customer is a lead or not. Example: true

Contact Groups - List List all Contact Groups

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contact-groups"
);

const params = {
    "sort_by": "name",
    "direction": "asc",
    "per_page": "15",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/contact-groups',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'sort_by' => 'name',
            'direction' => 'asc',
            'per_page' => '15',
            'page' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/contact-groups?sort_by=name&direction=asc&per_page=15&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "current_page": 1,
    "data": [
        {
            "id": 1,
            "company_id": 1,
            "name": "Top Revenue Customers",
            "crm_type": null,
            "customer_emails": [
                "[email protected]",
                "[email protected]"
            ],
            "customer_domains": [
                "kling.com",
                "lakin.net"
            ],
            "user_permissions": [
                7
            ],
            "search_string": "Top Revenue Customers [email protected] [email protected] kling.com lakin.net"
        },
        {
            "id": 2,
            "company_id": 1,
            "name": "Hubspot Customer Group",
            "crm_type": "hubspot",
            "customer_emails": [
                "[email protected]",
                "[email protected]"
            ],
            "customer_domains": [
                "gorczany.net",
                "daniel.info"
            ],
            "user_permissions": [],
            "search_string": "Hubspot Customer Group [email protected] [email protected] gorczany.net daniel.info"
        }
    ],
    "first_page_url": "https://portal.timetoreply.com/api/entities/contact-groups?direction=asc&per_page=2&page=1",
    "from": 1,
    "last_page": 4,
    "last_page_url": "https://portal.timetoreply.com/api/entities/contact-groups?direction=asc&per_page=2&page=4",
    "links": [
        {
            "url": null,
            "label": "« Previous",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contact-groups?direction=asc&per_page=2&page=1",
            "label": "1",
            "active": true
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contact-groups?direction=asc&per_page=2&page=2",
            "label": "2",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contact-groups?direction=asc&per_page=2&page=3",
            "label": "3",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contact-groups?direction=asc&per_page=2&page=4",
            "label": "4",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/contact-groups?direction=asc&per_page=2&page=2",
            "label": "Next »",
            "active": false
        }
    ],
    "next_page_url": "https://portal.timetoreply.com/api/entities/contact-groups?direction=asc&per_page=2&page=2",
    "path": "https://portal.timetoreply.com/api/entities/contact-groups",
    "per_page": 2,
    "prev_page_url": null,
    "to": 2,
    "total": 7
}
 

Request   

GET api/entities/contact-groups

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

sort_by   string  optional  

The field to sort the mailboxes by. Example: name

direction   string  optional  

Sort asc or desc. Example: asc

per_page   number  optional  

The number of contact groups to show per page. Example: 15

page   number  optional  

The page number. Example: 1

search   string  optional  

Optional search string.

Contact Groups - Store Store a Contact Group

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contact-groups"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Most important contacts",
    "emails": [
        "[email protected]"
    ],
    "domains": [
        "example.com"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/contact-groups',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Most important contacts',
            'emails' => [
                '[email protected]',
            ],
            'domains' => [
                'example.com',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/contact-groups" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Most important contacts\",
    \"emails\": [
        \"[email protected]\"
    ],
    \"domains\": [
        \"example.com\"
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 8,
    "name": "Most important contacts",
    "members": {
        "emails": [
            "[email protected]"
        ],
        "domains": [
            "example.com"
        ]
    }
}
 

Request   

POST api/entities/contact-groups

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

The name of the Contact Group. Example: Most important contacts

emails   string[]  optional  

An array of contact email addresses.

domains   string[]  optional  

An array of contact domains.

upload   file  optional  

A CSV of contact domains and/or emails.

Contact Groups - Show Show a single Contact Group

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contact-groups/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/contact-groups/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/contact-groups/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 1,
    "name": "Top Revenue Customers",
    "email_usernames": [
        "[email protected]",
        "[email protected]"
    ],
    "customer_domains": [
        "kling.com",
        "lakin.net"
    ],
    "model_type": "Contact Group",
    "icon": "user-friends"
}
 

Request   

GET api/entities/contact-groups/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

contact_group   integer   

The ID of the contact group. Example: 1

Contact Groups - Update Update a Contact Group

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contact-groups/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Most important contacts updated",
    "emails": [
        "[email protected]"
    ],
    "domains": [
        "example.com"
    ]
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->put(
    'https://portal.timetoreply.com/api/entities/contact-groups/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Most important contacts updated',
            'emails' => [
                '[email protected]',
            ],
            'domains' => [
                'example.com',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://portal.timetoreply.com/api/entities/contact-groups/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Most important contacts updated\",
    \"emails\": [
        \"[email protected]\"
    ],
    \"domains\": [
        \"example.com\"
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 1,
    "name": "Most important contacts updated",
    "members": {
        "emails": [
            "[email protected]"
        ],
        "domains": [
            "example.com"
        ]
    }
}
 

Request   

PUT api/entities/contact-groups/{id}

PATCH api/entities/contact-groups/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

contact_group   integer   

The ID of the Contact Group to update. Example: 1

Body Parameters

name   string   

The name of the Contact Group. Example: Most important contacts updated

emails   string[]  optional  

An array of contact email addresses.

domains   string[]  optional  

An array of contact domains.

upload   file  optional  

A CSV of contact domains and/or emails.

Contact Groups - Delete Delete a Contact Group

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contact-groups/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://portal.timetoreply.com/api/entities/contact-groups/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://portal.timetoreply.com/api/entities/contact-groups/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

{
    "status": "Contact group deleted."
}
 

Request   

DELETE api/entities/contact-groups/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

contact_group   integer   

The ID of the contact group. Example: 1

Contact Groups - Add Email Add An Email To A Contact Group

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contact-groups/1/pushEmail"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "[email protected]"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->patch(
    'https://portal.timetoreply.com/api/entities/contact-groups/1/pushEmail',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'email' => '[email protected]',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PATCH \
    "https://portal.timetoreply.com/api/entities/contact-groups/1/pushEmail" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"[email protected]\"
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 1,
    "name": "Most important contacts updated",
    "members": {
        "emails": [
            "[email protected]",
            "[email protected]"
        ],
        "domains": [
            "example.com"
        ]
    }
}
 

Request   

PATCH api/entities/contact-groups/{contact_group}/pushEmail

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

contact_group   integer   

The ID of the contact group. Example: 1

Body Parameters

email   string   

The email you would like to add. Example: [email protected]

Contact Groups - Delete Email Remove An Email From A Contact Group

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contact-groups/1/removeEmail"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "[email protected]"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->patch(
    'https://portal.timetoreply.com/api/entities/contact-groups/1/removeEmail',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'email' => '[email protected]',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PATCH \
    "https://portal.timetoreply.com/api/entities/contact-groups/1/removeEmail" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"[email protected]\"
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 1,
    "name": "Most important contacts updated",
    "members": {
        "emails": [
            "[email protected]"
        ],
        "domains": [
            "example.com"
        ]
    }
}
 

Request   

PATCH api/entities/contact-groups/{contact_group_id}/removeEmail

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

contact_group   integer   

The ID of the contact group. Example: 1

Body Parameters

email   string   

The email you would like to remove. Example: [email protected]

Contact Groups - Remove Members Remove An Email From A Contact Group

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contact-groups/1/removeMembers"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "membersToRemove": [
        "quos"
    ]
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->patch(
    'https://portal.timetoreply.com/api/entities/contact-groups/1/removeMembers',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'membersToRemove' => [
                'quos',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PATCH \
    "https://portal.timetoreply.com/api/entities/contact-groups/1/removeMembers" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"membersToRemove\": [
        \"quos\"
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 1,
    "name": "Most important contacts updated",
    "members": {
        "emails": [
            "[email protected]"
        ],
        "domains": [
            "example.com"
        ]
    }
}
 

Request   

PATCH api/entities/contact-groups/{contact_group_id}/removeMembers

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

contact_group   integer   

The ID of the contact group. Example: 1

Body Parameters

membersToRemove   string[]   

The emails/domains you would like to remove.

Contact Groups - Add Domain Add A Domain To A Contact Group

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contact-groups/1/pushDomain"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "domain": "example.com"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->patch(
    'https://portal.timetoreply.com/api/entities/contact-groups/1/pushDomain',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'domain' => 'example.com',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PATCH \
    "https://portal.timetoreply.com/api/entities/contact-groups/1/pushDomain" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"domain\": \"example.com\"
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 1,
    "name": "Most important contacts updated",
    "members": {
        "emails": [
            "[email protected]"
        ],
        "domains": [
            "example.com"
        ]
    }
}
 

Request   

PATCH api/entities/contact-groups/{contact_group}/pushDomain

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

contact_group   integer   

The ID of the contact group. Example: 1

Body Parameters

domain   string   

The domain you would like to add. Example: example.com

Contact Groups - Delete Domain Remove A Domain From A Contact Group

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/contact-groups/1/removeDomain"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "domain": "example.com"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->patch(
    'https://portal.timetoreply.com/api/entities/contact-groups/1/removeDomain',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'domain' => 'example.com',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PATCH \
    "https://portal.timetoreply.com/api/entities/contact-groups/1/removeDomain" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"domain\": \"example.com\"
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 1,
    "name": "Most important contacts updated",
    "members": {
        "emails": [
            "[email protected]"
        ],
        "domains": []
    }
}
 

Request   

PATCH api/entities/contact-groups/{contact_group_id}/removeDomain

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

contact_group   integer   

The ID of the contact group. Example: 1

Body Parameters

domain   string   

The domain you would like to remove. Example: example.com

Group Mailboxes - List Show all Group Mailboxes

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/group-mailboxes"
);

const params = {
    "per_page": "25",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/group-mailboxes',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'per_page' => '25',
            'page' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/group-mailboxes?per_page=25&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "current_page": 1,
    "data": [
        {
            "id": 1,
            "name": "US Support",
            "email_usernames": [
                "[email protected]",
                "[email protected]",
                "[email protected]",
                "[email protected]"
            ],
            "model_type": "Group Mailbox",
            "icon": "users"
        },
        {
            "id": 2,
            "name": "EU Support",
            "email_usernames": [
                "[email protected]",
                "[email protected]",
                "[email protected]",
                "[email protected]"
            ],
            "model_type": "Group Mailbox",
            "icon": "users"
        }
    ],
    "first_page_url": "https://portal.timetoreply.com/api/entities/group-mailboxes?per_page=2&page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "https://portal.timetoreply.com/api/entities/group-mailboxes?per_page=2&page=1",
    "links": [
        {
            "url": null,
            "label": "« Previous",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/group-mailboxes?per_page=2&page=1",
            "label": "1",
            "active": true
        },
        {
            "url": null,
            "label": "Next »",
            "active": false
        }
    ],
    "next_page_url": null,
    "path": "https://portal.timetoreply.com/api/entities/group-mailboxes",
    "per_page": 2,
    "prev_page_url": null,
    "to": 2,
    "total": 2
}
 

Request   

GET api/entities/group-mailboxes

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

per_page   integer  optional  

For paginated results, how many results per page. Max 200. Example: 25

page   integer  optional  

For paginated results, which page to get. Example: 1

Group Mailboxes - Store Store a Group Mailbox

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/group-mailboxes"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Sales Mailbox",
    "groupMailboxAddress": "[email protected]",
    "aliases": [
        "[email protected]"
    ],
    "first_reply_time_goal": 60,
    "overall_reply_time_goal": 120,
    "time_to_close_goal": 180
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/group-mailboxes',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Sales Mailbox',
            'groupMailboxAddress' => '[email protected]',
            'aliases' => [
                '[email protected]',
            ],
            'first_reply_time_goal' => 60,
            'overall_reply_time_goal' => 120,
            'time_to_close_goal' => 180,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/group-mailboxes" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Sales Mailbox\",
    \"groupMailboxAddress\": \"[email protected]\",
    \"aliases\": [
        \"[email protected]\"
    ],
    \"first_reply_time_goal\": 60,
    \"overall_reply_time_goal\": 120,
    \"time_to_close_goal\": 180
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 5,
    "company_id": 1,
    "name": "Sales Mailbox",
    "first_reply_time_goal": 3600,
    "overall_reply_time_goal": 7200,
    "time_to_close_goal": 10800,
    "created_at": "2023-02-01 19:49:04",
    "updated_at": "2023-02-01 19:49:04",
    "product_type": "success",
    "members": {
        "current_page": 1,
        "data": [],
        "first_page_url": "https://portal.timetoreply.com/api/entities/group-mailboxes?per_page=2&page=1",
        "from": null,
        "last_page": 1,
        "last_page_url": "https://portal.timetoreply.com/api/entities/group-mailboxes?per_page=2&page=1",
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/entities/group-mailboxes?per_page=2&page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "next_page_url": null,
        "path": "https://portal.timetoreply.com/api/entities/group-mailboxes",
        "per_page": 2,
        "prev_page_url": null,
        "to": null,
        "total": 0
    },
    "model_type": "Group Mailbox",
    "group_mailbox_address": "[email protected]",
    "email_usernames": [
        "[email protected]",
        "[email protected]"
    ],
    "pending_invites": []
}
 

Request   

POST api/entities/group-mailboxes

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

The name of the Group Mailbox. Example: Sales Mailbox

groupMailboxAddress   string   

The email address of the Group Mailbox. Example: [email protected]

aliases   string[]  optional  

An email alias for the Group Mailbox.

first_reply_time_goal   integer  optional  

The first reply time goal in minutes. Example: 60

overall_reply_time_goal   integer  optional  

The overall reply time goal in minutes. Example: 120

time_to_close_goal   integer  optional  

The time to close goal in minutes. Example: 180

Group Mailboxes - Show Show a single Group Mailbox

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/group-mailboxes/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/group-mailboxes/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/group-mailboxes/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 1,
    "name": "US Support",
    "email_usernames": [
        "[email protected]",
        "[email protected]",
        "[email protected]",
        "[email protected]"
    ],
    "model_type": "Group Mailbox",
    "icon": "users"
}
 

Request   

GET api/entities/group-mailboxes/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

group_mailbox   integer   

The ID of the Group Mailbox. Example: 1

Group Mailboxes - Update Update a Group Mailbox

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/group-mailboxes/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Sales Mailbox",
    "groupMailboxAddress": "[email protected]",
    "aliases": [
        "[email protected]"
    ],
    "first_reply_time_goal": 60,
    "overall_reply_time_goal": 120,
    "time_to_close_goal": 180
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->put(
    'https://portal.timetoreply.com/api/entities/group-mailboxes/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Sales Mailbox',
            'groupMailboxAddress' => '[email protected]',
            'aliases' => [
                '[email protected]',
            ],
            'first_reply_time_goal' => 60,
            'overall_reply_time_goal' => 120,
            'time_to_close_goal' => 180,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://portal.timetoreply.com/api/entities/group-mailboxes/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Sales Mailbox\",
    \"groupMailboxAddress\": \"[email protected]\",
    \"aliases\": [
        \"[email protected]\"
    ],
    \"first_reply_time_goal\": 60,
    \"overall_reply_time_goal\": 120,
    \"time_to_close_goal\": 180
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 1,
    "company_id": 1,
    "name": "Sales Mailbox",
    "first_reply_time_goal": 3600,
    "overall_reply_time_goal": 7200,
    "time_to_close_goal": 10800,
    "created_at": "2023-02-01 19:48:27",
    "updated_at": "2023-02-01 19:49:05",
    "product_type": "success",
    "pending_invites_count": 0,
    "members": {
        "current_page": 1,
        "data": [
            {
                "email": "[email protected]",
                "type": 1,
                "existing": true
            },
            {
                "email": "[email protected]",
                "type": 1,
                "existing": true
            }
        ],
        "first_page_url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1?per_page=2&page=1",
        "from": 1,
        "last_page": 2,
        "last_page_url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1?per_page=2&page=2",
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1?per_page=2&page=1",
                "label": "1",
                "active": true
            },
            {
                "url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1?per_page=2&page=2",
                "label": "2",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1?per_page=2&page=2",
                "label": "Next »",
                "active": false
            }
        ],
        "next_page_url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1?per_page=2&page=2",
        "path": "https://portal.timetoreply.com/api/entities/group-mailboxes/1",
        "per_page": 2,
        "prev_page_url": null,
        "to": 2,
        "total": 3
    },
    "model_type": "Group Mailbox",
    "group_mailbox_address": "[email protected]",
    "email_usernames": [
        "[email protected]",
        "[email protected]"
    ],
    "pending_invites": []
}
 

Request   

PUT api/entities/group-mailboxes/{id}

PATCH api/entities/group-mailboxes/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

group_mailbox   integer   

The ID of the Group Mailbox to update. Example: 1

Body Parameters

name   string   

The name of the Group Mailbox. Example: Sales Mailbox

groupMailboxAddress   string   

The email address of the Group Mailbox. Example: [email protected]

aliases   string[]  optional  

An array of email alias' for the Group Mailbox.

first_reply_time_goal   integer  optional  

The first reply time goal in minutes. Example: 60

overall_reply_time_goal   integer  optional  

The overall reply time goal in minutes. Example: 120

time_to_close_goal   integer  optional  

The time to close goal in minutes. Example: 180

Group Mailboxes - Delete Delete a Group Mailbox

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/group-mailboxes/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://portal.timetoreply.com/api/entities/group-mailboxes/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://portal.timetoreply.com/api/entities/group-mailboxes/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

{
    "status": "Group Mailbox deleted."
}
 

Request   

DELETE api/entities/group-mailboxes/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

group_mailbox   integer   

The ID of the Group Mailbox. Example: 1

Group Mailbox Members - List Show members of a Group Mailbox

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents"
);

const params = {
    "sort_by": "name",
    "direction": "asc",
    "per_page": "2",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'sort_by' => 'name',
            'direction' => 'asc',
            'per_page' => '2',
            'page' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents?sort_by=name&direction=asc&per_page=2&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "current_page": 1,
    "data": [
        {
            "email": "[email protected]",
            "type": 1,
            "existing": true
        },
        {
            "email": "[email protected]",
            "type": 1,
            "existing": true
        }
    ],
    "first_page_url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents?direction=asc&per_page=2&page=1",
    "from": 1,
    "last_page": 2,
    "last_page_url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents?direction=asc&per_page=2&page=2",
    "links": [
        {
            "url": null,
            "label": "« Previous",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents?direction=asc&per_page=2&page=1",
            "label": "1",
            "active": true
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents?direction=asc&per_page=2&page=2",
            "label": "2",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents?direction=asc&per_page=2&page=2",
            "label": "Next »",
            "active": false
        }
    ],
    "next_page_url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents?direction=asc&per_page=2&page=2",
    "path": "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents",
    "per_page": 2,
    "prev_page_url": null,
    "to": 2,
    "total": 3
}
 

Request   

GET api/entities/group-mailboxes/{group_mailbox_id}/agents

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

group_mailbox   integer   

The ID of the Group Mailbox to get Members of. Example: 1

Query Parameters

sort_by   string  optional  

The field to sort the mailboxes by. Example: name

direction   string  optional  

Sort asc or desc. Example: asc

per_page   number  optional  

The number of mailboxes to show per page. Example: 2

page   number  optional  

The page number. Example: 1

Group Mailbox Members - Store Add a member to a Group Mailbox

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "ids": [
        1
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'ids' => [
                1,
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"ids\": [
        1
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "current_page": 1,
    "data": [
        {
            "email": "[email protected]",
            "type": 1,
            "existing": true
        },
        {
            "email": "[email protected]",
            "type": 1,
            "existing": true
        },
        {
            "email": "[email protected]",
            "type": 1,
            "existing": true
        },
        {
            "email": "[email protected]",
            "type": 1,
            "existing": true
        }
    ],
    "first_page_url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents?per_page=2&page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents?per_page=2&page=1",
    "links": [
        {
            "url": null,
            "label": "« Previous",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents?per_page=2&page=1",
            "label": "1",
            "active": true
        },
        {
            "url": null,
            "label": "Next »",
            "active": false
        }
    ],
    "next_page_url": null,
    "path": "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents",
    "per_page": 25,
    "prev_page_url": null,
    "to": 4,
    "total": 4,
    "failed": []
}
 

Request   

POST api/entities/group-mailboxes/{group_mailbox}/agents

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

group_mailbox   integer   

The ID of the Group Mailbox. Example: 1

Body Parameters

ids   integer[]   

An array of Mailbox IDs to add as a Group Mailbox Member.

Group Mailbox Members - Delete Remove a member from a Group Mailbox

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "ids": [
        1
    ]
};

fetch(url, {
    method: "DELETE",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'ids' => [
                1,
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"ids\": [
        1
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "current_page": 1,
    "data": [
        {
            "email": "[email protected]",
            "type": 1,
            "existing": true
        },
        {
            "email": "[email protected]",
            "type": 1,
            "existing": true
        },
        {
            "email": "[email protected]",
            "type": 1,
            "existing": true
        }
    ],
    "first_page_url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents?per_page=2&page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents?per_page=2&page=1",
    "links": [
        {
            "url": null,
            "label": "« Previous",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents?per_page=2&page=1",
            "label": "1",
            "active": true
        },
        {
            "url": null,
            "label": "Next »",
            "active": false
        }
    ],
    "next_page_url": null,
    "path": "https://portal.timetoreply.com/api/entities/group-mailboxes/1/agents",
    "per_page": 25,
    "prev_page_url": null,
    "to": 3,
    "total": 3,
    "failed": []
}
 

Request   

DELETE api/entities/group-mailboxes/{group_mailbox_id}/agents

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

group_mailbox   integer   

The ID of the Group Mailbox. Example: 1

Body Parameters

ids   integer[]   

An array of Mailbox IDs to remove as a Group Mailbox Member.

Teams - List Show all teams

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/teams"
);

const params = {
    "per_page": "25",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/teams',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'per_page' => '25',
            'page' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/teams?per_page=25&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "current_page": 1,
    "data": [
        {
            "id": 3,
            "name": "US Support Team",
            "email_usernames": [
                "[email protected]",
                "[email protected]",
                "[email protected]",
                "[email protected]"
            ],
            "model_type": "Team",
            "icon": "handshake"
        },
        {
            "id": 4,
            "name": "EU Support Team",
            "email_usernames": [
                "[email protected]",
                "[email protected]",
                "[email protected]",
                "[email protected]"
            ],
            "model_type": "Team",
            "icon": "handshake"
        }
    ],
    "first_page_url": "https://portal.timetoreply.com/api/entities/teams?per_page=2&page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "https://portal.timetoreply.com/api/entities/teams?per_page=2&page=1",
    "links": [
        {
            "url": null,
            "label": "« Previous",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/teams?per_page=2&page=1",
            "label": "1",
            "active": true
        },
        {
            "url": null,
            "label": "Next »",
            "active": false
        }
    ],
    "next_page_url": null,
    "path": "https://portal.timetoreply.com/api/entities/teams",
    "per_page": 2,
    "prev_page_url": null,
    "to": 2,
    "total": 2
}
 

Request   

GET api/entities/teams

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

per_page   integer  optional  

For paginated results, how many results per page. Max 200. Example: 25

page   integer  optional  

For paginated results, which page to get. Example: 1

Teams - Store Store a new Team

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/teams"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "ACME Support Team One",
    "first_reply_time_goal": 30,
    "overall_reply_time_goal": 60,
    "time_to_close_goal": 120
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/teams',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'ACME Support Team One',
            'first_reply_time_goal' => 30,
            'overall_reply_time_goal' => 60,
            'time_to_close_goal' => 120,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/teams" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"ACME Support Team One\",
    \"first_reply_time_goal\": 30,
    \"overall_reply_time_goal\": 60,
    \"time_to_close_goal\": 120
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 5,
    "company_id": 1,
    "name": "ACME Support Team One",
    "first_reply_time_goal": 1800,
    "overall_reply_time_goal": 3600,
    "time_to_close_goal": 7200,
    "created_at": "2023-02-01 19:49:05",
    "updated_at": "2023-02-01 19:49:05",
    "product_type": "success",
    "members": {
        "current_page": 1,
        "data": [],
        "first_page_url": "https://portal.timetoreply.com/api/entities/teams?per_page=2&page=1",
        "from": null,
        "last_page": 1,
        "last_page_url": "https://portal.timetoreply.com/api/entities/teams?per_page=2&page=1",
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/entities/teams?per_page=2&page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "next_page_url": null,
        "path": "https://portal.timetoreply.com/api/entities/teams",
        "per_page": 25,
        "prev_page_url": null,
        "to": null,
        "total": 0,
        "failed": []
    },
    "model_type": "Team",
    "pending_invites": []
}
 

Request   

POST api/entities/teams

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

The name of the Team. Example: ACME Support Team One

first_reply_time_goal   integer  optional  

The first reply time goal in minutes. Example: 30

overall_reply_time_goal   integer  optional  

The overall reply time goal in minutes. Example: 60

time_to_close_goal   integer  optional  

The time to close goal in minutes. Example: 120

Teams - Show Show a single Team

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/teams/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/teams/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/teams/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 1,
    "name": "US Sales Team",
    "email_usernames": [
        "[email protected]",
        "[email protected]",
        "[email protected]",
        "[email protected]"
    ],
    "model_type": "Team",
    "icon": "handshake"
}
 

Request   

GET api/entities/teams/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

team   integer   

The ID of the Team. Example: 1

Teams - Update Update a Team

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/teams/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "ACME Support Team Two",
    "first_reply_time_goal": 30,
    "overall_reply_time_goal": 60,
    "time_to_close_goal": 120
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->put(
    'https://portal.timetoreply.com/api/entities/teams/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'ACME Support Team Two',
            'first_reply_time_goal' => 30,
            'overall_reply_time_goal' => 60,
            'time_to_close_goal' => 120,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://portal.timetoreply.com/api/entities/teams/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"ACME Support Team Two\",
    \"first_reply_time_goal\": 30,
    \"overall_reply_time_goal\": 60,
    \"time_to_close_goal\": 120
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 1,
    "company_id": 1,
    "name": "ACME Support Team Two",
    "first_reply_time_goal": 1800,
    "overall_reply_time_goal": 3600,
    "time_to_close_goal": 7200,
    "created_at": "2023-02-01 19:48:27",
    "updated_at": "2023-02-01 19:49:05",
    "product_type": "ignite",
    "members": {
        "current_page": 1,
        "data": [
            {
                "email": "[email protected]",
                "type": 1,
                "existing": true
            },
            {
                "email": "[email protected]",
                "type": 1,
                "existing": true
            },
            {
                "email": "[email protected]",
                "type": 1,
                "existing": true
            }
        ],
        "first_page_url": "https://portal.timetoreply.com/api/entities/teams/1?per_page=2&page=1",
        "from": 1,
        "last_page": 1,
        "last_page_url": "https://portal.timetoreply.com/api/entities/teams/1?per_page=2&page=1",
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/entities/teams/1?per_page=2&page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "next_page_url": null,
        "path": "https://portal.timetoreply.com/api/entities/teams/1",
        "per_page": 25,
        "prev_page_url": null,
        "to": 3,
        "total": 3,
        "failed": []
    },
    "model_type": "Team",
    "pending_invites": []
}
 

Request   

PUT api/entities/teams/{id}

PATCH api/entities/teams/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

team   integer   

The ID of the Team. Example: 1

Body Parameters

name   string   

The name of the Team. Example: ACME Support Team Two

first_reply_time_goal   integer  optional  

The first reply time goal in minutes. Example: 30

overall_reply_time_goal   integer  optional  

The overall reply time goal in minutes. Example: 60

time_to_close_goal   integer  optional  

The time to close goal in minutes. Example: 120

Teams - Delete Delete a Team

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/teams/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://portal.timetoreply.com/api/entities/teams/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://portal.timetoreply.com/api/entities/teams/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

{
    "status": "Team deleted."
}
 

Request   

DELETE api/entities/teams/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

team   integer   

The ID of the Team. Example: 1

Team Members - List Show members of a Team

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/teams/1/agents"
);

const params = {
    "sort_by": "name",
    "direction": "asc",
    "per_page": "2",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/teams/1/agents',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'sort_by' => 'name',
            'direction' => 'asc',
            'per_page' => '2',
            'page' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/teams/1/agents?sort_by=name&direction=asc&per_page=2&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "current_page": 1,
    "data": [
        {
            "email": "[email protected]",
            "type": 1,
            "existing": true
        },
        {
            "email": "[email protected]",
            "type": 1,
            "existing": true
        }
    ],
    "first_page_url": "https://portal.timetoreply.com/api/entities/teams/1/agents?direction=asc&per_page=2&page=1",
    "from": 1,
    "last_page": 2,
    "last_page_url": "https://portal.timetoreply.com/api/entities/teams/1/agents?direction=asc&per_page=2&page=2",
    "links": [
        {
            "url": null,
            "label": "« Previous",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/teams/1/agents?direction=asc&per_page=2&page=1",
            "label": "1",
            "active": true
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/teams/1/agents?direction=asc&per_page=2&page=2",
            "label": "2",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/teams/1/agents?direction=asc&per_page=2&page=2",
            "label": "Next »",
            "active": false
        }
    ],
    "next_page_url": "https://portal.timetoreply.com/api/entities/teams/1/agents?direction=asc&per_page=2&page=2",
    "path": "https://portal.timetoreply.com/api/entities/teams/1/agents",
    "per_page": 2,
    "prev_page_url": null,
    "to": 2,
    "total": 3,
    "failed": []
}
 

Request   

GET api/entities/teams/{team_id}/agents

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

team   integer   

The ID of the Team to get Members of. Example: 1

Query Parameters

sort_by   string  optional  

The field to sort the mailboxes by. Example: name

direction   string  optional  

Sort asc or desc. Example: asc

per_page   number  optional  

The number of mailboxes to show per page. Example: 2

page   number  optional  

The page number. Example: 1

Team Members - Store Add a member to a Team

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/teams/1/agents"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "ids": [
        1
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/teams/1/agents',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'ids' => [
                1,
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/teams/1/agents" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"ids\": [
        1
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "current_page": 1,
    "data": [
        {
            "email": "[email protected]",
            "type": 1,
            "existing": true
        },
        {
            "email": "[email protected]",
            "type": 1,
            "existing": true
        },
        {
            "email": "[email protected]",
            "type": 1,
            "existing": true
        }
    ],
    "first_page_url": "https://portal.timetoreply.com/api/entities/teams/1/agents?per_page=2&page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "https://portal.timetoreply.com/api/entities/teams/1/agents?per_page=2&page=1",
    "links": [
        {
            "url": null,
            "label": "« Previous",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/teams/1/agents?per_page=2&page=1",
            "label": "1",
            "active": true
        },
        {
            "url": null,
            "label": "Next »",
            "active": false
        }
    ],
    "next_page_url": null,
    "path": "https://portal.timetoreply.com/api/entities/teams/1/agents",
    "per_page": 25,
    "prev_page_url": null,
    "to": 3,
    "total": 3,
    "failed": []
}
 

Request   

POST api/entities/teams/{team_id}/agents

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

team   integer   

The ID of the Team. Example: 1

Body Parameters

ids   integer[]   

An array of Mailbox IDs to add as a Team Member.

Team Members - Delete Remove a member from a Team

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/teams/1/agents"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "ids": [
        1
    ]
};

fetch(url, {
    method: "DELETE",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://portal.timetoreply.com/api/entities/teams/1/agents',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'ids' => [
                1,
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://portal.timetoreply.com/api/entities/teams/1/agents" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"ids\": [
        1
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "current_page": 1,
    "data": [
        {
            "email": "[email protected]",
            "type": 1,
            "existing": true
        },
        {
            "email": "[email protected]",
            "type": 1,
            "existing": true
        }
    ],
    "first_page_url": "https://portal.timetoreply.com/api/entities/teams/1/agents?per_page=2&page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "https://portal.timetoreply.com/api/entities/teams/1/agents?per_page=2&page=1",
    "links": [
        {
            "url": null,
            "label": "« Previous",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/entities/teams/1/agents?per_page=2&page=1",
            "label": "1",
            "active": true
        },
        {
            "url": null,
            "label": "Next »",
            "active": false
        }
    ],
    "next_page_url": null,
    "path": "https://portal.timetoreply.com/api/entities/teams/1/agents",
    "per_page": 25,
    "prev_page_url": null,
    "to": 2,
    "total": 2,
    "failed": []
}
 

Request   

DELETE api/entities/teams/{team_id}/agents

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

team   integer   

The ID of the Team. Example: 1

Body Parameters

ids   integer[]   

An array of Mailbox IDs to remove as a Team Member.

Filters - List List all current filters and entities

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/message-filters/all-thread-filter-data"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/tools/settings/message-filters/all-thread-filter-data',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/tools/settings/message-filters/all-thread-filter-data" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "advanced_filters_count": {
        "active": 0,
        "total": 1
    },
    "domain_and_email_filters": {
        "domains": 1,
        "emails": 1
    },
    "agents": [
        {
            "id": 6,
            "name": "Amie Dare",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Mailbox",
            "icon": "user-plus"
        },
        {
            "id": 2,
            "name": "Koby Maggio",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Mailbox",
            "icon": "user-plus"
        },
        {
            "id": 4,
            "name": "Peggie Bosco",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Mailbox",
            "icon": "user-plus"
        },
        {
            "id": 1,
            "name": "Peter Rabbit",
            "email_usernames": [
                "[email protected]",
                "[email protected]"
            ],
            "model_type": "Mailbox",
            "icon": "user-plus"
        }
    ],
    "teams": [
        {
            "id": 4,
            "name": "EU Support Team",
            "email_usernames": [
                "[email protected]",
                "[email protected]",
                "[email protected]",
                "[email protected]"
            ],
            "model_type": "Team",
            "icon": "handshake"
        },
        {
            "id": 3,
            "name": "US Support Team",
            "email_usernames": [
                "[email protected]",
                "[email protected]",
                "[email protected]",
                "[email protected]"
            ],
            "model_type": "Team",
            "icon": "handshake"
        }
    ],
    "group_mailboxes": [
        {
            "id": 2,
            "name": "EU Support",
            "email_usernames": [
                "[email protected]",
                "[email protected]",
                "[email protected]",
                "[email protected]"
            ],
            "model_type": "Group Mailbox",
            "icon": "users"
        },
        {
            "id": 1,
            "name": "US Support",
            "email_usernames": [
                "[email protected]",
                "[email protected]",
                "[email protected]",
                "[email protected]"
            ],
            "model_type": "Group Mailbox",
            "icon": "users"
        }
    ],
    "customer_groups": [
        {
            "id": 3,
            "name": "Active Campaign Customer Group",
            "email_usernames": [
                "[email protected]",
                "[email protected]"
            ],
            "customer_domains": [
                "dubuque.com",
                "langosh.info"
            ],
            "model_type": "Contact Group",
            "icon": "user-friends"
        },
        {
            "id": 5,
            "name": "Constant Contact Customer Group",
            "email_usernames": [
                "[email protected]",
                "[email protected]"
            ],
            "customer_domains": [
                "nader.info",
                "nicolas.com"
            ],
            "model_type": "Contact Group",
            "icon": "user-friends"
        },
        {
            "id": 2,
            "name": "Hubspot Customer Group",
            "email_usernames": [
                "[email protected]",
                "[email protected]"
            ],
            "customer_domains": [
                "gorczany.net",
                "daniel.info"
            ],
            "model_type": "Contact Group",
            "icon": "user-friends"
        },
        {
            "id": 4,
            "name": "Maropost Customer Group",
            "email_usernames": [
                "[email protected]",
                "[email protected]"
            ],
            "customer_domains": [
                "renner.com",
                "heathcote.info"
            ],
            "model_type": "Contact Group",
            "icon": "user-friends"
        },
        {
            "id": 8,
            "name": "Most important contacts",
            "email_usernames": [
                "[email protected]"
            ],
            "customer_domains": [
                "example.com"
            ],
            "model_type": "Contact Group",
            "icon": "user-friends"
        },
        {
            "id": 6,
            "name": "Salesforce Customer Group",
            "email_usernames": [
                "[email protected]",
                "[email protected]"
            ],
            "customer_domains": [
                "jacobs.com",
                "carroll.com"
            ],
            "model_type": "Contact Group",
            "icon": "user-friends"
        },
        {
            "id": 1,
            "name": "Top Revenue Customers",
            "email_usernames": [
                "[email protected]",
                "[email protected]"
            ],
            "customer_domains": [
                "kling.com",
                "lakin.net"
            ],
            "model_type": "Contact Group",
            "icon": "user-friends"
        },
        {
            "id": 7,
            "name": "Zoho Customer Group",
            "email_usernames": [
                "[email protected]",
                "[email protected]"
            ],
            "customer_domains": [
                "ferry.com",
                "torp.com"
            ],
            "model_type": "Contact Group",
            "icon": "user-friends"
        }
    ],
    "customers": [
        {
            "id": 585,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 99,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 177,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 704,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 140,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 644,
            "name": "[email protected]nd.com",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 770,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 93,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 193,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 370,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 695,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 398,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 220,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 340,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 41,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 429,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 786,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 590,
            "name": "[email protected]",
            "email_usernames": [
                "alan.lu[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 805,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 334,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 675,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 519,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 703,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 297,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 55,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 672,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 170,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 303,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 189,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 353,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 496,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 801,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 608,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 775,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 458,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 688,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 263,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 588,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 799,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 707,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 508,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 125,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 535,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 746,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 150,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 310,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 565,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 436,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 474,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 43,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 525,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 217,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 206,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 216,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 403,
            "name": "[email protected]y.org",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 110,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 173,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 582,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 722,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 17,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 171,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 684,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 98,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 333,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 665,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 463,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 685,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]e.com"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 253,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 552,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 487,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 637,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 765,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 87,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 413,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 326,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 629,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 23,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 75,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 343,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 656,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 78,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 611,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 777,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 539,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 737,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 352,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 369,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 792,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 242,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 394,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 716,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 178,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 532,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 738,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 84,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 677,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 275,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 102,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 359,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 435,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 730,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 709,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 624,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 364,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 257,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 451,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 556,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 581,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 332,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 661,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 49,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 191,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 580,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 697,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 222,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 103,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 317,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 341,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 605,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 793,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 538,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 734,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 355,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 366,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 234,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 683,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 96,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 477,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 583,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 723,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 434,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 619,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 772,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 571,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 682,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 4,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 62,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 404,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 374,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 615,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 782,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 38,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 45,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 124,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 118,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 111,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 308,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 335,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 670,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 74,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 499,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 363,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 456,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 550,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 741,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 564,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 258,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 158,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 632,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 32,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 414,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 750,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 251,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 248,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 91,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 90,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 117,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 2,
            "name": "customer.com",
            "email_usernames": [
                "customer.com"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 241,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 115,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 279,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 19,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 278,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 376,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 551,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 739,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 389,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 503,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 813,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 10,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 453,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 293,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 187,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 328,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 589,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 773,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 329,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 671,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 301,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 136,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 472,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 754,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 452,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 594,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 780,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 236,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 461,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 396,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 148,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        },
        {
            "id": 628,
            "name": "[email protected]",
            "email_usernames": [
                "[email protected]"
            ],
            "model_type": "Contact",
            "icon": "user"
        }
    ],
    "lead_sources": [
        {
            "id": 1,
            "name": "US Sales Box",
            "email_usernames": [],
            "model_type": "Lead Source",
            "icon": "square-list"
        },
        {
            "id": 2,
            "name": "Web Enquiry Form",
            "email_usernames": [],
            "model_type": "Lead Source",
            "icon": "square-list"
        }
    ],
    "labels": [
        "CATEGORY_FORUMS",
        "CATEGORY_PERSONAL",
        "CATEGORY_PROMOTIONS",
        "CATEGORY_SOCIAL",
        "CATEGORY_UPDATES",
        "IMPORTANT",
        "INBOX",
        "SENT",
        "STARRED",
        "UNREAD"
    ],
    "goals": {
        "first_reply_time_goal": 7200,
        "first_reply_time_goal_bands": [],
        "overall_reply_time_goal": 14400,
        "overall_reply_time_goal_bands": [],
        "time_to_close_goal": 86400,
        "time_to_close_goal_bands": []
    }
}
 

Request   

GET api/tools/settings/message-filters/all-thread-filter-data

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Mailboxes - Invite As Users Invite a selection of mailboxes as users

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/users/invite-as-users"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "ids": [
        1
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/tools/users/invite-as-users',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'ids' => [
                1,
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/tools/users/invite-as-users" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"ids\": [
        1
    ]
}"

Example response (202):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
[
    1
]
 

Request   

POST api/tools/users/invite-as-users

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

ids   integer[]   

The IDs of the agents/mailboxes to invite as a user.

Deals - List List all Deals

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/sales/deals"
);

const params = {
    "sort_by": "name",
    "direction": "asc",
    "per_page": "15",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/sales/deals',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'sort_by' => 'name',
            'direction' => 'asc',
            'per_page' => '15',
            'page' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/sales/deals?sort_by=name&direction=asc&per_page=15&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "current_page": 1,
    "data": [
        {
            "id": 1,
            "name": "Rustic Granite Gloves",
            "company_id": 1,
            "agent_id": 1,
            "deal_value": 3207,
            "deal_stage": 11,
            "thread_ids": [],
            "created_at": "Feb 1st 2023 19:48:28",
            "updated_at": "2023-02-01 19:48:28",
            "search_string": "Rustic Granite Gloves ",
            "agent": {
                "id": 1,
                "name": "Peter Rabbit"
            },
            "emails": []
        },
        {
            "id": 2,
            "name": "Aerodynamic Granite Bottle",
            "company_id": 1,
            "agent_id": 2,
            "deal_value": 3910,
            "deal_stage": 11,
            "thread_ids": [
                20,
                56,
                86,
                98,
                137
            ],
            "created_at": "Feb 1st 2023 19:48:33",
            "updated_at": "2023-02-01 19:48:33",
            "search_string": "Aerodynamic Granite Bottle [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected]",
            "agent": {
                "id": 2,
                "name": "Koby Maggio"
            },
            "emails": [
                "[email protected]",
                "[email protected]",
                "[email protected]",
                "[email protected]",
                "[email protected]",
                "[email protected]",
                "[email protected]",
                "[email protected]"
            ]
        }
    ],
    "first_page_url": "https://portal.timetoreply.com/api/sales/deals?direction=asc&per_page=2&page=1",
    "from": 1,
    "last_page": 25,
    "last_page_url": "https://portal.timetoreply.com/api/sales/deals?direction=asc&per_page=2&page=25",
    "links": [
        {
            "url": null,
            "label": "« Previous",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/sales/deals?direction=asc&per_page=2&page=1",
            "label": "1",
            "active": true
        },
        {
            "url": "https://portal.timetoreply.com/api/sales/deals?direction=asc&per_page=2&page=2",
            "label": "2",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/sales/deals?direction=asc&per_page=2&page=3",
            "label": "3",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/sales/deals?direction=asc&per_page=2&page=4",
            "label": "4",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/sales/deals?direction=asc&per_page=2&page=5",
            "label": "5",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/sales/deals?direction=asc&per_page=2&page=6",
            "label": "6",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/sales/deals?direction=asc&per_page=2&page=7",
            "label": "7",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/sales/deals?direction=asc&per_page=2&page=8",
            "label": "8",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/sales/deals?direction=asc&per_page=2&page=9",
            "label": "9",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/sales/deals?direction=asc&per_page=2&page=10",
            "label": "10",
            "active": false
        },
        {
            "url": null,
            "label": "...",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/sales/deals?direction=asc&per_page=2&page=24",
            "label": "24",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/sales/deals?direction=asc&per_page=2&page=25",
            "label": "25",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/sales/deals?direction=asc&per_page=2&page=2",
            "label": "Next »",
            "active": false
        }
    ],
    "next_page_url": "https://portal.timetoreply.com/api/sales/deals?direction=asc&per_page=2&page=2",
    "path": "https://portal.timetoreply.com/api/sales/deals",
    "per_page": 2,
    "prev_page_url": null,
    "to": 2,
    "total": 49
}
 

Request   

GET api/sales/deals

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

sort_by   string  optional  

The field to sort the mailboxes by. Example: name

direction   string  optional  

Sort asc or desc. Example: asc

per_page   number  optional  

The number of contact groups to show per page. Example: 15

page   number  optional  

The page number. Example: 1

search   string  optional  

Optional search string.

Tools

CRM Connections - CRM Fields List Possible CRM Fields for Mapping

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/crm-properties-mapping"
);

const params = {
    "crmType": "hubspot",
    "stringOnly": "1",
    "expanded": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/entities/crm-properties-mapping',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'crmType' => 'hubspot',
            'stringOnly' => '1',
            'expanded' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/entities/crm-properties-mapping?crmType=hubspot&stringOnly=1&expanded=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "contacts": {
        "annualrevenue": {
            "label": "Annual Revenue",
            "type": "string"
        },
        "average_first_reply_time": {
            "label": "Average First Reply Time",
            "type": "string"
        },
        "average_overall_reply_time": {
            "label": "Average Overall Reply Time",
            "type": "string"
        },
        "city": {
            "label": "City",
            "type": "string"
        },
        "company": {
            "label": "Company Name",
            "type": "string"
        },
        "company_size": {
            "label": "Company size",
            "type": "string"
        },
        "country": {
            "label": "Country/Region",
            "type": "string"
        },
        "date_of_birth": {
            "label": "Date of birth",
            "type": "string"
        },
        "degree": {
            "label": "Degree",
            "type": "string"
        },
        "email": {
            "label": "Email",
            "type": "string"
        },
        "hs_facebookid": {
            "label": "Facebook ID",
            "type": "string"
        },
        "hs_facebook_click_id": {
            "label": "Facebook click id",
            "type": "string"
        },
        "fax": {
            "label": "Fax Number",
            "type": "string"
        },
        "field_of_study": {
            "label": "Field of study",
            "type": "string"
        },
        "firstname": {
            "label": "First Name",
            "type": "string"
        },
        "gender": {
            "label": "Gender",
            "type": "string"
        },
        "hs_google_click_id": {
            "label": "Google ad click id",
            "type": "string"
        },
        "graduation_date": {
            "label": "Graduation date",
            "type": "string"
        },
        "owneremail": {
            "label": "HubSpot Owner Email (legacy)",
            "type": "string"
        },
        "ownername": {
            "label": "HubSpot Owner Name (legacy)",
            "type": "string"
        },
        "industry": {
            "label": "Industry",
            "type": "string"
        },
        "jobtitle": {
            "label": "Job Title",
            "type": "string"
        },
        "job_function": {
            "label": "Job function",
            "type": "string"
        },
        "lastname": {
            "label": "Last Name",
            "type": "string"
        },
        "linkedinbio": {
            "label": "LinkedIn Bio",
            "type": "string"
        },
        "hs_linkedinid": {
            "label": "Linkedin ID",
            "type": "string"
        },
        "marital_status": {
            "label": "Marital Status",
            "type": "string"
        },
        "hs_content_membership_email": {
            "label": "Member email",
            "type": "string"
        },
        "hs_content_membership_notes": {
            "label": "Membership Notes",
            "type": "string"
        },
        "message": {
            "label": "Message",
            "type": "string"
        },
        "military_status": {
            "label": "Military status",
            "type": "string"
        },
        "mobilephone": {
            "label": "Mobile Phone Number",
            "type": "string"
        },
        "phone": {
            "label": "Phone Number",
            "type": "string"
        },
        "photo": {
            "label": "Photo",
            "type": "string"
        },
        "zip": {
            "label": "Postal Code",
            "type": "string"
        },
        "relationship_status": {
            "label": "Relationship Status",
            "type": "string"
        },
        "salutation": {
            "label": "Salutation",
            "type": "string"
        },
        "school": {
            "label": "School",
            "type": "string"
        },
        "seniority": {
            "label": "Seniority",
            "type": "string"
        },
        "start_date": {
            "label": "Start date",
            "type": "string"
        },
        "state": {
            "label": "State/Region",
            "type": "string"
        },
        "address": {
            "label": "Street Address",
            "type": "string"
        },
        "twitterbio": {
            "label": "Twitter Bio",
            "type": "string"
        },
        "hs_twitterid": {
            "label": "Twitter ID",
            "type": "string"
        },
        "twitterprofilephoto": {
            "label": "Twitter Profile Photo",
            "type": "string"
        },
        "twitterhandle": {
            "label": "Twitter Username",
            "type": "string"
        },
        "website": {
            "label": "Website URL",
            "type": "string"
        },
        "hs_whatsapp_phone_number": {
            "label": "WhatsApp Phone Number",
            "type": "string"
        },
        "work_email": {
            "label": "Work email",
            "type": "string"
        },
        "hs_googleplusid": {
            "label": "googleplus ID",
            "type": "string"
        }
    },
    "companies": {
        "about_us": {
            "label": "About Us",
            "type": "string"
        },
        "city": {
            "label": "City",
            "type": "string"
        },
        "domain": {
            "label": "Company Domain Name",
            "type": "string"
        },
        "name": {
            "label": "Company name",
            "type": "string"
        },
        "country": {
            "label": "Country/Region",
            "type": "string"
        },
        "description": {
            "label": "Description",
            "type": "string"
        },
        "facebook_company_page": {
            "label": "Facebook Company Page",
            "type": "string"
        },
        "googleplus_page": {
            "label": "Google Plus Page",
            "type": "string"
        },
        "owneremail": {
            "label": "HubSpot Owner Email",
            "type": "string"
        },
        "ownername": {
            "label": "HubSpot Owner Name",
            "type": "string"
        },
        "linkedinbio": {
            "label": "LinkedIn Bio",
            "type": "string"
        },
        "linkedin_company_page": {
            "label": "LinkedIn Company Page",
            "type": "string"
        },
        "phone": {
            "label": "Phone Number",
            "type": "string"
        },
        "zip": {
            "label": "Postal Code",
            "type": "string"
        },
        "state": {
            "label": "State/Region",
            "type": "string"
        },
        "address": {
            "label": "Street Address",
            "type": "string"
        },
        "address2": {
            "label": "Street Address 2",
            "type": "string"
        },
        "timezone": {
            "label": "Time Zone",
            "type": "string"
        },
        "total_money_raised": {
            "label": "Total Money Raised",
            "type": "string"
        },
        "twitterbio": {
            "label": "Twitter Bio",
            "type": "string"
        },
        "twitterhandle": {
            "label": "Twitter Handle",
            "type": "string"
        },
        "website": {
            "label": "Website URL",
            "type": "string"
        },
        "founded_year": {
            "label": "Year Founded",
            "type": "string"
        }
    }
}
 

Request   

GET api/entities/crm-properties-mapping

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

crmType   string   

The type of CRM to get fields for. Example: hubspot

stringOnly   boolean  optional  

Should we show only string field types? This is useful when trying to determine which field to use for email mapping. Example: true

expanded   boolean  optional  

Should we show the field types too? Example: true

CRM Connections - Store Store A New CRM Connection

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/entities/crm-properties-mapping"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "crmType": "hubspot",
    "selectedEmailProperty": "email_address"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/entities/crm-properties-mapping',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'crmType' => 'hubspot',
            'selectedEmailProperty' => 'email_address',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/entities/crm-properties-mapping" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"crmType\": \"hubspot\",
    \"selectedEmailProperty\": \"email_address\"
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
"Contacts are being synced now, it will take some time to complete. Please feel free to complete the advanced setup, you can navigate away from this page at any time."
 

Request   

POST api/entities/crm-properties-mapping

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

crmType   string   

The type of CRM to connect to. Example: hubspot

selectedEmailProperty   string   

The crm property name that matched the email field on a contact. Example: email_address

Domain Filters - List List all Domain Filters

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/message-filters/domains"
);

const params = {
    "sort_by": "domain",
    "direction": "asc",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/tools/settings/message-filters/domains',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'sort_by' => 'domain',
            'direction' => 'asc',
            'page' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/tools/settings/message-filters/domains?sort_by=domain&direction=asc&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "domains": {
        "current_page": 1,
        "data": [
            "spam.com"
        ],
        "first_page_url": "https://portal.timetoreply.com/api/tools/settings/message-filters/domains?page=1",
        "from": 1,
        "last_page": 1,
        "last_page_url": "https://portal.timetoreply.com/api/tools/settings/message-filters/domains?page=1",
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "https://portal.timetoreply.com/api/tools/settings/message-filters/domains?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "next_page_url": null,
        "path": "https://portal.timetoreply.com/api/tools/settings/message-filters/domains",
        "per_page": 15,
        "prev_page_url": null,
        "to": 1,
        "total": 1
    },
    "whitelisting": false
}
 

Request   

GET api/tools/settings/message-filters/domains

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

sort_by   string  optional  

Field Name to sort domains by. Can only be domain. Example: domain

direction   string  optional  

Direction in which to sort paginated results. Must be either asc or desc. Example: asc

page   integer  optional  

For paginated results, which page to get. Example: 1

Domain Filters - Store Block domains

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/message-filters/domains/block"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "domains": [
        "spam.com"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/tools/settings/message-filters/domains/block',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'domains' => [
                'spam.com',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/tools/settings/message-filters/domains/block" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"domains\": [
        \"spam.com\"
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
[
    {
        "id": 11,
        "domain": "spam.com"
    }
]
 

Request   

POST api/tools/settings/message-filters/domains/block

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

domains   string[]   

An array of domains to block.

Domain Filters - Delete Unblock domains

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/message-filters/domains/unblock"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "domains": [
        "spam.com"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/tools/settings/message-filters/domains/unblock',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'domains' => [
                'spam.com',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/tools/settings/message-filters/domains/unblock" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"domains\": [
        \"spam.com\"
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "status": "Domains unblocked successfully"
}
 

Request   

POST api/tools/settings/message-filters/domains/unblock

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

domains   string[]   

An array of domains to unblock.

Domain Filters - Delete All Unblock All domains

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/message-filters/domains/unblockAll"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/tools/settings/message-filters/domains/unblockAll',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/tools/settings/message-filters/domains/unblockAll" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "status": "Domains unblocked successfully"
}
 

Request   

POST api/tools/settings/message-filters/domains/unblockAll

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Domain Filters - Whitelisting Toggle on/off Domain Whitelisting

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/message-filters/domains/whitelisting/toggle"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "whitelisting": true
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->patch(
    'https://portal.timetoreply.com/api/tools/settings/message-filters/domains/whitelisting/toggle',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'whitelisting' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PATCH \
    "https://portal.timetoreply.com/api/tools/settings/message-filters/domains/whitelisting/toggle" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"whitelisting\": true
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "status": "Domain whitelisting enabled"
}
 

Request   

PATCH api/tools/settings/message-filters/domains/whitelisting/toggle

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

whitelisting   boolean  optional  

Whether toggle Domain Whitelist on or off. Example: true

Email Filters - List Get email address filters

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/message-filters/usernames"
);

const params = {
    "sort_by": "email_address",
    "direction": "asc",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/tools/settings/message-filters/usernames',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'sort_by' => 'email_address',
            'direction' => 'asc',
            'page' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/tools/settings/message-filters/usernames?sort_by=email_address&direction=asc&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "current_page": 1,
    "data": [
        "[email protected]"
    ],
    "first_page_url": "https://portal.timetoreply.com/api/tools/settings/message-filters/usernames?page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "https://portal.timetoreply.com/api/tools/settings/message-filters/usernames?page=1",
    "links": [
        {
            "url": null,
            "label": "« Previous",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/tools/settings/message-filters/usernames?page=1",
            "label": "1",
            "active": true
        },
        {
            "url": null,
            "label": "Next »",
            "active": false
        }
    ],
    "next_page_url": null,
    "path": "https://portal.timetoreply.com/api/tools/settings/message-filters/usernames",
    "per_page": 15,
    "prev_page_url": null,
    "to": 1,
    "total": 1
}
 

Request   

GET api/tools/settings/message-filters/usernames

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

sort_by   string  optional  

Field Name to sort email addresses by. Can only be email_address. Example: email_address

direction   string  optional  

Direction in which to sort paginated results. Must be either asc or desc. Example: asc

page   integer  optional  

For paginated results, which page to get. Example: 1

Email Filters - Store Block email addresses

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/message-filters/usernames/block"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "usernames": [
        "[email protected]"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/tools/settings/message-filters/usernames/block',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'usernames' => [
                '[email protected]',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/tools/settings/message-filters/usernames/block" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"usernames\": [
        \"[email protected]\"
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
[
    {
        "id": 25,
        "username": "spam",
        "domain_id": 126,
        "email_address": "[email protected]"
    }
]
 

Request   

POST api/tools/settings/message-filters/usernames/block

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

usernames   string[]   

An array of email addresses to block.

Email Filters - Store CSV Block Email addresses by uploading a CSV

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/message-filters/usernames/block-csv"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/tools/settings/message-filters/usernames/block-csv',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/tools/settings/message-filters/usernames/block-csv" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \

Example response (200):

[
    "[email protected]",
    "[email protected]"
]
 

Request   

POST api/tools/settings/message-filters/usernames/block-csv

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

upload   file  optional  

A CSV of Email Addresses to block.

Email Filters - Delete Unblock email addresses

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/message-filters/usernames/unblock"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "usernames": [
        "[email protected]"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/tools/settings/message-filters/usernames/unblock',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'usernames' => [
                '[email protected]',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/tools/settings/message-filters/usernames/unblock" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"usernames\": [
        \"[email protected]\"
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "status": "Email addresses unblocked successfully"
}
 

Request   

POST api/tools/settings/message-filters/usernames/unblock

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

usernames   string[]   

An array of email addresses to unblock.

Advanced Filters - List List all Advanced filters

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/message-filters/advanced"
);

const params = {
    "per_page": "15",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/tools/settings/message-filters/advanced',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'per_page' => '15',
            'page' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/tools/settings/message-filters/advanced?per_page=15&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "current_page": 1,
    "data": [
        {
            "id": 1,
            "company_id": 1,
            "name": "example message filter group",
            "active": false,
            "message_filters_count": 1,
            "message_filters": [
                {
                    "id": 1,
                    "message_filter_group_id": 1,
                    "field": "Subject",
                    "operator": "does not equal",
                    "type": "and",
                    "value": "example message filter"
                }
            ]
        }
    ],
    "first_page_url": "https://portal.timetoreply.com/api/tools/settings/message-filters/advanced?page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "https://portal.timetoreply.com/api/tools/settings/message-filters/advanced?page=1",
    "links": [
        {
            "url": null,
            "label": "« Previous",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/tools/settings/message-filters/advanced?page=1",
            "label": "1",
            "active": true
        },
        {
            "url": null,
            "label": "Next »",
            "active": false
        }
    ],
    "next_page_url": null,
    "path": "https://portal.timetoreply.com/api/tools/settings/message-filters/advanced",
    "per_page": 2,
    "prev_page_url": null,
    "to": 1,
    "total": 1
}
 

Request   

GET api/tools/settings/message-filters/advanced

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

per_page   number  optional  

The number of mailboxes to show per page. Example: 15

page   number  optional  

The page number. Example: 1

Advanced Filters - Store Add a new Advanced Filter

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/message-filters/advanced"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "filterName": "From Does Not Contain no-reply example",
    "filters": [
        {
            "field": "From",
            "operator": "does not contain",
            "type": "and",
            "value": "no-reply"
        }
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/tools/settings/message-filters/advanced',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'filterName' => 'From Does Not Contain no-reply example',
            'filters' => [
                [
                    'field' => 'From',
                    'operator' => 'does not contain',
                    'type' => 'and',
                    'value' => 'no-reply',
                ],
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/tools/settings/message-filters/advanced" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"filterName\": \"From Does Not Contain no-reply example\",
    \"filters\": [
        {
            \"field\": \"From\",
            \"operator\": \"does not contain\",
            \"type\": \"and\",
            \"value\": \"no-reply\"
        }
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 2,
    "company_id": 1,
    "name": "From Does Not Contain no-reply example",
    "active": true
}
 

Request   

POST api/tools/settings/message-filters/advanced

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

filterName   string   

The name of the Advanced Filter. Example: From Does Not Contain no-reply example

filters   object[]  optional  

An array of Filters objects.

field   string   

The field to filter on. Can be From, To, Cc, Subject or Label. Example: From

operator   string   

The operator for the filter. Can be does not begin with, does not end with, does not equal, does not contain, begins with, ends with, equals or contains. Example: does not contain

type   string   

The boolean logic type of the advanced filter. Can be and or or. Example: and

value   string   

The value of the filter. Example: no-reply

Advanced Filters - Update Update an Advanced Filter

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/message-filters/advanced/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "filterName": "From Does Not Contain no-reply filter",
    "filters": [
        {
            "field": "From",
            "operator": "does not contain",
            "type": "and",
            "value": "no-reply"
        }
    ]
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->patch(
    'https://portal.timetoreply.com/api/tools/settings/message-filters/advanced/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'filterName' => 'From Does Not Contain no-reply filter',
            'filters' => [
                [
                    'field' => 'From',
                    'operator' => 'does not contain',
                    'type' => 'and',
                    'value' => 'no-reply',
                ],
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PATCH \
    "https://portal.timetoreply.com/api/tools/settings/message-filters/advanced/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"filterName\": \"From Does Not Contain no-reply filter\",
    \"filters\": [
        {
            \"field\": \"From\",
            \"operator\": \"does not contain\",
            \"type\": \"and\",
            \"value\": \"no-reply\"
        }
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 1,
    "company_id": 1,
    "name": "From Does Not Contain no-reply filter",
    "active": false,
    "message_filters": [
        {
            "id": 3,
            "message_filter_group_id": 1,
            "field": "From",
            "operator": "does not contain",
            "type": "and",
            "value": "no-reply"
        }
    ]
}
 

Request   

PATCH api/tools/settings/message-filters/advanced/{message_filter_group}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

message_filter_group   integer   

The ID of the Advanced Filter to update. Example: 1

Body Parameters

filterName   string   

The name of the Advanced Filter. Example: From Does Not Contain no-reply filter

filters   object[]  optional  

An array of Filters objects.

field   string   

The field to filter on. Can be From, To, Cc, Subject or Label. Example: From

operator   string   

The operator for the filter. Can be does not begin with, does not end with, does not equal, does not contain, begins with, ends with, equals or contains. Example: does not contain

type   string   

The boolean logic type of the advanced filter. Can be and or or. Example: and

value   string   

The value of the filter. Example: no-reply

Advanced Filters - Delete Delete an Advanced Filter

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/message-filters/advanced/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://portal.timetoreply.com/api/tools/settings/message-filters/advanced/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://portal.timetoreply.com/api/tools/settings/message-filters/advanced/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

{
    "status": "Advanced filter deleted."
}
 

Request   

DELETE api/tools/settings/message-filters/advanced/{message_filter_group}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

message_filter_group   integer   

The ID of the Advanced Filter to delete. Example: 1

Advanced Filters - Toggle Toggle on/off an Advanced Filter

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/message-filters/advanced/1/toggle"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "PATCH",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->patch(
    'https://portal.timetoreply.com/api/tools/settings/message-filters/advanced/1/toggle',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PATCH \
    "https://portal.timetoreply.com/api/tools/settings/message-filters/advanced/1/toggle" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 1,
    "company_id": 1,
    "name": "From Does Not Contain no-reply filter",
    "active": true
}
 

Request   

PATCH api/tools/settings/message-filters/advanced/{message_filter_group}/toggle

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

message_filter_group   integer   

The ID of the Advanced Filter to toggle. Example: 1

Reply Time Goals - List Get current reply time goals (shown in seconds)

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/reply-time-goals"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/tools/settings/reply-time-goals',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/tools/settings/reply-time-goals" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "first_reply_time_goal": 7200,
    "first_reply_time_goal_bands": [],
    "overall_reply_time_goal": 14400,
    "overall_reply_time_goal_bands": [],
    "time_to_close_goal": 86400,
    "time_to_close_goal_bands": []
}
 

Request   

GET api/tools/settings/reply-time-goals

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Reply Time Goals - Update Update Reply Time Goals

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/reply-time-goals"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "first_reply_time_goal": 3600,
    "overall_reply_time_goal": 3600,
    "time_to_close_goal": 3600,
    "first_reply_time_goal_bands": [
        1800,
        7200
    ],
    "overall_reply_time_goal_bands": [
        1800,
        7200
    ],
    "time_to_close_goal_bands": [
        1800,
        7200
    ]
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->patch(
    'https://portal.timetoreply.com/api/tools/settings/reply-time-goals',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'first_reply_time_goal' => 3600,
            'overall_reply_time_goal' => 3600,
            'time_to_close_goal' => 3600,
            'first_reply_time_goal_bands' => [
                1800,
                7200,
            ],
            'overall_reply_time_goal_bands' => [
                1800,
                7200,
            ],
            'time_to_close_goal_bands' => [
                1800,
                7200,
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PATCH \
    "https://portal.timetoreply.com/api/tools/settings/reply-time-goals" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"first_reply_time_goal\": 3600,
    \"overall_reply_time_goal\": 3600,
    \"time_to_close_goal\": 3600,
    \"first_reply_time_goal_bands\": [
        1800,
        7200
    ],
    \"overall_reply_time_goal_bands\": [
        1800,
        7200
    ],
    \"time_to_close_goal_bands\": [
        1800,
        7200
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "first_reply_time_goal": 3600,
    "first_reply_time_goal_bands": [
        1800,
        7200
    ],
    "overall_reply_time_goal": 3600,
    "overall_reply_time_goal_bands": [
        1800,
        7200
    ],
    "time_to_close_goal": 3600,
    "time_to_close_goal_bands": [
        1800,
        7200
    ]
}
 

Request   

PATCH api/tools/settings/reply-time-goals

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

first_reply_time_goal   integer   

First Reply Time Goal (in seconds). Example: 3600

overall_reply_time_goal   integer   

Overall Reply Time Goal (in seconds). Example: 3600

time_to_close_goal   integer   

Time to Close Goal (in seconds). Example: 3600

first_reply_time_goal_bands   integer[]  optional  

First Reply Time Goal Bands (in seconds).

overall_reply_time_goal_bands   integer[]  optional  

Overall Reply Time Goal Bands (in seconds).

time_to_close_goal_bands   integer[]  optional  

Time to Close Goal Bands (in seconds).

Profile - Delete Delete your account

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/profile"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://portal.timetoreply.com/api/tools/settings/profile',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://portal.timetoreply.com/api/tools/settings/profile" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

{
    "status": "Account deletion in progress. Please allow a few minutes for this to complete. We will now log you out of your account."
}
 

Request   

DELETE api/tools/settings/profile

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Profile - Delete Company Delete your company account

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/profile/company"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/tools/settings/profile/company',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/tools/settings/profile/company" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

{
    "status": "Company account deletion in progress. Please allow a few minutes for this to complete. We will now log you out of your account."
}
 

Request   

POST api/tools/settings/profile/company

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Profile - Update Add more details to your profile

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/settings/profile"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "team": "Customer Service",
    "team_role": "Manager",
    "company_size": "B"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/tools/settings/profile',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'team' => 'Customer Service',
            'team_role' => 'Manager',
            'company_size' => 'B',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/tools/settings/profile" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"team\": \"Customer Service\",
    \"team_role\": \"Manager\",
    \"company_size\": \"B\"
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "status": "Thanks for telling us more about you."
}
 

Request   

POST api/tools/settings/profile

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

team   string   

Which team do you belong to? Can be any of 'Customer Service', 'Support', 'Sales', 'Key Account Management', 'Back Office', 'Other'. Example: Customer Service

team_role   string   

What is your role in that team? Can be any of 'VP/Director', 'Manager', 'Team Member'. Example: Manager

company_size   string   

What is the size of your company. This is based on the linkedin list of company sizes. Example: B

Scheduled Reports - List List all scheduled reports

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/scheduled-reports"
);

const params = {
    "search": "Weekly Overview Report",
    "sort_by": "name",
    "direction": "asc",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/tools/scheduled-reports',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'search' => 'Weekly Overview Report',
            'sort_by' => 'name',
            'direction' => 'asc',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/tools/scheduled-reports?search=Weekly+Overview+Report&sort_by=name&direction=asc" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "current_page": 1,
    "data": [],
    "first_page_url": "https://portal.timetoreply.com/api/tools/scheduled-reports?page=1",
    "from": null,
    "last_page": 1,
    "last_page_url": "https://portal.timetoreply.com/api/tools/scheduled-reports?page=1",
    "links": [
        {
            "url": null,
            "label": "« Previous",
            "active": false
        },
        {
            "url": "https://portal.timetoreply.com/api/tools/scheduled-reports?page=1",
            "label": "1",
            "active": true
        },
        {
            "url": null,
            "label": "Next »",
            "active": false
        }
    ],
    "next_page_url": null,
    "path": "https://portal.timetoreply.com/api/tools/scheduled-reports",
    "per_page": 15,
    "prev_page_url": null,
    "to": null,
    "total": 0
}
 

Request   

GET api/tools/scheduled-reports

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

search   string  optional  

Search for a report by name, report type or frequency. Example: Weekly Overview Report

sort_by   string  optional  

Sort the results by a specific field. Example: name

direction   string  optional  

Sort the results in a specific direction. Example: asc

Scheduled Reports - Store Save a Scheduled Report

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/scheduled-reports"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Weekly Overview Report",
    "customEmails": [
        "[email protected]"
    ],
    "reportType": "overview",
    "exportType": "xlsx",
    "frequency": "weekly",
    "includeToday": true,
    "time": "09:00:00",
    "monday": true,
    "tuesday": false,
    "wednesday": false,
    "thursday": false,
    "friday": false,
    "saturday": false,
    "sunday": false,
    "timeOfMonth": "not_applicable",
    "dayOfMonth": 1,
    "options": {
        "model": "Joe Blogs",
        "model_type": "Agent",
        "model_com": "Important Contact",
        "model_type_com": "Contact Group",
        "label": [
            "porro"
        ],
        "exclude_cc": false,
        "exclude_cc_com": false,
        "exclusive": false,
        "search": "important email subject",
        "thread_type": "inbound,outbound,internal",
        "thread_status": "internal,await-customer,closed,await-agent",
        "has_replies": "hasReplies,hasForwards,hasNoRepliesOrForwards",
        "classification": "calculating,first,reply,reply-all,forward",
        "messageType": "inbound,outbound,internal",
        "replies_over": 15,
        "message_replies_over": 15,
        "no_reply_for": 15
    },
    "interactions": [],
    "sla": {
        "initialTTRGoal": "02:00:00",
        "overallTTRGoal": "02:00:00",
        "overallTTCGoal": "02:00:00"
    },
    "trend": {
        "show_agents": false
    },
    "widgets": [
        "in"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/tools/scheduled-reports',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Weekly Overview Report',
            'customEmails' => [
                '[email protected]',
            ],
            'reportType' => 'overview',
            'exportType' => 'xlsx',
            'frequency' => 'weekly',
            'includeToday' => true,
            'time' => '09:00:00',
            'monday' => true,
            'tuesday' => false,
            'wednesday' => false,
            'thursday' => false,
            'friday' => false,
            'saturday' => false,
            'sunday' => false,
            'timeOfMonth' => 'not_applicable',
            'dayOfMonth' => 1,
            'options' => [
                'model' => 'Joe Blogs',
                'model_type' => 'Agent',
                'model_com' => 'Important Contact',
                'model_type_com' => 'Contact Group',
                'label' => [
                    'porro',
                ],
                'exclude_cc' => false,
                'exclude_cc_com' => false,
                'exclusive' => false,
                'search' => 'important email subject',
                'thread_type' => 'inbound,outbound,internal',
                'thread_status' => 'internal,await-customer,closed,await-agent',
                'has_replies' => 'hasReplies,hasForwards,hasNoRepliesOrForwards',
                'classification' => 'calculating,first,reply,reply-all,forward',
                'messageType' => 'inbound,outbound,internal',
                'replies_over' => 15,
                'message_replies_over' => 15,
                'no_reply_for' => 15,
            ],
            'interactions' => [],
            'sla' => [
                'initialTTRGoal' => '02:00:00',
                'overallTTRGoal' => '02:00:00',
                'overallTTCGoal' => '02:00:00',
            ],
            'trend' => [
                'show_agents' => false,
            ],
            'widgets' => [
                'in',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/tools/scheduled-reports" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Weekly Overview Report\",
    \"customEmails\": [
        \"[email protected]\"
    ],
    \"reportType\": \"overview\",
    \"exportType\": \"xlsx\",
    \"frequency\": \"weekly\",
    \"includeToday\": true,
    \"time\": \"09:00:00\",
    \"monday\": true,
    \"tuesday\": false,
    \"wednesday\": false,
    \"thursday\": false,
    \"friday\": false,
    \"saturday\": false,
    \"sunday\": false,
    \"timeOfMonth\": \"not_applicable\",
    \"dayOfMonth\": 1,
    \"options\": {
        \"model\": \"Joe Blogs\",
        \"model_type\": \"Agent\",
        \"model_com\": \"Important Contact\",
        \"model_type_com\": \"Contact Group\",
        \"label\": [
            \"porro\"
        ],
        \"exclude_cc\": false,
        \"exclude_cc_com\": false,
        \"exclusive\": false,
        \"search\": \"important email subject\",
        \"thread_type\": \"inbound,outbound,internal\",
        \"thread_status\": \"internal,await-customer,closed,await-agent\",
        \"has_replies\": \"hasReplies,hasForwards,hasNoRepliesOrForwards\",
        \"classification\": \"calculating,first,reply,reply-all,forward\",
        \"messageType\": \"inbound,outbound,internal\",
        \"replies_over\": 15,
        \"message_replies_over\": 15,
        \"no_reply_for\": 15
    },
    \"interactions\": [],
    \"sla\": {
        \"initialTTRGoal\": \"02:00:00\",
        \"overallTTRGoal\": \"02:00:00\",
        \"overallTTCGoal\": \"02:00:00\"
    },
    \"trend\": {
        \"show_agents\": false
    },
    \"widgets\": [
        \"in\"
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "company_id": 1,
    "name": "Weekly Overview Report",
    "custom_email": "[email protected]",
    "report_type": "overview",
    "export_type": "xlsx",
    "frequency": "weekly",
    "include_today": true,
    "hide_filters": false,
    "time": {
        "hour": 9,
        "minute": 0,
        "second": 0
    },
    "monday": true,
    "tuesday": false,
    "wednesday": false,
    "thursday": false,
    "friday": false,
    "saturday": false,
    "sunday": false,
    "time_of_month": "not_applicable",
    "day_of_month": null,
    "options": {
        "modelSelected": "Joe Blogs",
        "modelSelectedType": "Agent",
        "modelFull": {
            "icon": "building",
            "id": null,
            "model_type": "Internal",
            "name": "My Company",
            "value": "My Company"
        },
        "excludeCc": false,
        "modelSelectedCom": "Important Contact",
        "modelSelectedTypeCom": "Contact Group",
        "modelComFull": {
            "icon": "globe-americas",
            "id": null,
            "model_type": "Anybody",
            "name": "Anybody",
            "value": "Anybody"
        },
        "excludeCcCom": false,
        "exclusively": false,
        "search": "important email subject",
        "label": [
            "porro"
        ],
        "labelsAndOr": "AND",
        "dealStage": null,
        "dealOwner": null,
        "dealName": "",
        "dealValueFrom": null,
        "dealValueTo": null,
        "nudges": "0",
        "touches": "0",
        "lastTouchDate": null,
        "threadType": "inbound,outbound,internal",
        "threadStatus": "internal,await-customer,closed,await-agent",
        "hasReplies": "hasReplies,hasForwards,hasNoRepliesOrForwards",
        "classification": "first,reply,reply-all,forward",
        "messageType": "inbound,outbound,internal",
        "periodType": "Months",
        "periods": 12,
        "repliesOver": 15,
        "closedOver": 0,
        "messageRepliesOver": 15,
        "noReplyFor": 15,
        "interactions": [],
        "sla": {
            "direction": "desc",
            "init_ttr_goal": "02:00:00",
            "overall_ttr_goal": "02:00:00",
            "overall_ttc_goal": "02:00:00",
            "page": 1,
            "perPage": 100,
            "sortBy": "threads.total"
        },
        "overview": {
            "direction": "desc",
            "page": 1,
            "perPage": 100,
            "sortBy": "threads.total"
        },
        "comparative": {
            "direction": "desc",
            "page": 1,
            "perPage": 100
        },
        "trend": {
            "page": 1,
            "perPage": 15,
            "show_agents": true
        }
    },
    "widgets": null,
    "id": 2,
    "relative_time": "109h:10m",
    "upcoming_recipients": "[email protected]",
    "days_of_week": "Monday",
    "report_class": "PDF",
    "friendly_name": "Weekly Overview Report",
    "page_route": "https://portal.timetoreply.com/reports/overview"
}
 

Request   

POST api/tools/scheduled-reports

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string  optional  

The name of the Scheduled Report. Example: Weekly Overview Report

customEmails   string[]  optional  

Optional custom email address for the report to be sent to.

reportType   string   

The type of report. Example: overview

exportType   string   

The type of export. Only applies to non-pdf report types. Example: xlsx

frequency   string   

The frequency of reports. Example: weekly

includeToday   boolean  optional  

If the report should include data for the date it is sent, or only until midnight the night before. Example: true

time   string  optional  

The time the reports should be sent in the format HH:mm:ss. Example: 09:00:00

monday   boolean  optional  

Should we send the report every monday. Applies only to weekly report frequency. Example: true

tuesday   boolean  optional  

Should we send the report every tuesday. Applies only to weekly report frequency. Example: false

wednesday   boolean  optional  

Should we send the report every wednesday. Applies only to weekly report frequency. Example: false

thursday   boolean  optional  

Should we send the report every thursday. Applies only to weekly report frequency. Example: false

friday   boolean  optional  

Should we send the report every friday. Applies only to weekly report frequency. Example: false

saturday   boolean  optional  

Should we send the report every saturday. Applies only to weekly report frequency. Example: false

sunday   boolean  optional  

Should we send the report every sunday. Applies only to weekly report frequency. Example: false

timeOfMonth   string  optional  

If selecting monthly frequency, when during the month should we send the report. Example: not_applicable

dayOfMonth   integer  optional  

If selecting timeOfMonth specific_day, what day of the month should we send it. Example: 1

options   object   

An object to describe the filtering options you require for the report.

model   string  optional  

Name, email address or domain you want statistics for. Use the models endpoint to get a list. Example: Joe Blogs

model_type   string  optional  

Model Type of the model being queried. Use "Contact" for email address and domain. Example: Agent

model_com   string  optional  

Model Communicating With, same as Model, except now for who/what the Model is communicating with. Example: Important Contact

model_type_com   string  optional  

Model Type of the model you are communicating with. Use "Contact" for email address and domain. Example: Contact Group

label   string[]  optional  

Label, if your mail provider supports labels/categories, you can filter your results using them.

exclude_cc   boolean  optional  

Should we exclude CC messages from the statistics. Example: false

exclude_cc_com   boolean  optional  

Should we exclude CC messages from the statistics for the communicating with model. Example: false

exclusive   boolean  optional  

Should we only focus on statistics where exclusively Model and ModelCom were involved?. Example: false

search   string  optional  

Search a specific email subject line (warning this is very slow!). Example: important email subject

thread_type   string  optional  

A comma separated list (no spaces) of any combination of the following: inbound,outbound,internal. Example: inbound,outbound,internal

thread_status   string  optional  

A comma separated list (no spaces) of any combination of the following: internal,await-customer,closed,await-agent. Example: internal,await-customer,closed,await-agent

has_replies   string  optional  

A comma separated list (no spaces) of any combination of the following: hasReplies,hasForwards,hasNoRepliesOrForwards. Example: hasReplies,hasForwards,hasNoRepliesOrForwards

classification   string  optional  

A comma separated list (no spaces) of any combination of the following: calculating,first,reply,reply-all,forward,follow-up. Example: calculating,first,reply,reply-all,forward

messageType   string  optional  

A comma separated list (no spaces) of any combination of the following: inbound,outbound,internal. Example: inbound,outbound,internal

replies_over   integer  optional  

Limit results to conversations with first reply times over X minutes. Should not be used at same time as message_replies_over. Example: 15

message_replies_over   integer  optional  

Limit results to messages where the reply time was over X minutes. Should not be used at same time as replies_over. Example: 15

no_reply_for   integer  optional  

Limit results to messages that have not had a reply for at least X minutes. Example: 15

interactions   object  optional  

An object to describe the agents/mailboxes you would like to report for in the case of an interactions report.

sla   object  optional  

An object to decribe the reply time goals for SLA reports.

initialTTRGoal   string  optional  

The initial reply time goal in the format "HH:mm:ss". Example: 02:00:00

overallTTRGoal   string  optional  

The overall reply time goal in the format "HH:mm:ss". Example: 02:00:00

overallTTCGoal   string  optional  

The time to close goal in the format "HH:mm:ss". Example: 02:00:00

trend   object  optional  

An object to decribe the settings for the trend report.

show_agents   boolean  optional  

If agent breakdowns should be shown on the trend report. Defaults to true. Example: false

widgets   string[]  optional  

If the report type is overview or sla.

Scheduled Reports - Show Show a scheduled report

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/scheduled-reports/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/tools/scheduled-reports/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/tools/scheduled-reports/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 1,
    "company_id": 1,
    "report_type": "comparative",
    "export_type": "xlsx",
    "frequency": "monthly",
    "include_today": true,
    "time": {
        "hour": 19,
        "minute": 33,
        "second": 14
    },
    "monday": false,
    "tuesday": false,
    "wednesday": false,
    "thursday": false,
    "friday": false,
    "saturday": false,
    "sunday": false,
    "time_of_month": "end",
    "day_of_month": null,
    "options": {
        "modelFull": {
            "icon": "building",
            "id": null,
            "model_type": "Internal",
            "name": "My Company",
            "value": "My Company"
        },
        "excludeCc": false,
        "modelComFull": {
            "icon": "globe-americas",
            "id": null,
            "model_type": "Anybody",
            "name": "Anybody",
            "value": "Anybody"
        },
        "excludeCcCom": false,
        "exclusively": false,
        "search": "",
        "label": [],
        "labelsAndOr": "AND",
        "dealStage": null,
        "dealOwner": null,
        "dealName": "",
        "dealValueFrom": null,
        "dealValueTo": null,
        "nudges": "0",
        "touches": "0",
        "lastTouchDate": null,
        "threadType": "inbound,outbound,internal",
        "threadStatus": "internal,await-customer,closed,await-agent",
        "hasReplies": "hasReplies,hasNoRepliesOrForwards,hasForwards",
        "classification": "first,reply,reply-all,forward,follow-up",
        "messageType": "inbound,outbound,internal",
        "periodType": "Months",
        "periods": 12,
        "repliesOver": 0,
        "closedOver": 0,
        "messageRepliesOver": 0,
        "noReplyFor": 0,
        "interactions": [],
        "sla": {
            "direction": "desc",
            "init_ttr_goal": "02:00:00",
            "overall_ttr_goal": "02:00:00",
            "overall_ttc_goal": "02:00:00",
            "page": 1,
            "perPage": 100,
            "sortBy": "threads.total"
        },
        "overview": {
            "direction": "desc",
            "page": 1,
            "perPage": 100,
            "sortBy": "threads.total"
        },
        "comparative": {
            "direction": "desc",
            "page": 1,
            "perPage": 100
        },
        "trend": {
            "page": 1,
            "perPage": 15,
            "show_agents": true
        },
        "model": {
            "icon": "building",
            "id": null,
            "model_type": "Internal",
            "name": "My Company",
            "value": "My Company"
        },
        "modelCom": {
            "icon": "globe-americas",
            "id": null,
            "model_type": "Anybody",
            "name": "Anybody",
            "value": "Anybody"
        }
    },
    "name": "Test Scheduled Report",
    "custom_email": null,
    "hide_filters": false,
    "widgets": null,
    "days_of_week": "",
    "report_class": "PDF",
    "friendly_name": "Test Scheduled Report",
    "page_route": "https://portal.timetoreply.com/reports/comparative"
}
 

Request   

GET api/tools/scheduled-reports/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

scheduled_report   integer   

The ID of the scheduled report. Example: 1

Scheduled Reports - Update Update a scheduled report

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/scheduled-reports/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Weekly Overview Report",
    "customEmails": [
        "[email protected]"
    ],
    "reportType": "overview",
    "exportType": "xlsx",
    "frequency": "weekly",
    "includeToday": true,
    "time": "09:00:00",
    "monday": true,
    "tuesday": false,
    "wednesday": false,
    "thursday": false,
    "friday": false,
    "saturday": false,
    "sunday": false,
    "timeOfMonth": "not_applicable",
    "dayOfMonth": 1,
    "options": {
        "model": "Joe Blogs",
        "model_type": "Agent",
        "model_com": "Important Contact",
        "model_type_com": "Contact Group",
        "label": [
            "eos"
        ],
        "exclude_cc": false,
        "exclude_cc_com": false,
        "exclusive": false,
        "search": "important email subject",
        "thread_type": "inbound,outbound,internal",
        "thread_status": "internal,await-customer,closed,await-agent",
        "has_replies": "hasReplies,hasForwards,hasNoRepliesOrForwards",
        "classification": "calculating,first,reply,reply-all,forward",
        "messageType": "inbound,outbound,internal",
        "replies_over": 15,
        "message_replies_over": 15,
        "no_reply_for": 15
    },
    "interactions": [],
    "sla": {
        "initialTTRGoal": "02:00:00",
        "overallTTRGoal": "02:00:00",
        "overallTTCGoal": "02:00:00"
    }
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->patch(
    'https://portal.timetoreply.com/api/tools/scheduled-reports/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Weekly Overview Report',
            'customEmails' => [
                '[email protected]',
            ],
            'reportType' => 'overview',
            'exportType' => 'xlsx',
            'frequency' => 'weekly',
            'includeToday' => true,
            'time' => '09:00:00',
            'monday' => true,
            'tuesday' => false,
            'wednesday' => false,
            'thursday' => false,
            'friday' => false,
            'saturday' => false,
            'sunday' => false,
            'timeOfMonth' => 'not_applicable',
            'dayOfMonth' => 1,
            'options' => [
                'model' => 'Joe Blogs',
                'model_type' => 'Agent',
                'model_com' => 'Important Contact',
                'model_type_com' => 'Contact Group',
                'label' => [
                    'eos',
                ],
                'exclude_cc' => false,
                'exclude_cc_com' => false,
                'exclusive' => false,
                'search' => 'important email subject',
                'thread_type' => 'inbound,outbound,internal',
                'thread_status' => 'internal,await-customer,closed,await-agent',
                'has_replies' => 'hasReplies,hasForwards,hasNoRepliesOrForwards',
                'classification' => 'calculating,first,reply,reply-all,forward',
                'messageType' => 'inbound,outbound,internal',
                'replies_over' => 15,
                'message_replies_over' => 15,
                'no_reply_for' => 15,
            ],
            'interactions' => [],
            'sla' => [
                'initialTTRGoal' => '02:00:00',
                'overallTTRGoal' => '02:00:00',
                'overallTTCGoal' => '02:00:00',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PATCH \
    "https://portal.timetoreply.com/api/tools/scheduled-reports/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Weekly Overview Report\",
    \"customEmails\": [
        \"[email protected]\"
    ],
    \"reportType\": \"overview\",
    \"exportType\": \"xlsx\",
    \"frequency\": \"weekly\",
    \"includeToday\": true,
    \"time\": \"09:00:00\",
    \"monday\": true,
    \"tuesday\": false,
    \"wednesday\": false,
    \"thursday\": false,
    \"friday\": false,
    \"saturday\": false,
    \"sunday\": false,
    \"timeOfMonth\": \"not_applicable\",
    \"dayOfMonth\": 1,
    \"options\": {
        \"model\": \"Joe Blogs\",
        \"model_type\": \"Agent\",
        \"model_com\": \"Important Contact\",
        \"model_type_com\": \"Contact Group\",
        \"label\": [
            \"eos\"
        ],
        \"exclude_cc\": false,
        \"exclude_cc_com\": false,
        \"exclusive\": false,
        \"search\": \"important email subject\",
        \"thread_type\": \"inbound,outbound,internal\",
        \"thread_status\": \"internal,await-customer,closed,await-agent\",
        \"has_replies\": \"hasReplies,hasForwards,hasNoRepliesOrForwards\",
        \"classification\": \"calculating,first,reply,reply-all,forward\",
        \"messageType\": \"inbound,outbound,internal\",
        \"replies_over\": 15,
        \"message_replies_over\": 15,
        \"no_reply_for\": 15
    },
    \"interactions\": [],
    \"sla\": {
        \"initialTTRGoal\": \"02:00:00\",
        \"overallTTRGoal\": \"02:00:00\",
        \"overallTTCGoal\": \"02:00:00\"
    }
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "id": 1,
    "company_id": 1,
    "report_type": "overview",
    "export_type": "xlsx",
    "frequency": "weekly",
    "include_today": true,
    "time": {
        "hour": 9,
        "minute": 0,
        "second": 0
    },
    "monday": true,
    "tuesday": false,
    "wednesday": false,
    "thursday": false,
    "friday": false,
    "saturday": false,
    "sunday": false,
    "time_of_month": "not_applicable",
    "day_of_month": null,
    "options": {
        "modelSelected": "Joe Blogs",
        "modelSelectedType": "Agent",
        "modelFull": {
            "icon": "building",
            "id": null,
            "model_type": "Internal",
            "name": "My Company",
            "value": "My Company"
        },
        "excludeCc": false,
        "modelSelectedCom": "Important Contact",
        "modelSelectedTypeCom": "Contact Group",
        "modelComFull": {
            "icon": "globe-americas",
            "id": null,
            "model_type": "Anybody",
            "name": "Anybody",
            "value": "Anybody"
        },
        "excludeCcCom": false,
        "exclusively": false,
        "search": "important email subject",
        "label": [
            "eos"
        ],
        "labelsAndOr": "AND",
        "dealStage": null,
        "dealOwner": null,
        "dealName": "",
        "dealValueFrom": null,
        "dealValueTo": null,
        "nudges": "0",
        "touches": "0",
        "lastTouchDate": null,
        "threadType": "inbound,outbound,internal",
        "threadStatus": "internal,await-customer,closed,await-agent",
        "hasReplies": "hasReplies,hasForwards,hasNoRepliesOrForwards",
        "classification": "first,reply,reply-all,forward",
        "messageType": "inbound,outbound,internal",
        "periodType": "Months",
        "periods": 12,
        "repliesOver": 15,
        "closedOver": 0,
        "messageRepliesOver": 15,
        "noReplyFor": 15,
        "interactions": [],
        "sla": {
            "direction": "desc",
            "init_ttr_goal": "02:00:00",
            "overall_ttr_goal": "02:00:00",
            "overall_ttc_goal": "02:00:00",
            "page": 1,
            "perPage": 100,
            "sortBy": "threads.total"
        },
        "overview": {
            "direction": "desc",
            "page": 1,
            "perPage": 100,
            "sortBy": "threads.total"
        },
        "comparative": {
            "direction": "desc",
            "page": 1,
            "perPage": 100
        },
        "trend": {
            "page": 1,
            "perPage": 15,
            "show_agents": true
        }
    },
    "name": "Weekly Overview Report",
    "custom_email": "[email protected]",
    "hide_filters": false,
    "widgets": null,
    "relative_time": "109h:10m",
    "upcoming_recipients": "[email protected]",
    "days_of_week": "Monday",
    "report_class": "PDF",
    "friendly_name": "Weekly Overview Report",
    "page_route": "https://portal.timetoreply.com/reports/overview"
}
 

Request   

PATCH api/tools/scheduled-reports/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

scheduled_report   integer   

The ID of the scheduled report you would like to update. Example: 1

Body Parameters

name   string  optional  

The name of the Scheduled Report. Example: Weekly Overview Report

customEmails   string[]  optional  

Optional custom email address for the report to be sent to.

reportType   string   

The type of report. Example: overview

exportType   string   

The type of export. Only applies to non-pdf report types. Example: xlsx

frequency   string   

The frequency of reports. Example: weekly

includeToday   boolean  optional  

If the report should include data for the date it is sent, or only until midnight the night before. Example: true

time   string  optional  

The time the reports should be sent in the format HH:mm:ss. Example: 09:00:00

monday   boolean  optional  

Should we send the report every monday. Applies only to weekly report frequency. Example: true

tuesday   boolean  optional  

Should we send the report every tuesday. Applies only to weekly report frequency. Example: false

wednesday   boolean  optional  

Should we send the report every wednesday. Applies only to weekly report frequency. Example: false

thursday   boolean  optional  

Should we send the report every thursday. Applies only to weekly report frequency. Example: false

friday   boolean  optional  

Should we send the report every friday. Applies only to weekly report frequency. Example: false

saturday   boolean  optional  

Should we send the report every saturday. Applies only to weekly report frequency. Example: false

sunday   boolean  optional  

Should we send the report every sunday. Applies only to weekly report frequency. Example: false

timeOfMonth   string  optional  

If selecting monthly frequency, when during the month should we send the report. Example: not_applicable

dayOfMonth   integer  optional  

If selecting timeOfMonth specific_day, what day of the month should we send it. Example: 1

options   object   

An object to describe the filtering options you require for the report.

model   string  optional  

Name, email address or domain you want statistics for. Use the models endpoint to get a list. Example: Joe Blogs

model_type   string  optional  

Model Type of the model being queried. Use "Contact" for email address and domain. Example: Agent

model_com   string  optional  

Model Communicating With, same as Model, except now for who/what the Model is communicating with. Example: Important Contact

model_type_com   string  optional  

Model Type of the model you are communicating with. Use "Contact" for email address and domain. Example: Contact Group

label   string[]  optional  

Label, if your mail provider supports labels/categories, you can filter your results using them.

exclude_cc   boolean  optional  

Should we exclude CC messages from the statistics. Example: false

exclude_cc_com   boolean  optional  

Should we exclude CC messages from the statistics for the communicating with model. Example: false

exclusive   boolean  optional  

Should we only focus on statistics where exclusively Model and ModelCom were involved?. Example: false

search   string  optional  

Search a specific email subject line (warning this is very slow!). Example: important email subject

thread_type   string  optional  

A comma separated list (no spaces) of any combination of the following: inbound,outbound,internal. Example: inbound,outbound,internal

thread_status   string  optional  

A comma separated list (no spaces) of any combination of the following: internal,await-customer,closed,await-agent. Example: internal,await-customer,closed,await-agent

has_replies   string  optional  

A comma separated list (no spaces) of any combination of the following: hasReplies,hasForwards,hasNoRepliesOrForwards. Example: hasReplies,hasForwards,hasNoRepliesOrForwards

classification   string  optional  

A comma separated list (no spaces) of any combination of the following: calculating,first,reply,reply-all,forward,follow-up. Example: calculating,first,reply,reply-all,forward

messageType   string  optional  

A comma separated list (no spaces) of any combination of the following: inbound,outbound,internal. Example: inbound,outbound,internal

replies_over   integer  optional  

Limit results to conversations with first reply times over X minutes. Should not be used at same time as message_replies_over. Example: 15

message_replies_over   integer  optional  

Limit results to messages where the reply time was over X minutes. Should not be used at same time as replies_over. Example: 15

no_reply_for   integer  optional  

Limit results to messages that have not had a reply for at least X minutes. Example: 15

interactions   object  optional  

An object to describe the agents/mailboxes you would like to report for in the case of an interactions report.

sla   object  optional  

An object to decribe the reply time goals for SLA reports.

initialTTRGoal   string  optional  

The initial reply time goal in the format "HH:mm:ss". Example: 02:00:00

overallTTRGoal   string  optional  

The overall reply time goal in the format "HH:mm:ss". Example: 02:00:00

overallTTCGoal   string  optional  

The time to close goal in the format "HH:mm:ss". Example: 02:00:00

Scheduled Reports - Delete Delete a scheduled report

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/scheduled-reports/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://portal.timetoreply.com/api/tools/scheduled-reports/1',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://portal.timetoreply.com/api/tools/scheduled-reports/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

{
    "status": "Scheduled Report deleted successfully"
}
 

Request   

DELETE api/tools/scheduled-reports/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

scheduled_report   integer   

The ID of the scheduled report you would like to delete. Example: 1

Reports - List List all Reports

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/reports"
);

const params = {
    "reportType": "overview",
    "includeScheduled": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://portal.timetoreply.com/api/tools/reports',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'reportType' => 'overview',
            'includeScheduled' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://portal.timetoreply.com/api/tools/reports?reportType=overview&includeScheduled=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
[
    {
        "name": "Weekly Overview Report",
        "id": 1,
        "type": "Scheduled Report"
    },
    {
        "name": "Weekly Overview Report",
        "id": 2,
        "type": "Scheduled Report"
    }
]
 

Request   

GET api/tools/reports

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

reportType   string  optional  

The type of report. Example: overview

includeScheduled   boolean  optional  

Should we include scheduled reports in the list?. Example: true

Reports - Store Save a Report

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/reports"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "reportType": "overview",
    "reportName": "Overview Report For Sales Team With DEAL_CLOSED label",
    "options": {
        "model": "Joe Blogs",
        "model_type": "Agent",
        "model_com": "Important Contact",
        "model_type_com": "Contact Group",
        "label": [
            "soluta"
        ],
        "exclude_cc": false,
        "exclude_cc_com": false,
        "exclusive": false,
        "search": "important email subject",
        "thread_type": "inbound,outbound,internal",
        "thread_status": "internal,await-customer,closed,await-agent",
        "has_replies": "hasReplies,hasForwards,hasNoRepliesOrForwards",
        "classification": "calculating,first,reply,reply-all,forward",
        "messageType": "inbound,outbound,internal",
        "replies_over": 15,
        "message_replies_over": 15,
        "no_reply_for": 15,
        "init_ttr_goal": "02:00:00",
        "overall_ttr_goal": "02:00:00",
        "overall_ttc_goal": "02:00:00",
        "show_agents": false
    },
    "widgets": [
        "enim"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/tools/reports',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'reportType' => 'overview',
            'reportName' => 'Overview Report For Sales Team With DEAL_CLOSED label',
            'options' => [
                'model' => 'Joe Blogs',
                'model_type' => 'Agent',
                'model_com' => 'Important Contact',
                'model_type_com' => 'Contact Group',
                'label' => [
                    'soluta',
                ],
                'exclude_cc' => false,
                'exclude_cc_com' => false,
                'exclusive' => false,
                'search' => 'important email subject',
                'thread_type' => 'inbound,outbound,internal',
                'thread_status' => 'internal,await-customer,closed,await-agent',
                'has_replies' => 'hasReplies,hasForwards,hasNoRepliesOrForwards',
                'classification' => 'calculating,first,reply,reply-all,forward',
                'messageType' => 'inbound,outbound,internal',
                'replies_over' => 15,
                'message_replies_over' => 15,
                'no_reply_for' => 15,
                'init_ttr_goal' => '02:00:00',
                'overall_ttr_goal' => '02:00:00',
                'overall_ttc_goal' => '02:00:00',
                'show_agents' => false,
            ],
            'widgets' => [
                'enim',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/tools/reports" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reportType\": \"overview\",
    \"reportName\": \"Overview Report For Sales Team With DEAL_CLOSED label\",
    \"options\": {
        \"model\": \"Joe Blogs\",
        \"model_type\": \"Agent\",
        \"model_com\": \"Important Contact\",
        \"model_type_com\": \"Contact Group\",
        \"label\": [
            \"soluta\"
        ],
        \"exclude_cc\": false,
        \"exclude_cc_com\": false,
        \"exclusive\": false,
        \"search\": \"important email subject\",
        \"thread_type\": \"inbound,outbound,internal\",
        \"thread_status\": \"internal,await-customer,closed,await-agent\",
        \"has_replies\": \"hasReplies,hasForwards,hasNoRepliesOrForwards\",
        \"classification\": \"calculating,first,reply,reply-all,forward\",
        \"messageType\": \"inbound,outbound,internal\",
        \"replies_over\": 15,
        \"message_replies_over\": 15,
        \"no_reply_for\": 15,
        \"init_ttr_goal\": \"02:00:00\",
        \"overall_ttr_goal\": \"02:00:00\",
        \"overall_ttc_goal\": \"02:00:00\",
        \"show_agents\": false
    },
    \"widgets\": [
        \"enim\"
    ]
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "name": "Overview Report For Sales Team With DEAL_CLOSED label",
    "company_id": 1,
    "filters": {
        "modelSelected": "Joe Blogs",
        "modelSelectedType": "Agent",
        "modelFull": {
            "icon": "building",
            "id": null,
            "model_type": "Internal",
            "name": "My Company",
            "value": "My Company"
        },
        "excludeCc": false,
        "modelSelectedCom": "Important Contact",
        "modelSelectedTypeCom": "Contact Group",
        "modelComFull": {
            "icon": "globe-americas",
            "id": null,
            "model_type": "Anybody",
            "name": "Anybody",
            "value": "Anybody"
        },
        "excludeCcCom": false,
        "exclusively": false,
        "search": "important email subject",
        "label": [
            "soluta"
        ],
        "labelsAndOr": "AND",
        "dealStage": null,
        "dealOwner": null,
        "dealName": "",
        "dealValueFrom": null,
        "dealValueTo": null,
        "nudges": "0",
        "touches": "0",
        "lastTouchDate": null,
        "threadType": "inbound,outbound,internal",
        "threadStatus": "internal,await-customer,closed,await-agent",
        "hasReplies": "hasReplies,hasForwards,hasNoRepliesOrForwards",
        "classification": "first,reply,reply-all,forward",
        "messageType": "inbound,outbound,internal",
        "periodType": "Months",
        "periods": 12,
        "repliesOver": 15,
        "closedOver": 0,
        "messageRepliesOver": 15,
        "noReplyFor": 15,
        "interactions": [],
        "sla": {
            "direction": "desc",
            "init_ttr_goal": "02:00:00",
            "overall_ttr_goal": "02:00:00",
            "overall_ttc_goal": "02:00:00",
            "page": 1,
            "perPage": 100,
            "sortBy": "threads.total"
        },
        "overview": {
            "direction": "desc",
            "page": 1,
            "perPage": 100,
            "sortBy": "threads.total"
        },
        "comparative": {
            "direction": "desc",
            "page": 1,
            "perPage": 100
        },
        "trend": {
            "page": 1,
            "perPage": 15,
            "show_agents": true
        }
    },
    "type": "overview",
    "widgets": null,
    "updated_at": "2023-02-01 19:49:08",
    "created_at": "2023-02-01 19:49:08",
    "id": 2
}
 

Request   

POST api/tools/reports

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

reportType   string   

The type of report. Example: overview

reportName   string   

The name of the report. Example: Overview Report For Sales Team With DEAL_CLOSED label

options   object   

An object to describe the filtering options you require for the report.

model   string  optional  

Name, email address or domain you want statistics for. Use the models endpoint to get a list. Example: Joe Blogs

model_type   string  optional  

Model Type of the model being queried. Use "Contact" for email address and domain. Example: Agent

model_com   string  optional  

Model Communicating With, same as Model, except now for who/what the Model is communicating with. Example: Important Contact

model_type_com   string  optional  

Model Type of the model you are communicating with. Use "Contact" for email address and domain. Example: Contact Group

label   string[]  optional  

Label, if your mail provider supports labels/categories, you can filter your results using them.

exclude_cc   boolean  optional  

Should we exclude CC messages from the statistics. Example: false

exclude_cc_com   boolean  optional  

Should we exclude CC messages from the statistics for the communicating with model. Example: false

exclusive   boolean  optional  

Should we only focus on statistics where exclusively Model and ModelCom were involved?. Example: false

search   string  optional  

Search a specific email subject line (warning this is very slow!). Example: important email subject

thread_type   string  optional  

A comma separated list (no spaces) of any combination of the following: inbound,outbound,internal. Example: inbound,outbound,internal

thread_status   string  optional  

A comma separated list (no spaces) of any combination of the following: internal,await-customer,closed,await-agent. Example: internal,await-customer,closed,await-agent

has_replies   string  optional  

A comma separated list (no spaces) of any combination of the following: hasReplies,hasForwards,hasNoRepliesOrForwards. Example: hasReplies,hasForwards,hasNoRepliesOrForwards

classification   string  optional  

A comma separated list (no spaces) of any combination of the following: calculating,first,reply,reply-all,forward,follow-up. Example: calculating,first,reply,reply-all,forward

messageType   string  optional  

A comma separated list (no spaces) of any combination of the following: inbound,outbound,internal. Example: inbound,outbound,internal

replies_over   integer  optional  

Limit results to conversations with first reply times over X minutes. Should not be used at same time as message_replies_over. Example: 15

message_replies_over   integer  optional  

Limit results to messages where the reply time was over X minutes. Should not be used at same time as replies_over. Example: 15

no_reply_for   integer  optional  

Limit results to messages that have not had a reply for at least X minutes. Example: 15

init_ttr_goal   string  optional  

The initial reply time goal in the format "HH:mm:ss". Only applies to SLA report. Example: 02:00:00

overall_ttr_goal   string  optional  

The overall reply time goal in the format "HH:mm:ss". Only applies to SLA report. Example: 02:00:00

overall_ttc_goal   string  optional  

The overall time to close goal in the format "HH:mm:ss". Only applies to SLA report. Example: 02:00:00

show_agents   boolean  optional  

If agent breakdowns should be shown on the trend report. Defaults to true. Example: false

widgets   string[]  optional  

If the report type is overview or sla.

Reports - Share Share a Report

requires authentication

Example request:
const url = new URL(
    "https://portal.timetoreply.com/api/tools/reports/share"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "reportType": "overview",
    "to": [
        "[email protected]",
        "[email protected]",
        "[email protected]"
    ],
    "options": {
        "model": "Joe Blogs",
        "model_type": "Agent",
        "model_com": "Important Contact",
        "model_type_com": "Contact Group",
        "label": [
            "error"
        ],
        "exclude_cc": false,
        "exclude_cc_com": false,
        "exclusive": false,
        "search": "important email subject",
        "thread_type": "inbound,outbound,internal",
        "thread_status": "internal,await-customer,closed,await-agent",
        "has_replies": "hasReplies,hasForwards,hasNoRepliesOrForwards",
        "classification": "calculating,first,reply,reply-all,forward",
        "messageType": "inbound,outbound,internal",
        "replies_over": 15,
        "message_replies_over": 15,
        "no_reply_for": 15
    },
    "init_ttr_goal": "02:00:00",
    "overall_ttr_goal": "02:00:00",
    "overall_ttc_goal": "02:00:00",
    "show_agents": false
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://portal.timetoreply.com/api/tools/reports/share',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'reportType' => 'overview',
            'to' => [
                '[email protected]',
                '[email protected]',
                '[email protected]',
            ],
            'options' => [
                'model' => 'Joe Blogs',
                'model_type' => 'Agent',
                'model_com' => 'Important Contact',
                'model_type_com' => 'Contact Group',
                'label' => [
                    'error',
                ],
                'exclude_cc' => false,
                'exclude_cc_com' => false,
                'exclusive' => false,
                'search' => 'important email subject',
                'thread_type' => 'inbound,outbound,internal',
                'thread_status' => 'internal,await-customer,closed,await-agent',
                'has_replies' => 'hasReplies,hasForwards,hasNoRepliesOrForwards',
                'classification' => 'calculating,first,reply,reply-all,forward',
                'messageType' => 'inbound,outbound,internal',
                'replies_over' => 15,
                'message_replies_over' => 15,
                'no_reply_for' => 15,
            ],
            'init_ttr_goal' => '02:00:00',
            'overall_ttr_goal' => '02:00:00',
            'overall_ttc_goal' => '02:00:00',
            'show_agents' => false,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://portal.timetoreply.com/api/tools/reports/share" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reportType\": \"overview\",
    \"to\": [
        \"[email protected]\",
        \"[email protected]\",
        \"[email protected]\"
    ],
    \"options\": {
        \"model\": \"Joe Blogs\",
        \"model_type\": \"Agent\",
        \"model_com\": \"Important Contact\",
        \"model_type_com\": \"Contact Group\",
        \"label\": [
            \"error\"
        ],
        \"exclude_cc\": false,
        \"exclude_cc_com\": false,
        \"exclusive\": false,
        \"search\": \"important email subject\",
        \"thread_type\": \"inbound,outbound,internal\",
        \"thread_status\": \"internal,await-customer,closed,await-agent\",
        \"has_replies\": \"hasReplies,hasForwards,hasNoRepliesOrForwards\",
        \"classification\": \"calculating,first,reply,reply-all,forward\",
        \"messageType\": \"inbound,outbound,internal\",
        \"replies_over\": 15,
        \"message_replies_over\": 15,
        \"no_reply_for\": 15
    },
    \"init_ttr_goal\": \"02:00:00\",
    \"overall_ttr_goal\": \"02:00:00\",
    \"overall_ttc_goal\": \"02:00:00\",
    \"show_agents\": false
}"

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
tracking-events: []
 
{
    "status": "Report shared successfully"
}
 

Request   

POST api/tools/reports/share

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

reportType   string   

The type of report. Example: overview

to   sting[]   

An array of email addresses to share the report with.

options   object   

An object to describe the filtering options you require for the report.

model   string  optional  

Name, email address or domain you want statistics for. Use the models endpoint to get a list. Example: Joe Blogs

model_type   string  optional  

Model Type of the model being queried. Use "Contact" for email address and domain. Example: Agent

model_com   string  optional  

Model Communicating With, same as Model, except now for who/what the Model is communicating with. Example: Important Contact

model_type_com   string  optional  

Model Type of the model you are communicating with. Use "Contact" for email address and domain. Example: Contact Group

label   string[]  optional  

Label, if your mail provider supports labels/categories, you can filter your results using them.

exclude_cc   boolean  optional  

Should we exclude CC messages from the statistics. Example: false

exclude_cc_com   boolean  optional  

Should we exclude CC messages from the statistics for the communicating with model. Example: false

exclusive   boolean  optional  

Should we only focus on statistics where exclusively Model and ModelCom were involved?. Example: false

search   string  optional  

Search a specific email subject line (warning this is very slow!). Example: important email subject

thread_type   string  optional  

A comma separated list (no spaces) of any combination of the following: inbound,outbound,internal. Example: inbound,outbound,internal

thread_status   string  optional  

A comma separated list (no spaces) of any combination of the following: internal,await-customer,closed,await-agent. Example: internal,await-customer,closed,await-agent

has_replies   string  optional  

A comma separated list (no spaces) of any combination of the following: hasReplies,hasForwards,hasNoRepliesOrForwards. Example: hasReplies,hasForwards,hasNoRepliesOrForwards

classification   string  optional  

A comma separated list (no spaces) of any combination of the following: calculating,first,reply,reply-all,forward,follow-up. Example: calculating,first,reply,reply-all,forward

messageType   string  optional  

A comma separated list (no spaces) of any combination of the following: inbound,outbound,internal. Example: inbound,outbound,internal

replies_over   integer  optional  

Limit results to conversations with first reply times over X minutes. Should not be used at same time as message_replies_over. Example: 15

message_replies_over   integer  optional  

Limit results to messages where the reply time was over X minutes. Should not be used at same time as replies_over. Example: 15

no_reply_for   integer  optional  

Limit results to messages that have not had a reply for at least X minutes. Example: 15

init_ttr_goal   string  optional  

The initial reply time goal in the format "HH:mm:ss". Only applies to SLA report. Example: 02:00:00

overall_ttr_goal   string  optional  

The overall reply time goal in the format "HH:mm:ss". Only applies to SLA report. Example: 02:00:00

overall_ttc_goal   string  optional  

The overall time to close goal in the format "HH:mm:ss". Only ap