Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

haggl.ai

REMOTE · WWW.HAGGL.AI

Ask a merchant's haggl.ai sales agent for a personalized offer, then hand it to checkout.

Available components

64 Trust /100

Last scanned (12 hours ago)

Scores higher than 46% of remote servers

Reachable. Last reached 18 Oct 2026.

Category E-commerce

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security63
Transport & Reachability100
Schema Quality & AI Usability64
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 2964 tokens (~247/item across 12 items; 12 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management7
  • Stability observed for 2 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 13 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
  • Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 17 Oct 26 +1
    • Stability: unverified → 0.03 ▲ functional
  • 16 Oct 26 63

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 18 Oct 2026 · Probed https://www.haggl.ai/api/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=www.haggl.ai CN=YR1,O=Let's Encrypt,C=US 23 Sept 2026 22 Dec 2026 RSA 2048 SHA256-RSA 5e178b1fd21494b30b89bfb4241340f9705
SANs: www.haggl.ai
CN=YR1,O=Let's Encrypt,C=US (CA) CN=Root YR,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 RSA 2048 SHA256-RSA a20253f15f2691c05dc1ce13b9bcca4e
CN=Root YR,O=ISRG,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 RSA 4096 SHA256-RSA f24b6d17f9d9ad7cb1c9fea78782699f

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of www.haggl.ai. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ai. present 3799 8 Verified
haggl.ai. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://www.haggl.ai/api/mcp Verified 200
http (plaintext) http://www.haggl.ai/api/mcp HTTPS enforced 308 https://www.haggl.ai/api/mcp
MCP tools · 12 exposed · ~2,279 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
haggl_accept_offer ~185

Accept the vendor's offer and lock in the deal. Consequential: only call after the buyer has approved this exact offer, every time. Provide the offer version the buyer reviewed and approved; a changed offer needs a new approval. Read state.acceptance_effects and state.commits_purchase first: merchant handoff effects may be unknown. haggl.ai never takes payment: any payment happens at the merchant's checkout, under the merchant's terms and refund policy. A returned checkout link alone does not establish payment or enrollment completion. Accepting the same offer version again returns the same result.

NameTypeReqDescription
expected_offer_versionintegeryesstate.offer_version from the quote reviewed and approved by the buyer.
roundinteger–Legacy offer round. If supplied it must match the current or already reserved offer.
session_idstringyesSession id of the negotiation to accept.
NameTypeReqDescription
accepted_offerobject|null–The merchant's offer for the requested items. Merchant engines may add fields.
codestring–Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited.
context_receivedobject–The buyer context fields received so far and their provenance.
created_atstring–ISO 8601 time the session started.
current_offerobject|null–The merchant's offer for the requested items. Merchant engines may add fields.
current_roundinteger–Rounds used.
errorstring–Present only when the call failed: what went wrong.
expires_atstring–ISO 8601 time the session expires.
guidanceobject|null–What this merchant values, as contextual guidance. Evidence is optional.
max_roundsinteger–Most quote rounds in this session.
next_stepsobject–After acceptance: how the buyer redeems the offer (checkout_url, coupon_code, reference, expires_at, …).
recoveryobject–When the outcome is uncertain: the tool and session_id to read before retrying.
retry_after_secondsinteger–When rate limited: seconds to wait before retrying.
retryableboolean–Whether the same call may be retried.
roundsarray–Each round: the offer and when it was made.
rounds_remaininginteger–Rounds left.
session_idstring–Negotiation session id.
stateobject–Canonical negotiation state. Follow allowed_actions.
statusstring–Session status.
supportobject–Who the buyer deals with after acceptance.
vendor_idstring–Vendor id.

No examples provided.

haggl_create_haggl_id ~737

Create a haggl ID for the user, so offers and codes from different merchants stay together and can be read back later. Show the user this text first, and call this only if they agree: "haggl.ai, operated by MOOJO.ID, INC. ("we"), offers your agent a haggl ID. You can decline: your agent can still ask merchants for offers without one. If you agree, we link the negotiations your agent opens with the ID and keep a record of them: when the ID was created, how many distinct emails passed our signature check and how many distinct domains signed them, the date of the latest check, how many merchants were asked, how many offers were received and accepted, and how many paid orders we recorded. For each shopping category, such as travel, the record also counts how many of those emails, and how many distinct businesses that signed them, were in it; health purchases are never counted. The record does not include those domains, the businesses' names or any email content. We store a fingerprint of the ID, not the ID itself. We do not require your name or email address to create a haggl ID. We keep limited evidence of your agreement, as described in our privacy policy. You choose whether your agent uses the haggl ID. Using it authorizes us to share the record with the sales agent of each merchant your agent asks for an offer, to help assess eligibility and personalize offer terms. When your agent asks the merchants in a category for bids, we ask up to five of them on your behalf and share the record with each of their sales agents. Merchants never see the ID itself. You separately choose what information your agent submits during each negotiation. Keep the ID private: anyone who has it can retrieve the record, offers and codes, and delete the ID. You can withdraw consent by deleting the ID through your agent or on haggl.ai/agentic-discounts. This removes the stored fingerprint and the record and unlinks its negotiations. The negotiations themselves remain subject to the separate…

NameTypeReqDescription
channelstring–How the user agreed: in this conversation (agent_relayed, the default), or in standing instructions they wrote to you beforehand (standing_instruction).
confirmationstring–Instead of consent_version and statement: the confirmation from haggl_request_haggl_id_confirmation, after the user confirmed at its confirm_url.
consent_versionstring–The consent text version the user agreed to: "2026-10-16.4".
statementstring–The user's words of agreement, quoted (for example "Yes, I agree"); no names, emails or phone numbers.
NameTypeReqDescription
codestring–Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited.
consent_versionstring–The consent text version agreed to.
created_atstring–ISO 8601 creation time.
errorstring–Present only when the call failed: what went wrong.
haggl_idstring–The user's haggl ID. Returned once: keep it private with the user's settings.
keep_itstring–How to keep the ID.
recoveryobject–When the outcome is uncertain: the tool and session_id to read before retrying.
retry_after_secondsinteger–When rate limited: seconds to wait before retrying.
retryableboolean–Whether the same call may be retried.
use_itstring–How to use the ID.

No examples provided.

haggl_delete_haggl_id ~59

Delete the user's haggl ID and unlink the offers linked to it. Only when the user asks. Codes already issued keep working at the merchant until they expire.

NameTypeReqDescription
haggl_idstringyesThe user's haggl ID.
NameTypeReqDescription
codestring–Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited.
deletedboolean–True once the haggl ID is deleted.
errorstring–Present only when the call failed: what went wrong.
offers_unlinkedinteger–How many offers were unlinked.
recoveryobject–When the outcome is uncertain: the tool and session_id to read before retrying.
retry_after_secondsinteger–When rate limited: seconds to wait before retrying.
retryableboolean–Whether the same call may be retried.

No examples provided.

haggl_get_bids ~179

Have the merchants on haggl.ai in one shopping category (for example travel) bid for the user at once, from their haggl ID record, without new proof. Works once the record holds a verified purchase in that category (from an earlier offer with signed email proof); otherwise it says so and returns no bids. Each bid is a merchant's own offer, funded by the merchant, with an accept_url; show the user each one with its personalized_price_notice, and accept only with their approval.

NameTypeReqDescription
categorystring–Optional: the brand index category, e.g. "travel".
haggl_idstringyesThe user's haggl ID.
querystring–What the user is after, e.g. "hotel in Barcelona, 4 nights in December". Sets the category when category is omitted.
NameTypeReqDescription
bidsarray–Merchants' offers. Show each with its personalized_price_notice; accept only with the user's approval.
categorystring–The shopping category.
codestring–Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited.
errorstring–Present only when the call failed: what went wrong.
how_it_worksarray–The flow, step by step.
labelstring–Category name.
notestring–Why there are no bids, when locked.
recoveryobject–When the outcome is uncertain: the tool and session_id to read before retrying.
retry_after_secondsinteger–When rate limited: seconds to wait before retrying.
retryableboolean–Whether the same call may be retried.
unlockedboolean–Whether the record holds a verified purchase in this category; when false, bids is empty.

No examples provided.

haggl_get_my_offers ~57

Read what haggl.ai holds for the user's haggl ID: when it was created and the negotiations, offers and codes linked to it, newest first.

NameTypeReqDescription
haggl_idstringyesThe user's haggl ID.
NameTypeReqDescription
codestring–Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited.
consentobject–The consent on record: version, time and channel.
created_atstring–ISO 8601 time the haggl ID was created.
errorstring–Present only when the call failed: what went wrong.
last_used_atstring–ISO 8601 time it was last used.
offersarray–Negotiations linked to this haggl ID, newest first.
recordobject|null–What the record holds: verified purchases by category and offer counts.
recoveryobject–When the outcome is uncertain: the tool and session_id to read before retrying.
retry_after_secondsinteger–When rate limited: seconds to wait before retrying.
retryableboolean–Whether the same call may be retried.

No examples provided.

haggl_get_negotiation ~63

Read the canonical state, current offer version, guidance and permitted actions of an existing negotiation. Use after human changes, reloads, transport switches or uncertain results; this does not open another session.

NameTypeReqDescription
session_idstringyesExisting negotiation session id.
NameTypeReqDescription
accepted_offerobject|null–The merchant's offer for the requested items. Merchant engines may add fields.
codestring–Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited.
context_receivedobject–The buyer context fields received so far and their provenance.
created_atstring–ISO 8601 time the session started.
current_offerobject|null–The merchant's offer for the requested items. Merchant engines may add fields.
current_roundinteger–Rounds used.
errorstring–Present only when the call failed: what went wrong.
expires_atstring–ISO 8601 time the session expires.
guidanceobject|null–What this merchant values, as contextual guidance. Evidence is optional.
max_roundsinteger–Most quote rounds in this session.
next_stepsobject–After acceptance: how the buyer redeems the offer (checkout_url, coupon_code, reference, expires_at, …).
recoveryobject–When the outcome is uncertain: the tool and session_id to read before retrying.
retry_after_secondsinteger–When rate limited: seconds to wait before retrying.
retryableboolean–Whether the same call may be retried.
roundsarray–Each round: the offer and when it was made.
rounds_remaininginteger–Rounds left.
session_idstring–Negotiation session id.
stateobject–Canonical negotiation state. Follow allowed_actions.
statusstring–Session status.
vendor_idstring–Vendor id.

No examples provided.

haggl_list_vendors ~131

List vendors that accept AI-agent price negotiations through haggl.ai. A vendor appears once haggl.ai is installed on its own store or website (the listed website): the haggl.ai Shopify app on that store, or its snippet detected on that site. Vendors can opt out, so the list is not exhaustive. haggl.ai runs each vendor's sales agent, and vendors on a paid plan pay haggl.ai for it; the list is not a ranking or recommendation. Use it when the user asks for a discount or wants to negotiate a price, not for a purchase at the listed price.

Input schema present but exposes no named parameters.

NameTypeReqDescription
codestring–Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited.
errorstring–Present only when the call failed: what went wrong.
next_stepstring–What to call next.
recoveryobject–When the outcome is uncertain: the tool and session_id to read before retrying.
retry_after_secondsinteger–When rate limited: seconds to wait before retrying.
retryableboolean–Whether the same call may be retried.
vendorsarray–Participating vendors. Not a ranking or recommendation.

No examples provided.

haggl_request_haggl_id_confirmation ~82

Get a link for the user to read the haggl ID consent text and confirm it on haggl.ai, when they are not in this conversation to agree to it. Send them confirm_url (valid 30 minutes). After they confirm, call haggl_create_haggl_id with the returned confirmation; until then it answers confirmation_pending.

Input schema present but exposes no named parameters.

NameTypeReqDescription
codestring–Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited.
confirm_urlstring–Send this link to the user.
confirmationstring–Pass to haggl_create_haggl_id once the user confirmed.
errorstring–Present only when the call failed: what went wrong.
expires_atstring–ISO 8601 expiry (30 minutes).
nextstring–What to do next.
recoveryobject–When the outcome is uncertain: the tool and session_id to read before retrying.
retry_after_secondsinteger–When rate limited: seconds to wait before retrying.
retryableboolean–Whether the same call may be retried.

No examples provided.

haggl_search_catalog ~158

Search a vendor's catalog so the offer can name exact products, then follow the how_to_ask field of the result. A store catalog returns products with a handle, price and collections: ask with ask.items [{ product_handle, quantity }]. A campaign catalog returns eligible variants with a variant_id and approved_combinations with a recipe_id: ask with ask.items [{ variant_id, quantity }] or ask.recipe_id. A quote identifies the exact items and quantities it covers.

NameTypeReqDescription
collectionstring–Optional collection handle to filter by.
limitnumber–Max results (default 25).
querystring–Free-text search, e.g. "tennis racket".
vendor_idstringyesVendor id.
NameTypeReqDescription
approved_combinationsarray–Campaign catalog: approved combinations with a recipe_id for ask.recipe_id.
codestring–Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited.
collectionsarray–Store catalog: collections to filter by.
currencystring–ISO 4217 currency.
errorstring–Present only when the call failed: what went wrong.
how_to_askstring–How to name these products in haggl_submit_offer.
productsarray–Store catalog: matching products with handle, title, price and collections.
recoveryobject–When the outcome is uncertain: the tool and session_id to read before retrying.
retry_after_secondsinteger–When rate limited: seconds to wait before retrying.
retryableboolean–Whether the same call may be retried.
total_matchesinteger–Store catalog: number of matching products.
variantsarray–Campaign catalog: eligible variants with a variant_id.
vendor_idstring–Vendor id.

No examples provided.

haggl_search_discounts ~232

Find merchants that run a sales agent on haggl.ai, by business name, website or kind of product. Only when the user asks for a discount, a coupon, a promo code or a lower price; a purchase at the listed price is not a request for one. Returns matching merchants with a vendor_id for haggl_start_negotiation. Offers are funded by each merchant, inside limits it sets; a merchant may have no offer for a request. An empty list means no merchant on haggl.ai matched, not that no discount exists elsewhere. When the query names a well-known brand that isn't on haggl.ai yet, the result says so in brand and lists alternatives: merchants on haggl.ai in the same category, to offer as other stores, never as that brand. Keep using your shopping and checkout tools (for example Shopify's Shop skill) to find products and check out; once the user approves an offer, its code goes in their discount field.

