Collapse Drawer
Expand Drawer

Direct Web API - CRM Data Reference

Synchronize contact data with Matrix directly

The Direct Web API from CoreLogic is the best, most efficient way to provide a seamless experience for agents working across multiple applications or MLS frontends. The Direct Web API enables a direct API connection to the Matrix database using ODATA standards, facilitating real-time, bidirectional data synchronization.

Using the Direct Web API, you can read and write contact and contact-related data to and from Matrix directly. For example, an agent could use a third-party app to create a new contact, and that contact record would be created automatically in Matrix as well. This direct integration is key to reducing redundant data entry and increasing the choices available to agents.

Available Data Types

The Direct Web API currently supports:

  • Contact Information-name, address, phone, email, etc.
  • Email history-messages sent to the contact
  • Favorite/Possible Listings-properties liked by the contact
  • Listing Carts-property lists associated with the contact
  • Portal data-including contact information and listing comments
  • Saved Searches-listing search criteria used for auto-email notifications and more

Data Access

The Direct Web API uses the OData protocol with OpenID Connect (OIDC) authentication to provide secure data access for a specific MLS member. Applications calling the Direct Web API use the member's credentials in the OIDC authentication process to ensure access is appropriately limited according to the user's privileges in Matrix.

Applications may use Clareity Single Sign-On authorization or basic authentication using an individual login and password.

Getting Started

The Direct Web API uses Trestle by CoreLogic to manage user accounts, credentials, billing, and licensing. Anyone who wants to access the Direct Web API must create a Trestle account at trestle.corelogic.com.

Technology providers that already use Trestle can use their existing account to sign up for the Direct Web API as well. Using Trestle provides numerous benefits, including centralized data feed management, online licensing and document management, and one-stop shopping for a broad range of additional data products.

Cost

CoreLogic charges technology providers a fee to access the Direct Web API to cover the cost of ongoing API development, bandwidth, documentation, and support, etc. Read/write access costs more than read-only access due to the additional integration requirements and complexity. Data license fees charged by the MLS may also apply. Visit trestle.corelogic.com for more information.

/CONTACTS

GET

Summary: Get entities from Contacts

HTTP Request

***GET*** /Contacts

Parameters

Name Located in Description Required Type
$orderby query Order items by property values No
$select query Select properties to be returned No
$expand query Expand related entities No

Responses

Code Description
200 Retrieved entities

POST

Summary: Add new entity to Contacts

HTTP Request

***POST*** /Contacts

Responses

Code Description
201 Created entity

/CONTACTS({CONTACTKEYNUMERIC})

GET

Summary: Get entity from Contacts by key

HTTP Request

***GET*** /Contacts({ContactKeyNumeric})

Parameters

Name Located in Description Required Type
ContactKeyNumeric path key: ContactKeyNumeric of Contact Yes
$select query Select properties to be returned No
$expand query Expand related entities No

Responses

Code Description
200 Retrieved entity

PATCH

Summary: Update entity in Contacts

HTTP Request

***PATCH*** /Contacts({ContactKeyNumeric})

Parameters

Name Located in Description Required Type
ContactKeyNumeric path key: ContactKeyNumeric of Contact Yes

Responses

Code Description
204 Success

DELETE

Summary: Delete entity from Contacts

HTTP Request

***DELETE*** /Contacts({ContactKeyNumeric})

Parameters

Name Located in Description Required Type
ContactKeyNumeric path key: ContactKeyNumeric of Contact Yes
If-Match header ETag No

Responses

Code Description
204 Success

/CONTACTS({CONTACTKEYNUMERIC})/PORTALCONTENTS

GET

Summary: Get PortalContents from Contacts

HTTP Request

***GET*** /Contacts({ContactKeyNumeric})/PortalContents

Parameters

Name Located in Description Required Type
ContactKeyNumeric path key: ContactKeyNumeric of Contact Yes
$orderby query Order items by property values No
$select query Select properties to be returned No
$expand query Expand related entities No

Responses

Code Description
200 Retrieved navigation property

/CONTACTS({CONTACTKEYNUMERIC})/PORTALCONTENTS(CONTACTKEYNUMERIC={CONTACTKEYNUMERIC1},LISTINGKEYNUMERIC={LISTINGKEYNUMERIC})

GET

Summary: Get PortalContents from Contacts

HTTP Request

