openapi: 3.2.0 info: title: LDM v3 Company Lists 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: Company Lists paths: /api/company-lists: get: operationId: CompanyListsController_findAll 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: List all company lists for the tenant tags: - Company Lists post: operationId: CompanyListsController_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/CompanyListsCreateDto' responses: '201': description: '' security: - jwt: [] summary: Create a new company list tags: - Company Lists /api/company-lists/contacts-counts: get: operationId: CompanyListsController_contactsCounts parameters: - name: ids 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: Sum of contacts of member companies, per list id (?ids=csv) tags: - Company Lists x-required-scope: - crm:read /api/company-lists/{id}: patch: operationId: CompanyListsController_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/CompanyListsUpdateDto' responses: '200': description: '' security: - jwt: [] summary: Update a company list tags: - Company Lists delete: operationId: CompanyListsController_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 a company list tags: - Company Lists /api/company-lists/reorder: post: operationId: CompanyListsController_reorder 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/CompanyListsReorderDto' responses: '201': description: '' security: - jwt: [] summary: Reorder company lists by id/sortOrder array tags: - Company Lists x-required-scope: - crm:write /api/company-lists/{id}/companies: post: operationId: CompanyListsController_addCompanies 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/CompanyListsAddCompaniesDto' responses: '201': description: '' security: - jwt: [] summary: Add companies to a list tags: - Company Lists delete: operationId: CompanyListsController_removeCompanies 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: Remove companies from a list tags: - Company Lists /api/company-lists/{id}/merge: post: operationId: CompanyListsController_merge 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/CompanyListsMergeDto' responses: '201': description: '' security: - jwt: [] summary: 'Merge this list into another list: move or copy all member companies…' tags: - Company Lists /api/company-lists/{id}/duplicate: post: operationId: CompanyListsController_duplicate 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: Duplicate a company list tags: - Company Lists components: schemas: CompanyListsMergeDto: type: object properties: targetId: type: string description: Id of the list to merge member companies into mode: type: string description: 'move: relocate companies to targetId; copy: keep them in both lists' enum: - move - copy required: - targetId - mode CompanyListsAddCompaniesDto: type: object properties: companyIds: type: array items: type: string required: - companyIds CompanyListsUpdateDto: type: object properties: name: type: string description: type: string color: type: string icon: type: string type: type: string smartFilters: type: object description: 'SMART lists only: explicit versioned native company filters. STATIC lists leave this unset.' example: version: 1 filterRules: - field: industry operator: contains value: SaaS isPinned: type: boolean groupId: type: - object - 'null' CompanyListsReorderItemDto: type: object properties: id: type: string sortOrder: type: number required: - id - sortOrder CompanyListsReorderDto: type: object properties: items: type: array items: $ref: '#/components/schemas/CompanyListsReorderItemDto' required: - items CompanyListsCreateDto: type: object properties: name: type: string description: type: string color: type: string icon: type: string type: type: string smartFilters: type: object description: 'SMART lists only: explicit versioned native company filters. STATIC lists leave this unset.' example: version: 1 filterRules: - field: industry operator: contains value: SaaS isPinned: type: boolean groupId: type: - object - 'null' required: - name 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.