Online Now  

/v1/sidebar/

V2 sidebar — runtime read/render endpoints. The sidebar markup is owned by `\AT\ATV2Sidebar` (declarative registry at /config/atv2-sidebar.php → /libraries/atv2-sidebar.lib.php) and rendered server-side once per page load. After the initial render the client may mutate sidebar-relevant state (pin/unpin, expand/collapse a submenu, change the plans sort/group). These endpoints are how the client gets a fresh, server-canonical render after such a mutation — so layout never drifts between client and server, and the client never re-implements the markup. The complementary mutation endpoints are set_expanded (submenu collapse state) and set_plans_view (plans-block sort). Per-user bookmarks moved to /v1/bookmarks/* — they're no longer references to sidebar registry items but full {title, url, description} rows owned by the user. Auth: all endpoints accept anonymous callers and degrade gracefully (no plans block). The viewer's user id is taken from the apiv1 dispatcher's session resolution — no explicit auth params.
GET

/v1/sidebar/get_plans_render

#
Returns only the server-rendered "My Bookings" block plus the matching plans state. Used by the v2 shell to defer the expensive city-grouped travel-plans fetch until after the initial page render. Auth: plans are personal; anonymous callers receive ErrorUnauthorized.

Parameters

NameTypeRequiredDefaultDescription
activeNavKey string No "" Current page's active sidebar key.
theme string No "upscale_at" Theme name; controls per-theme markup helper. Defaults to "upscale_at".
Request example (cURL)
curl --get \
  'https://ca.appointmenttrader.com/v1/sidebar/get_plans_render' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'activeNavKey={{activeNavKey}}' \
  --data-urlencode 'theme={{theme}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$sidebar_get_plans_render_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.htmlstring Yes
$.oneOf[0].allOf[1].Payload.stateobject Yes
$.oneOf[0].allOf[1].Payload.state.activeKeystring Yes
$.oneOf[0].allOf[1].Payload.state.plans Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].sortBystring ["upcoming","name"] Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groupBy = "city" Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groupsarray Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[]object No
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].cityCodestring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].cityNamestring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].emojistring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].citySlugstring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingCountinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastCountinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingAppointmentsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastAppointmentsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingBidsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastBidsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingSoldSalesinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastSoldSalesinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].bubblesobject No
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].bubbles.*integer No
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].hasArchivedPlansboolean Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[1]null Yes
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/sidebar/get_plans_render",
    "RequestUserAlias": "example-user",
    "Payload": {
        "html": "synthetic-example",
        "state": {
            "activeKey": "synthetic-example",
            "plans": {
                "sortBy": "upcoming",
                "groupBy": "city",
                "groups": [],
                "hasArchivedPlans": false
            }
        }
    }
}
Machine-readable endpoint documentation
GET

/v1/sidebar/get_render

#
Returns server-canonical rendered HTML for the v2 sidebar plus the matching state struct. The client's contract is to replace the inner HTML of the sidebar aside element with Payload.html and update window.ATV2ShellState.sidebar with Payload.state — there is no client-side render, ever. Use this after any mutation that affects the sidebar's structure or data (pin/unpin, plans sort/group toggle, app added/removed). For pure active-state changes triggered by inline navigation, prefer window.ATV2Sidebar.applyActiveKey() instead — it's a DOM toggle and doesn't need a roundtrip.

Parameters

NameTypeRequiredDefaultDescription
activeNavKey string No "" Current page's active sidebar key.
theme string No "upscale_at" Theme name; controls per-theme markup helper. Defaults to "upscale_at".
Request example (cURL)
curl --get \
  'https://ca.appointmenttrader.com/v1/sidebar/get_render' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'activeNavKey={{activeNavKey}}' \
  --data-urlencode 'theme={{theme}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$sidebar_get_render_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.htmlstring Yes
$.oneOf[0].allOf[1].Payload.stateobject Yes
$.oneOf[0].allOf[1].Payload.state.activeKeystring Yes
$.oneOf[0].allOf[1].Payload.state.expanded Yes
$.oneOf[0].allOf[1].Payload.state.expanded.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.state.expanded.anyOf[0].*boolean No
$.oneOf[0].allOf[1].Payload.state.expanded.anyOf[1]array Yes
$.oneOf[0].allOf[1].Payload.state.itemsarray Yes
$.oneOf[0].allOf[1].Payload.state.items[]object No
$.oneOf[0].allOf[1].Payload.state.items[].keystring Yes
$.oneOf[0].allOf[1].Payload.state.items[].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].label_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].iconstring No
$.oneOf[0].allOf[1].Payload.state.items[].hrefstring No
$.oneOf[0].allOf[1].Payload.state.items[].rolestring No
$.oneOf[0].allOf[1].Payload.state.items[].badgeobject No
$.oneOf[0].allOf[1].Payload.state.items[].badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].badge.tonestring No
$.oneOf[0].allOf[1].Payload.state.items[].badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.state.items[].status_badgeobject No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.tonestring No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.state.items[].activeboolean No
$.oneOf[0].allOf[1].Payload.state.items[].bookmark_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].bookmark_post_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].unfollow_board_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].is_pinnedboolean No
$.oneOf[0].allOf[1].Payload.state.items[].pin_sort_orderinteger No
$.oneOf[0].allOf[1].Payload.state.items[].todoboolean No
$.oneOf[0].allOf[1].Payload.state.items[].hide_when_rightbar_visibleboolean No
$.oneOf[0].allOf[1].Payload.state.items[].mobile_headerobject No
$.oneOf[0].allOf[1].Payload.state.items[].mobile_header.primarystring ["search","ticker","title","brand"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].mobile_header.ctastring ["post","search-icon","none"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].sort = "communities" No
$.oneOf[0].allOf[1].Payload.state.items[].submenu No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0]object No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].itemsarray Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[]object No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].keystring Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].label_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].iconstring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].hrefstring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].rolestring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badgeobject No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.tonestring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badgeobject No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.tonestring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].activeboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].bookmark_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].bookmark_post_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].unfollow_board_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].is_pinnedboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].pin_sort_orderinteger No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].conditionstring NoLegacy static submenu visibility callback identifier, retained as inert text by ToClientState.
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].persist_when_emptyboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].wrapper_attrsobject No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].wrapper_attrs.*string No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].default_expandedboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[1]null No
$.oneOf[0].allOf[1].Payload.state.plans Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].sortBystring ["upcoming","name"] Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groupBy = "city" Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groupsarray Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[]object No
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].cityCodestring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].cityNamestring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].emojistring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].citySlugstring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingCountinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastCountinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingAppointmentsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastAppointmentsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingBidsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastBidsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingSoldSalesinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastSoldSalesinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].bubblesobject No
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].bubbles.*integer No
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].hasArchivedPlansboolean Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.state.appMenu = null Yes
$.oneOf[0].allOf[1].Payload.state.mobileHeaderobject Yes
$.oneOf[0].allOf[1].Payload.state.mobileHeader.primarystring ["search","ticker","title","brand"] Yes
$.oneOf[0].allOf[1].Payload.state.mobileHeader.ctastring ["post","search-icon","none"] Yes
$.oneOf[0].allOf[1].Payload.state.communitiesSortBystring ["latest_post","name"] Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigationobject Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.MembershipFingerprintstring No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.CompleteScopesarray Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.CompleteScopes[]string ["status","activity"] No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.CommunityOrderFingerprintstring No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payloadPersonalNavigationBubbles Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].* No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[0]integer No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[1] = false No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[2]object No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[2].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[2].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[1]array Yes
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/sidebar/get_render",
    "RequestUserAlias": "example-user",
    "Payload": {
        "html": "<aside>Example navigation</aside>",
        "state": {
            "activeKey": "synthetic-example",
            "expanded": [],
            "items": [],
            "plans": {
                "sortBy": "upcoming",
                "groupBy": "city",
                "groups": [],
                "hasArchivedPlans": false
            },
            "appMenu": null,
            "mobileHeader": {
                "primary": "search",
                "cta": "post"
            },
            "communitiesSortBy": "latest_post",
            "personalNavigation": {
                "CompleteScopes": [],
                "payload": []
            }
        }
    }
}
Machine-readable endpoint documentation
GET

/v1/sidebar/get_state

#
Returns the current state of the v2 sidebar — the same struct that is embedded in window.ATV2ShellState.sidebar at SSR time. Use this when the client needs to re-derive its in-memory model without re-parsing the rendered HTML. Pass the page's currently-active sidebar key as activeNavKey so the server can mark the right item active in the response. The expanded / collapsed submenu set is read server-side from the `atv2_sidebar_expanded` cookie — pass nothing for that.

Parameters

NameTypeRequiredDefaultDescription
activeNavKey string No "" Current page's active sidebar key (e.g. "network", "market-data", "transactions"). Empty string when the page does not declare one.
Request example (cURL)
curl --get \
  'https://ca.appointmenttrader.com/v1/sidebar/get_state' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'activeNavKey={{activeNavKey}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$sidebar_get_state_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.activeKeystring Yes
$.oneOf[0].allOf[1].Payload.expanded Yes
$.oneOf[0].allOf[1].Payload.expanded.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.expanded.anyOf[0].*boolean No
$.oneOf[0].allOf[1].Payload.expanded.anyOf[1]array Yes
$.oneOf[0].allOf[1].Payload.itemsarray Yes
$.oneOf[0].allOf[1].Payload.items[]object No
$.oneOf[0].allOf[1].Payload.items[].keystring Yes
$.oneOf[0].allOf[1].Payload.items[].labelstring Yes
$.oneOf[0].allOf[1].Payload.items[].label_keystring No
$.oneOf[0].allOf[1].Payload.items[].iconstring No
$.oneOf[0].allOf[1].Payload.items[].hrefstring No
$.oneOf[0].allOf[1].Payload.items[].rolestring No
$.oneOf[0].allOf[1].Payload.items[].badgeobject No
$.oneOf[0].allOf[1].Payload.items[].badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.items[].badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.items[].badge.value No
$.oneOf[0].allOf[1].Payload.items[].badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.items[].badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.items[].badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.items[].badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.items[].badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.items[].badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.items[].badge.tonestring No
$.oneOf[0].allOf[1].Payload.items[].badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.items[].status_badgeobject No
$.oneOf[0].allOf[1].Payload.items[].status_badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.items[].status_badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.items[].status_badge.value No
$.oneOf[0].allOf[1].Payload.items[].status_badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.items[].status_badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.items[].status_badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.items[].status_badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.items[].status_badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.items[].status_badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.items[].status_badge.tonestring No
$.oneOf[0].allOf[1].Payload.items[].status_badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.items[].activeboolean No
$.oneOf[0].allOf[1].Payload.items[].bookmark_idinteger No
$.oneOf[0].allOf[1].Payload.items[].bookmark_post_idinteger No
$.oneOf[0].allOf[1].Payload.items[].unfollow_board_idinteger No
$.oneOf[0].allOf[1].Payload.items[].is_pinnedboolean No
$.oneOf[0].allOf[1].Payload.items[].pin_sort_orderinteger No
$.oneOf[0].allOf[1].Payload.items[].todoboolean No
$.oneOf[0].allOf[1].Payload.items[].hide_when_rightbar_visibleboolean No
$.oneOf[0].allOf[1].Payload.items[].mobile_headerobject No
$.oneOf[0].allOf[1].Payload.items[].mobile_header.primarystring ["search","ticker","title","brand"] Yes
$.oneOf[0].allOf[1].Payload.items[].mobile_header.ctastring ["post","search-icon","none"] Yes
$.oneOf[0].allOf[1].Payload.items[].sort = "communities" No
$.oneOf[0].allOf[1].Payload.items[].submenu No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0]object No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].itemsarray Yes
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[]object No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].keystring Yes
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].labelstring Yes
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].label_keystring No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].iconstring No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].hrefstring No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].rolestring No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].badgeobject No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].badge.value No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].badge.tonestring No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].status_badgeobject No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].status_badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].status_badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].status_badge.value No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].status_badge.tonestring No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].status_badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].activeboolean No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].bookmark_idinteger No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].bookmark_post_idinteger No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].unfollow_board_idinteger No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].is_pinnedboolean No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].pin_sort_orderinteger No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].items[].conditionstring NoLegacy static submenu visibility callback identifier, retained as inert text by ToClientState.
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].persist_when_emptyboolean No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].wrapper_attrsobject No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].wrapper_attrs.*string No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[0].default_expandedboolean No
$.oneOf[0].allOf[1].Payload.items[].submenu.anyOf[1]null No
$.oneOf[0].allOf[1].Payload.plans Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].sortBystring ["upcoming","name"] Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].groupBy = "city" Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].groupsarray Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].groups[]object No
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].groups[].cityCodestring Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].groups[].cityNamestring Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].groups[].emojistring Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].groups[].citySlugstring Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].groups[].upcomingCountinteger Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].groups[].pastCountinteger Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].groups[].upcomingAppointmentsinteger Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].groups[].pastAppointmentsinteger Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].groups[].upcomingBidsinteger Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].groups[].pastBidsinteger Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].groups[].upcomingSoldSalesinteger Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].groups[].pastSoldSalesinteger Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].bubblesobject No
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].bubbles.*integer No
$.oneOf[0].allOf[1].Payload.plans.anyOf[0].hasArchivedPlansboolean Yes
$.oneOf[0].allOf[1].Payload.plans.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.appMenu = null Yes
$.oneOf[0].allOf[1].Payload.mobileHeaderobject Yes
$.oneOf[0].allOf[1].Payload.mobileHeader.primarystring ["search","ticker","title","brand"] Yes
$.oneOf[0].allOf[1].Payload.mobileHeader.ctastring ["post","search-icon","none"] Yes
$.oneOf[0].allOf[1].Payload.communitiesSortBystring ["latest_post","name"] Yes
$.oneOf[0].allOf[1].Payload.personalNavigationobject Yes
$.oneOf[0].allOf[1].Payload.personalNavigation.MembershipFingerprintstring No
$.oneOf[0].allOf[1].Payload.personalNavigation.CompleteScopesarray Yes
$.oneOf[0].allOf[1].Payload.personalNavigation.CompleteScopes[]string ["status","activity"] No
$.oneOf[0].allOf[1].Payload.personalNavigation.CommunityOrderFingerprintstring No
$.oneOf[0].allOf[1].Payload.personalNavigation.payloadPersonalNavigationBubbles Yes
$.oneOf[0].allOf[1].Payload.personalNavigation.payload.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.personalNavigation.payload.anyOf[0].* No
$.oneOf[0].allOf[1].Payload.personalNavigation.payload.anyOf[0].*.anyOf[0]integer No
$.oneOf[0].allOf[1].Payload.personalNavigation.payload.anyOf[0].*.anyOf[1] = false No
$.oneOf[0].allOf[1].Payload.personalNavigation.payload.anyOf[0].*.anyOf[2]object No
$.oneOf[0].allOf[1].Payload.personalNavigation.payload.anyOf[0].*.anyOf[2].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.personalNavigation.payload.anyOf[0].*.anyOf[2].labelstring Yes
$.oneOf[0].allOf[1].Payload.personalNavigation.payload.anyOf[1]array Yes
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/sidebar/get_state",
    "RequestUserAlias": "example-user",
    "Payload": {
        "activeKey": "synthetic-example",
        "expanded": [],
        "items": [],
        "plans": {
            "sortBy": "upcoming",
            "groupBy": "city",
            "groups": [],
            "hasArchivedPlans": false
        },
        "appMenu": null,
        "mobileHeader": {
            "primary": "search",
            "cta": "post"
        },
        "communitiesSortBy": "latest_post",
        "personalNavigation": {
            "CompleteScopes": [],
            "payload": []
        }
    }
}
Machine-readable endpoint documentation
POST

/v1/sidebar/set_communities_view

#
Persist the personal community list sort without changing My Bookings. Authenticated users only; writes the sidebar preference cookie.

Parameters

NameTypeRequiredDefaultDescription
sortBy string Yes — "latest_post" (default) or "name".
activeNavKey string No "" Current sidebar key.
theme string No "upscale_at" Sidebar theme.
isWritingRequest bool No false Set true to save the preference.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/sidebar/set_communities_view' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'sortBy={{sortBy}}' \
  --data-urlencode 'activeNavKey={{activeNavKey}}' \
  --data-urlencode 'theme={{theme}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$sidebar_set_communities_view_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.htmlstring Yes
$.oneOf[0].allOf[1].Payload.stateobject Yes
$.oneOf[0].allOf[1].Payload.state.activeKeystring Yes
$.oneOf[0].allOf[1].Payload.state.expanded Yes
$.oneOf[0].allOf[1].Payload.state.expanded.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.state.expanded.anyOf[0].*boolean No
$.oneOf[0].allOf[1].Payload.state.expanded.anyOf[1]array Yes
$.oneOf[0].allOf[1].Payload.state.itemsarray Yes
$.oneOf[0].allOf[1].Payload.state.items[]object No
$.oneOf[0].allOf[1].Payload.state.items[].keystring Yes
$.oneOf[0].allOf[1].Payload.state.items[].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].label_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].iconstring No
$.oneOf[0].allOf[1].Payload.state.items[].hrefstring No
$.oneOf[0].allOf[1].Payload.state.items[].rolestring No
$.oneOf[0].allOf[1].Payload.state.items[].badgeobject No
$.oneOf[0].allOf[1].Payload.state.items[].badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].badge.tonestring No
$.oneOf[0].allOf[1].Payload.state.items[].badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.state.items[].status_badgeobject No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.tonestring No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.state.items[].activeboolean No
$.oneOf[0].allOf[1].Payload.state.items[].bookmark_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].bookmark_post_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].unfollow_board_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].is_pinnedboolean No
$.oneOf[0].allOf[1].Payload.state.items[].pin_sort_orderinteger No
$.oneOf[0].allOf[1].Payload.state.items[].todoboolean No
$.oneOf[0].allOf[1].Payload.state.items[].hide_when_rightbar_visibleboolean No
$.oneOf[0].allOf[1].Payload.state.items[].mobile_headerobject No
$.oneOf[0].allOf[1].Payload.state.items[].mobile_header.primarystring ["search","ticker","title","brand"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].mobile_header.ctastring ["post","search-icon","none"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].sort = "communities" No
$.oneOf[0].allOf[1].Payload.state.items[].submenu No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0]object No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].itemsarray Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[]object No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].keystring Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].label_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].iconstring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].hrefstring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].rolestring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badgeobject No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.tonestring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badgeobject No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.tonestring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].activeboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].bookmark_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].bookmark_post_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].unfollow_board_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].is_pinnedboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].pin_sort_orderinteger No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].conditionstring NoLegacy static submenu visibility callback identifier, retained as inert text by ToClientState.
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].persist_when_emptyboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].wrapper_attrsobject No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].wrapper_attrs.*string No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].default_expandedboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[1]null No
$.oneOf[0].allOf[1].Payload.state.plans Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].sortBystring ["upcoming","name"] Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groupBy = "city" Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groupsarray Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[]object No
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].cityCodestring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].cityNamestring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].emojistring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].citySlugstring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingCountinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastCountinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingAppointmentsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastAppointmentsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingBidsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastBidsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingSoldSalesinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastSoldSalesinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].bubblesobject No
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].bubbles.*integer No
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].hasArchivedPlansboolean Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.state.appMenu = null Yes
$.oneOf[0].allOf[1].Payload.state.mobileHeaderobject Yes
$.oneOf[0].allOf[1].Payload.state.mobileHeader.primarystring ["search","ticker","title","brand"] Yes
$.oneOf[0].allOf[1].Payload.state.mobileHeader.ctastring ["post","search-icon","none"] Yes
$.oneOf[0].allOf[1].Payload.state.communitiesSortBystring ["latest_post","name"] Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigationobject Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.MembershipFingerprintstring No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.CompleteScopesarray Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.CompleteScopes[]string ["status","activity"] No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.CommunityOrderFingerprintstring No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payloadPersonalNavigationBubbles Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].* No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[0]integer No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[1] = false No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[2]object No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[2].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[2].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[1]array Yes
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/sidebar/set_communities_view",
    "RequestUserAlias": "example-user",
    "Payload": {
        "html": "<aside>Example navigation</aside>",
        "state": {
            "activeKey": "synthetic-example",
            "expanded": [],
            "items": [],
            "plans": {
                "sortBy": "upcoming",
                "groupBy": "city",
                "groups": [],
                "hasArchivedPlans": false
            },
            "appMenu": null,
            "mobileHeader": {
                "primary": "search",
                "cta": "post"
            },
            "communitiesSortBy": "latest_post",
            "personalNavigation": {
                "CompleteScopes": [],
                "payload": []
            }
        }
    }
}
Machine-readable endpoint documentation
POST

/v1/sidebar/set_expanded

#
Toggle the expand/collapse state of a top-level submenu and persist the choice to the user's `atv2_sidebar_expanded` cookie. Returns the post-mutation {html, state} so the client can swap the rendered nav block. The cookie is the source of truth for SSR re-renders. The shared browser runtime writes this same cookie directly; this endpoint remains available for API clients that need the cookie and rendered response together.

Parameters

NameTypeRequiredDefaultDescription
itemKey string Yes — Submenu key (must match a sidebar item's key). Named `itemKey` rather than `key` to avoid colliding with the apiv1 dispatcher's reserved `key=` auth parameter.
expanded bool Yes — True to expand, false to collapse.
activeNavKey string No "" Current page's active sidebar key.
theme string No "upscale_at" Theme name; defaults to "upscale_at".
isWritingRequest bool No false Set true to actually write the cookie.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/sidebar/set_expanded' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'itemKey={{itemKey}}' \
  --data-urlencode 'expanded={{expanded}}' \
  --data-urlencode 'activeNavKey={{activeNavKey}}' \
  --data-urlencode 'theme={{theme}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$sidebar_set_expanded_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.htmlstring Yes
$.oneOf[0].allOf[1].Payload.stateobject Yes
$.oneOf[0].allOf[1].Payload.state.activeKeystring Yes
$.oneOf[0].allOf[1].Payload.state.expanded Yes
$.oneOf[0].allOf[1].Payload.state.expanded.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.state.expanded.anyOf[0].*boolean No
$.oneOf[0].allOf[1].Payload.state.expanded.anyOf[1]array Yes
$.oneOf[0].allOf[1].Payload.state.itemsarray Yes
$.oneOf[0].allOf[1].Payload.state.items[]object No
$.oneOf[0].allOf[1].Payload.state.items[].keystring Yes
$.oneOf[0].allOf[1].Payload.state.items[].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].label_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].iconstring No
$.oneOf[0].allOf[1].Payload.state.items[].hrefstring No
$.oneOf[0].allOf[1].Payload.state.items[].rolestring No
$.oneOf[0].allOf[1].Payload.state.items[].badgeobject No
$.oneOf[0].allOf[1].Payload.state.items[].badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].badge.tonestring No
$.oneOf[0].allOf[1].Payload.state.items[].badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.state.items[].status_badgeobject No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.tonestring No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.state.items[].activeboolean No
$.oneOf[0].allOf[1].Payload.state.items[].bookmark_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].bookmark_post_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].unfollow_board_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].is_pinnedboolean No
$.oneOf[0].allOf[1].Payload.state.items[].pin_sort_orderinteger No
$.oneOf[0].allOf[1].Payload.state.items[].todoboolean No
$.oneOf[0].allOf[1].Payload.state.items[].hide_when_rightbar_visibleboolean No
$.oneOf[0].allOf[1].Payload.state.items[].mobile_headerobject No
$.oneOf[0].allOf[1].Payload.state.items[].mobile_header.primarystring ["search","ticker","title","brand"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].mobile_header.ctastring ["post","search-icon","none"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].sort = "communities" No
$.oneOf[0].allOf[1].Payload.state.items[].submenu No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0]object No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].itemsarray Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[]object No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].keystring Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].label_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].iconstring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].hrefstring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].rolestring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badgeobject No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.tonestring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badgeobject No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.tonestring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].activeboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].bookmark_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].bookmark_post_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].unfollow_board_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].is_pinnedboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].pin_sort_orderinteger No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].conditionstring NoLegacy static submenu visibility callback identifier, retained as inert text by ToClientState.
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].persist_when_emptyboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].wrapper_attrsobject No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].wrapper_attrs.*string No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].default_expandedboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[1]null No
$.oneOf[0].allOf[1].Payload.state.plans Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].sortBystring ["upcoming","name"] Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groupBy = "city" Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groupsarray Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[]object No
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].cityCodestring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].cityNamestring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].emojistring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].citySlugstring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingCountinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastCountinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingAppointmentsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastAppointmentsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingBidsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastBidsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingSoldSalesinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastSoldSalesinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].bubblesobject No
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].bubbles.*integer No
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].hasArchivedPlansboolean Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.state.appMenu = null Yes
$.oneOf[0].allOf[1].Payload.state.mobileHeaderobject Yes
$.oneOf[0].allOf[1].Payload.state.mobileHeader.primarystring ["search","ticker","title","brand"] Yes
$.oneOf[0].allOf[1].Payload.state.mobileHeader.ctastring ["post","search-icon","none"] Yes
$.oneOf[0].allOf[1].Payload.state.communitiesSortBystring ["latest_post","name"] Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigationobject Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.MembershipFingerprintstring No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.CompleteScopesarray Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.CompleteScopes[]string ["status","activity"] No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.CommunityOrderFingerprintstring No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payloadPersonalNavigationBubbles Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].* No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[0]integer No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[1] = false No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[2]object No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[2].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[2].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[1]array Yes
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/sidebar/set_expanded",
    "RequestUserAlias": "example-user",
    "Payload": {
        "html": "<aside>Example navigation</aside>",
        "state": {
            "activeKey": "synthetic-example",
            "expanded": [],
            "items": [],
            "plans": {
                "sortBy": "upcoming",
                "groupBy": "city",
                "groups": [],
                "hasArchivedPlans": false
            },
            "appMenu": null,
            "mobileHeader": {
                "primary": "search",
                "cta": "post"
            },
            "communitiesSortBy": "latest_post",
            "personalNavigation": {
                "CompleteScopes": [],
                "payload": []
            }
        }
    }
}
Machine-readable endpoint documentation
POST

/v1/sidebar/set_plans_view

#
Persist the user's preferred sort mode for the v2 sidebar's "Your Plans" block (city-grouped appointments). The choice is written to the `atv2_sidebar_plans_view` cookie so subsequent SSR renders pick it up; the response carries the freshly-rendered {html, state} so the client can swap the rendered nav + plans without a follow-up.

Parameters

NameTypeRequiredDefaultDescription
sortBy string Yes — Sort mode: "upcoming" (most upcoming first; default) or "name" (alphabetical city name).
activeNavKey string No "" Current page's active sidebar key.
theme string No "upscale_at" Theme name; defaults to "upscale_at".
isWritingRequest bool No false Set true to actually write the cookie.
Request example (cURL)
curl --request POST \
  'https://ca.appointmenttrader.com/v1/sidebar/set_plans_view' \
  --data-urlencode 'key={{API_KEY}}' \
  --data-urlencode 'sortBy={{sortBy}}' \
  --data-urlencode 'activeNavKey={{activeNavKey}}' \
  --data-urlencode 'theme={{theme}}' \
  --data-urlencode 'isWritingRequest={{isWritingRequest}}'

Returns

JSON
See the shared response schema and synthetic example.
Response fields
FieldTypeRequiredDescription
$sidebar_set_plans_view_Response Yes
$.oneOf[0] Yes
$.oneOf[0].allOf[0]object Yes
$.oneOf[0].allOf[0].RequestUserAliasstring Yes
$.oneOf[0].allOf[0].RequestPathstring | null Yes
$.oneOf[0].allOf[0].RequestStatus = "Succeeded" Yes
$.oneOf[0].allOf[0].ResponseCodeinteger Yes
$.oneOf[0].allOf[0].ResponseMessageAPIResponseMessage Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1]array Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2]object Yes
$.oneOf[0].allOf[0].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[0].allOf[0].RequestImpersonatedByUserAliasstring No
$.oneOf[0].allOf[1]object Yes
$.oneOf[0].allOf[1].Payloadobject Yes
$.oneOf[0].allOf[1].Payload.htmlstring Yes
$.oneOf[0].allOf[1].Payload.stateobject Yes
$.oneOf[0].allOf[1].Payload.state.activeKeystring Yes
$.oneOf[0].allOf[1].Payload.state.expanded Yes
$.oneOf[0].allOf[1].Payload.state.expanded.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.state.expanded.anyOf[0].*boolean No
$.oneOf[0].allOf[1].Payload.state.expanded.anyOf[1]array Yes
$.oneOf[0].allOf[1].Payload.state.itemsarray Yes
$.oneOf[0].allOf[1].Payload.state.items[]object No
$.oneOf[0].allOf[1].Payload.state.items[].keystring Yes
$.oneOf[0].allOf[1].Payload.state.items[].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].label_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].iconstring No
$.oneOf[0].allOf[1].Payload.state.items[].hrefstring No
$.oneOf[0].allOf[1].Payload.state.items[].rolestring No
$.oneOf[0].allOf[1].Payload.state.items[].badgeobject No
$.oneOf[0].allOf[1].Payload.state.items[].badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].badge.tonestring No
$.oneOf[0].allOf[1].Payload.state.items[].badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.state.items[].status_badgeobject No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.tonestring No
$.oneOf[0].allOf[1].Payload.state.items[].status_badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.state.items[].activeboolean No
$.oneOf[0].allOf[1].Payload.state.items[].bookmark_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].bookmark_post_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].unfollow_board_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].is_pinnedboolean No
$.oneOf[0].allOf[1].Payload.state.items[].pin_sort_orderinteger No
$.oneOf[0].allOf[1].Payload.state.items[].todoboolean No
$.oneOf[0].allOf[1].Payload.state.items[].hide_when_rightbar_visibleboolean No
$.oneOf[0].allOf[1].Payload.state.items[].mobile_headerobject No
$.oneOf[0].allOf[1].Payload.state.items[].mobile_header.primarystring ["search","ticker","title","brand"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].mobile_header.ctastring ["post","search-icon","none"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].sort = "communities" No
$.oneOf[0].allOf[1].Payload.state.items[].submenu No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0]object No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].itemsarray Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[]object No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].keystring Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].label_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].iconstring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].hrefstring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].rolestring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badgeobject No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.tonestring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badgeobject No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.typestring ["count","money","icon","dot","status"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.bubble_keystring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[0]string No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[1]number No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[2]boolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[3]object No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[3].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.value.anyOf[3].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.tonestring No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].status_badge.guidanceboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].activeboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].bookmark_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].bookmark_post_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].unfollow_board_idinteger No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].is_pinnedboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].pin_sort_orderinteger No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].items[].conditionstring NoLegacy static submenu visibility callback identifier, retained as inert text by ToClientState.
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].persist_when_emptyboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].wrapper_attrsobject No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].wrapper_attrs.*string No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[0].default_expandedboolean No
$.oneOf[0].allOf[1].Payload.state.items[].submenu.anyOf[1]null No
$.oneOf[0].allOf[1].Payload.state.plans Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].sortBystring ["upcoming","name"] Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groupBy = "city" Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groupsarray Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[]object No
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].cityCodestring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].cityNamestring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].emojistring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].citySlugstring Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingCountinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastCountinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingAppointmentsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastAppointmentsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingBidsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastBidsinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].upcomingSoldSalesinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].groups[].pastSoldSalesinteger Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].bubblesobject No
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].bubbles.*integer No
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[0].hasArchivedPlansboolean Yes
$.oneOf[0].allOf[1].Payload.state.plans.anyOf[1]null Yes
$.oneOf[0].allOf[1].Payload.state.appMenu = null Yes
$.oneOf[0].allOf[1].Payload.state.mobileHeaderobject Yes
$.oneOf[0].allOf[1].Payload.state.mobileHeader.primarystring ["search","ticker","title","brand"] Yes
$.oneOf[0].allOf[1].Payload.state.mobileHeader.ctastring ["post","search-icon","none"] Yes
$.oneOf[0].allOf[1].Payload.state.communitiesSortBystring ["latest_post","name"] Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigationobject Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.MembershipFingerprintstring No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.CompleteScopesarray Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.CompleteScopes[]string ["status","activity"] No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.CommunityOrderFingerprintstring No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payloadPersonalNavigationBubbles Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0]object Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].* No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[0]integer No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[1] = false No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[2]object No
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[2].codestring ["pending","answer-required"] Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[0].*.anyOf[2].labelstring Yes
$.oneOf[0].allOf[1].Payload.state.personalNavigation.payload.anyOf[1]array Yes
$.oneOf[1]object Yes
$.oneOf[1].RequestUserAliasstring Yes
$.oneOf[1].RequestPathstring | null Yes
$.oneOf[1].RequestStatus = "Failed" Yes
$.oneOf[1].ResponseCodeinteger Yes
$.oneOf[1].ResponseMessageAPIResponseMessage Yes
$.oneOf[1].ResponseMessage.oneOf[0]string | number | boolean | null Yes
$.oneOf[1].ResponseMessage.oneOf[1]array Yes
$.oneOf[1].ResponseMessage.oneOf[1][]APIResponseMessage No
$.oneOf[1].ResponseMessage.oneOf[2]object Yes
$.oneOf[1].ResponseMessage.oneOf[2].*APIResponseMessage No
$.oneOf[1].RequestImpersonatedByUserAliasstring No
Response example
{
    "RequestStatus": "Succeeded",
    "ResponseCode": 100,
    "ResponseMessage": "Synthetic success example.",
    "RequestPath": "/v1/sidebar/set_plans_view",
    "RequestUserAlias": "example-user",
    "Payload": {
        "html": "<aside>Example navigation</aside>",
        "state": {
            "activeKey": "synthetic-example",
            "expanded": [],
            "items": [],
            "plans": {
                "sortBy": "upcoming",
                "groupBy": "city",
                "groups": [],
                "hasArchivedPlans": false
            },
            "appMenu": null,
            "mobileHeader": {
                "primary": "search",
                "cta": "post"
            },
            "communitiesSortBy": "latest_post",
            "personalNavigation": {
                "CompleteScopes": [],
                "payload": []
            }
        }
    }
}
Machine-readable endpoint documentation