数据新鲜度与时间戳
每条报价都附带时间与过期元数据,便于采信或折价处理。
字段含义
fetchedAtSkinPricer 最近一次从该市场抓取该报价的时间。
ingestedAt报价写入 SkinPricer 价格存储的时间,略晚于
fetchedAt。它不代表价格的时效。ingestLatencyMsfetchedAt → ingestedAt 的延迟,毫秒。
isStale报价或挂单的
fetchedAt 超过 30 分钟时为 true(全市场统一的阈值)。sourceUpdatedAt市场自身生成该数据的时间(仅在市场提供时)。
fetchedAt 只是 SkinPricer 最近一次检查的时间,而检查可能只是确认副本未变,因此数据可能远比 fetchedAt 旧。市场未提供时间时省略该字段,大多数市场都是如此。sourceTimeKind
sourceUpdatedAt 的来源:payload(市场自报的生成时间,最可靠)、last_modified(经核实的文件时间戳)或 cdn_age(缓存响应头)。none 表示没有可用时间。与 sourceUpdatedAt 一同省略。sourceAgeSecondsSkinPricer 观测时市场数据已有多旧,单位秒:观测时间减去
sourceUpdatedAt。与 sourceUpdatedAt 一同省略。isSourceStale以
sourceUpdatedAt 而非 fetchedAt 判断的 isStale:市场自身数据超过 30 分钟时为 true。尚未下发。启用后,凡省略 sourceUpdatedAt 的报价也会省略此字段。updatedAt在 NBBO 的 bestAsk / bestBid 上:来源报价的最后更新时间。
marketCount / freshMarketCount提供报价的市场数 vs 其中仍新鲜的市场数。
confidence由覆盖度、新鲜度与跨市场一致性得出的 0 到 1 评分。
calculatedAtSkinPricer 计算响应中聚合值 / NBBO 的时间。
isStale 使用全市场统一的 30 分钟阈值,而非按市场的窗口。判断价格有多旧时,有 sourceUpdatedAt 就用它,否则用 fetchedAt。isStale 按 fetchedAt 计算(超过 30 分钟时为 true)。ingestedAt 是报价写入 SkinPricer 价格存储的时间;ingestedAt 减去 fetchedAt 是 SkinPricer 的处理延迟,而不是价格的时效。对交易清淡的饰品,isStale=true 应视为软信号而非硬性剔除:稍旧的报价可能是唯一可用的报价。
来源时效
只有部分市场会说明数据的生成时间。截至 2026 年 10 月,包括 Skinport、Market.CSGO、rust.tm 和 CSFloat。CSFloat 大约每小时重建一次价格表,因此即使 fetchedAt 只是一分钟前,其数据仍可能接近一小时旧。其他市场都会省略这些来源字段:缺失表示未知,绝不等于 0,也不等于 fetchedAt。买单目前不带来源时间。Skinport 的 sourceAgeSeconds 为 0,因为每次轮询都以其快照自身的时间标记。下方的最长时效仍按 fetchedAt 计算,来源时效不影响哪些报价会被返回。
最长时效与挂单计数
市场过期阈值(isStale)
steamcommunity30 分钟
其他所有市场30 分钟
报价超过其市场的最长时效后,将不再计入价格、NBBO 与挂单深度。此后挂单行仍会返回,并各自标记 isStale,但挂单计数只统计最长时效内的挂单:挂单接口的 totalListings 与市场健康状态的 listingsCount。因此计数可能为 0,而过期挂单行仍在返回,例如某市场的抓取暂停时。