# Submit a screenshot

> This is the v1 screenshot flow. The [v2 evidence API](/payment-evidence/) uses a different file field and response contract.

Uploads an image of the payment receipt and records it with the UTR as a single evidence submission.

## Multipart fields

| Field | Type | Required | Constraints | Description |
| --- | --- | --- | --- | --- |
| `transaction_id` | String | Yes | Non-empty | Merchant transaction ID used to create the deposit |
| `utr` | String | Yes | Exactly 12 characters | UTR shown in the screenshot |
| `upi_id` | String | No | Must match the deposit payment slot | Omit it for automatic slot selection |
| `screenshot` | Image file | Yes | `image/*`, maximum 10 MB | Payment receipt screenshot |

## cURL example

```bash
curl -X POST https://api.niripay.com/api/v1/merchant/deposits/submit-screenshot \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "transaction_id=TXN123456789" \
  -F "utr=123456789012" \
  -F "screenshot=@payment-receipt.png"
```

## JavaScript example

```js
const form = new FormData();
form.append("transaction_id", "TXN123456789");
form.append("utr", "123456789012");
form.append("screenshot", screenshotFile);

const response = await fetch(
  "https://api.niripay.com/api/v1/merchant/deposits/submit-screenshot",
  {
    method: "POST",
    headers: { Authorization: `Bearer ${API_KEY}` },
    body: form
  }
);

const screenshotResult = await response.json();

if (!response.ok || screenshotResult.status !== "success") {
  throw new Error(screenshotResult.message || "Screenshot submission failed");
}
```

## Success response

```json
{
  "status": "success",
  "message": "Screenshot submitted successfully",
  "data": {
    "transaction_id": "TXN123456789",
    "internal_transaction_id": "abc123internal456",
    "submission_type": "screenshot",
    "manual_verification_status": "need_pdf_video"
  }
}
```

An accepted screenshot changes `manual_verification_status` to `need_pdf_video`. Submit the PDF and video through the next endpoint.
