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 / API paths: /api/ext/auth: get: operationId: IcpExtApiController_authorize parameters: - name: key 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: Authorize the Chrome extension by project key tags: - ICP Extension / API /api/ext/icpreview/next: get: operationId: IcpExtApiController_getNextItem parameters: - name: key 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: Get the next ICP review item for the extension tags: - ICP Extension / API /api/ext/icpreview/ai: post: operationId: IcpExtApiController_analyzeAi parameters: - 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: Analyze an ICP review item with AI tags: - ICP Extension / API /api/ext/icpreview/enrich: post: operationId: IcpExtApiController_enrich parameters: - 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: Auto-enrich the company card from the visited site (#281 item 7) tags: - ICP Extension / API /api/ext/icpreview/complete: post: operationId: IcpExtApiController_complete parameters: - 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: Mark an ICP review item as completed tags: - ICP Extension / API /api/ext/formassist/config: get: operationId: IcpExtApiController_getFormAssistConfig parameters: - name: key 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: Get form assist configuration for the extension tags: - ICP Extension / API /api/ext/company/lookup: get: operationId: IcpExtApiController_lookupCompany parameters: - name: key required: true in: query schema: type: string - name: host required: true in: query schema: type: string - name: task_item_id required: true in: query schema: type: string - name: company_id 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: Lookup CRM company by site host (widget company card) tags: - ICP Extension / API /api/ext/formassist/profile: get: operationId: IcpExtApiController_getFormAssistProfile parameters: - name: key 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: Resolved profile values for manual form fill (context menu) tags: - ICP Extension / API /api/ext/formassist/ai: post: operationId: IcpExtApiController_formAssistAi parameters: - 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: Run AI form-fill suggestion for the extension tags: - ICP Extension / API /api/ext/formassist/complete: post: operationId: IcpExtApiController_formAssistComplete parameters: - 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: Report form-assist completion from the extension tags: - ICP Extension / API /api/ext/sendemail/stats: get: operationId: IcpExtApiController_getSendEmailStats parameters: - name: key 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: Get send-email stats for the extension tags: - ICP Extension / API /api/ext/sendemail/capture: post: operationId: IcpExtApiController_captureEmail parameters: - 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: Capture an email address from the extension tags: - ICP Extension / API /api/ext/messenger/generate: post: operationId: IcpExtApiController_generateMessage parameters: - name: channel 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: Generate a messenger message (channel = vk|telegram|whatsapp|linkedin) tags: - ICP Extension / API /api/ext/messenger/complete: post: operationId: IcpExtApiController_messengerComplete parameters: - name: channel 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: Report messenger send completion (creates/links a Contact by url) tags: - ICP Extension / API /api/ext/presentation: post: operationId: IcpExtApiController_presentation parameters: - 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: Generate a presentation PDF (mode = attach → base64 | link → OG url) tags: - ICP Extension / API /api/ext/presentation/pdf/{filename}: get: operationId: IcpExtApiController_presentationPdf parameters: - name: filename 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: Serve a presentation PDF by filename (no key, public link) tags: - ICP Extension / API /api/ext/presentation/{token}: get: operationId: IcpExtApiController_presentationOg parameters: - name: token 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: Public OG preview page for a presentation link (no key) tags: - ICP Extension / API components: 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.