Data events
When a player revokes, forgets your game, changes the nickname or deletes the account, uloggd tells your server, and you repeat it.
Brazil's data protection law (LGPD, art. 18 §6) obliges uloggd to tell everyone it shared a player's data with when the player corrects or deletes it. In Arcade that is you. When a player revokes your game's access, forgets your game, changes the nickname or deletes the account, uloggd sends your server a signed event, and you repeat the correction or deletion within 15 days.
Declare the URL
Every release that asks for identify must declare a data events URL; without
one it is refused with data_events_url_required. The URL follows the same
rules as the entry URL (https, port 443, a public host, see
Hosting), except that its origin and path
may differ from the entry's. The reviewer checks that it works.
The events
event | When | What you do |
|---|---|---|
grant_revoked | The player revoked your game's access in Settings > Arcade. | End the player's sessions, stop using the sub and nickname uloggd gave you, and delete what you hold on the strength of that consent, except what the law lets you keep. If the player agrees again later, the sub is the same. |
grant_forgotten | The player chose Forget this game. | Delete everything tied to that sub. If the player comes back, it is with a new sub. |
nickname_changed | The player edited the nickname. | Replace the stored nickname with the event's nickname. |
account_deleted | The player's uloggd account was deleted. | Delete everything tied to that sub. |
Only players produce events: the identities reviewers use in a review never produce any.
Delivery
POST /uloggd-events HTTP/1.1
Host: events.example.com
Content-Type: application/json
{"event_token":"eyJhbGciOiJFUzI1NiIs..."}- uloggd posts to the data events URL of the app's live release, or of its newest approved release when none is live. Never to your development URL, which replaces only the game's address.
- Any 2xx answered within 5 seconds is a delivery. Answer as soon as the token verifies, and do the work afterwards.
- Redirects are not followed, and no cookies are sent.
- A failed delivery is retried after 1 minute, 5 minutes, 30 minutes, 2 hours and 6 hours, then every 12 hours for 7 days. After that the event is marked failed.
- The portal's Player data section shows pending and failed events, and while deliveries fail you get at most one email a day per app.
- The same event can arrive more than once: a delivery that timed out after you handled it is retried. Make every handler idempotent.
- The token's
jtiis the event's id, and it stays the same on every retry. Deduplicate byjti. - One player's events arrive one at a time and in order: the next one waits while the previous one is being delivered or waiting for its retry.
Before approval
- Until a release of the app is approved or live, there is no data events URL to deliver to.
- Events from the grants you gave in your own tests, in test mode or on the development URL, wait without being attempted.
- They are delivered once a release with a data events URL is approved.
- An event still waiting after 30 days is dropped.
The event token
header { "alg": "ES256", "typ": "uloggd-arcade-event+jwt", "kid": "arc-2026-10" }
payload {
"iss": "https://uloggd.com",
"aud": "YOUR_APP_ID",
"sub": "4f1c2b7e-...",
"event": "nickname_changed",
"nickname": "Ada L.", only with nickname_changed
"iat": 1791860000,
"exp": 1792464800, iat + 7 days
"jti": "5a0b13c4-..."
}Check it as you check an identity token (see
Identity), with the same key set and the
same 60 seconds of clock skew, with these differences: typ is
uloggd-arcade-event+jwt; there is no nonce, scope or mode; and it is
valid for 7 days, so refuse it only once exp has passed. On a server that
does not run JavaScript, follow
Verifying in other languages.
import { verifyEventToken } from "@uloggd/arcade-sdk/server";
app.post("/uloggd-events", express.json({ limit: "8kb" }), async (req, res) => {
let event;
try {
event = await verifyEventToken(req.body.event_token, {
appId: process.env.ULOGGD_APP_ID,
});
} catch {
return res.status(400).end();
}
// { subject, event, nickname?, id, issuedAt }
await jobs.enqueue(event); // handled after the answer
res.status(204).end();
});Your duty
The Arcade developer terms require you to act on each event within 15 days, and to delete players' data when your app is removed from Arcade. Keep a record of what you did for each one.