{"id":102,"date":"2026-06-12T14:23:04","date_gmt":"2026-06-12T14:23:04","guid":{"rendered":"https:\/\/2026.quickfreeze.com\/engineering-guide\/wms-api-integration\/"},"modified":"2026-06-25T09:52:28","modified_gmt":"2026-06-25T09:52:28","slug":"wms-api-integration","status":"publish","type":"page","link":"https:\/\/quickfreeze.com\/es\/engineering-guide\/wms-api-integration\/","title":{"rendered":"WMS &#038; API Integration"},"content":{"rendered":"<style>\n.qf-eg-eyebrow{display:block;text-transform:uppercase;letter-spacing:.14em;font-size:.85rem;font-weight:700;opacity:.85;margin-bottom:.4rem;}\n.qf-eg-table{width:100%;border-collapse:collapse;font-size:.9rem;margin:1.25rem 0;background:#fff;}\n.qf-eg-table th{background:var(--qf-blue,#005EB8);color:#fff;text-align:left;padding:.55rem .8rem;border:1px solid #c9d4e0;font-weight:600;}\n.qf-eg-table td{padding:.55rem .8rem;border:1px solid #c9d4e0;vertical-align:top;}\n.qf-eg-table tbody tr:nth-child(even){background:#eef2f7;}\n.qf-eg-note{background:#fff8e8;border-left:5px solid #e8a317;padding:1rem 1.25rem;margin:1.5rem 0;border-radius:0 6px 6px 0;}\n.qf-eg-note p{margin:.35rem 0;}\n.qf-eg-faq details{background:#fff;border:1px solid #d9e1ea;border-radius:6px;margin:.6rem 0;padding:.7rem 1rem;}\n.qf-eg-faq summary{font-weight:600;cursor:pointer;color:var(--qf-dark,#101820);}\n.qf-eg-faq details p{margin:.6rem 0 .3rem;}\n.qf-eg-pager{display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap;}\n.qf-eg-pager a{font-weight:700;color:var(--qf-blue,#005EB8);text-decoration:none;}\n.qf-eg-pager a:hover{text-decoration:underline;}\n.qf-eg-code{background:#101820;color:#e8edf3;padding:.85rem 1rem;border-radius:6px;font-size:.85rem;overflow-x:auto;display:block;}\n<\/style>\n<div class=\"qf-hero\">\n<span class=\"qf-eg-eyebrow\">Engineering Guide &middot; Section 6 of 6<\/span><\/p>\n<h1>Integraci\u00f3n de WMS y API<\/h1>\n<p class=\"lead\">Without integration, every QFM runs a timer set for the slowest SKU; with it, each pallet gets its own cycle time \u2014 and documented throughput gains of 25&ndash;30% follow.<\/p>\n<\/div>\n<div class=\"qf-section\">\n<div class=\"qf-container\">\n<h2>Why Integrate<\/h2>\n<p class=\"section-sub\">Per-SKU dynamic cycle times are the single largest operational lever in a QFM room.<\/p>\n<p>Out of the box, a QFM starts a cycle with a generic timer set for the slowest SKU in the building, then refines the finish from real conditions (seal quality, temperature, pauses). That is safe but conservative: fast-freezing product sits finished, occupying a blast position it no longer needs. Field cycle-time settings across operators range from <strong>25 to 72 hours<\/strong> \u2014 a single worst-case timer leaves most of that spread on the table. Connecting the WMS closes it: the scanned SKU sets the cycle, and the WMS learns the moment each pallet is done.<\/p>\n<table class=\"qf-eg-table\">\n<thead>\n<tr>\n<th>Improvement<\/th>\n<th>Documented gain<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Relocation timing alone \u2014 pulling pallets when actually done instead of on the worst-case timer<\/td>\n<td>~15% throughput<\/td>\n<\/tr>\n<tr>\n<td>Full integration \u2014 per-SKU cycle times + relocation eligibility + full-occupancy management<\/td>\n<td>25&ndash;30% total throughput (given refrigeration capacity)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The WMS-side pattern is deliberately simple: add a <strong>Freezing Dwell Time<\/strong> attribute to the item master; when a pallet is scanned into a known freezing position its status goes <strong>Received &rarr; Freezing<\/strong> (with a temporary hold), and when the cycle completes it becomes <strong>Eligible for Relocation<\/strong>. The pallet stays in its position until a fresh inbound pallet needs the slot \u2014 relocation orders pull from the eligible list \u2014 which keeps the freezer at full occupancy instead of half-empty between waves. Typical dwell-time mixes run 16&ndash;30 hours, so fast pallets turn fast instead of waiting on the slowest product in the room.<\/p>\n<\/div>\n<\/div>\n<div class=\"qf-section alt\">\n<div class=\"qf-container\">\n<h2>Integration Mechanics<\/h2>\n<p class=\"section-sub\">One secured endpoint and a per-facility API key \u2014 set cycles, pause\/resume, and read status, by unit or by zone.<\/p>\n<p>Your WMS or building-automation system talks to QFM over a single HTTPS endpoint issued per facility, authenticated with your own <code>X-QF-API-Key<\/code> header. You address units by <strong>QFM serial<\/strong> (validated against the rack location as a safety check, so you can&rsquo;t adjust the wrong unit) or whole zones by their <strong>zone ID<\/strong> &mdash; scoped to your own units and zones only.<\/p>\n<p><code class=\"qf-eg-code\">GET or POST  https:\/\/qfmonitoring.com\/api\/v1\/integrations\/http\/{your-routing-key}<\/code><\/p>\n<p>A <code>COMMAND<\/code> parameter selects the action (it defaults to <code>set_cycle<\/code>):<\/p>\n<table class=\"qf-eg-table\">\n<thead>\n<tr>\n<th>Command<\/th>\n<th>What it does<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>set_cycle<\/code><\/td>\n<td>Set run time when a pallet is scanned in \u2014 pass <code>INCUBATION<\/code> (whole hours) <em>o<\/em> an <code>ITEM_NUMBER<\/code> and let the SKU library set the hours. <code>PALLET_TAG<\/code> y <code>PO<\/code> are echoed back on completion.<\/td>\n<\/tr>\n<tr>\n<td><code>pause<\/code> \/ <code>resume<\/code><\/td>\n<td>Hold or restart the fans. An optional <code>DURATION<\/code> (minutes) is a dead-man timer that auto-resumes if a resume is missed.<\/td>\n<\/tr>\n<tr>\n<td><code>poll<\/code><\/td>\n<td>Read the latest status, plenum temperature, &Delta;P, seal quality, and hours remaining.<\/td>\n<\/tr>\n<tr>\n<td>bulk (POST)<\/td>\n<td>POST a JSON array to act on many units in one call; each element is authorized individually.<\/td>\n<\/tr>\n<tr>\n<td>zone<\/td>\n<td>Address a <code>ZONE<\/code> ID to poll an aggregate (avg plenum temp, ready\/running\/offline counts, good-seal %) or pause\/resume every unit in the zone.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Every unit call carries <code>QFM_SERIAL<\/code> y <code>RACK_LOCATION<\/code>; a <code>poll<\/code> returns the unit&rsquo;s current <code>status<\/code>, one of:<\/p>\n<table class=\"qf-eg-table\">\n<thead>\n<tr>\n<th>STATE<\/th>\n<th>Meaning<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>READY<\/code><\/td>\n<td>Ready for a pallet<\/td>\n<\/tr>\n<tr>\n<td><code>SEAL_TEST<\/code><\/td>\n<td>Cycle started, seal test in progress (up to 5 minutes)<\/td>\n<\/tr>\n<tr>\n<td><code>RUNNING<\/code><\/td>\n<td>Seal test passed, cycle running<\/td>\n<\/tr>\n<tr>\n<td><code>BAD SEAL<\/code><\/td>\n<td>Ran 5 minutes without achieving an acceptable seal<\/td>\n<\/tr>\n<tr>\n<td><code>PAUSE<\/code><\/td>\n<td>Paused by controls or schedule \u2014 fan and timer stopped<\/td>\n<\/tr>\n<tr>\n<td><code>COMPLETE<\/code><\/td>\n<td>Cycle finished, pallet still present<\/td>\n<\/tr>\n<tr>\n<td><code>BLOW_OUT<\/code><\/td>\n<td>Post-completion blow-out running after pallet removal<\/td>\n<\/tr>\n<tr>\n<td><code>BOOT_UP<\/code><\/td>\n<td>Initializing \u2014 about 2 minutes after power-up<\/td>\n<\/tr>\n<tr>\n<td><code>MOTOR_FAILURE<\/code><\/td>\n<td>Fan motor fault \u2014 service condition<\/td>\n<\/tr>\n<tr>\n<td><code>SENSOR_FAILURE<\/code><\/td>\n<td>LIDAR or temperature sensor fault \u2014 service condition<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>You do not have to poll: cycle completion can also be pushed \u2014 QFMonitoring sends a &#8220;cycle done&#8221; message to the WMS, in addition to the SMS\/email notifications, dashboard status, and the unit&#8217;s LED. Most integrations use the push for workflow and the poll for reconciliation.<\/p>\n<div class=\"qf-eg-note\">\n<p><strong>Design pitfall \u2014 serial-to-location mapping accuracy.<\/strong> The integration is only as good as the QFM_SERIAL &harr; RACK_LOCATION mapping: a wrong mapping means setting cycle times on the wrong unit. QuickFreeze supplies the mapping as a spreadsheet, and each unit&#8217;s metadata (rack location, circuit order) is assigned in the field via the QR-code form on the side of the unit. Validate before go-live \u2014 triggering units one at a time by location code and confirming the physical unit responds is the proven check.<\/p>\n<\/div>\n<p style=\"margin-top:1.5rem;\">This is the overview. The <strong>full reference<\/strong> &mdash; copy-paste request\/response examples for every command, the bulk and zone calls, the callback payloads, and the rejection reasons &mdash; is in the <a href=\"\/es\/qfm-api\/\"><strong>QuickFreeze QFM API Guide &rarr;<\/strong><\/a>. Your routing key, API key, the serial&harr;location map, zone IDs, and a test sandbox are issued at integration setup.<\/p>\n<\/div>\n<\/div>\n<div class=\"qf-section\">\n<div class=\"qf-container\">\n<h2>SKU Libraries<\/h2>\n<p class=\"section-sub\">The dwell-time knowledge base that makes per-SKU cycles work.<\/p>\n<p>The QFM dashboard maintains a <strong>SKU Library<\/strong> \u2014 pre-populated from the SKUs actually located in your rooms \u2014 where each item carries its dwell hours, customer, and description. Paired with a WMS integration, the library automatically adjusts QFM run times based on the SKU scanned to the unit, with no operator timer management. Dwell values come from three sources, in rising order of confidence: the customer&#8217;s existing standard, the storage commodity-code manual, and on-site time studies of the actual product. Start with what you have; the logged cycle data sharpens the numbers from the first week of operation. (For what drives the hours themselves \u2014 solution percentage, case weight, room temperature \u2014 see <a href=\"\/es\/engineering-guide\/refrigeration-capacity\/\">Section&nbsp;1<\/a> and the <a href=\"\/es\/heat-load-calculator\/\">Calculadora de carga t\u00e9rmica<\/a>.)<\/p>\n<\/div>\n<\/div>\n<div class=\"qf-section alt\">\n<div class=\"qf-container\">\n<h2>Process and Commercial Terms<\/h2>\n<p class=\"section-sub\">Four steps, about a month of calendar time, and a budgetary price of zero.<\/p>\n<table class=\"qf-eg-table\">\n<thead>\n<tr>\n<th>Phase<\/th>\n<th>What happens<\/th>\n<th>Duration<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1. Scoping call<\/td>\n<td>Workflow defined end-to-end (swimlane diagram): which scans trigger which calls, who notifies whom<\/td>\n<td>1 call<\/td>\n<\/tr>\n<tr>\n<td>2. Parallel build<\/td>\n<td>QuickFreeze configures the integration endpoint and mapping; your IT builds the WMS side<\/td>\n<td>Concurrent<\/td>\n<\/tr>\n<tr>\n<td>3. Sandbox integration<\/td>\n<td>Joint testing against a sandbox before any production unit is touched<\/td>\n<td>~3&ndash;4 weeks<\/td>\n<\/tr>\n<tr>\n<td>4. Go-live<\/td>\n<td>Mapping validated, push notifications confirmed, production cutover<\/td>\n<td>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Cost:<\/strong> QuickFreeze is currently not charging for integrations \u2014 the budgetary number is <strong>$0.00<\/strong> \u2014 with one reservation: the right to rate-limit if request volume becomes excessive. There is no per-call fee and no subscription tied to the API itself.<\/p>\n<\/div>\n<\/div>\n<div class=\"qf-section\">\n<div class=\"qf-container\">\n<h2>Documents &amp; Related Reading<\/h2>\n<p class=\"section-sub\">The network prerequisites, the unit spec, and the live dashboard.<\/p>\n<div class=\"qf-grid\">\n<div class=\"qf-card\">\n<span class=\"card-tag\">MKT-212<\/span><\/p>\n<h3>Requisitos de red<\/h3>\n<p>Integration presumes connected units \u2014 the firewall and DHCP requirements every QFM needs first.<\/p>\n<p><a href=\"https:\/\/quickfreeze.com\/es\/docs\/mkt-212\/\">Ver<\/a> - <a href=\"https:\/\/quickfreeze.com\/es\/docs\/mkt-212\/download\/\">Descargar<\/a><\/p>\n<\/div>\n<div class=\"qf-card\">\n<span class=\"card-tag\">MKT-199<\/span><\/p>\n<h3>Ficha t\u00e9cnica de QFM<\/h3>\n<p>The unit itself \u2014 dimensions, mounting, and the hardware your serial numbers refer to.<\/p>\n<p><a href=\"https:\/\/quickfreeze.com\/es\/docs\/mkt-199\/\">Ver<\/a> - <a href=\"https:\/\/quickfreeze.com\/es\/docs\/mkt-199\/download\/\">Descargar<\/a><\/p>\n<\/div>\n<div class=\"qf-card\">\n<span class=\"card-tag\">Demo<\/span><\/p>\n<h3>Panel de control de ejemplo<\/h3>\n<p>The monitoring layer your integration runs alongside \u2014 SKU Library, unit states, and notifications.<\/p>\n<p><a href=\"\/es\/sample-dashboard\/\">View the sample dashboard &rarr;<\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"qf-section alt\">\n<div class=\"qf-container\">\n<h2>Integration FAQ<\/h2>\n<p class=\"section-sub\">Asked by WMS and EDI developers on real integrations.<\/p>\n<div class=\"qf-eg-faq\">\n<details>\n<summary>Is the API REST with POST\/PUT verbs?<\/summary>\n<p>The integration contract is HTTP GET with URL parameters over SSL, authenticated by a per-customer header; the server responds 200 on success. It is deliberately minimal \u2014 two calls (set cycle time, poll state) cover the standard workflow. Anything beyond the standard contract is defined at the scoping call.<\/p>\n<\/details>\n<details>\n<summary>Is there a sandbox before we touch production units?<\/summary>\n<p>Yes \u2014 sandbox integration is a formal phase of every rollout, typically quoted at 3&ndash;4 weeks, and go-live does not happen until the joint testing and mapping validation pass.<\/p>\n<\/details>\n<details>\n<summary>Can completion push to our WMS instead of us polling?<\/summary>\n<p>Yes. When a cycle finishes, QFMonitoring can send a cycle-done message to the WMS, alongside the SMS\/email notification, the dashboard update, and the unit LED change. Poll the state endpoint for reconciliation rather than as the primary signal.<\/p>\n<\/details>\n<details>\n<summary>What does the integration cost?<\/summary>\n<p>The budgetary number is $0.00 \u2014 QuickFreeze currently does not charge for integrations. The one reserved right is rate-limiting if request volume becomes excessive, which a sanely scheduled WMS will never hit at ~1 call per pallet event.<\/p>\n<\/details>\n<details>\n<summary>How do we trust the serial-to-location mapping?<\/summary>\n<p>QuickFreeze provides the QFM serial &harr; rack location mapping as a spreadsheet, and each unit&#8217;s location metadata is set in the field via the QR-code form on the unit. Validate it before go-live by commanding units individually by location code and physically confirming the right unit responds \u2014 mis-mapping is the one failure mode that silently freezes the wrong pallet on the wrong clock.<\/p>\n<\/details>\n<\/div>\n<div class=\"qf-eg-pager\" style=\"margin-top:2rem;\">\n<a href=\"\/es\/engineering-guide\/wifi-networking\/\">&larr; Section 5: WiFi &amp; Networking<\/a><br \/>\n<a href=\"\/es\/engineering-guide\/\">Back to the Guide Overview &rarr;<\/a>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"qf-section dark\">\n<div class=\"qf-container\">\n<h2>Schedule an Integration Scoping Call<\/h2>\n<p class=\"section-sub\">One call defines the workflow; your team and ours build in parallel from there.<\/p>\n<div class=\"wp-block-buttons\" style=\"display:flex;gap:1rem;justify-content:center;flex-wrap:wrap;\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link\" href=\"\/es\/contact\/\">Contact Sales &amp; Engineering<\/a><\/div>\n<div class=\"wp-block-button is-style-outline\"><a class=\"wp-block-button__link\" href=\"\/es\/heat-load-calculator\/\">Ejecuta la calculadora de carga t\u00e9rmica<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Engineering Guide &middot; Section 6 of 6 WMS &amp; API Integration Without integration, every QFM runs a timer set for the slowest SKU; with it, each pallet gets its own cycle time \u2014 and documented throughput gains of 25&ndash;30% follow. Why Integrate Per-SKU dynamic cycle times are the single largest operational lever in a QFM&#8230;<\/p>","protected":false},"author":0,"featured_media":0,"parent":96,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_seopress_titles_title":"WMS & API Integration with QFMonitoring | QFM Engineering Guide","_seopress_titles_desc":"Tie your WMS to QFMonitoring: per-SKU cycle times, freezing dwell-time item-master pattern, state polling, and a typical 3-4 week integration project.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-102","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/quickfreeze.com\/es\/wp-json\/wp\/v2\/pages\/102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/quickfreeze.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/quickfreeze.com\/es\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/quickfreeze.com\/es\/wp-json\/wp\/v2\/comments?post=102"}],"version-history":[{"count":3,"href":"https:\/\/quickfreeze.com\/es\/wp-json\/wp\/v2\/pages\/102\/revisions"}],"predecessor-version":[{"id":563,"href":"https:\/\/quickfreeze.com\/es\/wp-json\/wp\/v2\/pages\/102\/revisions\/563"}],"up":[{"embeddable":true,"href":"https:\/\/quickfreeze.com\/es\/wp-json\/wp\/v2\/pages\/96"}],"wp:attachment":[{"href":"https:\/\/quickfreeze.com\/es\/wp-json\/wp\/v2\/media?parent=102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}