Reports

Submit a bug report with optional context, attachments, and events. This is the primary endpoint for collecting bug reports from games and applications.

Endpoint

POST /v1/ingest/reports

Request body

FieldTypeRequiredDescription
sessionIdstring (UUID)YesSession this report belongs to
buildIdstring (UUID)NoBuild override. If omitted, resolved from the session
reportobjectYesBug report payload (see below)
contextobjectNoGame context at the time of the report
attachmentsarrayNoFile attachments (max 50)
eventsarrayNoInline events to create with the report (max 200)
eventIdsstring[]NoUUIDs of existing events to link (max 200, must be unique)
exportobjectNoAuto-export configuration
clientRequestIdstring (UUID)NoIdempotency key

report (required)

FieldTypeRequiredDescription
titlestringYesBug report title, e.g. "Game crashed after opening inventory"
descriptionstringNoDetailed description
severitystringNolow, medium, high, or critical
reporterTypestringNoplayer, tester, qa, internal, or system
sourceChannelstringNoSource identifier, e.g. "in-game-feedback", "discord-bot"
fingerprintstringNoClient-provided deduplication hint mixed into the dedupe key

context (optional)

Captures the game state at the moment the report was created:

FieldTypeDescription
sceneNamestringCurrent scene/level, e.g. "Dungeon_Level_03"
checkpointstringLast checkpoint, e.g. "boss_room_before_cutscene"
platformstringPlatform, e.g. "windows"
buildVersionstringGame version, e.g. "1.14.2"
localestringLanguage/locale, e.g. "cs-CZ"
playerPositionobject3D position, e.g. { "x": 12.5, "y": 0.0, "z": -3.2 }
performanceobjectMetrics, e.g. { "fps": 24, "frameTimeMs": 41.6, "memoryMb": 1024 }
extraobjectAny additional custom data

attachments (optional, max 50)

FieldTypeRequiredDescription
uploadIdstring (UUID)YesID from the /uploads endpoint
attachmentTypestringYesscreenshot, video, save_state, log_bundle, or other
fileNamestringYesOriginal file name
mimeTypestringNoMIME type
sizeBytesnumberNoFile size in bytes

events (optional, max 200)

Inline events created with the report:

FieldTypeRequiredDescription
eventTypestringYesEvent type identifier
occurredAtstring (ISO 8601)NoEvent timestamp
payloadobjectNoEvent data

export (optional)

Auto-export the report to an external service:

FieldTypeRequiredDescription
providerstringYesgithub, gitlab, jira, discord, or webhook
enabledbooleanYesWhether to trigger the export

Response

FieldTypeDescription
reportIdstring (UUID)Bug report identifier
statusstringAlways "accepted"
createdAtstring (ISO 8601)Creation timestamp
idempotentbooleantrue when this response replays a previous submission with the same clientRequestId (or a deduplicated insert race). Always present
quotaExceededbooleantrue when the report was accepted but counts against an exceeded monthly quota. Always present
duplicateOfstring (UUID)Present only when the report was detected as a duplicate; the UUID of the existing report it was linked to
staleDuplicateOfstring (UUID)Present only when the report is a recurrence of an existing (stale) root report; the UUID of that root
issueExportobject or nullExport status if auto-export was requested
issueExport.statusstring"pending", "processing", "success", "failed", or "dead"
issueExport.providerstringExport provider

Examples

Minimal report

curl -X POST \
  -H "Authorization: Bearer flg_your_token" \
  -H "Content-Type: application/json" \
  -d '{
    "sessionId": "f47ac10b-...",
    "report": {
      "title": "Player falls through floor",
      "severity": "high"
    }
  }' \
  https://ingest.forgelogger.dev/v1/ingest/reports

Full report with context, attachments, and events

curl -X POST \
  -H "Authorization: Bearer flg_your_token" \
  -H "Content-Type: application/json" \
  -d '{
    "sessionId": "f47ac10b-...",
    "report": {
      "title": "Game crashed after opening inventory",
      "description": "Crash happened after pressing I during combat near the bridge.",
      "severity": "critical",
      "reporterType": "tester",
      "sourceChannel": "in-game-feedback"
    },
    "context": {
      "sceneName": "Dungeon_Level_03",
      "checkpoint": "boss_room_before_cutscene",
      "platform": "windows",
      "buildVersion": "1.14.2",
      "locale": "en-US",
      "playerPosition": { "x": 12.5, "y": 0.0, "z": -3.2 },
      "performance": { "fps": 24, "frameTimeMs": 41.6, "memoryMb": 1024 }
    },
    "attachments": [
      {
        "uploadId": "d290f1ee-...",
        "attachmentType": "screenshot",
        "fileName": "bug-screenshot.png",
        "mimeType": "image/png",
        "sizeBytes": 245760
      }
    ],
    "events": [
      {
        "eventType": "input",
        "payload": { "key": "I", "action": "open_inventory" }
      }
    ],
    "eventIds": ["9a8b7c6d-..."],
    "export": {
      "provider": "github",
      "enabled": true
    },
    "clientRequestId": "550e8400-e29b-41d4-a716-446655440000"
  }' \
  https://ingest.forgelogger.dev/v1/ingest/reports

Response

{
  "reportId": "b3d4e5f6-...",
  "status": "accepted",
  "createdAt": "2026-04-08T14:45:00.000Z",
  "idempotent": false,
  "quotaExceeded": false,
  "issueExport": {
    "status": "pending",
    "provider": "github"
  }
}

Notes

  • Idempotency — set clientRequestId to a UUID to prevent duplicate reports. If the same clientRequestId is sent again, the server returns the existing report.
  • AI processing — if the project has AI Summary enabled, the backend automatically generates a summary and reproduction steps after the report is accepted.
  • Deduplication — if AI Deduplication is enabled, the report may be marked as a duplicate and linked to an existing root report.
  • Attachments — create uploads first via /uploads, upload the binary, then reference the uploadId in the report. Max 50 attachments per report.
  • Events — you can include inline events (created with the report) and/or reference existing event IDs. Max 200 of each.