***GET*** /Contacts({ContactKeyNumeric})/PortalContents(ContactKeyNumeric={ContactKeyNumeric1},ListingKeyNumeric={ListingKeyNumeric})

Parameters

Name Located in Description Required Type
ContactKeyNumeric path key: ContactKeyNumeric of Contact Yes
ContactKeyNumeric1 path key: ContactKeyNumeric of ContactListing Yes
ListingKeyNumeric path key: ListingKeyNumeric of ContactListing Yes
$select query Select properties to be returned No
$expand query Expand related entities No

Responses

Code Description
200 Retrieved navigation property

/CONTACTS({CONTACTKEYNUMERIC})/PORTALCONTENTS/$REF

GET

Summary: Get ref of PortalContents from Contacts

HTTP Request

***GET*** /Contacts({ContactKeyNumeric})/PortalContents/$ref

Parameters

Name Located in Description Required Type
ContactKeyNumeric path key: ContactKeyNumeric of Contact Yes
$orderby query Order items by property values No

Responses

Code Description
200 Retrieved navigation property links

POST

Summary: Create new navigation property ref to PortalContents for Contacts

HTTP Request

***POST*** /Contacts({ContactKeyNumeric})/PortalContents/$ref

Parameters

Name Located in Description Required Type
ContactKeyNumeric path key: ContactKeyNumeric of Contact Yes

Responses

Code Description
201 Created navigation property link.

DELETE

Summary: Delete ref of navigation property PortalContents for Contacts

HTTP Request

***DELETE*** /Contacts({ContactKeyNumeric})/PortalContents/$ref

Parameters

Name Located in Description Required Type
ContactKeyNumeric path key: ContactKeyNumeric of Contact Yes
If-Match header ETag No
@id query Delete Uri No

Responses

Code Description
204 Success

/EMAILHISTORY

GET

Summary: Get entities from EmailHistory

HTTP Request

***GET*** /EmailHistory

Parameters

Name Located in Description Required Type
$orderby query Order items by property values No
$select query Select properties to be returned No
$expand query Expand related entities No

Responses

Code Description
200 Retrieved entities

POST

Summary: Add new entity to EmailHistory

HTTP Request

***POST*** /EmailHistory

Responses

Code Description
201 Created entity

/EMAILHISTORY({EMAILHISTORYKEYNUMERIC})

GET

Summary: Get entity from EmailHistory by key

HTTP Request

***GET*** /EmailHistory({EmailHistoryKeyNumeric})

Parameters

Name Located in Description Required Type
EmailHistoryKeyNumeric path key: EmailHistoryKeyNumeric of EmailHistory Yes
$select query Select properties to be returned No
$expand query Expand related entities No

Responses

Code Description
200 Retrieved entity

PATCH

Summary: Update entity in EmailHistory

HTTP Request

***PATCH*** /EmailHistory({EmailHistoryKeyNumeric})

Parameters

Name Located in Description Required Type
EmailHistoryKeyNumeric path key: EmailHistoryKeyNumeric of EmailHistory Yes

Responses

Code Description
204 Success

DELETE

Summary: Delete entity from EmailHistory

HTTP Request

***DELETE*** /EmailHistory({EmailHistoryKeyNumeric})

Parameters

Name Located in Description Required Type
EmailHistoryKeyNumeric path key: EmailHistoryKeyNumeric of EmailHistory Yes
If-Match header ETag No

Responses

Code Description
204 Success

/LISTS

GET

Summary: Get entities from Lists

HTTP Request

***GET*** /Lists

Parameters

Name Located in Description Required Type
$orderby query Order items by property values No
$select query Select properties to be returned No
$expand query Expand related entities No

Responses

Code Description
200 Retrieved entities

POST

Summary: Add new entity to Lists

HTTP Request

***POST*** /Lists

Responses

Code Description
201 Created entity

/LISTS(LISTKEY={LISTKEY},CLASSNAME={CLASSNAME})

GET

Summary: Get entity from Lists by key

HTTP Request

***GET*** /Lists(ListKey={ListKey},ClassName={ClassName})

Parameters

Name Located in Description Required Type
ListKey path key: ListKey of List Yes
ClassName path key: ClassName of List Yes
$select query Select properties to be returned No
$expand query Expand related entities No

Responses

Code Description
200 Retrieved entity

PATCH

Summary: Update entity in Lists

HTTP Request

***PATCH*** /Lists(ListKey={ListKey},ClassName={ClassName})

Parameters