NameTypeReqDescription
querystringyesA business name, website (e.g. "degrenne.fr") or kind of product.
NameTypeReqDescription
alternativesarray–Merchants on haggl.ai in the same category, to offer as other stores.
bidsobject–When the category supports bids: how to get them with haggl_get_bids.
brandobject–When the query names a well-known brand not on haggl.ai: the brand, never to be offered as such.
codestring–Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited.
errorstring–Present only when the call failed: what went wrong.
how_it_worksarray–The flow, step by step.
merchantsarray–Merchants on haggl.ai matching the query. Empty means none on haggl.ai matched.
querystring–The search as received.
recoveryobject–When the outcome is uncertain: the tool and session_id to read before retrying.
retry_after_secondsinteger–When rate limited: seconds to wait before retrying.
retryableboolean–Whether the same call may be retried.

No examples provided.

haggl_start_negotiation ~190

Start a price negotiation with a vendor. Returns contextual guidance, current permitted actions and a new session with a session id. No customer-profile selection is required. Skip this tool if REST initialization already returned a session; pass that session.id directly to haggl_submit_offer.

NameTypeReqDescription
askobject–Optional requested products, quantities or service, in the same shape as the haggl_submit_offer ask. Supply known context upfront.
dataobject–Optional available buyer context; together with ask, requests an opening quote in this same call.
haggl_idstring–Optional: the user's haggl ID from haggl_create_haggl_id, so this offer and its code are kept with their other offers.
vendor_idstringyesVendor id from haggl_list_vendors, a haggl-vendor meta tag, or a haggl-negotiate URL.
NameTypeReqDescription
accepted_offerobject|null–The merchant's offer for the requested items. Merchant engines may add fields.
catalogobject|null–How to name exact products: a store catalog or a campaign catalog. Search it with haggl_search_catalog.
codestring–Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited.
context_receivedobject–The buyer context fields received so far and their provenance.
created_atstring–ISO 8601 time the session started.
current_offerobject|null–The merchant's offer for the requested items. Merchant engines may add fields.
current_roundinteger–Rounds used.
data_feedbackobject–Which context fields were used, and which could improve the offer.
errorstring–Present only when the call failed: what went wrong.
expires_atstring–ISO 8601 time the session expires.
guidanceobject|null–What this merchant values, as contextual guidance. Evidence is optional.
how_it_worksarray–The negotiation flow, step by step.
max_roundsinteger–Most quote rounds in this session.
next_stepsobject–After acceptance: how the buyer redeems the offer (checkout_url, coupon_code, reference, expires_at, …).
offerobject–The merchant's offer for the requested items. Merchant engines may add fields.
protocol_urlstring–Protocol documentation.
recoveryobject–When the outcome is uncertain: the tool and session_id to read before retrying.
retry_after_secondsinteger–When rate limited: seconds to wait before retrying.
retryableboolean–Whether the same call may be retried.
roundinteger–The round this quote answered.
roundsarray–Each round: the offer and when it was made.
rounds_remaininginteger–Rounds left.
sessionobject–The new session.
session_idstring–Negotiation session id.
stateobject–Canonical negotiation state. Follow allowed_actions.
statusstring–Session status.
vendorobject–The merchant this session negotiates with.
vendor_idstring–Vendor id.

