Get attribute snapshot
Retrieves one attribute snapshot by id, with its payload. A snapshot under another loan returns a 404.
Requires the spreads:read scope. Rate limit: 200 requests per minute per key (the api lane).
Authentication
Bearer token. Use ss_live_… for live data or ss_test_… for the sandbox (test mode). See Authentication.
Path parameters
Headers
Pin the API version, e.g. 2026-10-07. Omit to get the latest. See Versioning.
Response headers
The API surface version the server resolved for this request. Always present, regardless of whether the client supplied the request-side SpreadSpace-Version header. Default: 2026-10-07.
Request budget of the endpoint’s rate-limit policy per 60-second sliding window. See Rate limits.
Requests left in the current window. Suppressed on 429 responses produced outside the rate limiter (for example a usage throttle), where a remaining budget would be misleading.
Seconds until a guaranteed-fresh window.
The active policy in limit;w=window-seconds form.
Response
Per-loan version number, counting up across every status.
final (what an analyst approved at finalize),
machine (the same loan built from the documents alone, with no
analyst input) or draft (the latest autosave).
The figures, in the attributes.v1 payload schema:
the fiscal periods, the named attributes and ratios keyed over them,
and the analyst inputs that shaped them. Stored opaque and returned as
stored; the name-by-name catalog is on the Spreads page in the API
docs.
What the payload was built from: the documents it drew on, a count-level summary of the analyst inputs, the entity scope, and when it was built. Stored opaque, documented alongside the payload on the Spreads page.
When the analyst finalized. Set on final snapshots
only.
Display name of the analyst who finalized the spread
(final and machine snapshots); null on drafts and for
callers who may not see names.
The external_user_id your embed session named for the analyst who
finalized. It is your own identifier for that user, not a person’s name,
so it is returned to every caller and a backend can join it to its own user
table. Null on drafts, and null when the finalize happened in the
SpreadSpace workspace or under an embed session that named no user.