## Create an asset upload `client.Assets.New(ctx, body) (*AssetNewResponse, error)` **post** `/assets` Creates an asset from an allowlisted source URL or reserves a signed upload URL. Mutating public API requests support an optional Idempotency-Key header for client retries; duplicate keys within two hours return idempotency_duplicate. ### Parameters - `body AssetNewParams` - `Source param.Field[string]` Asset source URL or signed-url upload mode - `WorkspaceID param.Field[string]` Workspace identifier - `ContentType param.Field[string]` Asset content type - `FileName param.Field[string]` Asset file name - `Folder param.Field[string]` Destination folder ### Returns - `type AssetNewResponse struct{…}` - `AssetID string` Asset identifier - `Status AssetNewResponseStatus` - `const AssetNewResponseStatusPendingUpload AssetNewResponseStatus = "pending_upload"` - `const AssetNewResponseStatusReady AssetNewResponseStatus = "ready"` - `const AssetNewResponseStatusFailed AssetNewResponseStatus = "failed"` - `UploadedVia AssetNewResponseUploadedVia` Asset source - `const AssetNewResponseUploadedViaURL AssetNewResponseUploadedVia = "url"` - `const AssetNewResponseUploadedViaSignedURL AssetNewResponseUploadedVia = "signed_url"` - `URL string` Asset URL - `Visibility Workspace` - `const WorkspaceWorkspace Workspace = "workspace"` - `WorkspaceID string` Workspace identifier - `ExpiresAt Time` Expiration time for the upload URL - `Upload AssetNewResponseUpload` - `ContentType MultipartFormData` - `const MultipartFormDataMultipartFormData MultipartFormData = "multipart/form-data"` - `FileField File` - `const FileFile File = "file"` - `FormFields map[string, string]` Upload form fields - `Method Post` - `const PostPost Post = "POST"` - `URL string` Upload URL - `UploadURL string` Upload URL (serialized) ### Example ```go package main import ( "context" "fmt" "github.com/florafauna-ai/flora-go" "github.com/florafauna-ai/flora-go/option" ) func main() { client := flora.NewClient( option.WithAPIKey("My API Key"), ) asset, err := client.Assets.New(context.TODO(), flora.AssetNewParams{ Source: "signed-url", WorkspaceID: "ws_abc123", }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", asset.AssetID) } ``` #### Response ```json { "asset_id": "asset_abc123", "status": "pending_upload", "uploaded_via": "url", "url": "https://example.com", "visibility": "workspace", "workspace_id": "ws_abc123", "expires_at": "2019-12-27T18:11:19.117Z", "upload": { "content_type": "multipart/form-data", "file_field": "file", "form_fields": { "foo": "string" }, "method": "POST", "url": "https://example.com" }, "upload_url": "https://upload.imagekit.io/api/v1/files/upload" } ```