Blog

Follow Stripe on Twitter

Preview subscription changes

Peter Raboud on April 23, 2015

Upgrades! We love them. You know you’re doing something right when a user wants to pay more for your product. But upgrades can be tricky, too. If you prorate the change, your customers may be confused on how much they’ll be charged on their next bill.

We now offer a preview of upgrade charges for subscriptions before they happen. You can see how switching plans or changing quantities would impact a customer by querying the upcoming invoices endpoint. We’ll return an estimate of the user’s next invoice, including any applicable prorations. You can display this estimate to users to maximize the chance they finish their upgrade.

Here’s an example of what happens when you send a new subscription plan your customer is considering:


curl -G https://api.stripe.com/v1/invoices/upcoming \
   -u sk_test_BQokikJOvBiI2HlWgH4olfQ2: \
   -d customer=cus_66Nqfe223Fjuy0 \
   -d subscription=sub_66Nux8KYRsiquq \
   -d subscription_plan=super_gold_plan

{
  "date": 1432252223,
  "period_start": 1429808152,
  "period_end": 1432252223,
  "next_payment_attempt": 1432255823,
  ...
  "amount_due": 1762
}

You can also estimate the charge for a subscription change at a specific point of time in the future. Just pass a proration_date when previewing the amount.

We hope this helps provide your customers with more predictable upgrades (or downgrades). If you have any questions or feedback, please let me know.

April 23, 2015

The new Connect

Brian Krausz on March 23, 2015

In 2012, we noticed that many of the most exciting Stripe users were building businesses that helped others accept money. Shopify was helping e-commerce businesses get started and Postmates was building a mobile restaurant delivery network. In October 2012, we launched Stripe Connect to allow these multi-sided platforms to connect with thousands of seller accounts on Stripe.

Plenty has changed since then. The number of these platforms has exploded: services like Instacart, Kickstarter, Shyp, Tilt, Lyft, TaskRabbit, and Handy. Stripe has helped over half a million sellers get paid on platforms like these. And we’ve learned a lot about the subtleties of each use case.

Regular businesses just need to accept money from buyers, but running one of these platforms is much more complex. They also have to verify seller identity (to comply with know-your-customer laws and to prevent fraud), collect and verify their sellers’ banking information, track seller earnings, help sellers get paid on the right schedule, handle IRS tax reporting requirements, and more. I get tired just thinking about it.

The new Stripe Connect is the result of everything we’ve learned from powering these platforms. The changes we’ve made make setting up accounts for sellers even easier—they don’t need to even come to Stripe. You can now support sellers in more countries. And Stripe helps with everything involved in operating the platform.

Managed accounts

In addition to connecting to regular Stripe accounts (which Connect has supported since 2012), we’re now enabling platforms to spin up and administer “managed accounts”. Managed accounts allow you to customize all aspects of the experience for sellers—from what the setup flow looks like and payment schedules to who pays fees and when info is collected. These managed accounts can be set up for sellers wherever Stripe is supported (18 countries, with more coming this year). This unifies our previously-separate “Transfers API” with Connect.

New Lightweight setup for sellers

With managed accounts, Stripe gets out of the way of your relationship with your sellers or contractors. You can fully customize how sellers join your platform and build very lightweight sign up flows. In fact, you can get a seller started with just a country and email address using the new accounts endpoint:

curl https://api.stripe.com/v1/accounts \
   -u sk_test_BQokikJOvBiI2HlWgH4olfQ2: \
   -d managed=true \
   -d country=US \
   -d email=fleet.driver@example.com

{
  ...
  "id": "acct_12QkqYGSOD4VcegJ",
  "keys": {
    "secret": "sk_live_AxSI9q6ieYWjGIeRbURf6EG0",
    "publishable": "pk_live_h9xguYGf2GcfytemKs5tHrtg",
  },
  "managed": true,
  ...
}

We’ll send back the seller’s account information, which you can use to start creating charges on their behalf right away. We’ll let you know via the account.updated webhook if and when you need to collect any additional info about your sellers.

When creating charges, you can also specify the seller receiving the funds. Stripe will handle paying out the seller on the schedule you specified, and you won’t need to manually reconcile payments and transfers, making accounting and bookkeeping easier:

curl https://api.stripe.com/v1/charges \
   -u sk_test_BQokikJOvBiI2HlWgH4olfQ2: \
   -d amount=1000 \
   -d currency=EUR \
   -d customer=cus_49mpFwI9tFb1AO \
   -d destination=acct_12QkqYGSOD4VcegJ
   -d application_fee=200

New International sellers

Scaling businesses internationally can be pretty hard, but it’s especially difficult for platforms. Traditionally, supporting sellers in other countries required you to either run all international transactions through the U.S. (which meant more declined cards and currency conversion fees) or registering local business entities in every region supported.

With Connect, we’ve worked to help you provide a local experience for your sellers while keeping your code manageable and scalable. For example, you might need a Spanish crowdfunding campaign’s Número de Identificación Fiscal or an Australian boutique’s ABN before they can get paid. In all these cases, we’ll help you out and let you know what info to collect via the aptly-named fields_needed array on the account.

