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

  1. Complete a normal, non-gift purchase instead - the buyer cannot work around the opt-out.
  2. Seller: re-enable gifting under checkout settings.
  3. 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

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


AI-assisted analysis of antiwork/gumroad@afeacbd394 (2026-08-21). Data as JSON: /api/errors/d12ba63780bab901. Report an issue: GitHub.