Tools

Get an async tech-stack scan by ID

Changed on

Get the current state of an async tech-stack scan. Returns the scan's lifecycle (queued / running / completed / failed) along with createdAt and expiresAt always, plus startedAt once the runner picks it up and completedAt once it reaches a terminal state. On completed the full canonical scan response is in item.result (categorized technology hits with evidence). On failed the failure details are in item.error with a machine-readable code — currently homepage_fetch_failed (upstream homepage fetch threw) or scan_failed (any other error during scan execution). Scoped to the API key's organization — cross-tenant access, never-existed IDs, expired IDs (24h TTL), and malformed IDs all return 404 scan_not_found with an identical envelope to prevent existence-disclosure. Typically sub-second — safe to poll on a 2–5 second interval depending on your timeout budget.

get/v1/tools/tech-stack/scans/{scanId}

Request

  • Base URL: https://api.competlab.com
  • URL: https://api.competlab.com/v1/tools/tech-stack/scans/{scanId}
  • Auth: API key in header CL-API-Key

Path parameters

scanIdstring required

Response

Example response

{
  "item": {
    "id": "6638e9a1b2c3d4e5f6a7b8c9",
    "status": "completed",
    "createdAt": "2026-05-17T14:30:00.000Z",
    "expiresAt": "2026-05-18T14:30:00.000Z",
    "startedAt": "2026-05-17T14:30:00.412Z",
    "completedAt": "2026-05-17T14:30:45.218Z",
    "result": {
      "domain": "stripe.com",
      "finalUrl": "https://stripe.com/",
      "fetchedAt": "2026-05-17T14:30:45.000Z",
      "totalTechnologies": 3,
      "techStack": [
        {
          "name": "Next.js",
          "evidenceCount": 2,
          "evidence": [
            {
              "kind": "html",
              "source": "/_next/static/",
              "matched": "<script src=\"/_next/static/chunks/main-app-abc123.js\""
            },
            {
              "kind": "header",
              "source": "x-powered-by",
              "matched": "Next.js"
            }
          ]
        },
        {
          "name": "Cloudflare",
          "evidenceCount": 1,
          "evidence": [
            {
              "kind": "header",
              "source": "server",
              "matched": "cloudflare"
            }
          ]
        }
      ],
      "growthStack": [
        {
          "name": "HubSpot",
          "evidenceCount": 1,
          "evidence": [
            {
              "kind": "html",
              "source": "js.hs-scripts.com",
              "matched": "<script src=\"//js.hs-scripts.com/1234567.js\""
            }
          ]
        }
      ],
      "engagementStack": []
    }
  }
}

Changes

    • warning

      added the new not_found enum value to the / response property for the response status

    • warning

      added the new no_data_available enum value to the / response property for the response status

    • warning

      added the new run_not_summarized enum value to the / response property for the response status