openapi: 3.2.0 info: title: LDM v3 LinkedIn 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: Linked In paths: /api/linkedin/integration: get: operationId: LinkedinController_getIntegration 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: LinkedIn integration status (toggle, defaults) tags: - Linked In x-required-scope: - linkedin:read patch: operationId: LinkedinController_updateIntegration 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: Enable/disable the module, kill-switch, defaults tags: - Linked In x-required-scope: - linkedin:write /api/linkedin/accounts: get: operationId: LinkedinController_listAccounts 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 of LinkedIn accounts (without cookies) tags: - Linked In x-required-scope: - linkedin:read /api/linkedin/accounts/{id}: get: operationId: LinkedinController_getAccount 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: Account by id (without cookies) tags: - Linked In patch: operationId: LinkedinController_patchAccount 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: Change account limits/windows/pause tags: - Linked In /api/linkedin/accounts/{id}/disconnect: post: operationId: LinkedinController_disconnect 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: Revoke session (erase cookies) tags: - Linked In /api/linkedin/campaigns: get: operationId: LinkedinController_listCampaigns 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 of campaigns tags: - Linked In x-required-scope: - linkedin:read post: operationId: LinkedinController_createCampaign 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 a campaign tags: - Linked In x-required-scope: - linkedin:write /api/linkedin/campaigns/{id}: patch: operationId: LinkedinController_patchCampaign 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: Change campaign (name/status/scenario) tags: - Linked In /api/linkedin/campaigns/{id}/leads: post: operationId: LinkedinController_pourLeads 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: Pour leads into a campaign tags: - Linked In /api/linkedin/scenarios: get: operationId: LinkedinController_listScenarios 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 of scenarios tags: - Linked In x-required-scope: - linkedin:read post: operationId: LinkedinController_createScenario 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 a scenario tags: - Linked In x-required-scope: - linkedin:write /api/linkedin/stats: get: operationId: LinkedinController_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: 'Dashboard: funnel + acceptance/reply-rate' tags: - Linked In x-required-scope: - linkedin:read 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.