# MLC Rights Resolver: ISRC to ISWC, Writers, Publisher Shares (`yungstentech/mlc-works-resolver`) Actor

Resolve a list of ISRCs or MLC song codes into the writers, publishers, and ownership shares The MLC has on file, with an opt-in catalog-exposure report that flags unmatched or no-share tracks.

- **URL**: https://apify.com/yungstentech/mlc-works-resolver.md
- **Developed by:** [Paul Mikulskis](https://apify.com/yungstentech) (community)
- **Categories:** Automation, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $12.00 / catalog exposure report

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

**MLC Rights Resolver** turns a list of **ISRCs or MLC song codes** into the **writers, publishers, and ownership shares** The MLC has on file for each underlying composition, and flags the tracks that come back with no match or no share data. It reads the public [MLC Public Search API](https://www.themlc.com/) through a licensed seat, returns one flat JSON row per input keyed on the identifier you submitted, and can also produce one summary **catalog-exposure report**. Every row carries the attribution string `Source: The MLC`.

Running on the Apify platform gives you API access, scheduling, and integrations (Zapier, Make, Google Sheets), plus a dataset you can export as JSON, CSV, Excel, or HTML.

### What does MLC Rights Resolver do?

For each identifier you submit it:

1. Detects whether the value is an ISRC or an MLC song code.
2. For an ISRC, searches recordings, collects the distinct MLC song codes those recordings point to, fetches the works, and selects the **primary composition** (not a remix or alternate). For a song code, it fetches that work directly.
3. Returns the canonical work title, ISWC, MLC song code, all writers with their roles, and all publishers with their roles and collection shares.

**ISWC is an output field, not an input.** The MLC public API has no ISWC lookup path, so an ISWC you submit comes back as a free `unsupported` row. Submit ISRCs or MLC song codes.

#### Why use it

- Replace the manual "export a CSV and VLOOKUP against a catalog sheet" loop. The output is a flat join keyed on your input identifier.
- Find exposure. The `not-found` and `resolved-no-shares` rows are the tracks worth a manual review with The MLC or your administrator.
- Use it from an agent. The metered per-lookup path makes this consumable by rights-research pipelines that cannot sign an enterprise data contract, and the actor is callable through Apify's MCP server.

### How to use MLC Rights Resolver

1. Open the **Input** tab.
2. Paste your ISRCs or MLC song codes into **Identifiers**, or provide a **CSV URL**.
3. Optionally turn on **Include catalog-exposure report** to also receive the summary artifact.
4. Click **Start**. Results appear in the dataset; the run summary lands in the key-value store under `OUTPUT`, and the report (when requested) under `REPORT`.

### Input

| Field | Type | Notes |
|---|---|---|
| `identifiers` | array | ISRCs or MLC song codes. A string is auto-detected; an object `{"isrc": "...", "title": "...", "artist": "..."}` bypasses detection and feeds the fuzzy fallback. |
| `csvUrl` | string | An `https://` CSV. Identifier column is the first header matching `isrc` / `songCode` / `identifier` / `id`, else column 1. Optional `title` / `artist` columns feed the fuzzy fallback. |
| `includeExposureReport` | boolean | Produce the summary report. Fires the premium event once, only when the full list was processed. |
| `enableFuzzyFallback` | boolean | For not-found ISRCs carrying a title, try a title/artist search (capped at 2 extra calls). |
| `includeRawWork` | boolean | Attach the raw MLC work JSON under `rawWork`. |
| `pacingMs` | integer | Delay between MLC calls, clamped to 1500-15000 ms. Default 6000 ms. |
| `maxItems` | integer | Upper limit on identifiers processed (max 2000). It is a ceiling, not a promise the whole list finishes in one run: a single run also stops at its platform timeout (see Tips). Overflow is reported, never dropped. |

Example input:

```json
{
    "identifiers": ["USUG12001402", "GBAHS1700227", "USUM71915699"],
    "includeExposureReport": false
}
````

### Output

One dataset row per input. A resolved row for `USUG12001402` (The Weeknd, "Blinding Lights") looks like this (abridged):

```json
{
    "input": "USUG12001402",
    "inputType": "isrc",
    "status": "resolved-with-shares",
    "matchMethod": "direct",
    "workTitle": "BLINDING LIGHTS",
    "iswc": "T9297449117",
    "mlcSongCode": "BA7H8C",
    "writers": [
        { "firstName": "AHMAD", "lastName": "BALSHE", "ipi": "00443089947", "role": "ComposerLyricist" },
        { "firstName": "ABEL", "lastName": "TESFAYE", "ipi": "00574514146", "role": "ComposerLyricist" }
    ],
    "publishers": [
        { "name": "UNIVERSAL MUSIC WORKS", "role": "OriginalPublisher", "collectionShare": 1.38, "split": null, "administrators": [] },
        { "name": "UNIVERSAL MUSIC CORP.", "role": "OriginalPublisher", "collectionShare": 2.5, "split": null, "administrators": [] }
    ],
    "totalCollectionShare": 99.99,
    "matchedRecordings": [
        { "isrc": "USUG12001402", "title": "BLINDING LIGHTS", "artist": "THE WEEKND", "labels": "REPUBLIC RECORDS" }
    ],
    "alternateWorks": [
        { "workTitle": "BLINDING LIGHTS (MAJOR LAZER REMIX)", "mlcSongCode": "BA7N1S", "iswc": "T9330148260", "writerCount": 8, "publisherCount": 10 }
    ],
    "queryUsed": "isrc=USUG12001402",
    "error": null,
    "charged": true,
    "chargeEvent": "work-resolved",
    "attribution": "Source: The MLC"
}
```

This example also shows why primary-work selection matters: `USUG12001402` maps to two works, and the Major Lazer remix is listed first upstream. The resolver returns the canonical "BLINDING LIGHTS" work and files the remix under `alternateWorks`. You can download the dataset in JSON, CSV, Excel, or HTML.

#### Statuses

| Status | Meaning | Charge event |
|---|---|---|
| `resolved-with-shares` | Primary work matched, at least one publisher carries a collection share | `work-resolved` |
| `resolved-no-shares` | Work matched, but The MLC has no share data on file (a "check this" flag) | `work-resolved-no-shares` |
| `not-found` | Searches ran, nothing matched (the normalized query is returned) | `lookup-unresolved` |
| `unsupported` | ISWC input, which has no MLC lookup path | free |
| `invalid-input` | Unrecognized identifier format, nothing was queried | free |
| `error` | Upstream failure after retries, or a schema change | free |

#### Data fields

| Field | Description |
|---|---|
| `input` | The identifier you submitted, verbatim (the join key). |
| `inputType` | `isrc`, `songCode`, `iswc`, or `unknown`. |
| `status` | One of the statuses above. |
| `matchMethod` | `direct`, `fuzzy-title`, or `null`. |
| `workTitle`, `iswc`, `mlcSongCode` | The matched composition's identity. |
| `writers` | Writer first/last name, IPI, and role. |
| `publishers` | Publisher name, role, collection share, and any administrator chain. |
| `totalCollectionShare` | Sum of top-level publisher collection shares, or `null`. |
| `matchedRecordings` | Recordings that matched the ISRC (up to 5). |
| `alternateWorks` | Other works the identifier mapped to, as identity summaries. |
| `queryUsed` | The normalized upstream query, so you can see what was searched. |
| `charged`, `chargeEvent` | Whether the row billed, and which event. |
| `attribution` | `Source: The MLC` on every row. |

The `OUTPUT` key-value record summarizes the run (counts by status, charged total, pacing, and anything not processed and why). When `includeExposureReport` is on and the full list is processed, `REPORT` holds the summary: totals by status, the exposure rate, and the flagged identifiers to investigate. The report flags rows to investigate; it does not compute a dollar recovery figure.

### Demo dataset and catalog-exposure report

The full multi-input demo is free to inspect, no run required. It was generated locally against the live MLC API (non-billing, `Source: The MLC` on every row) from 3 identifiers: 2 real ISRCs and 1 that is not on file with The MLC.

- **Dataset** (3 rows): https://api.apify.com/v2/datasets/QGvFHuMa6po0W2ISf/items?format=json — `USUG12001402` (The Weeknd, "Blinding Lights") and `GBAHS1700227` (Ed Sheeran, "Shape of You") both resolve with full writer and publisher share data; `USUM71999999` comes back `not-found`.
- **Catalog-exposure report**: https://api.apify.com/v2/key-value-stores/RoeZnYgYyEEynoZIW/records/REPORT — the same summary artifact a buyer gets from `includeExposureReport: true`. Over these 3 identifiers: 2 resolved with shares, 0 resolved without shares, 1 not-found, a 33% exposure rate, and the flagged identifier listed by input. Generating your own report over your own list is the paid `catalog-exposure-report` event ($15, see Pricing); reading this sample one is free.

The dataset and report above are real output from the shipped resolver, not mocked. A single-lookup example from an earlier live platform run (`USUG12001402` only, no report) is still up at https://api.apify.com/v2/datasets/phZI56MlbflKeXSJn/items?format=json if you want the smallest possible worked example.

#### Related actors

- [Spotify Catalog Resolver](https://apify.com/yungstentech/spotify-catalog-resolver) resolves ISRCs, UPCs, ISWCs, or free-text queries to Spotify catalog metadata (artist, album, cover art, popularity). Use it for catalog/metadata lookups; this actor is the rights layer, not a metadata mirror.

### Pricing

This Actor uses pay-per-event pricing. You pay per outcome, not per compute unit:

| Event | Price | Fires |
|---|---|---|
| `catalog-exposure-report` | $15.00 | Once per run, opt-in, only when the full list was processed |
| `work-resolved` | $0.03 | Per row resolved with shares |
| `work-resolved-no-shares` | $0.01 | Per row resolved without share data |
| `lookup-unresolved` | $0.005 | Per row that came back not-found |

Free rows (`unsupported`, `invalid-input`, `error`) never charge. Discounted tiers are available (SILVER: $13.50 / $0.027 / $0.009 / $0.0045; GOLD: $12.00 / $0.024 / $0.008 / $0.004). A 100-ISRC list resolving mostly with shares costs about $3 in per-lookup events, or add $15 for the exposure report.

### Tips and limitations

- **Pacing and runtime.** Calls are paced to respect a shared paid seat. At the default 6000 ms, 100 ISRCs takes about 21 minutes, so a single run at the default 1-hour timeout resolves roughly 200-280 ISRCs. `maxItems` is a ceiling, not a completion promise: for larger lists, raise the run timeout (Run options, Timeout) or split the work across runs. When a run would otherwise hit the timeout, it stops without charging for an unfinished lookup, leaves that identifier and the rest unprocessed and uncharged, withholds the report, and records what happened in `OUTPUT.note`. If two runs are active at once, each paces at half speed and resolves fewer per hour; the OUTPUT record reports `runsSharingSeat`.
- **Coverage.** Results reflect what The MLC has on file. A `not-found` means no MLC match, not that no composition exists.
- **Fuzzy fallback is best-effort.** It only runs for not-found ISRCs that carry a title, is capped at two extra calls, and is flagged with `matchMethod: "fuzzy-title"`.
- **No ISWC input path.** Submit ISRCs or MLC song codes.
- **Agents and MCP.** Every field is documented and stable, so an agent can consume rows directly, and the actor is callable through Apify's MCP server. The per-lookup events make single-track lookups cheap.

### FAQ and support

**Is this legal?** The data is public under the Music Modernization Act (17 U.S.C. 115). This Actor reads the MLC Public Search API through a licensed seat and attributes every row to `Source: The MLC`.

**Why did a track come back `not-found`?** Either The MLC has nothing on that ISRC, or the recording is registered under a different identifier. Try the fuzzy fallback with a title, or submit the MLC song code directly.

**Why `resolved-no-shares`?** The work exists but The MLC has no or partial share data on file. These rows are the ones worth a manual follow-up.

For issues or a custom variant, use the Issues tab.

# Actor input Schema

## `identifiers` (type: `array`):

A list of ISRCs or MLC song codes to resolve. Each item is either a string (auto-detected as an ISRC or MLC song code) or an object like {"isrc": "...", "title": "...", "artist": "..."} where explicit keys bypass detection and title/artist feed the optional fuzzy fallback. ISWC is an OUTPUT field only: the MLC public API has no ISWC lookup path, so ISWC inputs return a free "unsupported" row.

## `csvUrl` (type: `string`):

An https:// URL to a CSV. The identifier column is the first header matching isrc / songCode / identifier / id (case-insensitive), otherwise column 1. Optional title and artist columns feed the fuzzy fallback. A file with a single identifier per line and no header also works.

## `includeExposureReport` (type: `boolean`):

When true, produce one summary REPORT flagging the tracks worth investigating (not-found and no-shares-on-file). Fires the premium catalog-exposure-report charge once, only when the full list was processed and the budget can carry it.

## `enableFuzzyFallback` (type: `boolean`):

For not-found ISRCs that also carry title (and optionally artist) metadata, attempt a best-effort title/artist search (hard cap of 2 extra MLC calls per item). Matches are flagged with matchMethod "fuzzy-title".

## `includeRawWork` (type: `boolean`):

Attach the raw MLC work object under rawWork on each resolved row (useful for agents that want every field).

## `pacingMs` (type: `integer`):

Delay between MLC API calls to respect the shared paid seat. Clamped to 1500-15000 ms in code. Default 6000 ms means roughly 12.5 s per ISRC, so 100 ISRCs takes about 21 minutes. Values below the default raise the chance of upstream rate limiting; the actor backs off and slows itself when that happens.

## `maxItems` (type: `integer`):

Upper limit on how many (deduplicated) identifiers to process this run. This is a ceiling, not a promise the whole list finishes: a run also stops at its platform timeout. At the default 6000 ms pacing a single 1-hour run resolves roughly 200-280 ISRCs, so for larger lists raise the run timeout or split across runs. When the timeout is near, the run stops cleanly without charging for an unfinished lookup and leaves the rest unprocessed and uncharged (see OUTPUT.note). Overflow past this cap is reported in OUTPUT, never silently dropped.

## Actor input object example

```json
{
  "identifiers": [
    "USUG12001402",
    "GBAHS1700227",
    "USUM71915699"
  ],
  "includeExposureReport": false,
  "enableFuzzyFallback": false,
  "includeRawWork": false,
  "pacingMs": 6000,
  "maxItems": 500
}
```

# Actor output Schema

## `resolvedWorks` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

## `exposureReport` (type: `string`):

No description

# 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 = {
    "identifiers": [
        "USUG12001402",
        "GBAHS1700227",
        "USUM71915699"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("yungstentech/mlc-works-resolver").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 = { "identifiers": [
        "USUG12001402",
        "GBAHS1700227",
        "USUM71915699",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("yungstentech/mlc-works-resolver").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 '{
  "identifiers": [
    "USUG12001402",
    "GBAHS1700227",
    "USUM71915699"
  ]
}' |
apify call yungstentech/mlc-works-resolver --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "MLC Rights Resolver: ISRC to ISWC, Writers, Publisher Shares",
        "description": "Resolve a list of ISRCs or MLC song codes into the writers, publishers, and ownership shares The MLC has on file, with an opt-in catalog-exposure report that flags unmatched or no-share tracks.",
        "version": "0.0",
        "x-build-id": "pv48hz8nckdVqnRt8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/yungstentech~mlc-works-resolver/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-yungstentech-mlc-works-resolver",
                "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/yungstentech~mlc-works-resolver/runs": {
            "post": {
                "operationId": "runs-sync-yungstentech-mlc-works-resolver",
                "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/yungstentech~mlc-works-resolver/run-sync": {
            "post": {
                "operationId": "run-sync-yungstentech-mlc-works-resolver",
                "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": {
                    "identifiers": {
                        "title": "Identifiers (ISRCs or MLC song codes)",
                        "type": "array",
                        "description": "A list of ISRCs or MLC song codes to resolve. Each item is either a string (auto-detected as an ISRC or MLC song code) or an object like {\"isrc\": \"...\", \"title\": \"...\", \"artist\": \"...\"} where explicit keys bypass detection and title/artist feed the optional fuzzy fallback. ISWC is an OUTPUT field only: the MLC public API has no ISWC lookup path, so ISWC inputs return a free \"unsupported\" row."
                    },
                    "csvUrl": {
                        "title": "CSV URL (alternative to the list above)",
                        "type": "string",
                        "description": "An https:// URL to a CSV. The identifier column is the first header matching isrc / songCode / identifier / id (case-insensitive), otherwise column 1. Optional title and artist columns feed the fuzzy fallback. A file with a single identifier per line and no header also works."
                    },
                    "includeExposureReport": {
                        "title": "Include catalog-exposure report",
                        "type": "boolean",
                        "description": "When true, produce one summary REPORT flagging the tracks worth investigating (not-found and no-shares-on-file). Fires the premium catalog-exposure-report charge once, only when the full list was processed and the budget can carry it.",
                        "default": false
                    },
                    "enableFuzzyFallback": {
                        "title": "Enable fuzzy title/artist fallback",
                        "type": "boolean",
                        "description": "For not-found ISRCs that also carry title (and optionally artist) metadata, attempt a best-effort title/artist search (hard cap of 2 extra MLC calls per item). Matches are flagged with matchMethod \"fuzzy-title\".",
                        "default": false
                    },
                    "includeRawWork": {
                        "title": "Include raw MLC work JSON",
                        "type": "boolean",
                        "description": "Attach the raw MLC work object under rawWork on each resolved row (useful for agents that want every field).",
                        "default": false
                    },
                    "pacingMs": {
                        "title": "Pacing between MLC calls (ms)",
                        "minimum": 1500,
                        "maximum": 15000,
                        "type": "integer",
                        "description": "Delay between MLC API calls to respect the shared paid seat. Clamped to 1500-15000 ms in code. Default 6000 ms means roughly 12.5 s per ISRC, so 100 ISRCs takes about 21 minutes. Values below the default raise the chance of upstream rate limiting; the actor backs off and slows itself when that happens.",
                        "default": 6000
                    },
                    "maxItems": {
                        "title": "Max identifiers to process",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Upper limit on how many (deduplicated) identifiers to process this run. This is a ceiling, not a promise the whole list finishes: a run also stops at its platform timeout. At the default 6000 ms pacing a single 1-hour run resolves roughly 200-280 ISRCs, so for larger lists raise the run timeout or split across runs. When the timeout is near, the run stops cleanly without charging for an unfinished lookup and leaves the rest unprocessed and uncharged (see OUTPUT.note). Overflow past this cap is reported in OUTPUT, never silently dropped.",
                        "default": 500
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
