> This page is for Expression Measurement.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://dev.hume.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://dev.hume.ai/_mcp/server.

# Upload images

POST https://api.cloud.hume.ai/v1/expression/video/file
Content-Type: multipart/form-data

Send one or more images, each as a `file` part, and, to change the defaults, settings as a JSON `config` part. The response holds one result per image, in the order the parts were sent. An image with no faces is a normal result with an empty `faces` array.

## Detection and measurement

The server detects the faces in each image and lists them in `faces`. It measures the largest of them, up to the limit below, and lists those first, largest first.

- A face is skipped, and is not listed, if its detection confidence is below `face.threshold` or its bounding box is under `face.min_size` pixels on its shorter side.
- Each measured face carries its bounding box, its detection confidence, a `face_id`, and two sets of scores: `expressions` for emotional expressions such as amusement or interest, and `descriptions` for visible facial actions such as a smile or a jaw drop.
- The faces that were not measured follow, most confident first, up to 32 faces in all. Each carries its bounding box and detection confidence, with `face_id`, `expressions` and `descriptions` null.
- `face_id` tracks a face across the images of one request. A face normally keeps its ID while it is measured, and can get it back after it leaves the view or is no longer among the largest faces. IDs do not identify a person.
- **Across requests:** IDs start again from 0 in every request. To keep them consistent, set `return_face_state` and pass the returned `face_state` as `face_state` in the next request.

## Limits

| Limit | Value |
|---|---|
| Request size | 25MB, the whole multipart body |
| Image size | 2MB |
| Pixels per image | 8,294,400 (the area of a 3840x2160 image) |
| Faces measured per image | 2 by default, the largest; contact support to raise it |
| Faces listed per image | 32 |

Every image is checked before any is measured. One bad image fails the whole request, which then returns no results:

- **Not a JPEG:** rejected with `unsupported_media_type`.
- **Over the image size or pixel limit:** rejected with `image_too_large`.
- **Cannot be decoded:** rejected with `image_decode_failed`, possibly after earlier images were measured.

Reference: https://dev.hume.ai/expression-measurement/reference/video/measure

## Authentication

- `X-Hume-Api-Key` header (required) — API Key authentication via header

## Request

### Body (multipart/form-data)

This endpoint expects a multipart form with multiple files.

- `config` (VideoFileConfig, optional)
- `file` (files, required) — The images, one JPEG per `file` part. Results are numbered by the order of the parts.

## Response

### 200

One result per image, in the order sent.

- `request_id` (string, required) — Identifies this request in Hume's records. Quote it when contacting support.
- `run_id` (string, required) — Identifies the run this request was recorded as. Pass it to the run endpoints to look the run up.
- `received` (VideoFileResponseReceived, required) — What the server took from the request.
- `measurements` (list of VideoFileMeasurement, required) — One result per image, in the order the `file` parts were sent. An image with no faces still has a result, with `faces` empty.
- `face_state` (string, optional) — Present when `return_face_state` was set. Pass it unchanged as `face_state` in a later request, within 24 hours, to continue `face_id` numbering.

## Errors

### 400 Bad Request Error

Something in the request needs correcting: a malformed body or parameter, or a value the endpoint does not accept. `code` says which.

- `type` (enum, required)
  - Allowed values: `error`
- `code` (enum, required) — Identifies what went wrong. The HTTP status carried with it says how the request failed. Some of these names are also error codes of the realtime API, where they name the same kind of problem. **`400 Bad Request`**, something in the request needs correcting. - `message_invalid`: the multipart body could not be read, is missing its `file` part, or carries a part with another name. Audio takes exactly one `file` part; video takes one or more. File endpoints only. - `config_invalid`: the `config` part is not valid JSON, names a field the endpoint does not recognize, holds a value outside its range, or appears more than once. File endpoints only. - `audio_decode_failed`: the audio could not be decoded: a WAV file that is truncated or malformed, or at another sample rate, channel count or sample format, or with the extensible WAV header, or a file that is empty or is not a whole number of 16-bit samples. Audio only. - `image_decode_failed`: an image could not be decoded. Video only. - `invalid_request`: a query parameter has a value the endpoint does not accept, or `cursor` is not one the endpoint issued. Run endpoints only. **`403 Forbidden`** - `forbidden`: your organization is not permitted to use this endpoint. Contact support. File endpoints only. **`404 Not Found`** - `not_found`: no run with this ID exists in your organization, or no endpoint exists at this path. **`405 Method Not Allowed`** - `method_not_allowed`: the endpoint does not accept this HTTP method. The `Allow` header lists the methods it does accept. **`413 Content Too Large`**, the request exceeds a size limit. - `audio_too_long`: the request body is over the size limit. Audio only. - `image_too_large`: the request body or one image is over the size limit, or an image has more pixels than the endpoint accepts. Video only. **`415 Unsupported Media Type`**, the media is in a format the endpoint does not accept. - `unsupported_media_type`: the audio is in a format the server recognizes but does not accept, such as MP3 or FLAC, or an image is not a JPEG. File endpoints only. **`500 Internal Server Error`** - `internal_error`: the server failed while serving the request. Retry it; if it keeps failing, contact support, quoting the `request_id`. **`503 Service Unavailable`** - `server_busy`: the service is too busy to serve the request now. Retry it after the number of seconds in the `Retry-After` header.
  - Allowed values: `message_invalid`, `config_invalid`, `audio_decode_failed`, `image_decode_failed`, `invalid_request`, `forbidden`, `not_found`, `method_not_allowed`, `audio_too_long`, `image_too_large`, `unsupported_media_type`, `internal_error`, `server_busy`
