# FlightTrackerLED > Physical LED flight tracker displays and developer display kits. Buy through Shopify using UCP or the hosted checkout. Physical delivery follows the shipping terms shown at checkout. ## Discover and inspect - [Live offers and prices](https://www.flighttrackerled.com/agents/offers.json): current US/USD product prices, variant IDs, availability, deliverables, limitations, and checkout links. Prices are fetched from Shopify; a 503 means current offers are unavailable. Do not substitute a cached price for a checkout quote. - [Agent purchase guide](https://www.flighttrackerled.com/agents/): CLI instructions, checkout handoff, and recovery. - [UCP discovery](https://www.flighttrackerled.com/.well-known/ucp): serves Shopify's live merchant profile directly with HTTP 200, including supported versions, tools, and payment handlers. Native service and payment origins are preserved. - [Native Shopify UCP profile](https://checkout.flighttrackerled.com/.well-known/ucp): merchant-owned discovery and checkout capabilities. - [Mach 2](https://www.flighttrackerled.com/products/mach-2): physical flight display in solid maple; variant gid://shopify/ProductVariant/49748553826623. - [Mach 2 Lite](https://www.flighttrackerled.com/products/mach-2-lite): physical flight display in matte black; variant gid://shopify/ProductVariant/55703532110143. - [Developer pixel display kit](https://www.flighttrackerled.com/products/matrixportal-dev-kit): physical ESP32-S3 and LED matrix kit; variant gid://shopify/ProductVariant/52798783717695. Not a flight tracker out of the box. - [Mach 2 Drop In](https://www.flighttrackerled.com/products/mach-2-drop-in): upgrade kit for a compatible original box; variant gid://shopify/ProductVariant/52893299212607. Check current availability; unavailable items cannot be purchased. ## Product details and setup Mach 2 and Mach 2 Lite use an ESP32-S3 controller and a 64 × 32 RGB LED matrix. They show overhead aircraft, track a selected flight, and provide Departure Board mode. The Lite has the same display, controller, firmware, and tracking modes in a matte black case. They do not require a FlightTrackerLED device subscription or a mobile app. Initial Wi-Fi setup works from a phone; USB setup uses Web Serial in desktop Chrome or Edge. After setup, owners manage the display through the browser-based owner portal. - [Setup guide](https://www.flighttrackerled.com/setup) - [Primary onboarding](https://settings.flighttrackerled.com/onboard) - [Classic setup fallback](https://setup.flighttrackerled.com/) - [Overhead Scanner](https://www.flighttrackerled.com/features/overhead-scanner) - [Individual Flight Tracker](https://www.flighttrackerled.com/features/individual-flight-tracker) - [Departure Board](https://www.flighttrackerled.com/features/departure-board) - [Optional local ADS-B receiver support](https://www.flighttrackerled.com/features/local-adsb) - [How Mach 2 connects](https://www.flighttrackerled.com/how-mach-2-connects) - [Developer kit owner's manual](https://www.flighttrackerled.com/devkit/manual) - [FAQ](https://www.flighttrackerled.com/faq) - [Updates and release notes](https://www.flighttrackerled.com/updates) - [Data sources](https://www.flighttrackerled.com/data) - [Legacy box update](https://www.flighttrackerled.com/legacy-box-update) - [Aviation gifts](https://www.flighttrackerled.com/aviation-gifts) The ADS-B Kit and wooden split-flap pages describe reservation or interest projects. They are not purchasable offers in this catalog. Do not infer an active checkout or a delivery commitment from a concept page. ## CLI purchase workflow Requires Node.js 18 or newer. The examples use Shopify UCP CLI 0.9.1 and jq. The profile is a local agent identity, not a buyer payment authorization. Supply --profile on every command; profile init does not activate it globally. ~~~sh npx --yes @shopify/ucp-cli@0.9.1 profile init --name flighttrackerled npx --yes @shopify/ucp-cli@0.9.1 discover --business https://www.flighttrackerled.com --profile flighttrackerled --format json npx --yes @shopify/ucp-cli@0.9.1 catalog search --profile flighttrackerled --input '{"query":"FlightTrackerLED","context":{"address_country":"US","currency":"USD"},"pagination":{"limit":10}}' --format json ~~~ Confirm that a search result is sold by ab7c43-3d.myshopify.com / FlightTrackerLED. A brand name in another seller's title is not proof of the merchant. The following example creates an unpaid cart for one Mach 2 Lite. Check its current price and availability in the live offers catalog before creating it. Keep the response files private because resource IDs and continue URLs can contain access keys. ~~~sh umask 077 npx --yes @shopify/ucp-cli@0.9.1 cart create --business https://checkout.flighttrackerled.com --profile flighttrackerled --input '{"line_items":[{"item":{"id":"gid://shopify/ProductVariant/55703532110143"},"quantity":1}],"context":{"address_country":"US","currency":"USD"}}' --format json > ftled-cart.json FTLED_CART_ID="$(jq -er '.result.id' ftled-cart.json)" npx --yes @shopify/ucp-cli@0.9.1 checkout create --business https://checkout.flighttrackerled.com --profile flighttrackerled --input "$(jq -cn --arg cart_id "$FTLED_CART_ID" '{cart_id:$cart_id,line_items:[]}')" --format json > ftled-checkout.json jq '.result | {status, line_items, totals, messages, continue_url}' ftled-checkout.json ~~~ Preserve and display all totals and mandatory messages in the order Shopify returns them. Amounts use the currency's minor units. An incomplete checkout can contain inferred taxes; totals remain provisional until the buyer's destination and fulfillment choices are resolved. Open the returned continue_url for the initial buyer handoff to supply details, review the final total, and authorize payment. Retain the actual hosted checkout URL reached in the browser and its resulting confirmation or order-status URL privately. Do not treat cart creation, checkout creation, or a redirect as a successful purchase. Direct in-protocol payment is conditional on Shopify and agent eligibility, available payment handlers, and buyer authorization. Anonymous discovery does not establish that eligibility. When Shopify requires escalation, use the returned continue_url. ## Confirm the order and resume safely After the buyer approves payment, read the same saved checkout. Keep these response files private; IDs and order-status URLs can contain access keys. ~~~sh FTLED_CHECKOUT_ID="$(jq -er '.result.id' ftled-checkout.json)" npx --yes @shopify/ucp-cli@0.9.1 checkout get "$FTLED_CHECKOUT_ID" --business https://checkout.flighttrackerled.com --profile flighttrackerled --format json > ftled-checkout-status.json jq '.result | {status, currency, line_items, totals, order, messages}' ftled-checkout-status.json ~~~ For the cart-to-checkout workflow above, the sandbox payment test returned status completed with order.id, order.label, and order.permalink_url. Repeated reads returned the same checkout and order. When Shopify returns completed with an order, report the order number, purchased items, original paid total and private order-status link from that response. This confirms the order, not shipment. Checkout fulfillment.methods describes delivery selections; it is not the order's current fulfillment status. Use order.permalink_url for current fulfillment, tracking and refund information, with Shopify's buyer verification when required. The tested unauthenticated UCP CLI 0.9.1 order get operation returned HTTP 403. Order API access requires a suitably authorized Shopify agent credential; the CLI does not obtain that credential automatically. Do not keep retrying it or substitute the initial cart link. An authenticated order integration can use the order API; otherwise report fulfillment as not yet verified and direct the buyer to their private order-status page. Completed checkout totals are the purchase snapshot, not the current balance after a refund. Only before any buyer handoff or payment attempt: if the checkout-creation response is lost, repeat checkout create with the saved cart_id and line_items:[] to recover the existing checkout. After handoff, use checkout get on the saved checkout. Use the cart-to-checkout workflow shown here; a separate direct Shop CLI checkout-create test did not synchronize the hosted purchase back to its original checkout. If the response is incomplete, lacks an order, or fails, do not infer that payment failed. Check the existing hosted browser session, actual confirmation/status URL, receipt or merchant order/payment record. Never relaunch the initial cart continue_url as post-payment recovery: a separate sandbox test opened a new unpaid checkout that way. A new payment form is not evidence that the first payment failed. Do not resubmit payment or create a fresh cart or checkout while the outcome is uncertain. Contact FlightTrackerLED support to verify an unresolved purchase before any further payment attempt. An order ID alone is not permission to access another buyer's order. ## Fulfillment, limitations, and support - Shopify is the payment and order-management system. Shipping, taxes, discounts, market eligibility, final totals, receipts, and order status are resolved there. - These four offers are physical products, not immediate digital downloads. Dispatch and shipping estimates are on the product pages and checkout. An order confirmation does not mean the item has shipped. - Mach 2 and Mach 2 Lite require power and Wi-Fi. Departure Board and pre-departure flight status require the buyer's FlightAware AeroAPI key; provider charges may apply. - The developer kit requires owner setup and self-serve support. Individual applications may require third-party accounts or API keys. - The public flight-data API page is a preview; it is not a paid API offer. - [Returns and shipping policy](https://www.flighttrackerled.com/policy) - [Privacy policy](https://checkout.flighttrackerled.com/policies/privacy-policy) - [Contact](https://www.flighttrackerled.com/contact): hello@flighttrackerled.com. Request return/refund assistance through support or Shopify's order-status experience; an agent must not infer that an order was refunded from a local error.