Skip to main content
Slate stores evidence files — affidavits, account statements, charge-off letters, and more — directly in your matter’s document library. Uploading a file is a three-step process: create a session to get a presigned S3 URL, POST the file bytes directly to S3, then confirm the upload completed. This approach keeps large binaries out of Slate’s API servers and lets S3 handle transfer reliability.
For all new integrations, target the v2 read endpoints (GET /v2/files and GET /v2/files/{fileId}) where available. The v2 file schema splits the single v1 fileType field into tag (the owner-specific document tag) and fileType (the owner-agnostic canonical Slate type). Creating an upload session (POST /v1/files), concatenating (POST /v1/files/concat), and archiving (DELETE /v1/files/{fileId}) remain v1 operations.
1

Create a file upload session

Call POST /v1/files to register the file with Slate and receive a presigned upload URL. Slate creates a file record in a pending state and returns a short-lived URL along with required form fields.Required fields:
The fileName field must include the file extension. Omitting it (e.g. sending affidavit instead of affidavit.pdf) causes the upload session to fail or the file to be stored without a MIME type, breaking downstream rendering and redaction.
The response body contains:
  • id — Slate’s UUID for this file record
  • uploadUrl — the presigned S3 POST URL
  • fields — form fields that must be included in the multipart POST
  • key — the S3 object key where the file will be stored
  • fileName — the file name Slate recorded for this upload
  • maxFileSize — maximum file size in bytes that S3 will accept for this upload session
Example Response
2

Upload the file to the presigned S3 URL

POST your file directly to the uploadUrl using multipart form data. Include all fields from the fields object first, then append the file itself as the final file part. The field order matters — S3 requires the file part to be last.
Presigned S3 upload URLs expire after 15 minutes. Start the file transfer immediately after receiving the session response. If your upload window is longer than 15 minutes, create a new session rather than reusing an expired URL.
cURL
A successful S3 upload returns HTTP 204 No Content with an empty body. Any non-2xx response from S3 means the file was not stored — check your fields values and URL for accuracy before retrying.
3

Verify the upload status

After the S3 transfer completes, call GET /v2/files/{fileId} to confirm Slate has processed the file and marked it as ready for use. Poll until uploadStatus equals uploaded.
cURL
Example Response
The redactionSummary object is only included when you pass ?redactionSummary=true and the file has at least one redaction job.Poll until uploadStatus is "uploaded". Possible uploadStatus values:Use exponential backoff starting at 2 seconds. Most files reach uploaded within 10–30 seconds.
4

Reference the id in downstream operations

Once the file uploadStatus is "uploaded", use the id anywhere Slate accepts a file reference:
  • Exhibits — attach the file to a pleading or court filing
  • Redaction — submit the id to POST /v1/redactions to automatically redact sensitive data
  • E-signature — include the file as a document in a signature request
  • QC review — associate the file with a quality control checklist item
Store the id alongside your crid in your own system so you can retrieve the Slate reference without an extra lookup.