- `message` (string, required) — What went wrong, for a person. Its wording may change; switch on `code`.
- `request_id` (string, required) — Identifies the request in Hume's records. Quote it when contacting support.

### 401 Unauthorized Error

The request carried no valid credential. Check the API key or access token you sent.

- `message` (string, required) — What went wrong, for a person.
- `request_id` (string, optional) — Identifies the request. Sent only when an API key was rejected.

### 403 Forbidden Error

Your organization is not permitted to use this endpoint. Contact support.

- `type` (enum, required)
  - Allowed values: `error`
- `code` (enum, required) — Identifies what went wrong. The HTTP status carried with it says how the request failed. Some of these names are also error codes of the realtime API, where they name the same kind of problem. **`400 Bad Request`**, something in the request needs correcting. - `message_invalid`: the multipart body could not be read, is missing its `file` part, or carries a part with another name. Audio takes exactly one `file` part; video takes one or more. File endpoints only. - `config_invalid`: the `config` part is not valid JSON, names a field the endpoint does not recognize, holds a value outside its range, or appears more than once. File endpoints only. - `audio_decode_failed`: the audio could not be decoded: a WAV file that is truncated or malformed, or at another sample rate, channel count or sample format, or with the extensible WAV header, or a file that is empty or is not a whole number of 16-bit samples. Audio only. - `image_decode_failed`: an image could not be decoded. Video only. - `invalid_request`: a query parameter has a value the endpoint does not accept, or `cursor` is not one the endpoint issued. Run endpoints only. **`403 Forbidden`** - `forbidden`: your organization is not permitted to use this endpoint. Contact support. File endpoints only. **`404 Not Found`** - `not_found`: no run with this ID exists in your organization, or no endpoint exists at this path. **`405 Method Not Allowed`** - `method_not_allowed`: the endpoint does not accept this HTTP method. The `Allow` header lists the methods it does accept. **`413 Content Too Large`**, the request exceeds a size limit. - `audio_too_long`: the request body is over the size limit. Audio only. - `image_too_large`: the request body or one image is over the size limit, or an image has more pixels than the endpoint accepts. Video only. **`415 Unsupported Media Type`**, the media is in a format the endpoint does not accept. - `unsupported_media_type`: the audio is in a format the server recognizes but does not accept, such as MP3 or FLAC, or an image is not a JPEG. File endpoints only. **`500 Internal Server Error`** - `internal_error`: the server failed while serving the request. Retry it; if it keeps failing, contact support, quoting the `request_id`. **`503 Service Unavailable`** - `server_busy`: the service is too busy to serve the request now. Retry it after the number of seconds in the `Retry-After` header.
  - Allowed values: `message_invalid`, `config_invalid`, `audio_decode_failed`, `image_decode_failed`, `invalid_request`, `forbidden`, `not_found`, `method_not_allowed`, `audio_too_long`, `image_too_large`, `unsupported_media_type`, `internal_error`, `server_busy`
- `message` (string, required) — What went wrong, for a person. Its wording may change; switch on `code`.
- `request_id` (string, required) — Identifies the request in Hume's records. Quote it when contacting support.

### 405 Method Not Allowed Error

The endpoint does not accept this HTTP method. The `Allow` header lists the methods it does accept.

- `type` (enum, required)
  - Allowed values: `error`
- `code` (enum, required) — Identifies what went wrong. The HTTP status carried with it says how the request failed. Some of these names are also error codes of the realtime API, where they name the same kind of problem. **`400 Bad Request`**, something in the request needs correcting. - `message_invalid`: the multipart body could not be read, is missing its `file` part, or carries a part with another name. Audio takes exactly one `file` part; video takes one or more. File endpoints only. - `config_invalid`: the `config` part is not valid JSON, names a field the endpoint does not recognize, holds a value outside its range, or appears more than once. File endpoints only. - `audio_decode_failed`: the audio could not be decoded: a WAV file that is truncated or malformed, or at another sample rate, channel count or sample format, or with the extensible WAV header, or a file that is empty or is not a whole number of 16-bit samples. Audio only. - `image_decode_failed`: an image could not be decoded. Video only. - `invalid_request`: a query parameter has a value the endpoint does not accept, or `cursor` is not one the endpoint issued. Run endpoints only. **`403 Forbidden`** - `forbidden`: your organization is not permitted to use this endpoint. Contact support. File endpoints only. **`404 Not Found`** - `not_found`: no run with this ID exists in your organization, or no endpoint exists at this path. **`405 Method Not Allowed`** - `method_not_allowed`: the endpoint does not accept this HTTP method. The `Allow` header lists the methods it does accept. **`413 Content Too Large`**, the request exceeds a size limit. - `audio_too_long`: the request body is over the size limit. Audio only. - `image_too_large`: the request body or one image is over the size limit, or an image has more pixels than the endpoint accepts. Video only. **`415 Unsupported Media Type`**, the media is in a format the endpoint does not accept. - `unsupported_media_type`: the audio is in a format the server recognizes but does not accept, such as MP3 or FLAC, or an image is not a JPEG. File endpoints only. **`500 Internal Server Error`** - `internal_error`: the server failed while serving the request. Retry it; if it keeps failing, contact support, quoting the `request_id`. **`503 Service Unavailable`** - `server_busy`: the service is too busy to serve the request now. Retry it after the number of seconds in the `Retry-After` header.
  - Allowed values: `message_invalid`, `config_invalid`, `audio_decode_failed`, `image_decode_failed`, `invalid_request`, `forbidden`, `not_found`, `method_not_allowed`, `audio_too_long`, `image_too_large`, `unsupported_media_type`, `internal_error`, `server_busy`
