Track server-to-server events

Our server-to-server events API lets Adjust track your events via HTTP requests.

We accept the following types of requests for S2S events:
  • GET with URL parameters
  • POST with URL parameters (no body)
  • POST with body parameters as Content-Type application/x-www-form-urlencoded

In this article, you'll learn how to set up and troubleshoot S2S event tracking.

Before you begin

Here’s what you need to know before getting started.


  • A server to track events and send calls to Adjust

Helpful information

  • Installs, reattribution, and sessions are automatically recorded with the SDK, and cannot be sent to Adjust server-to-server. To prevent receiving large amounts of duplicate data, avoid sending similar activities (e.g., "app open") using S2S.

Send events to Adjust

To send events to Adjust, always pass the following parameters to

idfa; gps_adid; etc.Platform dependent Advertising ID (see full list)



event_tokenAdjust event token from the dashboardevent_token=f0ob4r
app_tokenAdjust app token from the dashboardapp_token=4w565xzmb54d
s2ss2s parameter set to 1s2s=1

Recommended additional parameters for event submission

For accurate event attribution, we recommend including the following parameters with your events.

ID typeParameter + exampleUsed for
Adjust IDadidIdentifying LAT users on iOS without idfa information
IP addressip_addressEvent linking to third-parties (e.g., Google) & including location-related information (e.g., city, postal_code) in your callbacks





Telling us the exact moment an event occurred. This helps Adjust to provide precise reporting for your events.


Conditions for the created_at timestamp

The ‘created at’ timestamp can be specified using either the created_at_unix parameter or the created_at parameter.

  • We recommend using the created_at_unix parameter as it only accepts numeric values, not floating-point values or non-numeric characters, including decimal points (.). Timestamps with non-numeric characters are rejected. This reduces the chance of formatting or encoding issues.
  • If you use the created_at parameter, always encode the value. For example, 2017-01-02T15:04:05.000+0000 becomes 2017-01-02T15%3A04%3A05.000%2B0000
  • If your server-side event calls don’t contain a 'created at' timestamp, or if it isn't formatted correctly (e.g., no timezone), Adjust sets the created_at time to our ReceivedAt timestamp.
  • All S2S events including in-app revenue and timestamps should be sent chronologically, for each device. For example, if a day-3 in-app revenue event request on event token X for device A is sent after a day-7 in-app revenue event on event token Y for device A, we will reject the day-3 event. 
    • Make sure to submit events within 28 days, as older activities are rejected.

Accepted device identifiers

Here are all the device identifiers accepted for S2S events:

Raw Amazon Fire advertising IDfire_adid
Raw Google advertising IDgps_adid
Hashed Google advertising IDgps_adid_lower_sha1
Hashed Google advertising IDgps_adid_upper_md5
Hashed Google advertising IDgps_adid_upper_sha1
Raw IDFAidfa
Hashed IDFAidfa_lower_md5
Hashed IDFAidfa_lower_sha1
Hashed IDFAidfa_upper_md5
Hashed IDFAidfa_upper_sha1
Raw IDFVidfv
Hashed IMEIimei_lower_md5
Raw Windows advertising IDwin_adid

Share custom data

Pass custom event data to Adjust within S2S events using callback and partner parameters. Callback parameters return via raw data export, while partner parameters are shared with your network partners. To set up callback parameters and partner parameters for S2S events, follow these instructions

Track revenue events

To track S2S revenue events, add the following revenue parameters to your event submissions:

revenueRevenue event value in full currency units (149.99 = $149.99). We accept a minimum value of 0.001 for this parameter.
currencyRevenue event currency code
environmentEnvironment to post the data to (environment=sandbox or environment=production). If this parameter is not included, the event will be pushed to the production environment.

Setup completion

Example S2S GET request with URL parameters / POST request with URL parameters and no body:

Example S2S POST request with parameters in body:

Request URL:

Event submission responses

All successfully tracked events return an OK response.

Failed events return an HTTP error code and JSON message, like this: {"error": "Event request failed ( {error message})"}

Error messages define the request problem. Use this table to identify your error, then review your setup or reach out to for help.

Error codeError messageReason
400Bad event stateCan occur for various reasons. E.g., ‘created at’ time is before 'installed_at' time.

Check the response for additional details.

400Invalid app tokenApp token not set correctly
400Ignoring event, earlier unique event trackedA unique event was already tracked. This is ignored as a duplicate.
400Invalid callback parametersCallback parameters could not be extracted
400Invalid event tokenEvent token does not exist, was set incorrectly, or does not match the app token.
400Invalid revenueAmount set incorrectly or value too high (limit = 100,000,000,000) 
401Failed to authorize requestAuthorization token missing or does not match
403App is inactiveApp was deactivated in the dashboard
403Tracking disabledTracking not enabled for this platform
403Event token blacklistedEvent token blacklisted
404App token not foundApp token not found
404Device not foundNo device data found
413Request size too largeYour request exceeds our limit of 1 MB
451Device is opted outDevice is opted out 
500Internal error, contact support@adjust.comInternal error when updating device data

On this topic