{"id":348963,"date":"2026-08-20T08:42:18","date_gmt":"2026-08-20T08:42:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/amz-prep-parcel-for-woocommerce\/"},"modified":"2026-08-20T11:27:13","modified_gmt":"2026-08-20T11:27:13","slug":"amzprep-parcel","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/amzprep-parcel\/","author":23451317,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.4.8","stable_tag":"trunk","tested":"7.0.4","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"Prep Parcel by AMZ PREP","header_author":"AMZ Prep","header_description":"Live shipping rates and label creation from AMZ Prep Parcel (parcel.amzprep.com) inside WooCommerce.","assets_banners_color":"","last_updated":"2026-08-20 11:27:13","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/amzprep.com\/","header_author_uri":"https:\/\/amzprep.com\/about-us\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":44,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.4.7":{"tag":"0.4.7","author":"arishekarn","date":"2026-08-20 08:42:08"}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.4.7"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[13906,12855,1451,3546,286],"plugin_category":[45],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-348963","plugin","type-plugin","status-publish","hentry","plugin_tags-fulfillment","plugin_tags-parcel","plugin_tags-rates","plugin_tags-shipping","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_committers-arishekarn"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/amzprep-parcel.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Connects WooCommerce directly to the AMZ Prep Parcel platform at parcel.amzprep.com and\nreturns live carrier rates during checkout.<\/p>\n\n<ul>\n<li>Live rates from your negotiated Parcel account<\/li>\n<li>Percentage or fixed markup on every rate<\/li>\n<li>Per-service enable and disable<\/li>\n<li>Optional transit time beside each rate<\/li>\n<li>Configurable rate caching<\/li>\n<li>Flat fallback rate when the API is unreachable<\/li>\n<li>Built-in test quote tool and health checks<\/li>\n<li>Redacted debug logging through WooCommerce Status Logs<\/li>\n<\/ul>\n\n<p>The plugin talks to the Parcel API directly. It does not create WooCommerce API keys,\ndoes not register webhooks, and does not store your password.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to \/wp-content\/plugins\/ and activate it.<\/li>\n<li>Go to WooCommerce &gt; Settings &gt; Shipping &gt; AMZ Prep Parcel.<\/li>\n<li>Connect your Parcel account, set a ship-from address, and run a test quote.<\/li>\n<li>Add the method to your shipping zones.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20is%20my%20password%20stored%3F\"><h3>Where is my password stored?<\/h3><\/dt>\n<dd><p>It is not. It is exchanged once for a bearer token, which is encrypted at rest using your\nWordPress salts.<\/p><\/dd>\n<dt id=\"why%20do%20no%20rates%20appear%20at%20checkout%3F\"><h3>Why do no rates appear at checkout?<\/h3><\/dt>\n<dd><p>Check the Test &amp; Health tab. The most common cause is that the method has not been added\nto a shipping zone.<\/p><\/dd>\n<dt id=\"does%20this%20create%20shipping%20labels%3F\"><h3>Does this create shipping labels?<\/h3><\/dt>\n<dd><p>Yes. Open an order, use Get rates in the AMZ Prep Parcel box, pick a service and create the\nshipment. You can also ship several orders at once with the bulk action on the orders list.<\/p><\/dd>\n<dt id=\"can%20i%20ship%20several%20orders%20at%20once%3F\"><h3>Can I ship several orders at once?<\/h3><\/dt>\n<dd><p>Yes. Select them on the orders screen and choose \"Ship with AMZ Prep Parcel\". Each order\nuses the service the customer paid for, or the cheapest enabled service.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.4.8<\/h4>\n\n<ul>\n<li>Updated plugin display name to Prep Parcel by AMZ PREP.<\/li>\n<\/ul>\n\n<h4>0.4.7<\/h4>\n\n<ul>\n<li>Tested against WordPress 7.0<\/li>\n<li>Translations are now loaded automatically by WordPress.org<\/li>\n<li>Carrier Services and the health report now refresh in place after a test quote,\ninstead of showing the state from before the quote ran<\/li>\n<li>Discovered service ids are written to the debug log, with a note when two services\narrive under one identifier<\/li>\n<\/ul>\n\n<h4>0.4.5<\/h4>\n\n<ul>\n<li>Fixed successful quotes being treated as failures: the API answers with 201 Created,\nand the plugin only accepted 200<\/li>\n<li>All API calls now accept any 2xx status<\/li>\n<li>A quote that succeeds but yields no parseable rates is written to the logs in full<\/li>\n<li>Postal code field widened so a full six-character code is visible<\/li>\n<\/ul>\n\n<h4>0.4.4<\/h4>\n\n<ul>\n<li>signatureRequired now uses the API's enum (NO, YES, ADULT_SIGNATURE,\nNINETEEN_PLUS_SIGNATURE) and is selectable on the Rates &amp; Display tab<\/li>\n<li>Blank optional address fields are omitted rather than sent as empty strings,\nwhich the API rejects on minimum-length rules<\/li>\n<li>Recipient name and company are backfilled for rating, since WooCommerce has\nneither at the cart stage<\/li>\n<li>Address fields are truncated to the documented maximums<\/li>\n<li>All mbstring calls now fall back gracefully when the extension is absent<\/li>\n<\/ul>\n\n<h4>0.4.3<\/h4>\n\n<ul>\n<li>Fixed the test quote still sending the old ISO date format: it built its own payload\ninstead of going through the mapper, so the 0.4.2 fix never reached it<\/li>\n<li>The test quote and checkout quotes now share one payload builder<\/li>\n<li>Date format retry compares against the value actually sent rather than the stored\nsetting, so it can no longer skip the correct format<\/li>\n<li>Error notices clear when switching tabs instead of appearing on every panel<\/li>\n<\/ul>\n\n<h4>0.4.2<\/h4>\n\n<ul>\n<li>Fixed scheduledShipDate: the API rejects the ISO 'T' separator and expects a space<\/li>\n<li>Ship date is now rendered in the store timezone, since the field maps to a Java\nLocalDateTime which carries no offset<\/li>\n<li>If a host rejects the date format, the plugin cycles through known formats and\nremembers whichever one works<\/li>\n<li>The test quote now checks the ship-from address before calling the API<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>Diagnostics now probe the stored session when already connected, instead of asking for\ncredentials that are not on screen in that state<\/li>\n<li>Added token lifetime and automatic renewal checks, including whether WP-Cron has the\nkeep-alive scheduled<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Confirmed the live auth contract: principal + credential, Bearer token, 1 hour access\ntoken, 2 hour refresh token<\/li>\n<li>Authorization header now uses the token_type the server returns<\/li>\n<li>Sessions renew automatically: refresh first, then re-authenticate with stored\ncredentials when the refresh token has also lapsed<\/li>\n<li>New \"Stay connected\" option, on by default, storing the password encrypted<\/li>\n<li>Scheduled keep-alive every 30 minutes so quiet stores do not lose the connection<\/li>\n<li>Session state shown on the Connection tab and in the health checks<\/li>\n<\/ul>\n\n<h4>0.3.3<\/h4>\n\n<ul>\n<li>Authentication no longer retries alternate field shapes after a rejected account,\nwhich previously replaced the real error with a misleading one<\/li>\n<li>Error messages now read the platform's semantic code rather than the HTTP status,\nwhich this API uses loosely (400 for authentication failures)<\/li>\n<\/ul>\n\n<h4>0.3.2<\/h4>\n\n<ul>\n<li>Fixed authentication: the API expects \"credential\" (singular), not \"credentials\"<\/li>\n<li>Validation errors from the API now name the offending field on screen<\/li>\n<\/ul>\n\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>Added a step-by-step connection diagnostic on the Connection tab<\/li>\n<li>Authentication errors now explain what the status code means instead of showing a bare failure<\/li>\n<li>API host can no longer be saved or rendered blank<\/li>\n<li>Authentication retries once with username\/password if principal\/credentials is rejected as malformed<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Order meta box: rate shop an order and buy a label without leaving WooCommerce<\/li>\n<li>Shipment records stored per order, with void and full history<\/li>\n<li>New Shipped order status, inserted after Completed<\/li>\n<li>Configurable order status and customer email after shipping<\/li>\n<li>Tracking on the customer order page, in order emails, and in My Account<\/li>\n<li>Built-in tracking URLs for fifteen carriers, plus a fallback pattern<\/li>\n<li>Bulk action: ship selected orders from the list screen<\/li>\n<li>Shipment column on the orders list<\/li>\n<li>Box packing with a configurable box list<\/li>\n<li>Deactivation feedback prompt<\/li>\n<li>HPOS order screens supported alongside the legacy post table<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>AMZ Prep branding in the settings header, connection panel and admin notices<\/li>\n<li>Logo mark carries a live connection status indicator<\/li>\n<li>Logos ship as WebP with PNG fallbacks<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release: authentication, live rate quoting, markup, service management,\ntest quote tool, health checks.<\/li>\n<\/ul>","raw_excerpt":"Live shipping rates from your AMZ Prep Parcel account, shown at WooCommerce checkout.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/348963","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=348963"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/arishekarn"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=348963"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=348963"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=348963"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=348963"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=348963"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=348963"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}