uloggdDevelopers
Developer portaluloggd
Get startedResourcesArcade
Developer portaluloggdArcadeHostingThe frameSDKIdentityVerifying in other languagesData eventsTestingReview policyPrivacy dutiesEngines

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

eventWhenWhat you do
grant_revokedThe 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_forgottenThe player chose Forget this game.Delete everything tied to that sub. If the player comes back, it is with a new sub.
nickname_changedThe player edited the nickname.Replace the stored nickname with the event's nickname.
account_deletedThe 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 jti is the event's id, and it stays the same on every retry. Deduplicate by jti.
  • 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.

Verifying in other languages

Complete verifiers for identity and data event tokens, with the same rules and refusal codes as the Node SDK.

Testing

Develop offline on the mock, then play your game inside uloggd, from your machine or from a release, before anyone reviews it.

On this page

Declare the URLThe eventsDeliveryBefore approvalThe event tokenYour duty