openapi: 3.2.0 info: title: LDM v3 Stop List 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: Stop List paths: /api/stop-lists: get: operationId: StopListController_list parameters: - name: page required: true in: query schema: type: string - name: limit required: true in: query schema: type: string - name: type required: true in: query schema: type: string - name: search 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 stop list entries (user scope) tags: - Stop List post: operationId: StopListController_add parameters: - 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: Add a stop list entry (user scope) tags: - Stop List /api/stop-lists/stats: get: operationId: StopListController_stats 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: Get stop list statistics (user scope) tags: - Stop List x-required-scope: - stoplist:read /api/stop-lists/bulk: post: operationId: StopListController_addBulk parameters: - 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: Bulk-add stop list entries (user scope) tags: - Stop List x-required-scope: - stoplist:write /api/stop-lists/{id}: delete: operationId: StopListController_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: Remove a stop list entry (user scope) tags: - Stop List /api/stop-lists/check: post: operationId: StopListController_check 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/CheckEmailsDto' responses: '200': description: '' security: - jwt: [] summary: Check a batch of emails against the stop list tags: - Stop List x-required-scope: - stoplist:read /api/stop-lists/global: get: operationId: StopListController_globalList parameters: - name: page required: true in: query schema: type: string - name: limit required: true in: query schema: type: string - name: type required: true in: query schema: type: string - name: search 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 global stop list entries (SUPER only) tags: - Stop List x-required-scope: - stoplist:read post: operationId: StopListController_globalAdd parameters: - 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: Add a global stop list entry (SUPER only) tags: - Stop List x-required-scope: - stoplist:write /api/stop-lists/global/stats: get: operationId: StopListController_globalStats 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: Get global stop list statistics (SUPER only) tags: - Stop List x-required-scope: - stoplist:read /api/stop-lists/global/bulk: post: operationId: StopListController_globalAddBulk parameters: - 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: Bulk-add global stop list entries (SUPER only) tags: - Stop List x-required-scope: - stoplist:write /api/stop-lists/global/{id}: delete: operationId: StopListController_globalRemove 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 a global stop list entry (SUPER only) tags: - Stop List components: schemas: CheckEmailsDto: type: object properties: emails: minItems: 1 type: array items: type: string required: - emails 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.