Skip to main content
Skip to navigation

Solar Engine Event Delivery Reference

Example Solar Engine event delivery request and RevenueCat source mapping

AIAsk AIChatGPTClaude

Use this page as a reference for the event delivery request RevenueCat sends to Solar Engine. For setup steps, see Solar Engine.

Solar Engine delivery has one main request shape, but the payload can be hard to read in Customer History because RevenueCat sends both a user update and an event entry in the same request. This reference shows how RevenueCat chooses the endpoint, app key, Solar Engine event type, and user identifiers.

Delivery typeDelivery behaviorRequired identifiers
Event + user updateSends one request body with a userset entry and an event entry.iOS or Android App Key. Solar Engine customer identifiers are optional because RevenueCat can fall back to platform identifiers or a generated distinct ID.

Example event delivery request

{
"body": [
{
"_appkey": "<ios_or_android_app_key>",
"_distinct_id": "<solar_engine_distinct_id_or_device_id>",
"_ts": <event_timestamp_ms>,
"_package_type": 2,
"_source_type": "api",
"_account_id": "<app_user_id>",
"_idfv": "<idfv>",
"_ip": "<ip_address>",
"_type": "userset",
"_userset_type": "userUpdate",
"properties": {
"rc_app_user_id": "<app_user_id>",
"rc_entitlement_ids": ["<entitlement_id>"],
"rc_app_id": "<app_configuration_id>"
}
},
{
"_appkey": "<ios_or_android_app_key>",
"_distinct_id": "<solar_engine_distinct_id_or_device_id>",
"_ts": <event_timestamp_ms>,
"_package_type": 2,
"_source_type": "api",
"_account_id": "<app_user_id>",
"_idfv": "<idfv>",
"_ip": "<ip_address>",
"_type": "event",
"_event_id": "<revenuecat_event_id>",
"_event_name": "_appPur",
"properties": {
"rc_app_user_id": "<app_user_id>",
"rc_entitlement_ids": ["<entitlement_id>"],
"rc_app_id": "<app_configuration_id>",
"_platform": <platform_code>,
"_package_name": "<package_name>",
"_pay_amount": <revenue_in_purchase_currency>,
"_pay_status": 1,
"rc_event_name": "<configured_event_name>",
"_product_id": "<product_id>",
"_currency_type": "<purchase_currency>",
"rc_period_type": "<period_type>",
"rc_purchased_at_ms": <purchase_timestamp_ms>,
"rc_transaction_id": "<transaction_id>",
"rc_original_transaction_id": "<original_transaction_id>",
"rc_store": "<store>"
}
}
]
}

If Use China Mainland Storage Region is enabled, RevenueCat uses https://api-receiver.detailroi.com and sends _package_type as 1. Otherwise, RevenueCat uses https://vg-api-receiver.detailroi.com and sends _package_type as 2.

RevenueCat source to Solar Engine request mapping

Solar Engine request elementRevenueCat source and behavior
Endpoint and signingSends POST requests using the global or China mainland Solar Engine domain based on the Use China Mainland Storage Region setting. Sends a timestamp query parameter and a sign query parameter containing an MD5 signature of the app key plus timestamp.
Request bodySends an array with two entries: a userset entry and an event entry.
_appkeyUses the iOS App Key for App Store purchases and the Android App Key for Play Store purchases. Other store types are not sent.
_typeSends userset for the user-properties entry and event for the RevenueCat lifecycle event entry. The userset entry includes RevenueCat user context, such as app user ID, aliases, subscriber attributes, active entitlements, and app configuration ID when available.
_event_nameSends _appPur for purchase events that Solar Engine treats as in-app purchases. Other lifecycle events use the configured event name.
propertiesSends ordinary event context such as platform, package name, revenue in the purchase currency, product ID, purchase currency, purchase timestamps, transaction identifiers, entitlement context, aliases, store, offer code, and family-share status when available. Properties with special Solar Engine behavior are itemized separately.
properties.rc_event_nameIncluded on _appPur events so the configured RevenueCat event name is still available inside event properties.
properties._pay_statusSends 1 for _appPur events, as required by Solar Engine.
_distinct_idUses $solarEngineDistinctId when present. Otherwise, iOS events use $idfv, Android events use $gpsAdId, and events without either value use a generated fallback.
_visitor_id, _account_idSends $solarEngineVisitorId and $solarEngineAccountId when set. If neither Solar Engine ID is set, RevenueCat falls back to the app user ID as _account_id.
_idfa, _idfv, _gaidSends available device identifiers from RevenueCat customer attributes.
_ipSends the customer's IP address when available. If no IP is available, RevenueCat sends 0.0.0.0 so Solar Engine does not use the request IP for geolocation.
Success responseTreats the request as successful only when Solar Engine returns valid JSON and status is 0.

Event name behavior

RevenueCat sends _appPur instead of the configured event name for:

  • Non-trial initial purchases
  • Renewals, including trial conversions
  • Non-renewing purchases

RevenueCat sends the configured custom event name for other lifecycle events, such as trial starts, trial cancellations, cancellations, uncancellations, subscription pauses, expirations, billing issues, and product changes.

Was this page helpful?