Name Located in Description Required Type
ListKey path key: ListKey of List Yes
ClassName path key: ClassName of List Yes

Responses

Code Description
204 Success

DELETE

Summary: Delete entity from Lists

HTTP Request

***DELETE*** /Lists(ListKey={ListKey},ClassName={ClassName})

Parameters

Name Located in Description Required Type
ListKey path key: ListKey of List Yes
ClassName path key: ClassName of List Yes
If-Match header ETag No

Responses

Code Description
204 Success

/PORTALCONTENTS

GET

Summary: Get entities from PortalContents

HTTP Request

***GET*** /PortalContents

Parameters

Name Located in Description Required Type
$orderby query Order items by property values No
$select query Select properties to be returned No
$expand query Expand related entities No

Responses

Code Description
200 Retrieved entities

POST

Summary: Add new entity to PortalContents

HTTP Request

***POST*** /PortalContents

Responses

Code Description
201 Created entity

/PORTALCONTENTS(CONTACTKEYNUMERIC={CONTACTKEYNUMERIC},LISTINGKEYNUMERIC={LISTINGKEYNUMERIC})

GET

Summary: Get entity from PortalContents by key

HTTP Request

***GET*** /PortalContents(ContactKeyNumeric={ContactKeyNumeric},ListingKeyNumeric={ListingKeyNumeric})

Parameters

Name Located in Description Required Type
ContactKeyNumeric path key: ContactKeyNumeric of ContactListing Yes
ListingKeyNumeric path key: ListingKeyNumeric of ContactListing Yes
$select query Select properties to be returned No
$expand query Expand related entities No

Responses

Code Description
200 Retrieved entity

PATCH

Summary: Update entity in PortalContents

HTTP Request

***PATCH*** /PortalContents(ContactKeyNumeric={ContactKeyNumeric},ListingKeyNumeric={ListingKeyNumeric})

Parameters

Name Located in Description Required Type
ContactKeyNumeric path key: ContactKeyNumeric of ContactListing Yes
ListingKeyNumeric path key: ListingKeyNumeric of ContactListing Yes

Responses

Code Description
204 Success

DELETE

Summary: Delete entity from PortalContents

HTTP Request

***DELETE*** /PortalContents(ContactKeyNumeric={ContactKeyNumeric},ListingKeyNumeric={ListingKeyNumeric})

Parameters

Name Located in Description Required Type
ContactKeyNumeric path key: ContactKeyNumeric of ContactListing Yes
ListingKeyNumeric path key: ListingKeyNumeric of ContactListing Yes
If-Match header ETag No

Responses

Code Description
204 Success

/PORTALCONTENTS(CONTACTKEYNUMERIC={CONTACTKEYNUMERIC},LISTINGKEYNUMERIC={LISTINGKEYNUMERIC})/DEFAULT.ADDLISTINGNOTE

POST

Summary: Invoke action AddListingNote

HTTP Request

***POST*** /PortalContents(ContactKeyNumeric={ContactKeyNumeric},ListingKeyNumeric={ListingKeyNumeric})/Default.AddListingNote

Parameters

Name Located in Description Required Type
ContactKeyNumeric path key: ContactKeyNumeric of ContactListing Yes
ListingKeyNumeric path key: ListingKeyNumeric of ContactListing Yes

Responses

Code Description
204 Success

/PORTALCONTENTS(CONTACTKEYNUMERIC={CONTACTKEYNUMERIC},LISTINGKEYNUMERIC={LISTINGKEYNUMERIC})/DEFAULT.MARKASVIEWED

POST

Summary: Invoke action MarkAsViewed

HTTP Request

***POST*** /PortalContents(ContactKeyNumeric={ContactKeyNumeric},ListingKeyNumeric={ListingKeyNumeric})/Default.MarkAsViewed

Parameters

Name Located in Description Required Type
ContactKeyNumeric path key: ContactKeyNumeric of ContactListing Yes
ListingKeyNumeric path key: ListingKeyNumeric of ContactListing Yes

Responses

Code Description
204 Success

/PORTALCONTENTS(CONTACTKEYNUMERIC={CONTACTKEYNUMERIC},LISTINGKEYNUMERIC={LISTINGKEYNUMERIC})/DEFAULT.SETLISTINGPREFERENCE

POST

Summary: Invoke action SetListingPreference

HTTP Request