No examples provided.

haggl_submit_offer ~206

Request a quote using all context already available. Buyer data and evidence can be omitted; relevant additional context can be supplied later within the remaining rounds. Returns authorized terms or no offer, contextual guidance and permitted next actions.

NameTypeReqDescription
askobject–What the buyer wants; the offer then says exactly which items the discount covers. Store catalogs: { items: [{ product_handle, quantity }] }. Campaign catalogs (catalog.type "campaign"): { items: [{…
dataobject–Optional buyer context and consented evidence. Omit or use {} for an opening quote without evidence.
expected_offer_versioninteger–Optional state.offer_version last read, to avoid submitting against a session changed by another actor.
session_idstringyesSession id from haggl_start_negotiation or session.id from REST initialization.
NameTypeReqDescription
accepted_offerobject|null–The merchant's offer for the requested items. Merchant engines may add fields.
codestring–Present only when the call failed: a machine-readable error code, e.g. quote_uncertain or rate_limited.
context_receivedobject–The buyer context fields received so far and their provenance.
created_atstring–ISO 8601 time the session started.
current_offerobject|null–The merchant's offer for the requested items. Merchant engines may add fields.
current_roundinteger–Rounds used.
data_feedbackobject–Which context fields were used, and which could improve the offer.
errorstring–Present only when the call failed: what went wrong.
expires_atstring–ISO 8601 time the session expires.
guidanceobject|null–What this merchant values, as contextual guidance. Evidence is optional.
max_roundsinteger–Most quote rounds in this session.
next_stepsobject–After acceptance: how the buyer redeems the offer (checkout_url, coupon_code, reference, expires_at, …).
offerobject–The merchant's offer for the requested items. Merchant engines may add fields.
recoveryobject–When the outcome is uncertain: the tool and session_id to read before retrying.
retry_after_secondsinteger–When rate limited: seconds to wait before retrying.
retryableboolean–Whether the same call may be retried.
roundinteger–The round this quote answered.
roundsarray–Each round: the offer and when it was made.
rounds_remaininginteger–Rounds left.
session_idstring–Negotiation session id.
stateobject–Canonical negotiation state. Follow allowed_actions.
statusstring–Session status.
vendor_idstring–Vendor id.

No examples provided.

Install

How do I install the haggl.ai MCP server?

haggl.ai is a hosted endpoint at https://www.haggl.ai/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · www.haggl.ai

# add to Claude Code
claude mcp add --transport http ai-haggl-haggl 'https://www.haggl.ai/api/mcp'
Common questions

What is the haggl.ai MCP server?

haggl.ai is an MCP server listed in the public MCP registry as ai.haggl/haggl. Ask a merchant's haggl.ai sales agent for a personalized offer, then hand it to checkout. This page covers its hosted endpoint (https://www.haggl.ai/api/mcp).

Is the haggl.ai MCP server safe to use?

haggl.ai scores 64 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the haggl.ai MCP server expose?

haggl.ai exposes 12 tools: haggl_list_vendors, haggl_start_negotiation, haggl_search_catalog, haggl_get_negotiation, haggl_submit_offer, and 7 more. Their descriptions and schemas cost roughly 2,279 tokens of context every time the server is loaded.

Does the haggl.ai MCP server require authentication?

No. We connected to haggl.ai without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the haggl.ai MCP server still maintained?

haggl.ai is still listed as active in the MCP registry. We last reached this channel on 18 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.