The purchase infrastructure Whop is building for the fall launch — the checkout flow, quantities, tags, workflow IDs, the metadata every payment carries, and how ClarityPay comes through. Every workflow, page, and link below is clickable.
Prepared by Parisa (Whop) · 1 Sep 2026 · the Copy button grabs this whole document as Markdown for pasting into an AI model or doc
a2afall26_lead tag. This is the abandoned-cart trigger (W2) — a deliberate click, never a partial form fill.payment.succeeded; the Worker fans out:Click-through previews: interactive preview of every checkout — switch between the pages, add team seats, flip payment schedules, and walk both steps exactly as a buyer will.
| Page | Sells | Qty | Links |
|---|---|---|---|
| Founder public | Primary $8,997 + team seats $1,500/ea · Pay in Full / 3-Pay $3,199/mo / 5-Pay $1,957/mo | 0–10 | live · edit |
| Team Seats Only hidden | Seats only, for buyers who already own a primary. Company name required. | 1–10 | live |
| Alumni hidden | $5,997 pay in full only | — | live |
| ClarityPay hidden · sales | $9,970 financed — the only 10-pay path; buyer picks the term in ClarityPay's application | — | live Whop checkout |
| Internal 10-Pay hidden · fallback | 10 × $997 on Whop rails — the ClarityPay-decline destination | — | GHL page TBD |
| Confirmation | Receipt card per arrival state (paid / in-review / processing / declined) | — | live |
Installments are Whop-native split-pay: the saved card is charged monthly and billing stops automatically after the final cycle. More than 10 seats goes through a sales rep's custom invoice, not the checkout.
metadata.quantity — a string, "0"–"10", on the Whop payment.quantity: a founder purchase with quantity: "3" is four people — one primary + three team seats.metadata.company is captured whenever seats are in the cart — the key that ties a later seats-only purchase back to the same account.Every field rides payment.metadata on the Whop record and arrives in the webhook payload verbatim.
| Key | Example | Meaning |
|---|---|---|
source | a2a-checkout | which surface created it (a2a-claritypay for financing) |
offer | a2afall26-main | page identity: -main, -seats, -alumni, -tenpay; ClarityPay = a2a-claritypay |
page | main | same, bare |
schedule | full | full · 3pay · 5pay · 10pay · claritypay |
quantity | "3" | team seats purchased (string; primary not included) |
company | Acme Roofing | present when seats are in the cart |
email / first_name / last_name / full_name / phone | what the buyer typed at step 1 | |
ghl_contact_id | abc123… | the GHL contact created at step 1 — no lookup needed downstream |
amount_cents | "1349700" | charged today, minor units (installments: first cycle only) |
plan_total_cents | "1349700" | full plan value across all cycles |
tags | the GHL tags this purchase applies (§6) |
Verified against Whop's codebase, 1 Sep:
status: "pending", which fires the payment.pending webhook event. It sits there for up to 24 hours.status: "paid" and payment.succeeded fires — same payment id, ~a day later. TUB is paid the full $9,970 up front at funding.metadata.schedule: "claritypay" is the successful-onboarding signal. Nothing else in this system produces a pending status — declines stay at status: open + substatus: failed (Whop declines never reach a terminal status), and an abandoned cart never creates a payment at all.payment.succeeded for the same payment, fulfilment is deliberately skipped — the buyer is never onboarded twice — and only the status update is forwarded so the Supabase row flips to succeeded. Any other payment.pending (bank rails etc.) stays acknowledged-and-ignored.| Signal | Meaning |
|---|---|
payment.succeeded | enrolled cards, wallets, PayPal, every installment cycle, and ClarityPay at funding |
payment.pending + schedule: claritypay | enrolled approved application, finalizing for up to 24h |
status: open + substatus: failed | declined — never a terminal status on Whop |
| contact exists, no payment | abandoned cart — GHL W2 follows up |
Tag convention a2afall26_{action}-{detail}, applied additively by the worker; GHL never derives them. Location: REIO | The Uncommon Business (TL6J90dhkW0GGz8sogzu).
| Tag | When |
|---|---|
a2afall26_lead (+ -{page}) | step 1 Continue — before any payment |
a2afall26_purchased | every successful purchase |
a2afall26_plan-{schedule} | payment plan used — comped purchases ride this too; no separate free workflow |
a2afall26_purchased-{alumni|seats|tenpay} | non-main pages, for Alumni/W1A routing |
a2afall26_team-seats-purchased | seats ≥ 1 — flips the welcome copy to "add your team in TubConnect" |
Workflows — Abs's fall builds (31 Aug, currently drafts) in the fall workflow folder. Contacts enter by API call, never tag trigger, so no NOT-filters are needed anywhere.
| Workflow | ID | |
|---|---|---|
| W1 — Purchase + Tags, Regular | df4909ad-b375-43ff-8142-3a16d8d54523 | open |
| W1A — Purchase + Tags, Alumni | 226eede0-3606-41cd-b9fe-cc3abf10dace | open |
| W2 — Abandoned Cart | e0a6428c-1258-4b42-bd11-13227df19937 | open |
| W3 — Team Activation | 8fa253ad-a7bf-4682-833f-a67b13a52e78 | open |
Decided architecture (31 Aug call): the worker feeds GHL for tagging and workflows, and n8n → Supabase powers the live dashboard and TubConnect access. What n8n receives is the Whop webhook payload — payment id, status, amounts, buyer, and the full §4 metadata — so Supabase rows carry quantity, company, schedule, and ghl_contact_id with no lookups.
De-duplication lives in Supabase and GHL (per the 31 Aug spec): the same email must not re-trigger onboarding — installment cycles 2–N and later seat top-ups are new payments from an already-onboarded buyer. Uniqueness on the Whop payment id (processor, processor_ref) keeps a replayed webhook from double-inserting.
| Thing | Where |
|---|---|
| Cloudflare Worker (serves every page + webhook) | aieb-fall26-checkout on Cloudflare · runtime: aieb-fall26-checkout.aieb-fall26-checkout.workers.dev |
| Code + paste snippets | The-Uncommon-Business/mktg-aieb-checkout — page snippets in docs/pages/a2a-*.html, this doc at docs/PORTAL-INTEGRATION.md |
| Fall funnel (editor) | A2A Fall 2026 | Warm |
| Whop product + plans | "A2A Fall 2026" prod_2OMe7eErbDmS7 (hidden) on biz_j8oij1SVi5Tt1M; ClarityPay plan plan_SYmjXJxcQwLZI ($9,970); 3/5/10-pay split plans created at pricing sign-off |
| Checkout structure spec | A2A Fall '26 Onboarding & Checkout Structure (Notion) |
Questions → Parisa (Whop). The repo copy of this doc updates with the code that implements it.