# JSON Studio — Formatter, Validator & Transformer (`perryay/json-studio`) Actor

Enterprise-grade JSON formatting, validation, transformation, diffing, and schema inference. Handles pretty-printing, minification, JSON-to-YAML conversion, deep key extraction, and JSON Schema generation from sample data. Ideal for API debugging, data pipelines, and developer tooling.

- **URL**: https://apify.com/perryay/json-studio.md
- **Developed by:** [Perry AY](https://apify.com/perryay) (community)
- **Categories:** Developer tools, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / actor start

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## JSON Studio — Format, Validate, Diff, Transform, and Explore JSON Documents

### What does it do?

**JSON Studio** is an all-in-one enterprise JSON toolkit that lets you format, validate, minify, diff, infer schemas, flatten, extract with JSONPath, and convert JSON to YAML — all through a single actor. Whether you're debugging a malformed API response, comparing two config files, or generating a JSON Schema from sample data, JSON Studio handles the grunt work in one call. Eight operation modes mean you never need to install another JSON library or visit an online formatter again.

### Who is it for?

| Persona | What they use it for |
|---|---|
| Backend Developer | Formatting raw JSON logs, validating API payloads, and diffing config file changes across environments |
| Data Engineer | Flattening nested JSON for CSV export and inferring schemas from streaming data samples |
| QA Engineer | Minifying responses before storing in test fixtures and diffing expected versus actual outputs |
| API Integrator | Extracting specific values via JSONPath queries and converting JSON responses to YAML configs |
| DevOps Engineer | Comparing deployment configs across staging and production, and validating CloudFormation/Terraform JSON templates |
| Frontend Developer | Formatting API responses during development and converting mock data between JSON and YAML |
| Technical Writer | Generating JSON Schema documentation from sample API responses and formatting pretty-printed code samples |

### Why use this?

- **8 operation modes in one tool** — format, validate, minify, diff, schema inference, JSON-to-YAML, flatten, and JSONPath extract. No need to install separate libraries or visit half a dozen websites for different JSON tasks.
- **Batched input support** — process hundreds of JSON documents in a single run. Great for pipeline integration, ETL workflows, and bulk processing jobs where you'd otherwise loop over files.
- **Enterprise-grade diffing** — spot exactly what changed between two JSON structures with clear, structured output that distinguishes added, removed, changed, and unchanged keys. No more squinting at raw text diffs that don't understand JSON structure.
- **JSON Schema inference** — automatically generate a schema from sample data so you can validate future payloads, document your API contract, or generate type definitions for TypeScript and other languages.
- **Programmatic API built-in** — call it from cURL, Python, or any HTTP client. Drop it into your CI/CD pipeline, ETL job, deployment script, or monitoring workflow without any local dependencies.
- **Lightning fast for single documents** — individual format or validate operations return in milliseconds, making JSON Studio practical for real-time tooling and editor integrations.

### Input Parameters

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `mode` | string | yes | `format` | Operation mode. One of: `format`, `validate`, `minify`, `diff`, `infer-schema`, `to-yaml`, `flatten`, `jsonpath` |
| `input` | string or array | yes | — | The JSON document(s) to process. For `diff` mode, this is the first document. Accepts a single JSON string or an array of JSON strings for batch mode. |
| `indentSize` | integer | no | `2` | Number of spaces for indentation in `format` and `to-yaml` modes. Set to `4` for Python-style indentation or `2` for compact readability. |
| `sortKeys` | boolean | no | `false` | When `true`, sorts object keys alphabetically in `format` and `minify` modes. Useful for making consistent, diff-friendly output. |
| `input2` | string | no | — | The second JSON document for `diff` mode. Ignored in all other modes. Must be valid JSON. |
| `jsonpath` | string | no | — | JSONPath expression for `jsonpath` mode (e.g., `$.store.books[*].title`). Ignored in all other modes. Uses RFC 9535 standard syntax. |

### Example Input

```json
{
  "mode": "format",
  "input": "{\"name\":\"JSON Studio\",\"version\":2,\"features\":[\"format\",\"validate\",\"diff\",\"schema-inference\",\"to-yaml\",\"flatten\",\"jsonpath\",\"minify\"],\"active\":true}",
  "indentSize": 2,
  "sortKeys": true
}
````

#### Diff mode example

```json
{
  "mode": "diff",
  "input": "{\"name\":\"API v1\",\"endpoint\":\"/v1/users\",\"timeout\":30,\"retries\":0}",
  "input2": "{\"name\":\"API v2\",\"endpoint\":\"/v2/users\",\"timeout\":60,\"retries\":3,\"rateLimit\":100}"
}
```

#### Batch mode example

```json
{
  "mode": "validate",
  "input": [
    "{\"id\":1,\"name\":\"Alice\"}",
    "{\"id\":2,\"name\":\"Bob\"}",
    "{\"id\":3,\"name\":\"invalid"
  ]
}
```

### Output Structure

| Field | Type | Description |
|---|---|---|
| `mode` | string | The operation mode that was executed |
| `result` | string or object | The output of the operation. Type varies by mode (see below). |
| `success` | boolean | Whether the operation completed without errors |
| `error` | string | Present only if `success` is `false` — contains a descriptive error message |

#### Mode-specific result details

| Mode | result type | Description |
|---|---|---|
| `format` | string | Pretty-printed JSON with specified indentation and key sorting |
| `minify` | string | Compact JSON with no whitespace, stripped to the minimum valid representation |
| `validate` | object | `{ "valid": true/false, "errors": ["..."] }` — lists every validation failure |
| `diff` | object | `{ "added": {...}, "removed": {...}, "changed": {...}, "unchanged": {...} }` — structured diff |
| `infer-schema` | object | A JSON Schema (draft-07 compatible) inferred from the input data |
| `to-yaml` | string | YAML representation of the input JSON with configurable indentation |
| `flatten` | object | Flat key-value object with dot-notation keys (e.g., `"user.address.city"`) |
| `jsonpath` | array | Array of values matching the JSONPath expression, or empty array if no matches |

### Example Output

#### Format mode

```json
{
  "mode": "format",
  "result": "{\n  \"active\": true,\n  \"features\": [\n    \"diff\",\n    \"flatten\",\n    \"format\",\n    \"jsonpath\",\n    \"minify\",\n    \"schema-inference\",\n    \"to-yaml\",\n    \"validate\"\n  ],\n  \"name\": \"JSON Studio\",\n  \"version\": 2\n}",
  "success": true
}
```

#### Diff mode

```json
{
  "mode": "diff",
  "result": {
    "added": {
      "rateLimit": 100
    },
    "removed": {},
    "changed": {
      "name": { "from": "API v1", "to": "API v2" },
      "endpoint": { "from": "/v1/users", "to": "/v2/users" },
      "timeout": { "from": 30, "to": 60 },
      "retries": { "from": 0, "to": 3 }
    },
    "unchanged": {}
  },
  "success": true
}
```

#### Validate mode (with errors)

```json
{
  "mode": "validate",
  "result": {
    "valid": false,
    "errors": [
      "Input at index 2: Invalid JSON at position 24: Unterminated string"
    ]
  },
  "success": true
}
```

### API Usage

#### cURL

```bash
## Format a JSON document
curl -X POST "https://api.apify.com/v2/acts/perryay~json-studio/runs" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
    "mode": "format",
    "input": "{\"name\":\"JSON Studio\",\"version\":2}",
    "indentSize": 2,
    "sortKeys": true
  }'

