@graph8/sdk 0.251.0 → 0.260.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -2
- package/dist/cli.js +216 -0
- package/dist/index.d.mts +104 -7
- package/dist/index.d.ts +104 -7
- package/dist/index.js +44 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +44 -3
- package/dist/index.mjs.map +1 -1
- package/dist/react.d.mts +102 -7
- package/dist/react.d.ts +102 -7
- package/dist/react.js +62 -11
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +53 -12
- package/dist/react.mjs.map +1 -1
- package/dist/types/README.md +7 -0
- package/dist/types/agency.d.ts +20 -0
- package/dist/types/agentSetup.d.ts +57 -0
- package/dist/types/api.d.ts +127 -0
- package/dist/types/appClient.d.ts +99 -0
- package/dist/types/appPlatform.d.ts +269 -0
- package/dist/types/appTokens.d.ts +125 -0
- package/dist/types/apps.d.ts +130 -0
- package/dist/types/audiences.d.ts +88 -0
- package/dist/types/calendar.d.ts +55 -0
- package/dist/types/campaigns.d.ts +61 -0
- package/dist/types/chat.d.ts +35 -0
- package/dist/types/cli.d.ts +14 -0
- package/dist/types/companies.d.ts +123 -0
- package/dist/types/contacts.d.ts +200 -0
- package/dist/types/copilot.d.ts +31 -0
- package/dist/types/core.d.ts +1052 -0
- package/dist/types/deals.d.ts +215 -0
- package/dist/types/enrich.d.ts +51 -0
- package/dist/types/fields.d.ts +84 -0
- package/dist/types/forms.d.ts +16 -0
- package/dist/types/http.d.ts +141 -0
- package/dist/types/inbox.d.ts +123 -0
- package/dist/types/index.d.ts +63 -0
- package/dist/types/intent.d.ts +196 -0
- package/dist/types/lists.d.ts +44 -0
- package/dist/types/mailboxes.d.ts +240 -0
- package/dist/types/marketplace.d.ts +62 -0
- package/dist/types/meetings.d.ts +70 -0
- package/dist/types/newsletter.d.ts +212 -0
- package/dist/types/notes.d.ts +57 -0
- package/dist/types/objects.d.ts +281 -0
- package/dist/types/pipelines.d.ts +135 -0
- package/dist/types/quotes.d.ts +143 -0
- package/dist/types/react.d.ts +978 -0
- package/dist/types/search.d.ts +99 -0
- package/dist/types/sequences.d.ts +255 -0
- package/dist/types/signals.d.ts +28 -0
- package/dist/types/skills.d.ts +176 -0
- package/dist/types/snippet.d.ts +24 -0
- package/dist/types/studio.d.ts +161 -0
- package/dist/types/tasks.d.ts +101 -0
- package/dist/types/types.d.ts +45 -0
- package/dist/types/utils.d.ts +21 -0
- package/dist/types/version.d.ts +10 -0
- package/dist/types/visitors.d.ts +29 -0
- package/dist/types/voice.d.ts +304 -0
- package/dist/types/webhooks.d.ts +71 -0
- package/dist/types/workflows.d.ts +229 -0
- package/docs/agents.md +748 -0
- package/docs/api/README.md +165 -0
- package/docs/api/accounts.d.ts +396 -0
- package/docs/api/accounts.md +644 -0
- package/docs/api/adCampaigns.d.ts +707 -0
- package/docs/api/adCampaigns.md +1091 -0
- package/docs/api/adCreatives.d.ts +996 -0
- package/docs/api/adCreatives.md +1708 -0
- package/docs/api/agency.d.ts +556 -0
- package/docs/api/agency.md +845 -0
- package/docs/api/agent.d.ts +330 -0
- package/docs/api/agent.md +514 -0
- package/docs/api/agents.d.ts +1622 -0
- package/docs/api/agents.md +2860 -0
- package/docs/api/aiInbox.d.ts +1984 -0
- package/docs/api/aiInbox.md +3490 -0
- package/docs/api/analytics.d.ts +1273 -0
- package/docs/api/analytics.md +2095 -0
- package/docs/api/apiKeys.d.ts +252 -0
- package/docs/api/apiKeys.md +318 -0
- package/docs/api/appDeployments.d.ts +236 -0
- package/docs/api/appDeployments.md +471 -0
- package/docs/api/appDomains.d.ts +171 -0
- package/docs/api/appDomains.md +281 -0
- package/docs/api/appLogs.d.ts +120 -0
- package/docs/api/appLogs.md +159 -0
- package/docs/api/appObjects.d.ts +415 -0
- package/docs/api/appObjects.md +568 -0
- package/docs/api/appPages.d.ts +557 -0
- package/docs/api/appPages.md +796 -0
- package/docs/api/appPlatformTokens.d.ts +123 -0
- package/docs/api/appPlatformTokens.md +172 -0
- package/docs/api/appointments.d.ts +2361 -0
- package/docs/api/appointments.md +3917 -0
- package/docs/api/apps.d.ts +822 -0
- package/docs/api/apps.md +1342 -0
- package/docs/api/assertUpsert.d.ts +286 -0
- package/docs/api/assertUpsert.md +370 -0
- package/docs/api/audienceSyncs.d.ts +259 -0
- package/docs/api/audienceSyncs.md +395 -0
- package/docs/api/brandKit.d.ts +686 -0
- package/docs/api/brandKit.md +1133 -0
- package/docs/api/bugReports.d.ts +181 -0
- package/docs/api/bugReports.md +268 -0
- package/docs/api/by-path.md +3260 -0
- package/docs/api/calendarInvites.d.ts +117 -0
- package/docs/api/calendarInvites.md +148 -0
- package/docs/api/campaignWorkflows.d.ts +152 -0
- package/docs/api/campaignWorkflows.md +200 -0
- package/docs/api/campaigns.d.ts +721 -0
- package/docs/api/campaigns.md +1236 -0
- package/docs/api/channels.d.ts +171 -0
- package/docs/api/channels.md +235 -0
- package/docs/api/cliCampaigns.d.ts +205 -0
- package/docs/api/cliCampaigns.md +256 -0
- package/docs/api/cliPipelines.d.ts +324 -0
- package/docs/api/cliPipelines.md +562 -0
- package/docs/api/clickHouse.d.ts +115 -0
- package/docs/api/clickHouse.md +138 -0
- package/docs/api/companies.d.ts +1636 -0
- package/docs/api/companies.md +2211 -0
- package/docs/api/companyIntelligence.d.ts +299 -0
- package/docs/api/companyIntelligence.md +488 -0
- package/docs/api/contacts.d.ts +2173 -0
- package/docs/api/contacts.md +3143 -0
- package/docs/api/content.d.ts +968 -0
- package/docs/api/content.md +1667 -0
- package/docs/api/contentGridSkills.d.ts +177 -0
- package/docs/api/contentGridSkills.md +271 -0
- package/docs/api/copilot.d.ts +1017 -0
- package/docs/api/copilot.md +1765 -0
- package/docs/api/crmSyncs.d.ts +215 -0
- package/docs/api/crmSyncs.md +301 -0
- package/docs/api/customerSuccess.d.ts +491 -0
- package/docs/api/customerSuccess.md +776 -0
- package/docs/api/deals.d.ts +1696 -0
- package/docs/api/deals.md +2432 -0
- package/docs/api/deliverability.d.ts +418 -0
- package/docs/api/deliverability.md +677 -0
- package/docs/api/desk.d.ts +1765 -0
- package/docs/api/desk.md +3007 -0
- package/docs/api/dialer.d.ts +1185 -0
- package/docs/api/dialer.md +2166 -0
- package/docs/api/dialerAnalytics.d.ts +187 -0
- package/docs/api/dialerAnalytics.md +257 -0
- package/docs/api/documents.d.ts +895 -0
- package/docs/api/documents.md +1440 -0
- package/docs/api/duplicates.d.ts +195 -0
- package/docs/api/duplicates.md +315 -0
- package/docs/api/eSign.d.ts +38 -0
- package/docs/api/eSign.md +54 -0
- package/docs/api/eSignature.d.ts +242 -0
- package/docs/api/eSignature.md +341 -0
- package/docs/api/enrichment.d.ts +3207 -0
- package/docs/api/enrichment.md +5225 -0
- package/docs/api/events.d.ts +115 -0
- package/docs/api/events.md +105 -0
- package/docs/api/fields.d.ts +482 -0
- package/docs/api/fields.md +566 -0
- package/docs/api/forms.d.ts +1012 -0
- package/docs/api/forms.md +1542 -0
- package/docs/api/gtmCampaigns.d.ts +662 -0
- package/docs/api/gtmCampaigns.md +1044 -0
- package/docs/api/gtmContext.d.ts +1187 -0
- package/docs/api/gtmContext.md +2112 -0
- package/docs/api/gtmDeliverability.d.ts +60 -0
- package/docs/api/gtmDeliverability.md +63 -0
- package/docs/api/gtmKnowledgeBase.d.ts +76 -0
- package/docs/api/gtmKnowledgeBase.md +91 -0
- package/docs/api/gtmLaunchHelpers.d.ts +123 -0
- package/docs/api/gtmLaunchHelpers.md +148 -0
- package/docs/api/gtmLibrary.d.ts +448 -0
- package/docs/api/gtmLibrary.md +780 -0
- package/docs/api/health.d.ts +39 -0
- package/docs/api/health.md +58 -0
- package/docs/api/imageLibrary.d.ts +341 -0
- package/docs/api/imageLibrary.md +569 -0
- package/docs/api/imports.d.ts +157 -0
- package/docs/api/imports.md +174 -0
- package/docs/api/inbox.d.ts +709 -0
- package/docs/api/inbox.md +1067 -0
- package/docs/api/install.d.ts +213 -0
- package/docs/api/install.md +317 -0
- package/docs/api/installedApps.d.ts +131 -0
- package/docs/api/installedApps.md +241 -0
- package/docs/api/integrationStatus.d.ts +142 -0
- package/docs/api/integrationStatus.md +205 -0
- package/docs/api/integrations.d.ts +2327 -0
- package/docs/api/integrations.md +3791 -0
- package/docs/api/intent.d.ts +482 -0
- package/docs/api/intent.md +858 -0
- package/docs/api/knowledge.d.ts +501 -0
- package/docs/api/knowledge.md +843 -0
- package/docs/api/knowledgeBase.d.ts +84 -0
- package/docs/api/knowledgeBase.md +96 -0
- package/docs/api/landingPages.d.ts +1411 -0
- package/docs/api/landingPages.md +2488 -0
- package/docs/api/leads.d.ts +133 -0
- package/docs/api/leads.md +180 -0
- package/docs/api/library.d.ts +217 -0
- package/docs/api/library.md +338 -0
- package/docs/api/linkedIn.d.ts +227 -0
- package/docs/api/linkedIn.md +289 -0
- package/docs/api/linkedInOutreach.d.ts +727 -0
- package/docs/api/linkedInOutreach.md +990 -0
- package/docs/api/lists.d.ts +1106 -0
- package/docs/api/lists.md +1609 -0
- package/docs/api/logs.d.ts +71 -0
- package/docs/api/logs.md +70 -0
- package/docs/api/mailboxes.d.ts +1050 -0
- package/docs/api/mailboxes.md +1690 -0
- package/docs/api/marketingIntelligence.d.ts +256 -0
- package/docs/api/marketingIntelligence.md +454 -0
- package/docs/api/marketplace.d.ts +3173 -0
- package/docs/api/marketplace.md +5953 -0
- package/docs/api/mcp.d.ts +69 -0
- package/docs/api/mcp.md +69 -0
- package/docs/api/me.d.ts +54 -0
- package/docs/api/me.md +56 -0
- package/docs/api/meetings.d.ts +539 -0
- package/docs/api/meetings.md +747 -0
- package/docs/api/newsletter.d.ts +1613 -0
- package/docs/api/newsletter.md +2746 -0
- package/docs/api/notes.d.ts +517 -0
- package/docs/api/notes.md +888 -0
- package/docs/api/notifications.d.ts +94 -0
- package/docs/api/notifications.md +105 -0
- package/docs/api/objects.d.ts +621 -0
- package/docs/api/objects.md +1098 -0
- package/docs/api/openSearch.d.ts +234 -0
- package/docs/api/openSearch.md +297 -0
- package/docs/api/ops.d.ts +299 -0
- package/docs/api/ops.md +339 -0
- package/docs/api/orgGovernance.d.ts +393 -0
- package/docs/api/orgGovernance.md +623 -0
- package/docs/api/orgVideos.d.ts +184 -0
- package/docs/api/orgVideos.md +252 -0
- package/docs/api/organizationSettings.d.ts +626 -0
- package/docs/api/organizationSettings.md +911 -0
- package/docs/api/phoneNumbers.d.ts +484 -0
- package/docs/api/phoneNumbers.md +777 -0
- package/docs/api/profile.d.ts +329 -0
- package/docs/api/profile.md +540 -0
- package/docs/api/programmaticPages.d.ts +400 -0
- package/docs/api/programmaticPages.md +626 -0
- package/docs/api/providerDomains.d.ts +866 -0
- package/docs/api/providerDomains.md +1446 -0
- package/docs/api/providerUsage.d.ts +129 -0
- package/docs/api/providerUsage.md +186 -0
- package/docs/api/public.d.ts +69 -0
- package/docs/api/public.md +78 -0
- package/docs/api/publicCopilot.d.ts +67 -0
- package/docs/api/publicCopilot.md +80 -0
- package/docs/api/publicSignals.d.ts +66 -0
- package/docs/api/publicSignals.md +71 -0
- package/docs/api/publicVisitors.d.ts +97 -0
- package/docs/api/publicVisitors.md +118 -0
- package/docs/api/quotes.d.ts +1564 -0
- package/docs/api/quotes.md +2553 -0
- package/docs/api/radar.d.ts +808 -0
- package/docs/api/radar.md +1431 -0
- package/docs/api/radarReports.d.ts +208 -0
- package/docs/api/radarReports.md +306 -0
- package/docs/api/recordRoles.d.ts +143 -0
- package/docs/api/recordRoles.md +175 -0
- package/docs/api/repos.d.ts +146 -0
- package/docs/api/repos.md +211 -0
- package/docs/api/research.d.ts +295 -0
- package/docs/api/research.md +534 -0
- package/docs/api/revenue.d.ts +402 -0
- package/docs/api/revenue.md +608 -0
- package/docs/api/revenueAnalytics.d.ts +147 -0
- package/docs/api/revenueAnalytics.md +212 -0
- package/docs/api/revenueLifecycle.d.ts +207 -0
- package/docs/api/revenueLifecycle.md +274 -0
- package/docs/api/revenueRecords.d.ts +372 -0
- package/docs/api/revenueRecords.md +563 -0
- package/docs/api/roles.d.ts +431 -0
- package/docs/api/roles.md +812 -0
- package/docs/api/salesCoach.d.ts +877 -0
- package/docs/api/salesCoach.md +1540 -0
- package/docs/api/sandbox.d.ts +210 -0
- package/docs/api/sandbox.md +380 -0
- package/docs/api/scans.d.ts +104 -0
- package/docs/api/scans.md +136 -0
- package/docs/api/scheduleBuy.d.ts +293 -0
- package/docs/api/scheduleBuy.md +431 -0
- package/docs/api/scraping.d.ts +266 -0
- package/docs/api/scraping.md +383 -0
- package/docs/api/sdrAnalytics.d.ts +138 -0
- package/docs/api/sdrAnalytics.md +246 -0
- package/docs/api/search.d.ts +598 -0
- package/docs/api/search.md +866 -0
- package/docs/api/seo.d.ts +447 -0
- package/docs/api/seo.md +660 -0
- package/docs/api/sequenceLifecycle.d.ts +439 -0
- package/docs/api/sequenceLifecycle.md +513 -0
- package/docs/api/sequences.d.ts +1936 -0
- package/docs/api/sequences.md +3232 -0
- package/docs/api/settings.d.ts +448 -0
- package/docs/api/settings.md +731 -0
- package/docs/api/signals.d.ts +1441 -0
- package/docs/api/signals.md +2526 -0
- package/docs/api/signatures.d.ts +719 -0
- package/docs/api/signatures.md +1247 -0
- package/docs/api/skills.d.ts +230 -0
- package/docs/api/skills.md +466 -0
- package/docs/api/snippet.d.ts +85 -0
- package/docs/api/snippet.md +106 -0
- package/docs/api/socialPublishing.d.ts +824 -0
- package/docs/api/socialPublishing.md +1245 -0
- package/docs/api/studioDocuments.d.ts +244 -0
- package/docs/api/studioDocuments.md +348 -0
- package/docs/api/support.d.ts +90 -0
- package/docs/api/support.md +76 -0
- package/docs/api/suppressions.d.ts +241 -0
- package/docs/api/suppressions.md +343 -0
- package/docs/api/surveys.d.ts +847 -0
- package/docs/api/surveys.md +1223 -0
- package/docs/api/tasks.d.ts +813 -0
- package/docs/api/tasks.md +1344 -0
- package/docs/api/teamMembers.d.ts +668 -0
- package/docs/api/teamMembers.md +1040 -0
- package/docs/api/teams.d.ts +784 -0
- package/docs/api/teams.md +1395 -0
- package/docs/api/usage.d.ts +277 -0
- package/docs/api/usage.md +389 -0
- package/docs/api/visitors.d.ts +690 -0
- package/docs/api/visitors.md +1075 -0
- package/docs/api/voice.d.ts +4661 -0
- package/docs/api/voice.md +7905 -0
- package/docs/api/webAnalytics.d.ts +964 -0
- package/docs/api/webAnalytics.md +1452 -0
- package/docs/api/webChat.d.ts +1704 -0
- package/docs/api/webChat.md +2048 -0
- package/docs/api/webhooks.d.ts +251 -0
- package/docs/api/webhooks.md +386 -0
- package/docs/api/websiteEditor.d.ts +324 -0
- package/docs/api/websiteEditor.md +517 -0
- package/docs/api/work.d.ts +2298 -0
- package/docs/api/work.md +3096 -0
- package/docs/api/workbench.d.ts +2962 -0
- package/docs/api/workbench.md +4884 -0
- package/docs/api/workflows.d.ts +1218 -0
- package/docs/api/workflows.md +2302 -0
- package/docs/sdk-clients.md +4339 -0
- package/package.json +10 -3
|
@@ -0,0 +1,1431 @@
|
|
|
1
|
+
<!-- Generated by sdk/js/scripts/generate-agent-docs.ts from developer-contract/openapi.json. Regenerated on every build. -->
|
|
2
|
+
|
|
3
|
+
# `g8.api.radar`: Radar
|
|
4
|
+
|
|
5
|
+
42 operations (27 read, 1 destructive, 13 billable, 1 external).
|
|
6
|
+
|
|
7
|
+
No hand-written client covers this area. Call it through `g8.api.radar.*` as shown below, or by operationId with `g8.api.call(operationId, input)`.
|
|
8
|
+
|
|
9
|
+
Every example below assumes this setup (server-side, API key):
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { g8 } from "@graph8/sdk";
|
|
13
|
+
|
|
14
|
+
g8.init({ apiKey: process.env.G8_API_KEY! });
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Example values are placeholders that match each field's type. Only required fields are shown. Every example is type-checked against the SDK in CI.
|
|
18
|
+
|
|
19
|
+
Exact TypeScript types for every operation on this page, and every schema they use: [radar.d.ts](radar.d.ts).
|
|
20
|
+
|
|
21
|
+
## Operations
|
|
22
|
+
|
|
23
|
+
| Call | HTTP | Tier | Scope | Summary |
|
|
24
|
+
|---|---|---|---|---|
|
|
25
|
+
| [`aeoOverview`](#op-aeooverview) | `GET /api/v1/radar/aeo` | read | `radar:read` | Aeo Overview |
|
|
26
|
+
| [`aeoProbes`](#op-aeoprobes) | `GET /api/v1/radar/aeo/probes` | read | `radar:read` | Aeo Probes |
|
|
27
|
+
| [`aeoRun`](#op-aeorun) | `POST /api/v1/radar/aeo/run` | billable | `radar:run` | Aeo Run |
|
|
28
|
+
| [`analyzeGaps`](#op-analyzegaps) | `POST /api/v1/radar/gaps/analyze` | billable | `radar:run` | Analyze Gaps |
|
|
29
|
+
| [`approveAllOpportunities`](#op-approveallopportunities) | `POST /api/v1/radar/opportunities/approve-all` | billable | `radar:write` | Approve All Opportunities |
|
|
30
|
+
| [`approveOpportunity`](#op-approveopportunity) | `POST /api/v1/radar/opportunities/{gap_id}/approve` | billable | `radar:write` | Approve Opportunity |
|
|
31
|
+
| [`bulkAddCompetitors`](#op-bulkaddcompetitors) | `POST /api/v1/radar/competitors/bulk` | billable | `radar:write` | Bulk Add Competitors |
|
|
32
|
+
| [`compareSnapshot`](#op-comparesnapshot) | `GET /api/v1/radar/snapshots/{snapshot_id}/compare` | read | `radar:read` | Compare Snapshot |
|
|
33
|
+
| [`competitorBattleCard`](#op-competitorbattlecard) | `GET /api/v1/radar/competitors/{competitor_id}/battle-card` | read | `radar:read` | Competitor Battle Card |
|
|
34
|
+
| [`competitorSuggestions`](#op-competitorsuggestions) | `GET /api/v1/radar/competitors/suggestions` | read | `radar:read` | Competitor Suggestions |
|
|
35
|
+
| [`createCompetitor`](#op-createcompetitor) | `POST /api/v1/radar/competitors` | billable | `radar:write` | Create Competitor |
|
|
36
|
+
| [`deleteCompetitor`](#op-deletecompetitor) | `DELETE /api/v1/radar/competitors/{competitor_id}` | destructive | `radar:delete` | Delete Competitor |
|
|
37
|
+
| [`discoverCompetitorPages`](#op-discovercompetitorpages) | `GET /api/v1/radar/competitors/{competitor_id}/discover-pages` | billable | `radar:run` | Discover Competitor Pages |
|
|
38
|
+
| [`dispatchAlerts`](#op-dispatchalerts) | `POST /api/v1/radar/alerts/dispatch` | external | `radar:run` | Dispatch Alerts |
|
|
39
|
+
| [`featureMatrix`](#op-featurematrix) | `GET /api/v1/radar/feature-matrix` | read | `radar:read` | Feature Matrix |
|
|
40
|
+
| [`getCompetitor`](#op-getcompetitor) | `GET /api/v1/radar/competitors/{competitor_id}` | read | `radar:read` | Get Competitor |
|
|
41
|
+
| [`getCompetitorAds`](#op-getcompetitorads) | `GET /api/v1/radar/competitors/{competitor_id}/ads` | read | `radar:read` | Get Competitor Ads |
|
|
42
|
+
| [`getCompetitorEngagers`](#op-getcompetitorengagers) | `GET /api/v1/radar/competitors/{competitor_id}/engagers` | read | `radar:read` | Get Competitor Engagers |
|
|
43
|
+
| [`getCompetitorPages`](#op-getcompetitorpages) | `GET /api/v1/radar/competitors/{competitor_id}/pages` | read | `radar:read` | Get Competitor Pages |
|
|
44
|
+
| [`getCompetitorPosts`](#op-getcompetitorposts) | `GET /api/v1/radar/competitors/{competitor_id}/posts` | read | `radar:read` | Get Competitor Posts |
|
|
45
|
+
| [`getCompetitorTraffic`](#op-getcompetitortraffic) | `GET /api/v1/radar/competitors/{competitor_id}/traffic` | read | `radar:read` | Get Competitor Traffic |
|
|
46
|
+
| [`getSettings`](#op-getsettings) | `GET /api/v1/radar/settings` | read | `radar:read` | Get Settings |
|
|
47
|
+
| [`keywordGap`](#op-keywordgap) | `GET /api/v1/radar/keyword-gap` | read | `radar:run` | Keyword Gap |
|
|
48
|
+
| [`listCompetitors`](#op-listcompetitors) | `GET /api/v1/radar/competitors` | read | `radar:read` | List Competitors |
|
|
49
|
+
| [`listGaps`](#op-listgaps) | `GET /api/v1/radar/gaps` | read | `radar:read` | List Gaps |
|
|
50
|
+
| [`listInitiatives`](#op-listinitiatives) | `GET /api/v1/radar/initiatives` | read | `radar:read` | List Initiatives |
|
|
51
|
+
| [`listOpportunities`](#op-listopportunities) | `GET /api/v1/radar/opportunities` | read | `radar:read` | List Opportunities |
|
|
52
|
+
| [`measureInitiatives`](#op-measureinitiatives) | `POST /api/v1/radar/initiatives/measure` | billable | `radar:run` | Measure Initiatives |
|
|
53
|
+
| [`monitoringAdDetail`](#op-monitoringaddetail) | `GET /api/v1/radar/monitoring/ads/{ad_id}` | read | `radar:read` | Monitoring Ad Detail |
|
|
54
|
+
| [`monitoringAds`](#op-monitoringads) | `GET /api/v1/radar/monitoring/ads` | read | `radar:run` | Monitoring Ads |
|
|
55
|
+
| [`monitoringContent`](#op-monitoringcontent) | `GET /api/v1/radar/monitoring/content` | read | `radar:read` | Monitoring Content |
|
|
56
|
+
| [`monitoringLinkedin`](#op-monitoringlinkedin) | `GET /api/v1/radar/monitoring/linkedin` | read | `radar:read` | Monitoring Linkedin |
|
|
57
|
+
| [`optimizationRuns`](#op-optimizationruns) | `GET /api/v1/radar/optimization-runs` | read | `radar:read` | Optimization Runs |
|
|
58
|
+
| [`overview`](#op-overview) | `GET /api/v1/radar/overview` | read | `radar:read` | Overview |
|
|
59
|
+
| [`ownTrafficEstimate`](#op-owntrafficestimate) | `GET /api/v1/radar/own-traffic-estimate` | read | `radar:run` | Own Traffic Estimate |
|
|
60
|
+
| [`pageHistory`](#op-pagehistory) | `GET /api/v1/radar/monitoring/page-history` | read | `radar:read` | Page History |
|
|
61
|
+
| [`putSettings`](#op-putsettings) | `PUT /api/v1/radar/settings` | billable | `radar:write` | Put Settings |
|
|
62
|
+
| [`scanAllCompetitors`](#op-scanallcompetitors) | `POST /api/v1/radar/scan-all` | billable | `radar:run` | Scan All Competitors |
|
|
63
|
+
| [`scanCompetitor`](#op-scancompetitor) | `POST /api/v1/radar/competitors/{competitor_id}/scan` | billable | `radar:run` | Scan Competitor |
|
|
64
|
+
| [`traffic`](#op-traffic) | `GET /api/v1/radar/traffic` | read | `radar:read` | Traffic |
|
|
65
|
+
| [`updateCompetitor`](#op-updatecompetitor) | `PATCH /api/v1/radar/competitors/{competitor_id}` | billable | `radar:write` | Update Competitor |
|
|
66
|
+
| [`updateGap`](#op-updategap) | `PATCH /api/v1/radar/gaps/{gap_id}` | billable | `radar:write` | Update Gap |
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
<a id="op-aeooverview"></a>
|
|
71
|
+
|
|
72
|
+
### `g8.api.radar.aeoOverview(input?)`
|
|
73
|
+
|
|
74
|
+
**Aeo Overview**
|
|
75
|
+
|
|
76
|
+
- HTTP: `GET /api/v1/radar/aeo`
|
|
77
|
+
- operationId: `aeo_overview_radar_aeo_get` (also callable as `g8.api.call("aeo_overview_radar_aeo_get", input)`)
|
|
78
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
79
|
+
- API-key scope: `radar:read`
|
|
80
|
+
|
|
81
|
+
Answer-engine share-of-voice: mention/citation rate, SoV, leaderboard.
|
|
82
|
+
|
|
83
|
+
``engine`` is passed through as a RESOLVED value. Called directly (not via
|
|
84
|
+
FastAPI), an omitted param would keep its ``Query(default=None)`` sentinel,
|
|
85
|
+
which the cb handler reads as a truthy unsupported engine and rejects with a
|
|
86
|
+
400 on every call - so the value must be forwarded explicitly.
|
|
87
|
+
|
|
88
|
+
**Input**
|
|
89
|
+
|
|
90
|
+
| Field | Type | Required | Description |
|
|
91
|
+
|---|---|---|---|
|
|
92
|
+
| `query.engine` | `string \| null` | no | Filter to one answer engine (e.g. claude, perplexity). |
|
|
93
|
+
|
|
94
|
+
**Returns** `unknown`.
|
|
95
|
+
|
|
96
|
+
**Example**
|
|
97
|
+
|
|
98
|
+
```ts
|
|
99
|
+
const result = await g8.api.radar.aeoOverview();
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
<a id="op-aeoprobes"></a>
|
|
105
|
+
|
|
106
|
+
### `g8.api.radar.aeoProbes(input?)`
|
|
107
|
+
|
|
108
|
+
**Aeo Probes**
|
|
109
|
+
|
|
110
|
+
- HTTP: `GET /api/v1/radar/aeo/probes`
|
|
111
|
+
- operationId: `aeo_probes_radar_aeo_probes_get` (also callable as `g8.api.call("aeo_probes_radar_aeo_probes_get", input)`)
|
|
112
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
113
|
+
- API-key scope: `radar:read`
|
|
114
|
+
|
|
115
|
+
List the org's tracked AEO buyer-intent probes.
|
|
116
|
+
|
|
117
|
+
**Input**: none.
|
|
118
|
+
|
|
119
|
+
**Returns** `unknown`.
|
|
120
|
+
|
|
121
|
+
**Example**
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
const result = await g8.api.radar.aeoProbes();
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
<a id="op-aeorun"></a>
|
|
130
|
+
|
|
131
|
+
### `g8.api.radar.aeoRun(input?)`
|
|
132
|
+
|
|
133
|
+
**Aeo Run**
|
|
134
|
+
|
|
135
|
+
- HTTP: `POST /api/v1/radar/aeo/run`
|
|
136
|
+
- operationId: `aeo_run_radar_aeo_run_post` (also callable as `g8.api.call("aeo_run_radar_aeo_run_post", input)`)
|
|
137
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
138
|
+
- API-key scope: `radar:run`
|
|
139
|
+
|
|
140
|
+
BILLABLE: trigger an AEO run (one paid LLM call per probe, Celery).
|
|
141
|
+
|
|
142
|
+
The cb function declares a settings:write dependency; we pass _=None so the
|
|
143
|
+
gate is satisfied at the public surface (RBAC specs out of scope).
|
|
144
|
+
|
|
145
|
+
**Input**: none.
|
|
146
|
+
|
|
147
|
+
**Returns** `unknown`.
|
|
148
|
+
|
|
149
|
+
**Example**
|
|
150
|
+
|
|
151
|
+
```ts
|
|
152
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
153
|
+
const result = await g8.api.radar.aeoRun();
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
<a id="op-analyzegaps"></a>
|
|
159
|
+
|
|
160
|
+
### `g8.api.radar.analyzeGaps(input)`
|
|
161
|
+
|
|
162
|
+
**Analyze Gaps**
|
|
163
|
+
|
|
164
|
+
- HTTP: `POST /api/v1/radar/gaps/analyze`
|
|
165
|
+
- operationId: `analyze_gaps_radar_gaps_analyze_post` (also callable as `g8.api.call("analyze_gaps_radar_gaps_analyze_post", input)`)
|
|
166
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
167
|
+
- API-key scope: `radar:run`
|
|
168
|
+
|
|
169
|
+
BILLABLE: enqueue gap analysis across the tracked set (LLM, Celery).
|
|
170
|
+
|
|
171
|
+
**Input**
|
|
172
|
+
|
|
173
|
+
| Field | Type | Required | Description |
|
|
174
|
+
|---|---|---|---|
|
|
175
|
+
| `body` | `AnalyzeGapsRequest` | yes | Request body; fields below. |
|
|
176
|
+
|
|
177
|
+
Body fields (`AnalyzeGapsRequest`):
|
|
178
|
+
|
|
179
|
+
| Field | Type | Required | Description |
|
|
180
|
+
|---|---|---|---|
|
|
181
|
+
| `body.lenses` | `Array<string> \| null` | no | |
|
|
182
|
+
|
|
183
|
+
**Returns** `unknown`.
|
|
184
|
+
|
|
185
|
+
**Example**
|
|
186
|
+
|
|
187
|
+
```ts
|
|
188
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
189
|
+
const result = await g8.api.radar.analyzeGaps({ body: {} });
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
<a id="op-approveallopportunities"></a>
|
|
195
|
+
|
|
196
|
+
### `g8.api.radar.approveAllOpportunities(input)`
|
|
197
|
+
|
|
198
|
+
**Approve All Opportunities**
|
|
199
|
+
|
|
200
|
+
- HTTP: `POST /api/v1/radar/opportunities/approve-all`
|
|
201
|
+
- operationId: `approve_all_opportunities_radar_opportunities_approve_all_post` (also callable as `g8.api.call("approve_all_opportunities_radar_opportunities_approve_all_post", input)`)
|
|
202
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
203
|
+
- API-key scope: `radar:write`
|
|
204
|
+
|
|
205
|
+
Bulk-approve opportunities in one lane - currently FAIL-CLOSED (HTTP 409).
|
|
206
|
+
|
|
207
|
+
campaign_builder deliberately rejects bulk approval until an item-by-item
|
|
208
|
+
review contract exists: ``approve_all_opportunities`` raises 409 'Bulk
|
|
209
|
+
approval requires review' on every call (campaign_builder/routers/radar.py).
|
|
210
|
+
This bridge forwards to that handler so the 409 is surfaced honestly instead
|
|
211
|
+
of fabricating a 200 - it never mutates or bills. Approve opportunities one
|
|
212
|
+
at a time via ``POST /radar/opportunities/{gap_id}/approve``.
|
|
213
|
+
|
|
214
|
+
Product gap (out of this bridge's scope): the developer-api reference
|
|
215
|
+
(docs/developer-api-reference.md ~L3799-3800) and the MCP tool
|
|
216
|
+
g8_radar_approve_all_opportunities still advertise a working 'top-50 drain'
|
|
217
|
+
and must be re-documented to the 409 contract, or the cb handler must gain a
|
|
218
|
+
real bulk-review flow.
|
|
219
|
+
|
|
220
|
+
**Input**
|
|
221
|
+
|
|
222
|
+
| Field | Type | Required | Description |
|
|
223
|
+
|---|---|---|---|
|
|
224
|
+
| `body` | `ApproveAllRequest` | yes | Request body; fields below. |
|
|
225
|
+
|
|
226
|
+
Body fields (`ApproveAllRequest`):
|
|
227
|
+
|
|
228
|
+
| Field | Type | Required | Description |
|
|
229
|
+
|---|---|---|---|
|
|
230
|
+
| `body.lane` | `string` | no | default `"now"` |
|
|
231
|
+
|
|
232
|
+
**Returns** `unknown`.
|
|
233
|
+
|
|
234
|
+
**Example**
|
|
235
|
+
|
|
236
|
+
```ts
|
|
237
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
238
|
+
const result = await g8.api.radar.approveAllOpportunities({ body: {} });
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
<a id="op-approveopportunity"></a>
|
|
244
|
+
|
|
245
|
+
### `g8.api.radar.approveOpportunity(input)`
|
|
246
|
+
|
|
247
|
+
**Approve Opportunity**
|
|
248
|
+
|
|
249
|
+
- HTTP: `POST /api/v1/radar/opportunities/{gap_id}/approve`
|
|
250
|
+
- operationId: `approve_opportunity_radar_opportunities__gap_id__approve_post` (also callable as `g8.api.call("approve_opportunity_radar_opportunities__gap_id__approve_post", input)`)
|
|
251
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
252
|
+
- API-key scope: `radar:write`
|
|
253
|
+
|
|
254
|
+
Approve one scored opportunity - converts it into an initiative + stubs.
|
|
255
|
+
|
|
256
|
+
**Input**
|
|
257
|
+
|
|
258
|
+
| Field | Type | Required | Description |
|
|
259
|
+
|---|---|---|---|
|
|
260
|
+
| `path.gap_id` | `string` | yes | |
|
|
261
|
+
| `body` | `ApproveOpportunityRequest` | yes | Request body; fields below. |
|
|
262
|
+
|
|
263
|
+
Body fields (`ApproveOpportunityRequest`):
|
|
264
|
+
|
|
265
|
+
| Field | Type | Required | Description |
|
|
266
|
+
|---|---|---|---|
|
|
267
|
+
| `body.content_types` | `Array<string> \| null` | no | |
|
|
268
|
+
| `body.create_crm_task` | `boolean` | no | default `false` |
|
|
269
|
+
| `body.due_date` | `string (date) \| null` | no | |
|
|
270
|
+
| `body.kinds` | `Array<string> \| null` | no | |
|
|
271
|
+
| `body.owner_id` | `string \| null` | no | |
|
|
272
|
+
| `body.seed_context` | `SeedContext \| null` | no | |
|
|
273
|
+
|
|
274
|
+
**Returns** `unknown`.
|
|
275
|
+
|
|
276
|
+
**Example**
|
|
277
|
+
|
|
278
|
+
```ts
|
|
279
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
280
|
+
const result = await g8.api.radar.approveOpportunity({ path: { gap_id: "id" }, body: {} });
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
<a id="op-bulkaddcompetitors"></a>
|
|
286
|
+
|
|
287
|
+
### `g8.api.radar.bulkAddCompetitors(input)`
|
|
288
|
+
|
|
289
|
+
**Bulk Add Competitors**
|
|
290
|
+
|
|
291
|
+
- HTTP: `POST /api/v1/radar/competitors/bulk`
|
|
292
|
+
- operationId: `bulk_add_competitors_radar_competitors_bulk_post` (also callable as `g8.api.call("bulk_add_competitors_radar_competitors_bulk_post", input)`)
|
|
293
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
294
|
+
- API-key scope: `radar:write`
|
|
295
|
+
|
|
296
|
+
Add many competitors at once (normalize + dedup + 20-competitor cap).
|
|
297
|
+
|
|
298
|
+
**Input**
|
|
299
|
+
|
|
300
|
+
| Field | Type | Required | Description |
|
|
301
|
+
|---|---|---|---|
|
|
302
|
+
| `body` | `BulkCompetitorsRequest` | yes | Request body; fields below. |
|
|
303
|
+
|
|
304
|
+
Body fields (`BulkCompetitorsRequest`):
|
|
305
|
+
|
|
306
|
+
| Field | Type | Required | Description |
|
|
307
|
+
|---|---|---|---|
|
|
308
|
+
| `body.competitors` | `Array<BulkCompetitorItem>` | no | max items 20 |
|
|
309
|
+
| `body.scan_on_add` | `boolean` | no | default `false` |
|
|
310
|
+
|
|
311
|
+
**Returns** `unknown`.
|
|
312
|
+
|
|
313
|
+
**Example**
|
|
314
|
+
|
|
315
|
+
```ts
|
|
316
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
317
|
+
const result = await g8.api.radar.bulkAddCompetitors({ body: {} });
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
<a id="op-comparesnapshot"></a>
|
|
323
|
+
|
|
324
|
+
### `g8.api.radar.compareSnapshot(input)`
|
|
325
|
+
|
|
326
|
+
**Compare Snapshot**
|
|
327
|
+
|
|
328
|
+
- HTTP: `GET /api/v1/radar/snapshots/{snapshot_id}/compare`
|
|
329
|
+
- operationId: `compare_snapshot_radar_snapshots__snapshot_id__compare_get` (also callable as `g8.api.call("compare_snapshot_radar_snapshots__snapshot_id__compare_get", input)`)
|
|
330
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
331
|
+
- API-key scope: `radar:read`
|
|
332
|
+
|
|
333
|
+
Before/after diff for one page snapshot (vs prior capture or `against`).
|
|
334
|
+
|
|
335
|
+
**Input**
|
|
336
|
+
|
|
337
|
+
| Field | Type | Required | Description |
|
|
338
|
+
|---|---|---|---|
|
|
339
|
+
| `path.snapshot_id` | `string` | yes | |
|
|
340
|
+
| `query.against` | `string \| null` | no | |
|
|
341
|
+
|
|
342
|
+
**Returns** `unknown`.
|
|
343
|
+
|
|
344
|
+
**Example**
|
|
345
|
+
|
|
346
|
+
```ts
|
|
347
|
+
const result = await g8.api.radar.compareSnapshot({ path: { snapshot_id: "id" } });
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
<a id="op-competitorbattlecard"></a>
|
|
353
|
+
|
|
354
|
+
### `g8.api.radar.competitorBattleCard(input)`
|
|
355
|
+
|
|
356
|
+
**Competitor Battle Card**
|
|
357
|
+
|
|
358
|
+
- HTTP: `GET /api/v1/radar/competitors/{competitor_id}/battle-card`
|
|
359
|
+
- operationId: `competitor_battle_card_radar_competitors__competitor_id__battle_card_get` (also callable as `g8.api.call("competitor_battle_card_radar_competitors__competitor_id__battle_card_get", input)`)
|
|
360
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
361
|
+
- API-key scope: `radar:read`
|
|
362
|
+
|
|
363
|
+
Sales-enablement battle card composed from existing Radar intel (no LLM).
|
|
364
|
+
|
|
365
|
+
**Input**
|
|
366
|
+
|
|
367
|
+
| Field | Type | Required | Description |
|
|
368
|
+
|---|---|---|---|
|
|
369
|
+
| `path.competitor_id` | `string` | yes | |
|
|
370
|
+
|
|
371
|
+
**Returns** `unknown`.
|
|
372
|
+
|
|
373
|
+
**Example**
|
|
374
|
+
|
|
375
|
+
```ts
|
|
376
|
+
const result = await g8.api.radar.competitorBattleCard({ path: { competitor_id: "id" } });
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
<a id="op-competitorsuggestions"></a>
|
|
382
|
+
|
|
383
|
+
### `g8.api.radar.competitorSuggestions(input?)`
|
|
384
|
+
|
|
385
|
+
**Competitor Suggestions**
|
|
386
|
+
|
|
387
|
+
- HTTP: `GET /api/v1/radar/competitors/suggestions`
|
|
388
|
+
- operationId: `competitor_suggestions_radar_competitors_suggestions_get` (also callable as `g8.api.call("competitor_suggestions_radar_competitors_suggestions_get", input)`)
|
|
389
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
390
|
+
- API-key scope: `radar:read`
|
|
391
|
+
|
|
392
|
+
Detected-but-untracked competitors from intelligence + global docs.
|
|
393
|
+
|
|
394
|
+
**Input**: none.
|
|
395
|
+
|
|
396
|
+
**Returns** `unknown`.
|
|
397
|
+
|
|
398
|
+
**Example**
|
|
399
|
+
|
|
400
|
+
```ts
|
|
401
|
+
const result = await g8.api.radar.competitorSuggestions();
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
<a id="op-createcompetitor"></a>
|
|
407
|
+
|
|
408
|
+
### `g8.api.radar.createCompetitor(input)`
|
|
409
|
+
|
|
410
|
+
**Create Competitor**
|
|
411
|
+
|
|
412
|
+
- HTTP: `POST /api/v1/radar/competitors`
|
|
413
|
+
- operationId: `create_competitor_radar_competitors_post` (also callable as `g8.api.call("create_competitor_radar_competitors_post", input)`)
|
|
414
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
415
|
+
- API-key scope: `radar:write`
|
|
416
|
+
|
|
417
|
+
Add one competitor to track. 409 if already tracked, 422 at the cap.
|
|
418
|
+
|
|
419
|
+
**Input**
|
|
420
|
+
|
|
421
|
+
| Field | Type | Required | Description |
|
|
422
|
+
|---|---|---|---|
|
|
423
|
+
| `body` | `CreateCompetitorRequest` | yes | Request body; fields below. |
|
|
424
|
+
|
|
425
|
+
Body fields (`CreateCompetitorRequest`):
|
|
426
|
+
|
|
427
|
+
| Field | Type | Required | Description |
|
|
428
|
+
|---|---|---|---|
|
|
429
|
+
| `body.domain` | `string` | yes | min length 1, max length 255 |
|
|
430
|
+
| `body.name` | `string \| null` | no | max length 255 |
|
|
431
|
+
| `body.scan_config` | `ScanConfigDTO \| null` | no | |
|
|
432
|
+
| `body.scan_on_add` | `boolean` | no | default `false` |
|
|
433
|
+
| `body.tier` | `string \| null` | no | default `"tier2"` |
|
|
434
|
+
|
|
435
|
+
**Returns** `unknown`.
|
|
436
|
+
|
|
437
|
+
**Example**
|
|
438
|
+
|
|
439
|
+
```ts
|
|
440
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
441
|
+
const result = await g8.api.radar.createCompetitor({ body: { domain: "acme.com" } });
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
---
|
|
445
|
+
|
|
446
|
+
<a id="op-deletecompetitor"></a>
|
|
447
|
+
|
|
448
|
+
### `g8.api.radar.deleteCompetitor(input)`
|
|
449
|
+
|
|
450
|
+
**Delete Competitor**
|
|
451
|
+
|
|
452
|
+
- HTTP: `DELETE /api/v1/radar/competitors/{competitor_id}`
|
|
453
|
+
- operationId: `delete_competitor_radar_competitors__competitor_id__delete` (also callable as `g8.api.call("delete_competitor_radar_competitors__competitor_id__delete", input)`)
|
|
454
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
455
|
+
- API-key scope: `radar:delete`
|
|
456
|
+
|
|
457
|
+
Deactivate a tracked competitor while retaining its evidence history.
|
|
458
|
+
|
|
459
|
+
**Input**
|
|
460
|
+
|
|
461
|
+
| Field | Type | Required | Description |
|
|
462
|
+
|---|---|---|---|
|
|
463
|
+
| `path.competitor_id` | `string` | yes | |
|
|
464
|
+
|
|
465
|
+
**Returns** `unknown`.
|
|
466
|
+
|
|
467
|
+
**Example**
|
|
468
|
+
|
|
469
|
+
```ts
|
|
470
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
471
|
+
const result = await g8.api.radar.deleteCompetitor({ path: { competitor_id: "id" } });
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
|
|
476
|
+
<a id="op-discovercompetitorpages"></a>
|
|
477
|
+
|
|
478
|
+
### `g8.api.radar.discoverCompetitorPages(input)`
|
|
479
|
+
|
|
480
|
+
**Discover Competitor Pages**
|
|
481
|
+
|
|
482
|
+
- HTTP: `GET /api/v1/radar/competitors/{competitor_id}/discover-pages`
|
|
483
|
+
- operationId: `discover_competitor_pages_radar_competitors__competitor_id__discover_pages_get` (also callable as `g8.api.call("discover_competitor_pages_radar_competitors__competitor_id__discover_pages_get", input)`)
|
|
484
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
485
|
+
- API-key scope: `radar:run`
|
|
486
|
+
|
|
487
|
+
Discover a competitor's pages (Firecrawl /map) for the tracked-pages picker.
|
|
488
|
+
|
|
489
|
+
**Input**
|
|
490
|
+
|
|
491
|
+
| Field | Type | Required | Description |
|
|
492
|
+
|---|---|---|---|
|
|
493
|
+
| `path.competitor_id` | `string` | yes | |
|
|
494
|
+
| `query.refresh` | `boolean` | no | Bypass the cached page inventory and re-map the site (paid). default `false` |
|
|
495
|
+
|
|
496
|
+
**Returns** `unknown`.
|
|
497
|
+
|
|
498
|
+
**Example**
|
|
499
|
+
|
|
500
|
+
```ts
|
|
501
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
502
|
+
const result = await g8.api.radar.discoverCompetitorPages({ path: { competitor_id: "id" } });
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
---
|
|
506
|
+
|
|
507
|
+
<a id="op-dispatchalerts"></a>
|
|
508
|
+
|
|
509
|
+
### `g8.api.radar.dispatchAlerts(input?)`
|
|
510
|
+
|
|
511
|
+
**Dispatch Alerts**
|
|
512
|
+
|
|
513
|
+
- HTTP: `POST /api/v1/radar/alerts/dispatch`
|
|
514
|
+
- operationId: `dispatch_alerts_radar_alerts_dispatch_post` (also callable as `g8.api.call("dispatch_alerts_radar_alerts_dispatch_post", input)`)
|
|
515
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
516
|
+
- API-key scope: `radar:run`
|
|
517
|
+
|
|
518
|
+
Detect + deliver new competitor-move alerts now. Returns {delivered}.
|
|
519
|
+
|
|
520
|
+
The cb function declares a settings:write dependency; we pass _=None so the
|
|
521
|
+
gate is satisfied at the public surface (RBAC specs out of scope).
|
|
522
|
+
|
|
523
|
+
**Input**: none.
|
|
524
|
+
|
|
525
|
+
**Returns** `unknown`.
|
|
526
|
+
|
|
527
|
+
**Example**
|
|
528
|
+
|
|
529
|
+
```ts
|
|
530
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
531
|
+
const result = await g8.api.radar.dispatchAlerts();
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
---
|
|
535
|
+
|
|
536
|
+
<a id="op-featurematrix"></a>
|
|
537
|
+
|
|
538
|
+
### `g8.api.radar.featureMatrix(input?)`
|
|
539
|
+
|
|
540
|
+
**Feature Matrix**
|
|
541
|
+
|
|
542
|
+
- HTTP: `GET /api/v1/radar/feature-matrix`
|
|
543
|
+
- operationId: `feature_matrix_radar_feature_matrix_get` (also callable as `g8.api.call("feature_matrix_radar_feature_matrix_get", input)`)
|
|
544
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
545
|
+
- API-key scope: `radar:read`
|
|
546
|
+
|
|
547
|
+
Capability/feature comparison matrix across the tracked competitor set.
|
|
548
|
+
|
|
549
|
+
**Input**: none.
|
|
550
|
+
|
|
551
|
+
**Returns** `unknown`.
|
|
552
|
+
|
|
553
|
+
**Example**
|
|
554
|
+
|
|
555
|
+
```ts
|
|
556
|
+
const result = await g8.api.radar.featureMatrix();
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
---
|
|
560
|
+
|
|
561
|
+
<a id="op-getcompetitor"></a>
|
|
562
|
+
|
|
563
|
+
### `g8.api.radar.getCompetitor(input)`
|
|
564
|
+
|
|
565
|
+
**Get Competitor**
|
|
566
|
+
|
|
567
|
+
- HTTP: `GET /api/v1/radar/competitors/{competitor_id}`
|
|
568
|
+
- operationId: `get_competitor_radar_competitors__competitor_id__get` (also callable as `g8.api.call("get_competitor_radar_competitors__competitor_id__get", input)`)
|
|
569
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
570
|
+
- API-key scope: `radar:read`
|
|
571
|
+
|
|
572
|
+
Single-competitor aggregation: profile + pages-tracked + recent changes + gaps.
|
|
573
|
+
|
|
574
|
+
**Input**
|
|
575
|
+
|
|
576
|
+
| Field | Type | Required | Description |
|
|
577
|
+
|---|---|---|---|
|
|
578
|
+
| `path.competitor_id` | `string` | yes | |
|
|
579
|
+
|
|
580
|
+
**Returns** `unknown`.
|
|
581
|
+
|
|
582
|
+
**Example**
|
|
583
|
+
|
|
584
|
+
```ts
|
|
585
|
+
const result = await g8.api.radar.getCompetitor({ path: { competitor_id: "id" } });
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
---
|
|
589
|
+
|
|
590
|
+
<a id="op-getcompetitorads"></a>
|
|
591
|
+
|
|
592
|
+
### `g8.api.radar.getCompetitorAds(input)`
|
|
593
|
+
|
|
594
|
+
**Get Competitor Ads**
|
|
595
|
+
|
|
596
|
+
- HTTP: `GET /api/v1/radar/competitors/{competitor_id}/ads`
|
|
597
|
+
- operationId: `get_competitor_ads_radar_competitors__competitor_id__ads_get` (also callable as `g8.api.call("get_competitor_ads_radar_competitors__competitor_id__ads_get", input)`)
|
|
598
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
599
|
+
- API-key scope: `radar:read`
|
|
600
|
+
|
|
601
|
+
Captured ad creatives for one competitor (durable snapshot corpus).
|
|
602
|
+
|
|
603
|
+
**Input**
|
|
604
|
+
|
|
605
|
+
| Field | Type | Required | Description |
|
|
606
|
+
|---|---|---|---|
|
|
607
|
+
| `path.competitor_id` | `string` | yes | |
|
|
608
|
+
|
|
609
|
+
**Returns** `unknown`.
|
|
610
|
+
|
|
611
|
+
**Example**
|
|
612
|
+
|
|
613
|
+
```ts
|
|
614
|
+
const result = await g8.api.radar.getCompetitorAds({ path: { competitor_id: "id" } });
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
---
|
|
618
|
+
|
|
619
|
+
<a id="op-getcompetitorengagers"></a>
|
|
620
|
+
|
|
621
|
+
### `g8.api.radar.getCompetitorEngagers(input)`
|
|
622
|
+
|
|
623
|
+
**Get Competitor Engagers**
|
|
624
|
+
|
|
625
|
+
- HTTP: `GET /api/v1/radar/competitors/{competitor_id}/engagers`
|
|
626
|
+
- operationId: `get_competitor_engagers_radar_competitors__competitor_id__engagers_get` (also callable as `g8.api.call("get_competitor_engagers_radar_competitors__competitor_id__engagers_get", input)`)
|
|
627
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
628
|
+
- API-key scope: `radar:read`
|
|
629
|
+
|
|
630
|
+
Steal-Their-Audience: known-to-us people who engage this rival's content.
|
|
631
|
+
|
|
632
|
+
The cb function declares a deals-read permission dependency; here we pass a
|
|
633
|
+
synthesized org-admin principal (``_=True``) so the gate is satisfied at the
|
|
634
|
+
public surface (RBAC specs out of scope by decision).
|
|
635
|
+
|
|
636
|
+
**Input**
|
|
637
|
+
|
|
638
|
+
| Field | Type | Required | Description |
|
|
639
|
+
|---|---|---|---|
|
|
640
|
+
| `path.competitor_id` | `string` | yes | |
|
|
641
|
+
| `query.limit` | `integer` | no | default `100` |
|
|
642
|
+
|
|
643
|
+
**Returns** `unknown`.
|
|
644
|
+
|
|
645
|
+
**Example**
|
|
646
|
+
|
|
647
|
+
```ts
|
|
648
|
+
const result = await g8.api.radar.getCompetitorEngagers({ path: { competitor_id: "id" } });
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
---
|
|
652
|
+
|
|
653
|
+
<a id="op-getcompetitorpages"></a>
|
|
654
|
+
|
|
655
|
+
### `g8.api.radar.getCompetitorPages(input)`
|
|
656
|
+
|
|
657
|
+
**Get Competitor Pages**
|
|
658
|
+
|
|
659
|
+
- HTTP: `GET /api/v1/radar/competitors/{competitor_id}/pages`
|
|
660
|
+
- operationId: `get_competitor_pages_radar_competitors__competitor_id__pages_get` (also callable as `g8.api.call("get_competitor_pages_radar_competitors__competitor_id__pages_get", input)`)
|
|
661
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
662
|
+
- API-key scope: `radar:read`
|
|
663
|
+
|
|
664
|
+
Distinct tracked pages for one competitor (latest snapshot per URL).
|
|
665
|
+
|
|
666
|
+
**Input**
|
|
667
|
+
|
|
668
|
+
| Field | Type | Required | Description |
|
|
669
|
+
|---|---|---|---|
|
|
670
|
+
| `path.competitor_id` | `string` | yes | |
|
|
671
|
+
|
|
672
|
+
**Returns** `unknown`.
|
|
673
|
+
|
|
674
|
+
**Example**
|
|
675
|
+
|
|
676
|
+
```ts
|
|
677
|
+
const result = await g8.api.radar.getCompetitorPages({ path: { competitor_id: "id" } });
|
|
678
|
+
```
|
|
679
|
+
|
|
680
|
+
---
|
|
681
|
+
|
|
682
|
+
<a id="op-getcompetitorposts"></a>
|
|
683
|
+
|
|
684
|
+
### `g8.api.radar.getCompetitorPosts(input)`
|
|
685
|
+
|
|
686
|
+
**Get Competitor Posts**
|
|
687
|
+
|
|
688
|
+
- HTTP: `GET /api/v1/radar/competitors/{competitor_id}/posts`
|
|
689
|
+
- operationId: `get_competitor_posts_radar_competitors__competitor_id__posts_get` (also callable as `g8.api.call("get_competitor_posts_radar_competitors__competitor_id__posts_get", input)`)
|
|
690
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
691
|
+
- API-key scope: `radar:read`
|
|
692
|
+
|
|
693
|
+
LinkedIn posts for one competitor (listener store, then corpus fallback).
|
|
694
|
+
|
|
695
|
+
**Input**
|
|
696
|
+
|
|
697
|
+
| Field | Type | Required | Description |
|
|
698
|
+
|---|---|---|---|
|
|
699
|
+
| `path.competitor_id` | `string` | yes | |
|
|
700
|
+
| `query.limit` | `integer` | no | default `50` |
|
|
701
|
+
|
|
702
|
+
**Returns** `unknown`.
|
|
703
|
+
|
|
704
|
+
**Example**
|
|
705
|
+
|
|
706
|
+
```ts
|
|
707
|
+
const result = await g8.api.radar.getCompetitorPosts({ path: { competitor_id: "id" } });
|
|
708
|
+
```
|
|
709
|
+
|
|
710
|
+
---
|
|
711
|
+
|
|
712
|
+
<a id="op-getcompetitortraffic"></a>
|
|
713
|
+
|
|
714
|
+
### `g8.api.radar.getCompetitorTraffic(input)`
|
|
715
|
+
|
|
716
|
+
**Get Competitor Traffic**
|
|
717
|
+
|
|
718
|
+
- HTTP: `GET /api/v1/radar/competitors/{competitor_id}/traffic`
|
|
719
|
+
- operationId: `get_competitor_traffic_radar_competitors__competitor_id__traffic_get` (also callable as `g8.api.call("get_competitor_traffic_radar_competitors__competitor_id__traffic_get", input)`)
|
|
720
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
721
|
+
- API-key scope: `radar:read`
|
|
722
|
+
|
|
723
|
+
Traffic detail for one competitor: current estimate + trend + ETV history.
|
|
724
|
+
|
|
725
|
+
**Input**
|
|
726
|
+
|
|
727
|
+
| Field | Type | Required | Description |
|
|
728
|
+
|---|---|---|---|
|
|
729
|
+
| `path.competitor_id` | `string` | yes | |
|
|
730
|
+
|
|
731
|
+
**Returns** `unknown`.
|
|
732
|
+
|
|
733
|
+
**Example**
|
|
734
|
+
|
|
735
|
+
```ts
|
|
736
|
+
const result = await g8.api.radar.getCompetitorTraffic({ path: { competitor_id: "id" } });
|
|
737
|
+
```
|
|
738
|
+
|
|
739
|
+
---
|
|
740
|
+
|
|
741
|
+
<a id="op-getsettings"></a>
|
|
742
|
+
|
|
743
|
+
### `g8.api.radar.getSettings(input?)`
|
|
744
|
+
|
|
745
|
+
**Get Settings**
|
|
746
|
+
|
|
747
|
+
- HTTP: `GET /api/v1/radar/settings`
|
|
748
|
+
- operationId: `get_settings_radar_settings_get` (also callable as `g8.api.call("get_settings_radar_settings_get", input)`)
|
|
749
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
750
|
+
- API-key scope: `radar:read`
|
|
751
|
+
|
|
752
|
+
Read the org's Radar settings (cadence, alert toggles, channels, ad_source).
|
|
753
|
+
|
|
754
|
+
**Input**: none.
|
|
755
|
+
|
|
756
|
+
**Returns** `unknown`.
|
|
757
|
+
|
|
758
|
+
**Example**
|
|
759
|
+
|
|
760
|
+
```ts
|
|
761
|
+
const result = await g8.api.radar.getSettings();
|
|
762
|
+
```
|
|
763
|
+
|
|
764
|
+
---
|
|
765
|
+
|
|
766
|
+
<a id="op-keywordgap"></a>
|
|
767
|
+
|
|
768
|
+
### `g8.api.radar.keywordGap(input?)`
|
|
769
|
+
|
|
770
|
+
**Keyword Gap**
|
|
771
|
+
|
|
772
|
+
- HTTP: `GET /api/v1/radar/keyword-gap`
|
|
773
|
+
- operationId: `keyword_gap_radar_keyword_gap_get` (also callable as `g8.api.call("keyword_gap_radar_keyword_gap_get", input)`)
|
|
774
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
775
|
+
- API-key scope: `radar:run`
|
|
776
|
+
|
|
777
|
+
Keywords each rival ranks for that the org does NOT ("what you're missing").
|
|
778
|
+
|
|
779
|
+
**Input**: none.
|
|
780
|
+
|
|
781
|
+
**Returns** `unknown`.
|
|
782
|
+
|
|
783
|
+
**Example**
|
|
784
|
+
|
|
785
|
+
```ts
|
|
786
|
+
const result = await g8.api.radar.keywordGap();
|
|
787
|
+
```
|
|
788
|
+
|
|
789
|
+
---
|
|
790
|
+
|
|
791
|
+
<a id="op-listcompetitors"></a>
|
|
792
|
+
|
|
793
|
+
### `g8.api.radar.listCompetitors(input?)`
|
|
794
|
+
|
|
795
|
+
**List Competitors**
|
|
796
|
+
|
|
797
|
+
- HTTP: `GET /api/v1/radar/competitors`
|
|
798
|
+
- operationId: `list_competitors_radar_competitors_get` (also callable as `g8.api.call("list_competitors_radar_competitors_get", input)`)
|
|
799
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
800
|
+
- API-key scope: `radar:read`
|
|
801
|
+
|
|
802
|
+
Every tracked competitor profile (active + inactive), tier then domain.
|
|
803
|
+
|
|
804
|
+
**Input**: none.
|
|
805
|
+
|
|
806
|
+
**Returns** `unknown`.
|
|
807
|
+
|
|
808
|
+
**Example**
|
|
809
|
+
|
|
810
|
+
```ts
|
|
811
|
+
const result = await g8.api.radar.listCompetitors();
|
|
812
|
+
```
|
|
813
|
+
|
|
814
|
+
---
|
|
815
|
+
|
|
816
|
+
<a id="op-listgaps"></a>
|
|
817
|
+
|
|
818
|
+
### `g8.api.radar.listGaps(input?)`
|
|
819
|
+
|
|
820
|
+
**List Gaps**
|
|
821
|
+
|
|
822
|
+
- HTTP: `GET /api/v1/radar/gaps`
|
|
823
|
+
- operationId: `list_gaps_radar_gaps_get` (also callable as `g8.api.call("list_gaps_radar_gaps_get", input)`)
|
|
824
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
825
|
+
- API-key scope: `radar:read`
|
|
826
|
+
|
|
827
|
+
List competitive gaps, optionally filtered by lens / status / competitor.
|
|
828
|
+
|
|
829
|
+
**Input**
|
|
830
|
+
|
|
831
|
+
| Field | Type | Required | Description |
|
|
832
|
+
|---|---|---|---|
|
|
833
|
+
| `query.lens` | `string \| null` | no | |
|
|
834
|
+
| `query.status` | `string \| null` | no | |
|
|
835
|
+
| `query.competitor_id` | `string \| null` | no | |
|
|
836
|
+
|
|
837
|
+
**Returns** `unknown`.
|
|
838
|
+
|
|
839
|
+
**Example**
|
|
840
|
+
|
|
841
|
+
```ts
|
|
842
|
+
const result = await g8.api.radar.listGaps();
|
|
843
|
+
```
|
|
844
|
+
|
|
845
|
+
---
|
|
846
|
+
|
|
847
|
+
<a id="op-listinitiatives"></a>
|
|
848
|
+
|
|
849
|
+
### `g8.api.radar.listInitiatives(input?)`
|
|
850
|
+
|
|
851
|
+
**List Initiatives**
|
|
852
|
+
|
|
853
|
+
- HTTP: `GET /api/v1/radar/initiatives`
|
|
854
|
+
- operationId: `list_initiatives_radar_initiatives_get` (also callable as `g8.api.call("list_initiatives_radar_initiatives_get", input)`)
|
|
855
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
856
|
+
- API-key scope: `radar:read`
|
|
857
|
+
|
|
858
|
+
List radar initiatives (converted opportunities under execution).
|
|
859
|
+
|
|
860
|
+
**Input**
|
|
861
|
+
|
|
862
|
+
| Field | Type | Required | Description |
|
|
863
|
+
|---|---|---|---|
|
|
864
|
+
| `query.lane` | `string \| null` | no | |
|
|
865
|
+
|
|
866
|
+
**Returns** `unknown`.
|
|
867
|
+
|
|
868
|
+
**Example**
|
|
869
|
+
|
|
870
|
+
```ts
|
|
871
|
+
const result = await g8.api.radar.listInitiatives();
|
|
872
|
+
```
|
|
873
|
+
|
|
874
|
+
---
|
|
875
|
+
|
|
876
|
+
<a id="op-listopportunities"></a>
|
|
877
|
+
|
|
878
|
+
### `g8.api.radar.listOpportunities(input?)`
|
|
879
|
+
|
|
880
|
+
**List Opportunities**
|
|
881
|
+
|
|
882
|
+
- HTTP: `GET /api/v1/radar/opportunities`
|
|
883
|
+
- operationId: `list_opportunities_radar_opportunities_get` (also callable as `g8.api.call("list_opportunities_radar_opportunities_get", input)`)
|
|
884
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
885
|
+
- API-key scope: `radar:read`
|
|
886
|
+
|
|
887
|
+
List opportunities - the scored OPEN gaps, optionally filtered by lane.
|
|
888
|
+
|
|
889
|
+
**Input**
|
|
890
|
+
|
|
891
|
+
| Field | Type | Required | Description |
|
|
892
|
+
|---|---|---|---|
|
|
893
|
+
| `query.lane` | `string \| null` | no | |
|
|
894
|
+
|
|
895
|
+
**Returns** `unknown`.
|
|
896
|
+
|
|
897
|
+
**Example**
|
|
898
|
+
|
|
899
|
+
```ts
|
|
900
|
+
const result = await g8.api.radar.listOpportunities();
|
|
901
|
+
```
|
|
902
|
+
|
|
903
|
+
---
|
|
904
|
+
|
|
905
|
+
<a id="op-measureinitiatives"></a>
|
|
906
|
+
|
|
907
|
+
### `g8.api.radar.measureInitiatives(input?)`
|
|
908
|
+
|
|
909
|
+
**Measure Initiatives**
|
|
910
|
+
|
|
911
|
+
- HTTP: `POST /api/v1/radar/initiatives/measure`
|
|
912
|
+
- operationId: `measure_initiatives_radar_initiatives_measure_post` (also callable as `g8.api.call("measure_initiatives_radar_initiatives_measure_post", input)`)
|
|
913
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
914
|
+
- API-key scope: `radar:run`
|
|
915
|
+
|
|
916
|
+
Run the performance loopback now (free, DB-only). Returns {measured}.
|
|
917
|
+
|
|
918
|
+
The cb function declares a settings:write dependency; we pass _=None so the
|
|
919
|
+
gate is satisfied at the public surface (RBAC specs out of scope).
|
|
920
|
+
|
|
921
|
+
**Input**: none.
|
|
922
|
+
|
|
923
|
+
**Returns** `unknown`.
|
|
924
|
+
|
|
925
|
+
**Example**
|
|
926
|
+
|
|
927
|
+
```ts
|
|
928
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
929
|
+
const result = await g8.api.radar.measureInitiatives();
|
|
930
|
+
```
|
|
931
|
+
|
|
932
|
+
---
|
|
933
|
+
|
|
934
|
+
<a id="op-monitoringaddetail"></a>
|
|
935
|
+
|
|
936
|
+
### `g8.api.radar.monitoringAdDetail(input)`
|
|
937
|
+
|
|
938
|
+
**Monitoring Ad Detail**
|
|
939
|
+
|
|
940
|
+
- HTTP: `GET /api/v1/radar/monitoring/ads/{ad_id}`
|
|
941
|
+
- operationId: `monitoring_ad_detail_radar_monitoring_ads__ad_id__get` (also callable as `g8.api.call("monitoring_ad_detail_radar_monitoring_ads__ad_id__get", input)`)
|
|
942
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
943
|
+
- API-key scope: `radar:read`
|
|
944
|
+
|
|
945
|
+
One ad's full detail (copy / headline / image / dates) + rival context.
|
|
946
|
+
|
|
947
|
+
**Input**
|
|
948
|
+
|
|
949
|
+
| Field | Type | Required | Description |
|
|
950
|
+
|---|---|---|---|
|
|
951
|
+
| `path.ad_id` | `string` | yes | |
|
|
952
|
+
|
|
953
|
+
**Returns** `unknown`.
|
|
954
|
+
|
|
955
|
+
**Example**
|
|
956
|
+
|
|
957
|
+
```ts
|
|
958
|
+
const result = await g8.api.radar.monitoringAdDetail({ path: { ad_id: "id" } });
|
|
959
|
+
```
|
|
960
|
+
|
|
961
|
+
---
|
|
962
|
+
|
|
963
|
+
<a id="op-monitoringads"></a>
|
|
964
|
+
|
|
965
|
+
### `g8.api.radar.monitoringAds(input?)`
|
|
966
|
+
|
|
967
|
+
**Monitoring Ads**
|
|
968
|
+
|
|
969
|
+
- HTTP: `GET /api/v1/radar/monitoring/ads`
|
|
970
|
+
- operationId: `monitoring_ads_radar_monitoring_ads_get` (also callable as `g8.api.call("monitoring_ads_radar_monitoring_ads_get", input)`)
|
|
971
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
972
|
+
- API-key scope: `radar:run`
|
|
973
|
+
|
|
974
|
+
Ads & keywords: durable ad_creative corpus + persisted organic/paid keywords.
|
|
975
|
+
|
|
976
|
+
**Input**: none.
|
|
977
|
+
|
|
978
|
+
**Returns** `unknown`.
|
|
979
|
+
|
|
980
|
+
**Example**
|
|
981
|
+
|
|
982
|
+
```ts
|
|
983
|
+
const result = await g8.api.radar.monitoringAds();
|
|
984
|
+
```
|
|
985
|
+
|
|
986
|
+
---
|
|
987
|
+
|
|
988
|
+
<a id="op-monitoringcontent"></a>
|
|
989
|
+
|
|
990
|
+
### `g8.api.radar.monitoringContent(input?)`
|
|
991
|
+
|
|
992
|
+
**Monitoring Content**
|
|
993
|
+
|
|
994
|
+
- HTTP: `GET /api/v1/radar/monitoring/content`
|
|
995
|
+
- operationId: `monitoring_content_radar_monitoring_content_get` (also callable as `g8.api.call("monitoring_content_radar_monitoring_content_get", input)`)
|
|
996
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
997
|
+
- API-key scope: `radar:read`
|
|
998
|
+
|
|
999
|
+
Competitor content-change feed with the same filters as the cb route.
|
|
1000
|
+
|
|
1001
|
+
**Input**
|
|
1002
|
+
|
|
1003
|
+
| Field | Type | Required | Description |
|
|
1004
|
+
|---|---|---|---|
|
|
1005
|
+
| `query.competitor_id` | `string \| null` | no | |
|
|
1006
|
+
| `query.kind` | `string \| null` | no | |
|
|
1007
|
+
| `query.change_category` | `string \| null` | no | |
|
|
1008
|
+
| `query.change_type` | `string \| null` | no | |
|
|
1009
|
+
| `query.min_significance` | `integer \| null` | no | |
|
|
1010
|
+
| `query.date_from` | `string \| null` | no | |
|
|
1011
|
+
| `query.date_to` | `string \| null` | no | |
|
|
1012
|
+
| `query.search` | `string \| null` | no | |
|
|
1013
|
+
| `query.limit` | `integer` | no | default `50` |
|
|
1014
|
+
|
|
1015
|
+
**Returns** `unknown`.
|
|
1016
|
+
|
|
1017
|
+
**Example**
|
|
1018
|
+
|
|
1019
|
+
```ts
|
|
1020
|
+
const result = await g8.api.radar.monitoringContent();
|
|
1021
|
+
```
|
|
1022
|
+
|
|
1023
|
+
---
|
|
1024
|
+
|
|
1025
|
+
<a id="op-monitoringlinkedin"></a>
|
|
1026
|
+
|
|
1027
|
+
### `g8.api.radar.monitoringLinkedin(input?)`
|
|
1028
|
+
|
|
1029
|
+
**Monitoring Linkedin**
|
|
1030
|
+
|
|
1031
|
+
- HTTP: `GET /api/v1/radar/monitoring/linkedin`
|
|
1032
|
+
- operationId: `monitoring_linkedin_radar_monitoring_linkedin_get` (also callable as `g8.api.call("monitoring_linkedin_radar_monitoring_linkedin_get", input)`)
|
|
1033
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1034
|
+
- API-key scope: `radar:read`
|
|
1035
|
+
|
|
1036
|
+
Competitor LinkedIn posts (listener store first, then corpus fallback).
|
|
1037
|
+
|
|
1038
|
+
Every filter is forwarded as a RESOLVED value. Called directly (not via
|
|
1039
|
+
FastAPI), omitted ``date_from``/``date_to`` params would keep their
|
|
1040
|
+
``Query`` sentinels, and the cb handler's ``date_from > date_to`` guard then
|
|
1041
|
+
raises ``TypeError`` (Query vs Query) -> a 500 on every call. Passing the
|
|
1042
|
+
coerced ``date``/``None`` values instead lets the guard emit a clean 422 on
|
|
1043
|
+
an inverted range and exposes the page/domain/date filters the cb route
|
|
1044
|
+
supports.
|
|
1045
|
+
|
|
1046
|
+
**Input**
|
|
1047
|
+
|
|
1048
|
+
| Field | Type | Required | Description |
|
|
1049
|
+
|---|---|---|---|
|
|
1050
|
+
| `query.page` | `integer` | no | default `1` |
|
|
1051
|
+
| `query.limit` | `integer` | no | default `50` |
|
|
1052
|
+
| `query.competitor_domain` | `string \| null` | no | |
|
|
1053
|
+
| `query.date_from` | `string (date) \| null` | no | |
|
|
1054
|
+
| `query.date_to` | `string (date) \| null` | no | |
|
|
1055
|
+
|
|
1056
|
+
**Returns** `unknown`.
|
|
1057
|
+
|
|
1058
|
+
**Example**
|
|
1059
|
+
|
|
1060
|
+
```ts
|
|
1061
|
+
const result = await g8.api.radar.monitoringLinkedin();
|
|
1062
|
+
```
|
|
1063
|
+
|
|
1064
|
+
---
|
|
1065
|
+
|
|
1066
|
+
<a id="op-optimizationruns"></a>
|
|
1067
|
+
|
|
1068
|
+
### `g8.api.radar.optimizationRuns(input?)`
|
|
1069
|
+
|
|
1070
|
+
**Optimization Runs**
|
|
1071
|
+
|
|
1072
|
+
- HTTP: `GET /api/v1/radar/optimization-runs`
|
|
1073
|
+
- operationId: `optimization_runs_radar_optimization_runs_get` (also callable as `g8.api.call("optimization_runs_radar_optimization_runs_get", input)`)
|
|
1074
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1075
|
+
- API-key scope: `radar:read`
|
|
1076
|
+
|
|
1077
|
+
Radar-spawned content-refresh grids with lean score aggregates.
|
|
1078
|
+
|
|
1079
|
+
**Input**: none.
|
|
1080
|
+
|
|
1081
|
+
**Returns** `unknown`.
|
|
1082
|
+
|
|
1083
|
+
**Example**
|
|
1084
|
+
|
|
1085
|
+
```ts
|
|
1086
|
+
const result = await g8.api.radar.optimizationRuns();
|
|
1087
|
+
```
|
|
1088
|
+
|
|
1089
|
+
---
|
|
1090
|
+
|
|
1091
|
+
<a id="op-overview"></a>
|
|
1092
|
+
|
|
1093
|
+
### `g8.api.radar.overview(input?)`
|
|
1094
|
+
|
|
1095
|
+
**Overview**
|
|
1096
|
+
|
|
1097
|
+
- HTTP: `GET /api/v1/radar/overview`
|
|
1098
|
+
- operationId: `overview_radar_overview_get` (also callable as `g8.api.call("overview_radar_overview_get", input)`)
|
|
1099
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1100
|
+
- API-key scope: `radar:read`
|
|
1101
|
+
|
|
1102
|
+
Radar dashboard summary: tracked counts, 7-day moves, the threat board,
|
|
1103
|
+
recent moves, pipeline funnel, and derived alerts.
|
|
1104
|
+
|
|
1105
|
+
**Input**: none.
|
|
1106
|
+
|
|
1107
|
+
**Returns** `unknown`.
|
|
1108
|
+
|
|
1109
|
+
**Example**
|
|
1110
|
+
|
|
1111
|
+
```ts
|
|
1112
|
+
const result = await g8.api.radar.overview();
|
|
1113
|
+
```
|
|
1114
|
+
|
|
1115
|
+
---
|
|
1116
|
+
|
|
1117
|
+
<a id="op-owntrafficestimate"></a>
|
|
1118
|
+
|
|
1119
|
+
### `g8.api.radar.ownTrafficEstimate(input?)`
|
|
1120
|
+
|
|
1121
|
+
**Own Traffic Estimate**
|
|
1122
|
+
|
|
1123
|
+
- HTTP: `GET /api/v1/radar/own-traffic-estimate`
|
|
1124
|
+
- operationId: `own_traffic_estimate_radar_own_traffic_estimate_get` (also callable as `g8.api.call("own_traffic_estimate_radar_own_traffic_estimate_get", input)`)
|
|
1125
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1126
|
+
- API-key scope: `radar:run`
|
|
1127
|
+
|
|
1128
|
+
Estimated own-domain traffic (DataForSEO) - Traffic & market fallback.
|
|
1129
|
+
|
|
1130
|
+
**Input**: none.
|
|
1131
|
+
|
|
1132
|
+
**Returns** `unknown`.
|
|
1133
|
+
|
|
1134
|
+
**Example**
|
|
1135
|
+
|
|
1136
|
+
```ts
|
|
1137
|
+
const result = await g8.api.radar.ownTrafficEstimate();
|
|
1138
|
+
```
|
|
1139
|
+
|
|
1140
|
+
---
|
|
1141
|
+
|
|
1142
|
+
<a id="op-pagehistory"></a>
|
|
1143
|
+
|
|
1144
|
+
### `g8.api.radar.pageHistory(input)`
|
|
1145
|
+
|
|
1146
|
+
**Page History**
|
|
1147
|
+
|
|
1148
|
+
- HTTP: `GET /api/v1/radar/monitoring/page-history`
|
|
1149
|
+
- operationId: `page_history_radar_monitoring_page_history_get` (also callable as `g8.api.call("page_history_radar_monitoring_page_history_get", input)`)
|
|
1150
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1151
|
+
- API-key scope: `radar:read`
|
|
1152
|
+
|
|
1153
|
+
Full capture history for one page (competitor + url), newest-first.
|
|
1154
|
+
|
|
1155
|
+
**Input**
|
|
1156
|
+
|
|
1157
|
+
| Field | Type | Required | Description |
|
|
1158
|
+
|---|---|---|---|
|
|
1159
|
+
| `query.url` | `string` | yes | |
|
|
1160
|
+
| `query.competitor_id` | `string` | yes | |
|
|
1161
|
+
| `query.limit` | `integer` | no | default `20` |
|
|
1162
|
+
|
|
1163
|
+
**Returns** `unknown`.
|
|
1164
|
+
|
|
1165
|
+
**Example**
|
|
1166
|
+
|
|
1167
|
+
```ts
|
|
1168
|
+
const result = await g8.api.radar.pageHistory({ query: { url: "https://example.com", competitor_id: "id" } });
|
|
1169
|
+
```
|
|
1170
|
+
|
|
1171
|
+
---
|
|
1172
|
+
|
|
1173
|
+
<a id="op-putsettings"></a>
|
|
1174
|
+
|
|
1175
|
+
### `g8.api.radar.putSettings(input)`
|
|
1176
|
+
|
|
1177
|
+
**Put Settings**
|
|
1178
|
+
|
|
1179
|
+
- HTTP: `PUT /api/v1/radar/settings`
|
|
1180
|
+
- operationId: `put_settings_radar_settings_put` (also callable as `g8.api.call("put_settings_radar_settings_put", input)`)
|
|
1181
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
1182
|
+
- API-key scope: `radar:write`
|
|
1183
|
+
|
|
1184
|
+
Replace the org's Radar settings (full object).
|
|
1185
|
+
|
|
1186
|
+
**Input**
|
|
1187
|
+
|
|
1188
|
+
| Field | Type | Required | Description |
|
|
1189
|
+
|---|---|---|---|
|
|
1190
|
+
| `body` | `RadarSettings` | yes | Request body; fields below. |
|
|
1191
|
+
|
|
1192
|
+
Body fields (`RadarSettings`):
|
|
1193
|
+
|
|
1194
|
+
| Field | Type | Required | Description |
|
|
1195
|
+
|---|---|---|---|
|
|
1196
|
+
| `body.ad_source` | `"stored" \| "linkedin" \| "meta" \| "google" \| "all"` | no | default `"stored"` |
|
|
1197
|
+
| `body.alerts` | `RadarAlerts` | no | |
|
|
1198
|
+
| `body.channels` | `RadarChannels` | no | |
|
|
1199
|
+
| `body.monthly_credit_cap` | `integer \| null` | no | min 0 |
|
|
1200
|
+
| `body.tier1_cadence_days` | `integer` | no | default `7`, min 1, max 365 |
|
|
1201
|
+
| `body.tier2_cadence_days` | `integer` | no | default `30`, min 1, max 365 |
|
|
1202
|
+
|
|
1203
|
+
**Returns** `unknown`.
|
|
1204
|
+
|
|
1205
|
+
**Example**
|
|
1206
|
+
|
|
1207
|
+
```ts
|
|
1208
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
1209
|
+
const result = await g8.api.radar.putSettings({ body: {} });
|
|
1210
|
+
```
|
|
1211
|
+
|
|
1212
|
+
---
|
|
1213
|
+
|
|
1214
|
+
<a id="op-scanallcompetitors"></a>
|
|
1215
|
+
|
|
1216
|
+
### `g8.api.radar.scanAllCompetitors(input?)`
|
|
1217
|
+
|
|
1218
|
+
**Scan All Competitors**
|
|
1219
|
+
|
|
1220
|
+
- HTTP: `POST /api/v1/radar/scan-all`
|
|
1221
|
+
- operationId: `scan_all_competitors_radar_scan_all_post` (also callable as `g8.api.call("scan_all_competitors_radar_scan_all_post", input)`)
|
|
1222
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
1223
|
+
- API-key scope: `radar:run`
|
|
1224
|
+
|
|
1225
|
+
BILLABLE: enqueue a scan for every active competitor (Celery).
|
|
1226
|
+
|
|
1227
|
+
**Input**: none.
|
|
1228
|
+
|
|
1229
|
+
**Returns** `unknown`.
|
|
1230
|
+
|
|
1231
|
+
**Example**
|
|
1232
|
+
|
|
1233
|
+
```ts
|
|
1234
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
1235
|
+
const result = await g8.api.radar.scanAllCompetitors();
|
|
1236
|
+
```
|
|
1237
|
+
|
|
1238
|
+
---
|
|
1239
|
+
|
|
1240
|
+
<a id="op-scancompetitor"></a>
|
|
1241
|
+
|
|
1242
|
+
### `g8.api.radar.scanCompetitor(input)`
|
|
1243
|
+
|
|
1244
|
+
**Scan Competitor**
|
|
1245
|
+
|
|
1246
|
+
- HTTP: `POST /api/v1/radar/competitors/{competitor_id}/scan`
|
|
1247
|
+
- operationId: `scan_competitor_radar_competitors__competitor_id__scan_post` (also callable as `g8.api.call("scan_competitor_radar_competitors__competitor_id__scan_post", input)`)
|
|
1248
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
1249
|
+
- API-key scope: `radar:run`
|
|
1250
|
+
|
|
1251
|
+
BILLABLE: enqueue a fresh scan of one competitor (Celery). Returns {task_id}.
|
|
1252
|
+
|
|
1253
|
+
**Input**
|
|
1254
|
+
|
|
1255
|
+
| Field | Type | Required | Description |
|
|
1256
|
+
|---|---|---|---|
|
|
1257
|
+
| `path.competitor_id` | `string` | yes | |
|
|
1258
|
+
|
|
1259
|
+
**Returns** `unknown`.
|
|
1260
|
+
|
|
1261
|
+
**Example**
|
|
1262
|
+
|
|
1263
|
+
```ts
|
|
1264
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
1265
|
+
const result = await g8.api.radar.scanCompetitor({ path: { competitor_id: "id" } });
|
|
1266
|
+
```
|
|
1267
|
+
|
|
1268
|
+
---
|
|
1269
|
+
|
|
1270
|
+
<a id="op-traffic"></a>
|
|
1271
|
+
|
|
1272
|
+
### `g8.api.radar.traffic(input?)`
|
|
1273
|
+
|
|
1274
|
+
**Traffic**
|
|
1275
|
+
|
|
1276
|
+
- HTTP: `GET /api/v1/radar/traffic`
|
|
1277
|
+
- operationId: `traffic_radar_traffic_get` (also callable as `g8.api.call("traffic_radar_traffic_get", input)`)
|
|
1278
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1279
|
+
- API-key scope: `radar:read`
|
|
1280
|
+
|
|
1281
|
+
Traffic & market view: per-competitor visit estimates + trend (self marked).
|
|
1282
|
+
|
|
1283
|
+
**Input**: none.
|
|
1284
|
+
|
|
1285
|
+
**Returns** `unknown`.
|
|
1286
|
+
|
|
1287
|
+
**Example**
|
|
1288
|
+
|
|
1289
|
+
```ts
|
|
1290
|
+
const result = await g8.api.radar.traffic();
|
|
1291
|
+
```
|
|
1292
|
+
|
|
1293
|
+
---
|
|
1294
|
+
|
|
1295
|
+
<a id="op-updatecompetitor"></a>
|
|
1296
|
+
|
|
1297
|
+
### `g8.api.radar.updateCompetitor(input)`
|
|
1298
|
+
|
|
1299
|
+
**Update Competitor**
|
|
1300
|
+
|
|
1301
|
+
- HTTP: `PATCH /api/v1/radar/competitors/{competitor_id}`
|
|
1302
|
+
- operationId: `update_competitor_radar_competitors__competitor_id__patch` (also callable as `g8.api.call("update_competitor_radar_competitors__competitor_id__patch", input)`)
|
|
1303
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
1304
|
+
- API-key scope: `radar:write`
|
|
1305
|
+
|
|
1306
|
+
Update a competitor profile (tier, active flag, name, or scan_config).
|
|
1307
|
+
|
|
1308
|
+
**Input**
|
|
1309
|
+
|
|
1310
|
+
| Field | Type | Required | Description |
|
|
1311
|
+
|---|---|---|---|
|
|
1312
|
+
| `path.competitor_id` | `string` | yes | |
|
|
1313
|
+
| `body` | `PatchCompetitorRequest` | yes | Request body; fields below. |
|
|
1314
|
+
|
|
1315
|
+
Body fields (`PatchCompetitorRequest`):
|
|
1316
|
+
|
|
1317
|
+
| Field | Type | Required | Description |
|
|
1318
|
+
|---|---|---|---|
|
|
1319
|
+
| `body.is_active` | `boolean \| null` | no | |
|
|
1320
|
+
| `body.name` | `string \| null` | no | max length 255 |
|
|
1321
|
+
| `body.scan_config` | `ScanConfigDTO \| null` | no | |
|
|
1322
|
+
| `body.tier` | `string \| null` | no | |
|
|
1323
|
+
|
|
1324
|
+
**Returns** `unknown`.
|
|
1325
|
+
|
|
1326
|
+
**Example**
|
|
1327
|
+
|
|
1328
|
+
```ts
|
|
1329
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
1330
|
+
const result = await g8.api.radar.updateCompetitor({ path: { competitor_id: "id" }, body: {} });
|
|
1331
|
+
```
|
|
1332
|
+
|
|
1333
|
+
---
|
|
1334
|
+
|
|
1335
|
+
<a id="op-updategap"></a>
|
|
1336
|
+
|
|
1337
|
+
### `g8.api.radar.updateGap(input)`
|
|
1338
|
+
|
|
1339
|
+
**Update Gap**
|
|
1340
|
+
|
|
1341
|
+
- HTTP: `PATCH /api/v1/radar/gaps/{gap_id}`
|
|
1342
|
+
- operationId: `update_gap_radar_gaps__gap_id__patch` (also callable as `g8.api.call("update_gap_radar_gaps__gap_id__patch", input)`)
|
|
1343
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
1344
|
+
- API-key scope: `radar:write`
|
|
1345
|
+
|
|
1346
|
+
Update a gap's status (open / dismissed / converted).
|
|
1347
|
+
|
|
1348
|
+
**Input**
|
|
1349
|
+
|
|
1350
|
+
| Field | Type | Required | Description |
|
|
1351
|
+
|---|---|---|---|
|
|
1352
|
+
| `path.gap_id` | `string` | yes | |
|
|
1353
|
+
| `body` | `PatchGapRequest` | yes | Request body; fields below. |
|
|
1354
|
+
|
|
1355
|
+
Body fields (`PatchGapRequest`):
|
|
1356
|
+
|
|
1357
|
+
| Field | Type | Required | Description |
|
|
1358
|
+
|---|---|---|---|
|
|
1359
|
+
| `body.status` | `string` | yes | |
|
|
1360
|
+
|
|
1361
|
+
**Returns** `unknown`.
|
|
1362
|
+
|
|
1363
|
+
**Example**
|
|
1364
|
+
|
|
1365
|
+
```ts
|
|
1366
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
1367
|
+
const result = await g8.api.radar.updateGap({ path: { gap_id: "id" }, body: { status: "example" } });
|
|
1368
|
+
```
|
|
1369
|
+
|
|
1370
|
+
---
|
|
1371
|
+
|
|
1372
|
+
## Referenced types
|
|
1373
|
+
|
|
1374
|
+
Named types that appear in the tables above. Full TypeScript definitions: `G8Contract.<Name>` (`import type { G8Contract } from "@graph8/sdk"`).
|
|
1375
|
+
|
|
1376
|
+
<a id="type-bulkcompetitoritem"></a>
|
|
1377
|
+
|
|
1378
|
+
### `BulkCompetitorItem`
|
|
1379
|
+
|
|
1380
|
+
| Field | Type | Required | Description |
|
|
1381
|
+
|---|---|---|---|
|
|
1382
|
+
| `domain` | `string` | yes | min length 1, max length 255 |
|
|
1383
|
+
| `name` | `string \| null` | no | max length 255 |
|
|
1384
|
+
| `scan_config` | `ScanConfigDTO \| null` | no | |
|
|
1385
|
+
| `tier` | `string \| null` | no | |
|
|
1386
|
+
|
|
1387
|
+
<a id="type-radaralerts"></a>
|
|
1388
|
+
|
|
1389
|
+
### `RadarAlerts`
|
|
1390
|
+
|
|
1391
|
+
| Field | Type | Required | Description |
|
|
1392
|
+
|---|---|---|---|
|
|
1393
|
+
| `case_files` | `boolean` | no | default `true` |
|
|
1394
|
+
| `content_velocity` | `boolean` | no | default `true` |
|
|
1395
|
+
| `hiring_spike` | `boolean` | no | default `true` |
|
|
1396
|
+
| `keyword_overtake` | `boolean` | no | default `true` |
|
|
1397
|
+
| `new_ads` | `boolean` | no | default `true` |
|
|
1398
|
+
| `pricing_change` | `boolean` | no | default `true` |
|
|
1399
|
+
| `warm_account` | `boolean` | no | default `true` |
|
|
1400
|
+
|
|
1401
|
+
<a id="type-radarchannels"></a>
|
|
1402
|
+
|
|
1403
|
+
### `RadarChannels`
|
|
1404
|
+
|
|
1405
|
+
| Field | Type | Required | Description |
|
|
1406
|
+
|---|---|---|---|
|
|
1407
|
+
| `bridge` | `boolean` | no | default `false` |
|
|
1408
|
+
| `in_app` | `boolean` | no | default `true` |
|
|
1409
|
+
|
|
1410
|
+
<a id="type-scanconfigdto"></a>
|
|
1411
|
+
|
|
1412
|
+
### `ScanConfigDTO`
|
|
1413
|
+
|
|
1414
|
+
Per-competitor page-selection config (persisted on profile.meta.scan_config). mode=auto: Firecrawl /map → rank by traffic + pricing/feature paths → scrape top N (= tier page budget). mode=manual: scrape include_paths (literal or /wildcard/* patterns), capped to the budget.
|
|
1415
|
+
|
|
1416
|
+
| Field | Type | Required | Description |
|
|
1417
|
+
|---|---|---|---|
|
|
1418
|
+
| `include_paths` | `Array<string>` | no | max items 50 |
|
|
1419
|
+
| `mode` | `"auto" \| "manual"` | no | default `"auto"` |
|
|
1420
|
+
|
|
1421
|
+
<a id="type-seedcontext"></a>
|
|
1422
|
+
|
|
1423
|
+
### `SeedContext`
|
|
1424
|
+
|
|
1425
|
+
Optional richer seed for an approved stub — e.g. the target keyword (+ volume/cpc) to seed an SEO page with. All optional; absent → current behavior unchanged.
|
|
1426
|
+
|
|
1427
|
+
| Field | Type | Required | Description |
|
|
1428
|
+
|---|---|---|---|
|
|
1429
|
+
| `cpc` | `number \| null` | no | |
|
|
1430
|
+
| `primary_keyword` | `string \| null` | no | max length 255 |
|
|
1431
|
+
| `volume` | `integer \| null` | no | |
|