> ## Documentation Index
> Fetch the complete documentation index at: https://docs.clearspend.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Request invoice upload

> Generate a public upload link and collect missing invoices from people who don't have a ClearSpend account.

When ClearSpend is missing invoices for a subscription (for example, the vendor only emails them to the app owner), you can send a **public upload link** that lets anyone upload the right files from the browser. No ClearSpend account needed.

Each link is a unique, token-protected URL of the form `https://app.clearspend.ai/p/<token>`. It expires when the request is closed or when all the requested invoices have been received.

## Sending a request

There are two ways to generate a public upload link:

<Steps>
  <Step title="From a subscription detail page">
    Open the subscription, click **Request documents**, pick which months you need, then enter the recipient's email and an optional note. ClearSpend emails them a link and tracks the request on **subscription detail → History** (periods marked **requested**).
  </Step>

  <Step title="From the bulk requests flow">
    From the subscriptions list, select multiple rows → **Request invoices**. You can request from many app owners at once; each recipient gets their own scoped link that only exposes the apps they own.

    <video controls className="w-full rounded-lg" src="https://assets.clearspend.ai/content/videos/subscription_detail_requesting_missing_invoices.mp4">
      Your browser does not support the video tag.
    </video>
  </Step>
</Steps>

The recipient does **not** see your other subscriptions, vendors, or pricing, only the apps and months you've explicitly requested.

## What the recipient sees

After you send a request, ClearSpend **emails the recipient** with a unique link to the secure upload portal. When they open that link in their browser, the **upload page loads**; they do not need a ClearSpend account.

<video controls className="w-full rounded-lg" src="https://assets.clearspend.ai/content/videos/document_request_receiver_view.mp4">
  Your browser does not support the video tag.
</video>

That page is a focused upload experience:

* A **left sidebar** listing each subscription you've requested invoices for, with a progress badge (e.g. `2 / 3`)
* A **main area** showing one row per missing period (e.g. "Invoice for September 2026")
* A **drag-and-drop zone** for each row, accepting PDFs and images (JPG / PNG)

Each missing period has its own upload area, scoped to **that subscription (vendor) and billing month**. The recipient can upload **multiple invoice files** for that single period in one session; every file must match that vendor and month. ClearSpend rejects files tied to a **different month, vendor, or year** than the one you requested. Valid files for that period are all accepted until the row is satisfied, subject to the per-file type and size limits and the **per-session** cap below. If you asked for two months, you get two separate periods and the same rules apply to each.

### Upload limits

| Limit                     | Value                                                     |
| ------------------------- | --------------------------------------------------------- |
| Maximum file size         | 8 MB per file                                             |
| Maximum files per session | 20                                                        |
| Supported types           | `application/pdf`, `image/jpeg`, `image/jpg`, `image/png` |

When a file is dropped, ClearSpend validates it inline:

* ✅ **All invoices matched and submitted:** the file matched the vendor and period and was attached to a transaction
* ⚠ **Duplicate:** the same invoice was already uploaded; ClearSpend keeps the first copy and notifies the recipient
* ❌ **Failed:** the file couldn't be parsed; the recipient gets a specific error (wrong vendor, unreadable, etc.)

## What happens after upload

Each successful upload behaves exactly like a document the team uploaded directly:

1. Goes through OCR + line-item extraction
2. Matches against open transactions for that subscription
3. Updates the subscription's **reconciled** spend on the dashboard
4. Closes the corresponding row on the request page

Once every row is completed, the recipient sees a success state and the request is auto-closed on your side. You'll get a notification (if you've enabled invoice notifications under [Settings → Notifications](/settings/notifications)).

## Tracking requests on your side

Track outstanding requests from **subscription detail → History** (periods marked **requested**) and from the subscriptions you included in a [bulk request](/features/subscriptions-request-invoices).

For each open request you can see:

* Which months are still missing documents
* Whether files have been uploaded and matched
* Reconciliation moving toward **Matched**

To cancel a mistaken request before uploads arrive, use **Revoke request** on the billing period in history. See [Request missing invoices](/features/subscriptions-request-invoices#revoke-a-pending-request).

To follow up with a recipient, send a new request for the same periods or ask them to use the link from the original email if the request is still open.

## Security

* Tokens are random and unguessable; the URL is the only thing the recipient needs (and the only thing they can use)
* Uploaded files use short-lived, signed S3 URLs; they never traverse a public bucket
* Cancelling a request immediately invalidates the link
* We log every successful upload against the request for audit purposes on the subscription history

<Note>
  Treat public upload links like any other unauthenticated URL. Share them via email or chat, not a public channel. If a link is leaked, **Revoke request** on the subscription history row to invalidate the pending placeholder.
</Note>
