# Docs - [Envie](/docs): Wishlist infrastructure for Shopify — unstyled primitives, an API + SDK on every plan, headless-native, your data. - Getting started - [Liquid quickstart](/docs/getting-started/liquid): A working wishlist on an Online Store 2.0 theme in about 15 minutes — app embed, save buttons, a wishlist page, and a header badge. - [Hydrogen quickstart](/docs/getting-started/hydrogen): Wishlists in a Hydrogen or any headless storefront — public key in the browser, private key in the loader, your own UI. - [Next.js & server-side](/docs/getting-started/nextjs): The private API surface with @getenvie/client — dashboards, exports, automation, and customer merge from any Node server. - Guides - [Theming & parts reference](/docs/guides/theming): Style every Envie component from your own CSS — parts, state attributes, custom properties, and the styling contract behind them. - [Events & analytics glue](/docs/guides/events): Every wishlist interaction emits a DOM event — forward them to your analytics stack in a few lines. - [Guest → customer merge](/docs/guides/guest-merge): How an anonymous wishlist becomes the customer's when a shopper logs in — and what your integration has to do (usually nothing). - [Outbound webhooks](/docs/guides/webhooks): Receive every wishlist change on your own endpoint — signed, retried, and verifiable in ten lines of code. - [Klaviyo recipes](/docs/guides/klaviyo): Forward wishlist events to Klaviyo and build flows on them — abandoned wishlist, back-in-stock nudges, post-merge welcomes. - [Import from Swym or Swish](/docs/guides/import): Move an existing wishlist install to Envie without losing shopper data — dry-run first, idempotent, with a full report of anything skipped. - [Troubleshooting](/docs/guides/troubleshooting): The symptoms we actually see, what each one means, and the fix — check here before writing to support. - Reference - [Authentication & conventions](/docs/reference/authentication): Calling the REST API without the SDK: the three auth modes as raw headers, plus the conventions every endpoint shares. - Api - [Create an API key](/docs/reference/api/private/create-api-key) - [Start an export](/docs/reference/api/private/create-export) - [Start an import](/docs/reference/api/private/create-import) - [Get an import upload URL](/docs/reference/api/private/create-import-upload) - [Create a webhook endpoint](/docs/reference/api/private/create-webhook) - [Delete a webhook endpoint](/docs/reference/api/private/delete-webhook) - [Wishlist activity over time](/docs/reference/api/private/get-activity) - [Check the theme app embed](/docs/reference/api/private/get-embed-status) - [Get an export job](/docs/reference/api/private/get-export) - [Get an import job](/docs/reference/api/private/get-import) - [Get a list](/docs/reference/api/private/get-list) - [Get shop overview](/docs/reference/api/private/get-shop) - [Top wishlisted products](/docs/reference/api/private/get-top-products) - [List API keys](/docs/reference/api/private/list-api-keys) - [List export jobs](/docs/reference/api/private/list-exports) - [Browse lists](/docs/reference/api/private/list-lists) - [List webhook endpoints](/docs/reference/api/private/list-webhooks) - [Revoke an API key](/docs/reference/api/private/revoke-api-key) - [Send a test delivery](/docs/reference/api/private/test-webhook) - [Update shop settings](/docs/reference/api/private/update-shop-settings) - [Add an item](/docs/reference/api/storefront/add-wishlist-item) - [Get a shared list](/docs/reference/api/storefront/get-shared-list) - [Get storefront configuration](/docs/reference/api/storefront/get-storefront-config) - [Get the shopper's wishlist](/docs/reference/api/storefront/get-wishlist) - [Merge a guest list into a customer's](/docs/reference/api/storefront/identify) - [Remove an item](/docs/reference/api/storefront/remove-wishlist-item) - [Create a share link](/docs/reference/api/storefront/share-wishlist) - [Toggle an item](/docs/reference/api/storefront/toggle-wishlist-item) - SDK - [SDK (@getenvie/client)](/docs/reference/sdk): The typed client for the Envie API — one import, three auth modes, every surface. Start here. - [Storefront](/docs/reference/sdk/storefront): Read the wishlist, toggle items, share lists, and react to state — the surface shoppers interact with, in any mode. - [Identity & merge](/docs/reference/sdk/identity): How the client identifies a shopper — the anonymous id, the login merge, and why a browser can never claim to be a customer. - [Private surface](/docs/reference/sdk/private): envie.private.* — the full server-side API: shop state, lists, analytics, transfers, webhooks, keys, and settings. - [Generated types](/docs/reference/sdk/types): Exhaustive type signatures for @getenvie/client, generated from the package's TSDoc — the curated reference starts at SDK. - Components - [](/docs/reference/components/envie-badge): Live saved-item count, typically in the header. - [](/docs/reference/components/envie-button): Toggle save state for a product or variant. - [](/docs/reference/components/envie-list): Renders saved items into the LIGHT DOM, so the theme's own CSS applies with no - [](/docs/reference/components/envie-share): Mints a share link and copies it to the clipboard. - Errors - [Errors](/docs/reference/errors): Every Envie API error is a structured problem document with a stable type URL that resolves to a page here. - [conflict](/docs/reference/errors/conflict): 409 — the request was valid, but the resource's state changed underneath it. - [forbidden](/docs/reference/errors/forbidden): 403 — authenticated, but this auth mode is not allowed to do this. - [guest-disabled](/docs/reference/errors/guest-disabled): 403 — this shop requires a logged-in customer to use wishlists. - [identify-forbidden](/docs/reference/errors/identify-forbidden): 403 — identify() was called from a browser in public mode. - [internal](/docs/reference/errors/internal): 500 — something failed on Envie's side. - [invalid-signature](/docs/reference/errors/invalid-signature): 401 — the app proxy signature on a storefront request did not verify. - [not-found](/docs/reference/errors/not-found): 404 — the resource in the URL does not exist for this shop. - [plan-limit](/docs/reference/errors/plan-limit): 403 — the shop's free plan reached its saved-items cap. - [rate-limited](/docs/reference/errors/rate-limited): 429 — too many requests; the response says exactly when to come back. - [share-disabled](/docs/reference/errors/share-disabled): 403 — share-link creation is turned off for this shop. - [unauthorized](/docs/reference/errors/unauthorized): 401 — no credentials, or credentials that don't match any installed shop. - [validation](/docs/reference/errors/validation): 400 — the request body, query, or path values failed validation. - [Limits](/docs/reference/limits): Every cap and budget in one place — rate limits, plan limits, payload sizes, and what happens at each edge. - Project - [Changelog](/docs/meta/changelog): What changed in the Envie API, SDK, and components — including deprecation notices, at least 90 days ahead. - [Roadmap](/docs/meta/roadmap): Where Envie is going, what's deliberately out of scope, and the commitments that won't change either way. - [Privacy & data](/docs/meta/privacy): Exactly what data Envie stores, where it lives, and how deletion works — short because the list is short. - [Why doesn't Envie send emails?](/docs/meta/no-emails): Deliberately, and permanently — your email tools already do it better, with your sender reputation and your consent records. - [Support](/docs/meta/support): How to reach us, what to include, and what to expect back.