---
title: Events not arriving
description: Diagnose why events sent to the Ingestion API aren't showing up.
---

## Symptom

Events you send to `POST /api/v1/t` are not arriving — analytics show no events, or events you expect are missing for a given visitor, window, or campaign.

## Likely causes

1. **`POST /api/v1/t` — invalid or missing API key (`401`)** — the request is rejected before it is ever queued.

   ```bash
   curl -s -o /dev/null -w "%{http_code}\n" -X POST https://api.retidal.com/api/v1/t \
     -H "X-API-Key: $RETIDAL_API_KEY" -H "Content-Type: application/json" \
     -d '{"eventName": "page_view", "visitorId": "vid_abc123"}'
   # 401 means the key is missing, revoked, or malformed — reissue it, see Authentication
   ```

   `POST /api/v1/t` accepts any valid project API key — it has no scope gate beyond that, so a scope error is never the cause here (unlike `decide`, `profile`, or the coupon routes, which do require a specific scope).

2. **`POST /api/v1/t` — enforce-mode validation rejected every event in the batch (`422`)** — check the response body for `errors[]`.

   ```bash
   curl -s -X POST "https://api.retidal.com/api/v1/t?sync=1" \
     -H "X-API-Key: $RETIDAL_API_KEY" -H "Content-Type: application/json" \
     -d '{"eventName": "page_view", "visitorId": "vid_abc123"}'
   # a 422 body's errors[] names the field/rule that failed catalog validation
   ```

3. **`POST /api/v1/t` — a dependency is transiently unavailable (`503`)** — this endpoint has no dedicated rate limit; a `503` (`SELECTOR_LOOKUP_FAILED` or `QUEUE_UNAVAILABLE`) is the only transient-failure status it returns, and the response carries `retryAfter`.

   A `503` fails the whole request before any 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.

4. **`POST /api/v1/t` — the event was accepted asynchronously but persistence isn't proven yet** — the default `202` response only means the event was validated and dispatched to background processing, not that it reached storage.

   ```bash
   curl -s "https://api.retidal.com/api/v1/t?sync=1" \
     -H "X-API-Key: $RETIDAL_API_KEY" -H "Content-Type: application/json" \
     -d '{"eventName": "page_view", "visitorId": "vid_abc123"}'
   # a sync 200 with "processed": true is the only proof the event reached storage
   ```

## Still stuck

If the status code and body above don't explain it, work through the [health checklist](/docs/troubleshooting/health-checklist).
