Send app screens from your own server
Any app, native or not, whose server already knows who it serves: send screens and events from there, in one JSON shape, with no new app build and no store review.
Step by step
- 1
In Sumly, open Visitors › App users and make the project's secret key (
sk_sumly_…). It is shown once: keep it in your server's environment asSUMLY_KEY. - 2
From your server, send
POST https://sumly.dev/api/v1/eventswith the key as a Bearer token, up to 1,000 events in one call, each with the person's RevenueCat app user id asuser_id. - 3
Check the key with
GET /api/v1/ping, then see the events arrive on the project's Sources list.
With the secret key, send the country you know for the person; Sumly cannot take it from your server's address.
POST https://sumly.dev/api/v1/events
Authorization: Bearer sk_sumly_…
Content-Type: application/json
{
"events": [
{ "type": "screen", "screen": "Paywall", "user_id": "u_42", "platform": "ios", "country": "DE" },
{ "type": "track", "name": "trial_started", "user_id": "u_42", "platform": "ios" }
]
}
Or let your coding assistant do it
Paste this into Claude Code, Cursor or Codex in your server's project. It fits the code to how the server is built and leaves the key to you.
See what it says
Set up An app with its own server for Sumly in this project.
Sumly (https://sumly.dev) shows revenue next to the visits and app users it came from. The full guide is https://sumly.dev/install/app-server; read it if anything below is unclear.
Steps:
1. In Sumly, open Visitors › App users and make the project's secret key (`sk_sumly_…`). It is shown once: keep it in your server's environment as `SUMLY_KEY`.
2. From your server, send `POST https://sumly.dev/api/v1/events` with the key as a Bearer token, up to 1,000 events in one call, each with the person's RevenueCat app user id as `user_id`.
3. Check the key with `GET /api/v1/ping`, then see the events arrive on the project's Sources list.
JSON: With the secret key, send the country you know for the person; Sumly cannot take it from your server's address.
```
POST https://sumly.dev/api/v1/events
Authorization: Bearer sk_sumly_…
Content-Type: application/json
{
"events": [
{ "type": "screen", "screen": "Paywall", "user_id": "u_42", "platform": "ios", "country": "DE" },
{ "type": "track", "name": "trial_started", "user_id": "u_42", "platform": "ios" }
]
}
```
Keep in mind: The secret key stays on the server. A key that sits in an app or a browser is the public one (`sl_…`), which can send events only. Each event is checked on its own: the good ones are kept and the reply lists the refused ones and why.
How to work:
- Look at how this project is built first, and fit the code to its framework and its way of doing things; the examples above are a starting point, not something to paste as is.
- Steps that happen in a dashboard (Sumly, or An app with its own server's own) are mine: tell me exactly what to click, then wait for me.
- Keys the code needs belong in environment variables, never in the code or the repository. Never ask me to paste a secret key into this chat; tell me which variable to set.
- Change only what this needs, show me the changes before you commit, and tell me how to check that it works.
Consent
Your server sends only what you choose to send: where your app asks first, send nothing for a person until they agree.
Purchases
Purchases come from RevenueCat, Adapty or Superwall. Send the user id they know (RevenueCat's app user id, or the id you identify the user by in Adapty or Superwall), and each purchase shows the source of the first event Sumly kept for that person.
Good to know
- The secret key stays on the server. A key that sits in an app or a browser is the public one (
sl_…), which can send events only. - Each event is checked on its own: the good ones are kept and the reply lists the refused ones and why.
Other apps
Try it with your own projects
Sign in with Google or a code by e-mail and connect your first project. Free for one project, and 14 days of a paid plan with no card.
Start freeOr look around first: open the live demo.