The recommended method for uploading crash reports to BugSplat is via presigned URLs. This approach is more efficient and scalable than direct POST uploads. The process involves three steps:
- Request a presigned upload URL from BugSplat
- Upload your zipped crash file and attachments directly to the presigned URL
- Commit the upload to finalize processing
For a complete working example, see the python-crash-upload repository.
{% hint style="info" %} Before uploading, zip your crash file (e.g., minidump) and all attachments to reduce transfer size. {% endhint %}
GET https://{{database}}.bugsplat.com/api/getCrashUploadUrl
Requests a presigned URL for uploading a zip file to BugSplat's storage.
| Name | Type | Description |
|---|---|---|
| {{database}}* | string | Replace the subdomain value with the value of your BugSplat database |
| Name | Type | Description |
|---|---|---|
| appName* | string | Name of the crashing application |
| appVersion* | string | Version of the crashing application |
| crashPostSize* | number | Size of the zipped crash file in bytes |
| fullDumpFlag | number | Set to 1 for full memory dumps (bypasses size limit check). Default: 0 |
| internalIP | string | Internal IP address of the crashing machine |
{% tabs %} {% tab title="200: OK" %}
{
"status": "success",
"url": "https://s3.amazonaws.com/bucket/path?presigned-params...",
"contentType": "application/zip, application/octet-stream"
}{% endtab %}
{% tab title="429: Too Many Requests" %}
{
"error": "Too many requests"
}{% endtab %} {% endtabs %}
PUT {{presigned_url}}
Upload the zipped crash and attachments directly to the presigned URL returned from Step 1.
| Name | Type | Description |
|---|---|---|
| Content-Type* | string | Must be application/octet-stream |
| Content-Length* | string | Size of the zipped crash file in bytes |
The raw binary content of your zipped crash file.
{% tabs %} {% tab title="200: OK" %} Empty response body indicates successful upload. {% endtab %} {% endtabs %}
POST https://{{database}}.bugsplat.com/api/commitS3CrashUpload
Commits the uploaded crash file for processing by BugSplat.
| Name | Type | Description |
|---|---|---|
| {{database}}* | string | Replace the subdomain value with the value of your BugSplat database |
| Name | Type | Description |
|---|---|---|
| appName* | string | Name of the crashing application |
| appVersion* | string | Version of the crashing application |
| s3Key* | string | The presigned URL returned from Step 1 (used as the S3 key reference) |
| crashType | string | Type of crash (see Crash Type Reference below). Default: "Windows.Native" |
| crashTypeId | number | Numeric identifier for the crash type (alternative to crashType string) |
| fullDumpFlag | number | Set to 1 for full memory dumps. Default: 0 |
| appKey | string | Application key for additional identification |
| description | string | User-provided crash description |
| user | string | Username or identifier of the user who experienced the crash |
| string | Email address of the user who experienced the crash | |
| internalIP | string | Internal IP address of the crashing machine |
| notes | string | Additional notes about the crash |
| processor | string | Processor/server identifier for crash processing |
| crashTime | string | Timestamp of when the crash occurred (ISO format). Default: current time |
| attributes | string | JSON string of custom attributes to associate with the crash |
| crashHash | string | Hash of the crash for deduplication purposes |
{% tabs %} {% tab title="200: OK" %}
{
"status": "success",
"crashId": 1,
"stackKeyId": 5555,
"messageId": 12345,
"infoUrl": "https://app.bugsplat.com/browse/crashInfo.php?vendor=fred&version=1.0&key=key&id=99999999&row=1"
}{% endtab %} {% endtabs %}
Use the following crashType and crashTypeId values when committing uploads:
| Platform | crashType | crashTypeId | Description |
|---|---|---|---|
| Windows | Windows.Native |
1 | Native Windows minidumps (x86/x64) |
| .NET | DotNet |
2 | Legacy .NET crash reports |
| .NET | DotNetDmp |
8 | .NET minidumps |
| .NET Standard | DotNetStandard |
18 | .NET Core, UWP, and .NET Standard |
| macOS | PLCrashReporter |
13 | PLCrashReporter format |
| Crashpad/Breakpad | Crashpad |
6 | Cross-platform Crashpad/Breakpad minidumps |
| Java | Java |
4 | Java crash reports |
| JavaScript | JavaScript |
14 | Browser JavaScript errors |
| Angular | Angular |
19 | Angular framework errors |
| Node.js | NodeJs |
20 | Node.js crash reports |
| Electron | Electron |
22 | Electron application crashes |
| Python | Python |
23 | Python crash reports |
| Unity (Managed) | Unity |
12 | Unity managed/C# crash reports |
| Unity (Native) | UnityNative |
15 | Unity native crash dumps |
| Unreal Engine | UE4Native |
17 | UE4/UE5 Windows crash reports |
| Unreal Engine (Linux) | UE4LinuxServer |
16 | UE4/UE5 Linux server crash reports |
| Unreal Engine (Mac) | UE4Mac |
33 | UE4/UE5 macOS crash reports |
| iOS | iOS |
26 | iOS crash reports |
| PlayStation 4 | PlayStation4 |
28 | PS4 crash reports |
| PlayStation 5 | PlayStation5 |
29 | PS5 crash reports |
| Xbox | Xbox |
27 | Xbox crash reports |
| Nintendo | Nintendo |
35 | Nintendo Switch crash reports |
| XML | XmlReport |
21 | Custom XML-formatted crash reports |
| User Feedback | User.Feedback |
36 | User-submitted feedback and bug reports |
Most crash uploads to BugSplat are done via pre-signed URLs as described above. However, some platforms do not support uploading via pre-signed URLs. The following documentation describes how customers can POST crashes directly to BugSplat via a suite of endpoints specific to their BugSplat database.
{% hint style="warning" %} All these crashes must be uploaded via your BugSplat subdomain (e.g., https://your-database.bugsplat.com) to ensure that our backend accepts them. {% endhint %}
POST https://{{database}}.bugsplat.com/post/ps4/crash
Uploads a Playstation 4 crash report, extracts user data and user files
| Name | Type | Description |
|---|---|---|
| {{database}}* | string | Replace the subdomain value with the value of your BugSplat database |
| Name | Type | Description |
|---|---|---|
| corefile* | object | The core dump file to be uploaded |
| application* | string | Name of the crashing application. IMPORTANT this value must match the value used to upload symbols. |
| version* | string | Crashing application's version. IMPORTANT this value must match the value used to upload symbols |
{% tabs %} {% tab title="200 " %}
{
"status": "success",
"crashId": 1,
"techSupportUrl": "https://app.bugsplat.com/browse/crashInfo.php?vendor=fred&version=1.0&key=key&id=99999999&row=1"
}
{% endtab %} {% endtabs %}
POST https://{{database}}.bugsplat.com/post/ps5/crash
Uploads a Playstation 5 crash report, extracts user data and user files
| Name | Type | Description |
|---|---|---|
| {{database}}* | string | Replace the subdomain value with the value of your BugSplat database |
| Name | Type | Description |
|---|---|---|
| corefile* | object | The core dump file to be uploaded |
| application* | string | Name of the crashing application. IMPORTANT this value must match the value used to upload symbols. |
| version* | string | Crashing application's version. IMPORTANT this value must match the value used to upload symbols |
{% tabs %} {% tab title="200 " %}
{
"status": "success",
"crashId": 1,
"techSupportUrl": "https://app.bugsplat.com/browse/crashInfo.php?vendor=fred&version=1.0&key=key&id=99999999&row=1"
}{% endtab %} {% endtabs %}
POST https://{{database}}.bugsplat.com/post/bp/crash/crashpad.php
Uploads a Crashpad crash report with optional metadata.
| Name | Type | Description |
|---|---|---|
| {{database}}* | String | Replace the subdomain value with the name of your BugSplat database |
| Name | Type | Description |
|---|---|---|
| upload_file_minidump* | FILE | File POST parameter. This file can optionally be zip compressed. |
| other files | FILE | Any additional file POSTs will be attached to the crash report. |
| product* | String | Application name |
| version* | String | Application version |
| key | String | BugSplat crash key |
| user | String | User reporting the crash |
| list_annotations | String | User description of the problem |
| String |
{% tabs %} {% tab title="200: OK " %}
{
"status": "success",
"crash_id": 1,
"url": "https://app.bugsplat.com/browse/crashInfo.php?vendor=fred&version=1.0&key=key&id=99999999&row=1"
}{% endtab %} {% endtabs %}
POST https://{{database}}.bugsplat.com/post/xml/index.php
Uploads an XML crash report and can be used to create reports for languages and platforms not directly supported by BugSplat.
| Name | Type | Description |
|---|---|---|
| {{database}}* | String | Replace the subdomain value with the name of your BugSplat database |
| Name | Type | Description |
|---|---|---|
| file* | FILE | XML file containing crash report. File name must be bsCrashReport.xml |
| other files | FILE | Any additional file POSTs will be attached to the crash report. |
| appName* | String | Application name |
| appVersion* | String | Application version |
| appKey | String | BugSplat crash key |
| user | String | User reporting the crash |
| String | Email of user | |
| description | String | User description of the problem |
| ipAddress | String | IP Address of machine generating report |
| notes | string | Arbitrary additional data about the crash report |
{% tabs %} {% tab title="200: OK " %}
{
"status": "success",
"crash_id": 1,
"url": "https://app.bugsplat.com/browse/crashInfo.php?vendor=fred&version=1.0&key=key&id=99999999&row=1"
}{% endtab %} {% endtabs %}
<report>
<platform>Windows</platform>
<os>Windows 10 Version 20348 MP (4 procs) Free x86 compatible</os>
<process>
<exception>
<code>FATAL ERROR</code>
<explanation>This is an error code explanation</explanation>
<func><![CDATA[myConsoleCrasher!MemoryException]]></func>
<file>/www/bugsplatAutomation/myConsoleCrasher/myConsoleCrasher.cpp</file>
<line>143</line>
<registers>
<cs>0023</cs>
<ds>002b</ds>
<eax>00000011</eax>
<ebp>00affb58</ebp>
<ebx>00858000</ebx>
<ecx>43bf1e0e</ecx>
<edi>00affb58</edi>
<edx>014480b4</edx>
<efl>00010202</efl>
</registers>
</exception>
<modules numloaded="2">
<module>
<name>myConsoleCrasher</name>
<order>1</order>
<address>01320000-01457000</address>
<path>C:/www/BugsplatAutomation/BugsplatAutomation/bin/x64/Release/temp/BugSplat/bin/myConsoleCrasher.exe</path>
<symbolsloaded>deferred</symbolsloaded>
<fileversion/>
<productversion/>
<checksum>00000000</checksum>
<timedatestamp>SatJun1501:18:092019</timedatestamp>
</module>
<module>
<name>BugSplatRc</name>
<order>2</order>
<address>01320000-01457000</address>
<path>C:/www/BugsplatAutomation/BugsplatAutomation/bin/x64/Release/BugSplatRc.dll</path>
<symbolsloaded>deferred</symbolsloaded>
<fileversion/>
<productversion/>
<checksum>00000000</checksum>
<timedatestamp>SatJun1501:18:092019</timedatestamp>
</module>
</modules>
<threads count="2">
<thread id="0" current="yes" event="yes" framecount="3">
<frame>
<symbol><![CDATA[myConsoleCrasher!MemoryException]]></symbol>
<file>/www/bugsplatAutomation/myConsoleCrasher/myConsoleCrasher.cpp</file>
<line>143</line>
<offset>0x35</offset>
</frame>
<frame>
<symbol>
<![CDATA[myConsoleCrasher!wmain]]>
</symbol>
<file>C:/www/BugsplatAutomation/BugsplatAutomation/BugSplat/samples/myConsoleCrasher/myConsoleCrasher.cpp</file>
<line>83</line>
<offset>0x239</offset>
</frame>
<frame>
<symbol><![CDATA[myConsoleCrasher!__scrt_wide_environment_policy::initialize_environment]]></symbol>
<file>d:/agent/_work/4/s/src/vctools/crt/vcstartup/src/startup/exe_common.inl</file>
<line>90</line>
<offset>0x43</offset>
</frame>
</thread>
<thread id="1" current="no" event="no" framecount="3">
<frame>
<symbol><![CDATA[my2ConsoleCrasher!MemoryException]]></symbol>
<file>/www/bugsplatAutomation/myConsoleCrasher/myConsoleCrasher.cpp</file>
<line>143</line>
<offset>0x35</offset>
</frame>
<frame>
<symbol><![CDATA[my2ConsoleCrasher!wmain]]></symbol>
<file>C:/www/BugsplatAutomation/BugsplatAutomation/BugSplat/samples/myConsoleCrasher/myConsoleCrasher.cpp</file>
<line>83</line>
<offset>0x239</offset>
</frame>
<frame>
<symbol><![CDATA[my2ConsoleCrasher!__scrt_wide_environment_policy::initialize_environment]]></symbol>
<file>d:/agent/_work/4/s/src/vctools/crt/vcstartup/src/startup/exe_common.inl</file>
<line>90</line>
<offset>0x43</offset>
</frame>
</thread>
</threads>
</process>
</report>