| query | Yes | The validated input echoed back, i.e. signal_id and (if you sent one) known_version. | |
| status | No | Live status at call time. ACTIVE = published AND entry window still open, STALE = entry window closed (the hold horizon may still run), INVALIDATED = an invalidation condition triggered. Only ACTIVE is a current new-entry advice. | |
| changed | Yes | True when current_version differs from your known_version (or when you supplied no baseline); then call get_crypto_signal for the updated advice. | |
| signal_id | Yes | Stable id of the opportunity across versions; the input for every other call in the chain. | |
| checked_at | Yes | When we produced this answer (ISO 8601, UTC). The only ISO timestamp in the payload; every other timestamp is unix seconds. | |
| disclaimer | Yes | Our product boundary, verbatim in every paid advice response: market intelligence only, no execution, no custody, no position sizing, and opportunity_score is a heuristic rather than a calibrated win probability. | |
| change_types | Yes | Which kinds of change occurred between your baseline and current_version; empty when nothing changed or no baseline was supplied. | |
| source_as_of | Yes | Unix seconds — freshness of the upstream answer; falls back to our own clock because the check is computed on call. | |
| known_version | Yes | The baseline version YOU sent, echoed so the answer can never contradict your input; null when you sent none, and then changed is always true. | |
| current_version | Yes | The version the upstream advice system holds right now. | |
| next_check_after | Yes | Unix seconds — do not poll again before this. Upstream uses now + 300 while ACTIVE and now + 1800 otherwise. | |
| source_disclaimer | No | Verbatim disclaimer of the upstream advice system, passed through unedited. | |
| recommended_next_call | Yes | Machine-readable next step in the chain (scan → signal → validate → evidence → check), so you can follow the workflow without documentation. null means there is explicitly nothing useful to call now; next_check_after then says when to come back. | |