GET /api/agents/material-change compares the latest two recorded versions of one stance kind. This REST operation requires an active Feed entitlement; Reserve-only access is insufficient. The Feed $25 / The Reserve $149. The free API above remains free. No material-change tool is exposed by the free MCP server or keyless GPT Actions spec.
Use your existing Supabase Authorization: Bearer access token: the server verifies a confirmed-email, nonanonymous identity and active tier=feed entitlement. Alternatively, it accepts facilitator-verified x402 v2 PAYMENT-SIGNATURE (or the tolerated X-PAYMENT header) matching the Feed requirements and an active Feed wallet identity. It verifies proof only; it never settles payment or grants a period. Previously used proofs are not guaranteed to be accepted. Cookies, lsk API keys and query/body email, wallet or customer IDs do not authenticate this route. Identity and entitlement checks precede query validation and history reads.
GET /api/feed/now: tape.stance_tape links to direct stance reads /api/x402/btc-etf-stance, /api/x402/funding-regime and /api/x402/rates-desk.history_durable=true stance, retain exact leg_id, revision, history_digest and issued_at. Preserve ISO T/Z, case and milliseconds in opaque IDs. Skip nondurable responses; never synthesize missing digests. Rereading the same version does not create a second record. comparison_reference_unavailable means obtain current data and wait for a later version if needed; do not substitute arbitrary older references.before_digest and after_digest are version/history digests from history_digest, not leg.evidence.digest or an event evidence_digest. Observation/evidence digests are resolved by the trusted loader. Exactly seven parameters are accepted:
kind — One recorded stance kind. btc-etf-stance, rates-desk or funding-regime-stance.before_leg — Exact opaque leg_id from a durable delivered stance. Preserve case, ISO T/Z and milliseconds; never lowercase or round.before_revision — Exact delivered revision, encoded as positive decimal digits without sign or leading zero; maximum 2147483647.before_digest — Exact history_digest of the delivered version. This is NOT leg.evidence.digest or an event evidence_digest.after_leg — Exact opaque leg_id from a durable delivered stance. Preserve case, ISO T/Z and milliseconds; never lowercase or round.after_revision — Exact delivered revision, encoded as positive decimal digits without sign or leading zero; maximum 2147483647.after_digest — Exact history_digest of the delivered version. This is NOT leg.evidence.digest or an event evidence_digest.Reference digests must be lowercase SHA-256 hex. Leg IDs are 1–200 characters with the documented OpenAPI character bounds. The example uses existing-client environment placeholders only; it does not acquire credentials, initiate payment or contain usable historical references.
curl --get 'https://www.liquidstate.tech/api/agents/material-change' \ --header "Authorization: Bearer $SUPABASE_ACCESS_TOKEN" \ --data-urlencode 'kind=funding-regime-stance' \ --data-urlencode "before_leg=$BEFORE_LEG_ID" \ --data-urlencode "before_revision=$BEFORE_REVISION" \ --data-urlencode "before_digest=$BEFORE_HISTORY_DIGEST" \ --data-urlencode "after_leg=$AFTER_LEG_ID" \ --data-urlencode "after_revision=$AFTER_REVISION" \ --data-urlencode "after_digest=$AFTER_HISTORY_DIGEST"
A 200 response has schema feed-material-change-v1 and can still contain an abstained assessment. Funding retains empty assessment.numeric_changes and unevaluated conditions. When assessment.status is abstained, recorded_decisions is null. A compatible same-evidence funding decision revision can return decision_revision_onlywith same_source_evidence and before/after recorded decision context. Eligible same-period funding revisions may include assessment.evidence_field_presence: sorted added and absent_in_afterarrays containing only levels.score, levels.score24hAgo and levels.delta24hpaths, never values. Zero is present; value-only changes are not presence changes. Absence means absent from the later retained input, not provider correction or market movement. Empty arrays cover only the allowlist; missing metadata is not a no-change verdict.
400 invalid_comparison_reference — An entitled request has missing, extra or malformed query parameters.401 verified_feed_identity_required — The supplied identity could not be verified.402 Active verified Feed entitlement required — The existing Feed entry resource is returned for an unpaid request or missing active Feed entitlement. Do not automatically pay again.404 comparison_reference_unavailable — An entitled pair is mismatched, skipped, no longer the latest two or moved during the bounded read, or its latest version is expired or terminal. Obtain current data, retain exact references, and stop if the required pair is unavailable.404 not_found — The unpaid Feed entry path is unavailable when Feed x402 is disabled. This is distinct from an unusable entitled pair.405 method_not_allowed — Only GET is supported; the response includes Allow: GET.503 comparison_unavailable — Identity/entitlement verification or the history backend failed. This is not a successful empty comparison.The latest pair and terminal state are checked again before detail is returned. Responses are private/no-store; reads are bounded, not a transactional snapshot. There is no new charge, reward or ledger transition, and assessment.ready_for_paid_delivery stays false. The comparison does not certify a newly reviewed decision or predictive edge. OpenAPI contract.