Always the same card — heading “License Key”, subheading “Your license key provides access to updates and support.” Only the control area changes, driven by the EDD statuses the plugins already use (valid / invalid / invalid_item_id / expired, error missing) plus the shared 14-day grace period. Expand Spec under any state for triggers, actions, and code grounding.
01Lite — no license neededFree version, no key ever entered
License Key
Your license key provides access to updates and support.
You’re using the Lite version — no license needed. Enjoy! 🙂
As a valued Lite user you get 50% off Pro, applied automatically at checkout.
Spec
Trigger: free version installed, no key ever entered. Actions: upgrade to Pro (Lite-loyalty discount auto-applied), or ignore forever.
Copy from Twitter Lite: “You are using the Lite version of the plugin–no license needed. Enjoy! 🙂”. Social Wall ships Pro-only — never shows this state. TikTok is one codebase whose tier falls back to free, so its Lite state is this same card.
02Pro key not activatedPro installed, key field empty
License Key
Your license key provides access to updates and support.
Already purchased? Simply enter your license key below to activate Pro.
Your key is in your purchase confirmation email, or under Account → Licenses on smashballoon.com.
Spec
Trigger: Pro installed (or a Lite user just purchased), field empty. Actions: paste a key and Activate; “Where’s my key?” link to the account.
Placeholder “Paste license key here” and lead copy are existing Twitter Lite strings. On Lite installs a verified key also installs Pro — the button becomes Install Pro.
03ActivatingActivate request in flight — resolves to 04, 05 or 08
License Key
Your license key provides access to updates and support.
Verifying your key with smashballoon.com…
Spec
Trigger: the AJAX activate call is in flight. Actions: wait — field and button lock to prevent double submits.
Activation is an AJAX round-trip everywhere (e.g. TikTok’s wp_ajax_sbtt_activate_license → relay auth/license). No plugin shows this in-flight state today — this standardizes one.
04ActiveAPI returned valid, site registered
License Key
Your license key provides access to updates and support.
Trigger: API returned valid. Actions: Deactivate (frees the site slot), Test connection, Recheck license, Manage on smashballoon.com.
All action labels exist today: Deactivate, Test Connection, Recheck license, Manage License (Twitter licenseBox). Already used on the converged Instagram / YouTube pages.
Your license key provides access to updates and support.
This license key isn’t valid for Instagram Feeds Pro. Check for typos, or copy the key from Account → Licenses.
Spec
Trigger: API answers invalid, invalid_item_id (key belongs to another product), or error missing (no such key). Actions: fix the key and retry — the bad key stays in the field for editing.
On invalid_item_id, name the product the key does belong to (“This key is for Facebook Feeds Pro”) so cross-plugin paste mistakes self-resolve.
06ExpiredAPI: expired, 14-day grace over
License Key
Your license key provides access to updates and support.
Expired
Your license expired on Jun 30, 2026. You are no longer receiving updates that protect you against upcoming platform changes, and access to some Pro features is now limited. Why renew?
Spec
Trigger: API answers expired and the grace period (state 07) has ended — updates, support, and some Pro features off. Actions: Renew (checkout pre-filled with edd_license_key), Re-check after renewing, read “Why renew?”.
Renew License, Re-check License and Why renew? are the existing YouTube Pro expired-notice actions. Social Wall today shows a bare red “Expired” label — this replaces that.
07Grace periodExpired under 14 days ago — everything still works
License Key
Your license key provides access to updates and support.
Expired — grace period9 days left
Your license expired on Jun 30, 2026. You are no longer receiving updates that protect you against upcoming platform changes. There’s a 14 day grace period before access to some Pro features will be limited.
Spec
Trigger: key expired fewer than 14 days ago (is_license_grace_period_ended() false). Feeds keep rendering; only the settings page nags. Actions: Renew before features are limited, or Re-check if already renewed.
The 14-day window and copy are the existing YouTube / Twitter Pro grace logic (*_check_license_api_post_grace_period).
08Network errorLicensing server unreachable — key unchanged
License Key
Your license key provides access to updates and support.
Connection failed. We couldn’t reach smashballoon.com to verify your license. Your key hasn’t been changed — this is usually temporary, or a firewall blocking outgoing requests.
Trigger: licensing server unreachable (WP HTTP error, firewall, outage). Stored key and status are not changed — distinct from state 05: the key is never judged. Actions: Retry, View error, Test connection.
Grounded in the existing Connection failed / View error / Test Connection strings (Twitter licenseBox).
09Tier-limitedKey valid, plan doesn’t cover the feature or site count
License Key
Your license key provides access to updates and support.
ActiveBasic tier
Your Basic plan doesn’t include Trustpilot and Yelp sources. Upgrade to the Plus tier to display reviews from them — your key and settings carry over.
Trigger: key valid and active, but the plan tier doesn’t cover a feature (e.g. Yelp needs Plus) or this site exceeds the plan’s site count. Nothing breaks. Actions: Upgrade Plan (peach PRO path), Compare tiers, or keep using what the tier covers.
Tiers are real: TikTok maps item names to basic / plus / pro (plus the All Access Bundle); Reviews gates Yelp behind “Upgrade to our ‘Plus’ tier”. Site-count variant inferred — standard EDD no_activations_left, not found verbatim in these codebases.
Rules that hold across all nine
The heading and subheading never change. Success / warning / error always use the feedback tokens — never raw hex (today Social Wall hardcodes color:red / color:green). The key is masked whenever stored, editable whenever being corrected. States 5, 6, 8 never silently discard the stored key. Peach is reserved for the upgrade path (states 1 and 9); it never signals an error.