Integration · Attribution and ads measurement

Send subscription revenue to Tenjin

RevenueDot sends paid steps to Tenjin's server-to-server purchase endpoint with the price in US dollars, and other steps to its event endpoint as rc_trial_started_event, rc_cancellation_event and so on. Events match on $tenjinId, the installation ID from the Tenjin SDK. Tenjin takes no negative revenue, so refunds go as events without money.

What teams do with it

  • See subscription revenue by campaign next to your ad spend in Tenjin.
  • Report renewals as purchases, so lifetime revenue per install keeps growing.
  • Report gross revenue, or net of store commission with Tenjin's postcut flag.

What RevenueDot sends

  • Initial purchases, trial conversions, renewals and one-time purchases with revenue above 0 as POST https://track.tenjin.com/v0/purchase with product_id, price (USD), quantity 1 and currency. postcut is set to 1 when you report revenue after store commission and taxes.
  • Other steps as POST https://track.tenjin.com/v0/event with event set to rc_trial_started_event, rc_trial_cancelled_event, rc_cancellation_event, rc_expiration_event, rc_billing_issue_event, rc_product_change_event or rc_test_event. Refunds go here, without money.
  • Identity: $tenjinId as analytics_installation_id (required), $idfa or $gpsAdId as advertising_id (zeros when unknown), $idfv as developer_device_id, and the app user ID as customer_user_id unless it is anonymous.
  • Device fields: $ip as ip_address, $attConsentStatus as tracking_status (0 to 3) with limit_ad_tracking, the OS and app version from the customer's last request, and country.
  • Basic auth with the app's SDK key. Sandbox events are not sent, because Tenjin keeps no sandbox data apart.

Setup

How to connect Tenjin to RevenueDot

  1. 01

    Copy the SDK keys from Tenjin

    In Tenjin, open Configure → Apps, pick each app and copy its SDK key.

  2. 02

    Set the Tenjin ID in your app

    Set $tenjinId to the Tenjin SDK's analytics installation ID and call collectDeviceIdentifiers().

  3. 03

    Open the integration

    In RevenueDot, open Integrations → Tenjin.

  4. 04

    Enter the keys

    Fill in iOS SDK key and Android SDK key. Amazon purchases use the Android key. Set Sales reporting.

  5. 05

    Connect and test

    Click Connect Tenjin, then send a test event for a customer that has $tenjinId and check the delivery log.

The Tenjin integration page in the RevenueDot dashboard, with its settings form
Captured from the RevenueDot dashboard with demo data.

How Tenjin deliveries are retried, logged and replayed

  • Retries: timeouts, 408, 425, 429 and 5xx answers retry after 5, 10, 20, 40 and 80 minutes. Any other 4xx fails at once, because sending the same request again cannot work. Fix the setting, then replay.
  • Delivery log: each delivery shows the request with every secret replaced by [redacted], the partner's answer, the HTTP status, the time taken and the number of attempts.
  • Skipped, with the reason: when there is nothing to send, such as a missing device ID, the delivery is marked skipped and says why. Retry sends it after your app sets the attribute.
  • Replay: Replay failed resends failed and skipped deliveries in bulk.
  • Sealed credentials: keys and tokens are encrypted with AES-256-GCM on the server and never shown again. The dashboard shows only the last four characters.
  • Rejections: Tenjin answers {"code":200} when it accepts an event. Any other code, or an error, is logged as a rejection.

FAQ

Tenjin and RevenueDot

How do I send in-app purchase events to Tenjin?

Paste your Tenjin SDK keys under Integrations → Tenjin in RevenueDot, set $tenjinId and call collectDeviceIdentifiers() in your app, and click Connect Tenjin. Paid steps go to Tenjin's purchase endpoint and the rest go as events.

Why does Tenjin not show my refunds as negative revenue?

Tenjin takes no negative revenue. RevenueDot sends a refund as an event named rc_cancellation_event without money instead of a negative purchase.

Are sandbox purchases sent to Tenjin?

No. Tenjin keeps no sandbox data apart from production, so RevenueDot skips sandbox events and the delivery log says why.

Is there a RevenueCat Tenjin integration alternative?

Yes. RevenueDot sends Tenjin's server-to-server events for the same attribution purpose as RevenueCat's attribution integrations (checked October 2026), from an open source backend you can self-host.

Sources: Tenjin · Tenjin: server-to-server setup · RevenueCat: attribution integrations. Tenjin is a trademark of its owner, used to describe compatibility. RevenueDot is not affiliated with or endorsed by it.

Get started

Send Tenjin every subscription event.

Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue. Integrations are included on every plan.

Already have an account? Sign in · Prefer your own servers? Self-host free