Bug fixes, min threshold, and Active

GitHub release notes


  • Features
    • Marketplace
  • New infrastructure
    • Marketplace engine


  • Improvement
    • Logging configuration is now specified programmatically. Use BFWD_LOGGING_SINGLELINEEXCEPTIONS=true to maintain single-line stack traces


  • Feature
    • GoCardless payment gateway integration
    • Partial implementation of public checkout API
    • SalesForce: sync metadata
  • Bug fixes
    • ChartMogul: Fix sending of numeric metadata
    • Race condition in JSON serialization & unserialization
    • Cancellation of migrated subscriptions
    • In-period revival of free subscriptions
    • Immediate upgrade of PCV now no longer increments account.successfulSubscriptions. this also fixes a deadlock.
    • Make first and last name optional when creating Account
  • Improvement
    • Feedback for failed role-check on API request: details of missing role


  • Bug fixes
    • Make RestAPI compatible with legacy access tokens


  • Features
    • Further implementation of checkout API


  • Bug fixes
    • Various GoCardless bug fixes
    • GET /configurations (retrieve payment gateway configurations) no longer throws exception
  • Feature
    • Make GoCardless configurable via API


  • Bug fixes
    • Deleting of API configurations via API
  • Improvement
    • Make API configuration soft deletable by using the PUT endpoint


  • Bug fixes
    • Make GoCardless aware of the environment type (Sandbox, Production, etc)


  • Feature
    • Add an "email subscription" for created subscriptions
    • SalesForce: ability to specify user-definable SalesForce types (via DB)
  • Improvement
    • Minor change to message shown in the sent out emails


  • Feature
    • API for remediating SalesForce sync
  • Improvement
    • Add "charge type" column to revenue recognition reports
    • Invoice PDFs now retrieve fonts using HTTPS


  • Bug fixes
    • SalesForce: sync
    • Fix bug preventing batch update of Pricing Component Values


  • Improvement
    • Performance improvement for revenue recognition
  • Bug fixes
    • Fix several endpoints that were not respecting the user role and permissions


  • Bug fixes:
    • Add additional locks to the invoice table to prevent racing conditions


  • Bug fixes:
    • Prevent GoCardless from processing a payment webhook twice


  • Improvement
    • Improved Salesforce metadata synchronization


  • Bug fix
    • Fix a coupon related bug: the coupon is ignored when used while creating a subscription


  • Improvement
    • Throw an exception if a child invoice is being refunded
    • Salesforce: API for remediating sync jobs


  • Features
    • Configure "minimum invoice cost" -- prevents generation of Invoices too cheap to be paid via gateway (charges are dissociated and wait for next Invoice)
    • Add support for Apple Pay via Stripe
  • Improvement
    • Void charges upon child Invoices when voiding the parent invoice
    • Salesforce: improve sync engine
    • Reduce verbosity of log messages concerning Stripe webhooks sent to wrong environment
    • Don’t migrate charges when migrating a subscription
    • Invoice renderer now logs which Invoice it is attempting to render
    • Revenue recognition now has guards to ensure that only the latest version of the Invoice is considered for recognition.
    • Revenue recognition is now calculated later in flow -- this ensures that, in recalculation flows, it calculates using the latest version of the Invoice
    • Revenue recognition is no longer generated for Invoices that will be insta-voided (i.e. immediate upgrades which encounter payment failure)
    • Revenue recognition: added "Charge Name" column to report -- shows name of manual charges.
    • Revenue recognition calculator now guarantees a non-null period start (falls back to Invoice’s period start if InvoiceLine lacks one). This also prevents an exception encountered in the bucketed rev-rec reports.
    • InvoiceLines resulting from Manual charges, are now classified using the new InvoiceLine.type: "Manual"
    • InvoiceLines resulting from AffiliateCommision charges, are now classified using the new InvoiceLine.type: "AffiliateCommision"
    • Searching for subscriptions by metadata can now use filter by multiple metadata key-values.
  • Bug fix
    • Quotes API: when requesting an upgrade quote, and no subscription is specified: still honor existingQuantity on pricing components
    • Fix coupon pricing component name field length
    • Fix rendering of coupons in Invoice templates
    • Revert rev-rec performance improvement introduced in 1.2017.38.9 (since this failed to populate pricingComponentChargeType in certain environments)
    • Fix exceptions resulting from malformed point-cuts in API.


  • Bug fix
    • SalesForce: Ensure that UTF-8 is used in OAuth connector
    • Fix last 4 digits on card capture via Apple Pay
    • ServiceEndAmendment is now resilient to possibility that no FinalArrears Invoice needs to be generated for the subscription whose service is ending


  • Improvement
    • Improve migration quote calculator
    • Add locks to prevent multiple agents’ recalculating a charge
    • ServiceEndAmendment is now persisted in all code paths responsible for subscription failure
    • ChartMogul: update SDK
    • ChartMogul: report leads
    • ChartMogul: report conversions
    • ChartMogul: improve error handling
  • Refactor
    • Subscription failure
    • Price calculation
  • Bug fix
    • Fix ignored coupons for tiered volume components
    • Fix SalesForce OAuth scope
    • SalesForce: Ensure that SalesForce responses are unmarshalled as UTF-8
    • SalesForce: ensure that token refreshes are actioned inside a database transaction
    • Fix elasticsearch bug when handling null entities
    • Ensure that subscription end data is not nulled when migrating cancelled subscriptions
    • Price calculation of upgrades to or from fixed tiers (on Tiered, TieredVolume pricing components)
    • Price calculation of coupons for Volume pricing components
    • Price calculation of coupons concerning TieredVolume pricing components on subscription Invoices


  • Bug fix
    • Fix period alignment for provisioned aggregated invoices started in the past


  • Improvements
    • Add an explicit flag (‘active’) that states whether a subscription is active
    • Ensure that Invoice execution does not consume so much credit as to leave an Invoice under the "minimum Invoice cost" threshold
  • Bug fix
    • When Generation engine considers whether to raise next parent Invoice: now resilient when encountering child subscriptions whose period end has not yet been defined
    • SalesForce: prevent exception when syncing a SalesForce entity which lacks an bfID field.
    • Widen columns used for referring to pricing components involved in a migration


  • Feature
    • Make it possible to create shorter coupon codes (with less entropy)
    • Add the ability to show the full stack traces in logs if it's enabled in config.xml
  • Bug fixes
    • Ensure that the audit log produced when an Invoice is updated, prefers to describe the most specific event (i.e. Invoice.PaymentFailed is preferred over Invoice.Updated, if both are applicable)


  • Improvement
    • Disable proration for usage charges


  • Feature:
    • Payments produced in Stripe now present a more informative description on credit card statement


  • Feature
    • PaymentMethods captured via Stripe now store the tokenizationMethod -- this reveals which cards were captured using apple_pay.
  • Bug fix
    • Fix a bug causing the Email Sender engine to throw a NullPointerException
  • Improvement
    • Salesforce sync: don't try to continue sync for other entities when the first one fails to refresh the token


  • Bug fix:
    • Fix several /User endpoints that were not allowing user information update (ie. email, password, etc)