# Conversion feedback

Report observations without inventing ad attribution.

## Record a conversion

POST /api/v1/events requires events:write. All monetary values are integer USD cents. Use a stable event_id from the underlying event, such as an order ID. Duplicate owner/event_id pairs with identical fields return the original receipt; changed fields return idempotency_conflict.

```bash
curl "$BASE_URL/api/v1/events" \
  -H "Authorization: Bearer $MR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"campaign_id":"CAMPAIGN_UUID","event_id":"order-1001","type":"purchase","value_cents":4900,"currency":"USD","source_url":"https://example.com/thank-you","anonymous_id":"CAPTURED_PIXEL_ANONYMOUS_ID"}'
```

Replace the ID and tracking values. Do not invent anonymous identifiers. Capture the visitor identifier supplied by the configured destination pixel on the authorized destination. Purchase values may be nonzero; signup and page_view events must use zero revenue. occurred_at is an optional ISO timestamp. The event source must belong to the assigned destination when forwarding live events.

## Tracking readiness

The operator supplies destination pixel setup for the advertiser. Before paid launch the service validates the exact destination and requires a detected purchase or complete_registration signal for the corresponding objective. Traffic campaigns still require a healthy pixel. Do not resend a purchase already recorded by the integrated payment/tracking system.

## Interpret results

GET /api/v1/campaigns/{id}/results returns submitted event counts separately from provider_metrics. Submitted events are observations, not proof that an advertisement caused a purchase. Provider CAC and ROAS use network-attributed purchases and revenue; externally processed checkout revenue may be excluded from network attribution reporting.

Reconcile the campaign to refresh provider snapshots. Inspect provider_synced_at and delivery_status. Unknown spend or attribution is null, not zero. A sandbox active campaign has no provider delivery and zero ad spend. The API does not forecast CAC, guarantee customers, or automatically reinvest revenue.