diff --git a/sources/platform/actors/development/actor_definition/actor_json.md b/sources/platform/actors/development/actor_definition/actor_json.md
index c8a42af095..3786f3c9cb 100644
--- a/sources/platform/actors/development/actor_definition/actor_json.md
+++ b/sources/platform/actors/development/actor_definition/actor_json.md
@@ -79,7 +79,7 @@ Actor `name`, `version`, `buildTag`, and `environmentVariables` are currently on
| `environmentVariables` | Optional | A map of environment variables to be used during local development. These variables will also be applied to the Actor when deployed on the Apify platform. For more details, see the [environment variables](/cli/docs/vars) section of the Apify CLI documentation. |
| `dockerfile` | Optional | The path to the Dockerfile to be used for building the Actor on the platform. If not specified, the system will search for Dockerfiles in the `.actor/Dockerfile` and `Dockerfile` paths, in that order. Refer to the [Dockerfile](./docker.md) section for more information. |
| `dockerContextDir` | Optional | The path to the directory to be used as the Docker context when building the Actor. The path is relative to the location of the `actor.json` file. This property is useful for monorepos containing multiple Actors. Refer to the [Actor monorepos](../deployment/source_types.md#actor-monorepos) section for more details. |
-| `readme` | Optional | The path to the README file to be used on the platform. If not specified, the system will look for README files in the `.actor/README.md` and `README.md` paths, in that order of preference. Check out [Apify Marketing Playbook to learn how to write a quality README files](https://apify.notion.site/How-to-create-an-Actor-README-759a1614daa54bee834ee39fe4d98bc2) guidance. |
+| `readme` | Optional | The path to the README file to be used on the platform. If not specified, the system will look for README files in the `.actor/ACTOR.md`, `.actor/README.md`, root `README.md`, and root `README` paths, in that order of preference. Check out [Apify Marketing Playbook to learn how to write a quality README files](https://apify.notion.site/How-to-create-an-Actor-README-759a1614daa54bee834ee39fe4d98bc2) guidance. |
| `input` | Optional | You can embed your [input schema](./input_schema/index.md) object directly in `actor.json` under the `input` field. You can also provide a path to a custom input schema. If not provided, the input schema at `.actor/INPUT_SCHEMA.json` or `INPUT_SCHEMA.json` is used, in this order of preference. You can also use the `inputSchema` alias interchangeably. |
| `output` | Optional | You can embed your [output schema](./output_schema/index.md) object directly in `actor.json` under the `output` field. You can also provide a path to a custom output schema. [Read more](/platform/actors/development/actor-definition/output-schema) about Actor output schemas. You can also use the `outputSchema` alias interchangeably. |
| `changelog` | Optional | The path to the CHANGELOG file displayed in the Information tab of the Actor in Apify Console next to Readme. If not provided, the CHANGELOG at `.actor/CHANGELOG.md` or `CHANGELOG.md` is used, in this order of preference. Your Actor doesn't need to have a CHANGELOG but it is a good practice to keep it updated for published Actors. |
diff --git a/sources/platform/actors/development/actor_definition/dataset_schema/validation.md b/sources/platform/actors/development/actor_definition/dataset_schema/validation.md
index cffc228a4d..ab51b7102e 100644
--- a/sources/platform/actors/development/actor_definition/dataset_schema/validation.md
+++ b/sources/platform/actors/development/actor_definition/dataset_schema/validation.md
@@ -82,7 +82,7 @@ Dataset schema needs to be a valid JSON schema draft-07, so the `$schema` line i
When you define a schema of your default dataset, the schema is then always used when you insert data into the dataset to perform validation (we use [AJV](https://ajv.js.org/)).
-If the validation succeeds, nothing changes from the current behavior, data is stored and an empty response with status code `201` is returned.
+If the validation succeeds, the data is stored and a response with status code `201` is returned. When the schema defines `fields`, the response body contains the computed [field statistics](#dataset-field-statistics) under a `fieldStatistics` property; otherwise the response body is empty.
If the data you attempt to store in the dataset is _invalid_ (meaning any of the items received by the API fails validation), _the entire request will be discarded_, The API will return a response with status code `400` and the following JSON response:
diff --git a/sources/platform/actors/development/actor_definition/docker.md b/sources/platform/actors/development/actor_definition/docker.md
index 18f8c48156..9f74a3f14f 100644
--- a/sources/platform/actors/development/actor_definition/docker.md
+++ b/sources/platform/actors/development/actor_definition/docker.md
@@ -152,20 +152,15 @@ To use a custom `Dockerfile`, you can either:
If no `Dockerfile` is provided, the system uses the following default:
```dockerfile
-FROM apify/actor-node:24
-
-COPY --chown=myuser:myuser package*.json ./
+FROM apify/actor-node:20
-RUN npm --quiet set progress=false \
- && npm install --only=prod --no-optional \
- && echo "Installed NPM packages:" \
- && (npm list --only=prod --no-optional --all || true) \
- && echo "Node.js version:" \
- && node --version \
- && echo "NPM version:" \
- && npm --version
+# Copy all files and directories from the directory to the Docker image
+COPY . ./
-COPY --chown=myuser:myuser . ./
+# Install NPM packages, skip optional and development dependencies to keep the image small,
+# avoid logging too much and show the dependency tree
+RUN npm install --quiet --only=prod --no-optional \
+ && (npm list || true)
```
For more information about `Dockerfile` syntax and commands, see the [Dockerfile reference](https://docs.docker.com/reference/dockerfile/).
diff --git a/sources/platform/actors/development/actor_definition/dynamic_actor_memory/index.md b/sources/platform/actors/development/actor_definition/dynamic_actor_memory/index.md
index 89ce713ff9..3b0a456247 100644
--- a/sources/platform/actors/development/actor_definition/dynamic_actor_memory/index.md
+++ b/sources/platform/actors/development/actor_definition/dynamic_actor_memory/index.md
@@ -142,6 +142,7 @@ After the expression is evaluated, the memory value goes through these steps:
- 900 → 1024 MB
- 3,600 → 4096 MB
+1. The value is capped to the maximum Actor memory allowed by your subscription plan. If an expression requests more memory than your plan allows, the run gets the plan limit instead, even when the requested value is below 32 GB.
1. If the Actor has minimum or maximum memory limits defined (`minMemoryMbytes` / `maxMemoryMbytes`), the value is adjusted to stay within those limits.
1. The value is adjusted to stay within platform limits (128 MB to 32 GB).
diff --git a/sources/platform/actors/development/actor_definition/input_schema/secret_input.md b/sources/platform/actors/development/actor_definition/input_schema/secret_input.md
index 89c360b17f..74f414730e 100644
--- a/sources/platform/actors/development/actor_definition/input_schema/secret_input.md
+++ b/sources/platform/actors/development/actor_definition/input_schema/secret_input.md
@@ -78,7 +78,7 @@ If you read the `INPUT` key from the Actor run's default key-value store directl
## Encryption mechanism
-The encryption mechanism used for encrypting the secret input fields is the same dual encryption as in [PGP](https://en.wikipedia.org/wiki/Pretty_Good_Privacy#/media/File:PGP_diagram.svg). The secret input field is encrypted using a random key, using the `aes-256-gcm` cipher, and then the key is encrypted using a 2048-bit RSA key.
+The encryption mechanism used for encrypting the secret input fields is the same dual encryption as in [PGP](https://en.wikipedia.org/wiki/Pretty_Good_Privacy#/media/File:PGP_diagram.svg). The secret input field is encrypted using a random key, using the `aes-256-ctr` cipher, and then the key is encrypted using a 2048-bit RSA key.
The RSA key is unique for each combination of user and Actor, ensuring that no Actor can decrypt input intended for runs of another Actor by the same user, and no user can decrypt input runs of the same Actor by a different user. This isolation of decryption keys enhances the security of sensitive input data.
diff --git a/sources/platform/actors/development/actor_definition/output_schema/index.md b/sources/platform/actors/development/actor_definition/output_schema/index.md
index 96694a4d10..70da5636f1 100644
--- a/sources/platform/actors/development/actor_definition/output_schema/index.md
+++ b/sources/platform/actors/development/actor_definition/output_schema/index.md
@@ -70,20 +70,20 @@ The output schema defines the collections of keys and their properties. It allow
### Output schema object definition
-| Property | Type | Required | Description |
-|-----------------------------------|-------------------------------|----------|-----------------------------------------------------------------------------------------------------------------|
-| `actorOutputSchemaVersion` | integer | true | Specifies the version of output schema structure document.
Currently only version 1 is available. |
-| `title` | string | true | Title of the schema |
-| `description` | string | false | Description of the schema |
-| `properties` | Object | true | An object where each key is an output ID and its value is an Output object definition (see below). |
+| Property | Type | Required | Description |
+|----------------------------|---------|----------|--------------------------------------------------------------------------------------------------------|
+| `actorOutputSchemaVersion` | integer | true | Specifies the version of output schema structure document.
Currently only version 1 is available. |
+| `title` | string | true | Title of the schema |
+| `description` | string | false | Description of the schema |
+| `properties` | Object | true | An object where each key is an output ID and its value is an Output object definition (see below). |
### Output object definition
-| Property | Type | Required | Description |
-|----------------|--------------|--------------|--------------------------------------------------------------------------------------------------------------------------------------------------|
-| `title` | string | true | The output's title, shown in the run's output tab if there are multiple outputs and in API as key for the generated output URL. |
-| `description` | string | false | A description of the output. Only used when reading the schema (useful for LLMs). |
-| `template` | string | true | Defines a URL template that generates the output link using `{{variable}}` syntax. See [How templates work](#how-templates-work) for details. |
+| Property | Type | Required | Description |
+|---------------|--------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `title` | string | true | The output's title, shown in the run's output tab if there are multiple outputs. In the API response, the generated output URL is keyed by the property name (output ID), not by `title`. |
+| `description` | string | false | A description of the output. Only used when reading the schema (useful for LLMs). |
+| `template` | string | true | Defines a URL template that generates the output link using `{{variable}}` syntax. See [How templates work](#how-templates-work) for details. |
### Available template variables
@@ -91,7 +91,7 @@ The output schema defines the collections of keys and their properties. It allow
|-----------------------------------------|--------|------------------------------------------------------------------------------------------------------------------|
| `links` | object | Contains quick links to most commonly used URLs |
| `links.publicRunUrl` | string | Public run url in format `https://console.apify.com/view/runs/:runId` |
-| `links.consoleRunUrl` | string | Console run url in format `https://console.apify.com/actors/runs/:runId` |
+| `links.consoleRunUrl` | string | Console run url in format `https://console.apify.com/actors/:actorId/runs/:runId` |
| `links.apiRunUrl` | string | API run url in format `https://api.apify.com/v2/actor-runs/:runId` |
| `links.apiDefaultDatasetUrl` | string | API url of default dataset in format `https://api.apify.com/v2/datasets/:defaultDatasetId` |
| `links.apiDefaultKeyValueStoreUrl` | string | API url of default key-value store in format `https://api.apify.com/v2/key-value-stores/:defaultKeyValueStoreId` |
diff --git a/sources/platform/actors/development/actor_definition/web_server_schema/index.md b/sources/platform/actors/development/actor_definition/web_server_schema/index.md
index cf13896e1b..0052d9d903 100644
--- a/sources/platform/actors/development/actor_definition/web_server_schema/index.md
+++ b/sources/platform/actors/development/actor_definition/web_server_schema/index.md
@@ -2,13 +2,13 @@
title: Web server schema
sidebar_label: Web server schema
sidebar_position: 7
-description: Attach an OpenAPI specification to your Actor to enable the interactive Standby tab in Apify Console and Apify Store, where you can browse and test endpoints.
+description: Attach an OpenAPI specification to your Actor to enable the interactive Endpoints tab in Apify Console and Apify Store, where you can browse and test endpoints.
slug: /actors/development/actor-definition/web-server-schema
---
-The `webServerSchema` field in `.actor/actor.json` attaches an [OpenAPI 3.x](https://spec.openapis.org/oas/v3.0.3) specification to your Actor. You can define the schema for any Actor that exposes an HTTP server. When you enable [standby mode](/platform/actors/development/programming-interface/standby), Apify Console and Apify Store render an interactive **Standby** tab on the Actor's detail page. From there you can browse endpoints, inspect request and response schemas, and send requests directly from the browser.
+The `webServerSchema` field in `.actor/actor.json` attaches an [OpenAPI 3.x](https://spec.openapis.org/oas/v3.0.3) specification to your Actor. You can define the schema for any Actor that exposes an HTTP server. When you enable [standby mode](/platform/actors/development/programming-interface/standby), Apify Console and Apify Store render an interactive **Endpoints** tab on the Actor's detail page. From there you can browse endpoints, inspect request and response schemas, and send requests directly from the browser.
-
+
## Define the web server schema
@@ -92,7 +92,7 @@ Follow the standard [OpenAPI 3.x format](https://spec.openapis.org/oas/latest.ht
The build process validates `webServerSchema`, similar to other Actor schemas like [input schema](/platform/actors/development/actor-definition/input-schema) and [dataset schema](/platform/actors/development/actor-definition/dataset-schema). If the spec is malformed, the build fails with a validation error.
-Once deployed, the **Standby** tab appears automatically on the Actor's detail page when you enable [standby mode](/platform/actors/development/programming-interface/standby). It renders your spec with [Swagger UI](https://swagger.io/tools/swagger-ui/) and handles authentication automatically - Actor users can send requests without configuring API tokens.
+Once deployed, the **Endpoints** tab appears automatically on the Actor's detail page when you enable [standby mode](/platform/actors/development/programming-interface/standby). It renders your spec with [Swagger UI](https://swagger.io/tools/swagger-ui/) and handles authentication automatically - Actor users can send requests without configuring API tokens.
:::note Servers field is overwritten
@@ -102,7 +102,7 @@ Your `servers` array is replaced with the Actor's standby URL at display time. C
## Related fields
-| Field | Description |
-| --- | --- |
-| `usesStandbyMode` | Must be `true` for the **Standby** tab to appear. See [standby mode](/platform/actors/development/programming-interface/standby). |
-| `webServerSchema` | The OpenAPI spec that powers the **Standby** tab. Defined in [`.actor/actor.json`](/platform/actors/development/actor-definition/actor-json) as an inline object or a path to a JSON file. |
+| Field | Description |
+|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `usesStandbyMode` | Must be `true` for the **Endpoints** tab to appear. See [standby mode](/platform/actors/development/programming-interface/standby). |
+| `webServerSchema` | The OpenAPI spec that powers the **Endpoints** tab. Defined in [`.actor/actor.json`](/platform/actors/development/actor-definition/actor-json) as an inline object or a path to a JSON file. |
diff --git a/sources/platform/actors/development/deployment/continuous_integration.md b/sources/platform/actors/development/deployment/continuous_integration.md
index 4a6ec15eee..a3f5c4fb6d 100644
--- a/sources/platform/actors/development/deployment/continuous_integration.md
+++ b/sources/platform/actors/development/deployment/continuous_integration.md
@@ -143,8 +143,8 @@ When using the webhook approach, the Actor must have its source set to a Git rep
:::
1. Go to your Actor's detail page in Apify Console.
-1. Go to the **API** tab.
-1. Select **API Endpoints** and copy the **Build Actor** API endpoint URL:
+1. Select the **API** dropdown button.
+1. Select **API endpoints** and copy the **Build Actor** API endpoint URL:
```text
https://api.apify.com/v2/actors/YOUR-ACTOR-NAME/builds?token=YOUR-TOKEN-HERE&version=0.0&tag=latest&waitForFinish=60
diff --git a/sources/platform/actors/development/deployment/source_types.md b/sources/platform/actors/development/deployment/source_types.md
index fa3d535123..40e05edc8b 100644
--- a/sources/platform/actors/development/deployment/source_types.md
+++ b/sources/platform/actors/development/deployment/source_types.md
@@ -69,7 +69,7 @@ Remember that each key can only be used once per Git hosting service (GitHub, Bi
### Actor monorepos
-To manage multiple Actors in a single repository, use the `dockerContextDir` property in the [Actor definition](/platform/actors/development/actor-definition/actor-json) to set the Docker context directory (if not provided then the repository root is used). In the Dockerfile, copy both the Actor's source and any shared code into the Docker image.
+To manage multiple Actors in a single repository, use the `dockerContextDir` property in the [Actor definition](/platform/actors/development/actor-definition/actor-json) to set the Docker context directory (if not provided, the Actor's source directory - the directory selected as the Actor's root - is used). In the Dockerfile, copy both the Actor's source and any shared code into the Docker image.
To enable sharing Dockerfiles between multiple Actors, the Actor build process passes the `ACTOR_PATH_IN_DOCKER_CONTEXT` build argument to the Docker build.
It contains the relative path from `dockerContextDir` to the directory selected as the root of the Actor in Apify Console (the "directory" part of the Actor's git URL).
diff --git a/sources/platform/actors/development/index.md b/sources/platform/actors/development/index.md
index 3c14545181..b007ca83e8 100644
--- a/sources/platform/actors/development/index.md
+++ b/sources/platform/actors/development/index.md
@@ -8,7 +8,7 @@ slug: /actors/development
This section will guide you through the whole story of [Actor](../index.mdx) development.
-You can follow chapters sequentially from [Quick start](/platform/actors/development/quick-start), where you learn how to create your first Actor in just a few minutes, through the more technical sections describing the whole Actor model, up to the [Performance](/sources/platform/actors/development/performance.md) section, where you learn how to fine-tune your Actor to get the most out of the Apify platform.
+You can follow chapters sequentially from [Quick start](/platform/actors/development/quick-start), where you learn how to create your first Actor in just a few minutes, through the more technical sections describing the whole Actor model, up to the [Performance](/platform/actors/development/performance) section, where you learn how to fine-tune your Actor to get the most out of the Apify platform.
import Card from "@site/src/components/Card";
import CardGrid from "@site/src/components/CardGrid";
diff --git a/sources/platform/actors/development/performance.md b/sources/platform/actors/development/performance.md
index 9f6770be26..a54db7351a 100644
--- a/sources/platform/actors/development/performance.md
+++ b/sources/platform/actors/development/performance.md
@@ -22,7 +22,7 @@ When you build a Docker image, Docker caches the layers that haven't changed. Th
Consider the following Dockerfile:
```dockerfile
-FROM apify/actor-node:16
+FROM apify/actor-node:24
COPY package*.json ./
diff --git a/sources/platform/actors/development/programming_interface/container_web_server.md b/sources/platform/actors/development/programming_interface/container_web_server.md
index 7e061ecb0f..bf131a4de4 100644
--- a/sources/platform/actors/development/programming_interface/container_web_server.md
+++ b/sources/platform/actors/development/programming_interface/container_web_server.md
@@ -22,7 +22,7 @@ The container web server provides a way how to connect to one specific Actor run
You can find the container URL in three locations:
-- In the web application, on the Actor run details page as the **Container URL** field.
+- In the web application, on the Actor run details page as the **Live view URL** field.
- In the API as the `containerUrl` property of the [Run object](/api/v2/actor-run-get).
- In the Actor run's container as the `ACTOR_WEB_SERVER_URL` environment variable.
diff --git a/sources/platform/actors/development/programming_interface/environment_variables.md b/sources/platform/actors/development/programming_interface/environment_variables.md
index d457b1bd11..b344d5356d 100644
--- a/sources/platform/actors/development/programming_interface/environment_variables.md
+++ b/sources/platform/actors/development/programming_interface/environment_variables.md
@@ -32,30 +32,31 @@ System variables apply only to Actor runs and are never passed to builds - not e
Variables prefixed with `ACTOR_` are defined by the [Actor specification](https://whitepaper.actor/#environment-variables). They describe the run's execution context - identifiers, default storages, resource limits, and timing - and aren't specific to the Apify platform.
-| Environment variable | Description |
-| -------------------- | ----------- |
-| `ACTOR_ID` | ID of the Actor. |
-| `ACTOR_FULL_NAME` | Full technical name of the Actor, in the format `owner-username/actor-name`. |
-| `ACTOR_RUN_ID` | ID of the Actor run. |
-| `ACTOR_DEFAULT_DATASET_ID` | Unique identifier for the default dataset associated with the current Actor run. |
-| `ACTOR_DEFAULT_KEY_VALUE_STORE_ID` | Unique identifier for the default key-value store associated with the current Actor run. |
-| `ACTOR_DEFAULT_REQUEST_QUEUE_ID` | Unique identifier for the default request queue associated with the current Actor run. |
-| `ACTOR_INPUT_KEY` | Key of the record in the default key-value store that holds the [Actor input](/platform/actors/running/input-and-output#input). |
-| `ACTOR_STORAGES_JSON` | JSON-encoded unique identifiers of storages associated with the current Actor run, e.g. `{ "keyValueStores": { "default": "" }, "datasets": { "default": "" }, "requestQueues": { "default": "" } }`. |
-| `ACTOR_MEMORY_MBYTES` | Size of memory allocated for the Actor run, in megabytes. Can be used to optimize memory usage or finetuning of low-level external libraries. |
-| `ACTOR_MAX_TOTAL_CHARGE_USD` | For pay-per-event Actors, the user-set limit on run cost. Do not exceed this limit. |
-| `ACTOR_PERMISSION_LEVEL` | [Permission level](../../running/permissions.md) the Actor is run under (`LIMITED_PERMISSIONS` or `FULL_PERMISSIONS`). This determines what resources in the user’s account the Actor can access. |
-| `ACTOR_RESTART_ON_ERROR` | If **1**, the Actor run will be restarted if it fails. |
-| `ACTOR_STARTED_AT` | Date when the Actor was started. |
-| `ACTOR_TIMEOUT_AT` | Date when the Actor will time out. |
-| `ACTOR_BUILD_ID` | ID of the Actor build used in the run. |
-| `ACTOR_BUILD_NUMBER` | Build number of the Actor build used in the run. |
-| `ACTOR_BUILD_TAGS` | A comma-separated list of tags of the Actor build used in the run. Note that this environment variable is assigned at the time of start of the Actor and doesn't change over time, even if the assigned build tags change. |
-| `ACTOR_TASK_ID` | ID of the Actor task. Empty if Actor is run outside of any task, e.g. directly using the API. |
-| `ACTOR_WEB_SERVER_URL` | Unique public URL for accessing the Actor run web server from the outside world. |
-| `ACTOR_WEB_SERVER_PORT` | TCP port for the Actor to start an HTTP server on. This server can be used to receive external messages or expose monitoring and control interfaces. The server also receives messages from the [Actor Standby](/platform/actors/development/programming-interface/standby) mode. |
-| `ACTOR_STANDBY_URL` | URL for accessing web servers of Actor runs in the [Actor Standby](/platform/actors/development/programming-interface/standby) mode. |
-| `ACTOR_EVENTS_WEBSOCKET_URL` | Websocket URL where Actor may listen for [events](/platform/actors/development/programming-interface/system-events) from Actor platform. |
+| Environment variable | Description |
+|------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `ACTOR_ID` | ID of the Actor. |
+| `ACTOR_FULL_NAME` | Full technical name of the Actor, in the format `owner-username/actor-name`. |
+| `ACTOR_RUN_ID` | ID of the Actor run. |
+| `ACTOR_DEFAULT_DATASET_ID` | Unique identifier for the default dataset associated with the current Actor run. |
+| `ACTOR_DEFAULT_KEY_VALUE_STORE_ID` | Unique identifier for the default key-value store associated with the current Actor run. |
+| `ACTOR_DEFAULT_REQUEST_QUEUE_ID` | Unique identifier for the default request queue associated with the current Actor run. |
+| `ACTOR_INPUT_KEY` | Key of the record in the default key-value store that holds the [Actor input](/platform/actors/running/input-and-output#input). |
+| `ACTOR_STORAGES_JSON` | JSON-encoded unique identifiers of storages associated with the current Actor run, e.g. `{ "keyValueStores": { "default": "" }, "datasets": { "default": "" }, "requestQueues": { "default": "" } }`. |
+| `ACTOR_MEMORY_MBYTES` | Size of memory allocated for the Actor run, in megabytes. Can be used to optimize memory usage or finetuning of low-level external libraries. |
+| `ACTOR_MAX_TOTAL_CHARGE_USD` | For pay-per-event Actors, the user-set limit on run cost. Do not exceed this limit. |
+| `ACTOR_MAX_PAID_DATASET_ITEMS` | For pay-per-result Actors, the user-set limit on the number of dataset items to charge for. Empty if not set. |
+| `ACTOR_PERMISSION_LEVEL` | [Permission level](../../running/permissions.md) the Actor is run under (`LIMITED_PERMISSIONS` or `FULL_PERMISSIONS`). This determines what resources in the user’s account the Actor can access. |
+| `ACTOR_RESTART_ON_ERROR` | If **1**, the Actor run will be restarted if it fails. |
+| `ACTOR_STARTED_AT` | Date when the Actor was started. |
+| `ACTOR_TIMEOUT_AT` | Date when the Actor will time out. |
+| `ACTOR_BUILD_ID` | ID of the Actor build used in the run. |
+| `ACTOR_BUILD_NUMBER` | Build number of the Actor build used in the run. |
+| `ACTOR_BUILD_TAGS` | A comma-separated list of tags of the Actor build used in the run. Note that this environment variable is assigned at the time of start of the Actor and doesn't change over time, even if the assigned build tags change. |
+| `ACTOR_TASK_ID` | ID of the Actor task. Empty if Actor is run outside of any task, e.g. directly using the API. |
+| `ACTOR_WEB_SERVER_URL` | Unique public URL for accessing the Actor run web server from the outside world. |
+| `ACTOR_WEB_SERVER_PORT` | TCP port for the Actor to start an HTTP server on. This server can be used to receive external messages or expose monitoring and control interfaces. The server also receives messages from the [Actor Standby](/platform/actors/development/programming-interface/standby) mode. |
+| `ACTOR_STANDBY_URL` | URL for accessing web servers of Actor runs in the [Actor Standby](/platform/actors/development/programming-interface/standby) mode. |
+| `ACTOR_EVENTS_WEBSOCKET_URL` | Websocket URL where Actor may listen for [events](/platform/actors/development/programming-interface/system-events) from Actor platform. |
@@ -70,23 +71,24 @@ All date-related variables use the UTC timezone and are in [ISO 8601](https://en
Variables prefixed with `APIFY_` are Apify-platform-specific extensions that go beyond the Actor specification. They expose features unique to the Apify platform, such as your API token, Apify Proxy, and details about the user who started the run.
-| Environment variable | Description |
-| -------------------- | ----------- |
-| `APIFY_TOKEN` | API token of the user who started the Actor. |
-| `APIFY_USER_ID` | ID of the user who started the Actor. May differ from the Actor owner. |
-| `APIFY_USER_IS_PAYING` | If it is `1`, it means that the user who started the Actor is a paying user. |
-| `APIFY_IS_AT_HOME` | Contains **1** if the Actor is running on Apify servers. |
-| `APIFY_DEDICATED_CPUS` | Number of CPU cores reserved for the Actor, based on allocated memory. |
-| `APIFY_PROXY_PASSWORD` | Password for accessing Apify Proxy services. This password enables the Actor to utilize proxy servers on behalf of the user who initiated the Actor run. |
-| `APIFY_PROXY_PORT` | TCP port number to be used for connecting to Apify Proxy. |
-| `APIFY_PROXY_STATUS_URL` | URL for retrieving proxy status information. Appending `?format=json` to this URL returns the data in JSON format for programmatic processing. |
-| `APIFY_API_PUBLIC_BASE_URL` | Public URL of the Apify API. May be used to interact with the platform programmatically. Typically set to `api.apify.com`. |
-| `APIFY_MCP_PROXY_URL` | Base URL of the Apify MCP Proxy. Connect to an [MCP connector](/platform/integrations/mcp-connectors) at `${APIFY_MCP_PROXY_URL}/` using `APIFY_TOKEN` as the bearer token. |
-| `APIFY_WORKFLOW_KEY` | Identifier used for grouping related runs and API calls together. |
-| `APIFY_META_ORIGIN` | Specifies how an Actor run was started. Possible values are in [Runs and builds](/platform/actors/running/runs-and-builds#origin) documentation. |
-| `APIFY_INPUT_SECRETS_PRIVATE_KEY_FILE` | Path to the secret key used to decrypt [Secret inputs](/platform/actors/development/actor-definition/input-schema/secret-input). |
-| `APIFY_INPUT_SECRETS_PRIVATE_KEY_PASSPHRASE` | Passphrase for the input secret key specified in `APIFY_INPUT_SECRETS_PRIVATE_KEY_FILE`. |
-| ~~`APIFY_HEADLESS`~~ | _Deprecated_ - on the Apify platform this is always set to **1**, so web browsers inside the Actor always run in headless mode (no windowing system available). |
+| Environment variable | Description |
+|----------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `APIFY_TOKEN` | API token of the user who started the Actor. |
+| `APIFY_USER_ID` | ID of the user who started the Actor. May differ from the Actor owner. |
+| `APIFY_USER_IS_PAYING` | If it is `1`, it means that the user who started the Actor is a paying user. |
+| `APIFY_IS_AT_HOME` | Contains **1** if the Actor is running on Apify servers. |
+| `APIFY_DEDICATED_CPUS` | Number of CPU cores reserved for the Actor, based on allocated memory. |
+| `APIFY_PROXY_PASSWORD` | Password for accessing Apify Proxy services. This password enables the Actor to utilize proxy servers on behalf of the user who initiated the Actor run. |
+| `APIFY_PROXY_HOSTNAME` | Hostname of the Apify Proxy to use when building a proxy connection string. |
+| `APIFY_PROXY_PORT` | TCP port number to be used for connecting to Apify Proxy. |
+| `APIFY_PROXY_STATUS_URL` | URL for retrieving proxy status information. Appending `?format=json` to this URL returns the data in JSON format for programmatic processing. |
+| `APIFY_API_PUBLIC_BASE_URL` | Public URL of the Apify API. May be used to interact with the platform programmatically. Typically set to `api.apify.com`. |
+| `APIFY_MCP_PROXY_URL` | Base URL of the Apify MCP Proxy. Connect to an [MCP connector](/platform/integrations/mcp-connectors) at `${APIFY_MCP_PROXY_URL}/` using `APIFY_TOKEN` as the bearer token. |
+| `APIFY_WORKFLOW_KEY` | Identifier used for grouping related runs and API calls together. |
+| `APIFY_META_ORIGIN` | Specifies how an Actor run was started. Possible values are in [Runs and builds](/platform/actors/running/runs-and-builds#origin) documentation. |
+| `APIFY_INPUT_SECRETS_PRIVATE_KEY_FILE` | Path to the secret key used to decrypt [Secret inputs](/platform/actors/development/actor-definition/input-schema/secret-input). |
+| `APIFY_INPUT_SECRETS_PRIVATE_KEY_PASSPHRASE` | Passphrase for the input secret key specified in `APIFY_INPUT_SECRETS_PRIVATE_KEY_FILE`. |
+| ~~`APIFY_HEADLESS`~~ | _Deprecated_ - on the Apify platform this is always set to **1**, so web browsers inside the Actor always run in headless mode (no windowing system available). |
## Custom environment variables
diff --git a/sources/platform/actors/development/programming_interface/index.mdx b/sources/platform/actors/development/programming_interface/index.mdx
index b51c87ddc2..57d51a48f2 100644
--- a/sources/platform/actors/development/programming_interface/index.mdx
+++ b/sources/platform/actors/development/programming_interface/index.mdx
@@ -13,7 +13,7 @@ This chapter will guide you through all the commands you need to build your firs
**Reply**.
### Edit your reply
-To edit your response, on your reply, select **Options** > **Edit**.
+To edit your response, on the review, select **Options** > **Edit reply**.
## Report a review
diff --git a/sources/platform/actors/publishing/actor-status.mdx b/sources/platform/actors/publishing/actor-status.mdx
index 7d5996513f..0aa0b9379a 100644
--- a/sources/platform/actors/publishing/actor-status.mdx
+++ b/sources/platform/actors/publishing/actor-status.mdx
@@ -49,4 +49,4 @@ To let your users know that the Actor is no longer being developed, use the **De
Don't delete the Actor as it might break the existing integrations.
-Note that the deprecated Actors aren't searchable in Apify Store. The **Deprecated** status is also automatically set when your Actor fails the [automated testing](../development/automated_tests.md) process for 30 days.
+Note that the deprecated Actors aren't searchable in Apify Store. The **Deprecated** status can also be set automatically if your Actor keeps failing the [automated testing](../development/automated_tests.md) process. In that case, the Actor is first placed **Under maintenance** after about 3 days, receives a deprecation warning 14 days later, and is set to **Deprecated** after another 14 days if it remains unfixed.
diff --git a/sources/platform/actors/publishing/index.mdx b/sources/platform/actors/publishing/index.mdx
index 65a18f5a58..6850f56c65 100644
--- a/sources/platform/actors/publishing/index.mdx
+++ b/sources/platform/actors/publishing/index.mdx
@@ -5,6 +5,8 @@ sidebar_position: 7.5
slug: /actors/publishing
---
+import RentalSunset from '../../../_partials/_rental-sunsetting.mdx';
+
> Sharing is caring but you can also make money from your Actors. Check out the [blog post](https://blog.apify.com/make-regular-passive-income-developing-web-automation-actors-b0392278d085/) for more context.
## Publish process
@@ -33,7 +35,9 @@ Publishing your Actor on Apify Store transforms your code, eliminating tradition
Packaging your software as an Actor allows you to launch new SaaS product faster and earn income through various monetization models that match your Actor's value proposition like:
- Pay-per-event for specific operations
-- Fixed rental fee for continuous access
+- Pay-per-usage based on platform resource consumption
+
+
To learn more, visit the [Actors in Store](/platform/actors/running/actors-in-store#pricing-models) page.
diff --git a/sources/platform/actors/publishing/monetize/index.mdx b/sources/platform/actors/publishing/monetize/index.mdx
index dba01faa18..c5d612de8e 100644
--- a/sources/platform/actors/publishing/monetize/index.mdx
+++ b/sources/platform/actors/publishing/monetize/index.mdx
@@ -89,8 +89,8 @@ If your PPE Actor's price doesn't cover its monthly platform usage costs, it wil
You have 3 days to review your payout invoice in the **Development >Insights > Payout** section. During this period, you can either approve the invoice or request a revision, which we will process promptly.
If no action is taken, the payout will be automatically approved on the 14th, with funds disbursed shortly after. Payouts require meeting minimum thresholds of either:
-- $20 for PayPal
-- $100 for other payout methods
+- $20 for PayPal and Wise
+- $100 for other payout methods (bank accounts)
If the monthly profit does not meet these thresholds, as per the [Terms & Conditions](/legal/store-publishing-terms-and-conditions), the funds will roll over to the next month until the threshold is reached.
@@ -104,9 +104,9 @@ When monetizing your Actor, you might want to limit features or usage for users
## Actor analytics
-Monitor your Actors' performance through the [Actor Analytics](https://console.apify.com/actors/insights/analytics) dashboard under **Development > Insights > Analytics**.
+Monitor your Actors' performance through the [Insights](https://console.apify.com/actors/insights/monetization) dashboard under **Development > Insights**. The metrics are organized across the **Monetization**, **Acquisition**, and **Debugging** tabs.
-The analytics dashboard allows you to select specific Actors and view key metrics aggregated across all user runs:
+The Insights dashboard allows you to select specific Actors and view key metrics aggregated across all user runs:
- Revenue, costs and profit trends over time
- User growth metrics (both paid and free users)
diff --git a/sources/platform/actors/publishing/monetize/pricing_and_costs.mdx b/sources/platform/actors/publishing/monetize/pricing_and_costs.mdx
index 5546568b94..d3c14ed0fc 100644
--- a/sources/platform/actors/publishing/monetize/pricing_and_costs.mdx
+++ b/sources/platform/actors/publishing/monetize/pricing_and_costs.mdx
@@ -23,20 +23,21 @@ If your Actor uses tiered pricing, the user's discount tier determines the unit
The following table summarizes the platform unit costs used for your cost computation across different discount tiers.
-| Service (unit) | _FREE_ | _BRONZE_ | _SILVER_ | _GOLD_ |
-|:--------------------------------------|--------:|---------:|---------:|--------:|
-| Compute unit (per CU) | $0.2 | $0.2 | $0.16 | $0.13 |
-| Residential proxies (per GB) | $8 | $8 | $7.5 | $7 |
-| SERPs proxy (per 1,000 SERPs) | $2.5 | $2.5 | $2 | $1.7 |
-| Data transfer - external (per GB) | $0.2 | $0.2 | $0.19 | $0.18 |
-| Data transfer - internal (per GB) | $0.05 | $0.05 | $0.045 | $0.04 |
-| Dataset - reads (per 1,000 reads) | $0.0004 | $0.0004 | $0.00036 | $0.00032|
-| Dataset - writes (per 1,000 writes) | $0.005 | $0.005 | $0.0045 | $0.004 |
-| Key-value store - reads (per 1,000) | $0.005 | $0.005 | $0.0045 | $0.004 |
-| Key-value store - writes (per 1,000) | $0.05 | $0.05 | $0.045 | $0.04 |
-| Key-value store - lists (per 1,000) | $0.05 | $0.05 | $0.045 | $0.04 |
-| Request queue - reads (per 1,000) | $0.004 | $0.004 | $0.0036 | $0.0032 |
-| Request queue - writes (per 1,000) | $0.01 | $0.01 | $0.009 | $0.008 |
+| Service (unit) | _FREE_ | _BRONZE_ | _SILVER_ | _GOLD_ |
+|:-------------------------------------|--------:|---------:|---------:|---------:|
+| Compute unit (per CU) | $0.2 | $0.2 | $0.16 | $0.13 |
+| Residential proxies (per GB) | $8 | $8 | $7.5 | $7 |
+| SERPs proxy (per 1,000 SERPs) | $2.5 | $2.5 | $2 | $1.7 |
+| Web Unblocker (per 1,000 units) | $0.15 | $0.15 | $0.125 | $0.1 |
+| Data transfer - external (per GB) | $0.2 | $0.2 | $0.19 | $0.18 |
+| Data transfer - internal (per GB) | $0.05 | $0.05 | $0.045 | $0.04 |
+| Dataset - reads (per 1,000 reads) | $0.0004 | $0.0004 | $0.00036 | $0.00032 |
+| Dataset - writes (per 1,000 writes) | $0.005 | $0.005 | $0.0045 | $0.004 |
+| Key-value store - reads (per 1,000) | $0.005 | $0.005 | $0.0045 | $0.004 |
+| Key-value store - writes (per 1,000) | $0.05 | $0.05 | $0.045 | $0.04 |
+| Key-value store - lists (per 1,000) | $0.05 | $0.05 | $0.045 | $0.04 |
+| Request queue - reads (per 1,000) | $0.004 | $0.004 | $0.0036 | $0.0032 |
+| Request queue - writes (per 1,000) | $0.01 | $0.01 | $0.009 | $0.008 |
If you decide not to offer tiered discounts on your Actor, the unit prices for _FREE_ tier apply. To offer enterprise level services and unlock even cheaper unit prices for enterprise customers, please reach out to us.
diff --git a/sources/platform/actors/publishing/publish-task.mdx b/sources/platform/actors/publishing/publish-task.mdx
index 1841f33e03..64c960b61c 100644
--- a/sources/platform/actors/publishing/publish-task.mdx
+++ b/sources/platform/actors/publishing/publish-task.mdx
@@ -7,7 +7,7 @@ sidebar_position: 2
[Actor tasks](/platform/actors/running/tasks) are shareable, pre-configured inputs for your Actors. [Publishing a task](#publish-your-tasks) creates a public landing page that shows what the Actor does, what inputs it uses, and what output to expect. Public tasks also appear in your Actor's **Examples** tab, which helps users discover your Actor through search engines and AI agents. For monetized Actors, this can lead to more page views, more runs, and more revenue.
-You can create up to 50 tasks per Actor.
+You can publish up to 50 public tasks per Actor.
## Prerequisites
diff --git a/sources/platform/actors/publishing/publish.mdx b/sources/platform/actors/publishing/publish.mdx
index f3e2d3c109..f432e67dbf 100644
--- a/sources/platform/actors/publishing/publish.mdx
+++ b/sources/platform/actors/publishing/publish.mdx
@@ -17,7 +17,7 @@ Once you've finished coding and testing your Actor, it's time to publish it. Fol

-After filling in all the required fields, the **Publish to Store** button will turn green. Click on it to make your Actor available to the public on Apify Store.
+After filling in all the required fields, the **Publish on Store** button will turn green. Click on it to make your Actor available to the public on Apify Store.

diff --git a/sources/platform/actors/publishing/testing.mdx b/sources/platform/actors/publishing/testing.mdx
index fe6f0aa59d..b5671818dc 100644
--- a/sources/platform/actors/publishing/testing.mdx
+++ b/sources/platform/actors/publishing/testing.mdx
@@ -13,7 +13,7 @@ This helps us to flag Actors that temporarily don't work as expected `under main
## How we test
The test runs the Actor with its default input (defined by the [**prefill**](https://docs.apify.com/platform/actors/development/actor-definition/input-schema/specification/v1#prefill-vs-default-vs-required) option in the input schema file)
-and expects it to finish with a **Succeeded** status and non-empty default dataset within 5 minutes of the beginning of the run.
+and expects it to finish with a **Succeeded** status within 5 minutes of the beginning of the run.

diff --git a/sources/platform/actors/running/actor_standby.md b/sources/platform/actors/running/actor_standby.md
index 9cdfdc2454..f90285ae9a 100644
--- a/sources/platform/actors/running/actor_standby.md
+++ b/sources/platform/actors/running/actor_standby.md
@@ -12,14 +12,14 @@ in the background, waiting for the incoming HTTP requests. In a sense, the Actor
## How do I know if Standby mode is enabled
-You will know that the Actor is enabled for Standby mode if you see the **Standby** tab on the Actor's detail page.
+You will know that the Actor is enabled for Standby mode if you see the **Endpoints** tab on the Actor's detail page.
In the tab, you will find the hostname of the server, the description of the Actor's endpoints,
the parameters they accept, and what they return in the Actor README.
To use the Actor in Standby mode, you don't need to click a start button or not need to do anything else. Simply use the provided hostname and endpoint in your application,
hit the API endpoint and get results.
-
+
## How do I pass input to Actors in Standby mode
@@ -81,9 +81,7 @@ The Standby configuration currently consists of the following properties:
- **Idle timeout (seconds)** - If a Standby Actor run doesn’t receive any HTTP requests within this time, the system will terminate the run. When a new request arrives, the system might need to start a new Standby Actor run to handle it, which can take a few seconds. A higher idle timeout improves responsiveness but increases costs, as the Actor remains active for a longer period.
- **Build** - The Actor build that the runs of the Standby Actor will use. Can be either a build tag (e.g. `latest.`), or a build number (e.g. `0.1.2`).
-You can see these in the Standby tab of the Actor detail page. However, note that these properties are not configurable at the Actor level. If you wish to
-use the Actor-level hostname, this will always use the default configuration. To override this configuration, just create a new Task from the Actor.
-You can then head to the Standby tab of the created Task and modify the configuration as needed. Note that the task has a specific hostname, so make
+You can see these in the **Endpoints** tab of the Actor detail page. If you own the Actor, you can change these default settings in **Settings** > **Actor Standby**, and you can also prevent users from overriding them. Anyone using the Actor-level hostname always gets the Actor's default configuration. To use a custom configuration, create a new task from the Actor and modify its Standby configuration as needed. Note that the task has a specific hostname, so make
sure to use that in your application if you wish to use the custom configuration.
## Are the Standby runs billed differently
diff --git a/sources/platform/actors/running/runs_and_builds.md b/sources/platform/actors/running/runs_and_builds.md
index aab1249697..2189ea5f6d 100644
--- a/sources/platform/actors/running/runs_and_builds.md
+++ b/sources/platform/actors/running/runs_and_builds.md
@@ -58,16 +58,18 @@ To view what's happening while the Actor is running:
Both **Actor runs** and **builds** have the **Origin** field indicating how the Actor run or build was invoked, respectively. The origin is displayed in Apify Console and available via [API](https://docs.apify.com/api/v2/actor-run-get) in the `meta.origin` field.
-|Name|Origin|
-|:---|:---|
-|`DEVELOPMENT`|Manually from Apify Console in the Development mode (own Actor)|
-|`WEB`|Manually from Apify Console in "normal" mode (someone else's Actor or task)|
-|`API`|From [Apify API](https://docs.apify.com/api)|
-|`CLI`|From [Apify CLI](https://docs.apify.com/cli/)|
-|`SCHEDULER`|Using a schedule|
-|`WEBHOOK`|Using a webhook|
-|`ACTOR`|From another Actor run|
-|`STANDBY`|From [Actor Standby](./standby)|
+| Name | Origin |
+|:--------------|:----------------------------------------------------------------------------|
+| `DEVELOPMENT` | Manually from Apify Console in the Development mode (own Actor) |
+| `WEB` | Manually from Apify Console in "normal" mode (someone else's Actor or task) |
+| `API` | From [Apify API](https://docs.apify.com/api) |
+| `CLI` | From [Apify CLI](https://docs.apify.com/cli/) |
+| `CI` | From a continuous integration pipeline |
+| `SCHEDULER` | Using a schedule |
+| `WEBHOOK` | Using a webhook |
+| `ACTOR` | From another Actor run |
+| `STANDBY` | From [Actor Standby](./standby) |
+| `MCP` | From an MCP (Model Context Protocol) client |
## Lifecycle
@@ -119,7 +121,7 @@ You can abort a run in Apify Console using the **Abort** button or via API using
### Resurrection of finished run
-Any Actor run in a terminal state, i.e., run with status **FINISHED**, **FAILED**, **ABORTED**, and **TIMED-OUT**, might be resurrected back to a **RUNNING** state. This is helpful in many cases, for example, when the timeout for an Actor run was too low or in case of an unexpected error.
+Any Actor run in a terminal state, i.e., run with status **SUCCEEDED**, **FAILED**, **ABORTED**, and **TIMED-OUT**, might be resurrected back to a **RUNNING** state. This is helpful in many cases, for example, when the timeout for an Actor run was too low or in case of an unexpected error.
The whole process of resurrection looks as follows:
diff --git a/sources/platform/actors/running/store/reviews.mdx b/sources/platform/actors/running/store/reviews.mdx
index 4b4606a8f4..bbff842450 100644
--- a/sources/platform/actors/running/store/reviews.mdx
+++ b/sources/platform/actors/running/store/reviews.mdx
@@ -50,7 +50,7 @@ To report a review:
1. On a review, select **Options** > **Report**.
1. In **Reason for reporting**, select the right [category from a dropdown list](#reason-for-reporting).
-1. _(Optional)_ In **Additional details**, add a comment to the report.
+1. _(Optional)_ In **Details**, add a comment to the report.
1. Select **Submit**.
### Reasons for reporting a review {#reason-for-reporting}