{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-bfcbb3d074ac9122", "name": "Stray `console.log` in TS/JS \u2014 server.js:389", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server.js:389"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0c73ab9a1d129520", "name": "Insecure pattern 'node_child_process' in server.js:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in server.js:6"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-063891e4919d2f31", "name": "Very large file: server.js (3808 lines)", "shortDescription": {"text": "Very large file: server.js (3808 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 15 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 88 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-433e53c54d4221d3", "name": "Commented-code block (7 lines) in server.js:1849", "shortDescription": {"text": "Commented-code block (7 lines) in server.js:1849"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-86253c12f1308c51", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server.js:368", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server.js:368"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-65df07ab4020db79", "name": "18 env vars used in code but missing from .env.example", "shortDescription": {"text": "18 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AI_MODEL`, `AI_PROVIDER`, `APIFY_TOKEN`, `BCC_EMAIL`, `CRON_SECRET`, `DISABLE_SCHEDULER`, `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` + 10 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95dd5f4e4c24b6ca", "name": "Dangling fetch: POST https://api.tavily.com/search (server.js:1754)", "shortDescription": {"text": "Dangling fetch: POST https://api.tavily.com/search (server.js:1754)"}, "fullDescription": {"text": "`server.js:1754` calls `POST https://api.tavily.com/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.tavily.com/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a1407433a6605c9c", "name": "Dangling fetch: POST https://api.apollo.io/api/v1/mixed_people/api_search (server.js:2532)", "shortDescription": {"text": "Dangling fetch: POST https://api.apollo.io/api/v1/mixed_people/api_search (server.js:2532)"}, "fullDescription": {"text": "`server.js:2532` calls `POST https://api.apollo.io/api/v1/mixed_people/api_search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.apollo.io/api/v1/mixed_people/api_search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-79518587a07c44f4", "name": "Dangling fetch: POST https://api.apollo.io/api/v1/people/match (server.js:2568)", "shortDescription": {"text": "Dangling fetch: POST https://api.apollo.io/api/v1/people/match (server.js:2568)"}, "fullDescription": {"text": "`server.js:2568` calls `POST https://api.apollo.io/api/v1/people/match` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.apollo.io/api/v1/people/match`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c70dafa227b6824", "name": "Dangling fetch: POST https://api.apify.com/v2/acts/${safeActorId}/runs?token=${token} (server.js:2750)", "shortDescription": {"text": "Dangling fetch: POST https://api.apify.com/v2/acts/${safeActorId}/runs?token=${token} (server.js:2750)"}, "fullDescription": {"text": "`server.js:2750` calls `POST https://api.apify.com/v2/acts/${safeActorId}/runs?token=${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.apify.com/v2/acts/<p>/runs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd65f0f593857ee2", "name": "Dangling fetch: GET https://api.apify.com/v2/actor-runs/${runId}?token=${token} (server.js:2764)", "shortDescription": {"text": "Dangling fetch: GET https://api.apify.com/v2/actor-runs/${runId}?token=${token} (server.js:2764)"}, "fullDescription": {"text": "`server.js:2764` calls `GET https://api.apify.com/v2/actor-runs/${runId}?token=${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.apify.com/v2/actor-runs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8df40c06f6598a51", "name": "Dangling fetch: POST https://api.resend.com/emails (server.js:3196)", "shortDescription": {"text": "Dangling fetch: POST https://api.resend.com/emails (server.js:3196)"}, "fullDescription": {"text": "`server.js:3196` calls `POST https://api.resend.com/emails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.resend.com/emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f3e770d216f558b1", "name": "Dangling fetch: POST https://api.sendgrid.com/v3/mail/send (server.js:3207)", "shortDescription": {"text": "Dangling fetch: POST https://api.sendgrid.com/v3/mail/send (server.js:3207)"}, "fullDescription": {"text": "`server.js:3207` calls `POST https://api.sendgrid.com/v3/mail/send` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.sendgrid.com/v3/mail/send`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b68bde1bea21c9a", "name": "Dangling fetch: POST https://${region}/v3/${domain}/messages (server.js:3236)", "shortDescription": {"text": "Dangling fetch: POST https://${region}/v3/${domain}/messages (server.js:3236)"}, "fullDescription": {"text": "`server.js:3236` calls `POST https://${region}/v3/${domain}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/<p>/v3/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aaae21a967de97a9", "name": "Dangling fetch: POST https://api.postmarkapp.com/email (server.js:3247)", "shortDescription": {"text": "Dangling fetch: POST https://api.postmarkapp.com/email (server.js:3247)"}, "fullDescription": {"text": "`server.js:3247` calls `POST https://api.postmarkapp.com/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.postmarkapp.com/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-be9c69e35197e6d3", "name": "Dangling fetch: GET https://api.resend.com/domains (server.js:3440)", "shortDescription": {"text": "Dangling fetch: GET https://api.resend.com/domains (server.js:3440)"}, "fullDescription": {"text": "`server.js:3440` calls `GET https://api.resend.com/domains` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.resend.com/domains`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3d9da582b40ab683", "name": "Dangling fetch: GET https://api.sendgrid.com/v3/scopes (server.js:3444)", "shortDescription": {"text": "Dangling fetch: GET https://api.sendgrid.com/v3/scopes (server.js:3444)"}, "fullDescription": {"text": "`server.js:3444` calls `GET https://api.sendgrid.com/v3/scopes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.sendgrid.com/v3/scopes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ced2f2f3e449dd70", "name": "Dangling fetch: GET https://${host}/v3/${domain} (server.js:3450)", "shortDescription": {"text": "Dangling fetch: GET https://${host}/v3/${domain} (server.js:3450)"}, "fullDescription": {"text": "`server.js:3450` calls `GET https://${host}/v3/${domain}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/<p>/v3/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b08bddf5023b5b3", "name": "Dangling fetch: GET https://api.postmarkapp.com/server (server.js:3456)", "shortDescription": {"text": "Dangling fetch: GET https://api.postmarkapp.com/server (server.js:3456)"}, "fullDescription": {"text": "`server.js:3456` calls `GET https://api.postmarkapp.com/server` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.postmarkapp.com/server`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0555fab8e0ba515d", "name": "Dangling fetch: POST https://api.socialcrawl.com/v1/search (server.js:3687)", "shortDescription": {"text": "Dangling fetch: POST https://api.socialcrawl.com/v1/search (server.js:3687)"}, "fullDescription": {"text": "`server.js:3687` calls `POST https://api.socialcrawl.com/v1/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.socialcrawl.com/v1/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7b3ca4bcd99573c4", "name": "Unused endpoint: USE /api/outreach", "shortDescription": {"text": "Unused endpoint: USE /api/outreach"}, "fullDescription": {"text": "`server.js` declares `USE /api/outreach` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b70994931fd6a280", "name": "Unused endpoint: GET /api/creators", "shortDescription": {"text": "Unused endpoint: GET /api/creators"}, "fullDescription": {"text": "`server.js` declares `GET /api/creators` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-81c2d2591a193760", "name": "Unused endpoint: PUT /api/creators/emails", "shortDescription": {"text": "Unused endpoint: PUT /api/creators/emails"}, "fullDescription": {"text": "`server.js` declares `PUT /api/creators/emails` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f0240e8821e89472", "name": "Unused endpoint: POST /api/creators/import", "shortDescription": {"text": "Unused endpoint: POST /api/creators/import"}, "fullDescription": {"text": "`server.js` declares `POST /api/creators/import` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2196d529ddf3e9dd", "name": "Unused endpoint: GET /api/creators/search", "shortDescription": {"text": "Unused endpoint: GET /api/creators/search"}, "fullDescription": {"text": "`server.js` declares `GET /api/creators/search` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f0b89f4aa9ada3a3", "name": "Unused endpoint: GET /api/creators/filter", "shortDescription": {"text": "Unused endpoint: GET /api/creators/filter"}, "fullDescription": {"text": "`server.js` declares `GET /api/creators/filter` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3b37265900e79a8a", "name": "Unused endpoint: GET /api/stats", "shortDescription": {"text": "Unused endpoint: GET /api/stats"}, "fullDescription": {"text": "`server.js` declares `GET /api/stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9d2517f9eafc5297", "name": "Unused endpoint: POST /api/chat", "shortDescription": {"text": "Unused endpoint: POST /api/chat"}, "fullDescription": {"text": "`server.js` declares `POST /api/chat` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1cd6ff9aec438e35", "name": "Unused endpoint: GET /api/campaigns", "shortDescription": {"text": "Unused endpoint: GET /api/campaigns"}, "fullDescription": {"text": "`server.js` declares `GET /api/campaigns` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5aed77bc825d1c42", "name": "Unused endpoint: POST /api/campaigns", "shortDescription": {"text": "Unused endpoint: POST /api/campaigns"}, "fullDescription": {"text": "`server.js` declares `POST /api/campaigns` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ef731fe15cfaaac6", "name": "Unused endpoint: DELETE /api/campaigns/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/campaigns/:id"}, "fullDescription": {"text": "`server.js` declares `DELETE /api/campaigns/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7076129264d52565", "name": "Unused endpoint: POST /api/campaigns/:id/add", "shortDescription": {"text": "Unused endpoint: POST /api/campaigns/:id/add"}, "fullDescription": {"text": "`server.js` declares `POST /api/campaigns/:id/add` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2fe8e6d31b184e30", "name": "Unused endpoint: POST /api/campaigns/:id/update-status", "shortDescription": {"text": "Unused endpoint: POST /api/campaigns/:id/update-status"}, "fullDescription": {"text": "`server.js` declares `POST /api/campaigns/:id/update-status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1748497f1b051169", "name": "Unused endpoint: POST /api/campaigns/:id/remove", "shortDescription": {"text": "Unused endpoint: POST /api/campaigns/:id/remove"}, "fullDescription": {"text": "`server.js` declares `POST /api/campaigns/:id/remove` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-054eed8fb4d51459", "name": "Unused endpoint: POST /api/campaigns/:id/note", "shortDescription": {"text": "Unused endpoint: POST /api/campaigns/:id/note"}, "fullDescription": {"text": "`server.js` declares `POST /api/campaigns/:id/note` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e8e4c232594f3019", "name": "Unused endpoint: POST /api/campaigns/:id/save-drafts", "shortDescription": {"text": "Unused endpoint: POST /api/campaigns/:id/save-drafts"}, "fullDescription": {"text": "`server.js` declares `POST /api/campaigns/:id/save-drafts` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d696708711982d2e", "name": "Unused endpoint: POST /api/campaigns/:id/draft-email", "shortDescription": {"text": "Unused endpoint: POST /api/campaigns/:id/draft-email"}, "fullDescription": {"text": "`server.js` declares `POST /api/campaigns/:id/draft-email` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a238160f079a194f", "name": "Unused endpoint: POST /api/campaigns/:id/refine-email", "shortDescription": {"text": "Unused endpoint: POST /api/campaigns/:id/refine-email"}, "fullDescription": {"text": "`server.js` declares `POST /api/campaigns/:id/refine-email` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8765f564b19cf0da", "name": "Unused endpoint: POST /api/campaigns/:id/send-emails", "shortDescription": {"text": "Unused endpoint: POST /api/campaigns/:id/send-emails"}, "fullDescription": {"text": "`server.js` declares `POST /api/campaigns/:id/send-emails` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cbf58e4da6f96c76", "name": "Unused endpoint: POST /api/campaigns/:id/draft-followup", "shortDescription": {"text": "Unused endpoint: POST /api/campaigns/:id/draft-followup"}, "fullDescription": {"text": "`server.js` declares `POST /api/campaigns/:id/draft-followup` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd37d57ebf8f4de1", "name": "Unused endpoint: GET /api/campaigns/:id/outreach-status", "shortDescription": {"text": "Unused endpoint: GET /api/campaigns/:id/outreach-status"}, "fullDescription": {"text": "`server.js` declares `GET /api/campaigns/:id/outreach-status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6785189c19c46fa0", "name": "Unused endpoint: POST /api/campaigns/:id/send-followups", "shortDescription": {"text": "Unused endpoint: POST /api/campaigns/:id/send-followups"}, "fullDescription": {"text": "`server.js` declares `POST /api/campaigns/:id/send-followups` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c48052040ca25c5e", "name": "Unused endpoint: GET /api/outreach/gmail/auth", "shortDescription": {"text": "Unused endpoint: GET /api/outreach/gmail/auth"}, "fullDescription": {"text": "`server.js` declares `GET /api/outreach/gmail/auth` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-48e17b46df8ed9d5", "name": "Unused endpoint: GET /api/outreach/gmail/callback", "shortDescription": {"text": "Unused endpoint: GET /api/outreach/gmail/callback"}, "fullDescription": {"text": "`server.js` declares `GET /api/outreach/gmail/callback` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1cd801861c583a7", "name": "Unused endpoint: GET /api/outreach/gmail/status", "shortDescription": {"text": "Unused endpoint: GET /api/outreach/gmail/status"}, "fullDescription": {"text": "`server.js` declares `GET /api/outreach/gmail/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6ba2bec970fdfa45", "name": "Unused endpoint: POST /api/outreach/gmail/disconnect", "shortDescription": {"text": "Unused endpoint: POST /api/outreach/gmail/disconnect"}, "fullDescription": {"text": "`server.js` declares `POST /api/outreach/gmail/disconnect` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd93ca42e88c216f", "name": "Unused endpoint: POST /api/outreach/gmail/check-now", "shortDescription": {"text": "Unused endpoint: POST /api/outreach/gmail/check-now"}, "fullDescription": {"text": "`server.js` declares `POST /api/outreach/gmail/check-now` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5aeddbce187cba16", "name": "Unused endpoint: GET /api/campaigns/:id/replies", "shortDescription": {"text": "Unused endpoint: GET /api/campaigns/:id/replies"}, "fullDescription": {"text": "`server.js` declares `GET /api/campaigns/:id/replies` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-228bc20b00dd5167", "name": "Unused endpoint: POST /api/campaigns/:id/mark-replied", "shortDescription": {"text": "Unused endpoint: POST /api/campaigns/:id/mark-replied"}, "fullDescription": {"text": "`server.js` declares `POST /api/campaigns/:id/mark-replied` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-368f293d6752329a", "name": "Unused endpoint: POST /api/campaigns/:id/send-reply", "shortDescription": {"text": "Unused endpoint: POST /api/campaigns/:id/send-reply"}, "fullDescription": {"text": "`server.js` declares `POST /api/campaigns/:id/send-reply` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5e968eeaf3ebc286", "name": "Unused endpoint: GET /api/drafts", "shortDescription": {"text": "Unused endpoint: GET /api/drafts"}, "fullDescription": {"text": "`server.js` declares `GET /api/drafts` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fed6556e711b9545", "name": "Unused endpoint: GET /api/emails", "shortDescription": {"text": "Unused endpoint: GET /api/emails"}, "fullDescription": {"text": "`server.js` declares `GET /api/emails` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c05302946c0a7909", "name": "Unused endpoint: POST /api/emails/mark-read", "shortDescription": {"text": "Unused endpoint: POST /api/emails/mark-read"}, "fullDescription": {"text": "`server.js` declares `POST /api/emails/mark-read` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49201c2c849af835", "name": "Unused endpoint: POST /api/discover/directory", "shortDescription": {"text": "Unused endpoint: POST /api/discover/directory"}, "fullDescription": {"text": "`server.js` declares `POST /api/discover/directory` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3bddd19213b12365", "name": "Unused endpoint: POST /api/brands/discover", "shortDescription": {"text": "Unused endpoint: POST /api/brands/discover"}, "fullDescription": {"text": "`server.js` declares `POST /api/brands/discover` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a2a85ff2fbaa10d5", "name": "Unused endpoint: GET /api/tools/status", "shortDescription": {"text": "Unused endpoint: GET /api/tools/status"}, "fullDescription": {"text": "`server.js` declares `GET /api/tools/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49756487fe8a4f58", "name": "Unused endpoint: POST /api/tools/search", "shortDescription": {"text": "Unused endpoint: POST /api/tools/search"}, "fullDescription": {"text": "`server.js` declares `POST /api/tools/search` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-489516cb74a6f6e1", "name": "Unused endpoint: POST /api/tools/enrich-url", "shortDescription": {"text": "Unused endpoint: POST /api/tools/enrich-url"}, "fullDescription": {"text": "`server.js` declares `POST /api/tools/enrich-url` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8ba069bfca348d3e", "name": "Unused endpoint: GET /api/brands", "shortDescription": {"text": "Unused endpoint: GET /api/brands"}, "fullDescription": {"text": "`server.js` declares `GET /api/brands` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c74e96611a1469f8", "name": "Unused endpoint: GET /api/podcasts", "shortDescription": {"text": "Unused endpoint: GET /api/podcasts"}, "fullDescription": {"text": "`server.js` declares `GET /api/podcasts` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0a901de2e3d8d8e5", "name": "Unused endpoint: GET /api/media-targets", "shortDescription": {"text": "Unused endpoint: GET /api/media-targets"}, "fullDescription": {"text": "`server.js` declares `GET /api/media-targets` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-edcee967cf069280", "name": "Unused endpoint: POST /api/media-targets/:id", "shortDescription": {"text": "Unused endpoint: POST /api/media-targets/:id"}, "fullDescription": {"text": "`server.js` declares `POST /api/media-targets/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cba56a5ce9307743", "name": "Unused endpoint: POST /api/podcasts/draft", "shortDescription": {"text": "Unused endpoint: POST /api/podcasts/draft"}, "fullDescription": {"text": "`server.js` declares `POST /api/podcasts/draft` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c9ba55a23ace6a9c", "name": "Unused endpoint: POST /api/podcasts/refine", "shortDescription": {"text": "Unused endpoint: POST /api/podcasts/refine"}, "fullDescription": {"text": "`server.js` declares `POST /api/podcasts/refine` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7efd151c2182605e", "name": "Unused endpoint: POST /api/brands", "shortDescription": {"text": "Unused endpoint: POST /api/brands"}, "fullDescription": {"text": "`server.js` declares `POST /api/brands` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-83b363c64127c712", "name": "Unused endpoint: GET /api/brands/hackathon-prospects", "shortDescription": {"text": "Unused endpoint: GET /api/brands/hackathon-prospects"}, "fullDescription": {"text": "`server.js` declares `GET /api/brands/hackathon-prospects` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e4ab3ef8680a8826", "name": "Unused endpoint: DELETE /api/brands/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/brands/:id"}, "fullDescription": {"text": "`server.js` declares `DELETE /api/brands/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bca5b4cad686c2c7", "name": "Unused endpoint: POST /api/brands/:id/notes", "shortDescription": {"text": "Unused endpoint: POST /api/brands/:id/notes"}, "fullDescription": {"text": "`server.js` declares `POST /api/brands/:id/notes` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eb3bbdbc81baf3cd", "name": "Unused endpoint: POST /api/brands/:id/hackathon", "shortDescription": {"text": "Unused endpoint: POST /api/brands/:id/hackathon"}, "fullDescription": {"text": "`server.js` declares `POST /api/brands/:id/hackathon` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca06be9988296177", "name": "Unused endpoint: POST /api/brands/:id/draft-sponsor-email", "shortDescription": {"text": "Unused endpoint: POST /api/brands/:id/draft-sponsor-email"}, "fullDescription": {"text": "`server.js` declares `POST /api/brands/:id/draft-sponsor-email` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/29619"}, "properties": {"repository": "sorry-ari0/the-ambassador-outreacher-2000", "repoUrl": "https://github.com/sorry-ari0/the-ambassador-outreacher-2000", "branch": "main"}, "results": [{"ruleId": "scanner-bfcbb3d074ac9122", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server.js:389"}, "properties": {"repobilityId": "a9deebb5fdc93edc", "scanner": "scanner-primary", "fingerprint": "bfcbb3d074ac9122", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0c73ab9a1d129520", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in server.js:6"}, "properties": {"repobilityId": "23f3ba0b6e438ed3", "scanner": "scanner-primary", "fingerprint": "0c73ab9a1d129520", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-063891e4919d2f31", "level": "note", "message": {"text": "Very large file: server.js (3808 lines)"}, "properties": {"repobilityId": "1479ba50e708c5c1", "scanner": "scanner-primary", "fingerprint": "063891e4919d2f31", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "be4fbf3c4094a3db", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "7d15f2f364dc1f98", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "46306d9c9f65837f", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "c070b18dc504feba", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-433e53c54d4221d3", "level": "none", "message": {"text": "Commented-code block (7 lines) in server.js:1849"}, "properties": {"repobilityId": "69e1076da332ec55", "scanner": "scanner-primary", "fingerprint": "433e53c54d4221d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86253c12f1308c51", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server.js:368"}, "properties": {"repobilityId": "fecef07524f968d2", "scanner": "scanner-primary", "fingerprint": "86253c12f1308c51", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-65df07ab4020db79", "level": "note", "message": {"text": "18 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "5e334d56f52c02e1", "scanner": "scanner-primary", "fingerprint": "65df07ab4020db79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-95dd5f4e4c24b6ca", "level": "error", "message": {"text": "Dangling fetch: POST https://api.tavily.com/search (server.js:1754)"}, "properties": {"repobilityId": "c6f1efaca558148f", "scanner": "scanner-primary", "fingerprint": "95dd5f4e4c24b6ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a1407433a6605c9c", "level": "error", "message": {"text": "Dangling fetch: POST https://api.apollo.io/api/v1/mixed_people/api_search (server.js:2532)"}, "properties": {"repobilityId": "3fc135072d884436", "scanner": "scanner-primary", "fingerprint": "a1407433a6605c9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-79518587a07c44f4", "level": "error", "message": {"text": "Dangling fetch: POST https://api.apollo.io/api/v1/people/match (server.js:2568)"}, "properties": {"repobilityId": "792ce042984f9ca7", "scanner": "scanner-primary", "fingerprint": "79518587a07c44f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c70dafa227b6824", "level": "error", "message": {"text": "Dangling fetch: POST https://api.apify.com/v2/acts/${safeActorId}/runs?token=${token} (server.js:2750)"}, "properties": {"repobilityId": "ac9f5ef90ddf7ea9", "scanner": "scanner-primary", "fingerprint": "4c70dafa227b6824", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd65f0f593857ee2", "level": "error", "message": {"text": "Dangling fetch: GET https://api.apify.com/v2/actor-runs/${runId}?token=${token} (server.js:2764)"}, "properties": {"repobilityId": "cc8f57a36fa23aae", "scanner": "scanner-primary", "fingerprint": "cd65f0f593857ee2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8df40c06f6598a51", "level": "error", "message": {"text": "Dangling fetch: POST https://api.resend.com/emails (server.js:3196)"}, "properties": {"repobilityId": "3ad39a9bf418b85f", "scanner": "scanner-primary", "fingerprint": "8df40c06f6598a51", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f3e770d216f558b1", "level": "error", "message": {"text": "Dangling fetch: POST https://api.sendgrid.com/v3/mail/send (server.js:3207)"}, "properties": {"repobilityId": "55656106e99c43fb", "scanner": "scanner-primary", "fingerprint": "f3e770d216f558b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b68bde1bea21c9a", "level": "error", "message": {"text": "Dangling fetch: POST https://${region}/v3/${domain}/messages (server.js:3236)"}, "properties": {"repobilityId": "d2b4a0ac0065a910", "scanner": "scanner-primary", "fingerprint": "8b68bde1bea21c9a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aaae21a967de97a9", "level": "error", "message": {"text": "Dangling fetch: POST https://api.postmarkapp.com/email (server.js:3247)"}, "properties": {"repobilityId": "efe3dd40eddf9305", "scanner": "scanner-primary", "fingerprint": "aaae21a967de97a9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-be9c69e35197e6d3", "level": "error", "message": {"text": "Dangling fetch: GET https://api.resend.com/domains (server.js:3440)"}, "properties": {"repobilityId": "cdccd5d5011909c9", "scanner": "scanner-primary", "fingerprint": "be9c69e35197e6d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3d9da582b40ab683", "level": "error", "message": {"text": "Dangling fetch: GET https://api.sendgrid.com/v3/scopes (server.js:3444)"}, "properties": {"repobilityId": "64c61cbddf9c8af6", "scanner": "scanner-primary", "fingerprint": "3d9da582b40ab683", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ced2f2f3e449dd70", "level": "error", "message": {"text": "Dangling fetch: GET https://${host}/v3/${domain} (server.js:3450)"}, "properties": {"repobilityId": "9c86f0cd4e108202", "scanner": "scanner-primary", "fingerprint": "ced2f2f3e449dd70", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b08bddf5023b5b3", "level": "error", "message": {"text": "Dangling fetch: GET https://api.postmarkapp.com/server (server.js:3456)"}, "properties": {"repobilityId": "1040261a6fc0ac0b", "scanner": "scanner-primary", "fingerprint": "0b08bddf5023b5b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0555fab8e0ba515d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.socialcrawl.com/v1/search (server.js:3687)"}, "properties": {"repobilityId": "b28234ec5e0d9912", "scanner": "scanner-primary", "fingerprint": "0555fab8e0ba515d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7b3ca4bcd99573c4", "level": "note", "message": {"text": "Unused endpoint: USE /api/outreach"}, "properties": {"repobilityId": "90f2f9471200442f", "scanner": "scanner-primary", "fingerprint": "7b3ca4bcd99573c4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b70994931fd6a280", "level": "note", "message": {"text": "Unused endpoint: GET /api/creators"}, "properties": {"repobilityId": "28999f365af114dc", "scanner": "scanner-primary", "fingerprint": "b70994931fd6a280", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-81c2d2591a193760", "level": "note", "message": {"text": "Unused endpoint: PUT /api/creators/emails"}, "properties": {"repobilityId": "43cfc74ac364e015", "scanner": "scanner-primary", "fingerprint": "81c2d2591a193760", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f0240e8821e89472", "level": "note", "message": {"text": "Unused endpoint: POST /api/creators/import"}, "properties": {"repobilityId": "93aeb070e4f8aafa", "scanner": "scanner-primary", "fingerprint": "f0240e8821e89472", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2196d529ddf3e9dd", "level": "note", "message": {"text": "Unused endpoint: GET /api/creators/search"}, "properties": {"repobilityId": "fbe1225bbb8a6152", "scanner": "scanner-primary", "fingerprint": "2196d529ddf3e9dd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f0b89f4aa9ada3a3", "level": "note", "message": {"text": "Unused endpoint: GET /api/creators/filter"}, "properties": {"repobilityId": "f879cf20170f3904", "scanner": "scanner-primary", "fingerprint": "f0b89f4aa9ada3a3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3b37265900e79a8a", "level": "note", "message": {"text": "Unused endpoint: GET /api/stats"}, "properties": {"repobilityId": "8735764fed7aaaaa", "scanner": "scanner-primary", "fingerprint": "3b37265900e79a8a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9d2517f9eafc5297", "level": "note", "message": {"text": "Unused endpoint: POST /api/chat"}, "properties": {"repobilityId": "79ec3a715c2a37cb", "scanner": "scanner-primary", "fingerprint": "9d2517f9eafc5297", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1cd6ff9aec438e35", "level": "note", "message": {"text": "Unused endpoint: GET /api/campaigns"}, "properties": {"repobilityId": "de7b2f97f5c7a616", "scanner": "scanner-primary", "fingerprint": "1cd6ff9aec438e35", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5aed77bc825d1c42", "level": "note", "message": {"text": "Unused endpoint: POST /api/campaigns"}, "properties": {"repobilityId": "e1bed6dbc15e585a", "scanner": "scanner-primary", "fingerprint": "5aed77bc825d1c42", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ef731fe15cfaaac6", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/campaigns/:id"}, "properties": {"repobilityId": "37f547effd150d38", "scanner": "scanner-primary", "fingerprint": "ef731fe15cfaaac6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7076129264d52565", "level": "note", "message": {"text": "Unused endpoint: POST /api/campaigns/:id/add"}, "properties": {"repobilityId": "20835f76171bb3d6", "scanner": "scanner-primary", "fingerprint": "7076129264d52565", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2fe8e6d31b184e30", "level": "note", "message": {"text": "Unused endpoint: POST /api/campaigns/:id/update-status"}, "properties": {"repobilityId": "db5e4f17a83f9e03", "scanner": "scanner-primary", "fingerprint": "2fe8e6d31b184e30", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1748497f1b051169", "level": "note", "message": {"text": "Unused endpoint: POST /api/campaigns/:id/remove"}, "properties": {"repobilityId": "44df59c58608dd98", "scanner": "scanner-primary", "fingerprint": "1748497f1b051169", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-054eed8fb4d51459", "level": "note", "message": {"text": "Unused endpoint: POST /api/campaigns/:id/note"}, "properties": {"repobilityId": "05faab151b029c97", "scanner": "scanner-primary", "fingerprint": "054eed8fb4d51459", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e8e4c232594f3019", "level": "note", "message": {"text": "Unused endpoint: POST /api/campaigns/:id/save-drafts"}, "properties": {"repobilityId": "effbac147b039e3f", "scanner": "scanner-primary", "fingerprint": "e8e4c232594f3019", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d696708711982d2e", "level": "note", "message": {"text": "Unused endpoint: POST /api/campaigns/:id/draft-email"}, "properties": {"repobilityId": "07436109fb77f509", "scanner": "scanner-primary", "fingerprint": "d696708711982d2e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a238160f079a194f", "level": "note", "message": {"text": "Unused endpoint: POST /api/campaigns/:id/refine-email"}, "properties": {"repobilityId": "8b55720db86a9c75", "scanner": "scanner-primary", "fingerprint": "a238160f079a194f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8765f564b19cf0da", "level": "note", "message": {"text": "Unused endpoint: POST /api/campaigns/:id/send-emails"}, "properties": {"repobilityId": "8561089e46c8a537", "scanner": "scanner-primary", "fingerprint": "8765f564b19cf0da", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cbf58e4da6f96c76", "level": "note", "message": {"text": "Unused endpoint: POST /api/campaigns/:id/draft-followup"}, "properties": {"repobilityId": "cc7db25f93214587", "scanner": "scanner-primary", "fingerprint": "cbf58e4da6f96c76", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd37d57ebf8f4de1", "level": "note", "message": {"text": "Unused endpoint: GET /api/campaigns/:id/outreach-status"}, "properties": {"repobilityId": "9b6e3538776c9ca3", "scanner": "scanner-primary", "fingerprint": "cd37d57ebf8f4de1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6785189c19c46fa0", "level": "note", "message": {"text": "Unused endpoint: POST /api/campaigns/:id/send-followups"}, "properties": {"repobilityId": "4d1d13c0057cf143", "scanner": "scanner-primary", "fingerprint": "6785189c19c46fa0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c48052040ca25c5e", "level": "note", "message": {"text": "Unused endpoint: GET /api/outreach/gmail/auth"}, "properties": {"repobilityId": "a5578a6886ac28ba", "scanner": "scanner-primary", "fingerprint": "c48052040ca25c5e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-48e17b46df8ed9d5", "level": "note", "message": {"text": "Unused endpoint: GET /api/outreach/gmail/callback"}, "properties": {"repobilityId": "9eab966c42edc78f", "scanner": "scanner-primary", "fingerprint": "48e17b46df8ed9d5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b1cd801861c583a7", "level": "note", "message": {"text": "Unused endpoint: GET /api/outreach/gmail/status"}, "properties": {"repobilityId": "e9cea1323b545109", "scanner": "scanner-primary", "fingerprint": "b1cd801861c583a7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6ba2bec970fdfa45", "level": "note", "message": {"text": "Unused endpoint: POST /api/outreach/gmail/disconnect"}, "properties": {"repobilityId": "1c662a3188a12231", "scanner": "scanner-primary", "fingerprint": "6ba2bec970fdfa45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd93ca42e88c216f", "level": "note", "message": {"text": "Unused endpoint: POST /api/outreach/gmail/check-now"}, "properties": {"repobilityId": "9a213ddfa3082f59", "scanner": "scanner-primary", "fingerprint": "dd93ca42e88c216f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5aeddbce187cba16", "level": "note", "message": {"text": "Unused endpoint: GET /api/campaigns/:id/replies"}, "properties": {"repobilityId": "b834c6f597c3f60f", "scanner": "scanner-primary", "fingerprint": "5aeddbce187cba16", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-228bc20b00dd5167", "level": "note", "message": {"text": "Unused endpoint: POST /api/campaigns/:id/mark-replied"}, "properties": {"repobilityId": "84c8cd87b3e75800", "scanner": "scanner-primary", "fingerprint": "228bc20b00dd5167", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-368f293d6752329a", "level": "note", "message": {"text": "Unused endpoint: POST /api/campaigns/:id/send-reply"}, "properties": {"repobilityId": "aa8ac237a68e911b", "scanner": "scanner-primary", "fingerprint": "368f293d6752329a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5e968eeaf3ebc286", "level": "note", "message": {"text": "Unused endpoint: GET /api/drafts"}, "properties": {"repobilityId": "97c1253fb53a0290", "scanner": "scanner-primary", "fingerprint": "5e968eeaf3ebc286", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fed6556e711b9545", "level": "note", "message": {"text": "Unused endpoint: GET /api/emails"}, "properties": {"repobilityId": "24c18fca6bd55e4d", "scanner": "scanner-primary", "fingerprint": "fed6556e711b9545", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c05302946c0a7909", "level": "note", "message": {"text": "Unused endpoint: POST /api/emails/mark-read"}, "properties": {"repobilityId": "9b9312901c8b00d0", "scanner": "scanner-primary", "fingerprint": "c05302946c0a7909", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-49201c2c849af835", "level": "note", "message": {"text": "Unused endpoint: POST /api/discover/directory"}, "properties": {"repobilityId": "3f0ec3743393db8d", "scanner": "scanner-primary", "fingerprint": "49201c2c849af835", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3bddd19213b12365", "level": "note", "message": {"text": "Unused endpoint: POST /api/brands/discover"}, "properties": {"repobilityId": "5cf2aab33ccb413f", "scanner": "scanner-primary", "fingerprint": "3bddd19213b12365", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a2a85ff2fbaa10d5", "level": "note", "message": {"text": "Unused endpoint: GET /api/tools/status"}, "properties": {"repobilityId": "742a163a382123a5", "scanner": "scanner-primary", "fingerprint": "a2a85ff2fbaa10d5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-49756487fe8a4f58", "level": "note", "message": {"text": "Unused endpoint: POST /api/tools/search"}, "properties": {"repobilityId": "1502b5c98d6504ed", "scanner": "scanner-primary", "fingerprint": "49756487fe8a4f58", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-489516cb74a6f6e1", "level": "note", "message": {"text": "Unused endpoint: POST /api/tools/enrich-url"}, "properties": {"repobilityId": "9d21ce8bf9a24cfd", "scanner": "scanner-primary", "fingerprint": "489516cb74a6f6e1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8ba069bfca348d3e", "level": "note", "message": {"text": "Unused endpoint: GET /api/brands"}, "properties": {"repobilityId": "35f8bf76f17493a6", "scanner": "scanner-primary", "fingerprint": "8ba069bfca348d3e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c74e96611a1469f8", "level": "note", "message": {"text": "Unused endpoint: GET /api/podcasts"}, "properties": {"repobilityId": "e98d1a8a2d2cdc00", "scanner": "scanner-primary", "fingerprint": "c74e96611a1469f8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0a901de2e3d8d8e5", "level": "note", "message": {"text": "Unused endpoint: GET /api/media-targets"}, "properties": {"repobilityId": "6d55778dc56883dd", "scanner": "scanner-primary", "fingerprint": "0a901de2e3d8d8e5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-edcee967cf069280", "level": "note", "message": {"text": "Unused endpoint: POST /api/media-targets/:id"}, "properties": {"repobilityId": "03c0da0efa59c4f8", "scanner": "scanner-primary", "fingerprint": "edcee967cf069280", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cba56a5ce9307743", "level": "note", "message": {"text": "Unused endpoint: POST /api/podcasts/draft"}, "properties": {"repobilityId": "35406d4068867219", "scanner": "scanner-primary", "fingerprint": "cba56a5ce9307743", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c9ba55a23ace6a9c", "level": "note", "message": {"text": "Unused endpoint: POST /api/podcasts/refine"}, "properties": {"repobilityId": "b9d1ba96094caf2c", "scanner": "scanner-primary", "fingerprint": "c9ba55a23ace6a9c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7efd151c2182605e", "level": "note", "message": {"text": "Unused endpoint: POST /api/brands"}, "properties": {"repobilityId": "6bafbd14fbe8b623", "scanner": "scanner-primary", "fingerprint": "7efd151c2182605e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-83b363c64127c712", "level": "note", "message": {"text": "Unused endpoint: GET /api/brands/hackathon-prospects"}, "properties": {"repobilityId": "b5949024d29720b3", "scanner": "scanner-primary", "fingerprint": "83b363c64127c712", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e4ab3ef8680a8826", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/brands/:id"}, "properties": {"repobilityId": "39e51e25ca411e70", "scanner": "scanner-primary", "fingerprint": "e4ab3ef8680a8826", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bca5b4cad686c2c7", "level": "note", "message": {"text": "Unused endpoint: POST /api/brands/:id/notes"}, "properties": {"repobilityId": "4cf650b38f2e9e02", "scanner": "scanner-primary", "fingerprint": "bca5b4cad686c2c7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eb3bbdbc81baf3cd", "level": "note", "message": {"text": "Unused endpoint: POST /api/brands/:id/hackathon"}, "properties": {"repobilityId": "e73938cd0df1f351", "scanner": "scanner-primary", "fingerprint": "eb3bbdbc81baf3cd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca06be9988296177", "level": "note", "message": {"text": "Unused endpoint: POST /api/brands/:id/draft-sponsor-email"}, "properties": {"repobilityId": "d088dfa788aa8f8f", "scanner": "scanner-primary", "fingerprint": "ca06be9988296177", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}