> 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/deploy/serverless/classification.md).

# Classification

{% tabs %}
{% tab title="Python" %}
**Infer on Local and Hosted Images**

To install dependencies, `pip install inference-sdk`.

```python
from inference_sdk import InferenceHTTPClient

CLIENT = InferenceHTTPClient(
    api_url="https://classify.roboflow.com",
    api_key="API_KEY"
)

result = CLIENT.infer(your_image.jpg, model_id="vehicle-classification-eapcd/2")
```

{% endtab %}

{% tab title="Javascript" %}
**Node.js**

We use [axios](https://github.com/axios/axios) to perform the POST request in this example so first run `npm install axios` to install the dependency.

**Inferring on a Local Image**

```
const axios = require("axios");
const fs = require("fs");

const image = fs.readFileSync("YOUR_IMAGE.jpg", {
    encoding: "base64"
});

axios({
    method: "POST",
    url: "https://classify.roboflow.com/your-model/42",
    params: {
        api_key: "YOUR_KEY"
    },
    data: image,
    headers: {
        "Content-Type": "application/x-www-form-urlencoded"
    }
})
.then(function(response) {
    console.log(response.data);
})
.catch(function(error) {
    console.log(error.message);
});
```

{% endtab %}

{% tab title="Swift" %}
**Uploading a Local Image Using base64**

```swift
import UIKit

// Load Image and Convert to Base64
let image = UIImage(named: "your-image-path") // path to image to upload ex: image.jpg
let imageData = image?.jpegData(compressionQuality: 1)
let fileContent = imageData?.base64EncodedString()
let postData = fileContent!.data(using: .utf8)

// Initialize Inference Server Request with API_KEY, Model, and Model Version
var request = URLRequest(url: URL(string: "https://classify.roboflow.com/your-model/your-model-version?api_key=YOUR_APIKEY&name=YOUR_IMAGE.jpg")!,timeoutInterval: Double.infinity)
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
request.httpBody = postData

// Execute Post Request
URLSession.shared.dataTask(with: request, completionHandler: { data, response, error in
    
    // Parse Response to String
    guard let data = data else {
        print(String(describing: error))
        return
    }
    
    // Convert Response String to Dictionary
    do {
        let dict = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
    } catch {
        print(error.localizedDescription)
    }
    
    // Print String Response
    print(String(data: data, encoding: .utf8)!)
}).resume()
```

{% endtab %}
{% endtabs %}

## Response Object Formats

{% tabs %}
{% tab title="Single-Label Classification" %}
**Single-Label Classification**

The hosted API inference route returns a `JSON` object containing an array of predictions. Each prediction has the following properties:

* `time` = total time, in seconds, to process the image and return predictions
* `image` = an object that holds information about the image `width` and `height`
  * `width` the height of the predicted image
  * `height` = the height of the predicted image
* `predictions` = collection of all predicted classes and their associated confidence values for the prediction
  * `class` = the label of the classification
  * `confidence` = the model's confidence that the image contains objects of the detected classification
* `top` = highest confidence predicted class
* `confidence` = highest predicted confidence score
* `image_path` = path of the predicted image
* `prediction_type` = the model type used to perform inference, `ClassificationModel` in this case

{% code overflow="wrap" %}

```json
// an example JSON object
{
  "time": 0.19064618100037478,
  "image": {
    "width": 210,
    "height": 113
  },
  "predictions": [
    {
      "class": "real-image",
      "confidence": 0.7149
    },
    {
      "class": "illustration",
      "confidence": 0.2851
    }
  ],
  "top": "real-image",
  "confidence": 0.7149,
  "image_path": "/cropped-images-1.jpg",
  "prediction_type": "ClassificationModel"
}
```

{% endcode %}
{% endtab %}

{% tab title="Multi-Label Classification" %}
**Multi-Label Classification**

The hosted API inference route returns a `JSON` object containing an array of predictions. Each prediction has the following properties:

* `time` = total time, in seconds, to process the image and return predictions
* `image` = an object that holds information about the image `width` and `height`
  * `width` the height of the predicted image
  * `height` = the height of the predicted image
* `predictions` = collection of all predicted classes and their associated confidence values for the prediction
  * `class` = the label of the classification
  * `confidence` = the model's confidence that the image contains objects of the detected classification
* `predicted_classes` = an array that contains a list of all classifications (labels/classes) returned in model predictions
* `image_path` = path of the predicted image
* `prediction_type` = the model type used to perform inference, `ClassificationModel` in this case

<pre class="language-json" data-overflow="wrap"><code class="lang-json"><strong>// an example JSON object
</strong>{
  "time": 0.19291414400004214,
  "image": {
    "width": 113,
    "height": 210
  },
  "predictions": {
    "dent": {
      "confidence": 0.5253503322601318
    },
    "severe": {
      "confidence": 0.5804202556610107
    }
  },
  "predicted_classes": [
    "dent",
    "severe"
  ],
  "image_path": "/car-model-343.jpg",
  "prediction_type": "ClassificationModel"
}
</code></pre>

{% endtab %}
{% endtabs %}

## API Reference

## Using the Inference API

<mark style="color:green;">`POST`</mark> `https://classify.roboflow.com/:datasetSlug/:versionNumber`

You can POST a base64 encoded image directly to your model endpoint. Or you can pass a URL as the `image` parameter in the query string if your image is already hosted elsewhere.

#### Path Parameters

| Name        | Type   | Description                                                                                                             |
| ----------- | ------ | ----------------------------------------------------------------------------------------------------------------------- |
| datasetSlug | string | The url-safe version of the dataset name. You can find it in the web UI by looking at the URL on the main project view. |
|             | string | The version number identifying the version of your dataset.                                                             |

#### Query Parameters

| Name     | Type   | Description                                                  |
| -------- | ------ | ------------------------------------------------------------ |
| api\_key | string | Your API key (obtained via your workspace API settings page) |

{% tabs %}
{% tab title="200: OK " %}

```json
{
   "predictions":{
      "bird":{
         "confidence":0.5282308459281921
      },
      "cat":{
         "confidence":0.5069406032562256
      },
      "dog":{
         "confidence":0.49514248967170715
      }
   },
   "predicted_classes":[
      "bird",
      "cat"
   ]
}
```

{% endtab %}

{% tab title="403: Forbidden " %}

```json
{
   "message":"Forbidden"
}j
```

{% endtab %}
{% endtabs %}
