---
title: "Upload one locally-kept crash report from the player itself."
method: POST
path: "/api/crashes/upload/{file}"
tags: ["crashes"]
---

# Upload one locally-kept crash report from the player itself.

`POST /api/crashes/upload/{file}`

## Request

- Base URL: `/` (relative, and the document was published on a file host, not at the API’s origin)
- URL: `/api/crashes/upload/{file}`
- Auth: none declared

Deliberately does NOT delete on success.  The caller deletes, through the existing file API, only after this reports the upload actually landed -- deleting the only copy of a crash report on an unverified "probably sent" is how the evidence disappears. **For FPP's own web UI only** (`ShowCrashUploadDialog()` in www/js/fpp.js, which asks the user before every send). Other apps and plugins should open FPP's Diagnostic Report instead. A -manual.zip report (built by `POST /api/crashes/report`) needs a JSON body of `{"consent": true}`: the user's answer in that dialog, never a value a caller sets on their behalf. If the player cannot reach the server (`CanRetryFromBrowser`), the same dialog has the browser post the file itself to the `url` and `field` that `GET /api/crashes/uploadTarget` returns. Error `Code`: consent-required (a -manual.zip report without `{"consent":true}`), not-found (no such report on this player, e.g. pruned by newer builds).

## Request body

- object

## Response `200`

{"Status":"OK"|"Error", ...}

## Changes

- **2026-10-02** `2dbdc61caf03`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/falconchristmas/apis/fpp-api/changes/api/crashes/upload/:file/post.md)

---

[API](https://skmtc.dev/falconchristmas/apis/fpp-api.md) - [All operations](https://skmtc.dev/falconchristmas/apis/fpp-api/llms.txt) - [OpenAPI document](https://skmtc.dev/falconchristmas/apis/fpp-api/revisions/1b633540718c?raw)
