App Development 🧩

This guide explains what an EasyStore App is and walks you through building one, from registering it to publishing it.

What is an EasyStore App?

An EasyStore App is similar to a mobile application installed on your smartphone. A mobile application provides additional functionality to your mobile device. In the same way, an EasyStore App provides additional functionality to an EasyStore store.

EasyStore merchants can browse the apps published in the EasyStore App Store. It is a similar concept to the Apple App Store on iOS, Google Play Store on Android and Huawei AppGallery on HarmonyOS.

After a merchant successfully installs your app into their store, you can access the store's data, such as products, orders and customers, through the API provided by EasyStore. The scope of the access depends on the permissions requested during installation.

                         ┌──────────────────┐
                         │     Merchant     │
                         └────────┬─────────┘
                                  │ 1. Installs your app
                                  ▼
 ┌──────────────────┐      install to      ┌──────────────────┐
 │     Your App     │ ───────────────────► │  Merchant Store  │
 └────────┬─────────┘                      └────────▲─────────┘
          │                                         │
          │  2. Reads and writes store data:        │
          │     products, orders, customers...      │
          │                                         │
          │            ┌─────────────────┐          │
          └──────────► │  EasyStore API  │ ─────────┘
                       └─────────────────┘

How an integration works

Your app is a web service. To integrate with EasyStore, it exposes three URLs that EasyStore calls, and it calls the EasyStore API with an access token:

Your endpoint When EasyStore calls it What your app does
App URL
GET
When a merchant installs your app, and every time they open it Verifies the request, then either starts installation (new store) or shows your app's UI (installed store)
Redirection URL
GET
After the merchant approves the permissions your app asked for Verifies the request, exchanges the one-time code for an access token, and saves it
Webhook URL
POST
When a subscribed event happens, for example app/uninstall Verifies the signature, then reacts to the event

Every request EasyStore sends is signed with your app's Client secret, so your app can check it really came from EasyStore. Develop app walks through each endpoint step by step.

Before you start

  • An EasyStore Partner account (free)
  • A development store to install and test your app on
  • A server reachable on public HTTPS. During development, a tunnelling tool can expose your local server.
  • A database to store each store's shop domain and access token

Start building

Follow these guides in order:

Once your app is installed, Popular APIs shows what you can build with products, orders, inventory, customers and online store customisation.

FAQ

Does the app need to be reviewed and approved before I start building?

No. You can create the app, build its functionality and access the API before the review process. You only need to submit it for review if you wish to publish the app to the EasyStore App Store.

My app is only for my own clients. Does it need a review?

No. If you don't plan to publish it on the EasyStore App Store, skip the review and share the app link with the stores that need it.

Error messages

Common errors returned by the EasyStore API to apps:

Message Code Reason
Permission denied. permission_denied
  1. Access token is invalid or incorrect
  2. Store URL is incorrect
  3. App's scope does not match
  4. The app was uninstalled or disabled in the store
Redeem timeout. redeem_timeout The authorization code expired before it was exchanged (codes are valid for 5 minutes). Ask the merchant to install the app again, then exchange the new code straight away. Store the access token once you have it; you don't need to repeat this.

For HTTP status codes returned by the API, see Response status codes.

icon-accounticon-add-newicon-add-storeicon-appicon-appleicon-archiveicon-arrowdownicon-ascicon-bookicon-cancelicon-cart-addonicon-checkouticon-cherryicon-collectionicon-comfirmicon-confirmicon-couponicon-creditsicon-currencyicon-dashboardicon-discounticon-disintegrateicon-domainicon-dscicon-duplicateicon-editicon-emailicon-exclamation-triangleicon-exporticon-eyeicon-eye-slashicon-fullscreenicon-fullscreen-closeicon-generalicon-gifticon-gridicon-hddicon-helpicon-importicon-infoicon-integrationicon-invoiceicon-likeicon-listicon-locationicon-logouticon-new-tabicon-not-secureicon-optionicon-ordericon-outline-arrowdownicon-pageicon-paymenticon-plusicon-posicon-pricingicon-printericon-producticon-product-sumicon-product-sum-xicon-redirecticon-reporticon-reseticon-searchicon-secureicon-settingicon-shippingicon-staricon-storeicon-switch-storeicon-tagicon-taxesicon-templateicon-themeicon-tickicon-trashicon-unarchiveicon-uploadicon-user-tagicon-usersicon-weighticon-wholesale