## Create a file upload session `client.File.New(ctx, body) (*FileCreateResponse, error)` **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](/using-the-api/file-uploads/) for the full upload flow, supported purposes, and size limits. If you are uploading a meeting transcript, see [Uploading meeting transcripts](/using-the-api/uploading-meeting-transcripts/) for the follow-up meeting attachment flow. **[Required scope](/using-the-api/scopes/):** `files:create` **[Rate limit category](/using-the-api/rate-limits/):** Write ### Parameters - `body FileNewParams` - `Filename param.Field[string]` Original filename. - `MimeType param.Field[string]` MIME type of the file. Must be allowed for the given purpose (if specified). - `SizeBytes param.Field[int64]` Expected file size in bytes. Maximum 512 MB. - `Purpose param.Field[FileNewParamsPurpose]` 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. - `const FileNewParamsPurposeMeetingTranscript FileNewParamsPurpose = "meeting_transcript"` - `const FileNewParamsPurposeKnowledgeUser FileNewParamsPurpose = "knowledge_user"` - `const FileNewParamsPurposeKnowledgeWorkspace FileNewParamsPurpose = "knowledge_workspace"` ### Returns - `type FileCreateResponse struct{…}` - `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 int64` File size in bytes. - `Status FileCreateResponseStatus` Current upload status of the file. - `const FileCreateResponseStatusPending FileCreateResponseStatus = "PENDING"` - `const FileCreateResponseStatusCompleted FileCreateResponseStatus = "COMPLETED"` - `const FileCreateResponseStatusCancelled FileCreateResponseStatus = "CANCELLED"` - `const FileCreateResponseStatusExpired FileCreateResponseStatus = "EXPIRED"` - `UploadHeaders map[string, string]` Headers to include in the upload request. - `UploadURL string` Upload URL. Upload the file bytes directly to this URL. ### Example ```go package main import ( "context" "fmt" "github.com/Lightfld/lightfield-go" "github.com/Lightfld/lightfield-go/option" ) func main() { client := githubcomlightfldlightfieldgo.NewClient( option.WithAPIKey("My API Key"), ) fileCreateResponse, err := client.File.New(context.TODO(), githubcomlightfldlightfieldgo.FileNewParams{ Filename: "x", MimeType: "mimeType", SizeBytes: 1, }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", fileCreateResponse.ID) } ``` #### Response ```json { "id": "id", "completedAt": "completedAt", "createdAt": "createdAt", "expiresAt": "expiresAt", "filename": "filename", "mimeType": "mimeType", "sizeBytes": -9007199254740991, "status": "PENDING", "uploadHeaders": { "foo": "string" }, "uploadUrl": "uploadUrl" } ```