@graph8/sdk 0.251.0 → 0.262.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 +105 -7
- package/dist/index.d.ts +105 -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 +103 -7
- package/dist/react.d.ts +103 -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 +1697 -0
- package/docs/api/deals.md +2436 -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
package/docs/api/seo.md
ADDED
|
@@ -0,0 +1,660 @@
|
|
|
1
|
+
<!-- Generated by sdk/js/scripts/generate-agent-docs.ts from developer-contract/openapi.json. Regenerated on every build. -->
|
|
2
|
+
|
|
3
|
+
# `g8.api.seo`: SEO
|
|
4
|
+
|
|
5
|
+
11 operations (5 read, 2 write, 4 billable).
|
|
6
|
+
|
|
7
|
+
No hand-written client covers this area. Call it through `g8.api.seo.*` 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: [seo.d.ts](seo.d.ts).
|
|
20
|
+
|
|
21
|
+
## Operations
|
|
22
|
+
|
|
23
|
+
| Call | HTTP | Tier | Scope | Summary |
|
|
24
|
+
|---|---|---|---|---|
|
|
25
|
+
| [`getSeoAudit`](#op-getseoaudit) | `GET /api/v1/seo/audits/{audit_id}` | read | `intent:read` | Get Seo Audit |
|
|
26
|
+
| [`getSeoAuditIssues`](#op-getseoauditissues) | `GET /api/v1/seo/audits/{audit_id}/issues` | read | `intent:read` | Get Seo Audit Issues |
|
|
27
|
+
| [`getSeoDomainBacklinks`](#op-getseodomainbacklinks) | `GET /api/v1/seo/domains/{domain}/backlinks` | billable | `intent:run` | Get Seo Domain Backlinks |
|
|
28
|
+
| [`getSeoDomainOverview`](#op-getseodomainoverview) | `GET /api/v1/seo/domains/{domain}/overview` | billable | `intent:run` | Get Seo Domain Overview |
|
|
29
|
+
| [`getSeoRankHistory`](#op-getseorankhistory) | `GET /api/v1/seo/rank-tracking/{keyword_id}/history` | read | `intent:read` | Get Seo Rank History |
|
|
30
|
+
| [`listSeoAudits`](#op-listseoaudits) | `GET /api/v1/seo/audits` | read | `intent:read` | List Seo Audits |
|
|
31
|
+
| [`listSeoTrackedKeywords`](#op-listseotrackedkeywords) | `GET /api/v1/seo/rank-tracking` | read | `intent:read` | List Seo Tracked Keywords |
|
|
32
|
+
| [`removeSeoTrackedKeywords`](#op-removeseotrackedkeywords) | `POST /api/v1/seo/rank-tracking/keywords/remove` | write | `intent:write` | Remove Seo Tracked Keywords |
|
|
33
|
+
| [`researchSeoKeywords`](#op-researchseokeywords) | `POST /api/v1/seo/keywords/research` | billable | `intent:run` | Research Seo Keywords |
|
|
34
|
+
| [`saveSeoTrackedKeywords`](#op-saveseotrackedkeywords) | `POST /api/v1/seo/rank-tracking/keywords` | write | `intent:write` | Save Seo Tracked Keywords |
|
|
35
|
+
| [`startSeoAudit`](#op-startseoaudit) | `POST /api/v1/seo/audits` | billable | `intent:run` | Start Seo Audit |
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
<a id="op-getseoaudit"></a>
|
|
40
|
+
|
|
41
|
+
### `g8.api.seo.getSeoAudit(input)`
|
|
42
|
+
|
|
43
|
+
**Get Seo Audit**
|
|
44
|
+
|
|
45
|
+
- HTTP: `GET /api/v1/seo/audits/{audit_id}`
|
|
46
|
+
- operationId: `get_seo_audit_seo_audits__audit_id__get` (also callable as `g8.api.call("get_seo_audit_seo_audits__audit_id__get", input)`)
|
|
47
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
48
|
+
- API-key scope: `intent:read`
|
|
49
|
+
|
|
50
|
+
SPENDS NOTHING. One audit, with its plain-language `state`. 404 if it is
|
|
51
|
+
not this organisation's.
|
|
52
|
+
|
|
53
|
+
**Input**
|
|
54
|
+
|
|
55
|
+
| Field | Type | Required | Description |
|
|
56
|
+
|---|---|---|---|
|
|
57
|
+
| `path.audit_id` | `string (uuid)` | yes | |
|
|
58
|
+
|
|
59
|
+
**Returns** `ApiResponse_SeoAudit_`: the envelope `{ data: SeoAudit, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
60
|
+
|
|
61
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
62
|
+
|
|
63
|
+
`SeoAudit` fields:
|
|
64
|
+
|
|
65
|
+
| Field | Type | Required | Description |
|
|
66
|
+
|---|---|---|---|
|
|
67
|
+
| `domain` | `string` | yes | |
|
|
68
|
+
| `id` | `string (uuid)` | yes | |
|
|
69
|
+
| `max_pages` | `integer` | yes | |
|
|
70
|
+
| `state` | `SeoAuditState` | yes | |
|
|
71
|
+
| `status` | `string` | yes | |
|
|
72
|
+
| `completed_at` | `string (date-time) \| null` | no | |
|
|
73
|
+
| `created_at` | `string (date-time) \| null` | no | |
|
|
74
|
+
| `credits_charged` | `integer \| null` | no | |
|
|
75
|
+
| `failure_reason` | `string \| null` | no | |
|
|
76
|
+
| `onpage_score` | `number \| null` | no | |
|
|
77
|
+
| `pages_crawled` | `integer \| null` | no | |
|
|
78
|
+
| `summary_checks` | `Record<string, unknown>` | no | default `{}` |
|
|
79
|
+
|
|
80
|
+
**Example**
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
const result = await g8.api.seo.getSeoAudit({ path: { audit_id: "00000000-0000-0000-0000-000000000000" } });
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
<a id="op-getseoauditissues"></a>
|
|
89
|
+
|
|
90
|
+
### `g8.api.seo.getSeoAuditIssues(input)`
|
|
91
|
+
|
|
92
|
+
**Get Seo Audit Issues**
|
|
93
|
+
|
|
94
|
+
- HTTP: `GET /api/v1/seo/audits/{audit_id}/issues`
|
|
95
|
+
- operationId: `get_seo_audit_issues_seo_audits__audit_id__issues_get` (also callable as `g8.api.call("get_seo_audit_issues_seo_audits__audit_id__issues_get", input)`)
|
|
96
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
97
|
+
- API-key scope: `intent:read`
|
|
98
|
+
|
|
99
|
+
SPENDS NOTHING. The issues an audit found, grouped by type and severity,
|
|
100
|
+
each with the URLs it affects.
|
|
101
|
+
|
|
102
|
+
**Input**
|
|
103
|
+
|
|
104
|
+
| Field | Type | Required | Description |
|
|
105
|
+
|---|---|---|---|
|
|
106
|
+
| `path.audit_id` | `string (uuid)` | yes | |
|
|
107
|
+
|
|
108
|
+
**Returns** `ApiResponse_SeoAuditIssues_`: the envelope `{ data: SeoAuditIssues, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
109
|
+
|
|
110
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
111
|
+
|
|
112
|
+
`SeoAuditIssues` fields:
|
|
113
|
+
|
|
114
|
+
| Field | Type | Required | Description |
|
|
115
|
+
|---|---|---|---|
|
|
116
|
+
| `audit_id` | `string (uuid)` | yes | |
|
|
117
|
+
| `issues` | `Array<SeoAuditIssue>` | yes | |
|
|
118
|
+
|
|
119
|
+
**Example**
|
|
120
|
+
|
|
121
|
+
```ts
|
|
122
|
+
const result = await g8.api.seo.getSeoAuditIssues({ path: { audit_id: "00000000-0000-0000-0000-000000000000" } });
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
<a id="op-getseodomainbacklinks"></a>
|
|
128
|
+
|
|
129
|
+
### `g8.api.seo.getSeoDomainBacklinks(input)`
|
|
130
|
+
|
|
131
|
+
**Get Seo Domain Backlinks**
|
|
132
|
+
|
|
133
|
+
- HTTP: `GET /api/v1/seo/domains/{domain}/backlinks`
|
|
134
|
+
- operationId: `get_seo_domain_backlinks_seo_domains__domain__backlinks_get` (also callable as `g8.api.call("get_seo_domain_backlinks_seo_domains__domain__backlinks_get", input)`)
|
|
135
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
136
|
+
- API-key scope: `intent:run`
|
|
137
|
+
|
|
138
|
+
SPENDS CREDITS. A domain's backlink profile: authority, totals, dofollow / nofollow split.
|
|
139
|
+
|
|
140
|
+
Same shape as the overview: `billable` despite being a GET, domain
|
|
141
|
+
validated before the credit check, provider outage as a 502.
|
|
142
|
+
|
|
143
|
+
**Input**
|
|
144
|
+
|
|
145
|
+
| Field | Type | Required | Description |
|
|
146
|
+
|---|---|---|---|
|
|
147
|
+
| `path.domain` | `string` | yes | A bare domain - no scheme, no path. `www.` is stripped. |
|
|
148
|
+
|
|
149
|
+
**Returns** `ApiResponse_SeoBacklinksOverview_`: the envelope `{ data: SeoBacklinksOverview, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
150
|
+
|
|
151
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
152
|
+
|
|
153
|
+
`SeoBacklinksOverview` fields:
|
|
154
|
+
|
|
155
|
+
| Field | Type | Required | Description |
|
|
156
|
+
|---|---|---|---|
|
|
157
|
+
| `authority_score` | `number \| null` | no | |
|
|
158
|
+
| `dofollow` | `integer \| null` | no | |
|
|
159
|
+
| `nofollow` | `integer \| null` | no | |
|
|
160
|
+
| `referring_domains` | `integer \| null` | no | |
|
|
161
|
+
| `total_backlinks` | `integer \| null` | no | |
|
|
162
|
+
|
|
163
|
+
**Example**
|
|
164
|
+
|
|
165
|
+
```ts
|
|
166
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
167
|
+
const result = await g8.api.seo.getSeoDomainBacklinks({ path: { domain: "acme.com" } });
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
<a id="op-getseodomainoverview"></a>
|
|
173
|
+
|
|
174
|
+
### `g8.api.seo.getSeoDomainOverview(input)`
|
|
175
|
+
|
|
176
|
+
**Get Seo Domain Overview**
|
|
177
|
+
|
|
178
|
+
- HTTP: `GET /api/v1/seo/domains/{domain}/overview`
|
|
179
|
+
- operationId: `get_seo_domain_overview_seo_domains__domain__overview_get` (also callable as `g8.api.call("get_seo_domain_overview_seo_domains__domain__overview_get", input)`)
|
|
180
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
181
|
+
- API-key scope: `intent:run`
|
|
182
|
+
|
|
183
|
+
SPENDS CREDITS. A domain's organic footprint: overview, top keywords, top pages.
|
|
184
|
+
|
|
185
|
+
A GET that costs money, so it is tiered `billable` rather than `read` -
|
|
186
|
+
reading rank history and buying a domain report are not the same grant.
|
|
187
|
+
`data_freshness` labels how old the provider's view is. The domain is
|
|
188
|
+
validated first: a scheme or a path is a 422, before any credit is checked.
|
|
189
|
+
|
|
190
|
+
**Input**
|
|
191
|
+
|
|
192
|
+
| Field | Type | Required | Description |
|
|
193
|
+
|---|---|---|---|
|
|
194
|
+
| `path.domain` | `string` | yes | A bare domain - no scheme, no path. `www.` is stripped. |
|
|
195
|
+
|
|
196
|
+
**Returns** `ApiResponse_SeoDomainOverviewResponse_`: the envelope `{ data: SeoDomainOverviewResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
197
|
+
|
|
198
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
199
|
+
|
|
200
|
+
`SeoDomainOverviewResponse` fields:
|
|
201
|
+
|
|
202
|
+
| Field | Type | Required | Description |
|
|
203
|
+
|---|---|---|---|
|
|
204
|
+
| `overview` | `Record<string, unknown>` | yes | |
|
|
205
|
+
| `top_keywords` | `Array<Record<string, unknown>>` | yes | |
|
|
206
|
+
| `top_pages` | `Array<Record<string, unknown>>` | yes | |
|
|
207
|
+
| `data_freshness` | `string` | no | default `"labs-30-90d"` |
|
|
208
|
+
|
|
209
|
+
**Example**
|
|
210
|
+
|
|
211
|
+
```ts
|
|
212
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
213
|
+
const result = await g8.api.seo.getSeoDomainOverview({ path: { domain: "acme.com" } });
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
<a id="op-getseorankhistory"></a>
|
|
219
|
+
|
|
220
|
+
### `g8.api.seo.getSeoRankHistory(input)`
|
|
221
|
+
|
|
222
|
+
**Get Seo Rank History**
|
|
223
|
+
|
|
224
|
+
- HTTP: `GET /api/v1/seo/rank-tracking/{keyword_id}/history`
|
|
225
|
+
- operationId: `get_seo_rank_history_seo_rank_tracking__keyword_id__history_get` (also callable as `g8.api.call("get_seo_rank_history_seo_rank_tracking__keyword_id__history_get", input)`)
|
|
226
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
227
|
+
- API-key scope: `intent:read`
|
|
228
|
+
|
|
229
|
+
SPENDS NOTHING. One tracked keyword's rank, snapshot by snapshot.
|
|
230
|
+
|
|
231
|
+
`days` bounds the window at 365. A keyword that is not this
|
|
232
|
+
organisation's has no snapshots, so the answer is an empty history rather
|
|
233
|
+
than a probe.
|
|
234
|
+
|
|
235
|
+
**Input**
|
|
236
|
+
|
|
237
|
+
| Field | Type | Required | Description |
|
|
238
|
+
|---|---|---|---|
|
|
239
|
+
| `path.keyword_id` | `string (uuid)` | yes | A tracked keyword id from `GET /seo/rank-tracking`. |
|
|
240
|
+
| `query.days` | `integer` | no | How far back to read snapshots. default `90` |
|
|
241
|
+
|
|
242
|
+
**Returns** `ApiResponse_SeoRankHistory_`: the envelope `{ data: SeoRankHistory, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
243
|
+
|
|
244
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
245
|
+
|
|
246
|
+
`SeoRankHistory` fields:
|
|
247
|
+
|
|
248
|
+
| Field | Type | Required | Description |
|
|
249
|
+
|---|---|---|---|
|
|
250
|
+
| `keyword_id` | `string (uuid)` | yes | |
|
|
251
|
+
| `snapshots` | `Array<SeoRankSnapshot>` | yes | |
|
|
252
|
+
|
|
253
|
+
**Example**
|
|
254
|
+
|
|
255
|
+
```ts
|
|
256
|
+
const result = await g8.api.seo.getSeoRankHistory({ path: { keyword_id: "00000000-0000-0000-0000-000000000000" } });
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
<a id="op-listseoaudits"></a>
|
|
262
|
+
|
|
263
|
+
### `g8.api.seo.listSeoAudits(input?)`
|
|
264
|
+
|
|
265
|
+
**List Seo Audits**
|
|
266
|
+
|
|
267
|
+
- HTTP: `GET /api/v1/seo/audits`
|
|
268
|
+
- operationId: `list_seo_audits_seo_audits_get` (also callable as `g8.api.call("list_seo_audits_seo_audits_get", input)`)
|
|
269
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
270
|
+
- API-key scope: `intent:read`
|
|
271
|
+
|
|
272
|
+
SPENDS NOTHING. This organisation's audits, newest first.
|
|
273
|
+
|
|
274
|
+
**Input**
|
|
275
|
+
|
|
276
|
+
| Field | Type | Required | Description |
|
|
277
|
+
|---|---|---|---|
|
|
278
|
+
| `query.limit` | `integer` | no | default `20` |
|
|
279
|
+
|
|
280
|
+
**Returns** `ApiResponse_List_SeoAudit__`: the envelope `{ data: Array<SeoAudit>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
281
|
+
|
|
282
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
283
|
+
|
|
284
|
+
`SeoAudit` fields:
|
|
285
|
+
|
|
286
|
+
| Field | Type | Required | Description |
|
|
287
|
+
|---|---|---|---|
|
|
288
|
+
| `domain` | `string` | yes | |
|
|
289
|
+
| `id` | `string (uuid)` | yes | |
|
|
290
|
+
| `max_pages` | `integer` | yes | |
|
|
291
|
+
| `state` | `SeoAuditState` | yes | |
|
|
292
|
+
| `status` | `string` | yes | |
|
|
293
|
+
| `completed_at` | `string (date-time) \| null` | no | |
|
|
294
|
+
| `created_at` | `string (date-time) \| null` | no | |
|
|
295
|
+
| `credits_charged` | `integer \| null` | no | |
|
|
296
|
+
| `failure_reason` | `string \| null` | no | |
|
|
297
|
+
| `onpage_score` | `number \| null` | no | |
|
|
298
|
+
| `pages_crawled` | `integer \| null` | no | |
|
|
299
|
+
| `summary_checks` | `Record<string, unknown>` | no | default `{}` |
|
|
300
|
+
|
|
301
|
+
**Example**
|
|
302
|
+
|
|
303
|
+
```ts
|
|
304
|
+
const result = await g8.api.seo.listSeoAudits();
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
<a id="op-listseotrackedkeywords"></a>
|
|
310
|
+
|
|
311
|
+
### `g8.api.seo.listSeoTrackedKeywords(input?)`
|
|
312
|
+
|
|
313
|
+
**List Seo Tracked Keywords**
|
|
314
|
+
|
|
315
|
+
- HTTP: `GET /api/v1/seo/rank-tracking`
|
|
316
|
+
- operationId: `list_seo_tracked_keywords_seo_rank_tracking_get` (also callable as `g8.api.call("list_seo_tracked_keywords_seo_rank_tracking_get", input)`)
|
|
317
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
318
|
+
- API-key scope: `intent:read`
|
|
319
|
+
|
|
320
|
+
SPENDS NOTHING. The keywords this organisation tracks, with their latest rank.
|
|
321
|
+
|
|
322
|
+
An organisation whose SEO storage is still provisioning gets an empty
|
|
323
|
+
list rather than an error, matching the app.
|
|
324
|
+
|
|
325
|
+
**Input**
|
|
326
|
+
|
|
327
|
+
| Field | Type | Required | Description |
|
|
328
|
+
|---|---|---|---|
|
|
329
|
+
| `query.domain` | `string \| null` | no | Only keywords tracked for this domain. |
|
|
330
|
+
|
|
331
|
+
**Returns** `ApiResponse_List_SeoTrackedKeyword__`: the envelope `{ data: Array<SeoTrackedKeyword>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
332
|
+
|
|
333
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
334
|
+
|
|
335
|
+
`SeoTrackedKeyword` fields:
|
|
336
|
+
|
|
337
|
+
| Field | Type | Required | Description |
|
|
338
|
+
|---|---|---|---|
|
|
339
|
+
| `cadence` | `string` | yes | |
|
|
340
|
+
| `domain` | `string` | yes | |
|
|
341
|
+
| `id` | `string (uuid)` | yes | |
|
|
342
|
+
| `keyword` | `string` | yes | |
|
|
343
|
+
| `language_code` | `string` | yes | |
|
|
344
|
+
| `location_code` | `integer` | yes | |
|
|
345
|
+
| `created_at` | `string (date-time) \| null` | no | |
|
|
346
|
+
| `latest_checked_at` | `string (date-time) \| null` | no | |
|
|
347
|
+
| `latest_rank` | `integer \| null` | no | |
|
|
348
|
+
| `latest_serp_url` | `string \| null` | no | |
|
|
349
|
+
| `search_volume` | `integer \| null` | no | |
|
|
350
|
+
|
|
351
|
+
**Example**
|
|
352
|
+
|
|
353
|
+
```ts
|
|
354
|
+
const result = await g8.api.seo.listSeoTrackedKeywords();
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
---
|
|
358
|
+
|
|
359
|
+
<a id="op-removeseotrackedkeywords"></a>
|
|
360
|
+
|
|
361
|
+
### `g8.api.seo.removeSeoTrackedKeywords(input)`
|
|
362
|
+
|
|
363
|
+
**Remove Seo Tracked Keywords**
|
|
364
|
+
|
|
365
|
+
- HTTP: `POST /api/v1/seo/rank-tracking/keywords/remove`
|
|
366
|
+
- operationId: `remove_seo_tracked_keywords_seo_rank_tracking_keywords_remove_post` (also callable as `g8.api.call("remove_seo_tracked_keywords_seo_rank_tracking_keywords_remove_post", input)`)
|
|
367
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
368
|
+
- API-key scope: `intent:write`
|
|
369
|
+
|
|
370
|
+
SPENDS NOTHING. Stop tracking up to 100 keywords, by id.
|
|
371
|
+
|
|
372
|
+
A POST rather than a DELETE because it takes a batch of ids in the body,
|
|
373
|
+
the same shape the app uses. Gated on the Signals DELETE permission, as
|
|
374
|
+
the app gates it. Ids that are not this organisation's are simply not
|
|
375
|
+
removed, and the count says how many were.
|
|
376
|
+
|
|
377
|
+
**Input**
|
|
378
|
+
|
|
379
|
+
| Field | Type | Required | Description |
|
|
380
|
+
|---|---|---|---|
|
|
381
|
+
| `body` | `SeoRemoveTrackedKeywordsRequest` | yes | Request body; fields below. |
|
|
382
|
+
|
|
383
|
+
Body fields (`SeoRemoveTrackedKeywordsRequest`):
|
|
384
|
+
|
|
385
|
+
| Field | Type | Required | Description |
|
|
386
|
+
|---|---|---|---|
|
|
387
|
+
| `body.keyword_ids` | `Array<string (uuid)>` | yes | min items 1, max items 100 |
|
|
388
|
+
|
|
389
|
+
**Returns** `ApiResponse_SeoRemovedKeywords_`: the envelope `{ data: SeoRemovedKeywords, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
390
|
+
|
|
391
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
392
|
+
|
|
393
|
+
`SeoRemovedKeywords` fields:
|
|
394
|
+
|
|
395
|
+
| Field | Type | Required | Description |
|
|
396
|
+
|---|---|---|---|
|
|
397
|
+
| `removed` | `integer` | yes | |
|
|
398
|
+
|
|
399
|
+
**Example**
|
|
400
|
+
|
|
401
|
+
```ts
|
|
402
|
+
const result = await g8.api.seo.removeSeoTrackedKeywords({ body: { keyword_ids: ["00000000-0000-0000-0000-000000000000"] } });
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
|
|
407
|
+
<a id="op-researchseokeywords"></a>
|
|
408
|
+
|
|
409
|
+
### `g8.api.seo.researchSeoKeywords(input)`
|
|
410
|
+
|
|
411
|
+
**Research Seo Keywords**
|
|
412
|
+
|
|
413
|
+
- HTTP: `POST /api/v1/seo/keywords/research`
|
|
414
|
+
- operationId: `research_seo_keywords_seo_keywords_research_post` (also callable as `g8.api.call("research_seo_keywords_seo_keywords_research_post", input)`)
|
|
415
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
416
|
+
- API-key scope: `intent:run`
|
|
417
|
+
|
|
418
|
+
SPENDS CREDITS. Keyword ideas around a seed, from the paid data provider.
|
|
419
|
+
|
|
420
|
+
`mode` picks the provider report: `ideas`, `related`, `suggestions`, or
|
|
421
|
+
`auto` to let the app choose. Rows come back in that report's own shape.
|
|
422
|
+
|
|
423
|
+
Runs the app's per-organisation provider rate limit (429 past it) and its
|
|
424
|
+
fail-closed credit check (402 when the balance is exhausted) before
|
|
425
|
+
anything is fetched. A provider outage is a 502 that says so.
|
|
426
|
+
|
|
427
|
+
**Input**
|
|
428
|
+
|
|
429
|
+
| Field | Type | Required | Description |
|
|
430
|
+
|---|---|---|---|
|
|
431
|
+
| `body` | `SeoResearchKeywordsRequest` | yes | Request body; fields below. |
|
|
432
|
+
|
|
433
|
+
Body fields (`SeoResearchKeywordsRequest`):
|
|
434
|
+
|
|
435
|
+
| Field | Type | Required | Description |
|
|
436
|
+
|---|---|---|---|
|
|
437
|
+
| `body.seed_keyword` | `string` | yes | min length 1, max length 500 |
|
|
438
|
+
| `body.language_code` | `string` | no | default `"en"`, max length 10 |
|
|
439
|
+
| `body.limit` | `integer` | no | default `150`, min 1, max 150 |
|
|
440
|
+
| `body.location_code` | `integer` | no | default `2840` |
|
|
441
|
+
| `body.mode` | `"auto" \| "ideas" \| "related" \| "suggestions"` | no | default `"auto"` |
|
|
442
|
+
|
|
443
|
+
**Returns** `ApiResponse_SeoResearchKeywordsResponse_`: the envelope `{ data: SeoResearchKeywordsResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
444
|
+
|
|
445
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
446
|
+
|
|
447
|
+
`SeoResearchKeywordsResponse` fields:
|
|
448
|
+
|
|
449
|
+
| Field | Type | Required | Description |
|
|
450
|
+
|---|---|---|---|
|
|
451
|
+
| `keywords` | `Array<Record<string, unknown>>` | no | default `[]` |
|
|
452
|
+
| `seed` | `SeoKeywordRow \| null` | no | |
|
|
453
|
+
|
|
454
|
+
**Example**
|
|
455
|
+
|
|
456
|
+
```ts
|
|
457
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
458
|
+
const result = await g8.api.seo.researchSeoKeywords({ body: { seed_keyword: "example" } });
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
---
|
|
462
|
+
|
|
463
|
+
<a id="op-saveseotrackedkeywords"></a>
|
|
464
|
+
|
|
465
|
+
### `g8.api.seo.saveSeoTrackedKeywords(input)`
|
|
466
|
+
|
|
467
|
+
**Save Seo Tracked Keywords**
|
|
468
|
+
|
|
469
|
+
- HTTP: `POST /api/v1/seo/rank-tracking/keywords`
|
|
470
|
+
- operationId: `save_seo_tracked_keywords_seo_rank_tracking_keywords_post` (also callable as `g8.api.call("save_seo_tracked_keywords_seo_rank_tracking_keywords_post", input)`)
|
|
471
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
472
|
+
- API-key scope: `intent:write`
|
|
473
|
+
|
|
474
|
+
SPENDS NOTHING NOW. Start tracking up to 100 keywords for a domain.
|
|
475
|
+
|
|
476
|
+
The rank checks themselves run in the background worker on the chosen
|
|
477
|
+
`cadence`; saving enrols the organisation in that worker's tick. The
|
|
478
|
+
saved rows come back with whatever the worker has already recorded.
|
|
479
|
+
Duplicates of an existing keyword are refused with a 422 naming them.
|
|
480
|
+
|
|
481
|
+
**Input**
|
|
482
|
+
|
|
483
|
+
| Field | Type | Required | Description |
|
|
484
|
+
|---|---|---|---|
|
|
485
|
+
| `body` | `SeoSaveTrackedKeywordsRequest` | yes | Request body; fields below. |
|
|
486
|
+
|
|
487
|
+
Body fields (`SeoSaveTrackedKeywordsRequest`):
|
|
488
|
+
|
|
489
|
+
| Field | Type | Required | Description |
|
|
490
|
+
|---|---|---|---|
|
|
491
|
+
| `body.domain` | `string` | yes | min length 3, max length 255 |
|
|
492
|
+
| `body.keywords` | `Array<SeoTrackKeywordItem>` | yes | min items 1, max items 100 |
|
|
493
|
+
| `body.cadence` | `"daily" \| "weekly"` | no | default `"daily"` |
|
|
494
|
+
| `body.language_code` | `string` | no | default `"en"`, max length 10 |
|
|
495
|
+
| `body.location_code` | `integer` | no | default `2840` |
|
|
496
|
+
|
|
497
|
+
**Returns** `ApiResponse_List_SeoTrackedKeyword__`: the envelope `{ data: Array<SeoTrackedKeyword>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
498
|
+
|
|
499
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
500
|
+
|
|
501
|
+
`SeoTrackedKeyword` fields:
|
|
502
|
+
|
|
503
|
+
| Field | Type | Required | Description |
|
|
504
|
+
|---|---|---|---|
|
|
505
|
+
| `cadence` | `string` | yes | |
|
|
506
|
+
| `domain` | `string` | yes | |
|
|
507
|
+
| `id` | `string (uuid)` | yes | |
|
|
508
|
+
| `keyword` | `string` | yes | |
|
|
509
|
+
| `language_code` | `string` | yes | |
|
|
510
|
+
| `location_code` | `integer` | yes | |
|
|
511
|
+
| `created_at` | `string (date-time) \| null` | no | |
|
|
512
|
+
| `latest_checked_at` | `string (date-time) \| null` | no | |
|
|
513
|
+
| `latest_rank` | `integer \| null` | no | |
|
|
514
|
+
| `latest_serp_url` | `string \| null` | no | |
|
|
515
|
+
| `search_volume` | `integer \| null` | no | |
|
|
516
|
+
|
|
517
|
+
**Example**
|
|
518
|
+
|
|
519
|
+
```ts
|
|
520
|
+
const result = await g8.api.seo.saveSeoTrackedKeywords({ body: { domain: "acme.com", keywords: [{ keyword: "example" }] } });
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
---
|
|
524
|
+
|
|
525
|
+
<a id="op-startseoaudit"></a>
|
|
526
|
+
|
|
527
|
+
### `g8.api.seo.startSeoAudit(input)`
|
|
528
|
+
|
|
529
|
+
**Start Seo Audit**
|
|
530
|
+
|
|
531
|
+
- HTTP: `POST /api/v1/seo/audits`
|
|
532
|
+
- operationId: `start_seo_audit_seo_audits_post` (also callable as `g8.api.call("start_seo_audit_seo_audits_post", input)`)
|
|
533
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
534
|
+
- API-key scope: `intent:run`
|
|
535
|
+
|
|
536
|
+
SPENDS CREDITS. Start a site audit of up to `max_pages` pages.
|
|
537
|
+
|
|
538
|
+
Credits are RESERVED up front, sized by `max_pages`, and charged as the
|
|
539
|
+
crawl completes - `credits_charged` on the audit says what was. 402 when
|
|
540
|
+
the balance cannot cover the reservation, 409 when an audit of this domain
|
|
541
|
+
is already running, 503 when the credit service cannot take the hold.
|
|
542
|
+
|
|
543
|
+
The audit runs in the background; poll `GET /seo/audits/{audit_id}` and
|
|
544
|
+
read `state`, which explains where it is in plain language and whether it
|
|
545
|
+
can be run again.
|
|
546
|
+
|
|
547
|
+
**Input**
|
|
548
|
+
|
|
549
|
+
| Field | Type | Required | Description |
|
|
550
|
+
|---|---|---|---|
|
|
551
|
+
| `body` | `SeoStartAuditRequest` | yes | Request body; fields below. |
|
|
552
|
+
|
|
553
|
+
Body fields (`SeoStartAuditRequest`):
|
|
554
|
+
|
|
555
|
+
| Field | Type | Required | Description |
|
|
556
|
+
|---|---|---|---|
|
|
557
|
+
| `body.domain` | `string` | yes | min length 3, max length 255 |
|
|
558
|
+
| `body.max_pages` | `integer` | no | default `500`, min 10, max 500 |
|
|
559
|
+
|
|
560
|
+
**Returns** `ApiResponse_SeoAudit_`: the envelope `{ data: SeoAudit, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
561
|
+
|
|
562
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
563
|
+
|
|
564
|
+
`SeoAudit` fields:
|
|
565
|
+
|
|
566
|
+
| Field | Type | Required | Description |
|
|
567
|
+
|---|---|---|---|
|
|
568
|
+
| `domain` | `string` | yes | |
|
|
569
|
+
| `id` | `string (uuid)` | yes | |
|
|
570
|
+
| `max_pages` | `integer` | yes | |
|
|
571
|
+
| `state` | `SeoAuditState` | yes | |
|
|
572
|
+
| `status` | `string` | yes | |
|
|
573
|
+
| `completed_at` | `string (date-time) \| null` | no | |
|
|
574
|
+
| `created_at` | `string (date-time) \| null` | no | |
|
|
575
|
+
| `credits_charged` | `integer \| null` | no | |
|
|
576
|
+
| `failure_reason` | `string \| null` | no | |
|
|
577
|
+
| `onpage_score` | `number \| null` | no | |
|
|
578
|
+
| `pages_crawled` | `integer \| null` | no | |
|
|
579
|
+
| `summary_checks` | `Record<string, unknown>` | no | default `{}` |
|
|
580
|
+
|
|
581
|
+
**Example**
|
|
582
|
+
|
|
583
|
+
```ts
|
|
584
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
585
|
+
const result = await g8.api.seo.startSeoAudit({ body: { domain: "acme.com" } });
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
---
|
|
589
|
+
|
|
590
|
+
## Referenced types
|
|
591
|
+
|
|
592
|
+
Named types that appear in the tables above. Full TypeScript definitions: `G8Contract.<Name>` (`import type { G8Contract } from "@graph8/sdk"`).
|
|
593
|
+
|
|
594
|
+
<a id="type-seoauditissue"></a>
|
|
595
|
+
|
|
596
|
+
### `SeoAuditIssue`
|
|
597
|
+
|
|
598
|
+
Mirrors `AuditIssueDTO`.
|
|
599
|
+
|
|
600
|
+
| Field | Type | Required | Description |
|
|
601
|
+
|---|---|---|---|
|
|
602
|
+
| `affected_count` | `integer` | yes | |
|
|
603
|
+
| `issue_type` | `string` | yes | |
|
|
604
|
+
| `severity` | `string` | yes | |
|
|
605
|
+
| `affected_urls` | `Array<Record<string, unknown>>` | no | default `[]` |
|
|
606
|
+
|
|
607
|
+
<a id="type-seoauditstate"></a>
|
|
608
|
+
|
|
609
|
+
### `SeoAuditState`
|
|
610
|
+
|
|
611
|
+
Mirrors `AuditStateDTO` - the plain-language, recovery-oriented view of where an audit is, so a caller can explain the state rather than parse raw provider text.
|
|
612
|
+
|
|
613
|
+
| Field | Type | Required | Description |
|
|
614
|
+
|---|---|---|---|
|
|
615
|
+
| `can_run_again` | `boolean` | yes | Whether to offer a manual 'Run a new audit' action |
|
|
616
|
+
| `category` | `"queued" \| "running" \| "complete" \| "timeout" \| "provider_error" \| "credit_issue" \| "start_error" \| "failed"` | yes | Lifecycle state category driving the plain-language status + recovery UX |
|
|
617
|
+
| `detail` | `string` | yes | Plain-language explanation of what happened |
|
|
618
|
+
| `headline` | `string` | yes | One-line human status |
|
|
619
|
+
| `is_terminal` | `boolean` | yes | No further automatic progress will happen |
|
|
620
|
+
| `label` | `string` | yes | Short status chip label |
|
|
621
|
+
| `recovery` | `string` | yes | Plain-language, safe next step (may be empty) |
|
|
622
|
+
| `diagnostic` | `string \| null` | no | Secondary technical detail (raw provider text) |
|
|
623
|
+
|
|
624
|
+
<a id="type-seokeywordrow"></a>
|
|
625
|
+
|
|
626
|
+
### `SeoKeywordRow`
|
|
627
|
+
|
|
628
|
+
Mirrors `KeywordRow`.
|
|
629
|
+
|
|
630
|
+
| Field | Type | Required | Description |
|
|
631
|
+
|---|---|---|---|
|
|
632
|
+
| `keyword` | `string` | yes | |
|
|
633
|
+
| `competition` | `number` | no | default `0` |
|
|
634
|
+
| `cpc` | `number` | no | default `0` |
|
|
635
|
+
| `intent` | `string \| null` | no | |
|
|
636
|
+
| `keyword_difficulty` | `integer \| null` | no | |
|
|
637
|
+
| `search_volume` | `integer` | no | default `0` |
|
|
638
|
+
|
|
639
|
+
<a id="type-seoranksnapshot"></a>
|
|
640
|
+
|
|
641
|
+
### `SeoRankSnapshot`
|
|
642
|
+
|
|
643
|
+
Mirrors `RankSnapshotDTO`.
|
|
644
|
+
|
|
645
|
+
| Field | Type | Required | Description |
|
|
646
|
+
|---|---|---|---|
|
|
647
|
+
| `snapshot_date` | `string (date)` | yes | |
|
|
648
|
+
| `rank` | `integer \| null` | no | |
|
|
649
|
+
| `serp_url` | `string \| null` | no | |
|
|
650
|
+
|
|
651
|
+
<a id="type-seotrackkeyworditem"></a>
|
|
652
|
+
|
|
653
|
+
### `SeoTrackKeywordItem`
|
|
654
|
+
|
|
655
|
+
Mirrors `TrackKeywordItem`.
|
|
656
|
+
|
|
657
|
+
| Field | Type | Required | Description |
|
|
658
|
+
|---|---|---|---|
|
|
659
|
+
| `keyword` | `string` | yes | min length 1, max length 500 |
|
|
660
|
+
| `search_volume` | `integer \| null` | no | |
|