Quick start
You integrate with Omer Insight once. We connect the survey providers and send their confirmed events to your App. You supply the user identity, embed the wall and maintain your own user ledger. Your users do not need an Omer Insight Publisher account.
- Your user opens the wall
Your site passes the App code and the signed-in user ID to the iframe.
- Omer Insight confirms the event
The survey provider notifies our server; we associate the event with your App and user.
- Your server handles the callback
Verify the signature, process the event once and acknowledge with HTTP 2xx.
Create your App
Register and verify your Publisher account, then open Apps → Create App. Every new App starts in test mode, including Apps created by an approved account.
Collect the credentials
Open the App → General settings. Copy App code, App secret and the security hash. The Integration information tab contains examples, not a second set of credentials.
Save your settings
Set the App name and user-facing currency in the editor. In Postback settings, save a public receiving URL. A main URL is required even if you configure separate event URLs.
Build the two connections
Embed the wall for your signed-in users and implement a server endpoint for callbacks. These are separate connections: showing the wall does not automatically update your database.
Test before launch
First test the receiving endpoint with Send test postback. Then add your test user ID or IP in General settings and verify the wall with that identity.
Request launch
Save all changes, finish the checks below and click Request launch in the App editor. Only an administrator can change the App to live.
App code and secrets
Find these values in App → General settings. Use the credentials for the same App at both ends of the integration.
Embed the surveywall
Load the wall in an iframe on your authenticated user page. Use a stable ID from your own system; the same ID returns as user_id in callbacks. Do not generate a new ID on each visit.
Privacy before loading the survey wall
Disclose Omer Insight, CPX Research and PrimeSurvey (Prime Earn) in your privacy notice. Loading the iframe starts server-side survey matching and shares the user ID, IP address and browser information with enabled partners. Where applicable law requires prior consent for that sharing, obtain it before assigning the iframe src. Our cookie controls do not replace your own disclosure or consent requirements.
Replace YOUR_APP_CODE, USER_123 and SERVER_GENERATED_HASH. The PHP example builds and URL-encodes the link on your server; replace authenticatedUserId with your own session identity. The browser receives only the final URL. If your page uses a Content Security Policy, allow https://offers.omerinsight.com in frame-src. Verify survey navigation on the browsers or WebViews you support.
URL parameters
Receive postbacks
A postback is a server-to-server notification. Omer Insight sends an HTTP GET request to the URL saved in your App. Values replace the placeholders before sending. Your endpoint must work without a browser session or login cookie.
publisher.example.com below is a placeholder for YOUR receiving server, not an Omer Insight endpoint. Replace it with your public HTTPS domain and handler path. Keep the placeholder tokens in the saved template. Configure the final URL directly: no localhost, private IP, login page, CAPTCHA or redirect.
Placeholders
Postback types
All four event types are enabled. The main URL is required. Separate screenout, bonus and reversal URLs are optional; an empty separate URL uses the main URL. This lets you implement one endpoint that routes by type and status.
Verify the signature
Every callback includes X-Omer-Signature. Current App callbacks use GET: calculate HMAC-SHA256 with App secret over the exact full public URL, including the unchanged path and query string. Compare the lowercase hexadecimal digest using a constant-time comparison. Never sort, decode or rebuild the query before verification.
These examples show URL construction and signature verification. They are not a complete wallet SDK. process_omer_event_atomically is a function you must implement using your own database and user model. The current App editor sends GET callbacks; the PHP POST branch is only for compatibility.
Process a callback reliably
Keep signature verification, event validation and durable processing on your server. A successful HTTP response tells us you have safely accepted this event.
- Verify before trusting fields
Use the App secret and the configured public origin, not an untrusted Host header. Behind a reverse proxy, preserve the exact raw request path and query.
- Validate the identity and event
Check user_id against your users; allow the documented type and status values. Treat all query values as strings until validated. Preserve the full trans_id, including cpx:, prime: and reversal suffixes.
- Separate test and live processing
test=1 belongs only in your test ledger. test=0 is live. Do not infer the mode from the transaction ID prefix.
- Commit once in a database transaction
Use a unique event key and commit the event record and ledger update atomically. For a duplicate already committed event, make no change and return 2xx. A reversal has its own trans_id and references the credit through original_trans_id.
- Acknowledge after durable acceptance
Return 200 OK after committing, or after storing the event in a durable queue you will process reliably. A memory-only task is not enough. Return 5xx for a temporary failure. Respond within 15 seconds.
Callbacks can arrive out of order. If a reversal arrives before its original event, store it durably as pending and reconcile when the original arrives. Never silently discard it or attach it to a different transaction.
Retries & idempotency
The first delivery is immediate. Network failures, 408, 429 and 5xx are retried at the intervals below. Other 3xx and 4xx stop automatic retries; redirects are not followed. After fixing the endpoint, contact support with the transaction ID to arrange a replay.
Delivery may repeat after a timeout or recovery, even if your first processing succeeded. Keep a unique key on App + test mode + full trans_id, and return 2xx for an already committed event without applying it again.
Testing
Use Send test postback to verify your receiving endpoint: these events have test-* IDs. Allowlisted users can also test the wall while the app is in test mode; those callbacks keep provider-prefixed IDs. Always isolate events using test=1, not the ID prefix. Test callbacks must never change real balances. Passing the send test does not validate the upstream API, real survey completion or return redirect.
In App → Postback settings, enter a user ID that exists in your test system. Start with the main callback, record the returned transId, then test the other types. The button saves the visible callback settings before sending and calls your real URL.
The test wall uses real upstream surveys. Test mode isolates Omer Insight records and sets test=1; it is not a simulated provider sandbox. Use only provider-approved testing and do not fabricate completions. End-to-end acceptance includes survey navigation, return navigation, the provider event and your server processing.
Request launch
- Your main URL is saved, reachable and verifies the HMAC header.
- All event types, duplicate handling, reversal handling and test isolation have passed your checks.
- Your iframe uses stable user IDs and server-generated links; you have checked your supported browsers.
- Save every edited tab, then click Request launch. Keep the saved configuration unchanged while it is being reviewed.
Saving changes while a request is pending withdraws that request; finish editing and submit again. Account approval does not automatically publish Apps. After approval, start a fresh wall session and verify live callbacks before gradually increasing traffic.
Troubleshooting
The test wall does not open
Check the App status, saved user/IP allowlist and test completion limit. The user ID must exactly match ext_user_id in your link. A supplied invalid secure_hash is rejected even in test mode.
The wall opens but has no surveys
Availability depends on the user, location, device and provider inventory. An empty list alone does not prove the integration is broken. Test from an eligible real connection; a proxy or VPN can be blocked.
No callback arrives
First check the Portal postback log. If a delivery exists, inspect its HTTP status and your firewall/server log. If no event exists, contact support with the App code, user ID and time so the upstream event can be checked.
The HMAC signature does not match
Check App secret, the public HTTPS origin and the exact raw URL. Query parameter order, percent encoding, a rewritten path or an HTTP/HTTPS mismatch changes the signature. Do not use the security hash as the HMAC key.
The log says success but my user was not updated
2xx confirms only that your endpoint accepted the request. Check the user mapping, test ledger, unique event key and transaction commit. Do not return success before the event is stored.
A failed callback needs to be sent again
Fix the endpoint first, then contact support with the App code and full transaction ID. Replaying must preserve the original event ID; creating a new manual test is not a replay of the failed event.
When contacting support, include App code, full trans_id if available, UTC time, HTTP status and a redacted error message. Never send App secret, security hash or live user credentials.