# POST https://ucqwijexmjctglmrxlej.supabase.co/functions/v1/public-image-upload

**Resource:** [Reputation](./reputation.md)  
**Scopes:** _none_  
**Write operation:** yes

Anonymous public image upload endpoint. No API key required. Accepts PNG, WebP, JPEG, or SVG up to 100 KB. Stores in Cloudflare R2 at trustpager.net/uploads/<context>/<sha256>.<ext>. Rate limited to 3 uploads per IP or browser fingerprint per 24 hours. Use context=reputation-reviewer-logo for reviewer company logos and context=form-avatar for reviewer headshots.

## Parameters

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `file` | body | File | yes | Image file (PNG/WebP/JPEG/SVG, max 100 KB). Send as multipart/form-data. |
| `context` | body | string | yes | Upload namespace. Must be one of: reputation-reviewer-logo, form-avatar |
| `fingerprint` | body | string | no | Optional browser fingerprint string for per-device rate limiting in addition to IP limiting. |

## Request example

```bash
curl -X POST https://ucqwijexmjctglmrxlej.supabase.co/functions/v1/public-image-upload \
  -H "Origin: https://app.trustpager.com" \
  -F "file=@company-logo.png;type=image/png" \
  -F "context=reputation-reviewer-logo"
```

## Response example

```json
{
  "url": "https://trustpager.net/uploads/reputation-reviewer-logo/a3f9c1d2e4b7890abc123def456789012345678901234567890abcdef12345678.png"
}
```

---
Base URL: `https://api.trustpager.com/functions/v1/api/v1` — Auth: `Authorization: Bearer YOUR_API_KEY`