“This offerwall link is invalid or expired”
We refused to open the wall for that link, and your user sees this message instead of offers. On a wall that uses signed links it’s almost always a link that was already used or is more than 5 minutes old: sign a fresh one for every launch.
See also: Hosted Offerwall
On this page
On a wall that uses simple links, check the wall ID, the uid and the source in the URL. If every link fails, even a fresh copy of your snippet, we may not have switched your wall on yet.
| What you see | What it means | What to do |
|---|---|---|
| The message after a reload, or on a link opened a second time | A signed link works once | Sign a new URL every time the wall opens |
| The message on every signed link | The signature or the time doesn’t match | Check the field order, the secret and that ts is in seconds |
| The message on every link, signed or not | The wall ID, the account or a wall we haven’t switched on yet | Compare the wall ID with your snippet, then email us |
| A blank frame, or the browser’s refused-to-connect box, in an iframe | We tell browsers not to frame a wall we can’t open, or your site isn’t on the wall’s allowed origins | See The wall ID is wrong and the last check, and embedding |
| The wall opened, but after a long while taps say “The offer didn’t open. Try again.” | A wall visit lasts an hour | Open the wall again; on signed links, with a new URL |
The signed link was already used
Each signed link carries a
noncethat works once. A reload, a link cached by your app or a link shared with someone else reuses it.How to confirm: the first open worked and the second didn’t.
Fix: have your server sign a new URL each time the wall opens, and don’t cache it in the app or the page.
The signed link is more than 5 minutes off our clock
tsmust be within 5 minutes of our time, earlier or later.How to confirm: compare
tsin the failing URL with the current Unix time in seconds. A 13-digittsis in milliseconds.Fix: send whole seconds, sign at the moment the wall opens and keep your server’s clock synced.
The signature doesn’t match
How to confirm: a fresh link fails on its first open, with the right time.
Fix: sign the wall ID,
uid,tsandnonce, in that order, joined by newlines, with HMAC-SHA256 and the wall’sows_secret, as hex. If the URL has aproperty_id, sign it as a fifth line; if it doesn’t, don’t. Sign theuidexactly as it arrives after URL decoding. Simple and signed links has working code.The wall requires signed links and this one isn’t signed
How to confirm: your Docs or property page says the wall requires server-signed launch URLs, and the failing link has no
sig.Fix: sign every launch on your server. To let simple links open the wall instead, email us with your wall ID.
The link carries part of a signature
On a wall that takes simple links, a link with any of
ts,nonceorsigin it is checked as a signed launch, and half a signature fails.How to confirm: the link has one of those three parameters.
Fix: remove all three, or sign properly.
The wall ID is wrong
How to confirm: the part after
/w/doesn’t match the wall ID in your Docs snippet or on your property, character for character.Fix: copy the snippet again rather than retyping the ID.
The
uidis missing or emptyThe wall shows this message without asking us when the link has no
uid.How to confirm: the link has no
uid=, oruid=with nothing after it.Fix: fill in your user’s ID on every launch. A literal
YOUR_USER_IDopens the wall, but every user then shares one ID.sourcehas a value we don’t acceptsourcemust behosted,iframe,iosorandroid, and appear once.How to confirm: the link has another value (
web,app), or twosourceparameters, which can happen when a wrapper adds its own.Fix: keep one
sourcewith one of the four values, or leave it out.The
property_idcan’t be used with this wallHow to confirm: the link has a
property_id, and the check under Find the exact reason names the property.Fix: in Properties & Apps, check that the property exists on this account, is active, has Hosted Offerwall turned on under Integrations, and is linked to this wall. Copying the property’s own snippet gets the right ID.
The wall isn’t switched on, or the account isn’t active
We switch each wall on for real users when we set up your account. A wall we haven’t switched on yet, a wall that was deactivated or an account that isn’t active refuses every launch, signed or not.
How to confirm: every link fails, including a fresh copy of your snippet, and the check under Find the exact reason answers
Offerwall runtime is unavailable,Offerwall app is disabledorOfferwall access required.Fix: email us with your wall ID.
The wall shows one message for every refusal. Our launch endpoint names the reason. Send it the values from the failing link:
curl -s -X POST https://affiliateos.xyz/offerwall/sessions \
-H "content-type: application/json" \
-d '{"appId":"owapp_your_wall","uid":"u_48213","source":"iframe","country":"US"}'Add "ts" (as a number), "nonce", "sig" and "property_id" when the link has them. A refusal answers with a message such as Offerwall launch nonce already used, Offerwall launch link expired or Offerwall app not found. A success opens a wall visit, as a launch would; on a signed link it uses up the nonce, so test with a fresh one.
Email hello@affiliateos.ai with:
- the email you sign in with,
- your wall ID (
owapp_...), - the failing launch URL (a used or expired signed URL can’t open the wall again, so it’s safe to send),
- the time it failed, with your time zone,
- where the wall was shown: a link, an iframe, a browser tab or a WebView, and on which device,
- the
messagefrom the check above, if you ran it.