## Diff two JSON documents
curl -X POST "https://api.apify.com/v2/acts/perryay~json-studio/runs" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
    "mode": "diff",
    "input": "{\"name\":\"old\",\"version\":1}",
    "input2": "{\"name\":\"new\",\"version\":2}"
  }'

## Infer a JSON Schema
curl -X POST "https://api.apify.com/v2/acts/perryay~json-studio/runs" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
    "mode": "infer-schema",
    "input": "{\"users\":[{\"id\":1,\"name\":\"Alice\",\"email\":\"alice@example.com\"}]}"
  }'

## Extract with JSONPath
curl -X POST "https://api.apify.com/v2/acts/perryay~json-studio/runs" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
    "mode": "jsonpath",
    "input": "{\"store\":{\"books\":[{\"title\":\"Book A\",\"price\":10},{\"title\":\"Book B\",\"price\":15}]}}",
    "jsonpath": "$.store.books[*].title"
  }'
```

#### Python

```python
import requests

API_TOKEN = "YOUR_API_TOKEN"
ACTOR_URL = "https://api.apify.com/v2/acts/perryay~json-studio/runs"

## Format and sort keys
response = requests.post(
    ACTOR_URL,
    headers={"Content-Type": "application/json",
             "Authorization": f"Bearer {API_TOKEN}"},
    json={
        "mode": "format",
        "input": '{"zebra":1,"apple":2,"banana":3}',
        "indentSize": 4,
        "sortKeys": True
    }
)
result = response.json()
print(result["result"])
## Output:
## {
##     "apple": 2,
##     "banana": 3,
##     "zebra": 1
## }

