         cb = opts.cb
         opts.cb = (err, value) =>
             @setState(action:'')
-            if err
-                @setState(error:err)
+            if action == 'fetch_coupon'
+                cb(err, value)
+            else if err
+                @setState(error:JSON.stringify(err))
                 cb?(err)
             else
-                cb(err, value) if action == 'fetch_coupon'
                 @update_customer(cb)
         {webapp_client} = require('./webapp_client')   # do not put at top level, since some code runs on server
         webapp_client["stripe_#{action}"](opts)

        <Subscriptions
            subscriptions   = {@props.customer.subscriptions}
            applied_coupons = {@props.applied_coupons}
            sources         = {@props.customer.sources}
            selected_plan   = {@props.selected_plan}
            redux           = {@props.redux} />

    fetch_coupon: (id) =>
        cb = (err, coupon) =>
            if err
                @setState(coupon_error: err)
            else if coupon
                @setState(applied_coupons : store.get('applied_coupons').set(coupon.id, coupon))
        opts =
            id     : id
            cb     : cb
        @_action('fetch_coupon', "Getting coupon: #{id}", opts)

    clear_coupon_error: =>
        @setState(coupon_error : '')

    remove_all_coupons: =>
        @setState(applied_coupons : {})
