Apify Last Actor run's log API
The API endpoint described in this section is convenience endpoint that provides access to last Actor run's log. Same as of functionality described in: [Logs](/api/v2/logs)
The API endpoint described in this section is convenience endpoint that provides access to last Actor run's log. Same as of functionality described in: [Logs](/api/v2/logs)
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/apify:apify-last-actor-run-s-log-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Apify Last Actor run's log API
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0.html
description: 'The Apify API (version 2) provides programmatic access to the Apify
platform. The API is organized
around RESTful
HTTP endpoints. You can download the complete OpenAPI schema of Apify API in the YAML or JSON formats. The source code is also available on GitHub. All requests and responses (including errors) are encoded in
JSON format with UTF-8 encoding,
with a few exceptions that are explicitly described in the reference. To access the API, we recommend using one of our API clients:
Stable API clients:
- For Node.js, we recommend the `apify-client` NPM
package. - For Python, we recommend the `apify-client` PyPI
package. Experimental API clients:
- For Java, we recommend the `apify-client` Maven central component. - For Rust, we recommend the `apify-client` crate. - For .NET, we recommend the `apify-client` Nuget package. - For PHP, we recommend the `apify-client` Packagist package. - For Go, we recommend the `apify-client` package. The clients'' functions correspond to the API endpoints and have the same
parameters. This simplifies development of apps that depend on the Apify
platform. :::note Important Request Details
- `Content-Type` header: For requests with a JSON body, you must include the `Content-Type: application/json` header. - Method override: You can override the HTTP method using the `method` query parameter. This is useful for clients that can only send `GET` requests. For example, to call a `POST` endpoint, append `?method=POST` to the URL of your `GET` request. :::
## Authentication
**You can find your API token on the
Integrations page in the
Apify Console.**
To use your token in a request, either:
- Add the token to your request''s `Authorization` header as `Bearer `. E.g., `Authorization: Bearer xxxxxxx`. More info. (Recommended). - Add it as the `token` parameter to your request URL. (Less secure). Using your token in the request header is more secure than using it as a URL
parameter because URLs are often stored
in browser history and server logs. This creates a chance for someone
unauthorized to access your API token. **Never share your API token or password with untrusted parties!**
For more information, see our
integrations documentation. ### Agentic payments
AI agents can authenticate and pay for Actor runs without an Apify account
using agentic payments. Instead of an API token, the request carries a
payment credential that both authorizes and pays for the call. Apify supports
the x402 protocol
(`PAYMENT-SIGNATURE` header) and
Skyfire
(`skyfire-pay-id` header). ## Basic usage
To run an Actor, send a POST request to the Run
Actor endpoint using either the
Actor ID code (e.g. `vKg4IjxZbEYTYeW8T`) or its name (e.g. `janedoe~my-actor`):
`https://api.apify.com/v2/actors/[actor_id]/runs`
If the Actor is not runnable anonymously, you will receive a 401 or 403
response code. This means you need to add your secret API
token to the request''s
`Authorization` header (recommended) or as a
URL query parameter `?token=[your_token]` (less secure). Optionally, you can include the query parameters described in the Run
Actor section to customize your
run. If you''re using Node.js, the best way to run an Actor is using the
`Apify.call()` method from the Apify
SDK. It
runs the Actor using the account you are currently logged into (determined
by the secret API token). The result is an Actor run
object and its output (if
any). A typical workflow is as follows:
1. Run an Actor or task using the Run
Actor or Run
task API endpoints. 2. Monitor the Actor run by periodically polling its progress using the Get
run API
endpoint. 3. Fetch the results from the Get
items API endpoint using the
`defaultDatasetId`, which you receive in the Run request response. Additional data may be stored in a key-value store. You can fetch them from
the Get record API endpoint
using the `defaultKeyValueStoreId` and the store''s `key`. **Note**: Instead of periodic polling, you can also run your
Actor or
task
synchronously.'
contact: {}
version: v2-2026-10-08T073338Z
servers:
- url: https://api.apify.com
variables: {}
security:
- httpBearer: []
- apiKey: []
tags:
- name: Last Actor run's log
x-displayName: Last Actor run's log
description: 'The API endpoint described in this section is convenience endpoint that provides access to last Actor run''s log.
Same as of functionality described in: Logs'
paths:
/v2/actors/{actorId}/runs/last/log:
get:
responses:
'200':
description: ''
headers: {}
content:
text/plain:
schema:
type: string
example: '2017-07-14T06:00:49.733Z Application started.
2017-07-14T06:00:49.741Z Input: { test: 123 }
2017-07-14T06:00:49.752Z Some useful debug information follows.
'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'405':
$ref: '#/components/responses/MethodNotAllowed'
'429':
$ref: '#/components/responses/TooManyRequests'
deprecated: false
tags:
- Last Actor run's log
summary: Get last Actor run's log
description: 'Retrieves last Actor run''s logs.
This endpoint is a shortcut for getting last Actor run''s log. Same as Get log endpoint.'
operationId: actor_runs_last_log_get
parameters:
- $ref: '#/components/parameters/actorId'
- $ref: '#/components/parameters/status-2'
- $ref: '#/components/parameters/origin'
- $ref: '#/components/parameters/stream'
- $ref: '#/components/parameters/download'
- $ref: '#/components/parameters/raw'
components:
responses:
Unauthorized:
description: Unauthorized - authentication required or invalid token.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
type: invalid-token
message: Authentication token is not valid.
Forbidden:
description: Forbidden - insufficient permissions to perform this action.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
type: insufficient-permissions
message: You do not have permission to perform this action.
NotFound:
description: Not found - the requested resource does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
type: record-not-found
message: The requested resource was not found.
BadRequest:
description: Bad request - invalid input parameters or request body.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
type: invalid-input
message: 'Invalid input: The request body contains invalid data.'
MethodNotAllowed:
description: Method not allowed.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
type: method-not-allowed
message: 'This API end-point can only be accessed using the following HTTP methods: OPTIONS,GET'
TooManyRequests:
description: Too many requests - rate limit exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
type: rate-limit-exceeded
message: You have exceeded the rate limit. Please try again later.
parameters:
stream:
name: stream
in: query
description: 'If `true` or `1` then the logs will be streamed as long as the run or build is running.
'
required: false
style: form
explode: true
schema:
type: boolean
example: false
actorId:
name: actorId
in: path
description: Actor ID or the username of the Actor owner and the Actor name, separated by a tilde (`~`).
required: true
style: simple
schema:
type: string
example: compass~google-maps-extractor
raw:
name: raw
in: query
description: 'If `true` or `1`, the logs will be kept verbatim. By default, the API removes
ANSI escape codes from the logs, keeping only printable characters.
'
required: false
style: form
explode: true
schema:
type: boolean
example: false
origin:
name: origin
in: query
description: Filter for the run origin, i.e. the means by which the run was started.
style: form
explode: true
schema:
$ref: '#/components/schemas/RunOrigin'
download:
name: download
in: query
description: 'If `true` or `1` then the web browser will download the log file rather than open it in a tab.
'
required: false
style: form
explode: true
schema:
type: boolean
example: false
status-2:
name: status
in: query
description: Filter for the run status.
style: form
explode: true
schema:
type: string
example: SUCCEEDED
schemas:
ErrorDetail:
title: ErrorDetail
type: object
properties:
type:
$ref: '#/components/schemas/ErrorType'
message:
type: string
description: Human-readable error message describing what went wrong.
RunOrigin:
title: RunOrigin
type: string
enum:
- DEVELOPMENT
- WEB
- API
- SCHEDULER
- TEST
- WEBHOOK
- ACTOR
- CLI
- CI
- STANDBY
- MCP
ErrorType:
title: ErrorType
type: string
description: Machine-processable error type identifier.
enum:
- 3d-secure-auth-failed
- access-right-already-exists
- action-not-found
- actor-already-rented
- actor-can-not-be-rented
- actor-disabled
- actor-is-not-rented
- actor-memory-limit-exceeded
- actor-name-exists-new-owner
- actor-name-not-unique
- actor-not-found
- actor-not-github-actor
- actor-not-public
- actor-permission-level-not-supported-for-agentic-payments
- actor-review-already-exists
- actor-run-failed
- actor-standby-not-supported-for-agentic-payments
- actor-task-name-not-unique
- agentic-payment-info-retrieval-error
- agentic-payment-information-missing
- agentic-payment-insufficient-amount
- agentic-payment-provider-internal-error
- agentic-payment-provider-unauthorized
- airtable-webhook-deprecated
- already-subscribed-to-paid-actor
- apify-plan-required-to-use-paid-actor
- apify-signup-not-allowed
- auth-method-not-supported
- authorization-server-not-found
- auto-issue-date-invalid
- background-check-required
- billing-system-error
- black-friday-plan-expired
- braintree-error
- braintree-not-linked
- braintree-operation-timed-out
- braintree-unsupported-currency
- build-not-found
- build-outdated
- cannot-add-apify-events-to-ppe-actor
- cannot-add-multiple-pricing-infos
- cannot-add-pricing-info-that-alters-past
- cannot-add-second-future-pricing-info
- cannot-build-actor-from-webhook
- cannot-change-billing-interval
- cannot-change-owner
- cannot-charge-apify-event
- cannot-charge-non-pay-per-event-actor
- cannot-comment-as-other-user
- cannot-copy-actor-task
- cannot-create-payout
- cannot-create-public-actor
- cannot-create-tax-transaction
- cannot-delete-critical-actor
- cannot-delete-invoice
- cannot-delete-paid-actor
- cannot-disable-one-time-event-for-apify-start-event
- cannot-disable-organization-with-enabled-members
- cannot-disable-user-with-subscription
- cannot-link-oauth-to-unverified-email
- cannot-metamorph-to-pay-per-result-actor
- cannot-modify-actor-pricing-too-frequently
- cannot-modify-actor-pricing-with-immediate-effect
- cannot-monetize-without-payout-billing-info
- cannot-override-paid-actor-trial
- cannot-permanently-delete-subscription
- cannot-publish-actor
- cannot-publish-actor-task
- cannot-reduce-last-full-token
- cannot-reimburse-more-than-original-charge
- cannot-reimburse-non-rental-charge
- cannot-remove-own-actor-from-recently-used
- cannot-remove-payment-method
- cannot-remove-pricing-info
- cannot-remove-running-run
- cannot-remove-user-with-public-actors
- cannot-remove-user-with-subscription
- cannot-remove-user-with-unpaid-invoice
- cannot-rename-env-var
- cannot-rent-paid-actor
- cannot-review-own-actor
- cannot-set-access-rights-for-owner
- cannot-set-is-status-message-terminal
- cannot-unpublish-critical-actor
- cannot-unpublish-paid-actor
- cannot-unpublish-profile
- cannot-update-invoice-field
- concurrent-runs-limit-exceeded
- concurrent-update-detected
- conference-token-not-found
- content-encoding-forbidden-for-html
- coupon-already-redeemed
- coupon-expired
- coupon-for-new-customers
- coupon-for-subscribed-users
- coupon-limits-are-in-conflict-with-current-limits
- coupon-max-number-of-redemptions-reached
- coupon-not-found
- coupon-not-unique
- coupons-disabled
- create-github-issue-not-allowed
- creator-plan-not-available
- cron-expression-invalid
- daily-ai-token-limit-exceeded
- daily-publication-limit-exceeded
- dataset-does-not-have-fields-schema
- dataset-does-not-have-schema
- dataset-locked
- dataset-schema-invalid
- dcr-not-supported
- default-dataset-not-found
- deleting-default-build
- deleting-unfinished-build
- email-already-taken
- email-already-taken-removed-user
- email-domain-not-allowed-for-coupon
- email-invalid
- email-not-allowed
- email-not-valid
- email-update-too-soon
- elevated-permissions-needed
- env-var-already-exists
- exchange-rate-fetch-failed
- expired-conference-token
- failed-to-charge-user
- final-invoice-negative
- full-permission-actor-blocked-for-admin
- full-permission-actor-not-approved
- github-branch-empty
- github-issue-already-exists
- github-public-key-not-found
- github-repository-not-found
- github-signature-does-not-match-payload
- github-user-not-authorized-for-issues
- gmail-not-allowed
- id-does-not-match
- incompatible-billing-interval
- incomplete-payout-billing-info
- inconsistent-currencies
- incorrect-pricing-modifier-prefix
- input-json-invalid-characters
- input-json-not-object
- input-json-too-long
- input-update-collision
- insufficient-permissions
- insufficient-permissions-to-change-field
- insufficient-security-measures
- insufficient-tax-country-evidence
- integration-auth-error
- internal-server-error
- invalid-billing-info
- invalid-billing-period-for-payout
- invalid-build
- invalid-client-key
- invalid-collection
- invalid-conference-login-password
- invalid-content-type-header
- invalid-credentials
- invalid-git-auth-token
- invalid-github-issue-url
- invalid-header
- invalid-id
- invalid-idempotency-key
- invalid-input
- invalid-input-schema
- invalid-invoice
- invalid-invoice-type
- invalid-issue-date
- invalid-label-params
- invalid-main-account-user-id
- invalid-oauth-app
- invalid-oauth-scope
- invalid-one-time-invoice
- invalid-parameter
- invalid-payout-status
- invalid-picture-url
- invalid-record-key
- invalid-request
- invalid-resource-type
- invalid-signature
- invalid-subscription-plan
- invalid-tax-number
- invalid-tax-number-format
- invalid-token
- invalid-token-type
- invalid-two-factor-code
- invalid-two-factor-code-or-recovery-code
- invalid-two-factor-recovery-code
- invalid-username
- invalid-value
- invitation-invalid-resource-type
- invitation-no-longer-valid
- invoice-canceled
- invoice-cannot-be-refunded-due-to-too-high-amount
- invoice-incomplete
- invoice-is-draft
- invoice-locked
- invoice-must-be-buffer
- invoice-not-canceled
- invoice-not-draft
- invoice-not-found
- invoice-outdated
- invoice-paid-already
- issue-already-connected-to-github
- issue-not-found
- issues-bad-request
- issuer-not-registered
- job-finished
- label-already-linked
- last-api-token
- limit-reached
- max-items-must-be-greater-than-zero
- max-metamorphs-exceeded
- max-total-charge-usd-below-minimum
- max-total-charge-usd-must-be-greater-than-zero
- method-not-allowed
- migration-disabled
- missing-actor-rights
- missing-api-token
- missing-billing-info
- missing-line-items
- missing-payment-date
- missing-payout-billing-info
- missing-proxy-password
- missing-reporting-fields
- missing-resource-name
- missing-settings
- missing-username
- monthly-usage-limit-too-low
- more-than-one-update-not-allowed
- multiple-records-found
- must-be-admin
- name-not-unique
- next-runtime-computation-failed
- no-columns-in-exported-dataset
- no-payment-attempt-for-refund-found
- no-payment-method-available
- no-team-account-seats-available
- non-temporary-email
- not-enough-usage-to-run-paid-actor
- not-implemented
- not-supported-currencies
- o-auth-service-already-connected
- o-auth-service-not-connected
- oauth-resource-access-failed
- one-time-invoice-already-marked-paid
- only-drafts-can-be-deleted
- operation-canceled
- operation-not-allowed
- operation-timed-out
- organization-cannot-own-itself
- organization-role-not-found
- overlapping-payout-billing-periods
- own-token-required
- page-not-found
- param-not-one-of
- parameter-required
- parameters-mismatched
- password-reset-email-already-sent
- password-reset-token-expired
- pay-as-you-go-without-monthly-interval
- payment-attempt-status-message-required
- payout-already-paid
- payout-canceled
- payout-invalid-state
- payout-must-be-approved-to-be-marked-paid
- payout-not-found
- payout-number-already-exists
- phone-number-invalid
- phone-number-landline
- phone-number-opted-out
- phone-verification-disabled
- platform-feature-disabled
- price-overrides-validation-failed
- pricing-model-not-supported
- promotional-plan-not-available
- proxy-auth-ip-not-unique
- public-actor-disabled
- query-timeout
- quoted-price-outdated
- rate-limit-exceeded
- recaptcha-invalid
- recaptcha-required
- record-not-found
- record-not-public
- record-or-token-not-found
- record-too-large
- redirect-uri-mismatch
- reduced-plan-not-available
- rental-charge-already-reimbursed
- rental-not-allowed
- request-aborted-prematurely
- request-handled-or-locked
- request-id-invalid
- request-queue-duplicate-requests
- request-too-large
- requested-dataset-view-does-not-exist
- resume-token-expired
- run-failed
- run-input-body-not-valid-json
- run-timeout-exceeded
- russia-is-evil
- same-user
- schedule-actor-not-found
- schedule-actor-task-not-found
- schedule-name-not-unique
- schema-validation
- schema-validation-error
- schema-validation-failed
- service-worker-registration-not-allowed
- sign-up-method-not-allowed
- slack-integration-not-custom
- socket-closed
- socket-destroyed
- store-schema-invalid
- store-terms-not-accepted
- stripe-enabled
- stripe-generic-decline
- stripe-not-enabled
- stripe-not-enabled-for-user
- tagged-build-required
- tax-country-invalid
- tax-number-invalid
- tax-number-validation-failed
- taxamo-call-failed
- taxamo-request-failed
- testing-error
- token-not-provided
- too-few-versions
- too-many-actor-tasks
- too-many-actors
- too-many-labels-on-resource
- too-many-mcp-connectors
- too-many-o-auth-apps
- too-many-organizations
- too-many-requests
- too-many-schedules
- too-many-ui-access-keys
- too-many-user-labels
- too-many-values
- too-many-versions
- too-many-webhooks
- unexpected-route
- unknown-build-tag
- unknown-payment-provider
- unsubscribe-token-invalid
- unsupported-actor-pricing-model-for-agentic-payments
- unsupported-content-encoding
- unsupported-file-type-for-issue
- unsupported-file-type-image-expected
- unsupported-file-type-text-or-json-expected
- unsupported-permission
- upcoming-subscription-bill-not-up-to-date
- user-already-exists
- user-already-verified
- user-creates-organizations-too-fast
- user-disabled
- user-email-is-disposable
- user-email-not-set
- user-email-not-verified
- user-has-no-subscription
- user-integration-not-found
- user-is-already-invited
- user-is-already-organization-member
- user-is-not-member-of-organization
- user-is-not-organization
- user-is-organization
- user-is-organization-owner
- user-is-removed
- user-not-found
- user-not-logged-in
- user-not-verified
- user-or-token-not-found
- user-plan-not-allowed-for-coupon
- user-problem-with-card
- user-record-not-found
- username-already-taken
- username-missing
- username-not-allowed
- username-removal-forbidden
- username-required
- verification-email-already-sent
- verification-token-expired
- version-already-exists
- versions-size-exceeded
- weak-password
- x402-agentic-payment-already-finalized
- x402-agentic-payment-insufficient-amount
- x402-agentic-payment-malformed-token
- x402-agentic-payment-settlement-failed
- x402-agentic-payment-settlement-in-progress
- x402-agentic-payment-settlement-stuck
- x402-agentic-payment-unauthorized
- x402-payment-required
- zero-invoice
ErrorResponse:
title: ErrorResponse
required:
- error
type: object
properties:
error:
$ref: '#/components/schemas/ErrorDetail'
securitySchemes:
httpBearer:
type: http
scheme: bearer
description: 'Bearer token provided in the `Authorization` header (e.g., `Authorization: Bearer your_token`—recommended). [More info](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization).
Use your API token to authenticate requests. You can find it on the [Integrations page](https://console.apify.com/account#/integrations) in Apify Console. This method is more secure than query parameters, as headers are not logged in browser history or server logs.
:::danger Security
Do not share your API token (or account password) with untrusted parties.
:::
_When is authentication required?_
- _Required_ for private Actors, tasks, or resources (e.g., builds of private Actors).
- _Required_ when using named formats for IDs (e.g., `username~store-name` for stores or `username~queue-name` for queues).
- _Optional_ for public Actors or resources (e.g., builds of public Actors can be queried without a token).
For more information, see our [integrations documentation](https://docs.apify.com/platform/integrations).'
apiKey:
type: apiKey
name: token
in: query
description: 'API token provided as a query parameter (e.g., `?token=your_token`—less secure).
Use your API token to authenticate requests. You can find it on the [Integrations page](https://console.apify.com/account#/integrations) in Apify Console.
:::danger Security
Do not share your API token (or account password) with untrusted parties.
:::
_When is authentication required?_
- _Required_ for private Actors, tasks, or resources (e.g., builds of private Actors).
- _Required_ when using named formats for IDs (e.g., `username~store-name` for stores or `username~queue-name` for queues).
- _Optional_ for public Actors or resources (e.g., builds of public Actors can be queried without a token).
For more information, see our [integrations documentation](https://docs.apify.com/platform/integrations).'
x-tagGroups:
- name: Actor management
tags:
- Actors
- Actors/Actor versions
- Actors/Actor builds
- Actors/Actor runs
- Actors/Webhook collection
- Actors/Last run object and its storages
- name: Actor builds
tags:
- Actor builds
- name: Actor runs
tags:
- Actor runs
- name: Actor tasks
tags:
- Actor tasks
- name: Storage
tags:
- Storage/Datasets
- Storage/Key-value stores
- Storage/Request queues
- Storage/Request queues/Requests
- Storage/Request queues/Requests locks
- name: Webhook management
tags:
- Webhooks/Webhooks
- Webhooks/Webhook dispatches
- name: Schedules
tags:
- Schedules
- name: Apify Store
tags:
- Store
- name: Logs
tags:
- Logs
- name: Users
tags:
- Users
- Users/Usage
- name: Utility tools
tags:
- Tools
- Tools/Encoding
- name: Convenience endpoints
tags:
- Default dataset
- Default key-value store
- Default request queue
- Last Actor run's default dataset
- Last Actor run's default key-value store
- Last Actor run's default request queue
- Last Actor run's log
- Last Actor run's abort
- Last Actor run's metamorph
- Last Actor run's reboot
- Last Actor task run's default dataset
- Last Actor task run's default key-value store
- Last Actor task run's default request queue
- Last Actor task run's log
- Last Actor task run's abort
- Last Actor task run's metamorph
- Last Actor task run's reboot