openapi: 3.2.0 info: title: LDM v3 ICP Extension API description: 'Multi-tenant B2B outreach automation platform. Auth: JWT Bearer (15-min) or tenant API key (ldm_*) managed in CRM Settings → API Keys. All tenant-scoped endpoints require the X-Tenant-Id header.' version: 1.0.0 contact: {} servers: - url: https://api.live-direct-marketing.online description: Production - url: https://api.dev.live-direct-marketing.online description: Development - url: http://127.0.0.1:3000 description: Local tags: - name: ICP Extension paths: /api/icp-tasks: get: operationId: IcpExtensionController_findAll parameters: - name: page required: true in: query schema: type: string - name: pageSize required: true in: query schema: type: string - name: status required: true in: query schema: type: string - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints responses: '200': description: '' security: - jwt: [] summary: List ICP tasks with pagination and status filter tags: - ICP Extension post: operationId: IcpExtensionController_create parameters: - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateIcpTaskDto' responses: '201': description: '' security: - jwt: [] summary: Create a new ICP task tags: - ICP Extension /api/icp-tasks/companies/scrape/preview: get: operationId: IcpExtensionController_scrapePreview parameters: - name: listId required: true in: query schema: type: string - name: domainField required: true in: query schema: type: string - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints responses: '200': description: '' security: - jwt: [] summary: '#955 preview list coverage WITHOUT starting a crawl: how many cards, how many…' tags: - ICP Extension x-required-scope: - icp:read /api/icp-tasks/companies/scrape/{taskId}: get: operationId: IcpExtensionController_getScrapeStatus parameters: - name: taskId required: true in: path schema: type: string - name: includeResults required: true in: query schema: type: string - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints responses: '200': description: '' security: - jwt: [] summary: '#835 status and progress of a site-crawl task.' tags: - ICP Extension /api/icp-tasks/companies/scrape/{taskId}/cancel: post: operationId: IcpExtensionController_cancelScrape parameters: - name: taskId required: true in: path schema: type: string - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints responses: '201': description: '' security: - jwt: [] summary: '#835 cancel a site-crawl task' tags: - ICP Extension /api/icp-tasks/{id}: get: operationId: IcpExtensionController_findById parameters: - name: id required: true in: path schema: type: string - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints responses: '200': description: '' security: - jwt: [] summary: Get an ICP task by id tags: - ICP Extension patch: operationId: IcpExtensionController_update parameters: - name: id required: true in: path schema: type: string - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateIcpTaskDto' responses: '200': description: '' security: - jwt: [] summary: Update an ICP task tags: - ICP Extension delete: operationId: IcpExtensionController_remove parameters: - name: id required: true in: path schema: type: string - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints responses: '200': description: '' security: - jwt: [] summary: Delete an ICP task tags: - ICP Extension /api/icp-tasks/{id}/scoring-prompt: get: operationId: IcpExtensionController_scoringPromptPreview parameters: - name: id required: true in: path schema: type: string - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints responses: '200': description: '' security: - jwt: [] summary: Preview the ACTUAL scoring prompt for this task (brief-driven / custom /… tags: - ICP Extension /api/icp-tasks/companies/scrape: post: operationId: IcpExtensionController_scrapeCompanies parameters: - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ScrapeCompaniesDto' responses: '202': description: '' security: - jwt: [] summary: '#298/#835 server-side crawl fetcher: enqueued in the background, the response…' tags: - ICP Extension x-required-scope: - icp:write /api/icp-tasks/companies/scrape/{taskId}/pause: post: operationId: IcpExtensionController_pauseScrape parameters: - name: taskId required: true in: path schema: type: string - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints responses: '201': description: '' security: - jwt: [] summary: '#952 pause a crawl task (alias of .../pause on the canonical site-enrichment)' tags: - ICP Extension /api/icp-tasks/companies/scrape/{taskId}/resume: post: operationId: IcpExtensionController_resumeScrape parameters: - name: taskId required: true in: path schema: type: string - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints responses: '201': description: '' security: - jwt: [] summary: '#952 resume a paused crawl task (alias of .../resume on the canonical…' tags: - ICP Extension /api/icp-tasks/companies/scrape/{taskId}/items: get: operationId: IcpExtensionController_scrapeItems parameters: - name: taskId required: true in: path schema: type: string - name: status required: true in: query schema: type: string - name: reasonCode required: true in: query schema: type: string - name: page required: true in: query schema: type: string - name: pageSize required: true in: query schema: type: string - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints responses: '200': description: '' security: - jwt: [] summary: '#952 crawl task items with a filter by outcome/reason code (alias of .../items…' tags: - ICP Extension /api/icp-tasks/{id}/regenerate-key: post: operationId: IcpExtensionController_regenerateKey parameters: - name: id required: true in: path schema: type: string - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints responses: '201': description: '' security: - jwt: [] summary: Regenerate the project key for an ICP task tags: - ICP Extension /api/icp-tasks/{id}/statistics: get: operationId: IcpExtensionController_getStatistics parameters: - name: id required: true in: path schema: type: string - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints responses: '200': description: '' security: - jwt: [] summary: Get statistics for an ICP task tags: - ICP Extension /api/icp-tasks/{id}/items: get: operationId: IcpExtensionController_getItems parameters: - name: id required: true in: path schema: type: string - name: page required: true in: query schema: type: string - name: pageSize required: true in: query schema: type: string - name: status required: true in: query schema: type: string - name: module required: true in: query schema: type: string - name: sortBy required: true in: query schema: type: string - name: sortDir required: true in: query schema: type: string - name: q required: true in: query schema: type: string - name: companyId required: true in: query schema: type: string - name: dateFrom required: true in: query schema: type: string - name: dateTo required: true in: query schema: type: string - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints responses: '200': description: '' security: - jwt: [] summary: List items belonging to an ICP task tags: - ICP Extension /api/icp-tasks/{id}/download-extension: get: operationId: IcpExtensionController_downloadExtension parameters: - name: id required: true in: path schema: type: string - name: lang required: true in: query schema: type: string - name: X-Tenant-Id in: header required: false schema: type: string format: uuid description: Tenant UUID — required for all tenant-scoped endpoints responses: '200': description: '' security: - jwt: [] summary: Download a pre-built Chrome extension zip for an ICP task tags: - ICP Extension components: schemas: CreateIcpTaskDto: type: object properties: title: type: string description: ICP task title description: type: string config: type: object description: Free-form configuration payload required: - title ScrapeCompaniesDto: type: object properties: companyIds: minItems: 1 maxItems: 500 type: array items: type: string listId: type: string maxLength: 100 domainField: type: string maxLength: 150 limit: type: number minimum: 1 maximum: 200 timeoutMs: type: number minimum: 1000 maximum: 120000 maxAttempts: type: number minimum: 1 maximum: 5 saveScreenshot: type: boolean loadImages: type: boolean pageConcurrency: type: number minimum: 1 maximum: 4 visitPages: type: object scoringTaskId: type: string maxLength: 100 UpdateIcpTaskDto: type: object properties: title: type: string description: ICP task title description: type: string status: type: string description: ICP task status config: type: object description: Free-form configuration payload securitySchemes: jwt: scheme: bearer bearerFormat: JWT type: http description: JWT access token from /auth/login (Bearer ) tenant-api-key: scheme: bearer bearerFormat: JWT type: http description: Tenant API key (Bearer ldm_*) for MCP/A2A clients. Issued via CRM Settings → API Keys. rpa-service: scheme: bearer bearerFormat: JWT type: http description: Dedicated RPA service key. No tenant API-key or query-key authentication.