openapi: 3.2.0 info: title: LDM v3 SEO Index 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: SEO Index paths: /api/seo-index/overview: get: operationId: SeoIndexController_overview 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: Summary of clicks/impressions/CTR/position over 7/28/90d with delta vs the… tags: - SEO Index x-required-scope: - admin:read /api/seo-index/segments: get: operationId: SeoIndexController_segments parameters: - name: days 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: Breakdown of metrics by site sections tags: - SEO Index x-required-scope: - admin:read /api/seo-index/sitemaps: get: operationId: SeoIndexController_sitemaps 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: 'Sitemap status: type, upload date, submitted/indexed, errors' tags: - SEO Index x-required-scope: - admin:read /api/seo-index/pages: get: operationId: SeoIndexController_pages parameters: - name: section 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: Top pages by clicks (snapshot, filter by section, pagination) tags: - SEO Index x-required-scope: - admin:read /api/seo-index/queries: get: operationId: SeoIndexController_queries parameters: - 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: Top search queries by clicks (snapshot, pagination) tags: - SEO Index x-required-scope: - admin:read /api/seo-index/history: get: operationId: SeoIndexController_history parameters: - name: days required: true in: query schema: type: string - name: segment required: true in: query schema: type: string - name: property 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: Daily series of clicks/impressions/ctr/position for charts tags: - SEO Index x-required-scope: - admin:read /api/seo-index/coverage: get: operationId: SeoIndexController_coverage 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: URLs in the sitemap versus the number of pages with impressions tags: - SEO Index x-required-scope: - admin:read /api/seo-index/index-coverage: get: operationId: SeoIndexController_indexCoverage 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: Total sitemap page count per surface (landing/blog/check/email-stats); index… tags: - SEO Index x-required-scope: - admin:read /api/seo-index/yandex/overview: get: operationId: SeoIndexController_yandexOverview 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: 'Yandex.Webmaster: clicks/impressions/position with delta + Yandex site quality…' tags: - SEO Index x-required-scope: - admin:read /api/seo-index/yandex/queries: get: operationId: SeoIndexController_yandexQueries parameters: - 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: 'Yandex.Webmaster: top search queries (snapshot, pagination)' tags: - SEO Index x-required-scope: - admin:read /api/seo-index/yandex/sitemaps: get: operationId: SeoIndexController_yandexSitemaps 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: 'Yandex.Webmaster: sitemaps — type, URL, errors, last crawl date' tags: - SEO Index x-required-scope: - admin:read /api/seo-index/indexnow: get: operationId: SeoIndexController_indexNowStatus 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: 'IndexNow ping status: whether a key is configured, time/mode/URL count of the…' tags: - SEO Index x-required-scope: - admin:read post: operationId: SeoIndexController_indexNowForcePing 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: Force IndexNow ping — pings the ENTIRE sitemap list (not just the diff from the… tags: - SEO Index x-required-scope: - admin:write 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.