## Start a generation run `client.Runs.StartGeneration(ctx, body) (*RunStartGenerationResponse, error)` **post** `/runs/generation` Starts a model generation run in a project canvas using a prompt, workspace, project, optional model, and optional model parameters. Mutating public API requests support an optional Idempotency-Key header for client retries; duplicate keys within two hours return idempotency_duplicate. ### Parameters - `body RunStartGenerationParams` - `ProjectID param.Field[string]` Project identifier - `Prompt param.Field[string]` Generation prompt - `Type param.Field[RunStartGenerationParamsType]` Generation type - `const RunStartGenerationParamsTypeImage RunStartGenerationParamsType = "image"` - `const RunStartGenerationParamsTypeVideo RunStartGenerationParamsType = "video"` - `const RunStartGenerationParamsTypeAudio RunStartGenerationParamsType = "audio"` - `const RunStartGenerationParamsTypeText RunStartGenerationParamsType = "text"` - `WorkspaceID param.Field[string]` Workspace identifier - `Model param.Field[string]` Model endpoint ID - `Params param.Field[map[string, any]]` Model parameters ### Returns - `type RunStartGenerationResponse struct{…}` - `ChargedCost float64` - `EstimatedSeconds int64` - `RunID string` Run identifier - `Type RunStartGenerationResponseType` Run type - `const RunStartGenerationResponseTypeGeneration RunStartGenerationResponseType = "generation"` - `const RunStartGenerationResponseTypeTechnique RunStartGenerationResponseType = "technique"` - `const RunStartGenerationResponseTypeAction RunStartGenerationResponseType = "action"` - `Action RunStartGenerationResponseAction` - `ActionID string` Action identifier - `const RunStartGenerationResponseActionActionIDSplitText RunStartGenerationResponseActionActionID = "split-text"` - `const RunStartGenerationResponseActionActionIDFindAndReplaceText RunStartGenerationResponseActionActionID = "find-and-replace-text"` - `const RunStartGenerationResponseActionActionIDConcatText RunStartGenerationResponseActionActionID = "concat-text"` - `const RunStartGenerationResponseActionActionIDKenBurnsVideo RunStartGenerationResponseActionActionID = "ken-burns-video"` - `const RunStartGenerationResponseActionActionIDColorGradeImage RunStartGenerationResponseActionActionID = "color-grade-image"` - `const RunStartGenerationResponseActionActionIDChangeImageAr RunStartGenerationResponseActionActionID = "change-image-ar"` - `const RunStartGenerationResponseActionActionIDRotateImage RunStartGenerationResponseActionActionID = "rotate-image"` - `const RunStartGenerationResponseActionActionIDFlipImage RunStartGenerationResponseActionActionID = "flip-image"` - `const RunStartGenerationResponseActionActionIDColorFilterImage RunStartGenerationResponseActionActionID = "color-filter-image"` - `const RunStartGenerationResponseActionActionIDColorTintImage RunStartGenerationResponseActionActionID = "color-tint-image"` - `const RunStartGenerationResponseActionActionIDFilterColorImage RunStartGenerationResponseActionActionID = "filter-color-image"` - `const RunStartGenerationResponseActionActionIDBlurImage RunStartGenerationResponseActionActionID = "blur-image"` - `const RunStartGenerationResponseActionActionIDDuplicateImage RunStartGenerationResponseActionActionID = "duplicate-image"` - `const RunStartGenerationResponseActionActionIDSideBySideComposite RunStartGenerationResponseActionActionID = "side-by-side-composite"` - `const RunStartGenerationResponseActionActionIDAddShapeToImage RunStartGenerationResponseActionActionID = "add-shape-to-image"` - `const RunStartGenerationResponseActionActionIDGenerateShapeImage RunStartGenerationResponseActionActionID = "generate-shape-image"` - `const RunStartGenerationResponseActionActionIDAddTextToImage RunStartGenerationResponseActionActionID = "add-text-to-image"` - `const RunStartGenerationResponseActionActionIDGenerateTextImage RunStartGenerationResponseActionActionID = "generate-text-image"` - `const RunStartGenerationResponseActionActionIDQrCodeGenerator RunStartGenerationResponseActionActionID = "qr-code-generator"` - `const RunStartGenerationResponseActionActionIDStitchVideos RunStartGenerationResponseActionActionID = "stitch-videos"` - `const RunStartGenerationResponseActionActionIDSplitVideo RunStartGenerationResponseActionActionID = "split-video"` - `const RunStartGenerationResponseActionActionIDExtractVideoFrames RunStartGenerationResponseActionActionID = "extract-video-frames"` - `const RunStartGenerationResponseActionActionIDColorGradeVideo RunStartGenerationResponseActionActionID = "color-grade-video"` - `const RunStartGenerationResponseActionActionIDVideoToFrameGrid RunStartGenerationResponseActionActionID = "video-to-frame-grid"` - `const RunStartGenerationResponseActionActionIDBoomerangVideo RunStartGenerationResponseActionActionID = "boomerang-video"` - `const RunStartGenerationResponseActionActionIDReverseVideo RunStartGenerationResponseActionActionID = "reverse-video"` - `const RunStartGenerationResponseActionActionIDVideoToLongExposure RunStartGenerationResponseActionActionID = "video-to-long-exposure"` - `const RunStartGenerationResponseActionActionIDVideoEffect RunStartGenerationResponseActionActionID = "video-effect"` - `const RunStartGenerationResponseActionActionIDColorFilterVideo RunStartGenerationResponseActionActionID = "color-filter-video"` - `const RunStartGenerationResponseActionActionIDSpeedUpVideo RunStartGenerationResponseActionActionID = "speed-up-video"` - `const RunStartGenerationResponseActionActionIDSlowDownVideo RunStartGenerationResponseActionActionID = "slow-down-video"` - `const RunStartGenerationResponseActionActionIDDuplicateVideo RunStartGenerationResponseActionActionID = "duplicate-video"` - `const RunStartGenerationResponseActionActionIDGreenscreenVideo RunStartGenerationResponseActionActionID = "greenscreen-video"` - `const RunStartGenerationResponseActionActionIDResizeVideo RunStartGenerationResponseActionActionID = "resize-video"` - `const RunStartGenerationResponseActionActionIDChangeVideoAr RunStartGenerationResponseActionActionID = "change-video-ar"` - `const RunStartGenerationResponseActionActionIDSplitAudioFromVideo RunStartGenerationResponseActionActionID = "split-audio-from-video"` - `const RunStartGenerationResponseActionActionIDMergeAudioIntoVideo RunStartGenerationResponseActionActionID = "merge-audio-into-video"` - `Model RunStartGenerationResponseModel` - `ModelID string` Model identifier - `PollURL string` - `ProjectID string` Project identifier - `Technique RunStartGenerationResponseTechnique` - `Name string` Technique name - `TechniqueID string` Technique identifier ### 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"), ) response, err := client.Runs.StartGeneration(context.TODO(), flora.RunStartGenerationParams{ ProjectID: "prj_abc123", Prompt: "A cinematic product photo of a ceramic mug on a sunlit table", Type: flora.RunStartGenerationParamsTypeImage, WorkspaceID: "ws_abc123", }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", response.RunID) } ``` #### Response ```json { "charged_cost": 0, "estimated_seconds": 0, "run_id": "run_abc123", "type": "generation", "action": { "action_id": "split-text" }, "model": { "model_id": "t2i-flux-2-pro" }, "poll_url": "https://example.com", "project_id": "prj_abc123", "technique": { "name": "name", "technique_id": "tech_abcd1234" } } ```