Server-to-server (S2S) events

The server-to-server (S2S) events API lets Adjust track your events via HTTP requests. Adjust always recommends using the Adjust SDK to track your installs, sessions, and reattributions, and only send custom events S2S. In this article, you'll learn how to set up and troubleshoot S2S event tracking.

For attribution, Adjust does not distinguish between clicks that are sent from the SDK and S2S clicks. They are considered the same within the attribution waterfall.


The S2S events API uses this endpoint:

Send S2S events

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

Set up S2S Security

Set up S2S Security to guarantee the security of your S2S events and protect against spoofed requests. This requires each incoming request to carry a token generated in your Adjust dashboard. Requests that do not carry the token or that carry an incorrect token are rejected by our server. To get set up, follow the steps in our S2S Security article.

Required parameters

Parameters for S2S events are case-sensitive. This means they should appear in your event requests exactly as they are written in the tables below.
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 device IDadidIdentifying LAT users on iOS without idfa information
IP addressip_addressEvent linking to third-parties (for example, Google) & including location-related information (for example, city, postal_code) in your callbacks. The ip_address parameter only accepts IPv4.nIPv6 is not yet supported.





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.

  • Seconds - created_at_unix=1484085154
    Milliseconds - created_at_unix=1484085154000
  • 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 (for example, no timezone), Adjust sets the created_at time to our ReceivedAt timestamp.
  • All S2S events that include a ‘created at’ timestamp must be submitted chronologically for each device and for each event token, according to the ‘created at’ timestamp. For example, you must send a day-3 event before a day-7 event for the same device using the same event token. Otherwise, Adjust will reject the day-3 event. 
    • Make sure events are submitted within 58 days, as older activities are rejected.
  • All S2S events that include revenue and a ‘created at’ timestamp must be submitted chronologically, for each device and for all revenue event tokens, according to the ‘created at’ timestamp.  For example, you must send a day-3 revenue event on revenue event token X before a day-7 revenue event on revenue event token Y, for the same device. Otherwise, we will reject the day-3 revenue event.

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 receive callback parameters for events tracked server-to-server, pass them as a JSON object (properly escaped) through the callback_params parameter. For partner parameters, use the partner_params parameter. 

Unencoded example: partner_params={"f0o":"bar","bar":"baz"}

Example S2S request with encoded partner parameters appended:”

The JSON object should only contain strings and should not be nested. If the parameters are incorrectly formatted, then you’ll receive an error from Adjust.

Track server-to-server events

To receive callback parameters for events tracked S2S, pass the JSON object through the callback_params parameter. The following is an example of two custom parameters, unencoded for demonstration:


Example of a JSON object passed with callback_params appended and properly encoded:

To send partner parameters for events tracked server-to-server, pass them as a JSON object in the partner_params parameter. The following is an example of two custom parameters, unencoded for demonstration:


Example S2S request with partner_params appended and properly encoded:

The JSON object should only contain strings and should not be nested. If the parameters are incorrectly formatted, you’ll then receive an error message from Adjust.

Track revenue events

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


Revenue 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
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: