v56

latestOpenAPI 3.0.0raw.githubusercontent.com2026-08-014121451.1 MB
Uploads

Get a presigned URL to upload a file

Returns a presigned S3 URL plus the s3Key the file lands at. PUT the raw file bytes to that URL, then call the feature tool (e.g. upload-and-parse) with the s3Key instead of sending file data. Bytes never pass through the LLM.

post/v1/uploads/presign

Headers

X-Organization-Idstring

Organization ID (required for session auth, optional for API key auth)

Request body

purpose'questionnaire' | 'policy_pdf' | 'evidence' | 'attachment' | 'document' | 'general' required

What the file is for. Controls where the file is stored and which feature is expected to consume the returned s3Key.

fileNamestring required

Original filename, used for the stored object name. Non-alphanumeric characters are replaced with underscores.

fileTypestring required

MIME type of the file (e.g. application/pdf, text/csv). Recorded as metadata and passed to the feature endpoint; the PUT itself is content-type agnostic, so the upload never fails on a header mismatch.

Example request

{
  "purpose": "questionnaire",
  "fileName": "vendor-security-questionnaire.xlsx",
  "fileType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
}

Response

uploadUrlstring required

Presigned S3 URL. Send the raw file bytes with a plain HTTP PUT to this URL — no Content-Type or auth headers are required (the signature is in the URL). Then call the feature endpoint with the s3Key below.

s3Keystring required

The S3 key the file will land at. Pass this to the feature endpoint (e.g. questionnaire upload-and-parse) instead of base64 file data.

expiresInnumber required

Seconds until the presigned URL expires.

Example response

{
  "uploadUrl": "https://bucket.s3.us-east-1.amazonaws.com/org_x/uploads/...?X-Amz-Signature=...",
  "s3Key": "org_abc/uploads/questionnaire/1735000000-questionnaire.xlsx",
  "expiresIn": 900
}