{"id":319035,"date":"2026-06-18T11:38:51","date_gmt":"2026-06-18T11:38:51","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/api-optimizer-for-woocommerce\/"},"modified":"2026-06-18T11:38:34","modified_gmt":"2026-06-18T11:38:34","slug":"api-optimizer-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/api-optimizer-for-woocommerce\/","author":23505390,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"ShopMobi \u2013 API Optimizer for WooCommerce","header_author":"ShopMobi","header_description":"Your store deserves a better API. Stop receiving 50+ fields when your app needs 3. GraphQL-like field filtering over REST, plus login and Stripe payments out of the box.","assets_banners_color":"151e31","last_updated":"2026-06-18 11:38:34","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":45,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"hammadev2","date":"2026-06-18 11:38:34"}},"upgrade_notice":{"1.0.0":"<p>Initial release \u2014 no upgrade steps required.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3577108,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3577108,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3577108,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3577108,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3577108,"resolution":"1","location":"assets","locale":"","width":1440,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3577108,"resolution":"2","location":"assets","locale":"","width":1440,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3577108,"resolution":"3","location":"assets","locale":"","width":1440,"height":900}},"screenshots":{"1":"Settings page under WooCommerce &gt; API Optimizer \u2014 enter optional Stripe API keys.","2":"Example: field-filtered product list response returning only <code>id<\/code>, <code>name<\/code>, and <code>price<\/code>.","3":"Example: variation response enriched with full attributes, pricing, and image URL."}},"plugin_section":[],"plugin_tags":[1556,841,247,23853,286],"plugin_category":[45,54],"plugin_contributors":[267701],"plugin_business_model":[],"class_list":["post-319035","plugin","type-plugin","status-publish","hentry","plugin_tags-api","plugin_tags-mobile","plugin_tags-performance","plugin_tags-rest-api","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-security-and-spam-protection","plugin_contributors-hammadev2","plugin_committers-hammadev2"],"banners":{"banner":"https:\/\/ps.w.org\/api-optimizer-for-woocommerce\/assets\/banner-772x250.png?rev=3577108","banner_2x":"https:\/\/ps.w.org\/api-optimizer-for-woocommerce\/assets\/banner-1544x500.png?rev=3577108","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/api-optimizer-for-woocommerce\/assets\/icon-128x128.png?rev=3577108","icon_2x":"https:\/\/ps.w.org\/api-optimizer-for-woocommerce\/assets\/icon-256x256.png?rev=3577108","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/api-optimizer-for-woocommerce\/assets\/screenshot-1.png?rev=3577108","caption":"Settings page under WooCommerce &gt; API Optimizer \u2014 enter optional Stripe API keys."},{"src":"https:\/\/ps.w.org\/api-optimizer-for-woocommerce\/assets\/screenshot-2.png?rev=3577108","caption":"Example: field-filtered product list response returning only <code>id<\/code>, <code>name<\/code>, and <code>price<\/code>."},{"src":"https:\/\/ps.w.org\/api-optimizer-for-woocommerce\/assets\/screenshot-3.png?rev=3577108","caption":"Example: variation response enriched with full attributes, pricing, and image URL."}],"raw_content":"<!--section=description-->\n<p>Stop receiving 50+ fields when your app needs 3. ShopMobi \u2013 API Optimizer for WooCommerce gives your store GraphQL-like flexibility over REST \u2014 plus login, password reset, and Stripe payments out of the box.<\/p>\n\n<p>Built for developers creating mobile apps, Flutter apps, React Native apps, or any headless WooCommerce frontend.<\/p>\n\n<h4>Field Filtering<\/h4>\n\n<p>Apply field filtering to any WooCommerce REST API response. No changes required on the server side \u2014 clients request only what they need.<\/p>\n\n<p><strong>Via request header (recommended for apps):<\/strong>\n    X-WC-Fields: id,name,price,images<\/p>\n\n<p><strong>Via query parameter:<\/strong>\n    ?fields=id,name,price,images<\/p>\n\n<p><strong>Exclude specific fields:<\/strong>\n    X-WC-Except: meta_data,description or <code>?except_fields=meta_data<\/code><\/p>\n\n<p>When both header and query parameter are provided, the header takes priority. The plugin applies filtering after WooCommerce builds the full response, so all existing WooCommerce hooks and permissions remain intact.<\/p>\n\n<h4>Custom REST Endpoints<\/h4>\n\n<p>The plugin registers the following custom endpoints under the <code>shopmobi\/v1<\/code> namespace:<\/p>\n\n<p><strong>Authentication<\/strong><\/p>\n\n<ul>\n<li><code>POST \/wp-json\/shopmobi\/v1\/users\/login<\/code> \u2014 Login with username and password<\/li>\n<li><code>POST \/wp-json\/shopmobi\/v1\/users\/register<\/code> \u2014 Register a new customer account<\/li>\n<li><code>POST \/wp-json\/shopmobi\/v1\/users\/update-profile<\/code> \u2014 Update first name, last name, and phone (requires login)<\/li>\n<\/ul>\n\n<p><strong>Password Reset<\/strong><\/p>\n\n<ul>\n<li><code>POST \/wp-json\/shopmobi\/v1\/users\/reset-password\/generate<\/code> \u2014 Send a password reset link to the user's email (WordPress native flow)<\/li>\n<li><code>POST \/wp-json\/shopmobi\/v1\/users\/reset-password\/verify<\/code> \u2014 Verify the reset key and set a new password<\/li>\n<\/ul>\n\n<p><strong>Store Information<\/strong><\/p>\n\n<ul>\n<li><code>GET \/wp-json\/shopmobi\/v1\/general-settings<\/code> \u2014 Country, currency, and active payment gateways (public)<\/li>\n<li><code>GET \/wp-json\/shopmobi\/v1\/store-location<\/code> \u2014 Store address and location (requires login)<\/li>\n<li><code>GET \/wp-json\/shopmobi\/v1\/payment-gateways<\/code> \u2014 Available payment gateways<\/li>\n<\/ul>\n\n<p><strong>Payments<\/strong><\/p>\n\n<ul>\n<li><code>POST \/wp-json\/shopmobi\/v1\/stripe-payment<\/code> \u2014 Create a Stripe PaymentIntent and EphemeralKey for mobile checkout (requires login)<\/li>\n<\/ul>\n\n<h4>Product Variation Enhancement<\/h4>\n\n<p>Variation responses are enriched automatically. Raw variation IDs in product responses are replaced with full objects including:<\/p>\n\n<ul>\n<li>Pricing (regular price, sale price, on_sale flag)<\/li>\n<li>SKU and stock quantity<\/li>\n<li>Stock status<\/li>\n<li>Attributes with labels and slugs<\/li>\n<li>Variation image URL<\/li>\n<\/ul>\n\n<h4>Third-Party Services<\/h4>\n\n<p>This plugin optionally integrates with <strong>Stripe<\/strong> (https:\/\/stripe.com) for payment processing. The Stripe integration is inactive until you provide API keys under <strong>WooCommerce &gt; API Optimizer<\/strong>.<\/p>\n\n<p>When the <code>\/shopmobi\/v1\/stripe-payment<\/code> endpoint is called, payment data (amount, currency, Stripe customer ID) is sent directly to Stripe's servers. No payment data passes through ShopMobi or any other third party.<\/p>\n\n<ul>\n<li>Stripe Privacy Policy: https:\/\/stripe.com\/privacy<\/li>\n<li>Stripe Terms of Service: https:\/\/stripe.com\/legal<\/li>\n<\/ul>\n\n<p>Your Stripe API keys are stored in your WordPress database and are never shared with the plugin author.<\/p>\n\n<h3>Privacy Policy<\/h3>\n\n<p>This plugin stores data in your own WordPress database only:<\/p>\n\n<ul>\n<li><strong>Stripe Customer IDs<\/strong> (<code>stripe_cust_id<\/code> user meta) \u2014 created when a user makes a Stripe payment. Stored locally and shared only with Stripe to identify returning customers.<\/li>\n<li><strong>Password Reset Keys<\/strong> \u2014 handled entirely by WordPress core (<code>get_password_reset_key()<\/code> \/ <code>reset_password()<\/code>). No custom data is stored in user meta by this plugin.<\/li>\n<\/ul>\n\n<p>This plugin does not track users, send analytics, or transmit any personal data to ShopMobi or any third party, except for payment data sent directly to Stripe when the Stripe endpoint is used.<\/p>\n\n<p>For Stripe's data handling practices, see https:\/\/stripe.com\/privacy.<\/p>\n\n<!--section=installation-->\n<h4>Standard Installation (Recommended)<\/h4>\n\n<ol>\n<li>Go to <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong> in your WordPress admin.<\/li>\n<li>Upload the plugin zip file and click <strong>Install Now<\/strong>.<\/li>\n<li>Click <strong>Activate Plugin<\/strong>.<\/li>\n<li>Optionally, go to <strong>WooCommerce &gt; API Optimizer<\/strong> to enter your Stripe API keys.<\/li>\n<\/ol>\n\n<h4>Installation from Source<\/h4>\n\n<ol>\n<li>Clone the repository and navigate to the plugin folder.<\/li>\n<li>Run: <code>composer install --no-dev --optimize-autoloader<\/code><\/li>\n<li>Copy the folder to <code>wp-content\/plugins\/<\/code> and activate from the Plugins screen.<\/li>\n<\/ol>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.8 or higher<\/li>\n<li>WooCommerce 6.0 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20field%20filtering%20affect%20server%20performance%3F\"><h3>Does field filtering affect server performance?<\/h3><\/dt>\n<dd><p>The full WooCommerce response is built internally before filtering is applied, so server processing time is unchanged. The benefit is a smaller network payload for mobile and headless clients.<\/p><\/dd>\n<dt id=\"does%20this%20replace%20the%20woocommerce%20rest%20api%3F\"><h3>Does this replace the WooCommerce REST API?<\/h3><\/dt>\n<dd><p>No. This plugin adds a filtering layer on top of the standard WooCommerce REST API. All existing WooCommerce authentication, permissions, and hooks still apply.<\/p><\/dd>\n<dt id=\"can%20i%20use%20both%20a%20header%20and%20a%20query%20parameter%20at%20the%20same%20time%3F\"><h3>Can I use both a header and a query parameter at the same time?<\/h3><\/dt>\n<dd><p>The header takes priority. If <code>X-WC-Fields<\/code> is present, the <code>fields<\/code> query parameter is ignored for that request.<\/p><\/dd>\n<dt id=\"which%20woocommerce%20endpoints%20support%20field%20filtering%3F\"><h3>Which WooCommerce endpoints support field filtering?<\/h3><\/dt>\n<dd><ul>\n<li><code>\/wc\/v3\/products<\/code> and individual product responses<\/li>\n<li><code>\/wc\/v3\/products\/{id}\/variations<\/code><\/li>\n<li><code>\/wc\/v3\/orders<\/code> and individual order responses<\/li>\n<li><code>\/wc\/v3\/customers<\/code> and individual customer responses<\/li>\n<\/ul><\/dd>\n<dt id=\"is%20stripe%20required%3F\"><h3>Is Stripe required?<\/h3><\/dt>\n<dd><p>No. Stripe is completely optional. All other features \u2014 field filtering, auth endpoints, general settings \u2014 work without any Stripe configuration.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20woocommerce%20hpos%20%28high-performance%20order%20storage%29%3F\"><h3>Does this work with WooCommerce HPOS (High-Performance Order Storage)?<\/h3><\/dt>\n<dd><p>Yes. The plugin filters WooCommerce REST API responses and does not make direct database queries, so it is fully compatible with HPOS.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20compatible%20with%20caching%20plugins%3F\"><h3>Is the plugin compatible with caching plugins?<\/h3><\/dt>\n<dd><p>The field filtering works on REST API responses. If your caching plugin caches REST API responses, those cached responses will not be filtered. Disable REST API caching or configure it to vary by the <code>X-WC-Fields<\/code> header.<\/p><\/dd>\n<dt id=\"where%20are%20stripe%20api%20keys%20stored%3F\"><h3>Where are Stripe API keys stored?<\/h3><\/dt>\n<dd><p>Stripe API keys are stored in the WordPress options table via the standard WordPress Settings API. They are never logged, exposed in source code, or transmitted to any party other than Stripe.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20collect%20any%20data%3F\"><h3>Does the plugin collect any data?<\/h3><\/dt>\n<dd><p>The plugin stores the following data in your own WordPress database:<\/p>\n\n<ul>\n<li>Stripe customer IDs in user meta (<code>stripe_cust_id<\/code>) \u2014 only when Stripe is used<\/li>\n<li>Temporary password reset codes and expiry timestamps in user meta \u2014 deleted immediately after use<\/li>\n<\/ul>\n\n<p>No data is sent to ShopMobi or any external service other than Stripe (when explicitly used).<\/p><\/dd>\n<dt id=\"can%20i%20use%20this%20plugin%20without%20woocommerce%3F\"><h3>Can I use this plugin without WooCommerce?<\/h3><\/dt>\n<dd><p>No. WooCommerce must be installed and active. If WooCommerce is not detected, the plugin will show an admin notice and will not register any hooks or endpoints.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Field filtering via <code>X-WC-Fields<\/code> \/ <code>X-WC-Except<\/code> headers and <code>fields<\/code> \/ <code>except_fields<\/code> query parameters.<\/li>\n<li>Applies to products, orders, customers, and variation endpoints.<\/li>\n<li>Auth endpoints: login, register, update profile.<\/li>\n<li>Password reset endpoints: generate and verify.<\/li>\n<li>General settings endpoint: country, currency, store location, active gateways.<\/li>\n<li>Payment gateways endpoint.<\/li>\n<li>Stripe PaymentIntent endpoint with EphemeralKey support.<\/li>\n<li>Product variation response enhancer.<\/li>\n<li>Admin settings page under WooCommerce &gt; API Optimizer.<\/li>\n<\/ul>","raw_excerpt":"ShopMobi reduces WooCommerce REST API response size with field filtering and adds ready-made endpoints for auth, Stripe payments, and store settings.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/319035","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=319035"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hammadev2"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=319035"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=319035"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=319035"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=319035"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=319035"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=319035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}