---
title: "Upload an evidence file to a dispute"
method: POST
path: "/v1/disputes/{disputeId}/evidence/upload"
tags: ["Exception"]
---

# Upload an evidence file to a dispute

`POST /v1/disputes/{disputeId}/evidence/upload`

Streams an evidence file (pdf, png, jpeg, or csv) to tenant-scoped object storage and records the resulting object key on the dispute as a new evidence item. The comment arrives as a query parameter and the file bytes as the request body. The tenant is resolved from the JWT and the dispute from the path — never from the body. Fails closed (503) when object storage is not configured; rejects oversize bodies (413) and unsupported content types (415).

## Path parameters

- `disputeId` string, uuid, required — Dispute ID (UUID)

## Query parameters

- `comment` string — Comment describing the uploaded evidence

## Headers

- `Content-Type` string — Evidence media type: application/pdf, image/png, image/jpeg, or text/csv

## Response `201`

Created

- DisputeResponse — Dispute details
  - `category` 'BANK_FEE_ERROR' | 'UNRECOGNIZED_CHARGE' | 'DUPLICATE_TRANSACTION' | 'OTHER' — Category of the dispute
  - `createdAt` string — Creation timestamp in RFC3339 format
  - `description` string — Description of the dispute
  - `evidence` EvidenceResponse[] — Evidence submitted for this dispute
    - `comment` string — Comment describing the evidence
    - `disputeId` string — Dispute ID this evidence belongs to
    - `fileUrl` string — URL to evidence file
    - `id` string — Unique identifier for the evidence
    - `submittedAt` string — When the evidence was submitted in RFC3339 format
    - `submittedBy` string — User who submitted the evidence
  - `exceptionId` string — Exception ID this dispute is for
  - `id` string — Unique identifier for the dispute
  - `openedBy` string — User who opened the dispute
  - `reopenReason` string — Reason for reopening if reopened
  - `resolution` string — Resolution description when closed
  - `state` 'DRAFT' | 'OPEN' | 'PENDING_EVIDENCE' | 'WON' | 'LOST' — Current state
  - `updatedAt` string — Last update timestamp in RFC3339 format

## Other responses

- `default` — Error

---

[API](https://skmtc.net/lerian/apis/identity-plugin.md) · [All operations](https://skmtc.net/lerian/apis/identity-plugin/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lerian/identity-plugin/revisions/25daba385532/schema)
