Error Handling
Every rejection from .show() includes a code. Handle all of them gracefully — an ad failing to show should never block or degrade your app's core functionality.
| Code | Meaning | What to do |
|---|---|---|
NO_FILL | No eligible campaign for this Mini App, language and format right now. | Treat like a closed ad; continue. |
NETWORK_ERROR | The SDK couldn't reach the ad-serving endpoint. | Proceed without the ad; never retry in a loop. |
NOT_INITIALIZED | show() ran before init(), or the kinzId is invalid. | Fix the integration order / re-copy the kinzId. |
RATE_LIMITED | Ads requested unusually frequently in a short window. | Show ads on discrete user actions; contact support if it persists. |
NO_FILL
No eligible campaign was available for this Mini App, language and format at the moment of the request. Normal and expected, especially for newly-approved Mini Apps or less common language targets — not a bug in your integration.
.catch((err) => {
if (err.code === "NO_FILL") {
proceedWithoutAd();
}
})NETWORK_ERROR
The SDK couldn't reach the AdsKinz ad-serving endpoint — usually connectivity on the user's device. Handle it like NO_FILL: proceed without the ad. Do not retry automatically in a loop; retry on the next natural user action instead.
NOT_INITIALIZED
.show() was called before init() completed, or init() was never called with a valid kinzId. This one usually does indicate an integration bug: check that window.AdsKinz.init() runs before any .show() call, and re-copy your kinzId from the partner workspace if unsure.
RATE_LIMITED
Your Mini App requested ads unusually frequently in a short window. This protects the end-user experience and keeps our anti-fraud systems from flagging your traffic. During testing it usually means .show() is being called automatically or in a loop. In production under normal usage, contact support — the limit may need adjusting for your traffic pattern.
General principle