Shopify Wishlist App
The Share a Wish app for Shopify adds a cross-device wishlist to your store without touching theme code: install the app, enable the app embed, drop the blocks into your theme. Behind the scenes it provisions the same public API key and basket configuration that the Save Button and Wishlist API use.
Install flow
- Install Share a Wish from the Shopify App Store (
apps.shopify.com/share-a-wish). The OAuth flow starts athttps://app.shareawish.shop/shopify/auth/begin?shop=<store>.myshopify.comand requests the scopesread_products, write_products, read_themes, write_themes. - After authorization the backend creates a partner record, a Shopify shop record, a public API key and a basket configuration (
bkt_…), and writes two shop metafields:shop.metafields.shareawish.api_keyandshop.metafields.shareawish.basket_config_id. The shop starts on the Free plan withsubscription_status = trialingand atrial_ends_at14 days out. - In the theme editor (Online Store → Themes → Customize → App embeds) enable Share a Wish Setup. The embed reads the metafields and injects the key, the SDK scripts and the app data into
<head>. With auto-inject on (default), a Save button appears on product pages and a heart overlay on product cards without adding any block. - Optionally add the blocks below for finer control of placement and style.
Webhooks registered by the app: app/uninstalled (marks the shop inactive), shop/update, products/create, products/update. Webhook endpoint: https://app.shareawish.shop/shopify/webhook.
Theme app extension blocks
Five blocks ship in the extension. Names are what merchants see in the theme editor; the file column is the Liquid source.
| Block | File / target | Settings |
|---|---|---|
| Share a Wish Setup (app embed) | app-embed.liquid · head |
auto_inject (default on) · primary_color (#2563EB) · icon_color (#EF4444) · button_icon heart | logo · button_style filled | outline | minimal · button_radius 0–24 px (8) · show_branding "Powered by Share a Wish" (on) |
| Share a Wish Button | save-button.liquid · section, product template |
button_style primary | outline | icon | minimal · button_text ("Save to Wishlist", auto-localized for de/fr/es/nl/pl/it/pt when left at the default) · primary_color · text_color · border_radius 0–24 px · full_width · icon_style heart | app | none · show_powered_by |
| Share a Wish Basket | wishlist-basket.liquid · section |
section_title ("My Wishlist") · loading_message · error_message · background_color · title_color · title_size 14–36 px · min_height 200–800 px · padding · show_border · border_color · border_radius |
| Share a Wish Float | header-icon.liquid · body (floating) |
display_mode floating-bottom-right | bottom-left | top-right | top-left · icon_color · badge_color · background_color · icon_size 20–48 px · wishlist_page_url · open_drawer (default on) · drawer_title · drawer_width 320–500 px |
| Share a Wish Header | wishlist-icon-inline.liquid · section (inline in header) |
vertical_align top | center | bottom · icon_color · badge_color · icon_size 16–40 px · wishlist_page_url · open_drawer (default off) |
The Button block renders a data-shareawish button populated from Liquid — data-url="{{ shop.url }}{{ product.url }}", data-title, data-description, data-price="{{ product.price }}", data-compare-at-price, data-currency="{{ shop.currency }}", data-image-url, data-market="{{ request.locale.iso_code }}-{{ localization.country.iso_code }}", data-product-id, data-variant-id, data-vendor, data-product-type, data-tags. The header icons show a badge with the number of saved products and can open a slide-out drawer that embeds the hosted basket (https://shareawish.shop/basket); the icon links to /pages/wishlist unless wishlist_page_url is set.
Plans and trial
Shopify billing uses the same tiers as the Partner Portal (Pricing 2026). The value unit is wishlist actions per month — a save, a share (list made public) or a hosted list view. Prices are charged through Shopify Billing in USD.
| Plan | Wishlist actions / month | Price | Trial | Highlights |
|---|---|---|---|---|
| Free | 200 | $0 | — | Save button + basket, test keys, "powered by Share a Wish" branding |
| Starter | 2,000 | $19 / month | 14 days | No branding |
| Growth | 15,000 | $49 / month | 14 days | Share pages, price alerts, webhooks, hosted lists with your branding |
| Scale | 60,000 | $99 / month | 14 days | Custom domain, API with server keys, priority support |
Yearly billing in the Partner Portal is discounted by 20%. Enterprise volumes are available on request. The "Powered by Share a Wish" badge can be switched off on paid plans; on Free it stays on.
What happens when the trial ends
A new installation is marked trialing with trial_ends_at 14 days after install. On every POST /widget/init the API checks the linked Shopify shop: if the trial has ended and there is neither an active subscription nor a paid plan, the call is rejected with 403:
{
"error": "subscription_required",
"message": "Your free trial has expired. Please subscribe to continue using Share a Wish.",
"trial_expired": true
}
The SDK surfaces this as an error event with code === 'subscription_required' and trial_expired === true; the save buttons stop opening the dialog until the merchant subscribes in the app dashboard. Exceeding the monthly action quota does not block anything — the widget keeps working, the merchant receives notifications at 80% and 100% (see rate limits & usage).
FAQ
Do I have to edit my theme code?
No. Enable the "Share a Wish Setup" app embed in the theme editor; auto-inject adds the Save button on product pages and hearts on product cards. Blocks are optional for custom placement.
How long is the free trial?
14 days for the paid plans (Starter, Growth, Scale). The Free plan has no trial and includes 200 wishlist actions per month.
What counts as a wishlist action?
A save, a share (a list made public) or a view of a hosted list. Page views of your store and SDK initialisation calls are not actions.
Can I use the API key from the Shopify app elsewhere?
Yes. The key stored in shop.metafields.shareawish.api_key is a regular public key; it works with the drop-in script and appears in the Partner Portal.