# Changelog Source: https://www.zinc.com/docs/changelog Product updates and improvements to Zinc API Week of Aug 31 updates Agents can now manage their own webhooks and check their own balance, with no dashboard login required. Plus the retailer's own reason when an order is cancelled, and a round of fixes. ### Webhooks via the API Until now, a webhook URL could only be set in the dashboard — which an agent paying through [`POST /agent/orders`](/docs/v2/api-reference/agent/create-order) doesn't have. Three new endpoints close the gap: * `PUT /webhooks/endpoint` — set your webhook URL. A signing secret is minted the first time you call it. * `GET /webhooks/endpoint` — retrieve the current URL and signing secret. * `DELETE /webhooks/endpoint` — clear the URL. The secret is retained, so re-enabling later needs no change to your verification code. Private and internal addresses are rejected. Events, payloads, and signature verification are unchanged — see [Webhooks](/docs/v2/api-reference/introduction/webhooks). ### Check Your Balance `GET /wallet/me` returns your [wallet](/docs/v2/wallet) balance, so you can check funds before placing an order rather than finding out from a `402`. It's now in the OpenAPI spec and generated SDKs. ### Retailer Cancellation Reasons When a retailer cancels an order after placement, its own explanation now comes through instead of a generic message. Look for it in the item's `cancellation_reason`, in the refund note, and on the [`order.cancelled`](/docs/v2/api-reference/introduction/webhooks) webhook as `extra_data.retailer_reason`. ### Bug Fixes * **Duplicate agent payments:** A retried `POST /agent/orders` with the same [`idempotency_key`](/docs/v2/api-reference/introduction/idempotency) now returns `409` before any payment settles. Payer addresses match case-insensitively. * **Invoiced accounts:** Customers billed by invoice are no longer rejected for insufficient wallet funds. * **Payment errors on Zinc-managed accounts:** Now reported as `retailer_unavailable` rather than as a decline on your payment method. * **Rate limits:** API key traffic no longer counts against the owner's dashboard session. * **Sandbox price breakdowns:** [Sandbox](/docs/v2/api-reference/introduction/sandbox) orders now return a real `price_components` instead of `null`. Week of Aug 24 updates Zinc now orders internationally wherever our retailers do, and the sandbox emits tracking checkpoints you can build against. Plus a refreshed [zinc.com](https://zinc.com). ### Wider International Coverage You can now order to every country a retailer serves, and stores outside our catalog accept any address we can validate rather than US addresses alone. Per-retailer coverage is listed as `supported_countries` on [`GET /retailers`](/docs/v2/api-reference/retailers/list-retailers). ### Sandbox Tracking Checkpoints [Sandbox](/docs/v2/api-reference/introduction/sandbox) orders now emit tracking checkpoints as they move — label created, in transit, delivered — in the same shape a live shipment returns, so you can build and test checkpoint handling before your first live order. Item statuses follow live orders too, sitting at `ordered` between placement and shipment. ### `max_age` Minimum `max_age` must now be at least **31 seconds** on [`GET /products/{id}`](/docs/v2/api-reference/products/get-product), [`GET /products/{id}/offers`](/docs/v2/api-reference/products/get-product-offers), [`POST /agent/products/details`](/docs/v2/api-reference/agent/product-details), and [`POST /agent/products/offers`](/docs/v2/api-reference/agent/product-offers). Smaller values return a parameter error naming the constraint, and a `newer_than` timestamp is clamped to the same floor. ### Refreshed Site [zinc.com](https://zinc.com) got a redesign, and [Zinc for Agents](https://agent.zinc.com) now has a page of its own. Week of Aug 17 updates Zinc has an MCP server! Point an AI assistant at it and it can search products, place orders, follow tracking, and top up the wallet — with a person confirming anything that spends money. Plus Solana as a payment rail for agents. ### The Zinc MCP Server Connect an assistant to `https://mcp.zinc.com/mcp` and the whole ordering loop is available to it — no client to write. Nine tools across three domains: * **Orders** — `list-orders`, `get-order`, `get-order-tracking`, `prepare-order`, `place-order` * **Wallet** — `get-wallet-balance`, `prepare-topup`, `add-funds` * **Search** — `search-products` **Anything that spends money takes two steps.** The assistant prepares the order or top-up; you confirm it on a card only you can approve. Orders, tracking, search results, and your balance come back as interactive cards rather than walls of text, in clients that support them. ### Pay with Solana Agents can now pay in USDC on **Solana**, on both [x402 and MPP](/docs/v2/mpp). Every settlement is recorded by its transaction hash and each hash pays for exactly one thing. ### Idempotent Wallet Top-Ups `POST /wallet/top-up` now takes an optional [`idempotency_key`](/docs/v2/api-reference/introduction/idempotency). Pass one and a retried deposit won't charge you twice. ### Improvements * **Standard rate limit headers:** Responses now carry `RateLimit` and `RateLimit-Policy` per the IETF draft spec, on `429` and `402` too, so agent tooling can self-throttle without parsing our `X-RateLimit-` headers. The legacy headers are unchanged. * **Return label webhook:** A new [`return.label_uploaded`](/docs/v2/api-reference/introduction/webhooks) event fires when a customer-visible return label is attached to a return, with a signed `label_url` you can hand straight to your customer. * **Shipment emails:** You could already rewrite the headline and body copy in the emails we send your customers when an order ships — now you can hide either outright. * **Bulk upload notifications:** Opt into an email when a bulk upload finishes, sent once every order in the batch reaches a terminal state. ### Bug Fixes * **Multi-package orders:** Retailers that send one tracking email per package now record every package, not just the first. Week of Aug 10 updates An agent can now mint its own sandbox and place a test order without a signup in the loop. Plus Etsy, gift messages, and per-item price breakdowns. ### Agent Sandboxes `POST /sandbox/keys` mints a provisional user and a `zn_test_` [sandbox](/docs/v2/api-reference/introduction/sandbox) key with no account required. The response comes back with a runnable example order and the ordered next steps — enough for an agent to place a test order on the first try. Rate limited to 5 mints per IP per day. When the agent's user is ready to keep the work, the response's `claim_url` hands it over: signing in there merges the sandbox's order history and API key into that account, and the agent's key keeps working afterward. Claiming always requires an explicit confirmation naming the account doing the absorbing. ### Etsy Etsy search and product details are live, joining the retailers you can query through the [product endpoints](/docs/v2/api-reference/products/search). Prices are returned in the listing's native currency, with a `currency_code` alongside them. ### Gift Messages [`POST /orders`](/docs/v2/api-reference/orders/create-order) now takes an optional `gift_message` alongside `is_gift`, and Zinc types it into the retailer's own gift-message box at checkout — up to 240 characters, multi-line and emoji included. Gift fulfillment is also a hard guarantee now: an `is_gift` order is only placed once the retailer's gift option is confirmed selected, and fails as `gift_option_unavailable` if it can't be. ### Per-Item Pricing and Merchant Order IDs * **Per-item pricing:** Price breakdowns now include `cart_items`, a line item per product, so a multi-item order reconciles product by product instead of only in total. In the spec as `OrderPriceComponents.cart_items`. * **Merchant order IDs:** [`GET /orders`](/docs/v2/api-reference/orders/list-orders) returns `merchant_order_ids` and accepts a `merchant_order_id` filter. The [Orders](https://app.zinc.com/orders) table gains the column and a `merchant_order_id:` search term. ### Improvements * **Undeliverable packages:** A new `UNDELIVERABLE` tracking status marks packages the carrier or retailer has given up on — return-to-sender and the like — so they're distinguishable from packages still in transit. ### Bug Fixes * **Headless Shopify storefronts:** Stores that serve their storefront separately from their Shopify backend — `ruggable.com` among them — now resolve instead of returning `invalid_shop`. Week of Aug 3 updates Zinc's product data is no longer limited to the retailers in our catalog. Point the product endpoints at **any** Shopify store — there are millions — and search it directly. ### Every Shopify Store, Searchable **SKIMS**. **Gymshark**. **Fashion Nova**. **Bombas**. **Kylie Cosmetics**. Roughly a tenth of US ecommerce runs on Shopify, and until this week none of it was reachable unless we'd added the brand by hand. Now you just pass the store's domain as the `retailer`: * [`GET /products/search?retailer=`](/docs/v2/api-reference/products/search) — predictive search across the storefront's catalog * [`GET /products/{handle}?retailer=`](/docs/v2/api-reference/products/get-product) — per-variant pricing and availability, read from the store's own product API Same request and response shapes you already use for supported retailers — no new client code, no catalog entry, no waiting on us. Products are addressed by **BSIN** rather than the store's numeric SKU, so an item keeps one identifier across calls. Details still return the numeric `sku` too, for joining back to a search response. A domain that isn't reachable — or isn't a Shopify store — comes back as a structured negative result rather than a generic failure. `invalid_shop` returns a `400` and `product_not_found` a `404`, each with an error code you can branch on. ### Find Orders by Metadata The `metadata` you attach when creating an order is now searchable — in the API **and** in the dashboard. From the [Orders](https://app.zinc.com/orders) page, type a `metadata:` term straight into the search bar: ``` metadata:po_number=ABC123 ``` That's every order against that PO number, no export and no API call. The same filter is on [`GET /orders`](/docs/v2/api-reference/orders/list-orders) as `metadata_key` and `metadata_value`. ### Bug Fixes * **Bank transfers and auto top-up:** ACH deposits now report `pending` while they settle instead of counting as failures — no repeat charges or false failure notifications during the 1–4 day settlement window. * **MPP refunds:** Refunds now fire on every terminal path rather than one, cancelling an unbilled pending order returns the agent's prepayment, each refund posts a ledger entry so balances don't drift, and `order.placed` and its confirmation email no longer go missing. * **Duplicate tracking numbers:** Legacy-pipeline orders no longer get a second ZPY number that could never pick up checkpoints. * **Tracking emails:** More retailers' tracking emails now link themselves to the right order instead of needing manual assignment. * **Order confirmation details:** Fixed orders completing with `merchant_order_id` as `UNKNOWN` and a zeroed price breakdown. * **More reliable checkout:** Collapsed cart item lists are expanded before validation, orders that stall on a cart page are cut short, and quantity selectors are read correctly. Week of Jul 27 updates This week: Zinc can email your end customer as their order ships, and give them a tracking page of their own — no forwarding, and no templates to build on your side. ### Customer Email Notifications Orders now accept an optional `customer_notifications` block with an `email`, and Zinc handles the rest: * **A shipment email to your customer** when the order ships, with the estimated delivery date (in the subject line too), carrier, tracking number, an item summary, and the destination. Anything a retailer doesn't give us is left out rather than rendered blank. * **A tracking page for that order**, linked from the email and served on `track.zinc.com`. It's scoped to the one order and shows no account details. * **One-click unsubscribe**, per [RFC 8058](https://www.rfc-editor.org/rfc/rfc8058.html). Opting out applies to that order only, so the same address still hears about its other orders. Bounces and spam complaints suppress future sends on their own. The add-on is **\$0.25 per order** on top of the base order fee, billed the same way the rest of your usage is — prepaid wallet, metered invoicing, or per-order agent payments. Rolling out: `customer_notifications` is live on the API, but sending is still gated while we finish provisioning the sending domain. Until then the opt-in is accepted and ignored — nothing is emailed and the \$0.25 add-on isn't charged. We'll note it here when it's switched on. ### Bug Fixes * **Dates and totals in the dashboard:** Order dates and numbers were formatted against the server's timezone instead of yours, showing the wrong local time and throwing a rendering error on every [Orders](https://app.zinc.com/orders) load. Week of Jul 20 updates This week we're shipping an official npm SDK, generated from the live API spec so it can't fall behind. Plus x402 on the agent data endpoints, and a batch of fixes to agent payments and Connect. ### npm SDK Zinc now has an official JavaScript SDK, published as [`zinc`](https://www.npmjs.com/package/zinc) on npm and generated directly from the production API spec: ```bash theme={null} npm i zinc ``` Versions are CalVer and track the API version itself (e.g. `2026.7.17`), publishing automatically whenever the API version bumps — so the SDK never drifts from the API it describes. ### x402 on the Agent Data Endpoints All four agent data endpoints now accept **x402** alongside [MPP](/docs/v2/mpp): * [`POST /agent/search`](/docs/v2/api-reference/agent/search) — cross-retailer search * [`POST /agent/products/search`](/docs/v2/api-reference/agent/product-search) — per-retailer product search * [`POST /agent/products/offers`](/docs/v2/api-reference/agent/product-offers) — offers for a product * [`POST /agent/products/details`](/docs/v2/api-reference/agent/product-details) — product details Every `402` now carries both challenges — `WWW-Authenticate` for MPP and `PAYMENT-REQUIRED` for x402 — so a client can pay with whichever rail it speaks. ### Improvements * **Discounts and fees on order totals:** `PriceComponents` and `OrderPriceComponents` now include `discount` and `fees`, so a breakdown always foots to the charged total. * **Tracking for Shopify stores:** Shopify orders that ship without a carrier tracking number now report status and an estimated delivery date. ### Bug Fixes * **Refunds on failed data calls:** A paid `/agent` data call that fails is now refunded automatically instead of charging you for nothing, on both MPP and x402. * **Agent orders validated before charging:** Structural checks now run before any charge, so an invalid order is rejected rather than charged. * **MPP credential parsing:** The Shared Payment Token parser now reads the canonical `{"spt": ""}` payload emitted by `link-cli` and `mppx`. * **Connect holds:** Holds are now released on every terminal failure path, including cancellations and retried placements. * **Order timeline:** Retried and reversed placements now show the correct final state. * **Free gift-with-purchase items:** Promotional `$0.00` items that retailers add to the cart no longer fail orders with `invalid_product_url`. * **`max_price` and estimated shipping:** Orders are no longer rejected up front over shipping that isn't charged at checkout. Week of Jul 13 updates A cleanup week: we spent it squashing bugs and tightening up existing behavior across webhooks, returns, and the ordering pipeline. One new bit of visibility on the order page, and a lot of things that just work more reliably now. ### Webhook Deliveries on the Order Page Every webhook delivery for an order now shows up right on its detail page, so you can see exactly what we sent without leaving the order. Each attempt lists its status, HTTP response code, event type, timestamp, and error details — and you can **resend** any delivery straight from the same view. ### Bug Fixes * **Exactly-once lifecycle webhooks:** Fixed duplicate `order.started`, `order.placed`, and `order.failed` events. `order.started` now fires at the correct in-progress transition for every queue type, and `order.placed` / `order.failed` fire only on the first terminal transition — re-posted results and worker retries no longer re-notify. * **One return per item:** Each order item can now be included in only one return request, preventing duplicate returns from being opened against the same item. * **More reliable checkout:** A batch of fixes across several retailers: better address selection on accounts with a full address book, correct handling of quantity selectors, and better delivery-date parsing so valid orders aren't incorrectly blocked. * **Fewer spurious order failures:** Improved reliability in the ordering pipeline to eliminate a class of transient failures. Week of Jul 6 updates ### Pay with x402 AI agents can now pay for orders via **x402**, joining Tempo and Stripe as a supported rail on [MPP](/docs/v2/mpp). Every `402` challenge on `/agent/orders` now advertises x402 alongside the others. Need just one rail? Pass an optional `?method=` parameter (`x402`, `stripe`, or `tempo`) to return a single `402` challenge — many HTTP clients mishandle the repeated `WWW-Authenticate` headers a multi-rail `402` returns. Omit it to advertise everything; an unknown value returns `400` with the available methods. ### Wire Funding You can now fund your wallet by wire transfer, with deposits settling same-day (T+0). Find your wire details and memo code in [Settings](https://app.zinc.com/settings), and each deposit comes with a downloadable receipt. ### Carrier Delivery Estimates Order reads now include an `estimated_delivery_date` on each `tracking_numbers` entry, parsed from the carrier's own estimate (USPS, UPS, FedEx). Amazon Logistics (`TBA…`) and other direct-delivery shipments now also get **Shipped** and **Delivered** checkpoints instead of empty tracking histories. ### Improvements * **Auto top-up hardening:** Auto top-up now disables itself after 3 consecutive failed charges (firing a new `wallet.auto_topup.disabled` webhook), locks per payment method so a slow ACH deposit can't block a card top-up, and no longer enqueues duplicate top-ups on burst charges. * **Clearer address errors:** `invalid_shipping_address` now names the specific missing component (e.g. a unit number), and orders missing only a unit number — where Google verified the building — are now accepted. * **Tracking badge dropdown:** The dashboard tracking badge now copies the carrier or Zinc ZPY number and links to the carrier and 17track. ### Bug Fixes * **Transaction status in Billing:** Failed top-up attempts in [Billing](https://app.zinc.com/billing) now show a status badge, struck-through amount, and decline reason, instead of looking like successful deposits. Week of Jun 29 updates This week: carrier-independent tracking numbers, an order timeline endpoint, on-demand wallet top-ups, an estimated-delivery webhook, and a redesigned dashboard. ### Zinc Tracking Numbers Every shipment now gets a Zinc-issued **ZPY tracking number** at creation: one carrier-independent number per shipment, whatever carrier delivers it. * Returned as `zinc_tracking_number` and `zinc_tracking_url` on order reads and in `order.tracking`, `order.shipped`, and `order.delivered` webhooks * Publicly trackable via [17track](https://www.17track.net/en/carriers/zinc) ### Order Timeline A new `GET /orders/{id}/timeline` endpoint returns an order's milestones (created, placed, tracking, shipped, delivered, plus failed and cancelled) as one ordered list, merging placement logs and carrier tracking state. Works on historical orders, no changes required. ### Redesigned Dashboard The dashboard got a consistency pass and clearer structure: top-level pages show your data, Settings is where you configure things. * **Tracking and Returns pages:** New views with stat bands, status filters, and search * **Billing and Webhooks as data pages:** [Billing](https://app.zinc.com/billing) shows balance, deposits, and a filterable transaction history; [Webhooks](https://app.zinc.com/webhooks) shows the delivery log with success-rate stats * **Reorganized Settings:** One config hub for account, notifications, payments, Connect, webhooks, API keys, and managed accounts * **Stats at a glance:** Every page now leads with a stat band of sparkline cards and period-over-period deltas, so you can see how your account is trending ### Improvements * **On-demand wallet top-up:** Orders no longer fail with a `402` when auto top-up is configured. On a shortfall, Zinc charges your saved payment method, rechecks the balance, and only returns a `402` if it still can't cover the order * **Estimated delivery webhook:** A new `order.estimated_delivery_updated` webhook fires when a revised delivery ETA is detected for Amazon orders * **Free-shipping filter:** Product search accepts an optional `free_shipping` param to return only free-shipping items, on both [`/products/search`](/docs/v2/api-reference/products/search) and the MPP agent variant ### Bug Fixes * **ACH deposits labeled correctly:** ACH (`us_bank_account`) top-ups are no longer mislabeled as card charges; deposit and fee rows now show the real payment type * **Clearer fulfillment flags:** Public `PublicRetailer` fields renamed: `zinc_managed` → `no_account_needed`, `supports_accounts` → `use_your_account`. The `supported` field was removed since the public catalog only lists published retailers Week of Jun 22 updates This week is all about visibility into your orders: full carrier tracking timelines on every order read, a persisted webhook delivery log, and a new `order.shipped` event, plus pay-per-call data endpoints for AI agents. ### Carrier Tracking Checkpoints Order reads now return the full per-scan tracking timeline, so a single call gives you every carrier checkpoint. * `GET /orders/{id}` always returns the complete `checkpoints` timeline (most recent first) and an authoritative `status` on each tracking number * `GET /orders` includes `status` on every tracking number; add `?include=tracking_events` to opt into the full checkpoint timeline, so list payloads stay lean by default ### Webhook Delivery Log A new [Webhooks](https://app.zinc.com/webhooks) dashboard page brings logs and configuration together in one place. Every delivery is now persisted, so you can see exactly what we sent, when, and how your endpoint responded. ### `order.shipped` Webhook A new `order.shipped` webhook event fires when an order ships. Pair it with `order.placed`, `order.delivered`, and `order.cancelled` to follow the full order lifecycle without polling. ### Data Endpoints for Agents AI agents can now pull product data from Zinc with per-call [MPP](/docs/v2/mpp) payments (\$0.01 each), no Zinc API key required. Any request that isn't paid receives a `402` payment challenge before parameter validation, so discovery probes are never misrouted. * `GET /agent/search` — cross-retailer search (beta) * `GET /agent/products/search` — per-retailer product search * `GET /agent/products/offers` — offers for a product * `GET /agent/products/details` — product details Payments under \$0.50 offer only micropayment-capable methods (crypto / Tempo); card payments aren't available at that price point. ### Improvements * **Offer controls in CSV bulk upload:** `is_gift`, `handling_days_max`, `condition_in`, and `condition_not_in` now work in [CSV bulk uploads](/docs/v2/api-reference/orders/create-bulk-upload), matching the single-order API * **Richer validation errors:** Validation failures now return a typed `field_errors` breakdown (`field`, `code`, `message`, `received`, `expected`) * **Clearer address rejections:** US and Canada state codes are normalized at order creation, with `address_validation_reasons` explaining why an address was rejected * **One-click v1 migration:** Migrating from v1 now brings your credentials over and backfills 90 days of order history in one step Week of June 15 updates This week brings two new order constraints, plus [Stripe Connect](/docs/v2/connect) and account-settings improvements. ### Order Constraints Two new ways to control which retailer offer an order is allowed to buy: * **Filter by condition** — `condition_in` / `condition_not_in` restrict purchases to the item conditions you allow or exclude (`New`, `Refurbished`, `UsedLikeNew`, `UsedVeryGood`, `UsedGood`, `UsedAcceptable`) * **Maximum delivery time** — `max_shipping_days` caps how long an order may take to arrive; Zinc only buys an offer estimated to deliver within that window ### Improvements * **Connect charge on the order** — [`GET /orders/{id}`](/docs/v2/api-reference/orders/get-order) now includes a `connect` object with the charge breakdown and state, so there's no separate call (`null` for wallet orders) * **Self-service account settings** — Change your account email and unlink OAuth sign-in providers (e.g. Google) directly from [settings](https://app.zinc.com/settings) * **More resilient search** — `/search` no longer returns intermittent `502`s when our upstream provider is flaky * **Ordering and tracking** — Fixed issues that could leave orders stuck in progress and made polling more tolerant of retailer rate limits Week of Jun 8 updates This week we're launching Zinc Connect, a new way to have your customers pay for orders directly, plus automatic gift options at checkout. ### Zinc Connect Worried about the cash flow of keeping money in Zinc? With Zinc Connect, your customers can now pay for orders directly through Stripe. Just tell us your margin: we charge your customer, complete the order, and send you your cut in real time via Stripe Connect. A guided onboarding flow gets you set up end to end. ### Gift Options at Checkout Orders are now automatically marked as gifts during checkout when the retailer offers a free "this is a gift" option. We only use the free gift flag, never paid gift wrap or gift messages, so your order totals stay unchanged. ### Improvements * **Rate limit headers** — By request, API responses can now include the standard rate limit headers (`X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`) so your integration can pace itself * **v1 to v2 migration assistance** — Moving from v1? We can now bring your historical orders, retailer credentials, and webhook URLs over to v2 for you — reach out to [support@zinc.com](mailto:support@zinc.com) to get started Week of Jun 1 updates This week we're launching bulk order upload in the dashboard — place an entire spreadsheet of orders in one go. ### Bulk Order Upload You can now place many orders at once by dragging a CSV into the [dashboard](https://app.zinc.com/orders). Each row is one order — product URLs, quantities, a shipping address, and a max price — and Zinc validates the whole file up front, shows you a preview, and only places orders once you confirm. Every row runs through the same validation, routing, and billing as a single order, so bulk orders behave exactly like the ones you create individually. As the batch runs you get live status for each row, and when it's done you can download a results CSV with the Zinc order ID, total, and tracking for every order. It's a faster, self-serve replacement for the legacy email-based file exchange. And keep an eye out next week — we've been working on a new way to pay for orders that doesn't involve pre-funding a wallet. More soon. Week of May 25 updates This week we're opening up cross-retailer product search in beta, a redesigned product search experience in the dashboard, and smarter handling of partial cancellations and gift-card orders. ### [Cross-Retailer Search](/docs/v2/api-reference/search/cross-retailer) (Beta) The new `GET /search` endpoint returns a single ranked list of buyable products across every supported retailer — Amazon, Walmart, Target, Best Buy, Home Depot, Lowe's, Costco, eBay, Wayfair, Macy's, and more — in one call. Each result's `url` is the orderable retailer URL, so you can pass it straight to [Create order](/docs/v2/api-reference/orders/create-order). `/search` is in active development and may change before launch. We'd love your feedback — [book a 30-minute customer interview](https://cal.com/zinc-ian/customer-interview) to help shape it, and we'll send you a \$50 Amazon gift card as thanks. ### Redesigned Product Search The dashboard's Products page is now a cross-retailer [**Search**](https://app.zinc.com/search) experience. Instead of picking one retailer at a time, you search across all of them at once, with results streaming in behind skeleton loading states. New product cards show brand-colored retailer tags and click-to-copy product IDs. ### Improvements * **Partial cancellations** — Cancelling a single sub-order no longer cancels the entire order. Cancellations are now handled at the item level with proportional refunds, fixing an over-refunding issue * **Gift-card orders** — Orders fully covered by a gift card or store credit (a \$0.00 total) are no longer blocked by the max-price safety check, so they process correctly Week of May 18 updates This week we're shipping fiat payments for AI agents via the Machine Payments Protocol, return lifecycle webhooks, and USPS tracking. ### Fiat Payments for Agents Agents paying for orders via the [Machine Payments Protocol](/docs/v2/mpp) can now settle in USD using Stripe Payment Tokens (SPT) — no stablecoins, no crypto wallet required. When MPP [launched in March](#2026-03-27) agents had to pay in stablecoins on Tempo; with SPT, any agent that can hold a Stripe payment method can place orders on Zinc using regular fiat. ### Return Lifecycle [Webhooks](/docs/v2/api-reference/introduction/webhooks#return-events) Four new webhook events cover the full return lifecycle — `return.created`, `return.approved`, `return.denied`, and `return.credited` — so you can react to return status changes without polling. Each payload includes a new `return_id` field alongside `order_id`, making it easy to route events to the right return. ### USPS Tracking USPS joins FedEx, UPS, and our existing carriers as a directly-polled tracking source. Orders shipped via USPS now get the same accurate checkpoints, faster delivery confirmations, and full delivery history as everything else. ### Improvements * **Returns in sandbox** — The [returns API](/docs/v2/api-reference/returns/create-return) now routes through sandbox in test mode, so you can exercise the full return flow without touching production Week of May 11 updates This week we're shipping a new `order.cancelled` webhook event, a meaningful round of improvements to returns, and reliability fixes across the ordering and wallet flows. ### `order.cancelled` Webhook A new [`order.cancelled`](/docs/v2/api-reference/introduction/webhooks) webhook event fires when a retailer cancels an order after placement. The payload includes the cancellation reason and source so you can react without polling — your wallet is refunded automatically at the same time. ### Returns Improvements Building on the [returns API and dashboard](#2026-04-03) we launched in March, returns now feel like a complete workflow: * **Resolution notes** — When a return is closed, the notes from our review are now visible on the return * **Filter orders by return status** — The orders dashboard now lets you filter by **open** or **closed** returns for at-a-glance visibility ### Improvements * **Faster retailer-cancellation detection** — Retailer-side cancellations are now detected and refunded more quickly * **Wallet top-up safeguards** — Additional protections around concurrent top-up requests * **Pre-placement balance check** — Wallet balance is now verified against the retailer's final total (including tax and shipping) before the order is placed Week of May 4 updates This week we're launching FedEx and UPS tracking, a new `order.delivered` webhook event, and a redesigned status page. ### FedEx and UPS Tracking Zinc now polls FedEx and UPS directly for delivery status, alongside our existing carrier coverage. You'll see more accurate checkpoints, faster delivery confirmations, and a full delivery history for every shipment. ### `order.delivered` Webhook A new [`order.delivered`](/docs/v2/api-reference/introduction/webhooks) webhook event fires when every package on an order has been delivered. Pair it with `order.placed` and `order.failed` to close the loop on an order without polling. ### Status Page The new [status page](https://zinc.com/status) gives you an at-a-glance view of platform health across five service tiers — Ordering, Tracking, Product Data, API, and Dashboard — with 90 days of history for each. Every tier is rolled up from real production health checks, so what you see is what we're seeing. ### Improvements * **Per-item delivery status** — The orders dashboard now shows delivery status for each line item (delivered, shipped, ordered, processing, cancelled), so partial shipments are easier to track at a glance Week of Apr 27 updates A lighter week of feature work, focused on durability and scale. Order volume has grown a lot over the past few months, and we want Zinc to feel rock-solid at any size — so this week is about hardening the ordering pipeline and dashboard to be more resilient under that demand, with fewer transient failures and faster recovery when something does go wrong. ### Ordering Reliability A handful of improvements to our ordering pipeline to keep success rates high as volume grows: * **Faster tracking updates** — Order tracking is now polled hourly for up to 14 days after placement, so status changes land in your dashboard sooner * **Smarter retries** — Transient retailer errors now retry with unique trial IDs to avoid duplicate-detection conflicts * **More precise error mapping** — Out-of-stock products now surface as `product_unavailable` instead of a generic failure, with clearer messaging across the board ### Improvements * **Full order history** — The orders dashboard now shows your complete order history with infinite scroll pagination, instead of being capped at the 50 most recent orders * **Passkey warning** — A reminder to disable passkeys on retailer accounts is now shown when adding or editing a managed account Week of Apr 20 updates This week we're launching a redesigned billing page and automatic wallet credits from bank transfers. ### Billing Page The new [billing page](https://app.zinc.com/billing) gives you a complete picture of your spending and deposits in one place: * **Per-order cost breakdown** — Product cost and Zinc fee broken out for every order * **Deposit history** — Every deposit with a direct link to its Stripe-hosted receipt for easier accounting ### Automatic Wallet Credits from Bank Transfers ACH and wire transfers to your virtual Stripe account now credit your Zinc wallet automatically. No more emailing support to top up — send the transfer and your balance updates as soon as it arrives. Reversals are handled too. ### Improvements * **Retailer-initiated cancellations** — Orders cancelled by the retailer are now tracked under their own status and automatically requeued for a fresh attempt when we detect a cancellation email * **Full tracking numbers** — Tracking numbers in the dashboard are no longer truncated at 12 characters * **Consistent timestamps** — All timestamps in the dashboard now render in your browser's timezone with consistent formatting Week of Apr 13 updates This week we're launching Teams — a shared view of orders across your teammates — plus email deliverability improvements and a faster orders dashboard. ### Teams If your team places orders through Zinc, you can now see every teammate's orders in a single shared view, so you don't have to hop between accounts to find an order someone else placed. Teams is rolling out gradually. To get set up, reach out to [support@zinc.com](mailto:support@zinc.com) and we'll create your organization and invite your teammates. ### Email Improvements We've made order emails more useful: * **Price breakdowns in receipts** — Order emails now include subtotal, shipping, tax, and total * **Order placement emails are now opt-in** — Disabled by default due to deliverability issues; you can turn them back on from your email notification preferences ### Improvements * **Faster orders dashboard** — Added pagination and tuned backend queries so the orders page stays snappy no matter how many orders you've placed * **More reliable sign-in** — Fixed an issue where transient auth provider timeouts could briefly strip admin access; sessions now fall back to cached roles when the provider is slow Week of Apr 6 updates This week we're launching Amazon Prime support, plus email notification preferences and payment reliability improvements. ### Amazon Prime Support Zinc now supports Prime shipping on Amazon orders. If you're interested in enabling this for your account, reach out to [support@zinc.com](mailto:support@zinc.com). ### Email Notification Preferences You can now customize which email notifications you receive — including order placed and order failed alerts — directly from the dashboard settings. ### Improvements * **Duplicate transaction prevention** — Resolved a rare issue that could cause duplicate charges during payment processing * **Tracking improvements** — Better tracking number selection, with added support for znlogic tracking links Week of Mar 30 updates With returns and product data now available in v2, Zinc has reached full feature parity with the legacy v1 API. If you're still on v1, now's the time to [migrate](/docs/v2/migrating-from-v1) — v2 is the future. ### Return Request API Zinc now supports returns through a new set of API endpoints. Create return requests, list them, and check their status — all programmatically. * [`POST /returns`](/docs/v2/api-reference/returns/create-return) — create a return request for any completed order * [`GET /returns`](/docs/v2/api-reference/returns/list-returns) — list all return requests * [`GET /returns/{id}`](/docs/v2/api-reference/returns/get-return) — get the status of a specific return Returns can also be managed from the new Return Management section in the dashboard. ### Product Data API New product data endpoints are now available under `/products`, giving you programmatic access to product search, offers, and details. * [**Product search**](/docs/v2/api-reference/products/search) across supported retailers * [**Offer data**](/docs/v2/api-reference/products/get-product-offers) with pricing and availability * [**Product details**](/docs/v2/api-reference/products/get-product) by URL or identifier ### Improvements * **Timezone handling** — dates in the dashboard now display in your local timezone Week of Mar 23 updates This week we're launching support for the Machine Payments Protocol — enabling AI agents to pay for Zinc orders per-transaction, with no accounts or API keys required. ### Machine Payments Protocol (MPP) Zinc now supports the [Machine Payments Protocol](https://mpp.dev/) (MPP) — an open standard for machine-to-machine payments over HTTP. Instead of requiring API keys, subscriptions, or upfront enrollment, MPP lets AI agents pay for each order individually as part of the same HTTP request that places it. Here's how it works: an agent calls Zinc's order endpoint, receives an HTTP 402 payment challenge, fulfills the payment, and gets the order confirmation back — all in a single exchange. No checkout forms, no stored credentials, no human in the loop. * **Stablecoin payments via Tempo** — Agents can pay per-transaction using stablecoins on [Tempo](https://tempo.xyz), with fast settlement and predictable costs * **Stripe Payment Tokens** — Support for Stripe-based fiat payments via SPT coming soon * **Automatic refunds** — If an order fails, the payment is automatically refunded * **Partial refunds** — When the final order price is less than the agent's `max_price`, the difference is refunded Try it out in the [Agent Playground](https://agent.zinc.com), or check out the [MPP guide](/docs/v2/mpp) and [create order endpoint](/docs/v2/api-reference/agent/create-order) to get started. Zinc Agent Playground — let your agents buy anything online ### Bug Fixes * **Legacy v1 API fix** — Resolved an issue where quantity was hardcoded to 1 in legacy v1 API order requests Week of Mar 16 updates This week brings API key rotation, expanded retailer information, and improved order reliability — plus a preview of what's coming next. ### Coming Soon: Machine Payments Protocol (MPP) We're building native support for the [Machine Payments Protocol](https://mpp.dev/) — a fully-agentic purchasing protocol that lets AI agents pay for orders programmatically. MPP support will go live early next week with Tempo and Stripe as payment methods, starting with Amazon and Zinc retailers. Stay tuned. ### API Key Rotation You can now rotate your API keys directly from the credentials dashboard. Key rotation lets you cycle credentials without downtime — generate a new key, migrate your integrations, then revoke the old one. ### Expanded Retailer Information The retailer status API now includes a `supported_countries` field, making it easier to programmatically check which countries each retailer can ship to. ### Improvements * **Merchant order IDs in order results** — `merchant_order_id` is now included in order responses for easier cross-referencing with retailer records * **Smarter order retries** — Retried orders now correctly preserve variant information, retailer credentials, PO numbers, and metadata from the original order * **Webhook reliability** — Fixed sandbox webhook processing issues * **Better international address autocomplete** — Improved address suggestions for international orders * **More accurate order pricing** — Better extraction of order price details when payment currency differs from the listing currency Week of Mar 9 updates This week brings Great Britain shipping, smarter international currency handling, estimated delivery dates, and improved order reliability. ### Great Britain Shipping Zinc now supports shipping to Great Britain, continuing our expansion of international address coverage. GB addresses are fully validated during order creation. ### International Currency Support Orders placed on international retailers now automatically handle foreign currency conversion. Non-USD order totals are converted to USD at charge time with a configurable FX markup (3% default) applied to conversion rates as a buffer against exchange rate fluctuations. This means you can place orders on retailers in EUR, AUD, GBP, and other currencies without worrying about currency handling — Zinc takes care of it. ### Estimated Delivery Dates When provided by the retailer, estimated delivery dates are now included in your order details. ### Improvements * **More reliable merchant order IDs** — Fixed handling of edge cases where merchant order IDs aren't immediately available after checkout * **Enhanced error handling** — More resilient parsing and retry logic for smoother order completion Week of Mar 2 updates This week brings Home Depot support, estimated delivery dates, international currency handling, and a new retailer status page. ### Home Depot Support Zinc now supports placing orders on **Home Depot**, expanding our retailer coverage to one of the largest home improvement retailers. ### Estimated Delivery Dates If provided by the retailer, Zinc will now extract estimated delivery dates during the checkout process and include them in your order details. ### International Currency Support Orders placed on retailers that use non-USD currencies are now automatically converted to USD at charge time. This makes it easier to place orders on international retailers without worrying about currency handling. ### Retailer Status Page We've added a user-facing [retailer status page](https://app.zinc.com/retailers) so you can monitor which retailers are currently supported and their operational status. ### Improvements * **Better rural address support** — Fixed validation failures for rural and highway addresses where USPS data is limited * **Clearer validation errors** — Enhanced error messages for invalid addresses * **Max price display** — The order detail page in the dashboard now shows the max price set for each order * **Direct product links** — Order details now include direct links to the product URL * **Editable addresses** — Address fields are now editable in the create order flyout after selection Week of Feb 23 updates This week brings Canadian shipping support, saved payment selection for managed accounts, and improved tracking reliability. ### Canadian Shipping Addresses Zinc now supports shipping to Canada, continuing our expansion of international address coverage. Canadian addresses are fully validated during order creation. ### Saved Payment Selection When using managed accounts, you can now select which saved payment method to use for an order. If you have multiple cards on file with a retailer, you can specify exactly which one Zinc should use during checkout. ### LaserShip Tracking Support Orders shipped via LaserShip now include tracking numbers, giving you visibility into deliveries from this regional carrier. ### Improvements * **Better tracking extraction** — Improved tracking number and verification code extraction with fewer false positives * **Smarter email filtering** — Enhanced filtering of emails before extracting tracking and verification data * **More accurate merchant order IDs** — Improved extraction of merchant order IDs from retailer confirmations Week of Feb 16 updates This week brings expanded retailer support with account-less checkout, international shipping to new regions, and improved order reliability. ### Account-less Checkout for Walmart, Target & Wayfair Until now, Zinc-managed checkout accounts were only available for Amazon. This week, we're bringing the same experience to **Walmart**, **Target**, and **Wayfair** — meaning you can place orders on these retailers without creating or managing your own accounts. Just provide a shipping address and payment method, and Zinc handles the rest using our managed credentials. This is a major step forward: retailers that previously required you to bring your own account credentials are now accessible out of the box. And this is just the beginning — we'll be rolling out managed checkout to more retailers soon. ### International Shipping: New Zealand & Australia Zinc now supports shipping to New Zealand and Australia, continuing our expansion of international address coverage. Addresses for both countries are fully validated during order creation. ### Payment Verification for Managed Accounts Managed accounts now support retailer-specific payment verification. If a retailer requires additional payment confirmation during checkout, Zinc stores and uses the appropriate verification hints automatically. ### SMS Verification Code Support Our checkout system now supports OTP retrieval from forwarded SMS verification codes, in addition to email-based codes. This improves success rates for retailers that use SMS-based authentication. ### Improvements * **Smarter cart validation** — Fixed checkout failures caused by cart information no longer being displayed on the page * **Better error codes** — Added a specific `payment_verification_required` error code for clearer debugging Week of Feb 9 updates This week's highlight is the launch of our Universal Checkout Skill for AI agents, plus auto wallet top-up and better order visibility. ### Universal Checkout Skill Zinc is now available as an [Agent Skill](https://agentskills.io) — a new way for AI agents to place orders through natural language. Install the [Universal Checkout Skill](/docs/v2/agent-skills/overview) into [OpenClaw](https://openclaw.ai), Claude Code, or Gemini CLI, and your agent can search for products, place orders, and check statuses — all from a single conversation. * **Natural language ordering** — Ask your agent to buy a product by URL, and it handles the rest * **Search-to-purchase** — Pair with Brave Search to find and order products in one workflow * **Confirmation built in** — The agent always confirms before spending real money [Learn more →](/docs/v2/agent-skills/overview) ### Auto Wallet Top-up Never run out of funds mid-order. You can now configure automatic wallet top-ups that trigger whenever your balance drops below a threshold. Set your minimum balance and top-up amount from the new wallet settings page, and Zinc handles the rest. ### Order Progress Timeline Order details now include a visual timeline showing each step of the purchasing flow. See exactly where your order is and what's already been completed. ### Improvements * **Email forwarding indicators** — A new badge shows when forwarded verification emails have been detected for your managed accounts * **Better Amazon tracking** — Improved package tracking URL extraction from Amazon order emails * **International address fixes** — Fixed address validation for countries that don't require a state or province field Week of Feb 2 updates This week's highlight is a brand new retailer status page, plus stronger account security and better order visibility. ### Retailer Status Page Retailer status page Zinc now has a dedicated status page with nightly integration test results for our top retailers. We're committed to full transparency into what's working and what isn't — and we'll be expanding coverage to more retailers over time. ### TOTP Support for Retailer Credentials Managed retail accounts now support Time-based One-Time Passwords (TOTP). If your retailer account uses two-factor authentication with an authenticator app, you can provide your TOTP secret and Zinc will automatically generate codes during login — no more manual verification steps. ### Improved Order Progress Incremental order status updates Orders now report more granular progress updates as they move through each step of the purchasing flow, giving you better real-time visibility into order status. Week of Jan 26 updates This week we're focused on reliability and expanding Zinc's reach with international shipping support and B2B features. ### International Order Support Zinc now supports shipping to Germany, with more countries coming soon. International addresses are validated during order creation, and we've updated our date and currency formatting to handle international locales correctly. * **Country configuration** — Each retailer now has configurable supported shipping countries using ISO 3166-1 alpha-2 codes * **Address validation** — International addresses are validated before order creation * **Flexible formats** — Postal codes work with both `zip_code` and `postal_code` fields, and state/province fields are now optional for countries that don't require them ### Purchase Order Support For B2B customers, you can now include a purchase order number with your orders. Just pass an optional `po_number` field and we'll automatically detect PO number fields during checkout and fill them in. ### Product Variant Fixes Fixed an issue where variant verification was failing for products that have pre-selected variants on the page. Variants should now work correctly across all supported retailers. Week of Jan 12 updates ### Launch Week 1 **January 20-24** — Zinc's first launch week. Five days. Five releases. We're rapidly expanding Zinc 2.0's feature-set, vastly improving devex, and showing off some impressive demos to inspire you on what you can build with Zinc. Pay attention to your inboxes and our socials for Launch Week 1! *** ### Account Selection in Orders Account selection dropdown The order form now includes a dropdown to choose between Zinc-managed accounts and your own retailer credentials. You can see exactly which account will be used before placing an order. * **Visual account picker** — Select from your saved retailer accounts directly in the order form * **Curl command preview** — See the exact API call that will be made, with one-click copy ### Easier Gmail Setup Setting up email forwarding for verification codes just got simpler. A new "Add Gmail Filter" button generates the exact filter you need with one click. ### Smarter Retry Logic We've improved how failed orders are retried to be more intelligent about when retries make sense. * **Order-level tracking** — Retry attempts are now tracked at the order level for better visibility * **Skip hopeless retries** — Orders that fail due to out-of-stock products, inaccessible items, or unavailable guest checkout no longer waste time retrying Week of Jan 5 updates This week we're introducing managed retail accounts and smarter payment handling. These features give you more control over how orders are placed and make credential management significantly easier. ### Managed Retail Accounts Managed retail accounts You can now use managed retail accounts to place orders with your own retailer credentials. This gives you more control over order placement and unlocks features that require being logged in. * **Amazon account support** — Orders placed with Amazon credentials now use our enhanced processing system for better reliability * **Forwarding email addresses** — Each managed account automatically gets a dedicated email address for verification codes and tracking notifications * **Easy credential reference** — Use short IDs to quickly identify and reference your saved retail credentials * **Explicit credential selection** — Specify exactly which credentials to use with the `retailer_credentials_id` parameter ### Smarter Payment Handling When using managed accounts, Zinc now automatically uses your saved payment method if you don't provide one explicitly. This means less redundant data in your API calls. * **Automatic payment detection** — Orders with managed accounts can use saved payment methods without passing payment details each time * **Flexible payment modes** — Switch seamlessly between saved and explicit payment methods based on your needs * **Clear error messages** — Get helpful `payment_method_required` errors when a saved method is needed but doesn't exist ### Streamlined Onboarding We've simplified the getting-started experience to help you start testing faster. * **Skip optional steps** — Skip non-essential onboarding steps and dive straight into testing * **Faster setup** — Streamlined flow gets you to your first test order more quickly ### Better Error Tracking Enhanced error reporting throughout the platform helps you debug issues faster with more specific error types and clearer messages. Week of Dec 29 updates A lighter week with focused improvements to order search and price clarity, plus continued infrastructure work. ### Better Order Search You can now search for orders by order ID, making it easier to find specific orders in your dashboard. ### Clearer Price Warnings When an order exceeds your maximum price threshold, you'll now see a clear "Max Price Exceeded" warning instead of a generic failure message. This makes it easier to understand why an order didn't complete. ### Infrastructure Improvements We've been working on backend improvements to support future features: * **Multi-worker architecture** — Building distributed systems for better scalability * **Enhanced authentication** — Improving support for retailer accounts that require login * **Better error tracking** — Expanding our monitoring to catch and fix issues faster Week of Dec 22 updates This week brought intelligent product variant interpretation and expanded financial management capabilities. The highlight: we can now automatically understand and parse product variants from plaintext strings. ### Product Variant Interpretation Product variant interpretation The biggest update this week is our ability to intelligently interpret product variants from plaintext strings. Instead of requiring structured data, you can now provide variant information as natural text and we'll automatically parse it into the correct format. * **Intelligent parsing** — Automatically interpret size, color, and style options from plaintext strings * **Flexible input** — No need to pre-structure variant data, just provide the information naturally * **Clear label/value pairs** — Properly formatted variants for accurate order placement ### Better Test Order Flow Better test order flow We've streamlined the in-app test order experience with rich previews and variant management. * **URL preview cards** — See product images and details before placing test orders using Open Graph metadata * **Variant support** — Test orders now fully support product variants with the new interpretation system * **Mobile-optimized** — Fully responsive order interface that works seamlessly on mobile devices ### Improvements * **Better error messages** — Clearer feedback when payment or order issues occur * **Fixed retry logic** — Order retry now works correctly and only triggers for failed orders Week of Dec 15 updates We finally released the latest version of Zinc. This initial release brings dramatically expanded retailer support, along with key order management features. ### V2 Beta Launch