> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nekt.com/llms.txt
> Use this file to discover all available pages before exploring further.

# GoTo Connect as a data source

> Bring data from GoTo Connect to Nekt.

GoTo Connect is a cloud-based phone system and unified communications platform for business telephony. This connector extracts call history and call analytics, the organization's phone-system configuration, and voicemail, fax, and messaging data through the [GoTo Connect APIs](https://developer.goto.com/GoToConnect), landing it all in your Catalog.

## Configuring GoTo Connect as a Source

In the [Sources](https://app.nekt.ai/sources) tab, click on the "Add source" button located on the top right of your screen. Then, select the GoTo Connect option from the list of connectors.

Click **Next** and you'll be prompted to add your access.

### 1. Add account access

GoTo Connect uses managed OAuth2, so you do not need to create an app in GoTo or copy any credentials. Click the **Authorization** button and sign in with your GoTo account, then approve the permissions Nekt requests. Nekt requests read-only scopes, so the connector can only read your data — it cannot place calls, send messages, or change any setting in GoTo Connect.

<Warning>
  The GoTo user you authorize with must hold **Super Admin** or **View Reports** permission in the organization. Without it, GoTo returns no call reports and the corresponding streams stay empty. See [how to grant Super Admin permissions](https://support.goto.com/connect/help/how-do-i-give-a-user-user-group-super-admin-permissions-gotoconnect-give-super-admin-permissions).
</Warning>

The permissions Nekt requests, and what each one unlocks:

| Permission                                                       | Streams it enables                                                                                            |
| :--------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------ |
| Access call history for phone lines in the PBX                   | `call_history` and the three activity report streams                                                          |
| Access voice entities like phone numbers, devices and extensions | `extensions`, `devices`, `phone_numbers`, `call_queues`, `locations`, `billing_groups`, `phone_number_orders` |
| Retrieve various GoTo Connect settings of the authenticated user | `users`                                                                                                       |
| Retrieve your phone line information                             | Line details inside `users`                                                                                   |
| Retrieve call events                                             | `call_events_report_summaries`                                                                                |
| Read your voicemails                                             | `voicemailboxes`, `voicemails`                                                                                |
| Access faxes                                                     | `faxes`                                                                                                       |
| Access your messages and media                                   | `conversations`, `messages`                                                                                   |

The following configurations are available:

* **Start date**: The earliest date from which records will be synced.

Optionally, under advanced settings you can define:

* **Account Key**: The GoTo Connect account (organization) key to extract. Leave this empty and the connector resolves it automatically, using the first account the authorized user belongs to.
* **Organization ID**: Only needed when the authorized user belongs to more than one organization. Without it, GoTo rejects the call report requests.

Once you're done, click **Next**.

### 2. Select streams

Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis. You can select entire groups of streams or pick specific ones.

> Tip: The stream can be found more easily by typing its name.

Select the streams and click **Next**.

### 3. Configure data streams

Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.

* **Layer**: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
* **Folder**: a folder can be created inside the selected layer to group all tables being created from this new data source.
* **Table name**: we suggest a name, but feel free to customize it. You have the option to add a **prefix** to all tables at once and make this process faster!
* **Sync Type**: you can choose between INCREMENTAL and FULL\_TABLE.
  * Incremental: every time the extraction happens, we'll get only the new data - which is good if, for example, you want to keep every record ever fetched.
  * Full table: every time the extraction happens, we'll get the current state of the data - which is good if, for example, you don't want to have deleted data in your catalog.

Once you are done configuring, click **Next**.

### 4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters.

To define your [Trigger](https://docs.nekt.com/runs/scheduling-and-triggers), consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times).

Optionally, you can define some additional settings:

* Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource [here](https://docs.nekt.com/get-started/core-concepts/resource-control).
* Determine when to execute an **Additional [Full Sync](https://docs.nekt.com/get-started/core-concepts/types-of-sync#additional-full-sync)**. This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while.

Once you are ready, click **Next** to finalize the setup.

### 5. Check your new source

You can view your new source on the [Sources](https://app.nekt.ai/sources) page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.

<Warning>For you to be able to see it on your [Catalog](https://app.nekt.ai/catalog), you need at least one successful source run.</Warning>

## How authentication works

You only ever click **Authorization** and sign in. Everything below happens on Nekt's side, and is documented here so you know what to expect when something needs your attention.

### The authorization

Nekt operates a single registered GoTo application, shared by all Nekt customers. When you click **Authorization**, GoTo asks you to sign in and approve the read-only permissions listed above. Approving them issues Nekt a credential scoped to **your** organization — it grants no access to anyone else's data, and Nekt never sees your GoTo password.

The connection represents the user who authorized it. Everything the connector can read is exactly what that user can read in GoTo Connect, which is why the Super Admin or View Reports permission matters.

### Staying connected

GoTo issues short-lived access tokens that expire after **one hour**. The connector renews them automatically during a run, so a long extraction never fails halfway through for an expired token.

Renewal relies on a longer-lived credential that is valid for **30 days**. GoTo replaces it periodically — but only once 60% of its lifetime has passed, so most renewals return nothing new and the connector keeps the credential it already has. Whenever GoTo does issue a replacement, the connector stores it immediately and uses it from then on.

<Warning>
  The renewal credential expires after **30 days without use**. If a source is paused, disabled, or fails continuously for longer than that, the connection lapses and you have to click **Authorization** again to reconnect. Keeping the source on any regular schedule is enough to prevent this.
</Warning>

If the credential is ever rejected, the run fails with a message telling you to reconnect the source. Re-authorizing restores it; no data is lost, and the next run resumes from where the last successful one stopped.

### Revoking access

Removing the source in Nekt stops all extraction. To revoke Nekt's access from the GoTo side, remove the authorization for the Nekt application in your GoTo account settings.

## API Behaviors and Limitations

### Call reports are aggregated per day

The `user_activity_reports`, `caller_activity_reports`, and `phone_number_activity_reports` streams are **aggregates**, not individual events. GoTo returns them as totals over a time window, with no timestamp on each row, so the connector requests **one day at a time**. Every row therefore represents one full day of activity for one user, caller, or phone number, identified by the `report_date` column.

Because a day is only requested once it is complete, activity for the current day appears in your Catalog on the following run after midnight UTC.

<Warning>
  GoTo retains call report data for **13 months**. Setting a start date earlier than that returns no data for the missing period, and the connector automatically starts from the oldest date still available.
</Warning>

### Two views of the same calls

Two streams describe calls, at different grains:

* `call_history` has one record **per call leg**. A single call involving a transfer produces several rows, tied together by `originator_id`.
* `call_events_report_summaries` has one record **per conversation**, with every participant, the outcome, and the identifiers of any recordings and transcripts.

Use `call_history` for raw telephony detail and `call_events_report_summaries` for call-level analysis. The AI analysis fields in the latter (sentiment, topics, summary) are only populated on accounts licensed for Advanced reporting; on other accounts the field is empty.

### Unanswered calls

`call_history` has no dedicated flag for a missed call. A call was not answered when `answer_time` is empty, which is how GoTo itself documents the distinction.

### Messaging requires per-number access

`conversations` and `messages` are scoped to individual phone numbers rather than to the organization. The connector walks the numbers it can see and reads the conversations on each. A user without Super Admin privileges only sees their own numbers, so these streams cover the whole organization only when the authorized user is a Super Admin.

### Rate limits

GoTo allows **10 requests per second per API**. The connector spaces its requests to stay below that and, if GoTo asks it to slow down anyway, waits and retries automatically. This can make a run take longer but never loses data. Using the GoTo APIs carries no additional charge beyond your GoTo Connect subscription.

### Streams your plan or permissions do not cover

Fax, messaging, and voicemail depend on features that not every GoTo Connect plan includes, and on permissions the authorized user may not hold. When GoTo denies access to one of them, the connector **skips that stream with a warning** and continues, rather than failing the whole run. The stream's table simply is not updated.

<Note>
  Fields holding nested structures (such as `lines`, `caller`, `callee`, `participants`, `ai_analysis`, `address`, `route_to`, `media`, and `delivery_statuses`) are delivered as **JSON-encoded strings** rather than native nested objects. To work with their contents, parse the string downstream (for example with `JSON_PARSE`/`JSON_EXTRACT` on AWS or `JSON_VALUE`/`JSON_QUERY` on GCP).
</Note>

# Streams and Fields

## Available streams

The table below lists every stream, its **slug** (the exact identifier to pass when creating the source via API) and a short description.

| Stream                        | Slug                            | Description                                                         |
| ----------------------------- | ------------------------------- | ------------------------------------------------------------------- |
| Users                         | `users`                         | Users of the account and the lines assigned to each of them.        |
| Extensions                    | `extensions`                    | Extensions configured on the account.                               |
| Devices                       | `devices`                       | Desk phones and softphones registered on the account.               |
| Phone Numbers                 | `phone_numbers`                 | Phone numbers (DIDs) owned by the organization.                     |
| Call Queues                   | `call_queues`                   | Call queues configured on the account.                              |
| Locations                     | `locations`                     | Physical locations registered for the account.                      |
| Billing Groups                | `billing_groups`                | Billing groups that phone numbers are charged against.              |
| Phone Number Orders           | `phone_number_orders`           | Orders placed for new phone numbers.                                |
| Call History                  | `call_history`                  | Individual call legs handled by the platform.                       |
| Call Events Report Summaries  | `call_events_report_summaries`  | Completed call summaries, one record per conversation.              |
| User Activity Reports         | `user_activity_reports`         | Daily call activity aggregated per user.                            |
| Caller Activity Reports       | `caller_activity_reports`       | Daily call activity aggregated per external caller number.          |
| Phone Number Activity Reports | `phone_number_activity_reports` | Daily call activity aggregated per organization phone number.       |
| Voicemail Boxes               | `voicemailboxes`                | Voicemail boxes the authorized user has access to.                  |
| Voicemails                    | `voicemails`                    | Voicemails left in each voicemail box.                              |
| Faxes                         | `faxes`                         | Incoming and outgoing faxes stored on the account.                  |
| Conversations                 | `conversations`                 | SMS and MMS conversations held on the organization's phone numbers. |
| Messages                      | `messages`                      | Individual SMS and MMS messages exchanged in each conversation.     |

## Fields by stream

Below you'll find all available data streams from GoTo Connect and their corresponding fields.

<AccordionGroup>
  <Accordion title="Users">
    Users of the account and the lines assigned to each of them.

    **Primary key:** `user_key`\
    **Sync:** Full table

    | Field      | Type   | Description                                                                                                                   |
    | :--------- | :----- | :---------------------------------------------------------------------------------------------------------------------------- |
    | `user_key` | String | Identity key of the user, stable across organizations and used to correlate the user in call and messaging data.              |
    | `user_id`  | String | Identifier of the user within the account. The same person has a different user\_id in each organization they belong to.      |
    | `lines`    | String | Lines assigned to the user, as a JSON array of objects with id, name, number, primary, region, account\_key and organization. |
  </Accordion>

  <Accordion title="Extensions">
    Extensions configured on the account.

    **Primary key:** `id`\
    **Sync:** Full table

    | Field                       | Type    | Description                                                                                                         |
    | :-------------------------- | :------ | :------------------------------------------------------------------------------------------------------------------ |
    | `id`                        | String  | Unique identifier of the extension.                                                                                 |
    | `account_key`               | String  | Identifier of the GoTo Connect account the extension belongs to.                                                    |
    | `name`                      | String  | Display name of the extension.                                                                                      |
    | `number`                    | String  | Extension number, unique within the organization.                                                                   |
    | `type`                      | String  | Kind of extension, such as DIRECT\_EXTENSION, CALL\_QUEUE, CONFERENCE\_BRIDGE, DIAL\_PLAN or VIRTUAL\_FAX\_MACHINE. |
    | `organization_id`           | String  | Unique identifier of the organization owning the extension.                                                         |
    | `extension_region`          | String  | Two-letter country code of the extension's region, such as US or BR.                                                |
    | `language`                  | String  | Extension language as an RFC-1766 tag, such as en-US or pt-BR.                                                      |
    | `shared_appearance`         | Boolean | Whether the extension may be shared across multiple phones.                                                         |
    | `omit_from_directories`     | Boolean | Whether the extension is hidden from the organization's directories.                                                |
    | `omit_from_auto_attendants` | Boolean | Whether the extension is excluded from auto-attendant menus.                                                        |
  </Accordion>

  <Accordion title="Devices">
    Desk phones and softphones registered on the account.

    **Primary key:** `id`\
    **Sync:** Full table

    | Field               | Type   | Description                                                          |
    | :------------------ | :----- | :------------------------------------------------------------------- |
    | `id`                | String | Unique identifier of the device.                                     |
    | `name`              | String | Display name of the device.                                          |
    | `model_name`        | String | Model name of the device.                                            |
    | `assigned_user_key` | String | Key of the user the device is assigned to.                           |
    | `mac_address`       | String | MAC address of the device, set once at creation and read-only after. |
  </Accordion>

  <Accordion title="Phone Numbers">
    Phone numbers (DIDs) owned by the organization.

    **Primary key:** `id`\
    **Sync:** Full table

    | Field              | Type   | Description                                                                                         |
    | :----------------- | :----- | :-------------------------------------------------------------------------------------------------- |
    | `id`               | String | Unique identifier of the phone number.                                                              |
    | `organization_id`  | String | Unique identifier of the organization owning the phone number.                                      |
    | `account_key`      | String | Identifier of the GoTo Connect account the phone number belongs to.                                 |
    | `number`           | String | The phone number in E.164 format.                                                                   |
    | `name`             | String | Display name given to the phone number.                                                             |
    | `caller_id_name`   | String | Name portion of the outbound caller ID for this number.                                             |
    | `route_to`         | String | Destination this number routes inbound calls to, as a JSON object identifying the target extension. |
    | `billing_group_id` | String | Unique identifier of the billing group the phone number belongs to.                                 |
    | `status`           | String | Current state of the phone number: ACTIVE or DEACTIVATED.                                           |
  </Accordion>

  <Accordion title="Call Queues">
    Call queues configured on the account.

    **Primary key:** `id`\
    **Sync:** Full table

    | Field              | Type   | Description                                                                        |
    | :----------------- | :----- | :--------------------------------------------------------------------------------- |
    | `id`               | String | Unique identifier of the call queue.                                               |
    | `name`             | String | Display name of the call queue.                                                    |
    | `extension_number` | String | Extension number callers dial to reach the queue.                                  |
    | `type`             | String | Queue type: BASIC for a standard queue, ICR for an intelligent call-routing queue. |
  </Accordion>

  <Accordion title="Locations">
    Physical locations registered for the account.

    **Primary key:** `id`\
    **Sync:** Full table

    | Field                         | Type    | Description                                                                                                |
    | :---------------------------- | :------ | :--------------------------------------------------------------------------------------------------------- |
    | `id`                          | String  | Unique identifier of the location.                                                                         |
    | `name`                        | String  | Display name of the location.                                                                              |
    | `address`                     | String  | Postal address of the location, as a JSON object with line1, line2, city, state, postal\_code and country. |
    | `callback_phone_number`       | String  | Number emergency services call back on, as a JSON object holding the E.164 number.                         |
    | `used_for_emergency_services` | Boolean | Whether this location is the one reported to emergency services.                                           |
  </Accordion>

  <Accordion title="Billing Groups">
    Billing groups that phone numbers are charged against.

    **Primary key:** `id`\
    **Sync:** Full table

    | Field  | Type   | Description                             |
    | :----- | :----- | :-------------------------------------- |
    | `id`   | String | Unique identifier of the billing group. |
    | `name` | String | Display name of the billing group.      |
  </Accordion>

  <Accordion title="Phone Number Orders">
    Orders placed for new phone numbers.

    **Primary key:** `id`\
    **Sync:** Incremental on `order_date`

    | Field        | Type     | Description                                                                       |
    | :----------- | :------- | :-------------------------------------------------------------------------------- |
    | `id`         | String   | Unique identifier of the phone number order.                                      |
    | `status`     | String   | Order status: PROCESSING while still being fulfilled, then COMPLETED or CANCELED. |
    | `order_date` | Datetime | Date the order was placed, used as the incremental replication key.               |
  </Accordion>

  <Accordion title="Call History">
    Individual call legs handled by the platform.

    **Primary key:** `leg_id`\
    **Sync:** Incremental on `start_time`

    | Field                | Type     | Description                                                                                                                      |
    | :------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------- |
    | `leg_id`             | String   | Globally unique id of this call leg.                                                                                             |
    | `originator_id`      | String   | Common id grouping every leg that belongs to a single call.                                                                      |
    | `caller`             | String   | Party that placed the call, as a JSON object with name and number. Either may be absent when the caller is anonymous.            |
    | `callee`             | String   | Party that was called, as a JSON object with name and number. Either may be absent.                                              |
    | `direction`          | String   | Direction of this leg from the platform's perspective.                                                                           |
    | `start_time`         | Datetime | Timestamp at which this leg was created, used as the incremental replication key.                                                |
    | `answer_time`        | Datetime | Timestamp at which this leg was answered. Absent when the call was never answered, which is how unanswered calls are identified. |
    | `duration`           | Integer  | Total duration of this leg, in milliseconds.                                                                                     |
    | `hangup_cause`       | Integer  | Q.850 disposition code describing how the leg ended.                                                                             |
    | `user_key`           | String   | Key of the user this leg belongs to.                                                                                             |
    | `account_key`        | String   | Identifier of the GoTo Connect account the leg belongs to.                                                                       |
    | `owner_phone_number` | String   | The user's own phone number, in E.164 format.                                                                                    |
  </Accordion>

  <Accordion title="Call Events Report Summaries">
    Completed call summaries, one record per conversation.

    **Primary key:** `conversation_space_id`\
    **Sync:** Incremental on `call_created`

    | Field                   | Type     | Description                                                                                                                             |
    | :---------------------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------------- |
    | `conversation_space_id` | String   | Unique identifier of the conversation this summary describes.                                                                           |
    | `account_key`           | String   | Identifier of the GoTo Connect account the conversation belongs to.                                                                     |
    | `call_created`          | Datetime | Timestamp at which the call was created, used as the incremental replication key.                                                       |
    | `call_answered`         | Datetime | Timestamp at which the call was answered, absent if never answered.                                                                     |
    | `call_ended`            | Datetime | Timestamp at which the call ended.                                                                                                      |
    | `call_initiator`        | String   | How the call was triggered, for example DIRECT.                                                                                         |
    | `direction`             | String   | Direction of the call: INBOUND or OUTBOUND.                                                                                             |
    | `caller`                | String   | Participant that started the call, as a JSON object with name, number, leg\_id, recording\_id, transcript\_ids and the resolved type.   |
    | `caller_outcome`        | String   | How the call ended for the original caller, such as NORMAL, MISSED, VOICEMAIL or LEFT\_QUEUE.                                           |
    | `participants`          | String   | Other parties involved after the call was answered, as a JSON array of participant objects.                                             |
    | `ai_analysis`           | String   | AI analysis of the call as a JSON object with sentiment, topics, summary and flags. Only populated on accounts with Advanced reporting. |
  </Accordion>

  <Accordion title="User Activity Reports">
    Daily call activity aggregated per user.

    **Primary key:** `report_date`, `user_id`\
    **Sync:** Incremental on `report_date`

    | Field                    | Type    | Description                                                                                |
    | :----------------------- | :------ | :----------------------------------------------------------------------------------------- |
    | `report_date`            | Date    | Day the activity was aggregated over, in UTC. Used as the incremental replication key.     |
    | `user_id`                | String  | Identifier of the user in the organization.                                                |
    | `user_name`              | String  | Full name of the user.                                                                     |
    | `user_alternative_names` | String  | Every name recorded for this user during the reporting period, as a JSON array of strings. |
    | `inbound_volume`         | Integer | Number of inbound calls in the reporting day.                                              |
    | `inbound_duration`       | Integer | Total duration of inbound calls in the reporting day, in milliseconds.                     |
    | `outbound_volume`        | Integer | Number of outbound calls in the reporting day.                                             |
    | `outbound_duration`      | Integer | Total duration of outbound calls in the reporting day, in milliseconds.                    |
    | `average_duration`       | Integer | Average call duration in the reporting day, in milliseconds.                               |
    | `volume`                 | Integer | Total number of calls in the reporting day, inbound plus outbound.                         |
    | `total_duration`         | Integer | Total duration of all calls in the reporting day, in milliseconds.                         |
  </Accordion>

  <Accordion title="Caller Activity Reports">
    Daily call activity aggregated per external caller number.

    **Primary key:** `report_date`, `number`\
    **Sync:** Incremental on `report_date`

    | Field                            | Type    | Description                                                                                  |
    | :------------------------------- | :------ | :------------------------------------------------------------------------------------------- |
    | `report_date`                    | Date    | Day the activity was aggregated over, in UTC. Used as the incremental replication key.       |
    | `number`                         | String  | The external number as seen by the platform, not always E.164.                               |
    | `name`                           | String  | Most recent name recorded for this number.                                                   |
    | `alternative_phone_number_names` | String  | Every name recorded for this number during the reporting period, as a JSON array of strings. |
    | `inbound_volume`                 | Integer | Number of inbound calls in the reporting day.                                                |
    | `inbound_duration`               | Integer | Total duration of inbound calls in the reporting day, in milliseconds.                       |
    | `outbound_volume`                | Integer | Number of outbound calls in the reporting day.                                               |
    | `outbound_duration`              | Integer | Total duration of outbound calls in the reporting day, in milliseconds.                      |
    | `average_duration`               | Integer | Average call duration in the reporting day, in milliseconds.                                 |
    | `volume`                         | Integer | Total number of calls in the reporting day, inbound plus outbound.                           |
    | `total_duration`                 | Integer | Total duration of all calls in the reporting day, in milliseconds.                           |
  </Accordion>

  <Accordion title="Phone Number Activity Reports">
    Daily call activity aggregated per organization phone number.

    **Primary key:** `report_date`, `phone_number_id`\
    **Sync:** Incremental on `report_date`

    | Field                            | Type    | Description                                                                                  |
    | :------------------------------- | :------ | :------------------------------------------------------------------------------------------- |
    | `report_date`                    | Date    | Day the activity was aggregated over, in UTC. Used as the incremental replication key.       |
    | `phone_number_id`                | String  | Globally unique identifier of the organization's phone number.                               |
    | `phone_number`                   | String  | The phone number as seen by the platform.                                                    |
    | `phone_number_name`              | String  | Most recent name recorded for this phone number.                                             |
    | `alternative_phone_number_names` | String  | Every name recorded for this number during the reporting period, as a JSON array of strings. |
    | `inbound_volume`                 | Integer | Number of inbound calls in the reporting day.                                                |
    | `inbound_duration`               | Integer | Total duration of inbound calls in the reporting day, in milliseconds.                       |
    | `outbound_volume`                | Integer | Number of outbound calls in the reporting day.                                               |
    | `outbound_duration`              | Integer | Total duration of outbound calls in the reporting day, in milliseconds.                      |
    | `average_duration`               | Integer | Average call duration in the reporting day, in milliseconds.                                 |
    | `volume`                         | Integer | Total number of calls in the reporting day, inbound plus outbound.                           |
    | `total_duration`                 | Integer | Total duration of all calls in the reporting day, in milliseconds.                           |
  </Accordion>

  <Accordion title="Voicemail Boxes">
    Voicemail boxes the authorized user has access to.

    **Primary key:** `voicemailbox_id`\
    **Sync:** Full table

    | Field                    | Type     | Description                                                          |
    | :----------------------- | :------- | :------------------------------------------------------------------- |
    | `voicemailbox_id`        | String   | Unique identifier of the voicemail box.                              |
    | `organization_id`        | String   | Identifier of the organization the voicemail box belongs to.         |
    | `account_key`            | String   | Identifier of the GoTo Connect account the voicemail box belongs to. |
    | `extension_number`       | String   | Extension number the voicemail box is attached to.                   |
    | `last_updated_timestamp` | Datetime | Timestamp the voicemail box was last modified.                       |
    | `new_message_count`      | Integer  | Number of unread messages currently in the box.                      |
    | `read_message_count`     | Integer  | Number of read messages currently in the box.                        |
  </Accordion>

  <Accordion title="Voicemails">
    Voicemails left in each voicemail box.

    **Primary key:** `voicemail_id`\
    **Sync:** Incremental on `timestamp`

    | Field                  | Type     | Description                                                                                                                                                       |
    | :--------------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | `voicemail_id`         | String   | Unique identifier of the voicemail.                                                                                                                               |
    | `voicemailbox_id`      | String   | Identifier of the voicemail box holding this voicemail.                                                                                                           |
    | `organization_id`      | String   | Identifier of the organization the voicemail belongs to.                                                                                                          |
    | `account_key`          | String   | Identifier of the GoTo Connect account the voicemail belongs to.                                                                                                  |
    | `external_user_key`    | String   | Key of the user associated with the voicemail box.                                                                                                                |
    | `extension_name`       | String   | Name of the extension the voicemail was left on.                                                                                                                  |
    | `extension_number`     | String   | Number of the extension the voicemail was left on.                                                                                                                |
    | `called_number`        | String   | Number that was called, either a phone number or an extension.                                                                                                    |
    | `caller_name`          | String   | Name of the caller who left it.                                                                                                                                   |
    | `caller_number`        | String   | Number of the caller who left it.                                                                                                                                 |
    | `leg_id`               | String   | Identifier of the call leg during which the voicemail was left.                                                                                                   |
    | `duration_ms`          | Integer  | Length of the voicemail recording, in milliseconds.                                                                                                               |
    | `timestamp`            | Datetime | Timestamp the voicemail was received in this box, used as the incremental replication key.                                                                        |
    | `original_timestamp`   | Datetime | Timestamp the voicemail was originally left. Differs from timestamp when the voicemail was forwarded from another box.                                            |
    | `status`               | String   | Current status of the voicemail: NEW, READ or DELETED.                                                                                                            |
    | `transcription_status` | String   | Status of the voicemail transcription, such as SUCCESS, IN\_PROGRESS, FAILED, NO\_AUDIO or NOT\_FOUND.                                                            |
    | `forward_from`         | String   | Chain of extensions that forwarded this voicemail, as a JSON array of objects with extension\_name, extension\_number, forwarder\_user\_key, timestamp and notes. |
    | `forward_to`           | String   | Extensions this voicemail was forwarded to, as a JSON array of objects with extension\_name, extension\_number, forwarder\_user\_key and timestamp.               |
  </Accordion>

  <Accordion title="Faxes">
    Incoming and outgoing faxes stored on the account.

    **Primary key:** `fax_id`\
    **Sync:** Full table

    | Field                    | Type     | Description                                                   |
    | :----------------------- | :------- | :------------------------------------------------------------ |
    | `fax_id`                 | String   | Unique identifier of the fax.                                 |
    | `type`                   | String   | Whether the fax is INCOMING or OUTGOING.                      |
    | `virtual_fax_machine_id` | String   | Identifier of the virtual fax machine that handled the fax.   |
    | `caller_id_name`         | String   | Caller ID name associated with the fax.                       |
    | `caller_id_number`       | String   | Caller ID number associated with the fax, in E.164 format.    |
    | `received_time`          | Datetime | Timestamp the fax was received. Incoming faxes only.          |
    | `creation_time`          | Datetime | Timestamp the fax was created. Outgoing faxes only.           |
    | `last_updated_time`      | Datetime | Timestamp the fax was last updated. Outgoing faxes only.      |
    | `status`                 | String   | Delivery status of the fax. Outgoing faxes only.              |
    | `error_code`             | String   | Error code explaining a failed delivery. Outgoing faxes only. |
    | `page_count`             | Integer  | Total number of pages in the fax.                             |
    | `pages_sent`             | Integer  | Number of pages successfully sent. Outgoing faxes only.       |
    | `file_size`              | Integer  | Size of the fax document, in bytes. Incoming faxes only.      |
    | `read`                   | Boolean  | Whether the fax has been read. Incoming faxes only.           |
    | `user_key`               | String   | Key of the user who sent the fax. Outgoing faxes only.        |
  </Accordion>

  <Accordion title="Conversations">
    SMS and MMS conversations held on the organization's phone numbers.

    **Primary key:** `owner_phone_number`, `contact_phone_numbers`\
    **Sync:** Incremental on `last_message_timestamp`

    | Field                         | Type     | Description                                                                    |
    | :---------------------------- | :------- | :----------------------------------------------------------------------------- |
    | `owner_phone_number`          | String   | The organization's own number in the conversation, in E.164 format.            |
    | `contact_phone_numbers`       | String   | The external parties in the conversation, as a JSON array of E.164 numbers.    |
    | `unread_messages_count`       | Integer  | Number of unread messages in the conversation.                                 |
    | `last_message_id`             | String   | Identifier of the most recent message in the conversation.                     |
    | `last_message_timestamp`      | Datetime | Timestamp of the most recent message, used as the incremental replication key. |
    | `last_read_message_id`        | String   | Identifier of the last message the owner has read.                             |
    | `last_read_message_timestamp` | Datetime | Timestamp of the last message the owner has read.                              |
    | `last_message`                | String   | The most recent message itself, as a JSON object.                              |
  </Accordion>

  <Accordion title="Messages">
    Individual SMS and MMS messages exchanged in each conversation.

    **Primary key:** `id`\
    **Sync:** Incremental on `timestamp`

    | Field                      | Type     | Description                                                                                                                                                                                                  |
    | :------------------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | `id`                       | String   | Unique identifier of the message.                                                                                                                                                                            |
    | `owner_phone_number`       | String   | The organization's own number in the conversation, in E.164 format.                                                                                                                                          |
    | `contact_phone_numbers`    | String   | The external parties, as a JSON array of E.164 numbers.                                                                                                                                                      |
    | `author_phone_number`      | String   | Number the message was sent from, in E.164 format.                                                                                                                                                           |
    | `author_external_user_key` | String   | Key of the user who sent it; null for an incoming message.                                                                                                                                                   |
    | `timestamp`                | Datetime | Timestamp the message was sent or received, used as the incremental replication key.                                                                                                                         |
    | `direction`                | String   | Whether the message is IN or OUT relative to the owner's number.                                                                                                                                             |
    | `deleted_timestamp`        | Datetime | Timestamp the message was deleted, if it was.                                                                                                                                                                |
    | `body`                     | String   | Text body of the message; absent for a media-only message.                                                                                                                                                   |
    | `delivery_statuses`        | String   | Delivery outcome per recipient, as a JSON array of objects with message\_id, contact\_phone\_number, timestamp, delivery\_status\_code, delivery\_status\_description and retryable. Outgoing messages only. |
    | `media`                    | String   | Attachments on the message, as a JSON array of objects with id, filename, content\_type and size.                                                                                                            |
  </Accordion>
</AccordionGroup>
