Home
Offers & Tracking
Tracking Fundamentals
Accessing & Editing S2S Postback URLs
Accessing & Editing S2S Postback URLs

SERIES:

Accessing & Editing S2S Postback URLs

Learn how to access and configure server-to-server postback URLs, pass conversion information, and track detailed metrics across your marketing campaigns using Everflow's flexible S2S postback system.

Overview

Server-to-Server (S2S) postbacks are the backbone of conversion tracking in Everflow. When a conversion happensβ€”a sale, signup, or leadβ€”the Advertiser's server sends a signal directly to Everflow's server with the conversion details. This method is more reliable than browser-based tracking because it doesn't rely on cookies or JavaScript.

S2S postbacks require two parties to coordinate: you set up the postback URL with the right parameters, and the Advertiser's technical team configures their system to fire that URL when conversions occur.

Global Postback vs. Offer-Level Postback
🌐
Global Postback
One URL for all Offers
Location
Control Center β†’ Platform Configurations β†’ Postback URL
Scope
Fires for ALL conversions across every Offer
Setup
Configure once β€” applies universally
🎯
Offer-Level Postback
Custom URL per Offer
Location
Offers β†’ [Offer] β†’ Tracking tab β†’ Postback URL
Scope
Fires ONLY for conversions on this specific Offer
Setup
Configure per Offer β€” overrides Global if set
πŸ€” Which Should I Use?
πŸ“‹ Decision Guide
βœ… Use GLOBAL Postback when:
β€’ Advertiser has one tech stack for all campaigns
β€’ Same postback endpoint works for every Offer
β€’ You want "set it and forget it" simplicity
β€’ Different Offers just need different TIDs
βœ… Use OFFER-LEVEL Postback when:
β€’ Different Offers send to different endpoints
β€’ Testing/troubleshooting a specific campaign
β€’ Offer requires unique parameters or format
β€’ Working with multiple Advertisers per Offer

Accessing Postback URLs

1
Navigate to Offers
In the left sidebar, head to Offers β†’ Manage
2
Select Your Offer
Click on the specific Offer name to open the Offer Details view
3
Access the Postback URL
Navigate to the Tracking card β†’ Conversion Tab to find the Postback URL (if S2S is configured as the Conversion Tracking Method)
Accessing Offer-Level Postback
βœ… When to Use Offer-Level Postback
β€’ Different Offers send to different endpoints
β€’ Testing or troubleshooting a specific campaign
β€’ Offer requires unique parameters or format
β€’ Working with multiple Advertisers per Offer
β€’ Need to override the Global Postback for this specific Offer
1
Navigate to Platform Configurations
In the left sidebar, head to Control Center β†’ Platform Configurations
2
Find the Global Postback Card
In the General Tab, locate the Global Postback card to access the URL
Accessing Global Postback
βœ… When to Use Global Postback URL
β€’ Advertiser has one tech stack for all campaigns
β€’ Same postback endpoint works for every Offer
β€’ You want "set it and forget it" simplicity
β€’ Different Offers just need different Transaction IDs
β€’ Easier to share one consistent URL with technical teams
πŸ’‘ Pro Tip: The Global Postback uses the same format as Offer-Level postbacks β€” both require nid and transaction_id at minimum. The only difference is where you configure it.

Required Parameters

Critical: Transaction ID Parameter Coordination The parameter name you use in your Default Landing Page URL must exactly match what the Advertiser's system is configured to capture. If these don't match, the Advertiser won't store the Transaction ID and postbacks will fail silently with Error 12: Invalid Transaction ID.

Common platform requirements:
β€’ 29 Next: evclid={transaction_id}
β€’ ClickBank (Affiliates): tid={transaction_id}
β€’ ClickBank (Vendors): ef-transaction-id={transaction_id}
β€’ Awin: clickRef={transaction_id}
β€’ BuyGoods: subid={transaction_id}
β€’ Konnektive / Checkout Champ: c1={transaction_id}

Before going live: Confirm with the Advertiser's technical team which parameter name their system expects, then use that exact name in your Default Landing Page URL.

Every S2S postback URL needs two parameters to successfully record a conversion:

Network ID (nid): Your unique identifier in Everflow. Find it in Control Center β†’ Platform Configurations. This tells Everflow which account to route the conversion to.

Transaction ID (transaction_id): The click identifier that links the conversion back to the original click. The Advertiser must capture this value from your landing page URL and return it in the postback.

Passing Additional Conversion Information

Beyond the required parameters, you can pass additional data to enrich your conversion records. Use the reference below to find the right parameter for your use case.

πŸ“‹ Complete Parameter Reference Beyond the required parameters, you can pass additional data to enrich your conversion records. Use the search box above to find specific parameters, or expand each section below to browse by category.
πŸ”΄ Required Parameters (2)
These parameters are MANDATORY β€” postbacks will fail without them.
nid
Your unique Network ID β€” routes conversions to your account
Format: &nid=123
Find in: Control Center β†’ Platform Configurations
transaction_id
Click identifier linking conversion to original click
Format: &transaction_id={transaction_id}
⚠️ Critical: Coordinate parameter name with Advertiser's tech team! If they expect tid= or click_id=, use that in your Default Landing Page URL.
πŸ’° Financial Parameters (3) β€” For RPS/CPS Offers
amount RECOMMENDED
Sale amount for dynamic revenue/payout calculation
Format: &amount=99.99 (decimal, no currency symbol)
When to use: Revenue Per Sale (RPS) or Cost Per Sale (CPS) offers
currency
Currency code if different from Offer default
Format: &currency=USD (3-letter ISO code)
coupon_code
Coupon or promo code used in the transaction
Format: &coupon_code=SAVE20
πŸ• Timestamp & User Data (4)
timestamp IMPORTANT
UNIX timestamp of conversion event (UTC) β€” overrides Everflow's timestamp when passed
Format: ×tamp=1706612400 (UNIX epoch seconds)
⚠️ Use when Advertiser needs to control conversion timing (e.g., delayed batch postbacks)
user_ip IMPORTANT
User's IP address to record in the Conversion IP field
Format: &user_ip=192.168.1.1
⚠️ Without this, Everflow records the server IP that fired the postback β€” not the user's IP
user_agent
User-agent string of the device that triggered the conversion
Format: &user_agent=Mozilla/5.0... (URL-encoded)
user_id
Partner-specific unique user ID associated with the converting user
Format: &user_id=usr_abc123
🎯 Event Tracking (3) β€” For Milestone Events
adv_event_id
Advertiser-Level Event ID β€” for milestones across multiple Offers
Format: &adv_event_id=5
Find in: Advertisers β†’ [Advertiser] β†’ Events tab
event_id
Offer-Level Event ID β€” for Offer-specific milestones
Format: &event_id=3
Find in: Offers β†’ [Offer] β†’ Events tab
⚠️ If omitted, conversion defaults to Base (ID=0) β€” no error thrown! This causes misreported data.
event_name
Human-readable Event name associated with the conversion
Format: &event_name=Purchase
πŸ“ Metadata & Custom Fields (3)
adv1, adv2, adv3, adv4, adv5
Custom metadata fields (5 available) β€” ONLY way to pass custom data
Format: &adv1=premium&adv2=monthly
⚠️ Custom parameter names (e.g., &product_type=) are ignored! Use adv1-5
To allow Partners to view: Control Center β†’ Configuration β†’ Global Settings β†’ "Enable public visibility of Adv parameters for Partners"
order_id
Unique order/transaction identifier β€” used for deduplication
Format: &order_id=ORD-123456
email
Customer email (URL-encoded) β€” required for Email Address Attribution
Format: &email=user%40example.com
πŸ“± Mobile & App Tracking (4)
idfa
iOS Identifier for Advertisers (plain, unhashed)
Format: &idfa=AEBE52E7-03EE-455A-B3C4-E57283966239
Also accepts hashed: idfa_md5, idfa_sha1
google_aid / google_ad_id
Android Google Advertising ID (plain, unhashed)
Format: &google_aid=38400000-8cf0-11bd-b23e-10b96e40000d
Also accepts hashed: google_aid_md5, google_aid_sha1
android_id
Android device ID (separate from advertising ID)
Format: &android_id=a1b2c3d4e5f6
app_id
Application ID when an MMP fires a postback to Everflow
Format: &app_id=com.example.app
Can also be used as a custom parameter for web (non-app) campaigns
πŸ” Security & Authentication (2)
verification_token
Security token for authenticated postbacks β€” prevents SDK spoofing
Format: &verification_token=abc123secrettoken (max 50 chars)
Find in: Advertisers β†’ [Advertiser] β†’ Edit β†’ Advanced Options β†’ Additional Information
⚠️ If Advertiser enforces this, postbacks without it fail with Error Code 21
random
Random value for cache busting β€” prevents CDN/proxy caching of postback requests
Format: &random={random} (generates 100,000,000 to 999,999,999)
πŸ”— Clickless Attribution (2) β€” For Offline Conversions
Use these parameters for coupon codes, call center sales, or any conversion without a prior click.
oid / offer_id REQUIRED
Offer ID for clickless/offline conversions (no prior click)
Format: &oid=123
Use for: Coupon codes, call center, offline attribution
affid / affiliate_id REQUIRED
Partner/Affiliate ID for clickless attribution
Format: &affid=456
Required with oid for clickless conversions