***POST*** /PortalContents(ContactKeyNumeric={ContactKeyNumeric},ListingKeyNumeric={ListingKeyNumeric})/Default.SetListingPreference

Parameters

Name Located in Description Required Type
ContactKeyNumeric path key: ContactKeyNumeric of ContactListing Yes
ListingKeyNumeric path key: ListingKeyNumeric of ContactListing Yes

Responses

Code Description
204 Success

/SAVEDSEARCHES

GET

Summary: Get entities from SavedSearches

HTTP Request

***GET*** /SavedSearches

Parameters

Name Located in Description Required Type
$orderby query Order items by property values No
$select query Select properties to be returned No
$expand query Expand related entities No

Responses

Code Description
200 Retrieved entities

POST

Summary: Add new entity to SavedSearches

HTTP Request

***POST*** /SavedSearches

Responses

Code Description
201 Created entity

/SAVEDSEARCHES({SAVEDSEARCHKEYNUMERIC})

GET

Summary: Get entity from SavedSearches by key

HTTP Request

***GET*** /SavedSearches({SavedSearchKeyNumeric})

Parameters

Name Located in Description Required Type
SavedSearchKeyNumeric path key: SavedSearchKeyNumeric of SavedSearch Yes
$select query Select properties to be returned No
$expand query Expand related entities No

Responses

Code Description
200 Retrieved entity

PATCH

Summary: Update entity in SavedSearches

HTTP Request

***PATCH*** /SavedSearches({SavedSearchKeyNumeric})

Parameters

Name Located in Description Required Type
SavedSearchKeyNumeric path key: SavedSearchKeyNumeric of SavedSearch Yes

Responses

Code Description
204 Success

DELETE

Summary: Delete entity from SavedSearches

HTTP Request

***DELETE*** /SavedSearches({SavedSearchKeyNumeric})

Parameters

Name Located in Description Required Type
SavedSearchKeyNumeric path key: SavedSearchKeyNumeric of SavedSearch Yes
If-Match header ETag No

Responses

Code Description
204 Success

/SAVEDSEARCHES({SAVEDSEARCHKEYNUMERIC})/DEFAULT.GETSAVEDSEARCHLISTINGIDS()

GET

Summary: Invoke function GetSavedSearchListingIDs

HTTP Request

***GET*** /SavedSearches({SavedSearchKeyNumeric})/Default.GetSavedSearchListingIDs()

Parameters

Name Located in Description Required Type
SavedSearchKeyNumeric path key: SavedSearchKeyNumeric of SavedSearch Yes

Responses

Code Description
200 Success

/SAVEDSEARCHES({SAVEDSEARCHKEYNUMERIC})/PROSPECTING

GET

Summary: Get Prospecting from SavedSearches

HTTP Request

***GET*** /SavedSearches({SavedSearchKeyNumeric})/Prospecting

Parameters

Name Located in Description Required Type
SavedSearchKeyNumeric path key: SavedSearchKeyNumeric of SavedSearch Yes
$select query Select properties to be returned No
$expand query Expand related entities No

Responses

Code Description
200 Retrieved navigation property

/SAVEDSEARCHES({SAVEDSEARCHKEYNUMERIC})/PROSPECTING/$REF

GET

Summary: Get ref of Prospecting from SavedSearches

HTTP Request

***GET*** /SavedSearches({SavedSearchKeyNumeric})/Prospecting/$ref

Parameters

Name Located in Description Required Type
SavedSearchKeyNumeric path key: SavedSearchKeyNumeric of SavedSearch Yes

Responses

Code Description
200 Retrieved navigation property link

PATCH

Summary: Update the ref of navigation property Prospecting in SavedSearches

HTTP Request

***PATCH*** /SavedSearches({SavedSearchKeyNumeric})/Prospecting/$ref

Parameters

Name Located in Description Required Type
SavedSearchKeyNumeric path key: SavedSearchKeyNumeric of SavedSearch Yes

Responses

Code Description
204 Success

DELETE

Summary: Delete ref of navigation property Prospecting for SavedSearches

HTTP Request

***DELETE*** /SavedSearches({SavedSearchKeyNumeric})/Prospecting/$ref

Parameters

Name Located in Description Required Type
SavedSearchKeyNumeric path key: SavedSearchKeyNumeric of SavedSearch Yes
If-Match header ETag No

Responses

Code Description
204 Success

/UserRegistry/GetAllowedKeys()

GET

Summary: Get a list of user registry keys that can be modified.

