Floyo API - Workflows
Introduction
A workflow represents a reusable Floyo workflow that can be discovered, inspected, and used as the basis for API-powered generation.
You can use the /workflows resource to list all public workflows, as well as workflows that belong to the team associated with the API key used in the request. You can also retrieve the full details of a specific workflow.
List workflows
Retrieve a paginated list of workflows available to your API key.
To list workflows, make an authenticated GET request to /workflows.
QUERY PARAMETERS:
Parameter | Required | Value | Default | Description | Example |
|---|---|---|---|---|---|
search | No | URL-encoded string | N/A | Search workflows by exact string across the workflow name, description, tags, and nodes or models used. | /workflows?search=image%20to%20video |
sort | No | recent, views, likes | recent | Sort workflows by newest first, most viewed, or most liked. | /workflows?sort=views |
scope | No | all, team, public | all | Filter workflows by visibility. all returns public workflows and private workflows owned by your team. team returns your team's private workflows. public returns public workflows only. | /workflows?scope=public |
status | No | verified, unverified, all | verified | Filter workflows by verification status. Verified workflows are ready to run through Floyo. | /workflows?status=all |
model_type | No | all, opensource, 3rd-party | all | Filter workflows by the type of models or nodes they use. opensource excludes workflows that use Floyo Partner Nodes. 3rd-party returns workflows that use Floyo Partner Nodes. | /workflows?model_type=opensource |
tags | No | URL-encoded string | N/A | Comma-separated list of tags. You can provide up to 10 tags. Workflows matching any of the requested tags are returned. | /workflows?tags=image,upscale |
limit | No | integer from 10 to 50 | 25 | Maximum number of workflows to return in one page. | /workflows?limit=10 |
cursor | No | string | N/A | Pagination cursor returned by a previous list response. Use this value to retrieve the next page using the same filters and sort order. | /workflows?cursor=rea5f6c.2UzHLk.3Jq9LmN7Rv2TxYzA |
expand | No | description, prompt, stats, nodes_data | N/A | Comma-separated list of additional workflow fields to include in each list item. | /workflows?expand=stats,description |
When using cursor, keep the same query parameters that produced the cursor. Cursors are tied to the current sort and filter options.
RESPONSE ATTRIBUTES:
Attribute | Type | Description |
|---|---|---|
workflows | array | Array of workflow objects returned for the current page. |
cursor | string or null | Cursor for the next page. If null, there are no more pages to retrieve. |
has_more | boolean | Whether more workflows are available after the current page. |
WORKFLOW ATTRIBUTES:
Attribute | Type | Description |
|---|---|---|
id | string | Unique ID of the workflow, e.g., workflow_8Wn2kP4mQx7ZaBcD. |
name | string | Workflow name. |
overview | string or null | Short workflow overview. |
tags | array | Workflow tags. |
creator | object or null | Workflow creator information. When available, includes username and profile_url. |
verified | boolean | Whether the workflow is verified to run in Floyo. |
description | string or null | Detailed workflow description. Returned only when expand includes description. |
prompt | object or null | Workflow API prompt JSON. Returned only when expand includes prompt. |
stats | object | Workflow stats. Returned only when expand includes stats. |
nodes_data | array or null | Workflow node metadata. Returned only when expand includes nodes_data. |
EXAMPLE REQUEST:
curl -X GET "https://api.floyo.ai/workflows?sort=recent&status=verified&limit=10" \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Accept: application/json"
EXAMPLE RESPONSE:
STATUS 200: Workflows retrieved successfully.
{
"workflows": [
{
"id": "workflow_8Wn2kP4mQx7ZaBcD",
"name": "Product Photo Background Remover",
"overview": "Remove backgrounds from product images and export clean transparent PNG files.",
"tags": ["image", "background-removal", "product"],
"creator": {
"username": "floyo",
"profile_url": "https://www.floyo.ai/creators/floyo"
},
"verified": true
},
{
"id": "workflow_3Jq9LmN7Rv2TxYzA",
"name": "Portrait Upscaler",
"overview": "Upscale portraits while preserving facial details.",
"tags": ["image", "upscale", "portrait"],
"creator": {
"username": "studio",
"profile_url": "https://www.floyo.ai/creators/studio"
},
"verified": true
}
],
"cursor": "rea5f6c.2UzHLk.3Jq9LmN7Rv2TxYzA",
"has_more": true
}STATUS 200: No workflows matched the request.
{
"cursor": null,
"has_more": false,
"workflows": []
}List workflows with expanded fields
Use expand to include additional workflow fields in each list item.
EXAMPLE REQUEST:
curl -X GET "https://api.floyo.ai/workflows?tags=image,upscale&expand=stats,description&limit=10" \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Accept: application/json"
EXAMPLE RESPONSE:
STATUS 200: Workflows retrieved with expanded fields.
{
"workflows": [
{
"id": "workflow_3Jq9LmN7Rv2TxYzA",
"name": "Portrait Upscaler",
"overview": "Upscale portraits while preserving facial details.",
"tags": ["image", "upscale", "portrait"],
"creator": {
"username": "studio",
"profile_url": "https://www.floyo.ai/creators/studio"
},
"verified": true,
"description": "A production-ready portrait upscaling workflow optimized for clean detail recovery.",
"stats": {
"views": 1284,
"likes": 213
}
}
],
"cursor": null,
"has_more": false
}Retrieve a workflow
Retrieve a workflow to get its full details, including its prompt JSON and node metadata.
To retrieve a workflow, make an authenticated GET request to /workflows/:workflow_id.
PATH PARAMETERS:
Parameter | Required | Type | Description |
|---|---|---|---|
workflow_id | Yes | string | Unique public ID of the workflow, e.g., workflow_8Wn2kP4mQx7ZaBcD. |
RESPONSE ATTRIBUTES:
Attribute | Type | Description |
|---|---|---|
id | string | Unique public ID of the workflow, e.g., workflow_8Wn2kP4mQx7ZaBcD. |
object | workflow | Returned object type, always workflow. |
name | string | Workflow name. |
tags | array | Workflow tags. |
verified | boolean | Whether the workflow is verified to run in Floyo. |
creator | object or null | Workflow creator information. When available, includes username and profile_url. |
overview | string or null | Short workflow overview. |
stats | object | Workflow stats, including views and likes. |
nodes_data | array or null | Workflow node metadata. |
description | string or null | Detailed workflow description in sanitized html format. It can include embedded images and videos. |
prompt | object or null | Workflow API prompt JSON. |
EXAMPLE REQUEST:
curl -X GET https://api.floyo.ai/workflows/<WORKFLOW_ID> \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Accept: application/json"
EXAMPLE RESPONSE:
STATUS 200: Workflow retrieved successfully.
{
"id": "workflow_qCfaLLEB51FMpgKZ",
"object": "workflow",
"name": "Z-Image Turbo: Fast Image Generation in Seconds",
"tags": [
"Marketing",
"Photography",
"Production",
"Text2Image",
"Z-Image Turbo"
],
"description": "<p>Alibaba's team released Z-Image Turbo, and the standout feature is speed. This 6-billion parameter model generates images in 8-30 seconds on consumer GPUs while maintaining quality that rivals much larger models.</p><p><strong>Run Z-Image Turbo directly on Floyo</strong> - no installation, no local GPU required. Generate images in your browser in seconds.</p><h2><strong>How Fast Is Z-Image Turbo?</strong><br></h2><p>Takes only a few seconds (between 3 seconds to 10 seconds) on Floyo!</p><p>Real generation times from Reddit users running locally:</p><ul><li><p><strong>RTX 3060 (12GB)</strong>: ~30 seconds for 1024x1024</p></li><li><p><strong>RTX 3080 Ti</strong>: 17-22 seconds for 1280x1024</p></li><li><p><strong>RTX 7900XT</strong>: 8 seconds for 1024x1024</p></li><li><p><strong>RTX 4070</strong>: 3.4 seconds for 1280x800</p></li></ul><p>The model achieves these speeds by requiring only <strong>8 inference steps</strong> compared to 20-50 steps for most modern image models.</p><h2><strong>Z-Image Turbo Specifications</strong></h2><ul><li><p><strong>Parameters</strong>: 6 billion</p></li><li><p><strong>VRAM Requirements</strong>: 16GB for local use (not needed on Floyo)</p></li><li><p><strong>Inference Steps</strong>: 8 steps</p></li><li><p><strong>Generation Time</strong>: Sub-second on H800 GPUs, 8-30 seconds on consumer hardware</p></li><li><p><strong>License</strong>: Apache-2.0 (fully open source)</p></li><li><p><strong>Architecture</strong>: Single-Stream Diffusion Transformer (S3-DiT)</p></li><li><p><strong>Developer</strong>: Alibaba Group<br></p></li></ul><h2><strong>What Z-Image Turbo Does Well</strong></h2><p><strong>Photorealistic Quality</strong>: The model produces natural-looking images with realistic skin textures. One Reddit user noted: \"<em>i have to say im really liking the natural look out of the box. It seems more like proper photos when going for that without the need for those camera loras.</em>\"</p><p>According to the official site, Z-Image delivers \"<em>Photography-level realism with fine control over details, lighting, and textures. Achieves excellent aesthetic quality in composition and overall mood.</em>\"</p><p><strong>Bilingual Text Rendering</strong>: Z-Image Turbo can generate readable English and Chinese text within images - a feature most image models struggle with. The official docs confirm it excels at \"<em>accurately rendering complex Chinese and English text while preserving facial realism and overall aesthetic composition.</em>\"</p><p><strong>World Knowledge</strong>: According to the documentation, Z-Image \"<em>possesses vast understanding of world knowledge and diverse cultural concepts\" and \"uses structured reasoning to inject logic and common sense.</em>\"</p><p><strong>Uncensored Output</strong>: The model doesn't refuse common generation requests, though it has limitations with certain anatomical features.</p><p>From Reddit: \"<em>Finally, after SDXL we have a model that can generate proper eyelashes and non-plastic skin at the same time.</em>\" - u/Toclick</p><h2><strong>Known Limitations</strong></h2><p><strong>Prompt Consistency</strong>: Different seeds can produce similar results for the same prompt, particularly with facial features. One user observed: \"<em>Changing the prompt and seed often makes very little difference.</em>\"</p><p><strong>Anatomical Accuracy</strong>: While the model handles female anatomy well, it struggles with male anatomy.</p><p><strong>Text Encoding Speed</strong>: Initial prompt encoding can take up to a minute when changing prompts. Workaround from Reddit: \"<em>Setting the text encode to cpu instead of default increased the speed for me.</em>\"</p><p><strong>Artistic Range</strong>: The Turbo version prioritizes photorealism over stylistic variety compared to heavily fine-tuned models.</p><h2><strong>What Reddit Users Say About Z-Image Turbo</strong></h2><p>\"<em>I love this model, I'm speechless. It's the one we've all been waiting for... It's fast (3.4 seconds for 1280*800), powerful (painters and drawers styles etc.), lightweight compared to flux.2 and not censored.</em>\" - u/Kaduc21</p><p>\"<em>The output is amazing for a 6b distilled model. Training a bunch of Loras and merging them with the base model would improve it a lot.</em>\" - u/Shockbum</p><p>\"<em>It reminds Stable Diffusion 1.5 at the release, but better. Same freedom, no constraints</em>.\" - u/Kaduc21</p><p>\"<em>Speed to aesthetic quality ratio is excellent</em>.\" - u/abnormal_human</p><p>\"<em>WOW! SDXL SUCCESSOR!</em>\" - u/Shockbum</p><p>\"<em>I really hope so. I still prefer SDXL over any other newer model. It's just easier to iterate on and make a variety of pictures instead of waiting a minute or so per image</em>\" — u/SoulTrack</p><h2><strong>Z-Image Model Variants</strong></h2><p><strong>Z-Image-Turbo</strong> (available now): \"A distilled version of Z-Image with strong capabilities in photorealistic image generation, accurate rendering of both Chinese and English text, and robust adherence to bilingual instructions. It achieves performance comparable to or exceeding leading competitors with only 8 steps.\" Run it now on Floyo.</p><p><strong>Z-Image-Base</strong> (coming soon): \"The non-distilled foundation model. By releasing this checkpoint, we aim to unlock the full potential for community-driven fine-tuning and custom development.\"</p><p><strong>Z-Image-Edit</strong> (coming soon): \"A continued-training variant of Z-Image specialized for image editing. It excels at following complex instructions to perform a wide range of tasks, from precise local modifications to global style transformations, while maintaining high edit consistency.\"</p><h2><br><strong>Technical Architecture</strong></h2><p>Z-Image uses a Scalable Single-Stream DiT (S3-DiT) architecture where text, visual semantic tokens, and image VAE tokens are concatenated into one unified input stream. This approach is more parameter-efficient than dual-stream architectures.</p><p>The official docs explain: \"In this setup, text, visual semantic tokens, and image VAE tokens are concatenated at the sequence level to serve as a unified input stream, maximizing parameter efficiency compared to dual-stream approaches.\"</p><p>The speed comes from <strong>Decoupled-DMD</strong> (Distribution Matching Distillation) - a technique that compresses the larger base model while preserving quality for few-step generation.</p>",
"verified": true,
"creator": {
"username": "floyoofficial",
"profile_url": "https://www.floyo.ai/creators/floyoofficial"
},
"overview": "Fast Image Generation in Seconds",
"stats": {
"likes": 43,
"views": 19888
},
"nodes_data": [
{
"url": "https://github.com/comfyanonymous/ComfyUI",
"name": "ComfyUI Official",
"nodes": [
"Note",
"VAELoader",
"EmptySD3LatentImage",
"UNETLoader",
"CLIPLoader",
"ModelSamplingAuraFlow",
"CLIPTextEncode",
"KSampler",
"VAEDecode",
"SaveImage"
],
"models": [
{
"url": "https://huggingface.co/black-forest-labs/FLUX.1-schnell/resolve/main/ae.safetensors",
"name": "ae.safetensors",
"node": "VAELoader"
},
{
"name": "z_image_turbo_bf16.safetensors",
"node": "UNETLoader"
},
{
"name": "qwen_3_4b.safetensors",
"node": "CLIPLoader"
}
]
}
],
"prompt": {
"3": {
"_meta": {
"title": "KSampler"
},
"inputs": {
"cfg": 1,
"seed": 261747981770417,
"model": [
"16",
0
],
"steps": 9,
"denoise": 1,
"negative": [
"7",
0
],
"positive": [
"6",
0
],
"scheduler": "simple",
"latent_image": [
"13",
0
],
"sampler_name": "euler"
},
"class_type": "KSampler"
},
"6": {
"_meta": {
"title": "CLIP Text Encode (Positive Prompt)"
},
"inputs": {
"clip": [
"18",
0
],
"text": "Photorealistic postcard of a man with a casual wear. The postcard is held in a person’s hand in front of a beautiful, realistic modern city skyline at sunset, warm golden hour lighting, soft depth of field. Elegant cursive writing on the postcard reads ‘ZImage, Now in Floyo’."
},
"class_type": "CLIPTextEncode"
},
"7": {
"_meta": {
"title": "CLIP Text Encode (Negative Prompt)"
},
"inputs": {
"clip": [
"18",
0
],
"text": "blurry ugly bad"
},
"class_type": "CLIPTextEncode"
},
"8": {
"_meta": {
"title": "VAE Decode"
},
"inputs": {
"vae": [
"17",
0
],
"samples": [
"3",
0
]
},
"class_type": "VAEDecode"
},
"9": {
"_meta": {
"title": "Save Image"
},
"inputs": {
"images": [
"8",
0
],
"filename_prefix": "ComfyUI"
},
"class_type": "SaveImage"
},
"13": {
"_meta": {
"title": "EmptySD3LatentImage"
},
"inputs": {
"width": 1024,
"height": 1024,
"batch_size": 1
},
"class_type": "EmptySD3LatentImage"
},
"16": {
"_meta": {
"title": "Load Diffusion Model"
},
"inputs": {
"unet_name": "z_image_turbo_bf16.safetensors",
"weight_dtype": "default"
},
"class_type": "UNETLoader"
},
"17": {
"_meta": {
"title": "Load VAE"
},
"inputs": {
"vae_name": "ae.safetensors"
},
"class_type": "VAELoader"
},
"18": {
"_meta": {
"title": "Load CLIP"
},
"inputs": {
"type": "lumina2",
"device": "default",
"clip_name": "qwen_3_4b.safetensors"
},
"class_type": "CLIPLoader"
}
}
}STATUS 404: Workflow not found.
{
"error": "Workflow not found",
"message": "The workflow you are looking for does not exist"
}Errors
Floyo API uses conventional HTTP response codes to indicate the success or failure of an API request.
STATUS 400: Request validation failed, or the workflow could not be fetched.
{
"error": "Failed to fetch workflow",
"message": "Invalid workflow ID"
}STATUS 500: An unexpected server error occurred.
{
"error": "Internal server error",
"message": "Unknown error"
}