# Events Reference

## Standard Events

| Event | Description |
|-------|-------------|
| `page_view` | Page loaded |
| `session_start` | New or resumed session |
| `form_view` | Form became visible |
| `form_submitted` | Generic form submit (low confidence) |
| `signup_view` | Signup page viewed |
| `signup_attempt` | Signup form submitted |
| `signup_success` | Signup completed |
| `login_view` | Login page viewed |
| `login_attempt` | Login form submitted |
| `login_success` | Login succeeded |
| `login_failed` | Login failed |
| `password_reset_view` | Password reset page |
| `password_reset_attempt` | Password reset submitted |
| `checkout_view` | Checkout page viewed |
| `checkout_started` | Checkout initiated |
| `payment_attempt` | Payment form submitted |
| `payment_failed` | Payment failed |
| `lead_form_view` | Lead/contact form viewed |
| `lead_submitted` | Lead form submitted |
| `api_request` | API request event |
| `custom` | Custom/manual event |

## Auto-Detection

Auto-detected events include:

```json
{
  "auto_detected": true,
  "confidence": 0.94,
  "detection_method": "form_fields_button_text_url"
}
```

Confidence thresholds:
- 0.90–1.00 = very likely
- 0.70–0.89 = likely
- 0.50–0.69 = maybe
- below 0.50 = falls back to `form_submitted`

## Payload Schema

```json
{
  "site_key": "pub_xxx",
  "sdk": { "name": "findip-shield-js", "version": "1.0.0", "integration": "javascript" },
  "event": { "name": "signup_attempt", "timestamp": "...", "source": "auto_form_detect" },
  "page": { "url": "...", "path": "/signup", "title": "...", "referrer": "...", "utm": {} },
  "session": { "session_id": "sess_xxx", "visitor_id": "vis_xxx" },
  "browser": { "user_agent": "...", "language": "en-US", "timezone": "..." },
  "form": { "field_count": 5, "has_email_field": true, "has_password_field": true },
  "customer_context": { "email_domain": "gmail.com", "plan": "free" },
  "privacy": { "mode": "balanced", "consent": { "granted": true, "source": "default" } }
}
```

## API Endpoint

```
POST https://shield.findip.net/v1/shield/track
Content-Type: text/plain
```

The SDK sends the JSON payload as `text/plain` so requests stay CORS "simple
requests" — no preflight, and `sendBeacon` delivery on page unload always works.

---

Canonical page: https://www.findip.net/docs/shield/events · Markdown: https://www.findip.net/docs/shield/events.md · All Shield docs in one file: https://www.findip.net/llms-full.txt
