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 200 events.

Request body

FieldTypeRequiredDescription
sessionIdstring (UUID)NoSession 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

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": []
  }
]

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 200 events per request.
  • If occurredAt is omitted, the server uses the current timestamp.
  • Events without a sessionId are stored but cannot be auto-linked to reports.