Create a Button Flow on

Create a Button Flow

Button Flows take regular Merchant URLs to products, categories or just the homepage and replaces them with a fully attributed Button Checkout Flow, optimized for both conversion and user experience.

  • In App Mobile Web Checkout. By default, if the app is not installed the Button Mobile Web Checkout view will allow for a fast, attributed and commissioned purchase, without leaving the app.
  • Deep Linking Support. Pass a deep link to an item, content or product and the user will be taken to the correct page, on the web or in app -- we'll handle reformatting links under the hood if necessary.
  • App to App Linking. If the user has the app installed, they will always be deep linked to the app giving them their logged in state, saved credit card and massively increasing conversion.
  • Drive App Installs. The Mobile Web Checkout can optionally allow the user to install the merchant app, leading to better conversion and an install commission for you.

Add the Button SDK

Button Flows are a feature of the Button SDK, if you haven't already, complete the Button SDK Getting Started guide.


Request a Partnership

Button Link Commissioning works by taking an existing link and enhancing it with a mix of tracking, native technology and a highly optimized user experience. This is made simple by using our drop-in SDK.

In order to begin driving commissions or enhancing conversion for links in your app, you first need some Merchant partners. You can apply to partner with Merchants by signing up in the the Dashboard and choosing partners on the Merchants Page.


Create your first Button Flow

When you're about to send a user to a web URL, simply pass the URL to Button instead. Button can tell you synchronously whether a URL can be commissioned and exchanged.

A BTNMerchantAction can also be passed an optional publisher reference string.

let url = URL(string: "https://www.jet.com/products/1234")

let merchantAction = BTNMerchantAction(url: url!, publisherReference: "my-pub-ref")
Button.shared().present(merchantAction)
NSURL *url = [NSURL urlWithString:@"https://www.jet.com/products/1234"];

BTNMerchantAction *merchantAction = [BTNMerchantAction actionWithURL:url publisherReference:@"my-pub-ref"];
[[Button sharedButton] presentMerchantAction:merchantAction];

Presenting a BTNMerchantAction will pass control to the Button SDK. If Button can enhance the given link, the associated merchant action will be automatically invoked (i.e. app link, install flow, or web checkout). If no action is available, the original link will be presented to the user in our native in-app mobile web browser.


Determining Flow Availability

let url = URL(string: "https://www.jet.com/products/1234")

if (Button.shared().canFetchAppAction(with: url!)) {

    Button.shared().fetchAppAction(with: url!) { appAction, error in
        if appAction != nil {
            appAction?.invokeAction()
        } else {
            // In the unlikely event of an error, fall back to original action.
        }
    }
} else {
    // Button doesn't support the URL. Fallback to original action.
}
NSURL *url = [NSURL urlWithString:@"https://www.jet.com/products/1234"];

if ([[Button sharedButton] canFetchAppActionWithURL:url]) {

  [[Button sharedButton] fetchAppActionWithURL:url
                                    completion:^(BTNAppAction *appAction, NSError *error) {
        if (appAction) {
          [appAction invokeAction];
        }
        else {
          // In the unlikely event of an error, fall back to original action.
        }
  }];
}
else {
  // Button doesn't support the URL. Fallback to original action.
}

What's Next

From here, there's much more to take advantage of:

  • Webhooks. Receive real-time server-to-server notifications for any installs and orders that occur.
  • Orders API. Fetch batches of orders any time you want from the Orders API.
  • CSV Export. Download all data for a period using CSV Download in the Dashboard.