Sending Sale Amounts for RPS/CPS Offers

If your Offer uses Revenue Per Sale (RPS) or Cost Per Sale (CPS) payout models, the postback must include the sale amount so Everflow can calculate dynamic revenue and payouts.

πŸ’° Understanding Revenue vs. Payout
Advertiser Pays
$100
β†’
Revenue
$100
β†’
Everflow
Calculates
β†’
Payout
$30
β†’
Partner Earns
$30
πŸ“Š Revenue = What the brand/advertiser spends (the full sale amount)
πŸ’΅ Payout = What the affiliate/partner earns (commission)
πŸ“ˆ Profit = Revenue βˆ’ Payout (automatically calculated by Everflow)
βš™οΈ For RPS/CPS: Set Revenue to 100% to capture full sale, then set Payout as separate % or flat fee. Pass sale value via &amount= parameter.

For percentage-based models, add the amount parameter to your postback: &amount=99.99

If the transaction currency differs from your Offer's default currency, also include: &currency=USD (or the appropriate currency code)

Tracking Conversion Events

To track milestone events beyond the base conversionβ€”like signups, deposits, or subscription renewalsβ€”you need to include an event identifier in your postback.

There are two event parameters depending on your setup:

adv_event_id β€” Use this for Advertiser-Level Events that apply across multiple Offers from the same Advertiser. Find it in Advertisers β†’ [Advertiser] β†’ Events tab.

event_id β€” Use this for Offer-specific events unique to a single Offer. Find it in Offers β†’ [Offer] β†’ Events tab.

Important If you omit the event parameter, Everflow does NOT reject the postbackβ€”it defaults to the Base conversion (ID = 0). This means your conversion records successfully but to the wrong event, causing misreported data and potentially incorrect payouts.

Examples Of Postback Parameters

These real-world examples show how to structure postback URLs for common use cases:

1 Minimal (Required Parameters Only) Use case: Basic conversion tracking with no additional data

https://trk.example.com/?nid=123&transaction_id={transaction_id}
What this tracks:
β€’ Conversion recorded and linked to original click
β€’ Uses default payout configured in Offer settings
β€’ No dynamic revenue calculation
2 RPS/CPS Offer (Dynamic Revenue & Payout) Use case: E-commerce sale with dynamic revenue calculation

https://trk.example.com/?nid=123&transaction_id={transaction_id}&amount=99.99&currency=USD
What this tracks:
β€’ Sale amount of $99.99 USD
β€’ Everflow calculates revenue & payout based on Offer settings (e.g., 30% of sale amount)
β€’ Useful for Revenue Per Sale (RPS) or Cost Per Sale (CPS) models
3 Event Tracking (Milestone or Subscription Renewal) Use case: Subscription renewal or milestone event (signup β†’ deposit β†’ purchase)