Update Build apps for Stripe users

As before, you can use Connect to get secure access to Stripe data, and use that to build dashboards, invoicing integrations, feature add-ons, and more. If you like being meta, you can now also create integrations specifically for platforms, such as the one built by QuickBooks for self-employed workers.

Pricing

Nearly all of Connect’s functionality is free. The cost for accepting payments remains the same. Setting up managed accounts costs just 0.5% of funds paid out—this flat rate includes ID verification, helping to generate tax documents where necessary, and even international accounts.

We’re thrilled to see diverse marketplaces and platforms being built and grown on Stripe.

Marketplaces have always been a big deal (just ask Bill Gurley), but we think that they’re likely to become more important still. As the rise of smartphones lets internet businesses to make the leap from the virtual to the real world, we think that enormously successful marketplaces and platforms remain to be built. We look forward to building the most useful tools and APIs for them along the way.

Thanks very much to our beta users for their feedback which has helped us shape the product. If you have any questions, get in touch!

Learn more about Connect Explore the Docs

March 23, 2015

Unifying payment types in the API

Max Lahey on March 11, 2015

As we expand the range of payment types that we support, we’ve released a new API version to unify the interface across payments of all types.

Globally, credit cards are the source of most online payments but they’re far from ubiquitous. Local payment mechanisms (such as China’s prominent e-wallets) power commerce in markets around the world. Meanwhile, novel payment types, from digital currencies to Apple Pay, are establishing new standards for online transactions.

In accepting these new instruments, there’s a lot to be excited about: broader global reach, increased revenue, and improved user experience. We want to make supporting them as easy as possible—hence building this unified API. For essentially all purposes, a payment is a payment regardless of where it came from. Payments of all types behave identically in the API and Dashboard.

Here’s a quick overview of the new API version:

UpdateCreate a charge from a source

Charge objects returned by the API now have a source property in place of the card property. This describes the source that you used for the charge, such as a card or Bitcoin receiver.

You can still create a charge using the card parameter, but it is now superseded by the source parameter.

UpdateManage customer sources

Customer objects now have the sources and default_source properties in place of cards and default_card. Similarly, we’ve introduced the new request parameters source and default_source although the old parameters will be supported indefinitely.

There is a new API endpoint for managing the customer’s payment sources beyond just cards: /v1/customers/{CUSTOMER_ID}/sources.

Here is an example of creating a charge in the new API version:


curl https://api.stripe.com/v1/charges \
   -u sk_test_BQokikJOvBiI2HlWgH4olfQ2: \
   -d source=aliacc_4hzzUhIjJ9sZZv \
   -d amount=1000 \
   -d currency=usd

{
  "id": "ch_15aZNk2eZvKYlo2CW82HVvQf",
  "object": "charge",
  "amount": 1000,
  "currency": "usd",
  "source": {
    "id": "aliacc_4hzzUhIjJ9sZZv",
    "object": "alipay_account",
    "created": 1424987420,
    "username": "maidongxi@example.com",
    "reusable": true,
    ...
  },
  ...
}

Switching to the source property means that you don’t need additional code changes to accept the new payment types that we add over time. We’ve made this switch as easy as possible: old API versions include both the old and new properties on all responses. For instance, if you charge a card on an old API version then the charge object will have identical card and source properties. If you charge an Alipay account on an old API version then the card property will be null and the source property will be the Alipay account.

If you have questions or feedback about this change, then we’d love to hear from you!

March 11, 2015

Smarter saved cards

Michelle Bu on January 21, 2015

Outdated card details are a big problem for online businesses. If your customers get a new card from their banks (or the number or expiry date changes), they have to manually re-add it to every service or the service stops working. It’s frustrating for customers, and loses paying customers for businesses needlessly.

We’ve rolled out support for handling new cards nicely. Now, when you save a customer with Stripe, their card will continue to work even if the physical card gets replaced by the bank. Stripe works directly with card networks so that your customers can continue using your service without interruption.

There’s no extra work required, and this feature works with most MasterCard, Discover, and Visa cards—without this improvement, over half of the cards stored with Stripe in the last year would stop working by 2016 if they weren’t updated.

{
  "id": "evt_5WmzN8V26JZQ1B",
  "type": "customer.card.updated",
  "object": "event",
  "data": {
    "object": {
      "id": "card_0ggBPvHF5HODr5",
      "object": "card",
      "last4": "3110",
      "exp_month": 11,
      "exp_year": 2017,
      "customer": "cus_8h42pwFc41m2",
      ...
    },
    "previous_attributes": {
      "exp_year": 2014
    }
  },
  ...
}

The customer.card.updated webhook will fire if your customers’ info changes.

The saved card only stays working as long as the credit or debit card account stays open. Your customers won’t have to worry about being billed after they’ve canceled their subscription or after they’ve closed a credit card account.

We hope this makes life easier for you and your users alike. If you have any questions or feedback, get in touch!

January 21, 2015

Machine learning for fraud detection

Michael Manapat on January 14, 2015

