Skip to main content

How It Works

  1. A user taps an EarnOS offer link — we generate a click ID and pass it to your platform via your tracking URL template (e.g. sub1, custom_1, aff_sub, etc.)
  2. The user completes an action on your platform (install, purchase, reaches a level, etc.)
  3. Your server sends a postback to your dedicated EarnOS callback endpoint with the click ID and event details
  4. EarnOS validates the postback, matches it to the user, and processes the reward

Your Callback Endpoint

Each provider receives a dedicated endpoint:
Your slug is assigned during onboarding (e.g. ayet, affise, tune). Both GET and POST methods are accepted. The endpoint returns 200 OK immediately — processing happens asynchronously.

Parameters

Parameters can be sent as query string (GET) or JSON body (POST). The exact parameter names depend on your platform’s adapter — we support aliases for all major networks.

Required

string
required
The EarnOS click ID provided to you via the tracking URL. Depending on your platform this may be passed as click_id, custom_1, sub1, aff_sub, clickid, or external_identifier.
string
required
The event type, e.g. install, tutorial_complete, level_achieved_10, purchase. Must match the event names configured for your campaign in EarnOS.
string
required
Your unique transaction/conversion ID for this event. Used for deduplication — sending the same transaction_id twice will be treated as a duplicate. Aliases: event_id, conversion_id, action_id, tid.

Optional

string
Payout amount, e.g. "2.50". Aliases: payout_usd, payout, amount, sum, currency_amount.
string
default:"USD"
ISO currency code. Defaults to USD when payout_usd is used.
string
When the event occurred. Accepts ISO 8601, unix timestamp (seconds or milliseconds). Aliases: callback_ts, datetime, ts, timestamp.
string
EarnOS launch tracking ID (provided in your tracking URL template). Aliases: custom_2, launchId, aff_sub2, sub2.
string
EarnOS launch identity (provided in your tracking URL template). Aliases: custom_3, launchIdentity, aff_sub3, sub3.
string
Your internal offer/campaign identifier.
string
default:"confirmed"
Conversion status. Use is_chargeback=1 or status=reversed to report chargebacks/reversals.

Authentication

Authentication is configured per-provider during onboarding. We support multiple verification methods to match your platform’s capabilities. Sign the query string using HMAC-SHA256 with your shared secret. The signature can be sent as a header or query parameter depending on your configuration. Signature computation (sorted query):

API Key

Include your API key as a header or query parameter:

HMAC-SHA256 Body Signature

For POST requests with JSON bodies:
Timestamps must be within 5 minutes of server time.

IP Allowlist

Callbacks are only accepted from your registered IP addresses. No signature required.

Other Methods

We also support Timestamped Token, Affise S2S, and Signed Redirect (including Dynata-specific) verification. Contact your partner manager for configuration details.

Examples

GET — Install Event (Query String)

POST — Purchase Event (JSON Body)

Multiple Events (Same Click)

A single click can have multiple events — common for milestone-based offers. Each event needs a unique transaction_id:

Response

All requests return 200 OK immediately. Processing is asynchronous.
Duplicate events (same transaction_id) are silently deduplicated — you will still receive a 200 response.

Error Codes

Retry Logic

  • 200: Accepted — do not retry
  • 400: Client error — do not retry (fix the request)
  • 401: Auth error — do not retry (fix credentials)
  • 503: Server error — retry with exponential backoff
Recommended retry schedule: 1s, 5s, 30s, 2min, 10min, 1hr (then alert).

Tracking URL Parameters

During onboarding, EarnOS configures your tracking URL template with the following values in your platform’s sub-parameter slots: Your postback must include at least the click_id value so we can attribute the conversion.

Event Names

Event names are configured per-campaign during onboarding. Common examples: Event names must match exactly as configured. Contact your EarnOS partner manager for the list of events configured for your campaign.

Testing

Verification Checklist

  1. Verify click_id capture: Ensure your tracking template correctly captures the EarnOS click ID
  2. Send test postback: Use a real click_id from a test session
  3. Check response: Confirm you receive 200 OK
  4. Verify in EarnOS: Confirm the conversion appears in the EarnOS dashboard
  5. Test duplicate handling: Send the same postback again — it should be silently deduplicated
  6. Test all event types: Send each configured event name to verify the full flow

FAQ

Q: What’s the attribution window? A: 7 days by default. Postbacks for clicks older than 7 days will be rejected. Q: What happens if I send a duplicate? A: Duplicates are silently deduplicated based on transaction_id. You’ll still receive a 200 response. Q: Can I send multiple events for the same click? A: Yes. Each event needs a unique transaction_id. This is standard for milestone-based campaigns (e.g. install, then tutorial, then level 10). Q: How quickly are rewards processed? A: Postbacks are processed within seconds. Reward payout timing depends on the campaign configuration. Q: Do you support chargebacks/reversals? A: Yes. Send a postback with is_chargeback=1 or status=reversed using the same click_id. This must be enabled for your account.

Support

  • Integration issues: Contact your EarnOS partner manager
  • Technical questions: support@earnos.io