AI Sources

Get AI sources check history

Get paginated history of AI Sources checks for a project. Each row carries, per engine, the four measured figures for that check — answers received, answers naming the customer, pages read, and independent pages naming the customer — and the funnel from core hosts to hosts the customer is genuinely missing from. Nothing is summed across engines; an engine absent from a row was not asked on that check or produced nothing usable on it, and absent means not measured, never zero. Counts are counts, never rates: report figures as n of N answers and never as a percentage or a share — the question set is small by design, and a share computed from it is false precision. Only published checks are listed: a check abandoned because no engine produced a usable answer never publishes and does not appear here. Uses checkId, not runId — the unit of this dimension is a check, one cycle of every question against every engine. The full summary for a row is on the check-detail route. This page is subject to a response size cap: when truncated is true, whole entries were dropped from the end of items and pagination.hasMore does NOT account for them — lower limit to see the rest rather than paging forward, which would skip them.

get/v1/projects/{projectId}/ai-sources/history

Request

  • Base URL: https://api.competlab.com
  • URL: https://api.competlab.com/v1/projects/{projectId}/ai-sources/history
  • Auth: API key in header CL-API-Key

Path parameters

projectIdstring required
Example:507f1f77bcf86cd799439011

Project ID

Query parameters

pagenumber
Example:1

Page number (1-indexed)

limitnumber
Example:20

Number of items per page

Response

truncatedboolean required

True when the page exceeded the response size cap and whole entries were dropped from the end of items. pagination.total still reports the true number of checks, so a withheld entry is distinguishable from one that does not exist — but pagination.hasMore does NOT account for dropped rows, so paging forward on hasMore alone would skip them silently. Lower limit and re-request this page instead.

Example response

{
  "items": [
    {
      "checkId": "507f1f77bcf86cd799439012",
      "completedAt": "2026-09-04T10:00:00.000Z",
      "perEngine": {
        "perplexity": {
          "answersReceived": 7,
          "answersNamingCustomer": 3,
          "pagesRead": 118,
          "independentPagesNamingCustomer": {
            "floor": 4,
            "ceiling": 6
          }
        },
        "google_ai_overviews": {
          "answersReceived": 7,
          "answersNamingCustomer": 3,
          "pagesRead": 118,
          "independentPagesNamingCustomer": {
            "floor": 4,
            "ceiling": 6
          }
        }
      },
      "funnel": {
        "coreHosts": 25,
        "alreadyNamingCustomer": 19,
        "unreadable": 2,
        "missing": 4,
        "missingPublishers": 3,
        "missingCompetitorOwned": 1
      }
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 47,
    "totalPages": 3,
    "hasMore": true
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.