openapi: 3.2.0 info: title: LDM v3 Sequences 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: Sequences paths: /api/sequences: get: operationId: SequencesController_list parameters: - name: status required: true in: query schema: type: string - name: search 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: List email sequences tags: - Sequences post: operationId: SequencesController_create 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: Create an email sequence tags: - Sequences /api/sequences/{id}: get: operationId: SequencesController_get 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 a sequence by id tags: - Sequences patch: operationId: SequencesController_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 responses: '200': description: '' security: - jwt: [] summary: Update a sequence tags: - Sequences delete: operationId: SequencesController_delete 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 sequence tags: - Sequences /api/sequences/{id}/steps: post: operationId: SequencesController_addStep 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: Add a step to a sequence tags: - Sequences /api/sequences/{id}/steps/{stepId}: patch: operationId: SequencesController_updateStep parameters: - name: id required: true in: path schema: type: string - name: stepId 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: Update a sequence step tags: - Sequences delete: operationId: SequencesController_deleteStep parameters: - name: id required: true in: path schema: type: string - name: stepId 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 sequence step tags: - Sequences /api/sequences/{id}/steps/{stepId}/variants: get: operationId: SequencesController_listVariants parameters: - name: id required: true in: path schema: type: string - name: stepId 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: List A/B variants on a step tags: - Sequences post: operationId: SequencesController_addVariant parameters: - name: id required: true in: path schema: type: string - name: stepId 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: Add an A/B variant to a step tags: - Sequences /api/sequences/{id}/steps/{stepId}/variants/{variantId}: patch: operationId: SequencesController_updateVariant parameters: - name: id required: true in: path schema: type: string - name: stepId required: true in: path schema: type: string - name: variantId 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: Update an A/B variant tags: - Sequences delete: operationId: SequencesController_deleteVariant parameters: - name: id required: true in: path schema: type: string - name: stepId required: true in: path schema: type: string - name: variantId 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 A/B variant tags: - Sequences /api/sequences/{id}/steps/{stepId}/variants/stats: get: operationId: SequencesController_variantStats parameters: - name: id required: true in: path schema: type: string - name: stepId 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 A/B variant statistics for a step tags: - Sequences /api/sequences/{id}/enroll: post: operationId: SequencesController_enroll 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: Enroll contacts into a sequence tags: - Sequences /api/sequences/{id}/enrollments: get: operationId: SequencesController_listEnrollments parameters: - name: id required: true in: path schema: type: string - name: status 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: List enrollments for a sequence tags: - Sequences /api/sequences/enrollments/{eid}/pause: post: operationId: SequencesController_pauseEnrollment parameters: - name: eid 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: Pause an enrollment tags: - Sequences /api/sequences/enrollments/{eid}/resume: post: operationId: SequencesController_resumeEnrollment parameters: - name: eid 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: Resume an enrollment tags: - Sequences /api/sequences/enrollments/{eid}/cancel: post: operationId: SequencesController_cancelEnrollment parameters: - name: eid 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: Cancel an enrollment tags: - Sequences 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.