https://trk.example.com/?nid=123&transaction_id={transaction_id}&event_id=5&amount=19.99
What this tracks:
β€’ Conversion for Event ID 5 (e.g., "Monthly Renewal")
β€’ Sale amount of $19.99
β€’ Separate payout configured for this specific event

⚠️ Important: If you omit event_id, conversion defaults to Base (ID=0). Always include it for milestone tracking!
4 Mobile App Install (iOS) Use case: iOS app install tracking with device ID

https://trk.example.com/?nid=123&transaction_id={transaction_id}&idfa={idfa}&app_id=com.example.app
What this tracks:
β€’ iOS IDFA for device-level attribution
β€’ App ID for filtering reports by application
β€’ Enables cross-device attribution if user clicks on mobile and installs on another device
5 Complete E-Commerce Transaction (Everything) Use case: Full e-commerce purchase with all available metadata

https://trk.example.com/?nid=123&transaction_id={transaction_id}&amount=149.99&currency=EUR&event_id=3&coupon_code=SAVE20&adv1=premium&adv2=annual&order_id=ORD-456789&email=user@example.com
What this tracks:
β€’ Sale amount: €149.99
β€’ Event ID 3 (e.g., "Premium Plan Purchase")
β€’ Coupon code used: SAVE20
β€’ Custom metadata: adv1=premium, adv2=annual
β€’ Order ID for deduplication: ORD-456789
β€’ Customer email for email attribution or reporting

Use case breakdown:
This example shows a premium annual subscription purchase with a discount code. The adv1 and adv2 parameters allow filtering reports by plan type and billing cycle. The order_id prevents duplicate charges if the postback fires twice.
πŸ’‘ Pro Tip: URL Encoding When passing special characters in parameters (like spaces, @, or &), ensure they're URL-encoded:

β€’ Space = %20
β€’ @ (in emails) = %40
β€’ & (in values) = %26

Example: user@example.com becomes user%40example.com

Important Limitations

90-Day Click Data Retention Everflow purges click-level data after 90 days if no conversion has occurred. This is a hard ceiling β€” even if your session duration is set higher.

What this means:
β€’ A postback sent after 90 days will fail with "Invalid Transaction ID" because the click no longer exists
β€’ This affects industries with long sales cycles (enterprise software, real estate, financial services)

Solution for long sales cycles: Fire an "anchor" event (like a lead submission or signup) within the 90-day window. This locks in the Transaction ID, allowing later conversion events to be attributed correctly.

Additionally, be aware that Partner postbacks fire only onceβ€”at the moment the conversion is initially received. If an Advertiser updates the payable amount later, Everflow does not automatically re-fire a postback to notify the Partner.

Troubleshooting Common Issues

If your postbacks aren't working as expected, check these common issues and solutions.

Postback fired but conversion didn't record

Check these common causes:

β€’ NID is placeholder: Make sure &nid= contains your actual Network ID number, not "XXX" or other placeholder text
β€’ Transaction ID expired: Click data is purged after 90 days. If no conversion occurred within 90 days of the click, the TID is invalid
β€’ Verification token missing: If the Advertiser enforces a verification token, include &verification_token=YOUR_TOKEN
β€’ Offer status inactive: Postbacks fail if the Offer Status is not "Active" at the time of conversion
β€’ Whitelist blocking: If "Enforce Advertiser Whitelist" is ON, conversions from non-approved IPs/domains are rejected

Diagnose with Investigator: Use the Investigator Tool with the Transaction ID to trace why the conversion was rejected.

Amount shows as $0 on RPS/CPS offers

For Revenue Per Sale (RPS) or Cost Per Sale (CPS) offers, Everflow needs the sale amount to calculate dynamic revenue and payout.

β€’ Missing amount parameter: Add &amount=99.99 to your postback URL
β€’ Currency mismatch: If the amount is in a different currency than the Offer default, add ¤cy=EUR (or appropriate code)
β€’ Amount = 0 passed: Check that the Advertiser's system is actually passing the sale value, not a literal zero

