---
title: Conversions failing
description: Diagnose why a conversion (metering) event isn't counting toward decisioning or reward totals.
---

## Symptom

A conversion is not counting toward the metrics, decisioning history, or reward totals you expect — a purchase or metering event happens but nothing about it shows up downstream.

## Likely causes

<Steps>
  <Step title="A backfilled metering event is missing its eventId">
    `POST /internal/backfill/events` requires every metering (conversion) event
    to carry a client-supplied `eventId`; a missing one fails the whole request
    rather than skipping just that event.

    ```bash
    curl -s -X POST https://api.retidal.com/internal/backfill/events \
      -H "X-API-Key: $RETIDAL_API_KEY" -H "Content-Type: application/json" \
      -d '{"events": [{"eventName": "user_paid", "visitorId": "vid_abc123"}]}'
    # 400 { "error": "MISSING_EVENT_ID", "affectedIndices": [...] }
    ```
  </Step>
  <Step title="The metering event failed to enqueue and the failure was never retried">
    `POST /api/v1/t` enqueues metering (conversion) events to the metering
    ingest queue synchronously, before it responds. A missing queue binding or
    a failed send returns `503` for the whole request — if your integration
    doesn't check for `503` on this call and retry after `retryAfter` seconds,
    the conversion is silently dropped rather than counted later.

    ```bash
    curl -s -X POST https://api.retidal.com/api/v1/t \
      -H "X-API-Key: $RETIDAL_API_KEY" -H "Content-Type: application/json" \
      -d '{"eventName": "purchase", "visitorId": "vid_abc123"}'
    # 503 { "error": "QUEUE_UNAVAILABLE", "retryAfter": 60 }
    # 503 { "error": "SELECTOR_LOOKUP_FAILED", "retryAfter": 30 }
    ```

    `POST /api/v1/t` returning `503` fails the whole request before the event
    is queued, so it will not appear in Console → Projects → Debug (which only
    shows events that were captured with `?debug=1`) — check your
    integration's own request logs for the response code on the call that
    carried this conversion.
  </Step>
</Steps>

## Still stuck

If the debug log shows the event arrived correctly and it still isn't reflected downstream, see [Decisioning not firing](/docs/troubleshooting/decisioning-not-firing).
