# Image Quality Assessment (`marielise.dev/image-quality-assessment`) Actor

Analyze image quality with local Sharp.js processing - no API key required. Evaluates sharpness, exposure, noise, and contrast to return pass/fail verdict with detailed quality scores. Perfect for e-commerce product photos, UGC validation, and photo library curation. $0.01 per image analyzed.

- **URL**: https://apify.com/marielise.dev/image-quality-assessment.md
- **Developed by:** [Marielise](https://apify.com/marielise.dev) (community)
- **Categories:** AI, Developer tools, SEO tools
- **Stats:** 9 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Image Quality Assessment

Automatically analyze image quality by detecting blur, exposure problems, noise, and contrast issues. This Actor processes images locally using Sharp.js for fast, privacy-friendly quality scoring without requiring any external API keys. Perfect for automating image quality control workflows at scale.

**Pricing: $0.01 per image analyzed (Pay Per Event)**

### Features

- **Blur Detection**: Identifies out-of-focus or motion-blurred images using Laplacian variance analysis
- **Exposure Analysis**: Detects underexposed (too dark) and overexposed (too bright) images
- **Noise Detection**: Measures image noise levels using high-frequency analysis
- **Contrast Evaluation**: Assesses dynamic range and tonal distribution
- **Configurable Thresholds**: Customize sensitivity for each quality metric
- **Fast Processing**: Analyzes images in seconds with no external API calls
- **Privacy-Friendly**: All processing happens locally on Apify infrastructure
- **Multiple Input Formats**: Supports URL input or base64-encoded image data

### How It Works

The Actor uses computer vision algorithms powered by Sharp.js to analyze four key quality metrics:

1. **Sharpness Score**: Uses Laplacian edge detection to measure image clarity. Higher variance indicates sharper images.
2. **Exposure Score**: Analyzes luminance distribution. Optimal exposure centers around 50% brightness.
3. **Noise Score**: Applies high-pass filtering to isolate and measure noise artifacts.
4. **Contrast Score**: Evaluates standard deviation of luminance values to assess dynamic range.

Each metric produces a score from 0 to 1, where higher values indicate better quality. The overall score is the average of all four metrics.

### Getting Started

#### Basic Usage

Simply provide an image URL to analyze:

```json
{
  "imageUrl": "https://example.com/photo.jpg"
}
````

The Actor will return quality scores and identify any issues found.

#### Using Base64 Input

For images not accessible via public URL, use base64-encoded data:

```json
{
  "imageBase64": "/9j/4AAQSkZJRgABAQEASABIAAD/..."
}
```

Data URI format is also supported:

```json
{
  "imageBase64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/..."
}
```

#### Custom Quality Thresholds

Adjust sensitivity by providing custom thresholds. Lower values are more permissive:

```json
{
  "imageUrl": "https://example.com/photo.jpg",
  "config": {
    "sharpness": 0.5,
    "exposure": 0.3,
    "noise": 0.4,
    "contrast": 0.25
  }
}
```

Set any threshold to `0` to skip that check entirely:

```json
{
  "imageUrl": "https://example.com/photo.jpg",
  "config": {
    "sharpness": 0.3,
    "exposure": 0,
    "noise": 0.3,
    "contrast": 0
  }
}
```

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `imageUrl` | string | One of | - | Publicly accessible HTTP/HTTPS URL of the image |
| `imageBase64` | string | One of | - | Base64-encoded image data (raw or data URI format) |
| `config` | object | No | See below | Quality threshold configuration |

#### Configuration Options

| Threshold | Default | Range | Description |
|-----------|---------|-------|-------------|
| `sharpness` | 0.3 | 0-1 | Minimum sharpness score. Images below this are flagged as "blurry" |
| `exposure` | 0.2 | 0-1 | Minimum exposure score. Images below this are flagged as "underexposed" or "overexposed" |
| `noise` | 0.3 | 0-1 | Minimum noise quality score. Images below this are flagged as "noisy" |
| `contrast` | 0.2 | 0-1 | Minimum contrast score. Images below this are flagged as "low\_contrast" |

### Output Format

#### Successful Analysis

```json
{
  "pass": true,
  "score": 0.72,
  "issues": [],
  "scores": {
    "sharpness": 0.85,
    "exposure": 0.92,
    "noise": 0.65,
    "contrast": 0.48
  },
  "configApplied": {
    "sharpness": 0.3,
    "exposure": 0.2,
    "noise": 0.3,
    "contrast": 0.2
  },
  "imageUrl": "https://example.com/photo.jpg",
  "processedAt": "2024-01-15T10:30:00.000Z"
}
```

#### Failed Quality Check

```json
{
  "pass": false,
  "score": 0.35,
  "issues": ["blurry", "noisy"],
  "scores": {
    "sharpness": 0.15,
    "exposure": 0.78,
    "noise": 0.22,
    "contrast": 0.45
  },
  "configApplied": {
    "sharpness": 0.3,
    "exposure": 0.2,
    "noise": 0.3,
    "contrast": 0.2
  },
  "imageUrl": "https://example.com/blurry-photo.jpg",
  "processedAt": "2024-01-15T10:31:00.000Z"
}
```

#### Output Fields

| Field | Type | Description |
|-------|------|-------------|
| `pass` | boolean | `true` if all metrics meet their thresholds, `false` otherwise |
| `score` | number | Overall quality score (0-1), calculated as average of all metrics |
| `issues` | array | List of detected quality issues |
| `scores` | object | Individual scores for each quality metric (0-1) |
| `scores.sharpness` | number | Sharpness/blur score (0=blurry, 1=sharp) |
| `scores.exposure` | number | Exposure score (0=under/overexposed, 1=well-exposed) |
| `scores.noise` | number | Noise quality score (0=noisy, 1=clean) |
| `scores.contrast` | number | Contrast score (0=flat, 1=good dynamic range) |
| `configApplied` | object | The threshold configuration used for analysis |
| `imageUrl` | string | The analyzed image URL (if URL input was used) |
| `processedAt` | string | ISO 8601 timestamp of when analysis completed |
| `demoMode` | boolean | `true` if Actor ran with no input (demo mode) |

#### Possible Issues

The `issues` array can contain any combination of:

| Issue | Description |
|-------|-------------|
| `blurry` | Image sharpness is below the threshold |
| `underexposed` | Image is too dark |
| `overexposed` | Image is too bright |
| `noisy` | Image has excessive noise/grain |
| `low_contrast` | Image lacks tonal range |

### Use Cases

#### E-Commerce Product Images

Automatically validate product photos before publishing to ensure consistent quality across your catalog. Reject blurry or poorly lit images that could hurt conversion rates.

#### User-Generated Content Moderation

Filter low-quality uploads in real-time. Set strict thresholds for professional platforms or relaxed thresholds for casual sharing.

#### Photo Library Curation

Bulk analyze thousands of photos to identify and remove duplicates or low-quality images. Perfect for photographers and media companies.

#### Print Production Quality Gates

Ensure images meet minimum quality standards before sending to print. Prevent costly reprints due to blurry or noisy source files.

#### Automated Workflow Integration

Integrate with Apify webhooks or API to build automated image processing pipelines. Combine with other Actors for complete content workflows.

#### AI Training Data Preparation

Filter image datasets to ensure training data meets quality standards. Remove blurry, noisy, or poorly exposed images that could degrade model performance.

### Technical Specifications

#### Supported Formats

- JPEG / JPG
- PNG
- GIF (first frame)
- BMP
- WebP
- TIFF

#### Limits

- Maximum file size: 20MB per image
- Minimum dimensions: No strict minimum, but very small images may produce unreliable scores
- Processing time: Typically 1-3 seconds per image

#### Memory Requirements

- Minimum: 256MB
- Recommended: 512MB for large images
- Maximum: 4096MB

### Pricing

This Actor uses Pay Per Event (PPE) pricing:

- **$0.01 per image analyzed**
- Only charged for successful analyses
- Failed analyses (invalid URL, corrupted image) are not charged
- Demo mode runs are not charged

### Error Handling

The Actor handles errors gracefully:

- **Invalid URL**: Returns error message without crashing
- **Unreachable URL**: Returns clear error about fetch failure
- **Invalid base64**: Returns validation error message
- **Corrupted image**: Returns processing error details

All errors are logged and returned in the dataset for debugging.

### Integration Examples

#### Apify API

```bash
curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~image-quality-assessment/runs" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{"imageUrl": "https://example.com/photo.jpg"}'
```

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('YOUR_USERNAME/image-quality-assessment').call({
    imageUrl: 'https://example.com/photo.jpg',
    config: { sharpness: 0.4 }
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run_input = {
    "imageUrl": "https://example.com/photo.jpg",
    "config": {"sharpness": 0.4}
}

run = client.actor("YOUR_USERNAME/image-quality-assessment").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

### FAQ

**Q: Can I analyze multiple images in one run?**
A: Currently, each run analyzes one image. For batch processing, use Apify's task scheduling or call the Actor multiple times via the API.

**Q: Why is my image showing as "blurry" when it looks sharp to me?**
A: The default threshold of 0.3 is moderately strict. Try lowering the `sharpness` threshold to 0.2 or 0.15 for more lenient detection.

**Q: Does this Actor support animated GIFs?**
A: Yes, but only the first frame is analyzed. For full animation quality assessment, consider extracting frames separately.

**Q: How accurate is the quality detection?**
A: The algorithms are based on established computer vision techniques and perform well for typical photographic images. Results may vary for specialized content like medical imaging or satellite photos.

**Q: Can I use this with private/authenticated images?**
A: Yes, use the `imageBase64` input to provide the image data directly instead of a URL.

### Support

If you encounter issues or have questions:

1. Check the error messages in the run logs
2. Verify your image URL is publicly accessible
3. Ensure your base64 data is properly encoded
4. Review the FAQ section above

For bug reports or feature requests, please contact the developer through Apify.

# Actor input Schema

## `imageUrl` (type: `string`):

URL of the image to analyze. Must be a publicly accessible HTTP or HTTPS URL. Supports JPEG, PNG, GIF, BMP, WebP, and TIFF formats up to 20MB.

## `imageBase64` (type: `string`):

Base64-encoded image data. Use this for images not accessible via URL. Accepts raw base64 or data URI format (e.g., data:image/jpeg;base64,...). Provide either imageUrl or imageBase64, not both.

## `config` (type: `object`):

Override default quality thresholds. Values range from 0 to 1 where lower values are more permissive. Set any threshold to 0 to skip that particular check entirely.

## Actor input object example

```json
{
  "imageUrl": "https://example.com/photo.jpg",
  "config": {
    "sharpness": 0.3,
    "exposure": 0.2,
    "noise": 0.3,
    "contrast": 0.2
  }
}
```

# Actor output Schema

## `qualityResults` (type: `string`):

Dataset containing quality assessment results with boolean pass verdict, overall score (0-1), individual scores for sharpness/exposure/noise/contrast, array of detected issues (blurry/underexposed/overexposed/noisy/low\_contrast), applied thresholds, image URL, and processing timestamp

## `keyValueStore` (type: `string`):

Actor run key-value store for accessing run metadata

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "imageUrl": "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=800",
    "config": {
        "sharpness": 0.3,
        "exposure": 0.2,
        "noise": 0.3,
        "contrast": 0.2
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("marielise.dev/image-quality-assessment").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "imageUrl": "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=800",
    "config": {
        "sharpness": 0.3,
        "exposure": 0.2,
        "noise": 0.3,
        "contrast": 0.2,
    },
}

# Run the Actor and wait for it to finish
run = client.actor("marielise.dev/image-quality-assessment").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "imageUrl": "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=800",
  "config": {
    "sharpness": 0.3,
    "exposure": 0.2,
    "noise": 0.3,
    "contrast": 0.2
  }
}' |
apify call marielise.dev/image-quality-assessment --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=marielise.dev/image-quality-assessment",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Image Quality Assessment",
        "description": "Analyze image quality with local Sharp.js processing - no API key required. Evaluates sharpness, exposure, noise, and contrast to return pass/fail verdict with detailed quality scores. Perfect for e-commerce product photos, UGC validation, and photo library curation. $0.01 per image analyzed.",
        "version": "0.0",
        "x-build-id": "2YGD1yFNoF5ZHljjF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/marielise.dev~image-quality-assessment/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-marielise.dev-image-quality-assessment",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/marielise.dev~image-quality-assessment/runs": {
            "post": {
                "operationId": "runs-sync-marielise.dev-image-quality-assessment",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/marielise.dev~image-quality-assessment/run-sync": {
            "post": {
                "operationId": "run-sync-marielise.dev-image-quality-assessment",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "imageUrl": {
                        "title": "Image URL",
                        "type": "string",
                        "description": "URL of the image to analyze. Must be a publicly accessible HTTP or HTTPS URL. Supports JPEG, PNG, GIF, BMP, WebP, and TIFF formats up to 20MB."
                    },
                    "imageBase64": {
                        "title": "Image Base64",
                        "type": "string",
                        "description": "Base64-encoded image data. Use this for images not accessible via URL. Accepts raw base64 or data URI format (e.g., data:image/jpeg;base64,...). Provide either imageUrl or imageBase64, not both."
                    },
                    "config": {
                        "title": "Quality Thresholds",
                        "type": "object",
                        "description": "Override default quality thresholds. Values range from 0 to 1 where lower values are more permissive. Set any threshold to 0 to skip that particular check entirely.",
                        "properties": {
                            "sharpness": {
                                "title": "Sharpness Threshold",
                                "type": "number",
                                "description": "Minimum sharpness score (0-1). Images scoring below this threshold are flagged as 'blurry'. Default: 0.3. Set to 0 to disable blur detection.",
                                "default": 0.3,
                                "minimum": 0,
                                "maximum": 1
                            },
                            "exposure": {
                                "title": "Exposure Threshold",
                                "type": "number",
                                "description": "Minimum exposure score (0-1). Images scoring below this threshold are flagged as 'underexposed' or 'overexposed'. Default: 0.2. Set to 0 to disable exposure detection.",
                                "default": 0.2,
                                "minimum": 0,
                                "maximum": 1
                            },
                            "noise": {
                                "title": "Noise Threshold",
                                "type": "number",
                                "description": "Minimum noise quality score (0-1). Images scoring below this threshold are flagged as 'noisy'. Default: 0.3. Set to 0 to disable noise detection.",
                                "default": 0.3,
                                "minimum": 0,
                                "maximum": 1
                            },
                            "contrast": {
                                "title": "Contrast Threshold",
                                "type": "number",
                                "description": "Minimum contrast score (0-1). Images scoring below this threshold are flagged as 'low_contrast'. Default: 0.2. Set to 0 to disable contrast detection.",
                                "default": 0.2,
                                "minimum": 0,
                                "maximum": 1
                            }
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
