> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trycurious.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Rewards are not being attributed

> Events arrive but no rewards show: a name or properties mismatch, a different user id, an event outside the window, a wrong timestamp, or another environment.

Events return `{ "status": "success" }`, but the dashboard shows no rewards on the experiment. Attribution is by name, user and window; one of them is not lining up.

## The name does not match

Rewards match `events.name` exactly. `purchase` is not `purchased`; `Purchased` is not `purchased`. Compare the declared reward names with the names you send.

## The properties filter does not match

A reward declared with `"properties": { "plan": "pro" }` attributes only events whose `properties` carry `"plan": "pro"`. An event with `{ "plan": "Pro" }` or with the plan in `context` does not match. Put the facts the filter needs in `properties`, with the same keys and values.

## The user id differs

An event for `user_123` credits a decision made for `user_123`. If the decision was made for an anonymous id and the event for the account id, nothing attributes until [`identify`](https://docs.trycurious.ai/guides/identify) links the two. The same applies when the client and the server disagree on the id format.

## The event fell outside the window

Each reward has a `window_seconds` (one day by default) that starts at the decision. An event after it does not count. A newer decision for the same user and element also ends the earlier decision's window, so a page that calls `decide` on every render keeps restarting the clock. See [Assignment and stickiness](https://docs.trycurious.ai/concepts/assignment.md#every-call-is-a-decision).

## The timestamp is wrong

A buffered event sent without a `timestamp` is stamped at receipt and may land outside its window. Send the real time, with an explicit timezone. A naive datetime is rejected with `timestamp must be an ISO-8601 datetime with an explicit timezone`; an offset applied twice puts the event hours away from the decision.

## The environments differ

A test key's `user_123` and a live key's `user_123` are different users. A decision under a live key and an event under a test key never meet. See [Keys and environments](https://docs.trycurious.ai/guides/keys.md).

## The event is being rejected

In the batch form, a bad item is reported inside the `200`, not as a failed request. Walk `results` for `"status": "error"`. A `$`-prefixed name is rejected for anyone but the browser SDK; rename it at the source.

## Still nothing?

Find the decision in the dashboard and compare its time with the event's. Quote the two `X-Request-Id` values to [support](mailto:team@trycurious.ai).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.