# FLUX.2 [flex]

IMAGEFeaturedbfl-flux-2-flex

**FLUX.2 \[flex\]** is a highly controllable text-to-image model from [Black Forest Labs](https://blackforestlabs.ai/) that puts full creative control in your hands. This model excels at rendering text and fine details while allowing developers to fine-tune parameters like inference steps and guidance scale to perfectly balance quality, prompt adherence, and speed. It’s ideal for creators who need precise control over the generation process and want to optimize their workflow for specific creative requirements.

Best for

Designers who want to tune quality vs. speed by dial, Crisp typography and fine-detail generation

POST

/v2/workspaces/{workspace\_id}/base-models/bfl-flux-2-flex/inferences

```bash
curl --request POST \
  --url https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/bfl-flux-2-flex/inferences \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "prompt": "a knight standing in a snowy forest",
  "aspect_ratio": "SQUARE_1K",
  "transparency": false,
  "guidance_file_init_image": [
    {
      "url": "<file_url>"
    }
  ],
  "guidance_file_reference_image": [
    {
      "url": "<file_url>"
    }
  ]
}'
```

```python
import requests


url = "https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/bfl-flux-2-flex/inferences"


payload = {
    "prompt": "a knight standing in a snowy forest",
    "aspect_ratio": "SQUARE_1K",
    "transparency": False,
    "guidance_file_init_image": [{ "url": "<file_url>" }],
    "guidance_file_reference_image": [{ "url": "<file_url>" }]
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}


response = requests.post(url, json=payload, headers=headers)


print(response.json())
```

```js
const url = 'https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/bfl-flux-2-flex/inferences';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"prompt":"a knight standing in a snowy forest","aspect_ratio":"SQUARE_1K","transparency":false,"guidance_file_init_image":[{"url":"<file_url>"}],"guidance_file_reference_image":[{"url":"<file_url>"}]}'
};


try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main


import (
  "fmt"
  "strings"
  "net/http"
  "io"
)


func main() {


  url := "https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/bfl-flux-2-flex/inferences"


  payload := strings.NewReader("{\n  \"prompt\": \"a knight standing in a snowy forest\",\n  \"aspect_ratio\": \"SQUARE_1K\",\n  \"transparency\": false,\n  \"guidance_file_init_image\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ],\n  \"guidance_file_reference_image\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ]\n}")


  req, _ := http.NewRequest("POST", url, payload)


  req.Header.Add("Authorization", "Bearer <token>")
  req.Header.Add("Content-Type", "application/json")


  res, _ := http.DefaultClient.Do(req)


  defer res.Body.Close()
  body, _ := io.ReadAll(res.Body)


  fmt.Println(res)
  fmt.Println(string(body))


}
```

```php
<?php


$curl = curl_init();


curl_setopt_array($curl, [
  CURLOPT_URL => "https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/bfl-flux-2-flex/inferences",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode([
    'prompt' => 'a knight standing in a snowy forest',
    'aspect_ratio' => 'SQUARE_1K',
    'transparency' => null,
    'guidance_file_init_image' => [
        [
                'url' => '<file_url>'
        ]
    ],
    'guidance_file_reference_image' => [
        [
                'url' => '<file_url>'
        ]
    ]
  ]),
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer <token>",
    "Content-Type: application/json"
  ],
]);


$response = curl_exec($curl);
$err = curl_error($curl);


curl_close($curl);


if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
```

```java
OkHttpClient client = new OkHttpClient();


MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n  \"prompt\": \"a knight standing in a snowy forest\",\n  \"aspect_ratio\": \"SQUARE_1K\",\n  \"transparency\": false,\n  \"guidance_file_init_image\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ],\n  \"guidance_file_reference_image\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ]\n}");
Request request = new Request.Builder()
  .url("https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/bfl-flux-2-flex/inferences")
  .post(body)
  .addHeader("Authorization", "Bearer <token>")
  .addHeader("Content-Type", "application/json")
  .build();


Response response = client.newCall(request).execute();
```

```ruby
require 'uri'
require 'net/http'


url = URI("https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/bfl-flux-2-flex/inferences")


http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true


request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"prompt\": \"a knight standing in a snowy forest\",\n  \"aspect_ratio\": \"SQUARE_1K\",\n  \"transparency\": false,\n  \"guidance_file_init_image\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ],\n  \"guidance_file_reference_image\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ]\n}"


response = http.request(request)
puts response.read_body
```

```csharp
var client = new RestClient("https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/bfl-flux-2-flex/inferences");
var request = new RestRequest("", Method.Post);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"prompt\": \"a knight standing in a snowy forest\",\n  \"aspect_ratio\": \"SQUARE_1K\",\n  \"transparency\": false,\n  \"guidance_file_init_image\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ],\n  \"guidance_file_reference_image\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ]\n}", ParameterType.RequestBody);
var response = client.Execute(request);
```

* Production

## Authorizations

* **[bearerAuth](/docs/v2/rest-api#bearerauth)**

## Parameters

### Path Parameters

**workspace\_id**

required

_Workspace Id_

Id of the workspace that owns the resource.

string format: uuid

Id of the workspace that owns the resource.

### Query Parameters

**session\_name**

Any of:

**string**

string

**null**

null

Organize this run under a named session. A new session is created if none matches.

## Request Bodyrequired

_FLUX.2 \[flex\]_object

**prompt**

_Prompt_

string

""

**aspect\_ratio**

_Aspect Ratio_

string

default: SQUARE\_1K

Allowed values: SQUARE\_1K PORTRAIT\_3\_4\_1K PORTRAIT\_9\_16\_1K LANDSCAPE\_4\_3\_1K LANDSCAPE\_16\_9\_1K SQUARE\_2K PORTRAIT\_3\_4\_2K PORTRAIT\_9\_16\_2K LANDSCAPE\_4\_3\_2K LANDSCAPE\_16\_9\_2K

**seed**

_Seed_

_Advanced field._

integer

nullable

**guidance\_scale**

_Guidance Scale_

_Advanced field._

number

default: 3.5 \>= 1.5 <= 10 multiple of 0.5

**inference\_steps**

_Inference Steps_

_Advanced field._

integer

default: 28 \>= 2 <= 50 multiple of 1

**transparency**

_Transparent Background_

boolean

**guidance\_file\_init\_image**

_Source image_

The image to modify

Array<object>

_InferenceFormFileRef_

A single guidance/reference file supplied to a `reference_image_list` field.

The slot’s guidance `type` is fixed by the field it’s attached to; the caller supplies the file URL and, where the model supports per-file weighting, a weight.

object

**url**

required

_Url_

string

**weight**

_Weight_

number

nullable

**guidance\_file\_reference\_image**

_Reference image_

Guides the edit

Array<object>

_InferenceFormFileRef_

A single guidance/reference file supplied to a `reference_image_list` field.

The slot’s guidance `type` is fixed by the field it’s attached to; the caller supplies the file URL and, where the model supports per-file weighting, a weight.

object

**url**

required

_Url_

string

**weight**

_Weight_

number

nullable

**prompt\_language**

_Prompt Language_

_Advanced field._

string

nullable

##### Example

```json
{
  "prompt": "a knight standing in a snowy forest",
  "aspect_ratio": "SQUARE_1K",
  "transparency": false,
  "guidance_file_init_image": [
    {
      "url": "<file_url>"
    }
  ],
  "guidance_file_reference_image": [
    {
      "url": "<file_url>"
    }
  ]
}
```

## Responses

### 202

Successful Response

_ExecuteForgeOutput_object

**inference\_id**

required

_Inference Id_

Unique identifier for this forge run.

string format: uuid

**status**

required

_InferenceStatus_

Current status: IN\_PROGRESS.

string

Allowed values: in\_progress complete failed cancelled deleted

**estimated\_price\_creative\_units**

Any of:

**number**

number

**null**

null

**poll\_interval\_seconds**

required

_Poll Interval Seconds_

Suggested polling interval in seconds.

integer

**created\_at**

required

_Created At_

Timestamp of when the run was created.

string format: date-time

**session\_id**

Any of:

**string**

string format: uuid

**null**

null

**normalized\_parameters**

Any of:

**NormalizedInferenceParameters**

_NormalizedInferenceParameters_

Inference parameters after model-specific normalization.

These reflect the actual values used for generation, including model defaults applied for any parameters not explicitly set.

object

**width**

Any of:

**null**

integer

**integer**

null

**height**

Any of:

**null**

integer

**integer**

null

**batch\_size**

Any of:

**null**

integer

**integer**

null

**num\_inference\_steps**

Any of:

**null**

integer

**integer**

null

**guidance\_scale**

Any of:

**null**

number

**number**

null

**duration\_seconds**

Any of:

**null**

number

**number**

null

**fps**

Any of:

**null**

integer

**integer**

null

**null**

null

##### Example

```json
{
  "status": "in_progress"
}
```

### 401

Unauthenticated — missing or invalid Bearer token.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description."
}
```

### 403

Forbidden — insufficient permissions.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description."
}
```

### 404

Resource not found.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description."
}
```

### 422

Invalid input parameters.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description."
}
```

### 429

Rate limited — too many concurrent requests.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description."
}
```

### 500

Internal server error.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description."
}
```
