---
title: "Behaviour Shadow"
method: POST
path: "/api/cron/behaviour-shadow"
tags: ["cron"]
---

# Behaviour Shadow

`POST /api/cron/behaviour-shadow`

## Request

- Base URL: `https://api.earmarkiq.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.earmarkiq.app/api/cron/behaviour-shadow`
- Auth: none declared

Behaviour model v2: a manual backfill over every user (18 Oct 2026).
The model runs inline after every sync (app/services/behaviour_trigger),
so nothing depends on this; it is for a backfill on demand. One backfill
at a time (the job lease; no minimum interval — a second call while one
runs answers "skipped" with reason "held"); each user goes through the
per-user lease the inline runs take. With BEHAVIOUR_V2_SHADOW and
BEHAVIOUR_V2 off and no per-user override it answers "skipped",
reason "flags_off".

## Headers

- `X-Cron-Secret` string
- `x-cron-secret` string

## Response `200`

Successful Response

- BehaviourShadowResponse
  - `status` string, required
  - `reason` string, nullable
  - `users` integer
  - `runs` integer
  - `skipped` integer
  - `errors` integer
  - `timing` object

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/earmarkiq/apis/earmark-api.md) · [All operations](https://skmtc.dev/earmarkiq/apis/earmark-api/llms.txt) · [OpenAPI document](https://skmtc.dev/earmarkiq/apis/earmark-api/revisions/4a2c41907105?raw)
