Matter vs Zigbee vs Vendor API: Choosing a Smart Home Integration Strategy
Matter vs Zigbee vs vendor API smart home integration compared on engineering effort, local execution, ecosystem breadth and vendor lock-in for your build.
Answer up front — The documented path is six steps: register a developer account, create a project (yielding an
appIdand a key), choose an authorisation mode, onboard devices, call the API, then configure message push and an IP whitelist. The authorisation choice shapes everything after it. Aqara account binds a real user's Aqara Home devices. Project authorisation is for B-side estates onboarded through the Implementation Tool. Virtual account creates an Aqara account for your own end user so your app never asks them to sign up twice — and that virtual account cannot be used in Aqara Home, only through the SDK.
Our AqaraLink developer platform overview covered what the platform is and which modules exist. This post is the first week of building on it: the order of operations, and the branch you have to pick in week one.
The English developer docs at opendoc.aqara.com set out the cloud integration process in a fixed order. Follow it literally — two of the steps depend on configuration the previous one creates.
appId is assigned to the project, and on approval a default key is generated, visible under Project Details → Key Management, where you can add more.Two facts from that list get skipped and cause pain later. First, a project is not usable until it is approved. Second, user and device data are isolated between projects, but the same user can be authorised to multiple projects. A project per client therefore does not isolate tenants in any meaningful sense; it multiplies the credentials you have to rotate.
This is the branch. It is cheap to read, expensive to change after your onboarding UX is written.
| Aqara account | Project authorisation | Virtual account | |
|---|---|---|---|
| Intended for | A consumer app that augments Aqara Home | B-side estates — hotels, offices, schools | Your own app with its own account system |
| Account source | Real Aqara account (phone or email) | Aqara IoT Solution Platform enterprise account | Created by your backend via API |
| Onboarding route | Aqara Home app | Implementation Tool app | App SDK or implementation tool |
| Visible in Aqara Home | Yes | No | No — SDK only |
The "Visible in Aqara Home" row is the whole point of the virtual account mode, and the constraint in bold is the part that catches teams out.
The documentation is blunt about the motivation. A developer who already has an account system, and wants to bring Aqara devices into their own IoT ecosystem without the end user perceiving two sets of accounts, integrates the Aqara device SDK in their own app and binds devices to a specified virtual account. A virtual account is defined as a virtual Aqara account created through the interface, against which a user can bind devices through the open SDK or the implementation tools.
For an integrator building for a client:
accountId — a string you create, guaranteed unique under the appId — is the root. Your client never creates an Aqara account and never needs to know one exists. The platform returns an openId, the unique identifier for the virtual user, which is the handle your backend stores and uses in every subsequent call.config.auth.createAccount takes an optional needAccessToken boolean — false returns just the openId, true also returns accessToken, refreshToken and expiresIn. The optional accessTokenValidity defaults to 7 days and accepts 1–24 hours or 1–30 days. The refresh token is valid until the access token's expiry plus 30 days.Step 1 — create the virtual account:
`` { "intent": "config.auth.createAccount", "data": { "accountId": "18900001234", "remark": "lumi-1" } } ``
Step 2 — request an authorisation code with accountType 2 for virtual account. The code is valid for 10 minutes. Step 3 — exchange it with config.auth.getToken for accessToken, refreshToken, expiresIn and openId.
The real Aqara-account path follows the same shape from a real account: config.auth.getAuthCode with accountType 0, code valid 10 minutes, then config.auth.getToken, whose access token defaults to 7 days. Project authorisation is the same exchange with accountType 1 and a code from the IoT Solution Platform console. config.auth.refreshToken handles renewal, and all three return tokens on the same terms — refresh validity is the access token's expiry plus 30 days, a hard ceiling on how long a forgotten refresh can sit.
Check the current parameter names and account-type values against the live authorisation management page before you hard-code them. The docs are versioned separately from your integration.
Calls go to https://${domain}/v3.0/open/api, where the domain is a server area. The docs list deployed regions including China mainland, United States, South Korea, Russia, Europe and Singapore, each with its own API domain and timezone, selected on the project. Required headers: Appid, Keyid (the key of your app), Nonce (a random string, different for every request) and Time. Accesstoken is present where the interface needs it.
The sign rule, verified from the signature rules page: sort the header parameters by ASCII and splice as Accesstoken=xxx&Appid=xxx&Keyid=xxx&Nonce=xxx&Time=xxx, append the Appkey directly to that string, lowercase the result, then MD5, 32-bit. That is your Sign header.
One documented exception: some interfaces do not require Accesstoken, and in that case Accesstoken does not participate in the signature. Getting this wrong produces error code 106 Invalid sign, and 107 Illegal appKey catches a key you have not activated.
| Route | What it is for | Notes worth knowing |
|---|---|---|
| Aqara Home app | Users who already live in the Aqara Home app | Devices land in their real account; suits the Aqara-account authorisation mode |
| Implementation Tool app | B-side installation teams, batch device adding | Works with the Aqara IoT Solution Platform; project → scheme → space → add device. Android only |
| App SDK | Your own app owns onboarding | With-UI or without-UI variants; generally the right choice for virtual account authorisation |
The without-UI SDK is narrower than people expect: it is only used to add the gateway device, with sub-devices then added through the write.device.openConnect interface. The with-UI SDK gives you Aqara-styled pages you can use directly or restyle. For Zigbee, onboarding is hub-driven — your app calls the cloud HTTP API to put the hub into pairing mode, and the hub discovers and binds the surrounding devices. One honest note from the docs: no download link for the App SDK is published on the developer platform, and the page directs developers with requirements to contact Lumi's overseas business team. Plan for that conversation before you plan a sprint.
For a client's home you want a project, an IP whitelist, and the Implementation Tool or SDK for a handful of devices. For a whole estate you are in project authorisation on the Aqara IoT Solution Platform, with the Implementation Tool handling batch addition and a project authorisation code exchanged for a token.
The scoping question is not "how many devices" — it is "whose identity holds the devices when the contract ends." Under a virtual account, your client's devices sit in accounts you created, and when that client leaves the estate has to be migrated, not decommissioned. Under project authorisation, the estate sits inside your project and the devices come with the space design. Write down who can trigger a token refresh, because that person effectively controls the devices.
appId recorded, default key visible under Key ManagementNonce generation confirmed non-repeating in your HTTP client
Matter vs Zigbee vs vendor API smart home integration compared on engineering effort, local execution, ecosystem breadth and vendor lock-in for your build.

Aqara automation scene API developer guide: how scenes and automations differ as objects, where rules should run locally, avoiding automation explosion.

Aqara push subscription webhook guide: HTTP versus MQ delivery, the documented 5% failure-rate suspension rule, idempotency, ordering and reconciliation.
Tell us about your space. Our B2B team will reply within one business day with a recommended setup and quotation.
WhatsApp us →
[email protected]
+603-5880 5486