# Streak evidence

> API type: streak. Own-platform only. Your backend reports each day through a generated callback URL.

Source: https://dashboard.adquest.batriders.ir/docs/quest-evidence/streak · Audience: Developers · Section: Quest evidence

## Call the callback URL with a user id

The SDK can start the quest and call getStreakStatus(id) to render currentDay, dayCount, unlocked, nextUnlockAt and lastCompletedDay. It cannot submit a streak day. After the user finishes that day's action in your product, your backend calls the generated callback URL with that user's stable id. AdQuest records the current unlocked day.

**Submit a day from your backend**

```bash
curl -X POST "https://api.adquest.batriders.ir/api/v1/streak-callbacks/YOUR_CALLBACK_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: optional-unique-key" \
  -d '{"user_id":"player-123"}'
```

**Accepted aliases**

```json
{
  "user_id": "player-123",
  "external_user_id": "player-123",
  "userId": "player-123",
  "externalUserId": "player-123"
}
```

> **Do not use SDK complete.** POST /platform/quests/{id}/complete returns STREAK_CALLBACK_REQUIRED for streak quests. One accepted callback is one day, not the final reward, until the last day settles.

## Verify calendar behavior

- Call the URL twice on the same local day and confirm the second response is idempotent.
- Miss a day and confirm reset or freeze matches the quest rule.
- Confirm only the final qualifying day settles the full quest reward.
- Rotate the callback URL if it is exposed and update your server.

## Next steps

- [Quest evidence overview](https://dashboard.adquest.batriders.ir/docs/quest-evidence): The shared request helper and the completion flow.
- [Quest actions API](https://dashboard.adquest.batriders.ir/docs/api/quest-actions): Every request and response.
- [Set up this quest in the dashboard](https://dashboard.adquest.batriders.ir/docs/dashboard/quests/streak): For publishers: configure and publish the quest.
