Ads Lighthouse Checks API
The Checks API from Ads Lighthouse — 2 operation(s) for checks.
The Checks API from Ads Lighthouse — 2 operation(s) for checks.
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/adslighthouse:adslighthouse-checks-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: Ads Lighthouse Checks API
version: 1.0.0
description: Read account-scoped monitoring data and reports, and update project, team, alert and review workflows through the same services and limits as the app.
contact:
name: Ads Lighthouse
url: https://adslighthouse.com/api
email: info@adslighthouse.com
servers:
- url: https://adslighthouse.com/api/v1
security:
- bearerAuth: []
tags:
- name: Checks
paths:
/projects/{project_id}/checks:
post:
operationId: run_realtime_check
summary: Start an on-demand check of a project's keywords
description: 'Queues an on-demand check of the project''s active keywords, or one keyword, across its locations, devices and search engines, using the on-demand allowance (one check per keyword × location × device × source). The searches run in the background; poll get_check_status. Requires the write scope and an idempotency key: a retry with the same key never reserves or runs the checks again. Confirm with the user before calling.'
tags:
- Checks
parameters:
- name: project_id
in: path
required: true
schema:
type: string
minLength: 1
maxLength: 253
description: 'The project: its id, its brand domain (for example nike.example) or its exact project or brand name. Unknown or ambiguous references return not_found; call list_projects then.'
description: 'The project: its id, its brand domain (for example nike.example) or its exact project or brand name. Unknown or ambiguous references return not_found; call list_projects then.'
- name: Idempotency-Key
in: header
required: true
schema:
type: string
minLength: 8
maxLength: 200
pattern: ^[\x21-\x7e]+$
description: A unique value you choose for this request, such as a UUID. Repeating the same key returns the first result instead of starting paid work again.
description: A unique value you choose for this request, such as a UUID. Repeating the same key returns the first result instead of starting paid work again.
security:
- bearerAuth: []
x-required-scope: write
x-mcp-tool: run_realtime_check
responses:
'202':
description: Start an on-demand check of a project's keywords
content:
application/json:
schema:
type: object
properties:
run_id:
type: string
project_id:
type: string
reused:
type: boolean
description: True when this answer repeats an earlier request with the same key, or joins an identical check that is still running. No checks were reserved again.
total:
type: integer
description: 'Searches in the run: keyword × location × device × source.'
completed:
type: integer
failed:
type: integer
pending:
type: integer
expired:
type: boolean
description: True when some of the run's job records were already cleaned up.
request_id:
type: string
additionalProperties: false
required:
- run_id
- project_id
- reused
- total
- completed
- failed
- pending
- expired
'400':
$ref: '#/components/responses/Error400'
'401':
$ref: '#/components/responses/Error401'
'403':
$ref: '#/components/responses/Error403'
'404':
$ref: '#/components/responses/Error404'
'409':
$ref: '#/components/responses/Error409'
'429':
$ref: '#/components/responses/Error429'
'503':
$ref: '#/components/responses/Error503'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
keyword_id:
type: string
minLength: 1
maxLength: 100
description: Check only this keyword.
device:
type: string
enum:
- desktop
- mobile
description: Check only this device.
os:
type: string
enum:
- windows
- macos
- android
- ios
description: Pin an operating system that fits the device.
additionalProperties: false
get:
operationId: list_check_activity
summary: A project's recent background activity and queued searches
description: 'Lists a project''s background activity newest first: search checks, page captures and reviews with status running, completed or failed, plus rows for scheduled runs that were skipped because the check allowance was used up (Search check capacity) or billing was paused. searches counts search checks waiting in the queue or running now. latest_on_demand_run summarizes the most recent run_realtime_check run; poll get_check_status for a specific run. next_scheduled_check_at is when the next scheduled check starts, the moment the app''s header counts down to; it is null when nothing is scheduled (manual monitoring, no monitored keyword, or a plan that cannot run checks). Failure details are not exposed; a failed search is retried by the system when that is safe.'
tags:
- Checks
parameters:
- name: project_id
in: path
required: true
schema:
type: string
minLength: 1
maxLength: 253
description: 'The project: its id, its brand domain (for example nike.example) or its exact project or brand name. Unknown or ambiguous references return not_found; call list_projects then.'
description: 'The project: its id, its brand domain (for example nike.example) or its exact project or brand name. Unknown or ambiguous references return not_found; call list_projects then.'
- name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 200
description: Items per page, 1 to 200.
default: 50
description: Items per page, 1 to 200.
- name: cursor
in: query
required: false
schema:
type: string
maxLength: 1000
description: The next_cursor value from the previous page. Omit it for the first page.
description: The next_cursor value from the previous page. Omit it for the first page.
security:
- bearerAuth: []
x-required-scope: read
x-mcp-tool: list_check_activity
responses:
'200':
description: A project's recent background activity and queued searches
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
activity:
type: string
description: 'What ran: Search checks, Page captures, Search check capacity (a scheduled run skipped because the allowance was used up), Billing paused, and others.'
status:
type: string
enum:
- running
- completed
- failed
results_saved:
type: integer
description: Rows saved by this job, such as one checked page.
started_at:
type: string
ended_at:
anyOf:
- type: string
- type: 'null'
additionalProperties: false
required:
- id
- activity
- status
- results_saved
- started_at
- ended_at
next_cursor:
anyOf:
- type: string
- type: 'null'
description: Pass as cursor to get the next page; null on the last page.
searches:
type: object
properties:
queued:
type: integer
description: Search checks waiting to run.
running:
type: integer
description: Search checks running now.
additionalProperties: false
required:
- queued
- running
latest_on_demand_run:
anyOf:
- type: object
properties:
run_id:
type: string
total:
type: integer
completed:
type: integer
failed:
type: integer
pending:
type: integer
expired:
type: boolean
additionalProperties: false
required:
- run_id
- total
- completed
- failed
- pending
- expired
- type: 'null'
next_scheduled_check_at:
anyOf:
- type: string
- type: 'null'
description: ISO 8601 start of the next scheduled check; null when none is scheduled.
request_id:
type: string
additionalProperties: false
required:
- data
- next_cursor
- searches
- latest_on_demand_run
- next_scheduled_check_at
'400':
$ref: '#/components/responses/Error400'
'401':
$ref: '#/components/responses/Error401'
'403':
$ref: '#/components/responses/Error403'
'404':
$ref: '#/components/responses/Error404'
'409':
$ref: '#/components/responses/Error409'
'429':
$ref: '#/components/responses/Error429'
'503':
$ref: '#/components/responses/Error503'
/projects/{project_id}/checks/{run_id}:
get:
operationId: get_check_status
summary: Progress of an on-demand check
description: Returns how many searches of an on-demand check run are completed, failed or pending. Results appear in list_observations as searches complete.
tags:
- Checks
parameters:
- name: project_id
in: path
required: true
schema:
type: string
minLength: 1
maxLength: 253
description: 'The project: its id, its brand domain (for example nike.example) or its exact project or brand name. Unknown or ambiguous references return not_found; call list_projects then.'
description: 'The project: its id, its brand domain (for example nike.example) or its exact project or brand name. Unknown or ambiguous references return not_found; call list_projects then.'
- name: run_id
in: path
required: true
schema:
type: string
pattern: ^[a-f0-9]{32}$
description: run_id from run_realtime_check.
description: run_id from run_realtime_check.
security:
- bearerAuth: []
x-required-scope: read
x-mcp-tool: get_check_status
responses:
'200':
description: Progress of an on-demand check
content:
application/json:
schema:
type: object
properties:
run_id:
type: string
project_id:
type: string
reused:
type: boolean
description: True when this answer repeats an earlier request with the same key, or joins an identical check that is still running. No checks were reserved again.
total:
type: integer
description: 'Searches in the run: keyword × location × device × source.'
completed:
type: integer
failed:
type: integer
pending:
type: integer
expired:
type: boolean
description: True when some of the run's job records were already cleaned up.
request_id:
type: string
additionalProperties: false
required:
- run_id
- project_id
- reused
- total
- completed
- failed
- pending
- expired
'400':
$ref: '#/components/responses/Error400'
'401':
$ref: '#/components/responses/Error401'
'403':
$ref: '#/components/responses/Error403'
'404':
$ref: '#/components/responses/Error404'
'409':
$ref: '#/components/responses/Error409'
'429':
$ref: '#/components/responses/Error429'
'503':
$ref: '#/components/responses/Error503'
components:
responses:
Error401:
description: Missing, invalid, expired or revoked credential.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Error429:
description: Rate limit reached. Retry after the Retry-After seconds.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Error409:
description: The idempotency key was already used for a different request.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Error503:
description: The requested service or file is temporarily unavailable.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Error403:
description: The credential lacks the write scope, the plan does not include the API, or the allowance is used up.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Error404:
description: Unknown project, keyword or run in this account.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Error400:
description: Invalid parameters, cursor or body.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Error:
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- invalid_request
- idempotency_key_required
- unauthorized
- forbidden
- insufficient_scope
- plan_required
- quota_exceeded
- not_found
- method_not_allowed
- conflict
- idempotency_key_reused
- payload_too_large
- unsupported_media_type
- rate_limited
- internal_error
- unavailable
message:
type: string
details:
type: array
items:
type: object
properties:
field:
type: string
message:
type: string
required:
- field
- message
required:
- code
- message
request_id:
type: string
required:
- error
- request_id
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: An API key from Settings > API and MCP (als_...), or an OAuth access token issued for this API.