- `message` (string, required) — What went wrong, for a person. Its wording may change; switch on `code`.
- `request_id` (string, required) — Identifies the request in Hume's records. Quote it when contacting support.

### 413 Content Too Large Error

The request exceeds a size limit. `code` says which.

- `type` (enum, required)
  - Allowed values: `error`
- `code` (enum, required) — Identifies what went wrong. The HTTP status carried with it says how the request failed. Some of these names are also error codes of the realtime API, where they name the same kind of problem. **`400 Bad Request`**, something in the request needs correcting. - `message_invalid`: the multipart body could not be read, is missing its `file` part, or carries a part with another name. Audio takes exactly one `file` part; video takes one or more. File endpoints only. - `config_invalid`: the `config` part is not valid JSON, names a field the endpoint does not recognize, holds a value outside its range, or appears more than once. File endpoints only. - `audio_decode_failed`: the audio could not be decoded: a WAV file that is truncated or malformed, or at another sample rate, channel count or sample format, or with the extensible WAV header, or a file that is empty or is not a whole number of 16-bit samples. Audio only. - `image_decode_failed`: an image could not be decoded. Video only. - `invalid_request`: a query parameter has a value the endpoint does not accept, or `cursor` is not one the endpoint issued. Run endpoints only. **`403 Forbidden`** - `forbidden`: your organization is not permitted to use this endpoint. Contact support. File endpoints only. **`404 Not Found`** - `not_found`: no run with this ID exists in your organization, or no endpoint exists at this path. **`405 Method Not Allowed`** - `method_not_allowed`: the endpoint does not accept this HTTP method. The `Allow` header lists the methods it does accept. **`413 Content Too Large`**, the request exceeds a size limit. - `audio_too_long`: the request body is over the size limit. Audio only. - `image_too_large`: the request body or one image is over the size limit, or an image has more pixels than the endpoint accepts. Video only. **`415 Unsupported Media Type`**, the media is in a format the endpoint does not accept. - `unsupported_media_type`: the audio is in a format the server recognizes but does not accept, such as MP3 or FLAC, or an image is not a JPEG. File endpoints only. **`500 Internal Server Error`** - `internal_error`: the server failed while serving the request. Retry it; if it keeps failing, contact support, quoting the `request_id`. **`503 Service Unavailable`** - `server_busy`: the service is too busy to serve the request now. Retry it after the number of seconds in the `Retry-After` header.
  - Allowed values: `message_invalid`, `config_invalid`, `audio_decode_failed`, `image_decode_failed`, `invalid_request`, `forbidden`, `not_found`, `method_not_allowed`, `audio_too_long`, `image_too_large`, `unsupported_media_type`, `internal_error`, `server_busy`
- `message` (string, required) — What went wrong, for a person. Its wording may change; switch on `code`.
- `request_id` (string, required) — Identifies the request in Hume's records. Quote it when contacting support.

### 415 Unsupported Media Type Error

The media is in a format the endpoint does not accept.

- `type` (enum, required)
  - Allowed values: `error`
- `code` (enum, required) — Identifies what went wrong. The HTTP status carried with it says how the request failed. Some of these names are also error codes of the realtime API, where they name the same kind of problem. **`400 Bad Request`**, something in the request needs correcting. - `message_invalid`: the multipart body could not be read, is missing its `file` part, or carries a part with another name. Audio takes exactly one `file` part; video takes one or more. File endpoints only. - `config_invalid`: the `config` part is not valid JSON, names a field the endpoint does not recognize, holds a value outside its range, or appears more than once. File endpoints only. - `audio_decode_failed`: the audio could not be decoded: a WAV file that is truncated or malformed, or at another sample rate, channel count or sample format, or with the extensible WAV header, or a file that is empty or is not a whole number of 16-bit samples. Audio only. - `image_decode_failed`: an image could not be decoded. Video only. - `invalid_request`: a query parameter has a value the endpoint does not accept, or `cursor` is not one the endpoint issued. Run endpoints only. **`403 Forbidden`** - `forbidden`: your organization is not permitted to use this endpoint. Contact support. File endpoints only. **`404 Not Found`** - `not_found`: no run with this ID exists in your organization, or no endpoint exists at this path. **`405 Method Not Allowed`** - `method_not_allowed`: the endpoint does not accept this HTTP method. The `Allow` header lists the methods it does accept. **`413 Content Too Large`**, the request exceeds a size limit. - `audio_too_long`: the request body is over the size limit. Audio only. - `image_too_large`: the request body or one image is over the size limit, or an image has more pixels than the endpoint accepts. Video only. **`415 Unsupported Media Type`**, the media is in a format the endpoint does not accept. - `unsupported_media_type`: the audio is in a format the server recognizes but does not accept, such as MP3 or FLAC, or an image is not a JPEG. File endpoints only. **`500 Internal Server Error`** - `internal_error`: the server failed while serving the request. Retry it; if it keeps failing, contact support, quoting the `request_id`. **`503 Service Unavailable`** - `server_busy`: the service is too busy to serve the request now. Retry it after the number of seconds in the `Retry-After` header.
  - Allowed values: `message_invalid`, `config_invalid`, `audio_decode_failed`, `image_decode_failed`, `invalid_request`, `forbidden`, `not_found`, `method_not_allowed`, `audio_too_long`, `image_too_large`, `unsupported_media_type`, `internal_error`, `server_busy`
- `message` (string, required) — What went wrong, for a person. Its wording may change; switch on `code`.
- `request_id` (string, required) — Identifies the request in Hume's records. Quote it when contacting support.

### 500 Internal Server Error

The server failed while serving the request. Retry it; if it keeps failing, contact support, quoting the `request_id`.

- `type` (enum, required)
  - Allowed values: `error`
- `code` (enum, required) — Identifies what went wrong. The HTTP status carried with it says how the request failed. Some of these names are also error codes of the realtime API, where they name the same kind of problem. **`400 Bad Request`**, something in the request needs correcting. - `message_invalid`: the multipart body could not be read, is missing its `file` part, or carries a part with another name. Audio takes exactly one `file` part; video takes one or more. File endpoints only. - `config_invalid`: the `config` part is not valid JSON, names a field the endpoint does not recognize, holds a value outside its range, or appears more than once. File endpoints only. - `audio_decode_failed`: the audio could not be decoded: a WAV file that is truncated or malformed, or at another sample rate, channel count or sample format, or with the extensible WAV header, or a file that is empty or is not a whole number of 16-bit samples. Audio only. - `image_decode_failed`: an image could not be decoded. Video only. - `invalid_request`: a query parameter has a value the endpoint does not accept, or `cursor` is not one the endpoint issued. Run endpoints only. **`403 Forbidden`** - `forbidden`: your organization is not permitted to use this endpoint. Contact support. File endpoints only. **`404 Not Found`** - `not_found`: no run with this ID exists in your organization, or no endpoint exists at this path. **`405 Method Not Allowed`** - `method_not_allowed`: the endpoint does not accept this HTTP method. The `Allow` header lists the methods it does accept. **`413 Content Too Large`**, the request exceeds a size limit. - `audio_too_long`: the request body is over the size limit. Audio only. - `image_too_large`: the request body or one image is over the size limit, or an image has more pixels than the endpoint accepts. Video only. **`415 Unsupported Media Type`**, the media is in a format the endpoint does not accept. - `unsupported_media_type`: the audio is in a format the server recognizes but does not accept, such as MP3 or FLAC, or an image is not a JPEG. File endpoints only. **`500 Internal Server Error`** - `internal_error`: the server failed while serving the request. Retry it; if it keeps failing, contact support, quoting the `request_id`. **`503 Service Unavailable`** - `server_busy`: the service is too busy to serve the request now. Retry it after the number of seconds in the `Retry-After` header.
  - Allowed values: `message_invalid`, `config_invalid`, `audio_decode_failed`, `image_decode_failed`, `invalid_request`, `forbidden`, `not_found`, `method_not_allowed`, `audio_too_long`, `image_too_large`, `unsupported_media_type`, `internal_error`, `server_busy`
- `message` (string, required) — What went wrong, for a person. Its wording may change; switch on `code`.
- `request_id` (string, required) — Identifies the request in Hume's records. Quote it when contacting support.

### 503 Service Unavailable Error

The service is too busy to serve the request now. Retry it after the number of seconds in the `Retry-After` header.

- `type` (enum, required)
  - Allowed values: `error`
- `code` (enum, required) — Identifies what went wrong. The HTTP status carried with it says how the request failed. Some of these names are also error codes of the realtime API, where they name the same kind of problem. **`400 Bad Request`**, something in the request needs correcting. - `message_invalid`: the multipart body could not be read, is missing its `file` part, or carries a part with another name. Audio takes exactly one `file` part; video takes one or more. File endpoints only. - `config_invalid`: the `config` part is not valid JSON, names a field the endpoint does not recognize, holds a value outside its range, or appears more than once. File endpoints only. - `audio_decode_failed`: the audio could not be decoded: a WAV file that is truncated or malformed, or at another sample rate, channel count or sample format, or with the extensible WAV header, or a file that is empty or is not a whole number of 16-bit samples. Audio only. - `image_decode_failed`: an image could not be decoded. Video only. - `invalid_request`: a query parameter has a value the endpoint does not accept, or `cursor` is not one the endpoint issued. Run endpoints only. **`403 Forbidden`** - `forbidden`: your organization is not permitted to use this endpoint. Contact support. File endpoints only. **`404 Not Found`** - `not_found`: no run with this ID exists in your organization, or no endpoint exists at this path. **`405 Method Not Allowed`** - `method_not_allowed`: the endpoint does not accept this HTTP method. The `Allow` header lists the methods it does accept. **`413 Content Too Large`**, the request exceeds a size limit. - `audio_too_long`: the request body is over the size limit. Audio only. - `image_too_large`: the request body or one image is over the size limit, or an image has more pixels than the endpoint accepts. Video only. **`415 Unsupported Media Type`**, the media is in a format the endpoint does not accept. - `unsupported_media_type`: the audio is in a format the server recognizes but does not accept, such as MP3 or FLAC, or an image is not a JPEG. File endpoints only. **`500 Internal Server Error`** - `internal_error`: the server failed while serving the request. Retry it; if it keeps failing, contact support, quoting the `request_id`. **`503 Service Unavailable`** - `server_busy`: the service is too busy to serve the request now. Retry it after the number of seconds in the `Retry-After` header.
  - Allowed values: `message_invalid`, `config_invalid`, `audio_decode_failed`, `image_decode_failed`, `invalid_request`, `forbidden`, `not_found`, `method_not_allowed`, `audio_too_long`, `image_too_large`, `unsupported_media_type`, `internal_error`, `server_busy`
- `message` (string, required) — What went wrong, for a person. Its wording may change; switch on `code`.
- `request_id` (string, required) — Identifies the request in Hume's records. Quote it when contacting support.

## Types

### VideoFileResponseReceived

What the server took from the request.

- `frames` (integer, required) — The number of images measured.

### VideoFileMeasurement

Expression measurements for every face in one image. `faces` is empty when no face was detected; this is a normal result, not an error.

- `frame_id` (integer, required) — Identifies the image within the run, counting from 0. A file request numbers its images by the order of the `file` parts; a realtime session numbers only the frames it answered with a measurement.
- `faces` (list of Face, required) — The faces detected in the image: the measured faces first, largest first, then the faces that were not measured, in descending order of confidence.

### Face

A face detected in the image, with its expression measurements if it was measured. Only the largest faces in an image are measured; the others carry their bounding box and detection confidence, with `face_id`, `expressions` and `descriptions` null.

- `face_id` (integer, required, nullable) — Tracks this face across the images of a realtime session or a file request. IDs are assigned from 0 in the order faces are first measured, largest first within an image. A face normally keeps its ID while it is measured, and can get it back after it leaves the view or is no longer among the largest faces. The server remembers up to 32 faces, so a face that returns after many others have been measured may receive a new ID. IDs restart in every session and every file request, unless a file request continues them with a `face_state`, and do not identify a person. Null for a face that was not measured.
- `bbox` (list of double, required) — The location of the face in the submitted image, as `[x0, y0, x1, y1]`: the top-left and bottom-right corners in pixels, with the origin at the top-left of the image. Coordinates are in the pixels as stored in the file: EXIF orientation is not applied.
- `confidence` (double, required) — Confidence that the bounding box contains a face. Always at or above the configured `threshold`. Unrelated to the expression scores.
- `expressions` (list of VideoExpressionScore, required, nullable) — Expressions detected on the face, such as `amusement`, `interest` and `surprise (positive)`, in descending order of probability, then by name. Only scores above 0.1 are included, so the array may be empty. `probability` is the chance a human rater would name the expression for this face, independently for each expression. Null for a face that was not measured.
- `descriptions` (list of VideoDescriptionScore, required, nullable) — Visible facial actions, such as `smile`, `jaw drop` and `wide-eyed`, in descending order of probability, then by name. Only scores above 0.1 are included, so the array may be empty. Null for a face that was not measured.

### VideoExpressionScore

A scored expression detected on the face.