Using data from across the Stripe network, we’ve developed a machine learning system that evaluates charges in real-time and blocks those that are almost certainly fraudulent. By analyzing hundreds of different characteristics pertaining to each payment, these algorithms have already shielded businesses on Stripe from millions of attempted fraudulent charges.

Starting today, you can help improve these models. By letting us know when we’ve missed a charge that you believe to be fraudulent, or declined one that you think is legitimate, you can help train a model that’s optimized for your business. This ensures that the protection you receive will get better over time.

In practice, it’s very simple. In the dashboard, you can now:

  • Report and refund charges you believe to be fraudulent—just follow the “Report fraudulent payment” link when viewing a charge.
  • Mark as safe charges that Stripe blocked as suspected fraud. Charges we believe to be fraudulent will appear with a status of “Blocked” in the payments list and have a prominent message on the payment detail page. If you mark one of these charges as safe, you can retry it—we will not attempt to block it again.

There’s also equivalent functionality available in the API—check out the documentation for more details.

Over time, businesses on Stripe should not have to think about fraud and disputes. By enabling this feedback loop—between you and other businesses built on Stripe on the one hand, and our fraud detection infrastructure on the other—we’re confident that we’ll be able to deliver significant improvements in the future.

If you have any feedback or suggestions on these tools, or other thoughts about how we could better help you block fraud, please drop me a line.

January 14, 2015

Better disputes

Jason Eberle on January 12, 2015

Disputed payments—"chargebacks"—can be awkward and time-consuming. We’re taking advantage of the data we’ve seen across millions of transactions to make handling disputes easier and quicker, and to maximize the chance that you win disputes.

NewEnumerated evidence fields

Previously, you could only upload evidence for disputes as a string or a single file. We’ve learned that separating the type of evidence can come in handy, and you can now use typed fields such as product_description, shipping_documentation, or customer_communication in the API. (You can use the Dashboard to submit this data as well.)

NewFile uploads through the API

Before now, we only accepted evidence documents as a PDF through our dashboard. Based on your feedback, you can now upload PDFs, JPGs, or PNGs via the API or in the Dashboard.

UpdateDisputes in the Dashboard

We’ve also updated the evidence form in the Dashboard to take full advantage of these API changes. The new interface adapts to help you submit the most relevant evidence to win the dispute. For example, if a customer claims a product wasn’t received, the form will ask for shipping info if it’s a physical product or server access logs if it’s a digital service.

As much as we’d like these changes to be helpful if you face a dispute, we’re working to reduce disputes for all our users—we actually hope you have to use these tools as little as possible. If you’ve got any feedback, let us know.

January 12, 2015

Track team activity in the dashboard

Jack Flintermann on January 7, 2015

We’ve added two new tools to the Dashboard to help you keep track of activity on your account.

First, it’s now easier to see activity on your account (and monitor for potentially unauthorized actions) with the security history overview. Your overview will show recent actions from all of your team members—from password and bank account changes to suspicious logins or data exports.

Second, you can now see in your logs which of your team members performed any given action through the Dashboard. This should both increase security and reduce confusion when multiple team members are managing an account.

As always, please contact us if you’re ever worried that your account has been compromised. And of course, if you have any feedback, feel free to reach out!

January 7, 2015

The Interview

Patrick Collison on December 24, 2014

Starting at 10am Pacific Time this morning, you can watch The Interview at SeeTheInterview.com, powered by Stripe. The Interview was originally intended to be broadly available in theaters, but its release was curtailed after a number of distribution partners backed out.

We’re happy to be involved because we think it’s important that the internet remains an impartial platform. We’re proud to work with organizations defending digital freedoms such as the Electronic Frontier Foundation and the Freedom of the Press Foundation. We’ve partnered with Chilling Effects to prevent takedown notices becoming a censorship tool and supported net neutrality to try to keep businesses on a level playing field.

We don’t always endorse what businesses sell through Stripe, but we do think it’s critical that we and our peers don’t act as gatekeepers for what is and isn’t acceptable content.

Online freedom isn’t automatic, and it’s only through active effort that the internet will stay an open platform for creativity and innovation. We take our role seriously.

December 24, 2014

Libscore

Greg Brockman on December 16, 2014

When we announced the Open Source retreat, we'd pictured it primarily as giving people the opportunity to work on projects they'd already been meaning to do. However, the environment we provided also became a place for people to come up with new ideas and give them a try. One of these ideas, Libscore, is launching publicly today.

Top libraries used across the web.

Libscore, built by Julian Shapiro with support from both us and Digital Ocean, makes it possible for frontend developers to see where their work is being used. The service periodically crawls the top million websites, determines the JavaScript libraries in use on each, and makes that data publicly queriable.

For example, wondering about MVC framework popularity? Backbone is used on about 8,000 of the top million sites while Ember appears on only 185. You can also query which libraries are used on your favorite site, or view some precompiled aggregates.


We were attracted to Libscore because it sounded like internet infrastructure that should exist. Sometimes—as with our support for Alipay—we get to build such components directly; sometimes, it seems better to support something external—as with Stellar. If you have other ideas, please let us know (or work on them here!).

December 16, 2014