## Infer a JSON Schema from sample data
response = requests.post(
    ACTOR_URL,
    headers={"Content-Type": "application/json",
             "Authorization": f"Bearer {API_TOKEN}"},
    json={
        "mode": "infer-schema",
        "input": '{"users":[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]}'
    }
)
schema = response.json()["result"]
print(schema)
## {
##   "$schema": "http://json-schema.org/draft-07/schema#",
##   "type": "object",
##   "properties": {
##     "users": {
##       "type": "array",
##       "items": {
##         "type": "object",
##         "properties": {
##           "id": {"type": "integer"},
##           "name": {"type": "string"}
##         }
##       }
##     }
##   }
## }

## Batch validate multiple documents
response = requests.post(
    ACTOR_URL,
    headers={"Content-Type": "application/json",
             "Authorization": f"Bearer {API_TOKEN}"},
    json={
        "mode": "validate",
        "input": [
            '{"valid": true}',
            '{"valid": true}',
            '{"invalid": broken'
        ]
    }
)
results = response.json()["result"]
for idx, doc_result in enumerate(results if isinstance(results, list) else [results]):
    valid = "✅" if doc_result.get("valid") else "❌"
    print(f"Doc {idx}: {valid}")
```

### Use Cases

1. **CI/CD Config Validation** — Include a JSON Studio validation step in your pipeline pipeline to catch malformed deployment configs before they reach production. Reject builds with invalid JSON automatically. TeamCity, Jenkins, GitHub Actions, and GitLab CI can all call the API as part of a quality gate.

2. **API Response Debugging** — When an API returns garbled or minified JSON, pipe it through JSON Studio's format mode to get a clean, human-readable view in seconds. No more pasting into online formatters or writing one-liner Python scripts in the terminal.

3. **Schema Discovery from Legacy APIs** — Point JSON Studio at undocumented API responses in `infer-schema` mode to automatically generate a JSON Schema. Use it to write type-safe SDKs, generate TypeScript interfaces, or validate future responses against the inferred contract.

4. **Environment Config Comparison** — Use `diff` mode to compare staging versus production config files before a deployment. Spot missing keys, changed values, or unexpected additions. The structured diff output makes it easy to script approval workflows.

5. **JSON-to-YAML Migration** — Convert your application's JSON config files to YAML with `to-yaml` mode. Keep the same data, switch to a more human-friendly format for your ops team. Perfect for Docker Compose, Kubernetes, and Ansible config migration.

6. **Data Pipeline Flattening** — Flatten deeply nested JSON from an API or event stream into a flat key-value structure suitable for CSV export, database INSERT statements, or loading into spreadsheet tools. The dot-notation keys preserve the original hierarchy information.

7. **Test Fixture Minification** — Minify expected API responses before storing them as test fixtures. Smaller fixture files mean faster test suites and less noise in your version control diffs when fixtures change.

8. **JSONPath Data Extraction** — Use `jsonpath` mode to extract specific values from complex JSON documents without writing recursive descent code. Extract all email addresses, all IDs, or all prices with a single expression.

### FAQ

**Q: Can I process more than one JSON document in a single run?**
A: Yes. Pass an array of JSON strings in the `input` field and JSON Studio will process each one independently. In batch mode, the output includes results for every input document, making it easy to validate a set of files or format multiple responses at once.

**Q: What is the maximum input size?**
A: JSON Studio handles inputs up to several megabytes in size. For extremely large documents (100 MB+), consider splitting them into smaller batches for optimal performance and response times.

**Q: Does the diff mode work on deeply nested objects?**
A: Yes. The diff algorithm performs a deep comparison, detecting additions, removals, and changes at any nesting level. Nested objects that haven't changed are reported under `unchanged` so you can focus on what actually moved between versions.

**Q: What JSONPath syntax does the extract mode support?**
A: JSON Studio uses standard JSONPath expressions (RFC 9535 compatible). You can use bracket notation (`$['books'][0]`), dot notation (`$.books[0]`), wildcards (`$.*`), filters (`$[?(@.price > 10)]`), recursive descent (`$..title`), slice notation, and union selectors.

**Q: Can I minify and validate at the same time?**
A: Validation is always performed as part of every mode — if the input is not valid JSON, JSON Studio returns an error immediately regardless of the selected mode. To get only the validation result without a formatted output, use `mode: "validate"`.

**Q: Does JSON Schema inference handle arrays of mixed types?**
A: When an array contains elements of different types, the inferred schema uses `oneOf` or `anyOf` to represent each variant. For arrays with a single consistent type, it emits a clean `items` schema with that type.

**Q: How does the flatten mode handle duplicate keys from array elements?**
A: Array indices are used in the flattened key path (e.g., `users.0.name`, `users.1.name`), so there are no duplicate keys. Each value retains its full path from the root of the document.

**Q: Is there a way to preserve the original JSON structure when converting to YAML?**
A: Yes. The `to-yaml` mode preserves the full structure including nesting, arrays, and data types. Only the formatting and serialization change — no data is lost or transformed.

### Related Tools

- [Meta Mate](https://apify.com/perryay/meta-mate) — Extract Open Graph, Twitter Cards, and JSON-LD metadata from URLs
- [QR Craft](https://apify.com/perryay/qr-craft) — Generate high-quality QR codes in PNG or SVG format
- [UUID Lab](https://apify.com/perryay/uuid-lab) — Generate UUIDs, nanoids, short IDs, and ULIDs
- [Domain Intel](https://apify.com/perryay/domain-intel) — WHOIS lookups, DNS enumeration, and SSL certificate validation

### SEO Keywords

JSON formatter online, JSON validator, JSON diff tool, JSON Schema generator, JSON to YAML converter, JSONPath extractor, JSON flatten tool, JSON minifier, JSON comparison tool, batch JSON processing, JSON pretty print, JSON beautifier, JSON lint, JSON validation API, structured diff JSON, CI/CD JSON validation, JSON Schema inference

# Actor input Schema

## `mode` (type: `string`):

Operation mode

## `input` (type: `string`):

Primary JSON input (required for all modes)

## `inputB` (type: `string`):

Secondary JSON input (only used for diff mode)

## `indentSize` (type: `integer`):

Number of spaces for indentation

## `sortKeys` (type: `boolean`):

Sort object keys alphabetically in output

## `extractPath` (type: `string`):

JSONPath expression (e.g., $.store.books\[\*].title) — only used in extract mode

## Actor input object example

```json
{
  "mode": "format",
  "input": "{\n  \"name\": \"example\",\n  \"version\": 1\n}",
  "inputB": "{\n  \"name\": \"example\",\n  \"version\": 2\n}",
  "indentSize": 2,
  "sortKeys": false,
  "extractPath": "$"
}
```

# Actor output Schema

## `results` (type: `string`):

JSON processing results in the default dataset — one item per operation

# 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 = {
    "input": `{
  "name": "example",
  "version": 1
}`,
    "inputB": `{
  "name": "example",
  "version": 2
}`
};

// Run the Actor and wait for it to finish
const run = await client.actor("perryay/json-studio").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 = {
    "input": """{
  \"name\": \"example\",
  \"version\": 1
}""",
    "inputB": """{
  \"name\": \"example\",
  \"version\": 2
}""",
}

# Run the Actor and wait for it to finish
run = client.actor("perryay/json-studio").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 '{
  "input": "{\\n  \\"name\\": \\"example\\",\\n  \\"version\\": 1\\n}",
  "inputB": "{\\n  \\"name\\": \\"example\\",\\n  \\"version\\": 2\\n}"
}' |
apify call perryay/json-studio --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "JSON Studio — Formatter, Validator & Transformer",
        "description": "Enterprise-grade JSON formatting, validation, transformation, diffing, and schema inference. Handles pretty-printing, minification, JSON-to-YAML conversion, deep key extraction, and JSON Schema generation from sample data. Ideal for API debugging, data pipelines, and developer tooling.",
        "version": "1.0",
        "x-build-id": "2ypcTu5aWG3c7X2NN"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/perryay~json-studio/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-perryay-json-studio",
                "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/perryay~json-studio/runs": {
            "post": {
                "operationId": "runs-sync-perryay-json-studio",
                "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/perryay~json-studio/run-sync": {
            "post": {
                "operationId": "run-sync-perryay-json-studio",
                "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",
                "required": [
                    "input"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "format",
                            "validate",
                            "minify",
                            "transform",
                            "diff",
                            "schema",
                            "flatten",
                            "extract"
                        ],
                        "type": "string",
                        "description": "Operation mode",
                        "default": "format"
                    },
                    "input": {
                        "title": "JSON Input A",
                        "type": "string",
                        "description": "Primary JSON input (required for all modes)"
                    },
                    "inputB": {
                        "title": "JSON Input B",
                        "type": "string",
                        "description": "Secondary JSON input (only used for diff mode)"
                    },
                    "indentSize": {
                        "title": "Indent Size",
                        "minimum": 0,
                        "maximum": 8,
                        "type": "integer",
                        "description": "Number of spaces for indentation",
                        "default": 2
                    },
                    "sortKeys": {
                        "title": "Sort Keys Alphabetically",
                        "type": "boolean",
                        "description": "Sort object keys alphabetically in output",
                        "default": false
                    },
                    "extractPath": {
                        "title": "Extract JSONPath",
                        "type": "string",
                        "description": "JSONPath expression (e.g., $.store.books[*].title) — only used in extract mode",
                        "default": "$"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
