MMecilo Reporting API

Adjust S2S integration guide

Use a reporting token. Keep the Adjust request unchanged.

The backend exchanges your Mecilo reporting token for the real Adjust API token. Continue sending the same Adjust app token, event token, device, revenue, and attribution fields.

Base URLhttps://reporting.mecilo.com
01 / Authentication

Replace only the Adjust API token

Send Authorization: Bearer YOUR_REPORTING_API_TOKEN. The function maps that value to the server-side Adjust API token. Your request body remains an ordinary Adjust request using app_token, event_token, and standard Adjust fields.

i
Only authentication is mapped. App and event tokens are not stored in the mapping and are passed through from each request.
02 / Quick start

Check health, then verify the token

The health route makes no Adjust request. Use /mapping to verify that the reporting token is recognized without sending an event.

curl https://reporting.mecilo.com/health
curl https://reporting.mecilo.com/mapping \
  -H 'Authorization: Bearer YOUR_REPORTING_API_TOKEN'
200 OK{"mapping_id":"your_mapping","apps":{}}
Live testing

Enter values, generate curl, and run

Enter your reporting token and the same Adjust app/event values you already use. The tester builds a curl command and can send the equivalent request.

Only the reporting token is mapped. App, event, device, and revenue values remain part of the Adjust request.

Generated curl
curl -X POST https://reporting.mecilo.com/events \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_REPORTING_API_TOKEN' \
  -d '{
  "app_token": "YOUR_ADJUST_APP_TOKEN",
  "device_id": "YOUR_DEVICE_ID",
  "device_id_type": "gps_adid",
  "event_token": "YOUR_ADJUST_EVENT_TOKEN"
}'
GET

/mapping

Verifies the reporting token and returns its mapping identifier. In token-only mode, apps is empty and no Adjust credentials are exposed.

curl https://reporting.mecilo.com/mapping \
  -H 'Authorization: Bearer YOUR_REPORTING_API_TOKEN'
POST

/events

Reports an Adjust event and optional app revenue.

FieldRequiredDescription
app_tokenYesYour existing Adjust app token.
event_tokenYesYour existing Adjust event token.
Device IDYesdevice_id plus type, or a native Adjust device field.
revenueFor revenueAmount in full currency units.
currencyWith revenueISO currency code such as USD.

Example request

curl -X POST https://reporting.mecilo.com/events \
  -H 'Authorization: Bearer YOUR_REPORTING_API_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "app_token": "YOUR_ADJUST_APP_TOKEN",
    "event_token": "YOUR_ADJUST_EVENT_TOKEN",
    "device_id": "660e1d86-6796-463a-be86-897993136018",
    "device_id_type": "gps_adid",
    "revenue": 1.25,
    "currency": "USD"
  }'
Adjust accepted{"ok":true,"adjust_status":200,"adjust_response":"OK"}
POST

/ad-revenue

Reports advertising revenue. The wrapper defaults source=publisher and ad_impressions_count=1.

FieldRequiredDescription
app_tokenYesYour existing Adjust app token.
Device IDYesPlatform identifier or generic device mapping.
revenueYesAdvertising revenue amount.
currencyYesCurrency associated with the amount.
curl -X POST https://reporting.mecilo.com/ad-revenue \
  -H 'Authorization: Bearer YOUR_REPORTING_API_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "app_token": "YOUR_ADJUST_APP_TOKEN",
    "device_id": "660e1d86-6796-463a-be86-897993136018",
    "device_id_type": "gps_adid",
    "revenue": 0.01,
    "currency": "USD",
    "ad_revenue_network": "AdMob"
  }'
POST

/group

also GET

Inspects current Adjust attribution and returns a two-way experiment group.

1
Non-organic

Any successful TrackerName other than Organic.

2
Organic

TrackerName equals Organic, case-insensitive.

curl -X POST https://reporting.mecilo.com/group \
  -H 'Authorization: Bearer YOUR_REPORTING_API_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"app_token":"YOUR_ADJUST_APP_TOKEN","device_id":"DEVICE_ID","device_id_type":"gps_adid"}'
Adjust Device API limitation

Adjust documents inspect_device for SDK testing and sandbox workflows. Confirm production availability before using this route as a live experiment dependency.

03 / Administration

Map the reporting token only

Edit config/reporting-api-map.local.json. Each entry pairs one public reporting token with one private Adjust API token. Keep apps empty so app and event tokens continue to come from the request.

{
  "version": 1,
  "allow_legacy_adjust_tokens": true,
  "default_mapping": null,
  "mappings": {
    "client_name": {
      "reporting_api_token": "rpt_RANDOM_TOKEN",
      "adjust_api_token": "REAL_ADJUST_API_TOKEN",
      "apps": {}
    }
  }
}

Validate and publish

npm run token:generate
npm run config:check
npm run config:publish
npm run deploy
i
allow_legacy_adjust_tokens: true preserves direct-token behavior for callers that have not migrated. The deployed configuration currently uses this compatibility mode.
04 / Reference

Responses and errors

StatusMeaning
200Healthy, mapping verified, or Adjust accepted the request.
400A required Adjust request field is missing.
401Reporting API token is missing or invalid when compatibility mode is disabled.
502Network or relay failure.
504Adjust did not respond within 10 seconds.
05 / Operations

Runtime profile

Regionus-central1
RuntimeNode.js 22
Mapped valueAPI token only
Upstream limit10 seconds
Mapping storeSecret Manager
Legacy modeEnabled