HTTP Request

***GET*** /UserRegistry/GetAllowedKeys()

Responses

Code Description
200 OK
404 The authenticated user does not have the required permissions to view this endpoint and the endpoint isn't exposed

Response Example

{
    "value":
    [
        "defMapView",
        "BccMe"
    ]
}

/UserRegistry

GET

Summary: Get user registry key / value pairs. UserName must always be provided.

HTTP Request

***GET*** /UserRegistry?$filter=UserName eq 'JohnSmith'

Responses

Code Description
200 OK
404 The authenticated user does not have the required permissions to view this endpoint and the endpoint isn't exposed

Response Example

{
    "value": [
        {
            "UserName": "JohnSmith",
            "KeyName": "BccMe",
            "Value": "false"
        },
        {
            "UserName": "JohnSmith",
            "KeyName": "defMapView",
            "Value": "r"
        }
    ]
}

HTTP Request

***GET*** /UserRegistry(Username={UserName},KeyName={KeyName})

Parameters

Name Located in Description Required Type
UserName path The UserName field of the UserRegistry entity. Entered like 'JohnSmith' with the single quotes. Yes String
KeyName path The KeyName field of the UserRegistry entity. Entered like 'defMapView' with the single quotes Yes String

Responses

Code Description
200 OK
404 The authenticated user does not have the required permissions to view this endpoint and the endpoint isn't exposed
404 There is no result found for the UserName and/or KeyName specified

Response Example

{
    "UserName": "JohnSmith",
    "KeyName": "defMapView",
    "Value": "r"
}

PATCH

Summary: Update the Value of a UserRegistry entity that currently exists.

HTTP Request

***PATCH*** /UserRegistry(Username={UserName},KeyName={KeyName})

Parameters

Name Located in Description Required Type
UserName path The UserName field of the UserRegistry entity. Entered like 'JohnSmith' with the single quotes. Yes String
KeyName path The KeyName field of the UserRegistry entity. Entered like 'defMapView' with the single quotes Yes String

Body

{
    "Value":"a"
}

Responses

Code Description
400 Entity cannot be created. Likely supplied a KeyName for an entity that currently hasn't been created yet.
204 Success
400 Cannot change key fields. The UserName, as well as the KeyName field cannot be changed. There may be problem with the request being case-sensitive; check the UserName and KeyName against the existing entity.
404 The authenticated user does not have the required permissions to view this endpoint and the endpoint isn't exposed

HTTP Request

***PATCH*** /UserRegistry({UserName},{KeyName})

Parameters

Name Located in Description Required Type
UserName path The UserName field of the UserRegistry entity. Entered like 'JohnSmith' with the single quotes. Yes String
KeyName path The KeyName field of the UserRegistry entity. Entered like 'defMapView' with the single quotes Yes String

Body

{
    "Value":"a"
}

Responses

Code Description
400 Entity cannot be created. Likely supplied a KeyName for an entity that currently hasn't been created yet or a keyname was supplied that isn't in the allowed list of KeyNames.
204 Success
400 Cannot change key fields. The UserName, as well as the KeyName field cannot be changed. There may be problem with the request being case-sensitive; check the UserName and KeyName against the existing entity.
404 The authenticated user does not have the required permissions to view this endpoint and the endpoint isn't exposed

POST

Summary: Create a UserRegistry entity that currently does not exist.

HTTP Request

***POST*** /UserRegistry

Body

{
    "UserName": "JohnSmith",
    "KeyName": "defMapView",
    "Value": "r"
}

Responses

Code Description
400 Entity already exists. Use the Patch endpoint to update the existing entity.
400 You do not have permission to get registry values for that user. The authenticate duser only hase permissions to update their own entities.
400 Entity cannot be created. Likely supplied a keyname that isn't in the allowed list of KeyNames. There may be problem with the request being case-sensitive; check the UserName and KeyName against existing entities and the AllowedKeys().
201 Success
404 The authenticated user does not have the required permissions to view this endpoint and the endpoint isn't exposed

Response Example

{
    "UserName": "JohnSmith",
    "KeyName": "defMapView",
    "Value": "r"
}

/DashboardAPI/GetAggregatedData

GET

Summary: Get the specified dashboard information. There are five available data sets that can be specifiec in the body of the request.

HTTP Request

***GET*** /DashboardAPI/GetAggregatedData

Body

[
    "MyListings",
    "HotSheet",
    "MarketWatch",
    "Concierge",
    "Timeline"
]

Responses

Code Description
200 OK

Response Example

{
    "MyListings": [
        {
            "Name": "My Incomplete Listings",
            "Count": 0,
            "Link": "https://matrixhost.com/Matrix/MyListings/2"
        },
        {
            "Name": "My Expiring Listings (14 days)",
            "Count": 0,
            "Link": "https://matrixhost.com/Matrix/MyListings/3"
        },
        {
            "Name": "My Listings with No Photos",
            "Count": 0,
            "Link": "https://matrixhost.com/Matrix/MyListings/4"
        },
        {
            "Name": "My OnMarket Listings",
            "Count": 0,
            "Link": "https://matrixhost.com/Matrix/MyListings/5"
        },
        {
            "Name": "My Pending Listings",
            "Count": 0,
            "Link": "https://matrixhost.com/Matrix/MyListings/6"
        },
        {
            "Name": "My Hit Counters",
            "Count": 0,
            "Link": "https://matrixhost.com/Matrix/MyListings/9"
        },
        {
            "Name": "My Office Expiring Listings (14 days)",
            "Count": 0,
            "Link": "https://matrixhost.com/Matrix/MyListings/11"
        },
        {
            "Name": "My Firm Open Houses",
            "Count": 0,
            "Link": "https://matrixhost.com/Matrix/MyListings/22"
        }
    ],
    "HotSheet": {
        "HotSheetSpanOptions": [
            {
                "Id": 0,
                "Name": "New Only"
            },
            {
                "Id": 1,
                "Name": "This Session"
            },
            {
                "Id": 2,
                "Name": "24 Hour"
            },
            {
                "Id": 3,
                "Name": "Today"
            },
            {
                "Id": 4,
                "Name": "3 Day"
            }
        ],
        "HotSheets": [
            {
                "Name": "Residential",
                "DefaultUrl": "https://matrixhost.com/Matrix/HotSheets/73135/4",
                "UrlBySpanId": {
                    "0": "https://matrixhost.com/Matrix/HotSheets/73135/0",
                    "1": "https://matrixhost.com/Matrix/HotSheets/73135/1",
                    "2": "https://matrixhost.com/Matrix/HotSheets/73135/2",
                    "3": "https://matrixhost.com/Matrix/HotSheets/73135/3",
                    "4": "https://matrixhost.com/Matrix/HotSheets/73135/4"
                }
            },
            {
                "Name": "Multi-Family",
                "DefaultUrl": "https://matrixhost.com/Matrix/HotSheets/73136/4",
                "UrlBySpanId": {
                    "0": "https://matrixhost.com/Matrix/HotSheets/73136/0",
                    "1": "https://matrixhost.com/Matrix/HotSheets/73136/1",
                    "2": "https://matrixhost.com/Matrix/HotSheets/73136/2",
                    "3": "https://matrixhost.com/Matrix/HotSheets/73136/3",
                    "4": "https://matrixhost.com/Matrix/HotSheets/73136/4"
                }
            },
            {
                "Name": "Farm",
                "DefaultUrl": "https://matrixhost.com/Matrix/HotSheets/73137/4",
                "UrlBySpanId": {
                    "0": "https://matrixhost.com/Matrix/HotSheets/73137/0",
                    "1": "https://matrixhost.com/Matrix/HotSheets/73137/1",
                    "2": "https://matrixhost.com/Matrix/HotSheets/73137/2",
                    "3": "https://matrixhost.com/Matrix/HotSheets/73137/3",
                    "4": "https://matrixhost.com/Matrix/HotSheets/73137/4"
                }
            },
            {
                "Name": "Land and Lots",
                "DefaultUrl": "https://matrixhost.com/Matrix/HotSheets/73138/4",
                "UrlBySpanId": {
                    "0": "https://matrixhost.com/Matrix/HotSheets/73138/0",
                    "1": "https://matrixhost.com/Matrix/HotSheets/73138/1",
                    "2": "https://matrixhost.com/Matrix/HotSheets/73138/2",
                    "3": "https://matrixhost.com/Matrix/HotSheets/73138/3",
                    "4": "https://matrixhost.com/Matrix/HotSheets/73138/4"
                }
            },
            {
                "Name": "Commercial Sale",
                "DefaultUrl": "https://matrixhost.com/Matrix/HotSheets/73139/4",
                "UrlBySpanId": {
                    "0": "https://matrixhost.com/Matrix/HotSheets/73139/0",
                    "1": "https://matrixhost.com/Matrix/HotSheets/73139/1",
                    "2": "https://matrixhost.com/Matrix/HotSheets/73139/2",
                    "3": "https://matrixhost.com/Matrix/HotSheets/73139/3",
                    "4": "https://matrixhost.com/Matrix/HotSheets/73139/4"
                }
            },
            {
                "Name": "Cross Property",
                "DefaultUrl": "https://matrixhost.com/Matrix/HotSheets/73142/4",
                "UrlBySpanId": {
                    "0": "https://matrixhost.com/Matrix/HotSheets/73142/0",
                    "1": "https://matrixhost.com/Matrix/HotSheets/73142/1",
                    "2": "https://matrixhost.com/Matrix/HotSheets/73142/2",
                    "3": "https://matrixhost.com/Matrix/HotSheets/73142/3",
                    "4": "https://matrixhost.com/Matrix/HotSheets/73142/4"
                }
            }
        ],
        "DefaultSpanId": 4
    },
    "MarketWatch": {
        "SelectedSpanId": 0,
        "SelectedHotSheetId": 12,
        "ResetCustomCriteriaUrl": "https://matrixhost.com/Matrix/MarketWatch/Reset/12",
        "CustomizeCriteriaUrl": "https://matrixhost.com/Matrix/MarketWatch/Customize/12",
        "CategoryCounts": [
            {
                "Category": "New Listing",
                "Count": 15,
                "Color": "#228B22",
                "DetailUrl": "https://matrixhost.com/Matrix/MarketWatch/12/252/0"
            },
            {
                "Category": "Price Decrease",
                "Count": 4,
                "Color": "#FF6B6B",
                "DetailUrl": "https://matrixhost.com/Matrix/MarketWatch/12/255/0"
            },
            {
                "Category": "Price Increase",
                "Count": 2,
                "Color": "#89FF6B",
                "DetailUrl": "https://matrixhost.com/Matrix/MarketWatch/12/254/0"
            },
            {
                "Category": "Under Contract Taking Back Up Offers",
                "Count": 0,
                "Color": "#80B918",
                "DetailUrl": "https://matrixhost.com/Matrix/MarketWatch/12/13914/0"
            }
        ],
        "HotSheetOptions": [
            {
                "Id": 12,
                "Name": "Residential"
            },
            {
                "Id": 13,
                "Name": "Multi-Family"
            },
            {
                "Id": 14,
                "Name": "Farm"
            },
            {
                "Id": 15,
                "Name": "Land and Lots"
            },
            {
                "Id": 16,
                "Name": "Commercial Sale"
            },
            {
                "Id": 19,
                "Name": "Cross Property"
            }
        ],
        "MarketWatchSpanOptions": [
            {
                "Id": 0,
                "Name": "24 Hour"
            },
            {
                "Id": 1,
                "Name": "Today"
            },
            {
                "Id": 2,
                "Name": "3 Day"
            },
            {
                "Id": 3,
                "Name": "7 Day"
            }
        ]
    },
    "Concierge": {
        "Contacts": [
            {
                "ContactName": "Smith, John",
                "UnpublishedCount": 10,
                "ApprovalUrl": "https://matrixhost.com/Matrix/ConciergeRedirect/399037",
                "LastResultTime": "2024-03-13T16:44:39.1"
            }
        ],
        "TotalUnpublishedCount": 10
    },
    "Timeline": {
        "NotificationTypes": [
            {
                "Id": 1,
                "Name": "Visit"
            },
            {
                "Id": 2,
                "Name": "AddFavorite"
            }
        ],
        "TimelineDataCount": 7,
        "TimelineData": [
            {
                "ID": 1681947,
                "AgentID": 22077,
                "ContactID": 2988201,
                "EventDate": "2024-04-16T07:44:46",
                "NotificationType": 1,
                "EventTitle": "",
                "TimelineDetails": "",
                "TimelineKey": "",
                "HasListingData": false,
                "HasContact": true
            },
            {
                "ID": 1723204,
                "AgentID": 22077,
                "ContactID": 2986287,
                "EventDate": "2024-04-16T06:00:19",
                "NotificationType": 2,
                "EventTitle": "",
                "TimelineDetails": "",
                "TimelineKey": "18156176",
                "HasListingData": true,
                "HasContact": true
            }
        ]
    }
}