- `name` (string, required) — The name of an expression that can be detected on a face, from a vocabulary that differs from that of audio expressions; see the [full list of video expressions](/expression-measurement/docs/video/measurements#expressions). Names are lowercase and may contain spaces and punctuation. New names may be added over time; treat a name you do not recognize as a new prediction.
- `probability` (double, required) — The probability that this expression is present, rounded to four decimal places.

### VideoDescriptionScore

A scored facial action.

- `name` (string, required) — The name of a visible facial action; see the [full list of video descriptions](/expression-measurement/docs/video/measurements#descriptions). Names are lowercase and may contain spaces and punctuation. New names may be added over time; treat a name you do not recognize as a new prediction.
- `probability` (double, required) — The probability that this action is present, rounded to four decimal places.

## Examples

**Request**

```json
{
  "file": [
    "<file: string>"
  ]
}
```

**Response**

```json
{
  "request_id": "8b27e4d1c05f4a93b6e0d7a2c91f3e58",
  "run_id": "01926f3e-397d-7ceb-9f52-a864c0102a44",
  "received": {
    "frames": 2
  },
  "measurements": [
    {
      "frame_id": 0,
      "faces": [
        {
          "face_id": 0,
          "bbox": [
            412.5,
            118,
            604.25,
            371.75
          ],
          "confidence": 0.96875,
          "expressions": [
            {
              "name": "amusement",
              "probability": 0.6231
            },
            {
              "name": "joy",
              "probability": 0.4418
            },
            {
              "name": "interest",
              "probability": 0.1907
            }
          ],
          "descriptions": [
            {
              "name": "smile",
              "probability": 0.8125
            },
            {
              "name": "wide-eyed",
              "probability": 0.1342
            }
          ]
        },
        {
          "face_id": 1,
          "bbox": [
            98,
            140.25,
            251.5,
            348.75
          ],
          "confidence": 0.9375,
          "expressions": [
            {
              "name": "concentration",
              "probability": 0.5108
            },
            {
              "name": "interest",
              "probability": 0.2764
            },
            {
              "name": "surprise (positive)",
              "probability": 0.112
            }
          ],
          "descriptions": [
            {
              "name": "jaw drop",
              "probability": 0.2266
            }
          ]
        }
      ]
    },
    {
      "frame_id": 1,
      "faces": [
        {
          "face_id": 0,
          "bbox": [
            420.75,
            121.5,
            611,
            374.25
          ],
          "confidence": 0.953125,
          "expressions": [
            {
              "name": "amusement",
              "probability": 0.5742
            },
            {
              "name": "joy",
              "probability": 0.4016
            },
            {
              "name": "contentment",
              "probability": 0.1583
            }
          ],
          "descriptions": [
            {
              "name": "smile",
              "probability": 0.7695
            }
          ]
        }
      ]
    }
  ],
  "face_state": "v1.2_XEB211kAMJpBSMDuGCPUKXkSbxtXb4mcW7qv9QjP6M8MHyNwMy_8LpaZa2nlfR-_N3VAKmLxIABsVQ4iPiGFqlvA0c1vtlbm96FwAnhRCCy2vsOtNWQ9d64Ubg-bxhnPsklQCK79iNftoBj3KdgKp3mJnyoAXttY4viO3rlxa3E_ftYvqhSuJRIRyfYEDiQHur7T2JsfEKu28ZkfNEo-o5uNulsncOYiBPbR-J-IwcB8kMn-icIhw_gHIWFVXT92XMcJ2gQpkjJmRH1Xjz0sQ9PhlaQE-o5H26ijMdIayfZbSs-Q1vrYYA552KRI_G5rlhCer-2opqR5gnaIEa3KzsSjEaoG3i9xYKV0MgjryTJVqyMyIRpgTUH2Yin9ZKJNeSAbFd9QBDMwXKTZDDRgYida50uGo4fEi_6PrV3pOrGuR1ZVLN7_7x_WbVz1QuwEhS316IUwBno09dgcbJW3FG2fxpmhEAL2PyLdZWI7H4O0u0gYX6WdiAqnD5jiwGSV9zVlzX1gga5SKXiST3fJI687So2E3LVOqypRmwyai7C4F44Cgg5XsmURzxVjrrK7JrcLwHLGpufwjKAnH0xXEgTq3lKBQl1sAYEc94OrtN9VPkcpCAOVvDx64bcWRuraUO9g4Mcw8d6ePP8_pYHxZvacLj-C_JiLjcyJRDcrPNhMaO1PaMsK9douzaax35EZ3jWJugSINOAEjNqScyeorq43pbKgCVlZig9pjzp1LKHNqCL0ZF0QUoXuOHexNoEsCcuhvADP19r6fVtmwqF3iXBVlriNpvZC9UfNSKWqMER4B_Hp7RIMslqXlplDTVtQV2umLTb7axkdulgph86lMkyVMxFVCIhf1u5iGTnO40fz6d_LNTjRYQsYvMxTDsFbNIlgCjrpYB2NUfn4iAjfTnfAOCIdJyI1XIBNV4C3ffoufZbf767oPnUs9IEkCcMwYHJsT81ZkfrOvUoVNuwmscMijHr_a-HxZ9GqhyaRg6Sm8lfaY7ZrXoMhzKkp1DFaVB0WNswgRlSQRilqimHBcRS6N_KBZu6uhL0YZj3FT3di1x_9J2Vs5o4vPrmsQO-zkjg5KgzoZGbn58zQ37RCavt_tv9BfPqoN-FGSzNvmejXzKJa1ZfofzmrtEQAaU4opteKqHqRdzaouZWvWerlsxHj6KLMaz__YtUWPhfqw8o3rdGgeOlMbUZuL9jk_jBJDF_kyDEvy3_0yFhbm8Qd4fc4JT-fn4hojQ7uj6a0okQ1F62ms7VwByOSRNWXxPjmacsTqNqUVVbYG99Bwa1N4R7Rdo7aVFXSron1dnP3aLCRaeatoUSktK_BA3zCDmuNLR70AOvVcvW3OOiytJGMrBV8wDi4tnC2dlPcQQNev1xTMNQ1msvMPutUsE8PNo6of8FtHp9pFiwYLPwgI_JhfA5JukLXkXIDejYQkc4FNLT18F5Xfbqo6NdpppveyFcSMw2uIHBOd5_Cpcz6pPJozd4efdNNVAwXL4qUeFWZIv7O7j1zpYt1INiqeqtjebtdKY20pkCWzRNCzn0gOsS_i2jbFce_gZgADVh0_QJoiq4VgHCMv8QfV9V2kUdgi53xU3CLbtZlKX84Q6Xk4Sx2Rw7qjjfOxie36xR6Bf7z-EXmeoCYWfg2aviaib-OYbGj_Ajypc9LzE0J0kFwImf546yNmQ9L0dEU-dMljb08A6xj9D-O_5uhVLlGZ5izDZYYiZDUvaypPeMhj0kUtTlcRSve3zYqkHD9SuUUQA3hioXjQ1pxEkhgCxiqD1TEjk98Z73dcmjp6Ar-Sc1ciB0pBm3IGSy3V4uExRYkFAwSDfxl9jYEwmdKHMoGHbRcw4gEa5spFQc49xyL4WJTV51pmWY3UO5lmlIF9CWsvhqJWt5VsvDZ1Xliwbo1PYNA5Q8PXu7yG6zKtcvBFjMTHMqK8ViUerD8p0NQgsGRkafssPJEg68rc2KzRKk3zoC-Vw8QhbNkgPKJ2Z8NpzOSJVqKMCVV9a-VOiV2g3OeRcDQwDBw2jGUIaQyeaY67zS1958y9KZg6lEqrEKQ184AwvaoKoXXDl6jXnahooLpg_m-vH8EKbFQ35G1JYkxNc9Dv09kdCJdKyMT5iWXpJ2puiwOXT7RUXeM7uRBO_MjhkMGCeiKdUgxkDmqAq20Xsph7Suatw7L8v0VSY0i4zYioMLLq9Prgph0INF96thKulDmk0A482ppJCUU4pO0FNFo_QuOxw-AMNs4Lllr6fRKlePiPcCSTHslQd7AV8prGDVTobmbl-BnXmLa9O2McmBa8Cf6kgYk6bN0NyTLXaNozYGXLAp_La2ZFYBoueWOBcr-9TeoL6h2E2Yly4MzhjgAU169cxXIar6niXxqaeo2MVDmOxDyCPf2rBM9DA8e4rikXllpnscplwvVaxo3cNzuoz0ILmN3MaUFs_y329Z3C5BNNcby6Os6J_RoTyWlbcB3zrPF-lZcogweODTYlC_iMF_a7ArFtK6--FnJqD5smA0fjYqpBingLPvm5_2YO2wDE8lcGKVdufBcSRjXKn48tvgzwlWLjhhIzuTMAm4SL7F8IjAlZGDZTqoVJP-rRVvqGBb2M8Da1QDZ-uSIkVhqD6ZrkxgajuL5ZsbkfNVtoiEM9ZMmhmHyZUBTjrp-BznR4hkM5wwxNw6zZxO9bWBTYcDrBsuK27q7JhK5RY1QGbgrcMpW9yB2fm5UXx-a1RxjThfArrwZmypTtnNzArCEBLjYCmiXXle5WTA-wfv3OceGPiDA-l2SZCUsMjP0rps1bx5xWQH9LYLVwARcab8JmxQIHrjglOuBOe4MwZU-lSeb6jIj7Lc7_Qt1W0PmVJ21dgXbNBUrPujk385OhVSj1GT-Sb11PTTRchrJo7c1kTnAy--a9L_wTg_-8p1c0KJdFMvs5p7QTwxOwH2T93dBG8iaeXubJu07BesYdmosIWE0l94cIxZRPbdzW2EtmK5hbcQchDB6qcnPtXVTFNCKUkWbLmbQi_dbyM9AbwGfW7jgI9cvKR-LPyV7sypHwapDHX_qR2w5MfAXBPPX6-aDS2ak2efUpmDWGkZDTsaGtPnRn1ZwUrSwTAmoveAMoBWgYgV5Mtl666-UwUdOawrHVE8ANuIui9gDe_rKcC60E21PqMpczjQNevtTOE_pypW4aaJcfWxzrKO8oEWih942ClIzCgLPd8G4QBZth43gWW8bPJ2S_woMHpcOMTsEFvC4kTIHjTS3JE-F-kdXCT2AOjBi5LZMhFGjAzIDqmBPiX5pM7OZTCSxLjnQ7em-sYWsdRa8gObBamKqCZRJvkQQf2kqoU3re8ewg8HzgcyOTw7LtAQOSgnEaWRFnIqCQ2lwmbiB2i8s5OGX9W-sZKO3NA-JfNXnKS23E6Or63Dy5PnqyMgVq1HcWCzVdG3q162CVUniTa306OtT_5RdgKtjSaRekuztg-7wXJ832yWwuphcjCPzxLOjTvAZcd5lbACu2vW9OxZa9bz2IIAGXBhfOo6uiOehBzMJKYGy3FdjX8MU3QV9bkCUj1HMceYkeLOvRcocFeuYh-hW7qjsaPsErmDijeUp8pmuhlHPd4gQwEO8dKy9Lb39ZlWXYc-bink-JqrikiA2lOC7f-ODCDt4OmKobOxvBRhBnEFkOEEDuMEoHNPFFgYmGcQwHcGQqeAdrG29CCTk1SoIm-WVWpRgXmOCg6rwR-2OOWDcstVgwjBwag6qV0bpkkBp8OKkhf0t9cMy3DmemMj-MItTq06nuyRUxmCAFvFPgNWUf4LcciblSIB9CsT1u25eEg_21ifFrg_leXXvef-OHuFNiG8Z6VzfrRb2-bR1EK0yZqUTRcpUOv2NxV2zRUNgXVMfnsBJSdQ2gIPd9xXMHVzPYdXDrzHvWZioIOAiHp3fLbwE9nNH5sNX4JeV2XxX6fCykWj2QnYIPBqkkrZ2_DAxQWj7-0IxRSFaMhbXXRSw3ys-Ih6RRZK1JpFPd0OYFPncnrmHm_gHAaduw3bOG7N758sVI_2pEloNxXap2EsgvnNYdM7mTOutkVaDVSGfKQIEF37clsuhlxgrT9TL3E4duP0JYuQ1Lql-Bw2fU3g9vG7_Hp_Wj-P5igQnXChRTJVc9dqfmDhOUlf57GZtPPQx37QsbrB-dwrbg_5WbjSqXgEIdesP__R9y1vS4HNto9fWdgwk8fFfjzqJh1DakdMQEnyTYHY9uJfVZiK_wgOixVMRtGxm9rJ3J-dOREMw-W-CBca57Lbd1dbR9nBxUR71sbLvjdytSZwp9W8yauVojBBFJ2msspeKhfLBujOg9u6fHOUmdxU5s3MV7swK2UYppaxgiJQuX1RF1AqSniUxmjjWeRVuDlnODBlc9Qoj1-XUxCzN65GqQc_VT9XrWyB0DUvIFB3Hsi-XdBQGSTiu481g7vINL-ZV9wp6sBnSDvkaOCdEX8QIO5P5blCbJiWOmtR3OInuf114KnWXQF2VYW_MA9Kbwzn832CwHz54Z63_XC1J0TdkVzfBzRYVM3Ve0a8i5e4FZYuSYjdfhwXG2kuMMyoCngiJwZln_QxuHtvTFjI_2lo9GoKE0_9yUQsk-BicRY2WQGqnZwvZ8HsBM690RV45v7ApQdiH_VRuXzXc6h5O9jM1-GZB4HnwMjcRMXH3U8z8d8z0wZW2PO6DWunduUS_smny0TMsFUN7P8Hs04GJz9ZQTndaqn_pnVBUF1p4_WEA7X6vrpMW5w9RFvZYaWWDpY5Eziuy3HD8ojnAb_VLwCuGM2YRE72L1iOAXP0H472NF-DxlF_6vLAwHpqWDd_l_HTw0lgE-DUPu1v8CNpdez1srinLeH8Yg8PLBGMcMct94fD_elcMOui_ylvLWHrR6OwFeS57ztalBnv2MzGbA1np5mtGxLquJV31ylo1k6gcvsIm7BzMGbcaGeWKbT5w9YepU10Hm_qw4pACOK2gFFPOG6fQdpxYNH656UTWqBMM_PnksJwOBkZJ5q_C_X_e4O3V-CpKfmbBSVMWaAlK2hBXiNWgmP6C5osPii9aCp_kVwipDMed7C5LLKkipZvG0zeVxPEKA_ibiV6MfLffZi_4wZlZGRMNwjqiNU7NLHRdfrUnl1Rj2G_U92zkpd8RXFTC2Bv_KPfH68DK_PA9PMgAPH7S6Sdgr36ppP9gtj-PQyKjiYkfX-JQjnAZko1xc-feWPoxWoGGeDwlxXn2--8uCzPBHJAVKQvYxfmuKGvgqD7fHASrj6_Chb7cI9tAkWNhTCZ8UsWORUILR0tTkiqCYbH_4iMYFROL1eD-XFGmtKO-2UP-wC0_eM9Sq4iN_sTWXizsWA1u7rZxYJBnlrD6AhD0cowwNwAhn9ZcdThAyl0v4rFuLuw9tkuFpz1BWQyoJ79Iw0rSKbQ_fjhCDNcyq1irJa-D9FEj57Oo0FUOr18fvycHzeAxNthJuW6wAnozd_vwq0-NXRY8sDH1_POjjljjqEwv5G9nUd1RaPfZMi9Bw5jPyt3O-Oc44cVB8jPNz3xEQWggsSNw99adM4kgbTdZg-3pNQF2LeMCuhHxob7ZYU1sJ1cYgW"
}
```