# SEC Form 4 Transactions – Evidence & Amendments API (`bb-tradetec/sec-form4-transaction-normalizer`) Actor

Normalize official SEC Form 4 and 4/A Ownership XML into source-linked Table I/II transaction rows with stable IDs, reporting owners, codes, footnotes, Rule 10b5-1 fields, conservative amendment links, and stateless cursors.

- **URL**: https://apify.com/bb-tradetec/sec-form4-transaction-normalizer.md
- **Developed by:** [BB](https://apify.com/bb-tradetec) (community)
- **Categories:** Developer tools, News, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 normalized form 4 transactions

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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

## SEC Form 4 Transactions – Evidence & Amendments API

Turn official SEC EDGAR Form 4 and 4/A Ownership XML into one machine-readable
row per reported Table I or Table II transaction. Query an issuer, an exact
reporting-owner CIK, or an exact accession. Results preserve raw SEC codes,
acquired/disposed direction, owners, derivative terms, component footnote
references, explicit Rule 10b5-1 fields, direct source links, stable IDs, and
conservative amendment relationships.

The Actor reads public SEC resources directly. It does not use an aggregator,
browser automation, an LLM, a persistent filing database, or a fuzzy person
resolver.

### Agent selection contract

Select this Actor for:

- normalized Form 4/4-A transactions for an issuer;
- filings for a reporting person when the exact CIK is known;
- exact Form 4 accession validation with a separate issuer CIK;
- Table I common-stock transactions and Table II options, RSUs, warrants, or
  convertible securities;
- raw transaction codes, acquired/disposed values, ownership following a
  transaction, footnotes, Rule 10b5-1 provenance, or amendment links;
- repeatable polling with a client-carried cursor and stable record IDs.

Do not select it for insider sentiment, alpha/materiality/conviction scores,
Form 3/5, 13D/G, 13F, prices, portfolio valuation, unrestricted market-wide
feeds, fuzzy owner-name search, legal conclusions, or trade execution.

One successful default-dataset row equals one reported transaction and one
pay-per-event result unit. Holdings-only rows, `SUMMARY`, `ERRORS`, and
duplicate matches do not create dataset rows.

### Minimal issuer query

```json
{
  "queries": [
    {
      "requestId": "apple-insiders",
      "scope": "issuer",
      "identifierType": "ticker",
      "identifier": "AAPL"
    }
  ],
  "maxFilingsPerQuery": 5,
  "maxTransactions": 20
}
````

### Exact reporting owner

```json
{
  "queries": [
    {
      "requestId": "owner-1780525",
      "scope": "reportingOwner",
      "identifierType": "cik",
      "identifier": "1780525"
    }
  ],
  "filedFrom": "2026-01-01"
}
```

Owner names are not accepted as search identifiers. Joint filings keep the
complete `reportingOwners` array and use `ownerAttribution: "joint_filing"`;
the Actor does not assign a shared filing row to one person without XML proof.

### Exact accession

```json
{
  "queries": [
    {
      "requestId": "apple-form4",
      "scope": "accessionNumber",
      "identifierType": "accessionNumber",
      "identifier": "0001140361-26-025622",
      "issuerCik": "320193"
    }
  ]
}
```

`issuerCik` is mandatory because the accession-prefix CIK can belong to a
filing agent or reporting owner. The filing index and Ownership XML must both
confirm the issuer, form, identities, and raw XML document.

### Input bounds

| Field | Default | Bound / meaning |
|---|---:|---|
| `queries` | required | 1–20, unique `requestId` |
| `filedFrom`, `filedTo` | omitted | inclusive ISO dates |
| `transactionCodes` | `[]` | max 32 unique raw one-letter codes; empty = all |
| `acquiredDisposed` | `[]` | `A`, `D`; empty = both |
| `includeDerivatives` | `true` | include Table II |
| `includeFootnotes` | `true` | include bounded text; IDs/refs remain when false |
| `includeAmendments` | `true` | include 4/A as new source records |
| `evidenceMaxChars` | `1200` | 240–2,000 per footnote/evidence excerpt |
| `maxFilingsPerQuery` | `50` | 1–100 |
| `maxTransactions` | `100` | 1–100 global unique rows/result units |
| `outputMode` | `full` | `full`, `compact`; compact removes long text only |
| `incremental` | omitted | opaque cursor ≤32 KB; unavailable for direct accessions |

Runtime limits also cap raw Ownership XML at 2 MB per filing, 30 MB and 100
filing downloads per run, 50 footnotes, and 20 reporting owners per filing.

### Transaction semantics

`transactionCode` is the original SEC code. The versioned
`transactionCodeDescription` is a lookup label, never investment direction.
`acquiredDisposedCode` remains independent. An `F` with `D` stays a tax- or
exercise-related disposition; an `M` is not rewritten into synthetic buy/sell
events.

All reported numeric values are decimal strings. `transactionValue` exists
only when amount and the row's reported price are numeric. Its rule is
`amount-times-reported-price-v1`; it is not a claimed cash flow or market value
for grants, gifts, or derivative transactions.

`rule10b5One.reported` is `true` or `false` only when the structured filing says
so; otherwise it is `null`. Footnotes or remarks mentioning the plan can add
bounded evidence but never manufacture the structured flag.

### Amendments and stability

A 4/A row receives its own accession-derived `recordId`; it never overwrites an
original dataset row. The Actor sets `supersedesRecordId` only when original
submission date, issuer, complete owner group, table, security, transaction
date, raw code, and footnote context identify exactly one original candidate.
Otherwise `amendmentLinkStatus` is `not_found` or `ambiguous` with a warning.
The output is source-accurate history, not a consolidated current position.

`recordId = secf4_<24 hex>` depends on accession, table, canonical XML row
index, and parser-ID version. Query order, retrieval time, and source URL aliases
do not affect it. Duplicate query matches merge sorted `requestIds`.

### Stateless polling

Set `incremental: {"overlapHours": 24}` on the first run. Copy
`SUMMARY.nextCursor` unchanged into the next input. The cursor is client-held,
scope-bound, versioned, and can resume inside a filing when `maxTransactions`
is reached. The Actor stores no watchlist or cursor database.

### Outputs and partial errors

- Default dataset: successful, chargeable transaction rows only.
- `SUMMARY`: free counts, limits, warnings, status, and optional cursor.
- `ERRORS`: free bounded query/filing/document failures.

A failing query or filing does not discard successful batch parts. Invalid
top-level input, a bad cursor, or a global SEC source failure before normal
processing fails the run. Exact error and warning enums are documented in
[`docs/product/interface.md`](./docs/product/interface.md).

### Sources, storage, and disclaimer

Sources are the official SEC ticker catalog, submissions JSON, filing detail
pages, and raw Ownership XML under `www.sec.gov/Archives/edgar/data`. Requests
use an identified User-Agent, at most eight requests per second, bounded retry,
30-second timeout, same-host/path redirect checks, and streaming byte limits.
Redirects fail closed before any target request because the supported official
resources do not require them.

There is no publisher-side persistent cache or database. The Actor writes only
customer-visible Apify run storages. Public filing data can contain filer
errors; verify consequential decisions against the linked source.

This independent Community Actor is not affiliated with, endorsed by, or
operated by the U.S. Securities and Exchange Commission. Output is normalized
public disclosure data, not financial, investment, tax, or legal advice.

### Pricing status

The intended model is `$0.00005` per run plus `$0.002` per unique transaction
dataset row, with a 100-row maximum (`$0.2005` at the planned rates). This is a
local release candidate and those prices are not configured or published yet.
Always check the live Pricing tab after an actual release.

# Actor input Schema

## `queries` (type: `array`):

Every requestId is returned on matching rows. Do not put secrets, email addresses, or personal free text in requestId.

## `filedFrom` (type: `string`):

Inclusive YYYY-MM-DD lower bound.

## `filedTo` (type: `string`):

Inclusive YYYY-MM-DD upper bound.

## `transactionCodes` (type: `array`):

Exact raw one-letter SEC codes. Empty means all codes; codes are not converted into buy/sell signals.

## `acquiredDisposed` (type: `array`):

A and D remain independent from transaction-code descriptions. Empty means both.

## `includeDerivatives` (type: `boolean`):

When false, emit only Table I nonderivative transaction rows.

## `includeFootnotes` (type: `boolean`):

Footnote IDs and component references remain even when text is omitted.

## `includeAmendments` (type: `boolean`):

Include amendments as independent source records with conservative original links.

## `evidenceMaxChars` (type: `integer`):

Hard per-footnote and Rule 10b5-1 evidence text bound.

## `maxFilingsPerQuery` (type: `integer`):

Hard bound on matching filing metadata processed for each query.

## `maxTransactions` (type: `integer`):

Hard global default-dataset and pay-per-event result bound.

## `outputSchemaVersion` (type: `string`):

Published output contract; version 1.0 is currently supported.

## `outputMode` (type: `string`):

compact removes bounded footnote text, not IDs or component references.

## `incremental` (type: `object`):

Copy SUMMARY.nextCursor unchanged into the next run. Not compatible with direct accession queries.

## Actor input object example

```json
{
  "queries": [
    {
      "requestId": "apple-insiders",
      "scope": "issuer",
      "identifierType": "ticker",
      "identifier": "AAPL"
    }
  ],
  "transactionCodes": [],
  "acquiredDisposed": [],
  "includeDerivatives": true,
  "includeFootnotes": true,
  "includeAmendments": true,
  "evidenceMaxChars": 1200,
  "maxFilingsPerQuery": 50,
  "maxTransactions": 100,
  "outputSchemaVersion": "1.0",
  "outputMode": "full"
}
```

# Actor output Schema

## `transactions` (type: `string`):

Default dataset. Each row is one unique Table I or Table II transaction and one pay-per-event result. Holdings-only rows are excluded.

## `summary` (type: `string`):

Non-chargeable SUMMARY record with counts, limits, warnings, and optional stateless cursor.

## `errors` (type: `string`):

Non-chargeable ERRORS record. Successful query and filing parts remain in the dataset.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("bb-tradetec/sec-form4-transaction-normalizer").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("bb-tradetec/sec-form4-transaction-normalizer").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 '{}' |
apify call bb-tradetec/sec-form4-transaction-normalizer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=bb-tradetec/sec-form4-transaction-normalizer",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "SEC Form 4 Transactions – Evidence & Amendments API",
        "description": "Normalize official SEC Form 4 and 4/A Ownership XML into source-linked Table I/II transaction rows with stable IDs, reporting owners, codes, footnotes, Rule 10b5-1 fields, conservative amendment links, and stateless cursors.",
        "version": "0.1",
        "x-build-id": "Jspgps6VGxhjqh7Jt"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/bb-tradetec~sec-form4-transaction-normalizer/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-bb-tradetec-sec-form4-transaction-normalizer",
                "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/bb-tradetec~sec-form4-transaction-normalizer/runs": {
            "post": {
                "operationId": "runs-sync-bb-tradetec-sec-form4-transaction-normalizer",
                "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/bb-tradetec~sec-form4-transaction-normalizer/run-sync": {
            "post": {
                "operationId": "run-sync-bb-tradetec-sec-form4-transaction-normalizer",
                "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": [
                    "queries"
                ],
                "properties": {
                    "queries": {
                        "title": "Issuer, owner, or accession queries",
                        "minItems": 1,
                        "maxItems": 20,
                        "type": "array",
                        "description": "Every requestId is returned on matching rows. Do not put secrets, email addresses, or personal free text in requestId.",
                        "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                                "requestId",
                                "scope",
                                "identifierType",
                                "identifier"
                            ],
                            "properties": {
                                "requestId": {
                                    "title": "Request ID",
                                    "description": "Caller-defined stable correlation ID returned on every matching transaction.",
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 128,
                                    "pattern": "^[A-Za-z0-9._:-]+$"
                                },
                                "scope": {
                                    "title": "Query scope",
                                    "description": "Resolve filings by issuer, exact reporting-owner CIK, or direct accession.",
                                    "type": "string",
                                    "enum": [
                                        "issuer",
                                        "reportingOwner",
                                        "accessionNumber"
                                    ]
                                },
                                "identifierType": {
                                    "title": "Identifier type",
                                    "description": "Exact identifier semantics allowed by the selected scope.",
                                    "type": "string",
                                    "enum": [
                                        "ticker",
                                        "cik",
                                        "companyName",
                                        "accessionNumber"
                                    ]
                                },
                                "identifier": {
                                    "title": "Exact identifier",
                                    "description": "Ticker, CIK, exact SEC issuer name, or exact accession number.",
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 200
                                },
                                "issuerCik": {
                                    "title": "Issuer CIK for direct accession lookup",
                                    "description": "Required only for accessionNumber scope. The accession prefix can identify a filing agent rather than the issuer.",
                                    "type": "string",
                                    "pattern": "^\\d{1,10}$"
                                }
                            }
                        },
                        "default": [
                            {
                                "requestId": "apple-insiders",
                                "scope": "issuer",
                                "identifierType": "ticker",
                                "identifier": "AAPL"
                            }
                        ]
                    },
                    "filedFrom": {
                        "title": "Filed from",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Inclusive YYYY-MM-DD lower bound."
                    },
                    "filedTo": {
                        "title": "Filed to",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Inclusive YYYY-MM-DD upper bound."
                    },
                    "transactionCodes": {
                        "title": "SEC transaction-code filter",
                        "maxItems": 32,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Exact raw one-letter SEC codes. Empty means all codes; codes are not converted into buy/sell signals.",
                        "items": {
                            "type": "string",
                            "pattern": "^[A-Z]$"
                        },
                        "default": []
                    },
                    "acquiredDisposed": {
                        "title": "Acquired/disposed filter",
                        "maxItems": 2,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "A and D remain independent from transaction-code descriptions. Empty means both.",
                        "items": {
                            "type": "string",
                            "pattern": "^[AD]$"
                        },
                        "default": []
                    },
                    "includeDerivatives": {
                        "title": "Include Table II derivative transactions",
                        "type": "boolean",
                        "description": "When false, emit only Table I nonderivative transaction rows.",
                        "default": true
                    },
                    "includeFootnotes": {
                        "title": "Include bounded footnote text",
                        "type": "boolean",
                        "description": "Footnote IDs and component references remain even when text is omitted.",
                        "default": true
                    },
                    "includeAmendments": {
                        "title": "Include Form 4/A",
                        "type": "boolean",
                        "description": "Include amendments as independent source records with conservative original links.",
                        "default": true
                    },
                    "evidenceMaxChars": {
                        "title": "Maximum characters per footnote/evidence excerpt",
                        "minimum": 240,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Hard per-footnote and Rule 10b5-1 evidence text bound.",
                        "default": 1200
                    },
                    "maxFilingsPerQuery": {
                        "title": "Maximum filings per query",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Hard bound on matching filing metadata processed for each query.",
                        "default": 50
                    },
                    "maxTransactions": {
                        "title": "Maximum unique transaction rows",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Hard global default-dataset and pay-per-event result bound.",
                        "default": 100
                    },
                    "outputSchemaVersion": {
                        "title": "Output schema version",
                        "enum": [
                            "1.0"
                        ],
                        "type": "string",
                        "description": "Published output contract; version 1.0 is currently supported.",
                        "default": "1.0"
                    },
                    "outputMode": {
                        "title": "Output mode",
                        "enum": [
                            "full",
                            "compact"
                        ],
                        "type": "string",
                        "description": "compact removes bounded footnote text, not IDs or component references.",
                        "default": "full"
                    },
                    "incremental": {
                        "title": "Stateless incremental mode",
                        "type": "object",
                        "description": "Copy SUMMARY.nextCursor unchanged into the next run. Not compatible with direct accession queries.",
                        "properties": {
                            "cursor": {
                                "title": "Previous cursor",
                                "description": "Opaque nextCursor from the preceding SUMMARY; omit for the first incremental run.",
                                "type": "string",
                                "maxLength": 32768,
                                "pattern": "^secf4cur1_[A-Za-z0-9_-]+$"
                            },
                            "overlapHours": {
                                "title": "Overlap hours",
                                "description": "Recheck this many hours while stable record IDs suppress duplicates.",
                                "type": "integer",
                                "editor": "number",
                                "minimum": 0,
                                "maximum": 168
                            }
                        },
                        "additionalProperties": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
