antiwork/gumroad · error · Purchase::PurchaseInvalid
The creator has disabled gifting for their products.
Error message
The creator has disabled gifting for their products.
What it means
product.can_gift? returned false and the reason is the seller-side opt-out: user.gifting_disabled? is a checkout-settings flag that removes 'Give as a gift' for all of a seller's products. create_gift surfaces it as 'The creator has disabled gifting for their products.' so the buyer knows it is the seller's choice, not a bug.
Source
Thrown at app/services/purchase/create_service.rb:341
def create_gift
# A seller buying their own product can only ever be a test purchase, and test purchases were
# never built for gifts, so this case has to be rejected. The message names what the seller
# actually did and points at the supported way to give a product away, because the old wording
# ("Test gift purchases have not been enabled yet.") described an internal capability and read
# as a flag we could switch on for them, which generated support tickets asking us to do that.
raise Purchase::PurchaseInvalid, "You can't gift your own product. To give it away for free, create a 100% off discount code under Checkout > Discounts and share the checkout link." if buyer == product.user
raise Purchase::PurchaseInvalid, "You cannot gift a product to yourself. Please try gifting to another email." if giftee_email == purchase_params[:email]
raise Purchase::PurchaseInvalid, "Gift purchases cannot be on installment plans." if params[:pay_in_installments]
if product.can_gift?
gift = product.gifts.build(giftee_email:, gift_note: gift_params[:gift_note], gifter_email: params[:purchase][:email], is_recipient_hidden: gift_params[:giftee_email].blank?)
error_message = gift.save ? nil : gift.errors.full_messages[0]
raise Purchase::PurchaseInvalid, error_message if error_message.present?
gift
else
error_message = product.user.gifting_disabled? ? "The creator has disabled gifting for their products." : "Gifting is not yet enabled for pre-orders."
raise Purchase::PurchaseInvalid, error_message
end
end
def validate_perceived_price
if purchase_params[:perceived_price_cents] && !Purchase::MAX_PRICE_RANGE.cover?(purchase_params[:perceived_price_cents])
raise Purchase::PurchaseInvalid, "Purchase price is invalid. Please check the price."
end
end
def validate_zip_code
country_code_for_validation = purchase_params[:country].presence || purchase_params[:sales_tax_country_code_election]
if purchase_params[:perceived_price_cents].to_i > 0 && country_code_for_validation == Compliance::Countries::USA.alpha2 && UsZipCodes.identify_state_code(purchase_params[:zip_code]).nil?
Rails.logger.info("Zip code #{purchase_params[:zip_code]} is invalid, customer email #{purchase_params[:email]}")
raise Purchase::PurchaseInvalid, "You entered a ZIP Code that doesn't exist within your country."
end
end
View on GitHub (pinned to afeacbd394)
Solutions
- Complete a normal, non-gift purchase instead - the buyer cannot work around the opt-out.
- Seller: re-enable gifting under checkout settings.
- Integrators: check seller.gifting_disabled? before rendering the gift option.
Defensive patterns
Strategy: validation
Validate before calling
params.delete(:gift) if params[:gift].present? && product.user.gifting_disabled?
Type guard
def gifting_available?(product) product.can_gift? && !product.user.gifting_disabled? end
Try / catch
begin Purchase::CreateService.new(product:, params:, buyer:).perform rescue Purchase::PurchaseInvalid => e # seller-side setting; nothing the buyer can fix - fall back to a normal purchase params.delete(:gift) if e.message == 'The creator has disabled gifting for their products.' end
Prevention
- Check seller.gifting_disabled? before rendering the gift option.
- Remember the flag is seller-wide: it disables gifting for every product the seller owns, not just one.
When it happens
Trigger: params[:gift] present, product.can_gift? false (link.rb:899 - !is_in_preorder_state && !user.gifting_disabled?), and product.user.gifting_disabled? true.
Common situations: Buyer uses a stale checkout page from before the seller disabled gifting; deep links to the gift flow on a seller who has opted out.
Related errors
- Tip is not allowed for this product
- You can't gift your own product. To give it away for free, c
- You cannot gift a product to yourself. Please try gifting to
- Gift purchases cannot be on installment plans.
- Gifting is not yet enabled for pre-orders.
AI-assisted analysis of antiwork/gumroad@afeacbd394 (2026-08-21).
Data as JSON: /api/errors/d12ba63780bab901.
Report an issue: GitHub.