Ads Lighthouse Checks API

The Checks API from Ads Lighthouse — 2 operation(s) for checks.

Operations 3

POST /projects/{project_id}/checks Start an on-demand check of a project's keywords #
GET /projects/{project_id}/checks A project's recent background activity and queued searches #
GET /projects/{project_id}/checks/{run_id} Progress of an on-demand check #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/adslighthouse:adslighthouse-checks-api"
All apis
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.

Get an API 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 Specification

adslighthouse-checks-api-openapi.yml Raw ↑
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.