Launchpad v1 Custom Install
Learn more about our custom Launchpad installation process.
Table of Contents
Launchpad v2 is now in open beta!
Take a look at our new and improved launchpad, the same great functionality is now in open beta for all plan types. Spin up your in-app resource center without touching a line of code!
Please note that Launchpad (formerly known as the "in-app widget" or "announcement center") is available as a feature only in our Growth plans and above.
Once you've made the decision to utilize Launchpad, you can decide which installation method you'll want to use depending on how far you want to customize your Launchpad. The Custom Launchpad Install offers these characteristics:
- Implementation difficulty is dependent on the functionalities you want to be included (on a rush for a quick implementation of Launchpad? Try our Standard Launchpad Install!)
- FULL customization (want to add a widget or redirect users to a page? it's possible!)
An example would be our very own 'Help' beacon in Studio. You can read more about how we used Launchpad in this article: How we used Launchpad to create a resource center.
Installation Process
The Custom Install method will only offer APIs so your development team can implement the Launchpad to your application's own preference, allowing full granular control of how it should look like! There will be no installation templates for this method, as it will have to be created on your end due to its custom nature.
Introduction
The Appcues API provides an HTTP endpoint for accessing all the content that a user is qualified to see within the Appcues Launchpad.
Connecting
The root URL for the Appcues API is https://api.appcues.com/.
The URL to fetch the list of content is formed using your Appcues account ID (visible from your Appcues account page) and the end user's ID (the first parameter to your site code's Appcues.identify() call), as follows:
https://api.appcues.com/v1/accounts/{account_id}/users/{user_id}/launchpad
Request Format
The user activity endpoint accepts only GET requests.
The request should contain the following query parameter:
url The URL of the current page the user is on. This is used for page-level filtering and should be fully encoded to ensure an accurate response. For quick testing, a URL encoder like https://meyerweb.com/eric/tools/dencoder/ can be helpful.
An example would be:
https://api.appcues.com/v1/accounts/{account_id}/users/{user_id}/launchpad?url=https://yoursite.com/dashboard
Request headers
The Authorization header is required if your account is using Identity Verification. The Authorization header should include the UserID signature and use the following format:
Authorization: Bearer {user id signature}
Response Format
A successful user activity submission will result in a response with status code 200, and a response body like the following:
{"request_id":"abc123","contents":[]}
request_id Request_id specified in the request, if any.
contents An array of content for which the user currently qualifies. Used internally by the Appcues SDK; safe for external users to ignore.
Example response of what you might receive (actual response may vary):
{
"checklists":[
],
"contents":[
{
"attributes":{
"created_at":1646163441985,
"created_by":"uRAZUSQ2mDdNDkJMTAs4u3IEmA62",
"id":"3211a0f6-ff2f-4feb-97a4-5fe994b8a25e",
"internal_name":null,
"name":"Localization Test",
"state":"PUBLISHED",
"steps":{
"34a19398-4dbb-4b1c-acd2-5f675e7c3afb":{
"id":"34a19398-4dbb-4b1c-acd2-5f675e7c3afb",
"index":1,
"step":{
"attributes":{
"backdrop":false,
"backdrop_solid_edge":false,
"backdrop_solid_edge_opacity":0.5,
"beacon_style":"hidden",
"hotspots":[
{
"backdrop_solid_edge_border_radius":0.0,
"backdrop_solid_edge_x_padding":0.0,
"backdrop_solid_edge_y_padding":0.0,
"backup_selectors":null,
"hide_next_button":true,
"html":"raw html of step",
"id":"a21b1c23-be6a-4551-9193-cfbbda121398",
"index":0,
"next_text":"Next",
"offset_x_percentage":0.08125707814269535,
"offset_y_percentage":0.09948320413436693,
"pattern":null,
"selector":".property-setter p:nth-of-type(1)",
"selector_settings":{
"selector":".property-setter p:nth-of-type(1)"
},
"skip_text":"Hide these tips",
"tooltip_alignment":null,
"ui_conditions":{
"next":null
},
"z_index_override":null
}
],
"sequential":true,
"skippable":true,
"skippable_display_type":"text",
"style":null
},
"created_at":1646163441992,
"flow_id":null,
"id":"34a19398-4dbb-4b1c-acd2-5f675e7c3afb",
"migrated_from_step_id":null,
"name":null,
"next_content_id":null,
"parent_id":null,
"redirect_new_tab":false,
"redirect_url":null,
"type":"hotspot-group",
"updated_at":1646163441992,
"version_id":1646163441992
},
"step_type":"hotspot-group"
},
"a7bb2572-f410-4bf2-b672-91943bd6ac9e":{
"id":"a7bb2572-f410-4bf2-b672-91943bd6ac9e",
"index":0,
"step":{
"attributes":{
"backdrop":true,
"is_progress_bar_hidden":false,
"pattern_type":"modal",
"position":"top",
"skippable":true,
"steps":[
{
"actions_hidden":false,
"html":"raw html of step",
"id":"f2bf8d53-05c2-4d51-ad3d-f821b4d46986",
"is_button_centered":true,
"next_button_hidden":false,
"next_text":"Let's go!",
"prev_button_hidden":false,
"prev_text":"Cancel",
"step_buttons":[
],
"step_number":1,
"ui_conditions":{
}
}
],
"style":null
},
"created_at":1646163441989,
"flow_id":null,
"id":"a7bb2572-f410-4bf2-b672-91943bd6ac9e",
"migrated_from_step_id":null,
"name":null,
"next_content_id":null,
"parent_id":null,
"redirect_new_tab":false,
"redirect_url":null,
"type":"modal",
"updated_at":1646163441989,
"version_id":1646163441989
},
"step_type":"modal"
}
},
"updated_at":1646163440192,
"updated_by":"uRAZUSQ2mDdNDkJMTAs4u3IEmA62",
"version_id":null
},
"context":{
"locale_id":"default",
"locale_name":"default"
},
"created_at":1646163441985,
"format_version":2,
"id":"3211a0f6-ff2f-4feb-97a4-5fe994b8a25e",
"migrated_from_step_id":null,
"name":"Localization Test",
"next_content_id":null,
"parent_id":null,
"redirect_new_tab":false,
"redirect_url":null,
"type":"journey",
"updated_at":1646163440192,
"version_id":1646163440192
}
],
"experiences":[
],
"performed_qualification":true,
"profile":{
"_ABGroup":2
},
"qualification_reason":null,
"request_id":null
}