Skip to content

Create a file upload session

POST/v1/files

Creates a new file upload session and returns an upload URL.

After uploading the file bytes to uploadUrl, call POST /v1/files/{id}/complete to finalize the upload. Optionally pass purpose to validate MIME type and size constraints at creation time. See File uploads for the full upload flow, supported purposes, and size limits. If you are uploading a meeting transcript, see Uploading meeting transcripts for the follow-up meeting attachment flow.

Required scope: files:create

Rate limit category: Write

Body ParametersJSONExpand Collapse
filename: string

Original filename.

minLength1
maxLength255
mimeType: string

MIME type of the file. Must be allowed for the given purpose (if specified).

sizeBytes: number

Expected file size in bytes. Maximum 512 MB.

minimum1
maximum536870912
purpose: optional "meeting_transcript" or "knowledge_user" or "knowledge_workspace"

Optional validation hint. When provided, the server enforces purpose-specific MIME type and file size constraints. Use meeting_transcript for files that will be attached to a meeting as its transcript. Use knowledge_user or knowledge_workspace to add the file to the authenticated user's or workspace's Knowledge, making it available to the AI assistant. Not persisted or returned in responses.

Accepts one of the following:
"meeting_transcript"
"knowledge_user"
"knowledge_workspace"
ReturnsExpand Collapse
FileCreateResponse = object { id, completedAt, createdAt, 7 more }
id: string

Unique identifier for the file.

completedAt: string

When the file upload was completed.

createdAt: string

When the file upload session was created.

expiresAt: string

When the upload session expires. Null once completed, cancelled, or expired.

filename: string

Original filename.

mimeType: string

MIME type of the file.

sizeBytes: number

File size in bytes.

minimum-9007199254740991
maximum9007199254740991
status: "PENDING" or "COMPLETED" or "CANCELLED" or "EXPIRED"

Current upload status of the file.

Accepts one of the following:
"PENDING"
"COMPLETED"
"CANCELLED"
"EXPIRED"
uploadHeaders: map[string]

Headers to include in the upload request.

uploadUrl: string

Upload URL. Upload the file bytes directly to this URL.

Create a file upload session

curl https://api.lightfield.app/v1/files \
    -H 'Content-Type: application/json' \
    -H 'Lightfield-Version: 2026-03-01' \
    -H "Authorization: Bearer $API_KEY" \
    -d '{
          "filename": "x",
          "mimeType": "mimeType",
          "sizeBytes": 1
        }'
{
  "id": "id",
  "completedAt": "completedAt",
  "createdAt": "createdAt",
  "expiresAt": "expiresAt",
  "filename": "filename",
  "mimeType": "mimeType",
  "sizeBytes": -9007199254740991,
  "status": "PENDING",
  "uploadHeaders": {
    "foo": "string"
  },
  "uploadUrl": "uploadUrl"
}
Returns Examples
{
  "id": "id",
  "completedAt": "completedAt",
  "createdAt": "createdAt",
  "expiresAt": "expiresAt",
  "filename": "filename",
  "mimeType": "mimeType",
  "sizeBytes": -9007199254740991,
  "status": "PENDING",
  "uploadHeaders": {
    "foo": "string"
  },
  "uploadUrl": "uploadUrl"
}