{ "aid": "apify.com:main-1.0", "name": "Apify API", "type": "Index", "description": "\n> **UPDATE 2025-01-14:**\n> We have rolled out this new Apify API Documentation. In case of any issues, please [report here](https://github.com/apify/apify-docs/issues).\n > The old API Documentation is still [available here](https://docs.apify.com/api/v2-old).\n \nThe Apify API (version 2) provides programmatic access to the [Apify\nplatform](https://docs.apify.com). The API is organized\naround [RESTful](https://en.wikipedia.org/wiki/Representational_state_transfer)\n HTTP endpoints.\n\nYou can download the complete OpenAPI schema of Apify API in the [YAML](http://docs.apify.com/api/openapi.yaml) or [JSON](http://docs.apify.com/api/openapi.json) formats. The source code is also available on [GitHub](https://github.com/apify/apify-docs/tree/master/apify-api/openapi).\n \nAll requests and responses (including errors) are encoded in\n[JSON](http://www.json.org/) format with UTF-8 encoding,\nwith a few exceptions that are explicitly described in the reference.\n\nTo access the API using [Node.js](https://nodejs.org/en/), we recommend the\n[`apify-client`](https://docs.apify.com/api/client/js) [NPM\n package](https://www.npmjs.com/package/apify-client).\n\nTo access the API using [Python](https://www.python.org/), we recommend the\n[`apify-client`](https://docs.apify.com/api/client/python) [PyPI\npackage](https://pypi.org/project/apify-client/).\nThe clients' functions correspond to the API endpoints and have the same\nparameters. This simplifies development of apps that depend on the Apify\nplatform.\n\n**Note:** All requests with JSON payloads need to specify the `Content-Type:\napplication/json` HTTP header!\nAll API endpoints support the `method` query parameter that can override the\nHTTP method.\nFor example, if you want to call a POST endpoint using a GET request, simply\nadd the query parameter `method=POST` to the URL and send the GET request.\nThis feature is especially useful if you want to call Apify API endpoints\nfrom services that can only send GET requests.\n\n## Authentication\n \n\nYou can find your API token on the\n[Integrations](https://console.apify.com/account#/integrations) page in the\nApify Console.\n\nTo use your token in a request, either:\n\n- Add the token to your request's `Authorization` header as `Bearer `.\nE.g., `Authorization: Bearer xxxxxxx`.\n[More info](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization).\n (Recommended).\n- Add it as the `token` parameter to your request URL. (Less secure).\n \nUsing your token in the request header is more secure than using it as a URL\n parameter because URLs are often stored\nin browser history and server logs. This creates a chance for someone\nunauthorized to access your API token.\n\n**Do not share your API token or password with untrusted parties.**\n\nFor more information, see our\n[integrations](https://docs.apify.com/platform/integrations) documentation.\n \n## Basic usage\n\n\nTo run an Actor, send a POST request to the [Run\nActor](#/reference/actors/run-collection/run-actor) endpoint using either the\nActor ID code (e.g. `vKg4IjxZbEYTYeW8T`) or its name (e.g.\n`janedoe~my-actor`):\n\n`https://api.apify.com/v2/acts/[actor_id]/runs`\n \nIf the Actor is not runnable anonymously, you will receive a 401 or 403\n[response code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status).\nThis means you need to add your [secret API\ntoken](https://console.apify.com/account#/integrations) to the request's\n`Authorization` header ([recommended](#/introduction/authentication)) or as a\nURL query parameter `?token=[your_token]` (less secure).\n\nOptionally, you can include the query parameters described in the [Run\nActor](#/reference/actors/run-collection/run-actor) section to customize your\nrun.\n\nIf you're using Node.js, the best way to run an Actor is using the\n`Apify.call()` method from the [Apify\nSDK](https://sdk.apify.com/docs/api/apify#apifycallactid-input-options). It\nruns the Actor using the account you are currently logged into (determined\n by the [secret API token](https://console.apify.com/account#/integrations)).\n The result is an [Actor run\nobject](https://sdk.apify.com/docs/typedefs/actor-run) and its output (if\nany).\n\nA typical workflow is as follows:\n\n1. Run an Actor or task using the [Run\nActor](#/reference/actors/run-collection/run-actor) or [Run\ntask](#/reference/actor-tasks/run-collection/run-task) API endpoints.\n 2. Monitor the Actor run by periodically polling its progress using the [Get\n run](#/reference/actor-runs/run-object-and-its-storages/get-run) API\nendpoint.\n 3. Fetch the results from the [Get\nitems](#/reference/datasets/item-collection/get-items) API endpoint using the\n`defaultDatasetId`, which you receive in the Run request response.\nAdditional data may be stored in a key-value store. You can fetch them from\nthe [Get record](#/reference/key-value-stores/record/get-record) API endpoint\n using the `defaultKeyValueStoreId` and the store's `key`.\n\n**Note**: Instead of periodic polling, you can also run your\n[Actor](#/reference/actors/run-actor-synchronously) or\n[task](#/reference/actor-tasks/runs-collection/run-task-synchronously)\nsynchronously. This will ensure that the request waits for 300 seconds (5\nminutes) for the run to finish and returns its output. If the run takes\nlonger, the request will time out and throw an error.\n\n## Response structure\n\n\nMost API endpoints return a JSON object with the `data` property:\n\n```\n{\n \"data\": {\n ...\n }\n}\n```\n\nHowever, there are a few explicitly described exceptions, such as\nDataset [Get items](#/reference/datasets/item-collection/get-items) or\nKey-value store [Get record](#/reference/key-value-stores/record/get-record)\n API endpoints, which return data in other formats.\nIn case of an error, the response has the HTTP status code in the range of\n4xx or 5xx and the `data` property is replaced with `error`. For example:\n\n```\n{\n \"error\": {\n \"type\": \"record-not-found\",\n \"message\": \"Store was not found.\"\n }\n }\n```\n\nSee [Errors](#/introduction/errors) for more details.\n\n## Pagination\n \n\nAll API endpoints that return a list of records\n(e.g. [Get list of\nActors](#/reference/actors/actor-collection/get-list-of-actors))\n enforce pagination in order to limit the size of their responses.\n\nMost of these API endpoints are paginated using the `offset` and `limit`\nquery parameters.\n The only exception is [Get list of\nkeys](#/reference/key-value-stores/key-collection/get-list-of-keys),\n which is paginated using the `exclusiveStartKey` query parameter.\n\n**IMPORTANT**: Each API endpoint that supports pagination enforces a certain\nmaximum value for the `limit` parameter,\nin order to reduce the load on Apify servers.\nThe maximum limit could change in future so you should never\nrely on a specific value and check the responses of these API endpoints.\n\n### Using offset\n\n\nMost API endpoints that return a list of records enable pagination using the\nfollowing query parameters:\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n
limitLimits the response to contain a specific maximum number of items, e.g. limit=20.
offsetSkips a number of items from the beginning of the list, e.g. offset=100.
desc\n By default, items are sorted in the order in which they were created or added to the list.\n This feature is useful when fetching all the items, because it ensures that items\n created after the client started the pagination will not be skipped.\n If you specify the desc=1 parameter, the items will be returned in the reverse order,\n i.e. from the newest to the oldest items.\n
\n\nThe response of these API endpoints is always a JSON object with the\nfollowing structure:\n\n```\n{\n \"data\": {\n \"total\": 2560,\n \"offset\": 250,\n \"limit\": 1000,\n \"count\": 1000,\n \"desc\": false,\n \"items\": [\n { 1st object },\n { 2nd object },\n ...\n { 1000th object }\n ]\n }\n}\n```\n\nThe following table describes the meaning of the response properties:\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
PropertyDescription
totalThe total number of items available in the list.
offsetThe number of items that were skipped at the start.\n This is equal to the offset query parameter if it was provided, otherwise it is 0.
limitThe maximum number of items that can be returned in the HTTP response.\n It equals to the limit query parameter if it was provided or\n the maximum limit enforced for the particular API endpoint, whichever is smaller.
countThe actual number of items returned in the HTTP response.
desctrue if data were requested in descending order and false otherwise.
itemsAn array of requested items.
\n\n### Using key\n\n\nThe records in the [key-value\n store](https://docs.apify.com/platform/storage/key-value-store)\nare not ordered based on numerical indexes,\nbut rather by their keys in the UTF-8 binary order.\n Therefore the [Get list of\nkeys](#/reference/key-value-stores/key-collection/get-list-of-keys)\n API endpoint only supports pagination using the following query parameters:\n\n\n \n \n \n \n \n \n \n \n
limitLimits the response to contain a specific maximum number items, e.g. limit=20.
exclusiveStartKeySkips all records with keys up to the given key including the given key,\n in the UTF-8 binary order.
\n\nThe response of the API endpoint is always a JSON object with following\nstructure:\n\n```\n{\n \"data\": {\n \"limit\": 1000,\n \"isTruncated\": true,\n \"exclusiveStartKey\" : \"my-key\",\n \"nextExclusiveStartKey\": \"some-other-key\",\n \"items\": [\n { 1st object },\n { 2nd object },\n ...\n { 1000th object }\n ]\n }\n}\n```\n\nThe following table describes the meaning of the response properties:\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
PropertyDescription
limitThe maximum number of items that can be returned in the HTTP response.\n It equals to the limit query parameter if it was provided or\n the maximum limit enforced for the particular endpoint, whichever is smaller.
isTruncatedtrue if there are more items left to be queried. Otherwise false.
exclusiveStartKeyThe last key that was skipped at the start. Is `null` for the first page.
nextExclusiveStartKeyThe value for the exclusiveStartKey parameter to query the next page of items.
\n\n## Errors\n\n\nThe Apify API uses common HTTP status codes: `2xx` range for success, `4xx`\nrange for errors caused by the caller\n(invalid requests) and `5xx` range for server errors (these are rare).\nEach error response contains a JSON object defining the `error` property,\nwhich is an object with\nthe `type` and `message` properties that contain the error code and a\nhuman-readable error description, respectively.\n\nFor example:\n\n```\n{\n \"error\": {\n \"type\": \"record-not-found\",\n \"message\": \"Store was not found.\"\n }\n}\n ```\n\nHere is the table of the most common errors that can occur for many API\nendpoints:\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
statustypemessage
400invalid-requestPOST data must be a JSON object
400invalid-valueInvalid value provided: Comments required
400invalid-record-keyRecord key contains invalid character
401token-not-providedAuthentication token was not provided
404record-not-foundStore was not found
429rate-limit-exceededYou have exceeded the rate limit of 30 requests per second
405method-not-allowedThis API endpoint can only be accessed using the following HTTP methods: OPTIONS, POST
\n \n## Rate limiting\n\n\nAll API endpoints limit the rate of requests in order to prevent overloading of Apify servers by misbehaving clients.\n\nThere are two kinds of rate limits - a global rate limit and a per-resource rate limit.\n\n### Global rate limit\n\n\nThe global rate limit is set to _250 000 requests per minute_.\nFor [authenticated](#/introduction/authentication) requests, it is counted per user,\nand for unauthenticated requests, it is counted per IP address.\n\n### Per-resource rate limit\n\n\nThe default per-resource rate limit is _30 requests per second per resource_, which in this context means a single Actor, a single Actor run, a single dataset, single key-value store etc.\nThe default rate limit is applied to every API endpoint except a few select ones, which have higher rate limits.\nEach API endpoint returns its rate limit in `X-RateLimit-Limit` header.\n\nThese endpoints have a rate limit of _100 requests per second per resource_:\n\n* CRUD ([get](#/reference/key-value-stores/record/get-record),\n [put](#/reference/key-value-stores/record/put-record),\n [delete](#/reference/key-value-stores/record/delete-record))\n operations on key-value store records\n\nThese endpoints have a rate limit of _200 requests per second per resource_:\n* [Run Actor](#/reference/actors/run-collection/run-actor)\n * [Run Actor task asynchronously](#/reference/actor-tasks/runs-collection/run-task-asynchronously)\n * [Run Actor task synchronously](#/reference/actor-tasks/runs-collection/run-task-synchronously)\n * [Metamorph Actor run](#/reference/actors/metamorph-run/metamorph-run)\n* [Push items](#/reference/datasets/item-collection/put-items) to dataset\n* CRUD\n ([add](#/reference/request-queues/request-collection/add-request),\n [get](#/reference/request-queues/request-collection/get-request),\n [update](#/reference/request-queues/request-collection/update-request),\n [delete](#/reference/request-queues/request-collection/delete-request))\n operations on requests in request queues\n\n### Rate limit exceeded errors\n \n\n If the client is sending too many requests, the API endpoints respond with the HTTP status code `429 Too Many Requests`\nand the following body:\n\n```\n{\n \"error\": {\n \"type\": \"rate-limit-exceeded\",\n \"message\": \"You have exceeded the rate limit of ... requests per second\"\n }\n}\n ```\n\n### Retrying rate-limited requests with exponential backoff\n\n\nIf the client receives the rate limit error, it should wait a certain period of time and then retry the request.\nIf the error happens again, the client should double the wait period and retry the request,\nand so on. This algorithm is known as _exponential backoff_\nand it can be described using the following pseudo-code:\n\n1. Define a variable `DELAY=500`\n2. Send the HTTP request to the API endpoint\n3. If the response has status code not equal to `429` then you are done. Otherwise:\n * Wait for a period of time chosen randomly from the interval `DELAY` to `2*DELAY` milliseconds\n * Double the future wait period by setting `DELAY = 2*DELAY`\n * Continue with step 2\n\nIf all requests sent by the client implement the above steps,\nthe client will automatically use the maximum available bandwidth for its requests.\n\nNote that the Apify API clients [for JavaScript](https://docs.apify.com/api/client/js)\nand [for Python](https://docs.apify.com/api/client/python)\n use the exponential backoff algorithm transparently, so that you do not need to worry about it.\n\n## Referring to resources\n\n\nThere are three main ways to refer to a resource you're accessing via API.\n\n- the resource ID (e.g. `iKkPcIgVvwmztduf8`)\n- `username~resourcename` - when using this access method, you will need to\nuse your API token, and access will only work if you have the correct\npermissions.\n- `~resourcename` - for this, you need to use an API token, and the\n`resourcename` refers to a resource in the API token owner's account.\n", "url": "https://raw.githubusercontent.com/jentic/jentic-public-apis/refs/heads/main/apis/openapi/apify.com/main/1.0/apis.json", "tags": [ "apify.com", "main", "published" ], "baseUrl": "https://api.apify.com", "created": "2025-12-16", "modified": "2025-12-16", "specificationVersion": "0.19", "access": "3rd-Party", "maintainers": [ { "fn": "Jentic", "x-github": "jentic", "url": "https://github.com/jentic" } ], "apis": [ { "aid": "apify.com:main-1.0", "name": "Apify API", "description": "\n> **UPDATE 2025-01-14:**\n> We have rolled out this new Apify API Documentation. In case of any issues, please [report here](https://github.com/apify/apify-docs/issues).\n > The old API Documentation is still [available here](https://docs.apify.com/api/v2-old).\n \nThe Apify API (version 2) provides programmatic access to the [Apify\nplatform](https://docs.apify.com). The API is organized\naround [RESTful](https://en.wikipedia.org/wiki/Representational_state_transfer)\n HTTP endpoints.\n\nYou can download the complete OpenAPI schema of Apify API in the [YAML](http://docs.apify.com/api/openapi.yaml) or [JSON](http://docs.apify.com/api/openapi.json) formats. The source code is also available on [GitHub](https://github.com/apify/apify-docs/tree/master/apify-api/openapi).\n \nAll requests and responses (including errors) are encoded in\n[JSON](http://www.json.org/) format with UTF-8 encoding,\nwith a few exceptions that are explicitly described in the reference.\n\nTo access the API using [Node.js](https://nodejs.org/en/), we recommend the\n[`apify-client`](https://docs.apify.com/api/client/js) [NPM\n package](https://www.npmjs.com/package/apify-client).\n\nTo access the API using [Python](https://www.python.org/), we recommend the\n[`apify-client`](https://docs.apify.com/api/client/python) [PyPI\npackage](https://pypi.org/project/apify-client/).\nThe clients' functions correspond to the API endpoints and have the same\nparameters. This simplifies development of apps that depend on the Apify\nplatform.\n\n**Note:** All requests with JSON payloads need to specify the `Content-Type:\napplication/json` HTTP header!\nAll API endpoints support the `method` query parameter that can override the\nHTTP method.\nFor example, if you want to call a POST endpoint using a GET request, simply\nadd the query parameter `method=POST` to the URL and send the GET request.\nThis feature is especially useful if you want to call Apify API endpoints\nfrom services that can only send GET requests.\n\n## Authentication\n \n\nYou can find your API token on the\n[Integrations](https://console.apify.com/account#/integrations) page in the\nApify Console.\n\nTo use your token in a request, either:\n\n- Add the token to your request's `Authorization` header as `Bearer `.\nE.g., `Authorization: Bearer xxxxxxx`.\n[More info](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization).\n (Recommended).\n- Add it as the `token` parameter to your request URL. (Less secure).\n \nUsing your token in the request header is more secure than using it as a URL\n parameter because URLs are often stored\nin browser history and server logs. This creates a chance for someone\nunauthorized to access your API token.\n\n**Do not share your API token or password with untrusted parties.**\n\nFor more information, see our\n[integrations](https://docs.apify.com/platform/integrations) documentation.\n \n## Basic usage\n\n\nTo run an Actor, send a POST request to the [Run\nActor](#/reference/actors/run-collection/run-actor) endpoint using either the\nActor ID code (e.g. `vKg4IjxZbEYTYeW8T`) or its name (e.g.\n`janedoe~my-actor`):\n\n`https://api.apify.com/v2/acts/[actor_id]/runs`\n \nIf the Actor is not runnable anonymously, you will receive a 401 or 403\n[response code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status).\nThis means you need to add your [secret API\ntoken](https://console.apify.com/account#/integrations) to the request's\n`Authorization` header ([recommended](#/introduction/authentication)) or as a\nURL query parameter `?token=[your_token]` (less secure).\n\nOptionally, you can include the query parameters described in the [Run\nActor](#/reference/actors/run-collection/run-actor) section to customize your\nrun.\n\nIf you're using Node.js, the best way to run an Actor is using the\n`Apify.call()` method from the [Apify\nSDK](https://sdk.apify.com/docs/api/apify#apifycallactid-input-options). It\nruns the Actor using the account you are currently logged into (determined\n by the [secret API token](https://console.apify.com/account#/integrations)).\n The result is an [Actor run\nobject](https://sdk.apify.com/docs/typedefs/actor-run) and its output (if\nany).\n\nA typical workflow is as follows:\n\n1. Run an Actor or task using the [Run\nActor](#/reference/actors/run-collection/run-actor) or [Run\ntask](#/reference/actor-tasks/run-collection/run-task) API endpoints.\n 2. Monitor the Actor run by periodically polling its progress using the [Get\n run](#/reference/actor-runs/run-object-and-its-storages/get-run) API\nendpoint.\n 3. Fetch the results from the [Get\nitems](#/reference/datasets/item-collection/get-items) API endpoint using the\n`defaultDatasetId`, which you receive in the Run request response.\nAdditional data may be stored in a key-value store. You can fetch them from\nthe [Get record](#/reference/key-value-stores/record/get-record) API endpoint\n using the `defaultKeyValueStoreId` and the store's `key`.\n\n**Note**: Instead of periodic polling, you can also run your\n[Actor](#/reference/actors/run-actor-synchronously) or\n[task](#/reference/actor-tasks/runs-collection/run-task-synchronously)\nsynchronously. This will ensure that the request waits for 300 seconds (5\nminutes) for the run to finish and returns its output. If the run takes\nlonger, the request will time out and throw an error.\n\n## Response structure\n\n\nMost API endpoints return a JSON object with the `data` property:\n\n```\n{\n \"data\": {\n ...\n }\n}\n```\n\nHowever, there are a few explicitly described exceptions, such as\nDataset [Get items](#/reference/datasets/item-collection/get-items) or\nKey-value store [Get record](#/reference/key-value-stores/record/get-record)\n API endpoints, which return data in other formats.\nIn case of an error, the response has the HTTP status code in the range of\n4xx or 5xx and the `data` property is replaced with `error`. For example:\n\n```\n{\n \"error\": {\n \"type\": \"record-not-found\",\n \"message\": \"Store was not found.\"\n }\n }\n```\n\nSee [Errors](#/introduction/errors) for more details.\n\n## Pagination\n \n\nAll API endpoints that return a list of records\n(e.g. [Get list of\nActors](#/reference/actors/actor-collection/get-list-of-actors))\n enforce pagination in order to limit the size of their responses.\n\nMost of these API endpoints are paginated using the `offset` and `limit`\nquery parameters.\n The only exception is [Get list of\nkeys](#/reference/key-value-stores/key-collection/get-list-of-keys),\n which is paginated using the `exclusiveStartKey` query parameter.\n\n**IMPORTANT**: Each API endpoint that supports pagination enforces a certain\nmaximum value for the `limit` parameter,\nin order to reduce the load on Apify servers.\nThe maximum limit could change in future so you should never\nrely on a specific value and check the responses of these API endpoints.\n\n### Using offset\n\n\nMost API endpoints that return a list of records enable pagination using the\nfollowing query parameters:\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n
limitLimits the response to contain a specific maximum number of items, e.g. limit=20.
offsetSkips a number of items from the beginning of the list, e.g. offset=100.
desc\n By default, items are sorted in the order in which they were created or added to the list.\n This feature is useful when fetching all the items, because it ensures that items\n created after the client started the pagination will not be skipped.\n If you specify the desc=1 parameter, the items will be returned in the reverse order,\n i.e. from the newest to the oldest items.\n
\n\nThe response of these API endpoints is always a JSON object with the\nfollowing structure:\n\n```\n{\n \"data\": {\n \"total\": 2560,\n \"offset\": 250,\n \"limit\": 1000,\n \"count\": 1000,\n \"desc\": false,\n \"items\": [\n { 1st object },\n { 2nd object },\n ...\n { 1000th object }\n ]\n }\n}\n```\n\nThe following table describes the meaning of the response properties:\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
PropertyDescription
totalThe total number of items available in the list.
offsetThe number of items that were skipped at the start.\n This is equal to the offset query parameter if it was provided, otherwise it is 0.
limitThe maximum number of items that can be returned in the HTTP response.\n It equals to the limit query parameter if it was provided or\n the maximum limit enforced for the particular API endpoint, whichever is smaller.
countThe actual number of items returned in the HTTP response.
desctrue if data were requested in descending order and false otherwise.
itemsAn array of requested items.
\n\n### Using key\n\n\nThe records in the [key-value\n store](https://docs.apify.com/platform/storage/key-value-store)\nare not ordered based on numerical indexes,\nbut rather by their keys in the UTF-8 binary order.\n Therefore the [Get list of\nkeys](#/reference/key-value-stores/key-collection/get-list-of-keys)\n API endpoint only supports pagination using the following query parameters:\n\n\n \n \n \n \n \n \n \n \n
limitLimits the response to contain a specific maximum number items, e.g. limit=20.
exclusiveStartKeySkips all records with keys up to the given key including the given key,\n in the UTF-8 binary order.
\n\nThe response of the API endpoint is always a JSON object with following\nstructure:\n\n```\n{\n \"data\": {\n \"limit\": 1000,\n \"isTruncated\": true,\n \"exclusiveStartKey\" : \"my-key\",\n \"nextExclusiveStartKey\": \"some-other-key\",\n \"items\": [\n { 1st object },\n { 2nd object },\n ...\n { 1000th object }\n ]\n }\n}\n```\n\nThe following table describes the meaning of the response properties:\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
PropertyDescription
limitThe maximum number of items that can be returned in the HTTP response.\n It equals to the limit query parameter if it was provided or\n the maximum limit enforced for the particular endpoint, whichever is smaller.
isTruncatedtrue if there are more items left to be queried. Otherwise false.
exclusiveStartKeyThe last key that was skipped at the start. Is `null` for the first page.
nextExclusiveStartKeyThe value for the exclusiveStartKey parameter to query the next page of items.
\n\n## Errors\n\n\nThe Apify API uses common HTTP status codes: `2xx` range for success, `4xx`\nrange for errors caused by the caller\n(invalid requests) and `5xx` range for server errors (these are rare).\nEach error response contains a JSON object defining the `error` property,\nwhich is an object with\nthe `type` and `message` properties that contain the error code and a\nhuman-readable error description, respectively.\n\nFor example:\n\n```\n{\n \"error\": {\n \"type\": \"record-not-found\",\n \"message\": \"Store was not found.\"\n }\n}\n ```\n\nHere is the table of the most common errors that can occur for many API\nendpoints:\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
statustypemessage
400invalid-requestPOST data must be a JSON object
400invalid-valueInvalid value provided: Comments required
400invalid-record-keyRecord key contains invalid character
401token-not-providedAuthentication token was not provided
404record-not-foundStore was not found
429rate-limit-exceededYou have exceeded the rate limit of 30 requests per second
405method-not-allowedThis API endpoint can only be accessed using the following HTTP methods: OPTIONS, POST
\n \n## Rate limiting\n\n\nAll API endpoints limit the rate of requests in order to prevent overloading of Apify servers by misbehaving clients.\n\nThere are two kinds of rate limits - a global rate limit and a per-resource rate limit.\n\n### Global rate limit\n\n\nThe global rate limit is set to _250 000 requests per minute_.\nFor [authenticated](#/introduction/authentication) requests, it is counted per user,\nand for unauthenticated requests, it is counted per IP address.\n\n### Per-resource rate limit\n\n\nThe default per-resource rate limit is _30 requests per second per resource_, which in this context means a single Actor, a single Actor run, a single dataset, single key-value store etc.\nThe default rate limit is applied to every API endpoint except a few select ones, which have higher rate limits.\nEach API endpoint returns its rate limit in `X-RateLimit-Limit` header.\n\nThese endpoints have a rate limit of _100 requests per second per resource_:\n\n* CRUD ([get](#/reference/key-value-stores/record/get-record),\n [put](#/reference/key-value-stores/record/put-record),\n [delete](#/reference/key-value-stores/record/delete-record))\n operations on key-value store records\n\nThese endpoints have a rate limit of _200 requests per second per resource_:\n* [Run Actor](#/reference/actors/run-collection/run-actor)\n * [Run Actor task asynchronously](#/reference/actor-tasks/runs-collection/run-task-asynchronously)\n * [Run Actor task synchronously](#/reference/actor-tasks/runs-collection/run-task-synchronously)\n * [Metamorph Actor run](#/reference/actors/metamorph-run/metamorph-run)\n* [Push items](#/reference/datasets/item-collection/put-items) to dataset\n* CRUD\n ([add](#/reference/request-queues/request-collection/add-request),\n [get](#/reference/request-queues/request-collection/get-request),\n [update](#/reference/request-queues/request-collection/update-request),\n [delete](#/reference/request-queues/request-collection/delete-request))\n operations on requests in request queues\n\n### Rate limit exceeded errors\n \n\n If the client is sending too many requests, the API endpoints respond with the HTTP status code `429 Too Many Requests`\nand the following body:\n\n```\n{\n \"error\": {\n \"type\": \"rate-limit-exceeded\",\n \"message\": \"You have exceeded the rate limit of ... requests per second\"\n }\n}\n ```\n\n### Retrying rate-limited requests with exponential backoff\n\n\nIf the client receives the rate limit error, it should wait a certain period of time and then retry the request.\nIf the error happens again, the client should double the wait period and retry the request,\nand so on. This algorithm is known as _exponential backoff_\nand it can be described using the following pseudo-code:\n\n1. Define a variable `DELAY=500`\n2. Send the HTTP request to the API endpoint\n3. If the response has status code not equal to `429` then you are done. Otherwise:\n * Wait for a period of time chosen randomly from the interval `DELAY` to `2*DELAY` milliseconds\n * Double the future wait period by setting `DELAY = 2*DELAY`\n * Continue with step 2\n\nIf all requests sent by the client implement the above steps,\nthe client will automatically use the maximum available bandwidth for its requests.\n\nNote that the Apify API clients [for JavaScript](https://docs.apify.com/api/client/js)\nand [for Python](https://docs.apify.com/api/client/python)\n use the exponential backoff algorithm transparently, so that you do not need to worry about it.\n\n## Referring to resources\n\n\nThere are three main ways to refer to a resource you're accessing via API.\n\n- the resource ID (e.g. `iKkPcIgVvwmztduf8`)\n- `username~resourcename` - when using this access method, you will need to\nuse your API token, and access will only work if you have the correct\npermissions.\n- `~resourcename` - for this, you need to use an API token, and the\n`resourcename` refers to a resource in the API token owner's account.\n", "version": "1.0", "tags": [ "apify.com", "main", "published" ], "properties": [ { "type": "OpenAPI", "name": "OpenAPI definition", "url": "https://raw.githubusercontent.com/jentic/jentic-public-apis/refs/heads/main/apis/openapi/apify.com/main/1.0/openapi.json", "mediaType": "application/openapi+json" }, { "type": "GitHubRepo", "url": "https://github.com/jentic/jentic-public-apis/tree/main/apis/openapi/apify.com/main/1.0" } ] } ] }