 from the APIs, the docs, the native SDKs we offer, and trying to make sure that Stripe is a really smooth and pleasant experience for all of you guys when you integrate payments in your mobile apps or your websites. So quick show of hands to start tonight. Who has already heard or used the Stripe API before? Few of you have used Stripe? Cool. Who has never heard of Stripe before? Cool, okay. So the big news for us actually this week is that we are officially live in Singapore. So that was the big announcement we made. We're super excited to be here finally and be able to serve all the great entrepreneurs and companies here in Southeast Asia. Super happy of course to have grabbed as one of our users here in the region. So tonight what I suggest is that for those of you who have not heard about Stripe before I will show you a few minutes what kind of things we do to make payments really easy. Then we'll dive right into the API, see how the core elements work together, native SDK for iOS, Apple Pay, and then if you guys wanna follow along at the end, if you wanna bring your laptop, feel free to just open up Xcode and sign up for Stripe.com if you'd like, and yeah, and then we'll open up for Q&A. So let's get started. And by the way at any point in time if you guys have any questions you're still free to interact with me like we're in a small group here so we can make that interactive and more than happy to take questions along the way. So quick reminder, why does even Stripe exist? Where does that even come from? Well it's quite funny because when you think about the history of the internet and HTTP in particular, the foundational protocol of the web, we became quite familiar now over time about a bunch of e-specifications typically payroll codes and all these things that we've seen many, many times. And I'm sure all of you in this room have obviously seen 404 page.com online on the internet. Or again maybe 403, forbidden. How many of you guys have heard of 402 before? 402, anyone? Yeah, it's Paven, right? Yeah, it says payment required but the best part is actually reserve for future use. That's all the spec says. And so for the longest time, for all of us developers in this room when we wanted to make great services and mobile apps, all we had to deal with was extremely complex because payment was obviously something critical for the internet. From the early days, the creators of HTTP knew it would be like huge to figure this problem out but it's never been fleshed out. That means for a long time we had to deal with like old fashion APIs and complex infrastructure to even accept payments. So that's exactly where Stripe came in. The goal being to make that very simple for all of the developers to integrate payments in their apps and services. So with that we started with a very simple API to process payments. And so as you can see on screen, extremely easy with the minimum amount of information that you need, typically a currency, an amount, your API key, identify your request with the API and a few parameters like the count number or description. So something extremely easy, that's how Stripe got started. Or if you wanna see something that's more like a code that's the equivalent in a Ruby as opposed to like the code request. So something very easy. The goal for Stripe has always been to get developers up and running in just a few minutes. Something extremely delightful to use because for us we believe that payments shouldn't be a problem that's booty in finance, it should be a problem in code like very simple to use and something very nice to play with. And the focus has always been not only to have great APIs but also make it possible for our users to offer great experiences. So at Stripe we try to build like all the tools that the API is that all of you can use to then build your products and make them super nice for your end users. So typically if you wanna control the entire UI, the entire UX, you're always in control to do that. Whether it's on the web or on Google. Since the early days, every single payment method has always been something we wanted to simplify too. We were the first company to accept Bitcoin. From the early days we had a partnership with Alipay to make sure that like Alipay could be like a payment method used, even for the merchants in the US. And of course we've been launch partners for Apple with Apple Pay and same for Google and Android Pay. So always on the verge to like all the payment method that are coming out there. So that you guys in favor of the payments and your services and your apps, you don't have to worry about these things. We'll Stripe will stay in care of that for you. And in particular because we're among iOS developers tonight, one of the things that we've done recently was to improve our native SDK for iOS so that instead of having just the Apple Pay support which we've had since the early days, we now have a lot of UI components that you can customize and reuse inside your app. So it's extremely nice because in some regions obviously Apple Pay is not available but even in Singapore you're not quite sure whether all of your users are gonna have Apple Pay set up on their phone, sometimes they don't. And at least if they don't now you have a super nice way to fall back on some beautiful user interfaces that you can customize. And we'll dive right in to see how they work. So with that let's leave the slides and take a look at the Stripe API. Any questions so far? Cool. So I just wanted to walk you through these simple steps before we dive in because I think it's quite important to understand how payment works at Stripe. So that's coming straight from our Stripe.com documentation. Every time you wanna accept a payment whether it's on mobile or on the web, the one thing you don't want to deal with is PCI compliance. Like the card number should never hit your servers because you don't wanna worry about all these things. So that's why with Stripe.js check out for the web all of the native SDKs what Stripe has built for you is the ability to completely tokenize those things. So that means that the card numbers are gonna be stored securely by Stripe which is PCI compliance so that you don't have to take that for you. We take the burden on us and all you have to do is use tokens that are entirely easy to use. So first step here let's assume we're on the web we wanna simply tokenize a card number. I'm just gonna go ahead and click submit. Now we have tokenized those card details and we can easily use that token. Usually the next step could be to just create a charge but what we recommend is actually to create a customer object first. The cool thing about customers in general is that when you have a customer object then at any point in the future you can charge that customer again, subscribe this customer to a plan for recurring billing or even refund your customers without asking all their card details over again. So really cool to have those customer objects. So if I go ahead and copy this code request here in my terminal and if I run this code I created my very first customer. Very easy to do by just passing the token we have created. And now that we have this customer object called Daniel we can easily make a charge of 20 Singapore dollars here and if I copy this code request made the first payment. And because we have stored these payment details I can actually do a second request to the Stripe API to make a charge but this time maybe 1,000 Singapore dollars. Those amounts are in sets. All right, so with that second payment created very easy. If I switch over to a Stripe dashboard here and refresh so that's my Singaporean Stripe dashboard in test mode so I can see exactly what's going on. So if I click on payments you can now see the two charges I just made one of 20, one of 1,000 Singapore dollars. Very easy to see what's going on. Next, I was just mentioning for those of you in the room who are building some SaaS businesses maybe you have the need for like recurring building. And so if you have to build that logic yourself it's extremely hard. Like imagine, okay I wanna build this customer on a monthly basis for this plan or maybe yearly but also if the card is declined I have to retry a couple times and like what am I gonna do next? So all this logic is automatically built for you at Stripe. So all you have to do is first create some plans objects. So in that case I'm gonna create like a monthly plan of 9.99 and I'm gonna call it platinum business. If I create this plan then all I have to do is simply subscribe Daniel, the customer that we had to this plan and if that's the case with just a simple comment like that Daniel is gonna be charged monthly 9.99. So all the logic is built for you you don't have to worry about these things. So that was just the first quick tour of the Stripe API. And typically if you wanna create customers or charges on your backend as opposed to using call requests like I've done that's extremely easy to do. We can just go back here. We start, create a new token again to securely store that card details. I'm gonna copy the token and if I go here for instance save the token. So typically your mobile app or your web app would get that token, send it over to your backend and then your backend would be here simply creating a customer from this token and charging the customer. So here typically let's say I wanna create a customer object for Nikuj using that token. I wanna charge him for $159 Singapore dollars passing just the customer ID. So that's like very simple Node.js JavaScript code running inside a playground called RunKit. So RunKit is actually a cool tool if you wanna use it to play around with JavaScript. It's now part of Stripe as well. So if I run this code, extremely simple we now have a new customer object for Nikuj and we have just made a new charge again. So if I go back to Stripe dashboard over here in your charge. So once again, very easy. All right, so now that we have made this quick tour of the Stripe API and how the code elements work let's dive into iOS and mobile more specifically. So from the very early days of Apple Pay as I mentioned we've always been a founder of Apple to support Apple Pay but initially it was pretty hard to build a full back and native UIs. So I just wanted to show you for instance this app that I built when I was working for Twitter. Those of you who know fabric and analytics I was previously on their team. And so I built this demo app using Stripe actually back in the day it's like a very simple furniture store where you could just like go ahead add some of your objects to your cart that you wanna buy. Let's say this nice pendant, interesting. Let's add this chair. So you get a few items and if I hit finish and pay very nice UI entirely based on Apple Pay and that's triggered automatically by the Stripe SDK. So I can easily touch ID, process the payment and there we go. The payment is now processed with Stripe. So very easy to do Apple Pay support. But the thing is as I mentioned earlier you're not quite sure whether like you customers and your users are gonna have Apple Pay systematically on the device. So that's why we built this new SDK with now UI components as opposed to just the Apple Pay support. So I just wanted to show you because we're here at Grab tonight I just wanted to show you both some new functionality of the Stripe API and also those new UI components for the iOS SDK. So let's imagine we wanna create a grab or something similar. What would we need? Well first we would need a way to potentially sign up drivers on the platform, right? And then we would need to have a very nice mobile app and the grab app for iOS is actually pretty good. So it's gonna be hard to compete but very nice mobile app so that people can request a ride and of course you wanna have a seamless way for them to pay for their ride. So they would get pay and then eventually you wanna pay out the drivers. So we actually have at Stripe a product called Stripe Connect that enables marketplaces and platforms to do those things. So signing up drivers or sellers on the platform in a white label fashion, controlling the entire UX and then accepting payments easily that goes straight to those sellers. So imagine let's say I wanna sign up Nikunj on the platform. All right, Nikunj at Stripe.com. I'm not gonna reveal your real anniversary. So let's do that. Working capital. What is the Volkswagen capital? You don't know? Yeah, that sounds like a good thing to do. Okay, and we probably need vehicles. So I'm gonna say that you're having Volkswagen and why did I skip your last name? I should not have skipped your last name. All right, so here we go. We have all the information we need I think to sign up Nikunj on the platform. So I'm just gonna hit sign up. So behind the scene, what Stripe is doing here is creating a white label managed account on behalf of Nikunj. So that way it doesn't even have to know that it has a Stripe account. It's completely white label, but this way it will be able to receive payments from any of the riders on the platform. So all right, so we're good to go. So if I fast forward a few hours or days later, we can see like the dashboard and how it works. That was a typical dashboard we made for Pirodez at Stripe. So you can see very easily how the how the API of Stripe lets you build those things. Cool, so now let's dive into mobile. I have here built this app for riders, so on the other side of the spectrum. And hopefully we'll be able to take some rides with this app. So a few things I wanted to point out. The first thing is what you can do is extremely easy in terms of customization. So the first thing I've done here was setting up a little bit of constate for the Stripe API so it knows exactly what to do. So first, my publishable key. So as you sign up for Stripe, you get a publishable key that you can unveil in your client's and a secret key that's now for your backend, something that you don't even want to share in your final product. In that case, I wanted to use Apple Pay, so I just put my Apple Pay merchant and fire, that's my domain, so I put merchant in front of it, company name rider, and you can also pass to that config a bunch of additional fields if you want to. So let's say you want to have the zip code for your users, you can pass that along as well. And the other thing that you can customize, as I mentioned, is the entire UI. So typically, we'll let you customize the background, foreground, the font, and all these things. So we'll see how it looks like in a few seconds. So let's leave it there. And if I compile this app with just like the Stripe SDK all set here, just gonna see now what's gonna happen. All right, so we have a simple map here. We have the ability to pick a destination and we have Apple Pay automatically supported. So I've written literally no code to have Apple Pay running in this app. So if I switch over to the right request, let's take a look at how this thing actually works to display those things. There's four methods that we have as part of what we call the Stripe Payment Contacts delegate. So the Stripe Payment Contacts is this new object that we have introduced so you can actually have those UIs working very nicely in your app. So let's go through this delegate. It's very easy to implement. The first thing we'll need is what we call the callback for payment contacts did change. So that means you have ready to update the user interface because we've been able to fetch the customer information and so you can display exactly what the latest is. So in my case, Apple Pay was the default method so I can just display Apple Pay here. There's another method as part of the delegate which is did fail to load with error. This one is actually really rare. It's only gonna be used typically if like internet is down or if the connection is pretty bad because that means we have not been able to fetch the customer details from the Stripe backend. Then the two interesting pieces are coming. The first is de-create payment results. So this one actually means that we've been successfully able to tokenize the call details from the UI and now using that payment result you're ready to send that to your backend to actually make a charge for real, make a payment for this customer. So you're gonna just pass along the result, the amount that you wanna charge the currency. So typically seeing up all dollars here and a conclusion block. And finally, just after this method is called you will have access to did finish with and passing the status. So that means we just completed the payment entirely. So now you can just update the UI accordingly. So typically if it's Apple Pay, all the UIs of Apple Pay have been dismissed or if it's your custom UIs and so on, everything has been dismissed and you're ready to retry or cancel or at least update the UI for the end customer saying the payment has been completed. Cool, so now if I build this up on my phone instead of the simulator, we'll be able to play around a bit more because on purpose I disabled Apple Pay on this phone so that we can actually see what the interface looks like when there's actually no Apple Pay in the device. I switch over to my phone and the app should be running in a second, there we go. Cool, so here we are. Let's get to the destination here to go somewhere. I'm gonna say Apple, cool. So now the interesting piece is this. So we've been able to compute a very simple PTA and estimate for the ride. It's gonna be 45 Singapore dollars and if I tap on payment, that's the native flow that we provide as part of the SDK. So you don't have to reveal all this in the places yourself now. You can simply customize their colors and pass along the information you want. So typically here I'm gonna put in my email. I'm gonna tap my card number. As you can see I have a very simple visa card number. Very easy to remember. And I can put a zip code because we had requested to have this extra building address info as part of the config. So if I done, perfect. So as you can see, we just called the method that tokenized the card. It saved that over to the backend in the customer object that we have. So now my card is registered here and I've been able to refresh the UI. If I kill this app entirely and if I start the app again, now my customer object has been saved on Stripes backend. So now my card will be automatically available for me here. So it's super cool. Only once the user has to sell up their card and it's automatically saved. So now I just have to type airport again because we've been killed in this thing about the, okay, about there is not here, perfect. Okay, so we're gonna go to the airport using this visa 4242 card and it's gonna be $45. So if I hit request right now, we just matched with the driver. In that case we matched with pirouette. So that's awesome. And now if we switch over to the Stripe dashboard, there's something very interesting to see here. First, we have, as we've seen earlier, the charge that has been powered here. I also was able to pass my statement descriptor. So that means if you're building an app like Grab or any other kind of mobile app, obviously you're gonna have Stripes showing up on the bank statements of your customers because they're not aware of Stripe. So you can easily pass along your details. And the two extra pieces of information that are really nice about discharge and that goes with like Stripe Connect that I was mentioning earlier. Discharge of $45 has actually two interesting properties. The first one is the collected fee. So as the platform builder, you can decide how much of every ride you wanna take for you to make revenue on your platform. So in that case, out of $45, I actually wanted to have 10% for myself as the builder of this app. And the second thing is this destination account. Usually when you make a charge on a Stripe API, typically you don't put any destination because the money goes to your account. But in that case, by passing along pirouette's account that we signed up, we know that the money is gonna go straight to her. So the amount of the transaction minus the cut you want to take and that goes straight to your managed account. So super, super easy to do. And if you take a look at the backend for that, what would it look like to actually have that implemented, let's say in JavaScript in Node.js? Well, first you would have to create managed account. Very easy to do just a few parameters. So in that case, we can pass, let's say, the country, an email address, and potentially any other pieces of information you want, like first name, last name, and you can always decide to pass this kind of information upfront or later on in the process, like all these accounts can be updated any time. And making a payment is exactly the same except you will have those two extra parameters that I described earlier, the first one being the destination. So in that case, we're assuming that we're gonna do a $30 charge for this customer that goes straight to driver account. And the application fee being once again, like 10% of the transaction, but that can be the value that you want. Any questions on the Stripe API or maybe on the Stripe SDK and the UI components that you've seen? Yeah? Just one question, if you use Apple Pay, right? Yeah. How do you get this for one time use as well? So the cool thing about Apple Pay and the rest of the payment method is that you don't have to worry about those things on your backend. Apple Pay is a bit specific because when you use Apple Pay, you decrypt the card on the fly from the device. And so it's actually fine to have a one-time token because you just decrypt on the fly and put your fingerprint. But yes, it's a one-time use token. Which means that I cannot store that token and reuse for future charges, right? I don't believe so, yeah. Because I think you don't have a Stripe. I don't think we see the card number in that case. We just use a token and we make a charge out of that token because we have like a simple one-to-one relationship between like Apple Pay tokens and Stripe tokens. Like they're easily chargeable for us. But yeah, so if your user or your app uses Apple Pay and has no other mention, I think they will use their fingerprint and touch ID every time. Anything? That won't... So how does it work for recurring payments? So in that case, you can use Apple Pay. It's a good question. You can, yeah. So with Apple Pay, you can do recurring payments only if they are true recurring payments. And the way Apple describes true recurring payments is that if it's truly a subscription service, right? So what you can do is you can charge that Apple Pay token every month or every day or every two weeks for the same amount. You can like have the amount go up and down a little but it should usually be the same amount. Yeah, it could not probably be as fancy as what we make possible with Stripe like the coupons and discount and then like managing plans and all sorts of other things. That's right. What you cannot do with Apple Pay tokens is save them and charge them for different amounts each time. So if you're a grab and you're taking rights, those are recurring. You're like taking payments again and again but that does not count as recurring payments. That is just... A one-time payment. A one-time payment. So you have to request to pay them each time and then do it. But in the back end, the good thing about Stripe is that you still get it. You can use any payment method with the same backend. Like Apple Pay gives you a Stripe token, Android Pay gives you a Stripe token, Alipay gives you a Stripe token, everything gives you a Stripe token and all of that can be used with the same backend. That's right. You just write one backend and all of the different UI components have different payment methods that talk to the same backend. So it's pretty neat. So typically here in that code example for Node.js, assuming your backend would be node, like obviously the token here would not be outcoded but it would be something along the lines of like request.coding.stripe.com like if you're using Express, for instance. And in that case, you would get a token from your client and you don't have to worry about like, oh, is it Apple Pay? Was it Android Pay? Was it like a card? Like it's exactly the same for you. So it's cool because from the backend perspective, you accept all payment methods without worrying about where the token comes from and from the mobile perspective, you actually don't have to worry about like building the UI or even like, oh, did this user use Apple Pay or was it actually a card? So it's going to be exactly the same on both sides. So extremely easy to use. And the other thing I was mentioning, you can actually go back to that. You can switch over to Excode again and go back to the app delegate. You have the ability here on Strip to set up all the colors and the look and feel for the SDK. So depending on your color scheme, typically a grab would probably be around like the green and in the US we have like, say Instacart, they are not like on the orange side of things. So it's extremely easy to like customize and look and feel and make it so all these payments, view controllers are part of your user experience and not like very foreign and different colors. We actually have like a, they did the Strip documentation now for iOS. So of course I did not mention that earlier but you can install the Strip SDK from your favorite package manager like Skogupod or Carthage or Fabric even. We probably don't recommend to use like dynamic framework or static framework yourself for the sake of updating but they're all available as well. So that's the app delegate, the publishable key. As I mentioned earlier, I need to config the API. And then finally, if we scroll down this thing we've seen here at the end, you have the ability to customize all these look and feel so you can pass like all these parameters and make sure that this UI looks really good. And also it works with any flow so if you have like a navigation post-color you can push and if you have more something like I had or like I want to have a model view post-color you can easily present. So extremely easy to do and accept payments in model. The other thing, is there any questions on other questions on Apple Pay natively or UI components for iOS or Stripe in general, anything on your mind? The other thing I wanted to mention I'm sure a lot of you guys have followed this news recently Apple Pay is launching on the web. As launched on the web. So it's now available as part of iOS 10 and it's gonna be very soon available in macOS Sierra whenever they launch, I think it's coming in a few days. Oh, it might have come, right? Was it yesterday? That was this week actually. So yes, macOS Sierra is now out. So we have Apple Pay for the web on Safari, mobile and desktop. And once again, like at Stripe, we made sure that we have all the documentation and all the processes in place to make that super easy. So on the documentation side, it's actually quite interesting because how many of you guys have looked at the Apple Pay for the web docs? Few of you? So we actually try to simplify that as much as we possibly could. So typically what we've done is extending Stripe.js. So Stripe.js is our JavaScript library. And what we did was making sure that it's completely extended and ready for Apple Pay. So in that case, I assume you have a website that includes Stripe.js. Now all you have to do after setting up your publishable key for Stripe once again is take a look at this new object that we made inside Stripe. So Stripe.apple.pay. And you can check the availability of Apple Pay that's an asynchronous function. And then you will know whether it's available or not and if you can present this new button that Apple can provide to you. And then with that, you can easily create the Apple Pay session. So the Apple Pay session will let you create like the sheet of Apple Pay with like all the details of like the currency and the country, the description of what you wanna have in this session. And then easily using that token once you build up the session, you can actually send that to your backend as well to process the payments. So very similar process between Apple Pay for the web and native of course, but in both cases, we make sure that we can offer the best experience for you guys to limit the number of line of codes you have to do. So on one side natively on DSDK, it's available out of the box. And if you're using the Cocoa Pods garbage to get this DSDK in your app or on your websites, just using Strive.js gets you up and running with just those few lines of code to add Apple Pay. So I'm not running Sierra on this device yet, but if we quit this app in the simulator that is running here on iOS 10. So typically that's the Strive.gov slash Apple Pay page. So if you want to take a look on your phone, for instance, you can now go over to Safari in iOS 10. And if you tap on try it now, that brings up immediately the Apple Pay sheet to make a payment exactly the same as native. So you can of course like switch over to your cards and so on and then just pay with touch ID. In that case, that's good and you're good to go. So just a few lines of JavaScript in your mobile sites and you're good to go to accept Apple Pay using Strive.js. So that's pretty exciting too. I think we're just at the beginning of simplifying payments also on the web and not only natively. And I think it's very powerful because when you look at the time we all spend on mobile, we spend like most of our time like on websites and mobile apps, but when you look at conversion rights for mobile, they're actually extremely bad for websites because if you find out a nice product you want to buy and if you want to Safari on iOS, for instance, then you have to go through all these steps to like put in all your card details and addresses and so on like your tiny keyboard and sometimes you just keep up. As opposed to now, we got Apple Pay for the web. You set up your wallet once on iOS and now any website on Safari can let you pay in just one tap and touch ID. So very exciting stuff. Any questions maybe on Apple Pay for the web? Have you guys used Apple Pay for the web already? If you have not, I really encourage you to go to strap.com slash Apple Pay from your phone or from macOS Sierra in Safari. So using this page, you can just like click to this straight now button and we'll actually not make a charge for real but you can actually see the flow and how it looks like on Safari. So pretty nice. Cool. The last thing I wanted to mention is that the strap iOS SDK that I showed you is also open source on GitHub. So if you go to github.com slash stripes slash stripe dash iOS, zoom in a little bit for you guys. So that SDK is all open source. So our engineers are developing in the open here and we actually have a couple of example apps inside this project. So if you guys wanna sign up for strap.com you will get in just a few seconds you will get your publishable key and secret key. And then if you download for instance this example from this repository you'll be able to just place your publishable key and then you will be good to go. The other project that we've also been putting up on github to simplify how you get started with Apple Pay and stripe payments on iOS is this project called example dash iOS dash backend that we have. So same it's under the stripe organization on github. And the cool thing with this backend is that we have a deploy to Heroku. So if you're just trying to get started with iOS on the SDK side you wanna have something that really works in a few minutes but you don't wanna worry about like building a backend yet that accepts payments and so on. You can actually easily click on deploy to Heroku here which I'm gonna do. And then you will be able to just like make your app talk to this backend and you'll be good to go. So in that case if I put an app name here let's say stripe Singapore we go into valuable and if I go to my account settings API keys, oops, API keys. We want my secret key of her, of course. So we can take my secret key, deploy the backend. And while the backend is deploying I can actually show you this other example app that we have in this job workspace. Here we go. So if I go over here in the app select gate it's with the app to it. So here I can click my publishable key. There's a green one already and here we can have stripe dash Singapore as the name. Yes. So if I put here stripe dash Singapore.heroku and if I build this app on my simulator I'm actually good to go with just those two lines of code. So see like just sign up for stripe.com you bring your publishable key in the iOS app. Then you deploy your backend easily to Heroku or Google Cloud or AWS or whatever you prefer. Bring this URL here and then this app is good to go. So it's just an app where you can buy some products based on the emoji. And once again, so that's the same flow as the one you've seen earlier except this time as opposed to presenting I'm just like pushing inside the navigation controller. So yeah, if you guys want to get started with stripe I think that's a good way to start. You can just go check out our project on github or just go straight to our stripe docs. Extremely easy to get started because essentially you get your favorite way to get the stripe SDK whether it's Cocoa Pod or Carthage and in just a few seconds you get to go. So really easy to do. Any questions from any products that you've seen? I will play whether it's native or follow up. I guess the last thing I should mention to you is the backend piece that I was just deploying. So the backend piece that I was just deploying is actually a convenience that talks to stripe SDK. So typically as you've seen during the flow when I am here changing my card details what we want is three things. The ability to fetch a customer for instance. So every time I'm loading this app can fetch my customer. The ability to add a source to a customer or remove sources from customers. So these kind of functionalities are just a few wrappers you have to make on the strategy and so to make that even faster for you guys to do that's why we open source the Ruby backend. But we're planning to have like many more languages for the examples for the app. So this way your SDK is up and running without boring. Cool. Well thank you so much. If you have any questions I'm happy to stick around and get to meet you and talk about all the great apps you're building. So thank you so much again for coming and yeah let us know if we can help further and I can't wait to see what you build with stripe. Thank you.