Repository navigation
Minor Changes
-
The wallet send completion event supports bill-pay recipients identified by their saved payout method, with
kind: 'bill_pay', without requiring a Whop user. -
The
paymentelement'schangepayload now carriespaymentMethod, the selected payment method, saved or new, ornullwhile nothing is selected: a saved method'sid, itstypeandcategory, thedisplayNameandiconsthe element shows for the pick (withbalance.imageUrl, a balance owner's image), a card'snetwork,last4andfunding, whether it needs a billing phone (requiresBillingPhone), and thecountriesit can pay from in the charge's currency. The top-leveltype,requiresBillingPhoneandmethodare deprecated in its favor, and the top-levelsupportsBuyerFeeis deprecated with no replacement: Whop prices its buyer service fee itself. ThecardFieldschangepayload reports the detectednetworkand the number'slast4. -
The verifications
capabilitieselement takeshidePayouts,hideBankDeposits,hideCardsandhideAdsto drop individual capability rows. -
New
paymentRequestoptionpaymentMethodConfigurationnarrows the walletscanMakePayment()reports, in the API'senabled,disabled, andinclude_platform_defaultsformat. -
A payment request now lets you approve or refuse a payment before its confirmation token is created. With an
onPaymentAuthorizationhandler, the sheet waits once the buyer authorizes, and the event carries the payer, the payment method, the shipping address and option, and the total. AnswerrespondWith({ approved: true })to create the token, orrespondWith({ approved: false, message })to refuse. A refused payment gets no token: Apple Pay and Google Pay show your message so the buyer can change something and pay again, and on PayPalshow()rejects withpayment_request_refused. A handler that throws or does not answer within 25 seconds refuses the payment, in time for Apple Pay and Google Pay to show the refusal. Without a handler, every sheet works as before. -
contentSecurityPolicy()now includes the Plaid hosts the payment and checkout elements need when they link a bank account on your page. Pass{ bankConnections: false }to it on pages that don't take bank account payments. -
A payment request now fires
onPaymentMethodChangewhen the buyer selects a card in Apple Pay, and when the Google Pay sheet opens and each time the buyer switches cards there, right after that card'sonBillingAddressChange. The event carries the method type, what the wallet tells about the card before authorization (Apple Pay reports its funding and usually withholds the network; Google Pay reports the network) and its redacted billing address. Answer it like the other change events:updateWith({ amount, lineItems })reprices the sheet,updateWith({})keeps the total, andupdateWith({ errors })refuses the card until the buyer picks another. The sheet updates once both events are answered, and a card either event refuses leaves the totals as they were, whatever the other answer priced. -
On phones, the address element no longer shows street suggestions under the street field, where the keyboard covered them. A search button at the end of the street field opens a full-screen address search instead: its search field starts with what the buyer already typed, Google's suggestions are listed under it, and picking one fills the whole form. With
autocomplete: falsethe button does not appear. Larger screens keep the list under the field.Postal codes that are only digits now open the number pad, and on touch screens the address inputs set their text at 16px so iOS no longer zooms the page when one is focused. The compact layout's bordered group can be styled with the new
.whop-AddressGroupclass, and the phone's search button with.whop-AddressSearchButton. -
paymentRequestaddresses carryname, the name on the address, the same field the address element and the API use.recipientstill carries the same value and is deprecated: usename. -
paymentRequest'sshow()result and itsconfirmationTokenevent carrybilling, the full billing address the confirmation token carries, ornullwhen the wallet gave none. Apple Pay and Google Pay give the card's billing address; on PayPal it is the address the buyer picked in PayPal, the one its total was taxed on. -
Wallet withdrawals can offer a better payout method with estimated savings. Review its fee and arrival estimate, then connect it before switching. Host-managed withdrawals can supply the offer through
payoutQuote.recommendedMethod. -
The
adsnamespace has a newads-agreementelement for signing the Whop Ads agreement. Mount it inline or open it as a modal to let an account sign before its first launch; it emitssignedwith the version that was signed.campaign-creatornow opens it over the builder when a launch needs a signature, and resumes the launch once it is signed. -
element "addressSearch" added (
payments.addressSearch) -
resource option "paymentMethodConfiguration" added (
payments.paymentRequest.options.paymentMethodConfiguration) -
resource event "paymentMethodChange" added (
payments.paymentRequest.events.paymentMethodChange) -
resource event "paymentAuthorization" added (
payments.paymentRequest.events.paymentAuthorization) -
resource event failure answer "paymentAuthorization" added (
payments.paymentRequest.replyFail.paymentAuthorization) -
resource event failure answer "paymentMethodChange" added (
payments.paymentRequest.replyFail.paymentMethodChange) -
prop "hidePayouts" added (
verifications.capabilities.props.hidePayouts) -
prop "hideBankDeposits" added (
verifications.capabilities.props.hideBankDeposits) -
prop "hideCards" added (
verifications.capabilities.props.hideCards) -
prop "hideAds" added (
verifications.capabilities.props.hideAds) -
element "addressSearch" added (
checkout.addressSearch) -
element "ads-agreement" added (
ads.ads-agreement) -
page-requirement group "bankConnections" added (connect:https://production.plaid.com, connect:https://sandbox.plaid.com, frame:https://cdn.plaid.com, script:https://cdn.plaid.com) (
_pageRequirements.bankConnections)
Patch Changes
- Show ad affiliate payouts in the default wallet activity feed and the Ads activity type filter.
- The address country list no longer offers Abkhazia, which showed as a bare "AB", or the Netherlands Antilles, which showed as a second Curaçao.
- The email element no longer shows a label bar in its loading placeholder when it is mounted with
label: false, so the placeholder matches the field that replaces it. - Payment request shipping answers now behave the same way on Apple Pay and Google Pay. When an answer's
shippingOptionsdrops the selected option, the first option becomes the selection without anonShippingOptionChange, and an emptyshippingOptionslist changes nothing. The result'sshipping.optionis the option the sheet showed, the first offered one when the buyer never picked another. On Apple Pay and Google Pay, a shipping handler that hasn't answered within 25 seconds fails that address or option in the sheet, instead of the wallet failing the payment, and its later answer is ignored. An address answer with an error, or one that failed this way, now keeps Pay refused until a later address is answered cleanly. On Apple Pay, a shipping option answer that replaces the options now updates the sheet's options, and a cancelled or failed attempt no longer carries the totals, line items or options its answers wrote into the next sheet.show()trims spaces around a passed email before it uses it. - The card fields' loading placeholder is easier to see in light mode: its bars use a stronger gray, so they no longer fade into the page while the secure inputs load.
- Partner payments in the activity list show a percentage icon instead of an empty circle.
- PayPal express now saves the buyer's PayPal account with the purchase, the way Apple Pay and Google Pay save the card they pay with. Unlike those two sheets, PayPal also asks the buyer to agree to future payments inside its own window. Express checkout offers PayPal on renewing plans and free trials too, and a seller can charge the saved account later with the buyer away, through renewals or a native
POST /paymentswith itspayment_method_id(Api-Version-Date2026-09-02-1 or later), such as a one-click upsell. On the payment request,canMakePayment()now reportspayPalfor a request withsetupFutureUsage, and anoff_sessionrequest may be $0, which saves PayPal without a charge. The token carries the request'ssetupFutureUsagelike the other wallets' tokens. A saved PayPal account charges only with the buyer away, like a saved Apple Pay or Google Pay card. - On PayPal, a payment request's shipping address or shipping option handler that hasn't answered within 25 seconds now refuses that address or option inside PayPal, as it does on Apple Pay and Google Pay, and its later answer is ignored. Before, the ask waited until PayPal gave up on it.
- Payout timelines show bank-specific descriptions only for bank deposits.
- In a withdrawal, a PayPal payout method that PayPal refused now tells the seller how to fix it: add PayPal again with their PayPal email, or a phone number that starts with + and the country code.