Events

Submit telemetry events during gameplay. Events capture player actions, state changes, errors, and any other data you want to attach to bug reports for context.

Endpoint

POST /v1/ingest/events

Accepts a single event object or an array of up to 500 events.

Request body

FieldTypeRequiredDescription
sessionIdstring (UUID)YesSession to associate the event with
buildIdstring (UUID)NoBuild to associate the event with
eventTypestringYesEvent type identifier, e.g. "player_action", "error", "checkpoint"
occurredAtstring (ISO 8601)NoWhen the event happened. Defaults to server time if omitted
payloadobjectNoArbitrary event data

Response

Returns an array of created events:

FieldTypeDescription
idstring (UUID)Event identifier
sessionIdstring (UUID) or nullAssociated session
buildIdstring (UUID) or nullAssociated build
eventTypestringEvent type
occurredAtstring (ISO 8601)Event timestamp
payloadobjectEvent data
reportIdsstring[]Bug reports this event is linked to
overQuotabooleantrue if the event exceeded your tenant’s monthly soft quota (still stored, but downgraded in the UI and excluded from paid features)

Examples

Single event

curl -X POST \
  -H "Authorization: Bearer flg_your_token" \
  -H "Content-Type: application/json" \
  -d '{
    "sessionId": "f47ac10b-...",
    "eventType": "player_action",
    "payload": {
      "action": "open_inventory",
      "scene": "Dungeon_Level_03",
      "position": { "x": 12.5, "y": 0.0, "z": -3.2 }
    }
  }' \
  https://ingest.forgelogger.dev/v1/ingest/events

Batch events

curl -X POST \
  -H "Authorization: Bearer flg_your_token" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "sessionId": "f47ac10b-...",
      "eventType": "checkpoint",
      "payload": { "name": "boss_room_entered" }
    },
    {
      "sessionId": "f47ac10b-...",
      "eventType": "error",
      "payload": { "message": "NullRef in EnemyAI.Update()", "stack": "..." }
    }
  ]' \
  https://ingest.forgelogger.dev/v1/ingest/events

Response

[
  {
    "id": "9a8b7c6d-...",
    "sessionId": "f47ac10b-...",
    "buildId": "7c9e6679-...",
    "eventType": "checkpoint",
    "occurredAt": "2026-04-08T14:35:00.000Z",
    "payload": { "name": "boss_room_entered" },
    "reportIds": [],
    "overQuota": false
  }
]

Node.js

// Send multiple events in one call
const events = [
  { sessionId, eventType: 'input', payload: { key: 'E', action: 'interact' } },
  { sessionId, eventType: 'state_change', payload: { health: 75, mana: 30 } },
];
 
const res = await fetch('https://ingest.forgelogger.dev/v1/ingest/events', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${token}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(events),
});

Common event types

These are suggestions — you can use any string as eventType:

Event typeUse case
player_actionButton presses, interactions, menu navigation
state_changeHealth, inventory, quest progress updates
checkpointLevel transitions, save points, boss encounters
errorRuntime errors, exceptions, assertion failures
performanceFPS drops, memory spikes, load times
networkConnection changes, latency spikes

Notes

  • Events are linked to bug reports either inline (via the events array in the report) or by referencing eventIds in the report submission.
  • Batch size is capped at 500 events per request.
  • If occurredAt is omitted, the server uses the current timestamp.
  • sessionId is required. Omitting it returns 400 and the event is not stored; a sessionId that does not reference an existing session for your project returns 404.