Skip to navigation

Generate presigned URL

Signs a one-time upload URL for one file and creates the job that tracks it. loan_id is required. A declared file size over 250 MB is rejected, and a PDF over 1,500 pages is refused when processing starts.

Requires the documents:write scope. Rate limit: 1000 requests per minute per key (the upload lane).

Authentication

AuthorizationBearer

Bearer token. Use ss_live_… for live data or ss_test_… for the sandbox (test mode). See Authentication.

Headers

SpreadSpace-VersionstringOptionalformat: "^\d{4}-\d{2}-\d{2}$"

Pin the API version, e.g. 2026-10-07. Omit to get the latest. See Versioning.

Request

This endpoint expects an object.
file_namestringRequired<=255 characters
content_typestringRequired<=100 characters
loan_idstringRequired<=24 characters
The loan the file belongs to. Required.
file_sizelong or nullOptional1-262144000
Optional file size in bytes. When supplied it is validated against the 250 MB upload cap.
borrower_idstring or nullOptional<=24 characters

Optional consistency check. When supplied it must be the loan’s owning borrower; a mismatch is rejected with 400 borrower_loan_mismatch. Omit it and the loan’s borrower is used.

content_hashstring or nullOptionalformat: "^[a-fA-F0-9]{64}$"<=64 characters

SHA-256 hex digest of the file, computed client-side. Used for within-loan duplicate detection.

Response headers

X-Request-IDstringOptional
Correlation ID for this request. Quote it in support tickets.
SpreadSpace-VersionstringOptional

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.

RateLimit-Limitinteger

Request budget of the endpoint’s rate-limit policy per 60-second sliding window. See Rate limits.

RateLimit-Remaininginteger

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.

RateLimit-Resetinteger

Seconds until a guaranteed-fresh window.

RateLimit-PolicystringOptional

The active policy in limit;w=window-seconds form.

Response

OK
job_idstring
upload_urlstring
expires_in_secondsinteger

Errors

400
Bad Request Error
401
Unauthorized Error
402
Payment Required Error
403
Forbidden Error
404
Not Found Error
429
Too Many Requests Error
500
Internal Server Error