Pro tip: Set Revenue to 100% in Offer settings to capture the full sale amount, then configure Payout as a separate percentage or flat fee.

Duplicate conversions being recorded

Duplicates occur when the same conversion signal fires multiple times (e.g., user refreshing a thank-you page).

β€’ Disable duplicate conversions: In Offer settings, turn OFF "Allow Duplicate Conversions"
β€’ Implement deduplication: Ask the Advertiser to implement server-side deduplication to prevent multiple postback fires
β€’ Use order_id: Pass a unique &order_id= value β€” Everflow can use this for deduplication logic

Partner didn't receive postback notification

Important: Everflow fires Partner postbacks once β€” at the moment the conversion is initially received.

β€’ "One-shot" behavior: If an Advertiser updates the payable amount hours or days later, the system does NOT automatically re-fire a postback to the Partner
β€’ Check Partner postback URL: Verify the Partner has correctly configured their postback endpoint in their system
β€’ Test first: Use the postback testing workflow before going live

For late updates: If you need to notify Partners of amount changes, you'll need to manually trigger notifications or use the API.

Custom data not appearing in reports

Everflow only captures metadata passed through recognized parameters.

β€’ Custom parameter names ignored: Parameters like &product_category=shirts or &lead_score=high are NOT captured
β€’ Use ADV fields: Map your custom data to &adv1= through &adv5= β€” these ARE captured and appear in reports
β€’ Example: Instead of &product_type=premium, use &adv1=premium

Reporting: ADV1-5 values appear in the Flex Report and can be used for filtering and segmentation.

Conversion recorded as Base instead of specific Event

If you're tracking milestone events but everything shows as "Base Conversion," you're missing event parameters.

β€’ Event ID omitted: Without &event_id= or &adv_event_id=, ALL conversions default to Base (ID = 0)
β€’ The postback won't fail: It successfully records β€” just to the wrong event! This causes misreported data and incorrect payouts
β€’ Use the right parameter: adv_event_id for global Advertiser-Level Events across multiple Offers, or event_id for Offer-specific milestone events

Find Event IDs: Offers β†’ [Offer] β†’ Events tab, or Advertisers β†’ [Advertiser] β†’ Events tab

Error Code 12: Invalid Transaction ID

This error means Everflow couldn't match the Transaction ID to a valid click.

β€’ TID parameter mismatch: The parameter name in your Default Landing Page (e.g., ?s1=) doesn't match what the Advertiser's system expects β€” they never captured/stored the TID
β€’ TID not returned: Advertiser's postback is passing an empty or placeholder value instead of the actual Transaction ID
β€’ 90-day expiration: The click occurred more than 90 days ago with no prior conversion, so the TID was purged
β€’ Wrong bracket format: Everflow requires curly brackets {transaction_id} β€” square brackets [transaction_id] or parentheses won't work

Prevention: Always coordinate with the Advertiser on the exact parameter name before going live.

Error Code 21: Invalid Verification Token

The Advertiser has enabled token-based authentication, and the postback is missing or has an incorrect token.

β€’ Where to find the token: Advertisers β†’ [Advertiser] β†’ Edit β†’ Advanced Options β†’ Additional Information card
β€’ Add to postback: Append &verification_token=YOUR_TOKEN_HERE to the URL
β€’ Max 50 characters: The token can be up to 50 characters long
β€’ Case sensitive: The token must match exactly β€” including capitalization

Note: Once enabled on an Advertiser, the token is required for ALL postbacks to that Advertiser's Offers.

Explore Related Articles Learn more about postback setup, testing, and troubleshooting βž” How To Test Partner Postbacks β€” Validate your postback before going live
βž” Conversions Error Code Reference Guide β€” Full list of error codes and solutions
βž” Clickless Conversion Tracking β€” For coupon codes and offline attribution
βž” Postback & Tracking Link Configurations β€” Platform-specific formats for third-party systems