> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/workflows/blocks/blocks/run-a-model/qwen3-5-api.md).

# Qwen 3.5 API

{% hint style="warning" %}
**Deprecated**

Use the unified Qwen-VL block (`roboflow_core/qwen_vlm@v1`), which combines all Qwen variants (native + OpenRouter) with managed-key passthrough and privacy controls.
{% endhint %}

Ask a question to Qwen 3.5 vision-language models served via OpenRouter.

You can specify arbitrary text prompts or predefined ones, the block supports the following types of prompt:

* **Open Prompt** (`unconstrained`) - Use any prompt to generate a raw response
* **Text Recognition (OCR)** (`ocr`) - Model recognizes text in the image
* **Visual Question Answering** (`visual-question-answering`) - Model answers the question you submit in the prompt
* **Captioning (short)** (`caption`) - Model provides a short description of the image
* **Captioning** (`detailed-caption`) - Model provides a long description of the image
* **Single-Label Classification** (`classification`) - Model classifies the image content as one of the provided classes
* **Multi-Label Classification** (`multi-label-classification`) - Model classifies the image content as one or more of the provided classes
* **Unprompted Object Detection** (`object-detection`) - Model detects and returns the bounding boxes for prominent objects in the image
* **Structured Output Generation** (`structured-answering`) - Model returns a JSON response with the specified fields

#### 🛠️ API providers and model variants

Qwen 3.5 is exposed via [OpenRouter API](https://openrouter.ai/) and we require passing an [OpenRouter API Key](https://openrouter.ai/docs/api-keys) to run.

Pick a specific model version from the `model_version` dropdown - new Qwen 3.5 releases will be added to this list as they become available on OpenRouter.

{% hint style="warning" %}
**API Usage Charges**

OpenRouter is an external third party providing access to the model and incurring charges on the usage. Please check pricing on [openrouter.ai](https://openrouter.ai/) before use.
{% endhint %}

#### 💡 Further reading and Acceptable Use Policy

{% hint style="warning" %}
**Model license**

Check the [Qwen license terms](https://huggingface.co/Qwen) before use.
{% endhint %}

### Type identifier

Use the following identifier in step `"type"` field: `roboflow_core/qwen3_5_openrouter@v1` to add the block as a step in your workflow.

### Properties

| **Name**                  | **Type**         | **Description**                                                                                                                                                                                                                | Refs |
| ------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---- |
| `name`                    | `str`            | Enter a unique identifier for this step..                                                                                                                                                                                      | ❌    |
| `task_type`               | `str`            | Task type to be performed by model. Value determines required parameters and output response..                                                                                                                                 | ❌    |
| `prompt`                  | `str`            | Text prompt to the Qwen 3.5 model.                                                                                                                                                                                             | ✅    |
| `output_structure`        | `Dict[str, str]` | Dictionary with structure of expected JSON response.                                                                                                                                                                           | ❌    |
| `classes`                 | `List[str]`      | List of classes to be used.                                                                                                                                                                                                    | ✅    |
| `api_key`                 | `str`            | Your OpenRouter API key.                                                                                                                                                                                                       | ✅    |
| `model_version`           | `str`            | Model to be used.                                                                                                                                                                                                              | ✅    |
| `max_tokens`              | `int`            | Maximum number of tokens the model can generate in it's response..                                                                                                                                                             | ❌    |
| `temperature`             | `float`          | Temperature to sample from the model - value in range 0.0-2.0, the higher - the more random / "creative" the generations are..                                                                                                 | ✅    |
| `max_concurrent_requests` | `int`            | Number of concurrent requests that can be executed by block when batch of input images provided. If not given - block defaults to value configured globally in Workflows Execution Engine. Please restrict if you hit limits.. | ❌    |

The **Refs** column marks possibility to parametrise the property with dynamic values available in `workflow` runtime. See *Bindings* for more info.

### :material-shield-half-full:{ style="color: #5e6c75" } Runtime compatibility

:material-cloud-off-outline:{ style="color: #546e7a" } `requires_internet` - air-gapped / offline deployments : This block depends on a service that is not reachable from fully offline / air-gapped deployments.

### Input and Output Bindings

The available connections depend on its binding kinds. Check what binding kinds `Qwen 3.5 API` in version `v1` has.

<details>

<summary>Input and output bindings</summary>

* input
  * `images` ([*`image`*](https://inference.roboflow.com/workflows/kinds/image/)): The image to infer on..
  * `prompt` ([*`string`*](https://inference.roboflow.com/workflows/kinds/string/)): Text prompt to the Qwen 3.5 model.
  * `classes` ([*`list_of_values`*](https://inference.roboflow.com/workflows/kinds/list_of_values/)): List of classes to be used.
  * `api_key` (*Union\[*[*`secret`*](https://inference.roboflow.com/workflows/kinds/secret/)*,* [*`string`*](https://inference.roboflow.com/workflows/kinds/string/)*]*): Your OpenRouter API key.
  * `model_version` ([*`string`*](https://inference.roboflow.com/workflows/kinds/string/)): Model to be used.
  * `temperature` ([*`float`*](https://inference.roboflow.com/workflows/kinds/float/)): Temperature to sample from the model - value in range 0.0-2.0, the higher - the more random / "creative" the generations are..
* output
  * `output` (*Union\[*[*`string`*](https://inference.roboflow.com/workflows/kinds/string/)*,* [*`language_model_output`*](https://inference.roboflow.com/workflows/kinds/language_model_output/)*]*): String value if `string` or LLM / VLM output if `language_model_output`.
  * `classes` ([`list_of_values`](https://inference.roboflow.com/workflows/kinds/list_of_values/)): List of values of any type.

</details>

<details>

<summary>Example JSON definition</summary>

```json
{
	    "name": "<your_step_name_here>",
	    "type": "roboflow_core/qwen3_5_openrouter@v1",
	    "images": "$inputs.image",
	    "task_type": "<block_does_not_provide_example>",
	    "prompt": "my prompt",
	    "output_structure": {
	        "my_key": "description"
	    },
	    "classes": [
	        "class-a",
	        "class-b"
	    ],
	    "api_key": "xxx-xxx",
	    "model_version": "Qwen 3.5 27B - OpenRouter",
	    "max_tokens": "<block_does_not_provide_example>",
	    "temperature": "<block_does_not_provide_example>",
	    "max_concurrent_requests": "<block_does_not_provide_example>"
	}
```

</details>
