@nuxtseo/protocol 0.5.4 → 0.5.5

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.
@@ -567,6 +567,37 @@ export declare const keywordResearchQuerySchema: z.ZodObject<{
567
567
  }, z.core.$strict>;
568
568
  declare const keywordResearchDataSchema: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
569
569
  readonly topic: z.ZodString;
570
+ readonly topicMetrics: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
571
+ _tag: z.ZodLiteral<"measured">;
572
+ topic: z.ZodString;
573
+ metrics: z.ZodObject<{
574
+ readonly keyword: z.ZodString;
575
+ readonly volume: z.ZodNullable<z.ZodNumber>;
576
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
577
+ readonly intent: z.ZodNullable<z.ZodString>;
578
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
579
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
580
+ readonly competition: z.ZodNullable<z.ZodNumber>;
581
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
582
+ HIGH: "HIGH";
583
+ LOW: "LOW";
584
+ MEDIUM: "MEDIUM";
585
+ }>>;
586
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
587
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
588
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
589
+ readonly year: z.ZodNumber;
590
+ readonly month: z.ZodNumber;
591
+ readonly volume: z.ZodNumber;
592
+ }, z.core.$strip>>>;
593
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
594
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
595
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
596
+ }, z.core.$strip>;
597
+ }, z.core.$strict>, z.ZodObject<{
598
+ _tag: z.ZodLiteral<"no-data">;
599
+ topic: z.ZodString;
600
+ }, z.core.$strict>], "_tag">>;
570
601
  readonly keywords: z.ZodArray<z.ZodObject<{
571
602
  readonly keyword: z.ZodString;
572
603
  readonly volume: z.ZodNullable<z.ZodNumber>;
@@ -647,6 +678,37 @@ declare const keywordResearchDataSchema: import("./core.js").CompatibleResponseS
647
678
  }, z.core.$strict>], "_tag">;
648
679
  }, z.core.$strip>, z.ZodObject<{
649
680
  readonly topic: z.ZodString;
681
+ readonly topicMetrics: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
682
+ _tag: z.ZodLiteral<"measured">;
683
+ topic: z.ZodString;
684
+ metrics: z.ZodObject<{
685
+ readonly keyword: z.ZodString;
686
+ readonly volume: z.ZodNullable<z.ZodNumber>;
687
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
688
+ readonly intent: z.ZodNullable<z.ZodString>;
689
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
690
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
691
+ readonly competition: z.ZodNullable<z.ZodNumber>;
692
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
693
+ HIGH: "HIGH";
694
+ LOW: "LOW";
695
+ MEDIUM: "MEDIUM";
696
+ }>>;
697
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
698
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
699
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
700
+ readonly year: z.ZodNumber;
701
+ readonly month: z.ZodNumber;
702
+ readonly volume: z.ZodNumber;
703
+ }, z.core.$strip>>>;
704
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
705
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
706
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
707
+ }, z.core.$strip>;
708
+ }, z.core.$loose>, z.ZodObject<{
709
+ _tag: z.ZodLiteral<"no-data">;
710
+ topic: z.ZodString;
711
+ }, z.core.$loose>], "_tag">>;
650
712
  readonly keywords: z.ZodArray<z.ZodObject<{
651
713
  readonly keyword: z.ZodString;
652
714
  readonly volume: z.ZodNullable<z.ZodNumber>;
@@ -729,6 +791,37 @@ declare const keywordResearchDataSchema: import("./core.js").CompatibleResponseS
729
791
  export declare const keywordResearchResponseSchema: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
730
792
  data: z.ZodObject<{
731
793
  readonly topic: z.ZodString;
794
+ readonly topicMetrics: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
795
+ _tag: z.ZodLiteral<"measured">;
796
+ topic: z.ZodString;
797
+ metrics: z.ZodObject<{
798
+ readonly keyword: z.ZodString;
799
+ readonly volume: z.ZodNullable<z.ZodNumber>;
800
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
801
+ readonly intent: z.ZodNullable<z.ZodString>;
802
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
803
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
804
+ readonly competition: z.ZodNullable<z.ZodNumber>;
805
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
806
+ HIGH: "HIGH";
807
+ LOW: "LOW";
808
+ MEDIUM: "MEDIUM";
809
+ }>>;
810
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
811
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
812
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
813
+ readonly year: z.ZodNumber;
814
+ readonly month: z.ZodNumber;
815
+ readonly volume: z.ZodNumber;
816
+ }, z.core.$strip>>>;
817
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
818
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
819
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
820
+ }, z.core.$strip>;
821
+ }, z.core.$strict>, z.ZodObject<{
822
+ _tag: z.ZodLiteral<"no-data">;
823
+ topic: z.ZodString;
824
+ }, z.core.$strict>], "_tag">>;
732
825
  readonly keywords: z.ZodArray<z.ZodObject<{
733
826
  readonly keyword: z.ZodString;
734
827
  readonly volume: z.ZodNullable<z.ZodNumber>;
@@ -815,6 +908,37 @@ export declare const keywordResearchResponseSchema: import("./core.js").Compatib
815
908
  }, z.core.$strip>, z.ZodObject<{
816
909
  data: z.ZodObject<{
817
910
  readonly topic: z.ZodString;
911
+ readonly topicMetrics: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
912
+ _tag: z.ZodLiteral<"measured">;
913
+ topic: z.ZodString;
914
+ metrics: z.ZodObject<{
915
+ readonly keyword: z.ZodString;
916
+ readonly volume: z.ZodNullable<z.ZodNumber>;
917
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
918
+ readonly intent: z.ZodNullable<z.ZodString>;
919
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
920
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
921
+ readonly competition: z.ZodNullable<z.ZodNumber>;
922
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
923
+ HIGH: "HIGH";
924
+ LOW: "LOW";
925
+ MEDIUM: "MEDIUM";
926
+ }>>;
927
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
928
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
929
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
930
+ readonly year: z.ZodNumber;
931
+ readonly month: z.ZodNumber;
932
+ readonly volume: z.ZodNumber;
933
+ }, z.core.$strip>>>;
934
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
935
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
936
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
937
+ }, z.core.$strip>;
938
+ }, z.core.$loose>, z.ZodObject<{
939
+ _tag: z.ZodLiteral<"no-data">;
940
+ topic: z.ZodString;
941
+ }, z.core.$loose>], "_tag">>;
818
942
  readonly keywords: z.ZodArray<z.ZodObject<{
819
943
  readonly keyword: z.ZodString;
820
944
  readonly volume: z.ZodNullable<z.ZodNumber>;
@@ -1556,6 +1680,37 @@ export declare const keywordResearchOperation: {
1556
1680
  readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
1557
1681
  data: z.ZodObject<{
1558
1682
  readonly topic: z.ZodString;
1683
+ readonly topicMetrics: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
1684
+ _tag: z.ZodLiteral<"measured">;
1685
+ topic: z.ZodString;
1686
+ metrics: z.ZodObject<{
1687
+ readonly keyword: z.ZodString;
1688
+ readonly volume: z.ZodNullable<z.ZodNumber>;
1689
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
1690
+ readonly intent: z.ZodNullable<z.ZodString>;
1691
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
1692
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
1693
+ readonly competition: z.ZodNullable<z.ZodNumber>;
1694
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
1695
+ HIGH: "HIGH";
1696
+ LOW: "LOW";
1697
+ MEDIUM: "MEDIUM";
1698
+ }>>;
1699
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
1700
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
1701
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
1702
+ readonly year: z.ZodNumber;
1703
+ readonly month: z.ZodNumber;
1704
+ readonly volume: z.ZodNumber;
1705
+ }, z.core.$strip>>>;
1706
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
1707
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
1708
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
1709
+ }, z.core.$strip>;
1710
+ }, z.core.$strict>, z.ZodObject<{
1711
+ _tag: z.ZodLiteral<"no-data">;
1712
+ topic: z.ZodString;
1713
+ }, z.core.$strict>], "_tag">>;
1559
1714
  readonly keywords: z.ZodArray<z.ZodObject<{
1560
1715
  readonly keyword: z.ZodString;
1561
1716
  readonly volume: z.ZodNullable<z.ZodNumber>;
@@ -1642,6 +1797,37 @@ export declare const keywordResearchOperation: {
1642
1797
  }, z.core.$strip>, z.ZodObject<{
1643
1798
  data: z.ZodObject<{
1644
1799
  readonly topic: z.ZodString;
1800
+ readonly topicMetrics: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
1801
+ _tag: z.ZodLiteral<"measured">;
1802
+ topic: z.ZodString;
1803
+ metrics: z.ZodObject<{
1804
+ readonly keyword: z.ZodString;
1805
+ readonly volume: z.ZodNullable<z.ZodNumber>;
1806
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
1807
+ readonly intent: z.ZodNullable<z.ZodString>;
1808
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
1809
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
1810
+ readonly competition: z.ZodNullable<z.ZodNumber>;
1811
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
1812
+ HIGH: "HIGH";
1813
+ LOW: "LOW";
1814
+ MEDIUM: "MEDIUM";
1815
+ }>>;
1816
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
1817
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
1818
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
1819
+ readonly year: z.ZodNumber;
1820
+ readonly month: z.ZodNumber;
1821
+ readonly volume: z.ZodNumber;
1822
+ }, z.core.$strip>>>;
1823
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
1824
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
1825
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
1826
+ }, z.core.$strip>;
1827
+ }, z.core.$loose>, z.ZodObject<{
1828
+ _tag: z.ZodLiteral<"no-data">;
1829
+ topic: z.ZodString;
1830
+ }, z.core.$loose>], "_tag">>;
1645
1831
  readonly keywords: z.ZodArray<z.ZodObject<{
1646
1832
  readonly keyword: z.ZodString;
1647
1833
  readonly volume: z.ZodNullable<z.ZodNumber>;
@@ -1803,7 +1989,7 @@ export declare const keywordResearchOperation: {
1803
1989
  };
1804
1990
  readonly docs: {
1805
1991
  readonly summary: 'Research keyword ideas';
1806
- readonly description: 'Returns keyword ideas with volume, difficulty, intent, cost data, and explicit provider execution and spend evidence. Local guidance and cached reads consume no units.';
1992
+ readonly description: 'Returns exact metrics for each requested topic alongside filtered keyword ideas. Missing provider data stays explicit. Local guidance and cached reads consume no units.';
1807
1993
  readonly tags: readonly ["Research"];
1808
1994
  readonly examples: readonly [{
1809
1995
  readonly request: {
@@ -1820,6 +2006,10 @@ export declare const keywordResearchOperation: {
1820
2006
  readonly body: {
1821
2007
  readonly data: {
1822
2008
  readonly topic: 'nuxt seo';
2009
+ readonly topicMetrics: readonly [{
2010
+ readonly _tag: 'no-data';
2011
+ readonly topic: 'nuxt seo';
2012
+ }];
1823
2013
  readonly keywords: readonly [];
1824
2014
  readonly totalFound: 0;
1825
2015
  readonly filters: {
@@ -3122,117 +3312,1522 @@ export declare const domainAvailabilityOperation: {
3122
3312
  }];
3123
3313
  };
3124
3314
  };
3125
- export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3126
- readonly overview: {
3127
- readonly id: 'research.overview';
3128
- readonly method: 'GET';
3129
- readonly path: '/api/v1/sites/{siteId}/research';
3130
- readonly visibility: 'public';
3131
- readonly semantics: {
3132
- readonly kind: 'query';
3133
- readonly sideEffects: 'none';
3134
- readonly retry: 'idempotent';
3135
- readonly readConsistency: 'primary';
3136
- };
3137
- readonly auth: {
3138
- readonly credentials: readonly ["session", "api_token"];
3139
- readonly scopes: readonly ["research:read"];
3140
- readonly minimumRole: 'viewer';
3141
- readonly ownership: 'site';
3142
- };
3143
- readonly request: {
3144
- readonly params: z.ZodObject<{
3145
- siteId: z.ZodString;
3315
+ export declare const competitorsListResponseSchema: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
3316
+ data: z.ZodObject<{
3317
+ readonly competitors: z.ZodArray<z.ZodObject<{
3318
+ id: z.ZodString;
3319
+ domain: z.ZodString;
3320
+ }, z.core.$strict>>;
3321
+ }, z.core.$strip>;
3322
+ meta: z.ZodObject<{
3323
+ requestId: z.ZodString;
3324
+ version: z.ZodLiteral<"1.0">;
3325
+ }, z.core.$strict>;
3326
+ }, z.core.$strip>, z.ZodObject<{
3327
+ data: z.ZodObject<{
3328
+ readonly competitors: z.ZodArray<z.ZodObject<{
3329
+ id: z.ZodString;
3330
+ domain: z.ZodString;
3331
+ }, z.core.$strict>>;
3332
+ }, z.core.$strip>;
3333
+ meta: z.ZodObject<{
3334
+ requestId: z.ZodString;
3335
+ version: z.ZodLiteral<"1.0">;
3336
+ }, z.core.$loose>;
3337
+ }, z.core.$strip>>;
3338
+ export declare const competitorAddResponseSchema: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
3339
+ data: z.ZodObject<{
3340
+ readonly competitor: z.ZodObject<{
3341
+ id: z.ZodString;
3342
+ domain: z.ZodString;
3343
+ }, z.core.$strict>;
3344
+ readonly status: z.ZodLiteral<"queued">;
3345
+ }, z.core.$strip>;
3346
+ meta: z.ZodObject<{
3347
+ requestId: z.ZodString;
3348
+ version: z.ZodLiteral<"1.0">;
3349
+ }, z.core.$strict>;
3350
+ }, z.core.$strip>, z.ZodObject<{
3351
+ data: z.ZodObject<{
3352
+ readonly competitor: z.ZodObject<{
3353
+ id: z.ZodString;
3354
+ domain: z.ZodString;
3355
+ }, z.core.$strict>;
3356
+ readonly status: z.ZodLiteral<"queued">;
3357
+ }, z.core.$strip>;
3358
+ meta: z.ZodObject<{
3359
+ requestId: z.ZodString;
3360
+ version: z.ZodLiteral<"1.0">;
3361
+ }, z.core.$loose>;
3362
+ }, z.core.$strip>>;
3363
+ export declare const competitorRemoveResponseSchema: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
3364
+ data: z.ZodObject<{
3365
+ readonly competitorId: z.ZodString;
3366
+ readonly deleted: z.ZodLiteral<true>;
3367
+ }, z.core.$strip>;
3368
+ meta: z.ZodObject<{
3369
+ requestId: z.ZodString;
3370
+ version: z.ZodLiteral<"1.0">;
3371
+ }, z.core.$strict>;
3372
+ }, z.core.$strip>, z.ZodObject<{
3373
+ data: z.ZodObject<{
3374
+ readonly competitorId: z.ZodString;
3375
+ readonly deleted: z.ZodLiteral<true>;
3376
+ }, z.core.$strip>;
3377
+ meta: z.ZodObject<{
3378
+ requestId: z.ZodString;
3379
+ version: z.ZodLiteral<"1.0">;
3380
+ }, z.core.$loose>;
3381
+ }, z.core.$strip>>;
3382
+ export declare const competitorsListOperation: {
3383
+ readonly id: 'research.competitors.list';
3384
+ readonly method: 'GET';
3385
+ readonly path: '/api/v1/sites/{siteId}/research/competitors';
3386
+ readonly visibility: 'public';
3387
+ readonly semantics: {
3388
+ readonly kind: 'query';
3389
+ readonly sideEffects: 'none';
3390
+ readonly retry: 'idempotent';
3391
+ readonly readConsistency: 'primary';
3392
+ };
3393
+ readonly auth: {
3394
+ readonly credentials: readonly ['session', 'api_token'];
3395
+ readonly scopes: readonly ['research:read'];
3396
+ readonly minimumRole: 'viewer';
3397
+ readonly ownership: 'site';
3398
+ };
3399
+ readonly request: {
3400
+ readonly params: z.ZodObject<{
3401
+ siteId: z.ZodString;
3402
+ }, z.core.$strict>;
3403
+ readonly query: null;
3404
+ readonly headers: null;
3405
+ readonly body: null;
3406
+ };
3407
+ readonly responses: {
3408
+ readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
3409
+ data: z.ZodObject<{
3410
+ readonly competitors: z.ZodArray<z.ZodObject<{
3411
+ id: z.ZodString;
3412
+ domain: z.ZodString;
3413
+ }, z.core.$strict>>;
3414
+ }, z.core.$strip>;
3415
+ meta: z.ZodObject<{
3416
+ requestId: z.ZodString;
3417
+ version: z.ZodLiteral<"1.0">;
3146
3418
  }, z.core.$strict>;
3147
- readonly query: null;
3148
- readonly headers: null;
3149
- readonly body: null;
3150
- };
3151
- readonly responses: {
3152
- readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
3153
- data: z.ZodObject<{
3154
- readonly evidence: z.ZodObject<{
3155
- _tag: z.ZodLiteral<"stored">;
3156
- provider: z.ZodLiteral<"dataforseo">;
3157
- collectedAt: z.ZodNullable<z.ZodString>;
3158
- }, z.core.$strict>;
3159
- readonly summary: z.ZodObject<{
3160
- competitorCount: z.ZodNumber;
3161
- quickWins: z.ZodNumber;
3162
- totalSharedKeywords: z.ZodNumber;
3163
- totalTrafficValue: z.ZodNumber;
3164
- }, z.core.$strict>;
3165
- readonly subject: z.ZodNullable<z.ZodObject<{
3166
- readonly domain: z.ZodString;
3167
- readonly metrics: z.ZodObject<{
3168
- readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
3169
- readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
3170
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
3171
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
3172
- }, z.core.$strip>;
3173
- readonly history: z.ZodArray<z.ZodObject<{
3174
- readonly observedAt: z.ZodNullable<z.ZodString>;
3175
- readonly metrics: z.ZodObject<{
3176
- readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
3177
- readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
3178
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
3179
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
3180
- }, z.core.$strip>;
3181
- }, z.core.$strip>>;
3182
- readonly collectedAt: z.ZodNullable<z.ZodString>;
3419
+ }, z.core.$strip>, z.ZodObject<{
3420
+ data: z.ZodObject<{
3421
+ readonly competitors: z.ZodArray<z.ZodObject<{
3422
+ id: z.ZodString;
3423
+ domain: z.ZodString;
3424
+ }, z.core.$strict>>;
3425
+ }, z.core.$strip>;
3426
+ meta: z.ZodObject<{
3427
+ requestId: z.ZodString;
3428
+ version: z.ZodLiteral<"1.0">;
3429
+ }, z.core.$loose>;
3430
+ }, z.core.$strip>>;
3431
+ };
3432
+ readonly errors: readonly ["invalid_request", "unauthorized", "auth_expired", "forbidden", "not_found", "entitlement_required", "quota_exhausted", "provider_unavailable", "conflict", "rate_limited", "contract_violation", "internal_error"];
3433
+ readonly errorResponse: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
3434
+ readonly error: z.ZodObject<{
3435
+ code: z.ZodEnum<{
3436
+ auth_expired: "auth_expired";
3437
+ conflict: "conflict";
3438
+ contract_violation: "contract_violation";
3439
+ entitlement_required: "entitlement_required";
3440
+ forbidden: "forbidden";
3441
+ internal_error: "internal_error";
3442
+ invalid_request: "invalid_request";
3443
+ not_found: "not_found";
3444
+ provider_unavailable: "provider_unavailable";
3445
+ quota_exhausted: "quota_exhausted";
3446
+ rate_limited: "rate_limited";
3447
+ site_ambiguous: "site_ambiguous";
3448
+ stale_evidence: "stale_evidence";
3449
+ unauthorized: "unauthorized";
3450
+ }>;
3451
+ message: z.ZodString;
3452
+ requestId: z.ZodString;
3453
+ retryable: z.ZodBoolean;
3454
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
3455
+ }, z.core.$strict>;
3456
+ }, z.core.$strip>, z.ZodObject<{
3457
+ readonly error: z.ZodObject<{
3458
+ code: z.ZodEnum<{
3459
+ auth_expired: "auth_expired";
3460
+ conflict: "conflict";
3461
+ contract_violation: "contract_violation";
3462
+ entitlement_required: "entitlement_required";
3463
+ forbidden: "forbidden";
3464
+ internal_error: "internal_error";
3465
+ invalid_request: "invalid_request";
3466
+ not_found: "not_found";
3467
+ provider_unavailable: "provider_unavailable";
3468
+ quota_exhausted: "quota_exhausted";
3469
+ rate_limited: "rate_limited";
3470
+ site_ambiguous: "site_ambiguous";
3471
+ stale_evidence: "stale_evidence";
3472
+ unauthorized: "unauthorized";
3473
+ }>;
3474
+ message: z.ZodString;
3475
+ requestId: z.ZodString;
3476
+ retryable: z.ZodBoolean;
3477
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
3478
+ }, z.core.$loose>;
3479
+ }, z.core.$strip>>;
3480
+ readonly resources: {
3481
+ readonly reads: readonly [{
3482
+ readonly type: 'site.research';
3483
+ readonly idFrom: 'params.siteId';
3484
+ }];
3485
+ readonly changes: readonly [];
3486
+ };
3487
+ readonly policy: {
3488
+ readonly rate: {
3489
+ readonly name: 'public-v1-fixed-window';
3490
+ readonly limit: 50;
3491
+ readonly windowSeconds: 60;
3492
+ };
3493
+ readonly idempotency: {
3494
+ readonly _tag: 'none';
3495
+ };
3496
+ readonly entitlement: null;
3497
+ readonly meter: null;
3498
+ };
3499
+ readonly lifecycle: {
3500
+ readonly introduced: '1.2.0';
3501
+ };
3502
+ readonly docs: {
3503
+ readonly summary: 'List tracked competitors';
3504
+ readonly description: 'Returns competitors you added to this Site. Suggested competitors stay excluded. Reads start no provider work.';
3505
+ readonly tags: readonly ["Research"];
3506
+ readonly examples: readonly [{
3507
+ readonly request: {
3508
+ readonly params: {
3509
+ readonly siteId: 's_example';
3510
+ };
3511
+ };
3512
+ readonly response: {
3513
+ readonly status: 200;
3514
+ readonly body: {
3515
+ readonly data: {
3516
+ readonly competitors: readonly [{
3517
+ readonly id: 'c_example';
3518
+ readonly domain: 'rival.com';
3519
+ }];
3520
+ };
3521
+ readonly meta: {
3522
+ readonly requestId: 'req_example';
3523
+ readonly version: '1.0';
3524
+ };
3525
+ };
3526
+ };
3527
+ }];
3528
+ };
3529
+ };
3530
+ export declare const competitorAddOperation: {
3531
+ readonly id: 'research.competitors.add';
3532
+ readonly method: 'POST';
3533
+ readonly path: '/api/v1/sites/{siteId}/research/competitors';
3534
+ readonly visibility: 'public';
3535
+ readonly semantics: {
3536
+ readonly kind: 'mutation';
3537
+ readonly sideEffects: 'state';
3538
+ readonly retry: 'never';
3539
+ readonly readConsistency: null;
3540
+ };
3541
+ readonly auth: {
3542
+ readonly credentials: readonly ['session', 'api_token'];
3543
+ readonly scopes: readonly ['research:write'];
3544
+ readonly minimumRole: 'member';
3545
+ readonly ownership: 'site';
3546
+ };
3547
+ readonly request: {
3548
+ readonly params: z.ZodObject<{
3549
+ siteId: z.ZodString;
3550
+ }, z.core.$strict>;
3551
+ readonly query: null;
3552
+ readonly headers: null;
3553
+ readonly body: z.ZodObject<{
3554
+ domain: z.ZodString;
3555
+ }, z.core.$strict>;
3556
+ };
3557
+ readonly responses: {
3558
+ readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
3559
+ data: z.ZodObject<{
3560
+ readonly competitor: z.ZodObject<{
3561
+ id: z.ZodString;
3562
+ domain: z.ZodString;
3563
+ }, z.core.$strict>;
3564
+ readonly status: z.ZodLiteral<"queued">;
3565
+ }, z.core.$strip>;
3566
+ meta: z.ZodObject<{
3567
+ requestId: z.ZodString;
3568
+ version: z.ZodLiteral<"1.0">;
3569
+ }, z.core.$strict>;
3570
+ }, z.core.$strip>, z.ZodObject<{
3571
+ data: z.ZodObject<{
3572
+ readonly competitor: z.ZodObject<{
3573
+ id: z.ZodString;
3574
+ domain: z.ZodString;
3575
+ }, z.core.$strict>;
3576
+ readonly status: z.ZodLiteral<"queued">;
3577
+ }, z.core.$strip>;
3578
+ meta: z.ZodObject<{
3579
+ requestId: z.ZodString;
3580
+ version: z.ZodLiteral<"1.0">;
3581
+ }, z.core.$loose>;
3582
+ }, z.core.$strip>>;
3583
+ };
3584
+ readonly errors: readonly ["invalid_request", "unauthorized", "auth_expired", "forbidden", "not_found", "entitlement_required", "quota_exhausted", "provider_unavailable", "conflict", "rate_limited", "contract_violation", "internal_error"];
3585
+ readonly errorResponse: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
3586
+ readonly error: z.ZodObject<{
3587
+ code: z.ZodEnum<{
3588
+ auth_expired: "auth_expired";
3589
+ conflict: "conflict";
3590
+ contract_violation: "contract_violation";
3591
+ entitlement_required: "entitlement_required";
3592
+ forbidden: "forbidden";
3593
+ internal_error: "internal_error";
3594
+ invalid_request: "invalid_request";
3595
+ not_found: "not_found";
3596
+ provider_unavailable: "provider_unavailable";
3597
+ quota_exhausted: "quota_exhausted";
3598
+ rate_limited: "rate_limited";
3599
+ site_ambiguous: "site_ambiguous";
3600
+ stale_evidence: "stale_evidence";
3601
+ unauthorized: "unauthorized";
3602
+ }>;
3603
+ message: z.ZodString;
3604
+ requestId: z.ZodString;
3605
+ retryable: z.ZodBoolean;
3606
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
3607
+ }, z.core.$strict>;
3608
+ }, z.core.$strip>, z.ZodObject<{
3609
+ readonly error: z.ZodObject<{
3610
+ code: z.ZodEnum<{
3611
+ auth_expired: "auth_expired";
3612
+ conflict: "conflict";
3613
+ contract_violation: "contract_violation";
3614
+ entitlement_required: "entitlement_required";
3615
+ forbidden: "forbidden";
3616
+ internal_error: "internal_error";
3617
+ invalid_request: "invalid_request";
3618
+ not_found: "not_found";
3619
+ provider_unavailable: "provider_unavailable";
3620
+ quota_exhausted: "quota_exhausted";
3621
+ rate_limited: "rate_limited";
3622
+ site_ambiguous: "site_ambiguous";
3623
+ stale_evidence: "stale_evidence";
3624
+ unauthorized: "unauthorized";
3625
+ }>;
3626
+ message: z.ZodString;
3627
+ requestId: z.ZodString;
3628
+ retryable: z.ZodBoolean;
3629
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
3630
+ }, z.core.$loose>;
3631
+ }, z.core.$strip>>;
3632
+ readonly resources: {
3633
+ readonly reads: readonly [{
3634
+ readonly type: 'site.research';
3635
+ readonly idFrom: 'params.siteId';
3636
+ }];
3637
+ readonly changes: readonly [{
3638
+ readonly type: 'site.research';
3639
+ readonly idFrom: 'params.siteId';
3640
+ }];
3641
+ };
3642
+ readonly policy: {
3643
+ readonly rate: {
3644
+ readonly name: 'public-v1-fixed-window';
3645
+ readonly limit: 50;
3646
+ readonly windowSeconds: 60;
3647
+ };
3648
+ readonly idempotency: {
3649
+ readonly _tag: 'none';
3650
+ };
3651
+ readonly entitlement: 'growth';
3652
+ readonly meter: {
3653
+ readonly key: 'dataforseo';
3654
+ readonly units: 1;
3655
+ readonly charge: 'always';
3656
+ };
3657
+ };
3658
+ readonly lifecycle: {
3659
+ readonly introduced: '1.2.0';
3660
+ };
3661
+ readonly docs: {
3662
+ readonly summary: 'Add one tracked competitor';
3663
+ readonly description: 'Queues analysis for one public domain you name. The existing Site and Team limits apply. Duplicate domains start no work.';
3664
+ readonly tags: readonly ["Research"];
3665
+ readonly examples: readonly [{
3666
+ readonly request: {
3667
+ readonly params: {
3668
+ readonly siteId: 's_example';
3669
+ };
3670
+ readonly body: {
3671
+ readonly domain: 'rival.com';
3672
+ };
3673
+ };
3674
+ readonly response: {
3675
+ readonly status: 200;
3676
+ readonly body: {
3677
+ readonly data: {
3678
+ readonly competitor: {
3679
+ readonly id: 'c_example';
3680
+ readonly domain: 'rival.com';
3681
+ };
3682
+ readonly status: 'queued';
3683
+ };
3684
+ readonly meta: {
3685
+ readonly requestId: 'req_example';
3686
+ readonly version: '1.0';
3687
+ };
3688
+ };
3689
+ };
3690
+ }];
3691
+ };
3692
+ };
3693
+ export declare const competitorRemoveOperation: {
3694
+ readonly id: 'research.competitors.remove';
3695
+ readonly method: 'DELETE';
3696
+ readonly path: '/api/v1/sites/{siteId}/research/competitors/{competitorId}';
3697
+ readonly visibility: 'public';
3698
+ readonly semantics: {
3699
+ readonly kind: 'mutation';
3700
+ readonly sideEffects: 'state';
3701
+ readonly retry: 'never';
3702
+ readonly readConsistency: null;
3703
+ };
3704
+ readonly auth: {
3705
+ readonly credentials: readonly ['session', 'api_token'];
3706
+ readonly scopes: readonly ['research:write'];
3707
+ readonly minimumRole: 'member';
3708
+ readonly ownership: 'site';
3709
+ };
3710
+ readonly request: {
3711
+ readonly params: z.ZodObject<{
3712
+ siteId: z.ZodString;
3713
+ competitorId: z.ZodString;
3714
+ }, z.core.$strict>;
3715
+ readonly query: null;
3716
+ readonly headers: null;
3717
+ readonly body: null;
3718
+ };
3719
+ readonly responses: {
3720
+ readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
3721
+ data: z.ZodObject<{
3722
+ readonly competitorId: z.ZodString;
3723
+ readonly deleted: z.ZodLiteral<true>;
3724
+ }, z.core.$strip>;
3725
+ meta: z.ZodObject<{
3726
+ requestId: z.ZodString;
3727
+ version: z.ZodLiteral<"1.0">;
3728
+ }, z.core.$strict>;
3729
+ }, z.core.$strip>, z.ZodObject<{
3730
+ data: z.ZodObject<{
3731
+ readonly competitorId: z.ZodString;
3732
+ readonly deleted: z.ZodLiteral<true>;
3733
+ }, z.core.$strip>;
3734
+ meta: z.ZodObject<{
3735
+ requestId: z.ZodString;
3736
+ version: z.ZodLiteral<"1.0">;
3737
+ }, z.core.$loose>;
3738
+ }, z.core.$strip>>;
3739
+ };
3740
+ readonly errors: readonly ["invalid_request", "unauthorized", "auth_expired", "forbidden", "not_found", "entitlement_required", "quota_exhausted", "provider_unavailable", "conflict", "rate_limited", "contract_violation", "internal_error"];
3741
+ readonly errorResponse: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
3742
+ readonly error: z.ZodObject<{
3743
+ code: z.ZodEnum<{
3744
+ auth_expired: "auth_expired";
3745
+ conflict: "conflict";
3746
+ contract_violation: "contract_violation";
3747
+ entitlement_required: "entitlement_required";
3748
+ forbidden: "forbidden";
3749
+ internal_error: "internal_error";
3750
+ invalid_request: "invalid_request";
3751
+ not_found: "not_found";
3752
+ provider_unavailable: "provider_unavailable";
3753
+ quota_exhausted: "quota_exhausted";
3754
+ rate_limited: "rate_limited";
3755
+ site_ambiguous: "site_ambiguous";
3756
+ stale_evidence: "stale_evidence";
3757
+ unauthorized: "unauthorized";
3758
+ }>;
3759
+ message: z.ZodString;
3760
+ requestId: z.ZodString;
3761
+ retryable: z.ZodBoolean;
3762
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
3763
+ }, z.core.$strict>;
3764
+ }, z.core.$strip>, z.ZodObject<{
3765
+ readonly error: z.ZodObject<{
3766
+ code: z.ZodEnum<{
3767
+ auth_expired: "auth_expired";
3768
+ conflict: "conflict";
3769
+ contract_violation: "contract_violation";
3770
+ entitlement_required: "entitlement_required";
3771
+ forbidden: "forbidden";
3772
+ internal_error: "internal_error";
3773
+ invalid_request: "invalid_request";
3774
+ not_found: "not_found";
3775
+ provider_unavailable: "provider_unavailable";
3776
+ quota_exhausted: "quota_exhausted";
3777
+ rate_limited: "rate_limited";
3778
+ site_ambiguous: "site_ambiguous";
3779
+ stale_evidence: "stale_evidence";
3780
+ unauthorized: "unauthorized";
3781
+ }>;
3782
+ message: z.ZodString;
3783
+ requestId: z.ZodString;
3784
+ retryable: z.ZodBoolean;
3785
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
3786
+ }, z.core.$loose>;
3787
+ }, z.core.$strip>>;
3788
+ readonly resources: {
3789
+ readonly reads: readonly [{
3790
+ readonly type: 'site.research';
3791
+ readonly idFrom: 'params.siteId';
3792
+ }];
3793
+ readonly changes: readonly [{
3794
+ readonly type: 'site.research';
3795
+ readonly idFrom: 'params.siteId';
3796
+ }];
3797
+ };
3798
+ readonly policy: {
3799
+ readonly rate: {
3800
+ readonly name: 'public-v1-fixed-window';
3801
+ readonly limit: 50;
3802
+ readonly windowSeconds: 60;
3803
+ };
3804
+ readonly idempotency: {
3805
+ readonly _tag: 'none';
3806
+ };
3807
+ readonly entitlement: null;
3808
+ readonly meter: null;
3809
+ };
3810
+ readonly lifecycle: {
3811
+ readonly introduced: '1.2.0';
3812
+ };
3813
+ readonly docs: {
3814
+ readonly summary: 'Remove one tracked competitor';
3815
+ readonly description: 'Removes a competitor from this Site using its listed id. Removal starts no provider work.';
3816
+ readonly tags: readonly ["Research"];
3817
+ readonly examples: readonly [{
3818
+ readonly request: {
3819
+ readonly params: {
3820
+ readonly siteId: 's_example';
3821
+ readonly competitorId: 'c_example';
3822
+ };
3823
+ };
3824
+ readonly response: {
3825
+ readonly status: 200;
3826
+ readonly body: {
3827
+ readonly data: {
3828
+ readonly competitorId: 'c_example';
3829
+ readonly deleted: true;
3830
+ };
3831
+ readonly meta: {
3832
+ readonly requestId: 'req_example';
3833
+ readonly version: '1.0';
3834
+ };
3835
+ };
3836
+ };
3837
+ }];
3838
+ };
3839
+ };
3840
+ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3841
+ readonly overview: {
3842
+ readonly id: 'research.overview';
3843
+ readonly method: 'GET';
3844
+ readonly path: '/api/v1/sites/{siteId}/research';
3845
+ readonly visibility: 'public';
3846
+ readonly semantics: {
3847
+ readonly kind: 'query';
3848
+ readonly sideEffects: 'none';
3849
+ readonly retry: 'idempotent';
3850
+ readonly readConsistency: 'primary';
3851
+ };
3852
+ readonly auth: {
3853
+ readonly credentials: readonly ["session", "api_token"];
3854
+ readonly scopes: readonly ["research:read"];
3855
+ readonly minimumRole: 'viewer';
3856
+ readonly ownership: 'site';
3857
+ };
3858
+ readonly request: {
3859
+ readonly params: z.ZodObject<{
3860
+ siteId: z.ZodString;
3861
+ }, z.core.$strict>;
3862
+ readonly query: null;
3863
+ readonly headers: null;
3864
+ readonly body: null;
3865
+ };
3866
+ readonly responses: {
3867
+ readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
3868
+ data: z.ZodObject<{
3869
+ readonly evidence: z.ZodObject<{
3870
+ _tag: z.ZodLiteral<"stored">;
3871
+ provider: z.ZodLiteral<"dataforseo">;
3872
+ collectedAt: z.ZodNullable<z.ZodString>;
3873
+ }, z.core.$strict>;
3874
+ readonly summary: z.ZodObject<{
3875
+ competitorCount: z.ZodNumber;
3876
+ quickWins: z.ZodNumber;
3877
+ totalSharedKeywords: z.ZodNumber;
3878
+ totalTrafficValue: z.ZodNumber;
3879
+ }, z.core.$strict>;
3880
+ readonly subject: z.ZodNullable<z.ZodObject<{
3881
+ readonly domain: z.ZodString;
3882
+ readonly metrics: z.ZodObject<{
3883
+ readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
3884
+ readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
3885
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
3886
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
3887
+ }, z.core.$strip>;
3888
+ readonly history: z.ZodArray<z.ZodObject<{
3889
+ readonly observedAt: z.ZodNullable<z.ZodString>;
3890
+ readonly metrics: z.ZodObject<{
3891
+ readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
3892
+ readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
3893
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
3894
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
3895
+ }, z.core.$strip>;
3896
+ }, z.core.$strip>>;
3897
+ readonly collectedAt: z.ZodNullable<z.ZodString>;
3898
+ }, z.core.$strip>>;
3899
+ readonly competitors: z.ZodArray<z.ZodObject<{
3900
+ readonly domain: z.ZodString;
3901
+ readonly discovery: z.ZodEnum<{
3902
+ automatic: "automatic";
3903
+ manual: "manual";
3904
+ unknown: "unknown";
3905
+ }>;
3906
+ readonly metrics: z.ZodObject<{
3907
+ readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
3908
+ readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
3909
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
3910
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
3911
+ }, z.core.$strip>;
3912
+ readonly topKeywords: z.ZodArray<z.ZodObject<{
3913
+ readonly keyword: z.ZodString;
3914
+ readonly position: z.ZodNullable<z.ZodNumber>;
3915
+ readonly volume: z.ZodNullable<z.ZodNumber>;
3916
+ readonly traffic: z.ZodNullable<z.ZodNumber>;
3917
+ readonly url: z.ZodNullable<z.ZodString>;
3918
+ readonly intent: z.ZodNullable<z.ZodString>;
3919
+ }, z.core.$strip>>;
3920
+ readonly sharedKeywords: z.ZodArray<z.ZodObject<{
3921
+ readonly keyword: z.ZodString;
3922
+ readonly yourPosition: z.ZodNumber;
3923
+ readonly theirPosition: z.ZodNumber;
3924
+ readonly volume: z.ZodNumber;
3925
+ }, z.core.$strip>>;
3926
+ readonly keywordGaps: z.ZodArray<z.ZodObject<{
3927
+ readonly keyword: z.ZodString;
3928
+ readonly position: z.ZodNullable<z.ZodNumber>;
3929
+ readonly volume: z.ZodNullable<z.ZodNumber>;
3930
+ readonly traffic: z.ZodNullable<z.ZodNumber>;
3931
+ readonly url: z.ZodNullable<z.ZodString>;
3932
+ readonly intent: z.ZodNullable<z.ZodString>;
3933
+ }, z.core.$strip>>;
3934
+ readonly quickWins: z.ZodArray<z.ZodObject<{
3935
+ readonly keyword: z.ZodString;
3936
+ readonly yourPosition: z.ZodNumber;
3937
+ readonly theirPosition: z.ZodNumber;
3938
+ readonly volume: z.ZodNumber;
3939
+ }, z.core.$strip>>;
3940
+ readonly history: z.ZodArray<z.ZodObject<{
3941
+ readonly observedAt: z.ZodNullable<z.ZodString>;
3942
+ readonly metrics: z.ZodObject<{
3943
+ readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
3944
+ readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
3945
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
3946
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
3947
+ }, z.core.$strip>;
3948
+ }, z.core.$strip>>;
3949
+ readonly collectedAt: z.ZodNullable<z.ZodString>;
3950
+ }, z.core.$strip>>;
3951
+ }, z.core.$strip>;
3952
+ meta: z.ZodObject<{
3953
+ requestId: z.ZodString;
3954
+ version: z.ZodLiteral<"1.0">;
3955
+ }, z.core.$strict>;
3956
+ }, z.core.$strip>, z.ZodObject<{
3957
+ data: z.ZodObject<{
3958
+ readonly evidence: z.ZodObject<{
3959
+ _tag: z.ZodLiteral<"stored">;
3960
+ provider: z.ZodLiteral<"dataforseo">;
3961
+ collectedAt: z.ZodNullable<z.ZodString>;
3962
+ }, z.core.$loose>;
3963
+ readonly summary: z.ZodObject<{
3964
+ competitorCount: z.ZodNumber;
3965
+ quickWins: z.ZodNumber;
3966
+ totalSharedKeywords: z.ZodNumber;
3967
+ totalTrafficValue: z.ZodNumber;
3968
+ }, z.core.$loose>;
3969
+ readonly subject: z.ZodNullable<z.ZodObject<{
3970
+ readonly domain: z.ZodString;
3971
+ readonly metrics: z.ZodObject<{
3972
+ readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
3973
+ readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
3974
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
3975
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
3976
+ }, z.core.$strip>;
3977
+ readonly history: z.ZodArray<z.ZodObject<{
3978
+ readonly observedAt: z.ZodNullable<z.ZodString>;
3979
+ readonly metrics: z.ZodObject<{
3980
+ readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
3981
+ readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
3982
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
3983
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
3984
+ }, z.core.$strip>;
3985
+ }, z.core.$strip>>;
3986
+ readonly collectedAt: z.ZodNullable<z.ZodString>;
3987
+ }, z.core.$strip>>;
3988
+ readonly competitors: z.ZodArray<z.ZodObject<{
3989
+ readonly domain: z.ZodString;
3990
+ readonly discovery: z.ZodEnum<{
3991
+ automatic: "automatic";
3992
+ manual: "manual";
3993
+ unknown: "unknown";
3994
+ }>;
3995
+ readonly metrics: z.ZodObject<{
3996
+ readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
3997
+ readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
3998
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
3999
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
4000
+ }, z.core.$strip>;
4001
+ readonly topKeywords: z.ZodArray<z.ZodObject<{
4002
+ readonly keyword: z.ZodString;
4003
+ readonly position: z.ZodNullable<z.ZodNumber>;
4004
+ readonly volume: z.ZodNullable<z.ZodNumber>;
4005
+ readonly traffic: z.ZodNullable<z.ZodNumber>;
4006
+ readonly url: z.ZodNullable<z.ZodString>;
4007
+ readonly intent: z.ZodNullable<z.ZodString>;
4008
+ }, z.core.$strip>>;
4009
+ readonly sharedKeywords: z.ZodArray<z.ZodObject<{
4010
+ readonly keyword: z.ZodString;
4011
+ readonly yourPosition: z.ZodNumber;
4012
+ readonly theirPosition: z.ZodNumber;
4013
+ readonly volume: z.ZodNumber;
4014
+ }, z.core.$strip>>;
4015
+ readonly keywordGaps: z.ZodArray<z.ZodObject<{
4016
+ readonly keyword: z.ZodString;
4017
+ readonly position: z.ZodNullable<z.ZodNumber>;
4018
+ readonly volume: z.ZodNullable<z.ZodNumber>;
4019
+ readonly traffic: z.ZodNullable<z.ZodNumber>;
4020
+ readonly url: z.ZodNullable<z.ZodString>;
4021
+ readonly intent: z.ZodNullable<z.ZodString>;
4022
+ }, z.core.$strip>>;
4023
+ readonly quickWins: z.ZodArray<z.ZodObject<{
4024
+ readonly keyword: z.ZodString;
4025
+ readonly yourPosition: z.ZodNumber;
4026
+ readonly theirPosition: z.ZodNumber;
4027
+ readonly volume: z.ZodNumber;
4028
+ }, z.core.$strip>>;
4029
+ readonly history: z.ZodArray<z.ZodObject<{
4030
+ readonly observedAt: z.ZodNullable<z.ZodString>;
4031
+ readonly metrics: z.ZodObject<{
4032
+ readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
4033
+ readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
4034
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
4035
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
4036
+ }, z.core.$strip>;
4037
+ }, z.core.$strip>>;
4038
+ readonly collectedAt: z.ZodNullable<z.ZodString>;
4039
+ }, z.core.$strip>>;
4040
+ }, z.core.$strip>;
4041
+ meta: z.ZodObject<{
4042
+ requestId: z.ZodString;
4043
+ version: z.ZodLiteral<"1.0">;
4044
+ }, z.core.$loose>;
4045
+ }, z.core.$strip>>;
4046
+ };
4047
+ readonly errors: readonly ["invalid_request", "unauthorized", "auth_expired", "forbidden", "not_found", "conflict", "rate_limited", "contract_violation", "internal_error"];
4048
+ readonly errorResponse: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
4049
+ readonly error: z.ZodObject<{
4050
+ code: z.ZodEnum<{
4051
+ auth_expired: "auth_expired";
4052
+ conflict: "conflict";
4053
+ contract_violation: "contract_violation";
4054
+ entitlement_required: "entitlement_required";
4055
+ forbidden: "forbidden";
4056
+ internal_error: "internal_error";
4057
+ invalid_request: "invalid_request";
4058
+ not_found: "not_found";
4059
+ provider_unavailable: "provider_unavailable";
4060
+ quota_exhausted: "quota_exhausted";
4061
+ rate_limited: "rate_limited";
4062
+ site_ambiguous: "site_ambiguous";
4063
+ stale_evidence: "stale_evidence";
4064
+ unauthorized: "unauthorized";
4065
+ }>;
4066
+ message: z.ZodString;
4067
+ requestId: z.ZodString;
4068
+ retryable: z.ZodBoolean;
4069
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
4070
+ }, z.core.$strict>;
4071
+ }, z.core.$strip>, z.ZodObject<{
4072
+ readonly error: z.ZodObject<{
4073
+ code: z.ZodEnum<{
4074
+ auth_expired: "auth_expired";
4075
+ conflict: "conflict";
4076
+ contract_violation: "contract_violation";
4077
+ entitlement_required: "entitlement_required";
4078
+ forbidden: "forbidden";
4079
+ internal_error: "internal_error";
4080
+ invalid_request: "invalid_request";
4081
+ not_found: "not_found";
4082
+ provider_unavailable: "provider_unavailable";
4083
+ quota_exhausted: "quota_exhausted";
4084
+ rate_limited: "rate_limited";
4085
+ site_ambiguous: "site_ambiguous";
4086
+ stale_evidence: "stale_evidence";
4087
+ unauthorized: "unauthorized";
4088
+ }>;
4089
+ message: z.ZodString;
4090
+ requestId: z.ZodString;
4091
+ retryable: z.ZodBoolean;
4092
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
4093
+ }, z.core.$loose>;
4094
+ }, z.core.$strip>>;
4095
+ readonly resources: {
4096
+ readonly reads: readonly [{
4097
+ readonly type: 'site.research';
4098
+ readonly idFrom: 'params.siteId';
4099
+ }];
4100
+ readonly changes: readonly [];
4101
+ };
4102
+ readonly policy: {
4103
+ readonly rate: {
4104
+ readonly name: 'public-v1-fixed-window';
4105
+ readonly limit: 50;
4106
+ readonly windowSeconds: 60;
4107
+ };
4108
+ readonly idempotency: {
4109
+ readonly _tag: 'none';
4110
+ };
4111
+ readonly entitlement: null;
4112
+ readonly meter: null;
4113
+ };
4114
+ readonly lifecycle: {
4115
+ readonly introduced: '1.0.0';
4116
+ };
4117
+ readonly docs: {
4118
+ readonly summary: 'Get stored Site Research';
4119
+ readonly description: 'Returns retained competitor and keyword-gap evidence already collected for the Site. It never starts provider work and does not consume metered units.';
4120
+ readonly tags: readonly ["Research"];
4121
+ readonly examples: readonly [{
4122
+ readonly request: {
4123
+ readonly params: {
4124
+ readonly siteId: 'site_01JXYZ';
4125
+ };
4126
+ };
4127
+ readonly response: {
4128
+ readonly status: 200;
4129
+ readonly body: {
4130
+ readonly data: {
4131
+ readonly evidence: {
4132
+ readonly _tag: 'stored';
4133
+ readonly provider: 'dataforseo';
4134
+ readonly collectedAt: null;
4135
+ };
4136
+ readonly summary: {
4137
+ readonly competitorCount: 0;
4138
+ readonly quickWins: 0;
4139
+ readonly totalSharedKeywords: 0;
4140
+ readonly totalTrafficValue: 0;
4141
+ };
4142
+ readonly subject: null;
4143
+ readonly competitors: readonly [];
4144
+ };
4145
+ readonly meta: {
4146
+ readonly requestId: 'req_01JXYZ';
4147
+ readonly version: '1.0';
4148
+ };
4149
+ };
4150
+ };
4151
+ }];
4152
+ };
4153
+ };
4154
+ readonly keywords: {
4155
+ readonly id: 'research.keywords';
4156
+ readonly method: 'GET';
4157
+ readonly path: '/api/v1/sites/{siteId}/research/keywords';
4158
+ readonly visibility: 'public';
4159
+ readonly semantics: {
4160
+ readonly kind: 'query';
4161
+ readonly sideEffects: 'none';
4162
+ readonly retry: 'idempotent';
4163
+ readonly readConsistency: 'primary';
4164
+ };
4165
+ readonly auth: {
4166
+ readonly credentials: readonly ['session', 'api_token'];
4167
+ readonly scopes: readonly ['research:read'];
4168
+ readonly minimumRole: 'viewer';
4169
+ readonly ownership: 'site';
4170
+ };
4171
+ readonly request: {
4172
+ readonly params: z.ZodObject<{
4173
+ siteId: z.ZodString;
4174
+ }, z.core.$strict>;
4175
+ readonly query: z.ZodObject<{
4176
+ topic: z.ZodString;
4177
+ minVolume: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
4178
+ maxVolume: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
4179
+ minDifficulty: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
4180
+ maxDifficulty: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
4181
+ intent: z.ZodOptional<z.ZodString>;
4182
+ includeRelated: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
4183
+ 0: "0";
4184
+ 1: "1";
4185
+ false: "false";
4186
+ true: "true";
4187
+ }>]>, z.ZodTransform<boolean, "0" | "1" | "false" | "true" | boolean>>>;
4188
+ verbose: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
4189
+ 0: "0";
4190
+ 1: "1";
4191
+ false: "false";
4192
+ true: "true";
4193
+ }>]>, z.ZodTransform<boolean, "0" | "1" | "false" | "true" | boolean>>>;
4194
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
4195
+ locationCode: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
4196
+ }, z.core.$strict>;
4197
+ readonly headers: null;
4198
+ readonly body: null;
4199
+ };
4200
+ readonly responses: {
4201
+ readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
4202
+ data: z.ZodObject<{
4203
+ readonly topic: z.ZodString;
4204
+ readonly topicMetrics: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
4205
+ _tag: z.ZodLiteral<"measured">;
4206
+ topic: z.ZodString;
4207
+ metrics: z.ZodObject<{
4208
+ readonly keyword: z.ZodString;
4209
+ readonly volume: z.ZodNullable<z.ZodNumber>;
4210
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
4211
+ readonly intent: z.ZodNullable<z.ZodString>;
4212
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
4213
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
4214
+ readonly competition: z.ZodNullable<z.ZodNumber>;
4215
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
4216
+ HIGH: "HIGH";
4217
+ LOW: "LOW";
4218
+ MEDIUM: "MEDIUM";
4219
+ }>>;
4220
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
4221
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
4222
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
4223
+ readonly year: z.ZodNumber;
4224
+ readonly month: z.ZodNumber;
4225
+ readonly volume: z.ZodNumber;
4226
+ }, z.core.$strip>>>;
4227
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
4228
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
4229
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
4230
+ }, z.core.$strip>;
4231
+ }, z.core.$strict>, z.ZodObject<{
4232
+ _tag: z.ZodLiteral<"no-data">;
4233
+ topic: z.ZodString;
4234
+ }, z.core.$strict>], "_tag">>;
4235
+ readonly keywords: z.ZodArray<z.ZodObject<{
4236
+ readonly keyword: z.ZodString;
4237
+ readonly volume: z.ZodNullable<z.ZodNumber>;
4238
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
4239
+ readonly intent: z.ZodNullable<z.ZodString>;
4240
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
4241
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
4242
+ readonly competition: z.ZodNullable<z.ZodNumber>;
4243
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
4244
+ HIGH: "HIGH";
4245
+ LOW: "LOW";
4246
+ MEDIUM: "MEDIUM";
4247
+ }>>;
4248
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
4249
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
4250
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
4251
+ readonly year: z.ZodNumber;
4252
+ readonly month: z.ZodNumber;
4253
+ readonly volume: z.ZodNumber;
4254
+ }, z.core.$strip>>>;
4255
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
4256
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
4257
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
4258
+ }, z.core.$strip>>;
4259
+ readonly totalFound: z.ZodNumber;
4260
+ readonly filters: z.ZodObject<{
4261
+ minVolume: z.ZodNumber;
4262
+ maxVolume: z.ZodNumber;
4263
+ minDifficulty: z.ZodNumber;
4264
+ maxDifficulty: z.ZodNumber;
4265
+ intent: z.ZodOptional<z.ZodString>;
4266
+ }, z.core.$strict>;
4267
+ /**
4268
+ * Why a result set is empty, in one sentence for a person.
4269
+ *
4270
+ * The provider answers 200 with an empty list both when the argument was
4271
+ * refused and when the argument was accepted but matched nothing. `message`
4272
+ * is the only field that tells the two apart, so a caller that reads the list
4273
+ * alone will misread a refusal as an absence of demand. Present only when the
4274
+ * list is empty for a reason worth naming.
4275
+ */
4276
+ readonly message: z.ZodOptional<z.ZodString>;
4277
+ /**
4278
+ * A concrete next argument to try, when `message` names a fixable argument.
4279
+ */
4280
+ readonly tip: z.ZodOptional<z.ZodString>;
4281
+ readonly serpFallback: z.ZodOptional<z.ZodNullable<z.ZodObject<{
4282
+ message: z.ZodString;
4283
+ topResults: z.ZodArray<z.ZodObject<{
4284
+ readonly position: z.ZodNumber;
4285
+ readonly title: z.ZodString;
4286
+ readonly domain: z.ZodString;
4287
+ readonly url: z.ZodString;
4288
+ }, z.core.$strip>>;
4289
+ tip: z.ZodString;
4290
+ }, z.core.$strict>>>;
4291
+ readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
4292
+ _tag: z.ZodLiteral<"no-provider">;
4293
+ provider: z.ZodNull;
4294
+ spend: z.ZodObject<{
4295
+ key: z.ZodLiteral<"dataforseo">;
4296
+ units: z.ZodLiteral<0>;
4297
+ }, z.core.$strict>;
4298
+ }, z.core.$strict>, z.ZodObject<{
4299
+ _tag: z.ZodLiteral<"cache">;
4300
+ provider: z.ZodLiteral<"dataforseo">;
4301
+ spend: z.ZodObject<{
4302
+ key: z.ZodLiteral<"dataforseo">;
4303
+ units: z.ZodLiteral<0>;
4304
+ }, z.core.$strict>;
4305
+ }, z.core.$strict>, z.ZodObject<{
4306
+ _tag: z.ZodLiteral<"live">;
4307
+ provider: z.ZodLiteral<"dataforseo">;
4308
+ spend: z.ZodObject<{
4309
+ key: z.ZodLiteral<"dataforseo">;
4310
+ units: z.ZodLiteral<1>;
4311
+ }, z.core.$strict>;
4312
+ }, z.core.$strict>], "_tag">;
4313
+ }, z.core.$strip>;
4314
+ meta: z.ZodObject<{
4315
+ requestId: z.ZodString;
4316
+ version: z.ZodLiteral<"1.0">;
4317
+ }, z.core.$strict>;
4318
+ }, z.core.$strip>, z.ZodObject<{
4319
+ data: z.ZodObject<{
4320
+ readonly topic: z.ZodString;
4321
+ readonly topicMetrics: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
4322
+ _tag: z.ZodLiteral<"measured">;
4323
+ topic: z.ZodString;
4324
+ metrics: z.ZodObject<{
4325
+ readonly keyword: z.ZodString;
4326
+ readonly volume: z.ZodNullable<z.ZodNumber>;
4327
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
4328
+ readonly intent: z.ZodNullable<z.ZodString>;
4329
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
4330
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
4331
+ readonly competition: z.ZodNullable<z.ZodNumber>;
4332
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
4333
+ HIGH: "HIGH";
4334
+ LOW: "LOW";
4335
+ MEDIUM: "MEDIUM";
4336
+ }>>;
4337
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
4338
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
4339
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
4340
+ readonly year: z.ZodNumber;
4341
+ readonly month: z.ZodNumber;
4342
+ readonly volume: z.ZodNumber;
4343
+ }, z.core.$strip>>>;
4344
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
4345
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
4346
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
4347
+ }, z.core.$strip>;
4348
+ }, z.core.$loose>, z.ZodObject<{
4349
+ _tag: z.ZodLiteral<"no-data">;
4350
+ topic: z.ZodString;
4351
+ }, z.core.$loose>], "_tag">>;
4352
+ readonly keywords: z.ZodArray<z.ZodObject<{
4353
+ readonly keyword: z.ZodString;
4354
+ readonly volume: z.ZodNullable<z.ZodNumber>;
4355
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
4356
+ readonly intent: z.ZodNullable<z.ZodString>;
4357
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
4358
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
4359
+ readonly competition: z.ZodNullable<z.ZodNumber>;
4360
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
4361
+ HIGH: "HIGH";
4362
+ LOW: "LOW";
4363
+ MEDIUM: "MEDIUM";
4364
+ }>>;
4365
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
4366
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
4367
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
4368
+ readonly year: z.ZodNumber;
4369
+ readonly month: z.ZodNumber;
4370
+ readonly volume: z.ZodNumber;
4371
+ }, z.core.$strip>>>;
4372
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
4373
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
4374
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
4375
+ }, z.core.$strip>>;
4376
+ readonly totalFound: z.ZodNumber;
4377
+ readonly filters: z.ZodObject<{
4378
+ minVolume: z.ZodNumber;
4379
+ maxVolume: z.ZodNumber;
4380
+ minDifficulty: z.ZodNumber;
4381
+ maxDifficulty: z.ZodNumber;
4382
+ intent: z.ZodOptional<z.ZodString>;
4383
+ }, z.core.$loose>;
4384
+ /**
4385
+ * Why a result set is empty, in one sentence for a person.
4386
+ *
4387
+ * The provider answers 200 with an empty list both when the argument was
4388
+ * refused and when the argument was accepted but matched nothing. `message`
4389
+ * is the only field that tells the two apart, so a caller that reads the list
4390
+ * alone will misread a refusal as an absence of demand. Present only when the
4391
+ * list is empty for a reason worth naming.
4392
+ */
4393
+ readonly message: z.ZodOptional<z.ZodString>;
4394
+ /**
4395
+ * A concrete next argument to try, when `message` names a fixable argument.
4396
+ */
4397
+ readonly tip: z.ZodOptional<z.ZodString>;
4398
+ readonly serpFallback: z.ZodOptional<z.ZodNullable<z.ZodObject<{
4399
+ message: z.ZodString;
4400
+ topResults: z.ZodArray<z.ZodObject<{
4401
+ readonly position: z.ZodNumber;
4402
+ readonly title: z.ZodString;
4403
+ readonly domain: z.ZodString;
4404
+ readonly url: z.ZodString;
4405
+ }, z.core.$strip>>;
4406
+ tip: z.ZodString;
4407
+ }, z.core.$loose>>>;
4408
+ readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
4409
+ _tag: z.ZodLiteral<"no-provider">;
4410
+ provider: z.ZodNull;
4411
+ spend: z.ZodObject<{
4412
+ key: z.ZodLiteral<"dataforseo">;
4413
+ units: z.ZodLiteral<0>;
4414
+ }, z.core.$loose>;
4415
+ }, z.core.$loose>, z.ZodObject<{
4416
+ _tag: z.ZodLiteral<"cache">;
4417
+ provider: z.ZodLiteral<"dataforseo">;
4418
+ spend: z.ZodObject<{
4419
+ key: z.ZodLiteral<"dataforseo">;
4420
+ units: z.ZodLiteral<0>;
4421
+ }, z.core.$loose>;
4422
+ }, z.core.$loose>, z.ZodObject<{
4423
+ _tag: z.ZodLiteral<"live">;
4424
+ provider: z.ZodLiteral<"dataforseo">;
4425
+ spend: z.ZodObject<{
4426
+ key: z.ZodLiteral<"dataforseo">;
4427
+ units: z.ZodLiteral<1>;
4428
+ }, z.core.$loose>;
4429
+ }, z.core.$loose>], "_tag">;
4430
+ }, z.core.$strip>;
4431
+ meta: z.ZodObject<{
4432
+ requestId: z.ZodString;
4433
+ version: z.ZodLiteral<"1.0">;
4434
+ }, z.core.$loose>;
4435
+ }, z.core.$strip>>;
4436
+ };
4437
+ readonly errors: readonly ["invalid_request", "unauthorized", "auth_expired", "forbidden", "not_found", "entitlement_required", "quota_exhausted", "provider_unavailable", "conflict", "rate_limited", "contract_violation", "internal_error"];
4438
+ readonly errorResponse: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
4439
+ readonly error: z.ZodObject<{
4440
+ code: z.ZodEnum<{
4441
+ auth_expired: "auth_expired";
4442
+ conflict: "conflict";
4443
+ contract_violation: "contract_violation";
4444
+ entitlement_required: "entitlement_required";
4445
+ forbidden: "forbidden";
4446
+ internal_error: "internal_error";
4447
+ invalid_request: "invalid_request";
4448
+ not_found: "not_found";
4449
+ provider_unavailable: "provider_unavailable";
4450
+ quota_exhausted: "quota_exhausted";
4451
+ rate_limited: "rate_limited";
4452
+ site_ambiguous: "site_ambiguous";
4453
+ stale_evidence: "stale_evidence";
4454
+ unauthorized: "unauthorized";
4455
+ }>;
4456
+ message: z.ZodString;
4457
+ requestId: z.ZodString;
4458
+ retryable: z.ZodBoolean;
4459
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
4460
+ }, z.core.$strict>;
4461
+ }, z.core.$strip>, z.ZodObject<{
4462
+ readonly error: z.ZodObject<{
4463
+ code: z.ZodEnum<{
4464
+ auth_expired: "auth_expired";
4465
+ conflict: "conflict";
4466
+ contract_violation: "contract_violation";
4467
+ entitlement_required: "entitlement_required";
4468
+ forbidden: "forbidden";
4469
+ internal_error: "internal_error";
4470
+ invalid_request: "invalid_request";
4471
+ not_found: "not_found";
4472
+ provider_unavailable: "provider_unavailable";
4473
+ quota_exhausted: "quota_exhausted";
4474
+ rate_limited: "rate_limited";
4475
+ site_ambiguous: "site_ambiguous";
4476
+ stale_evidence: "stale_evidence";
4477
+ unauthorized: "unauthorized";
4478
+ }>;
4479
+ message: z.ZodString;
4480
+ requestId: z.ZodString;
4481
+ retryable: z.ZodBoolean;
4482
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
4483
+ }, z.core.$loose>;
4484
+ }, z.core.$strip>>;
4485
+ readonly resources: {
4486
+ readonly reads: readonly [{
4487
+ readonly type: 'site.research';
4488
+ readonly idFrom: 'params.siteId';
4489
+ }];
4490
+ readonly changes: readonly [];
4491
+ };
4492
+ readonly policy: {
4493
+ readonly rate: {
4494
+ readonly name: 'public-v1-fixed-window';
4495
+ readonly limit: 50;
4496
+ readonly windowSeconds: 60;
4497
+ };
4498
+ readonly idempotency: {
4499
+ readonly _tag: 'none';
4500
+ };
4501
+ readonly entitlement: 'growth';
4502
+ readonly meter: {
4503
+ readonly key: 'dataforseo';
4504
+ readonly units: 1;
4505
+ readonly charge: 'live-only';
4506
+ };
4507
+ };
4508
+ readonly lifecycle: {
4509
+ readonly introduced: '1.0.0';
4510
+ };
4511
+ readonly docs: {
4512
+ readonly summary: 'Research keyword ideas';
4513
+ readonly description: 'Returns exact metrics for each requested topic alongside filtered keyword ideas. Missing provider data stays explicit. Local guidance and cached reads consume no units.';
4514
+ readonly tags: readonly ["Research"];
4515
+ readonly examples: readonly [{
4516
+ readonly request: {
4517
+ readonly params: {
4518
+ readonly siteId: 'site_01JXYZ';
4519
+ };
4520
+ readonly query: {
4521
+ readonly topic: 'nuxt seo';
4522
+ readonly limit: 20;
4523
+ };
4524
+ };
4525
+ readonly response: {
4526
+ readonly status: 200;
4527
+ readonly body: {
4528
+ readonly data: {
4529
+ readonly topic: 'nuxt seo';
4530
+ readonly topicMetrics: readonly [{
4531
+ readonly _tag: 'no-data';
4532
+ readonly topic: 'nuxt seo';
4533
+ }];
4534
+ readonly keywords: readonly [];
4535
+ readonly totalFound: 0;
4536
+ readonly filters: {
4537
+ readonly minVolume: 10;
4538
+ readonly maxVolume: 10000;
4539
+ readonly minDifficulty: 0;
4540
+ readonly maxDifficulty: 60;
4541
+ };
4542
+ readonly evidence: {
4543
+ readonly _tag: 'live';
4544
+ readonly provider: 'dataforseo';
4545
+ readonly spend: {
4546
+ readonly key: 'dataforseo';
4547
+ readonly units: 1;
4548
+ };
4549
+ };
4550
+ };
4551
+ readonly meta: {
4552
+ readonly requestId: 'req_01JXYZ';
4553
+ readonly version: '1.0';
4554
+ };
4555
+ };
4556
+ };
4557
+ }];
4558
+ };
4559
+ };
4560
+ readonly serp: {
4561
+ readonly id: 'research.serp';
4562
+ readonly method: 'GET';
4563
+ readonly path: '/api/v1/sites/{siteId}/research/serp';
4564
+ readonly visibility: 'public';
4565
+ readonly semantics: {
4566
+ readonly kind: 'query';
4567
+ readonly sideEffects: 'none';
4568
+ readonly retry: 'idempotent';
4569
+ readonly readConsistency: 'primary';
4570
+ };
4571
+ readonly auth: {
4572
+ readonly credentials: readonly ['session', 'api_token'];
4573
+ readonly scopes: readonly ['research:read'];
4574
+ readonly minimumRole: 'viewer';
4575
+ readonly ownership: 'site';
4576
+ };
4577
+ readonly request: {
4578
+ readonly params: z.ZodObject<{
4579
+ siteId: z.ZodString;
4580
+ }, z.core.$strict>;
4581
+ readonly query: z.ZodObject<{
4582
+ keyword: z.ZodString;
4583
+ depth: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
4584
+ locationCode: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
4585
+ }, z.core.$strict>;
4586
+ readonly headers: null;
4587
+ readonly body: null;
4588
+ };
4589
+ readonly responses: {
4590
+ readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
4591
+ data: z.ZodObject<{
4592
+ readonly keyword: z.ZodString;
4593
+ readonly depth: z.ZodNumber;
4594
+ readonly results: z.ZodArray<z.ZodObject<{
4595
+ readonly position: z.ZodNumber;
4596
+ readonly url: z.ZodString;
4597
+ readonly title: z.ZodString;
4598
+ readonly domain: z.ZodString;
4599
+ readonly description: z.ZodOptional<z.ZodString>;
4600
+ }, z.core.$strip>>;
4601
+ readonly serpFeatures: z.ZodArray<z.ZodString>;
4602
+ readonly hasAiOverview: z.ZodBoolean;
4603
+ readonly hasFeaturedSnippet: z.ZodBoolean;
4604
+ readonly hasLocalPack: z.ZodBoolean;
4605
+ readonly hasPeopleAlsoAsk: z.ZodBoolean;
4606
+ readonly fetchedAt: z.ZodString;
4607
+ readonly cached: z.ZodBoolean;
4608
+ }, z.core.$strip>;
4609
+ meta: z.ZodObject<{
4610
+ requestId: z.ZodString;
4611
+ version: z.ZodLiteral<"1.0">;
4612
+ }, z.core.$strict>;
4613
+ }, z.core.$strip>, z.ZodObject<{
4614
+ data: z.ZodObject<{
4615
+ readonly keyword: z.ZodString;
4616
+ readonly depth: z.ZodNumber;
4617
+ readonly results: z.ZodArray<z.ZodObject<{
4618
+ readonly position: z.ZodNumber;
4619
+ readonly url: z.ZodString;
4620
+ readonly title: z.ZodString;
4621
+ readonly domain: z.ZodString;
4622
+ readonly description: z.ZodOptional<z.ZodString>;
4623
+ }, z.core.$strip>>;
4624
+ readonly serpFeatures: z.ZodArray<z.ZodString>;
4625
+ readonly hasAiOverview: z.ZodBoolean;
4626
+ readonly hasFeaturedSnippet: z.ZodBoolean;
4627
+ readonly hasLocalPack: z.ZodBoolean;
4628
+ readonly hasPeopleAlsoAsk: z.ZodBoolean;
4629
+ readonly fetchedAt: z.ZodString;
4630
+ readonly cached: z.ZodBoolean;
4631
+ }, z.core.$strip>;
4632
+ meta: z.ZodObject<{
4633
+ requestId: z.ZodString;
4634
+ version: z.ZodLiteral<"1.0">;
4635
+ }, z.core.$loose>;
4636
+ }, z.core.$strip>>;
4637
+ };
4638
+ readonly errors: readonly ["invalid_request", "unauthorized", "auth_expired", "forbidden", "not_found", "entitlement_required", "quota_exhausted", "provider_unavailable", "conflict", "rate_limited", "contract_violation", "internal_error"];
4639
+ readonly errorResponse: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
4640
+ readonly error: z.ZodObject<{
4641
+ code: z.ZodEnum<{
4642
+ auth_expired: "auth_expired";
4643
+ conflict: "conflict";
4644
+ contract_violation: "contract_violation";
4645
+ entitlement_required: "entitlement_required";
4646
+ forbidden: "forbidden";
4647
+ internal_error: "internal_error";
4648
+ invalid_request: "invalid_request";
4649
+ not_found: "not_found";
4650
+ provider_unavailable: "provider_unavailable";
4651
+ quota_exhausted: "quota_exhausted";
4652
+ rate_limited: "rate_limited";
4653
+ site_ambiguous: "site_ambiguous";
4654
+ stale_evidence: "stale_evidence";
4655
+ unauthorized: "unauthorized";
4656
+ }>;
4657
+ message: z.ZodString;
4658
+ requestId: z.ZodString;
4659
+ retryable: z.ZodBoolean;
4660
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
4661
+ }, z.core.$strict>;
4662
+ }, z.core.$strip>, z.ZodObject<{
4663
+ readonly error: z.ZodObject<{
4664
+ code: z.ZodEnum<{
4665
+ auth_expired: "auth_expired";
4666
+ conflict: "conflict";
4667
+ contract_violation: "contract_violation";
4668
+ entitlement_required: "entitlement_required";
4669
+ forbidden: "forbidden";
4670
+ internal_error: "internal_error";
4671
+ invalid_request: "invalid_request";
4672
+ not_found: "not_found";
4673
+ provider_unavailable: "provider_unavailable";
4674
+ quota_exhausted: "quota_exhausted";
4675
+ rate_limited: "rate_limited";
4676
+ site_ambiguous: "site_ambiguous";
4677
+ stale_evidence: "stale_evidence";
4678
+ unauthorized: "unauthorized";
4679
+ }>;
4680
+ message: z.ZodString;
4681
+ requestId: z.ZodString;
4682
+ retryable: z.ZodBoolean;
4683
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
4684
+ }, z.core.$loose>;
4685
+ }, z.core.$strip>>;
4686
+ readonly resources: {
4687
+ readonly reads: readonly [{
4688
+ readonly type: 'site.research';
4689
+ readonly idFrom: 'params.siteId';
4690
+ }];
4691
+ readonly changes: readonly [];
4692
+ };
4693
+ readonly policy: {
4694
+ readonly rate: {
4695
+ readonly name: 'public-v1-fixed-window';
4696
+ readonly limit: 50;
4697
+ readonly windowSeconds: 60;
4698
+ };
4699
+ readonly idempotency: {
4700
+ readonly _tag: 'none';
4701
+ };
4702
+ readonly entitlement: 'growth';
4703
+ readonly meter: {
4704
+ readonly key: 'dataforseo';
4705
+ readonly units: 1;
4706
+ readonly charge: 'live-only';
4707
+ };
4708
+ };
4709
+ readonly lifecycle: {
4710
+ readonly introduced: '1.0.0';
4711
+ };
4712
+ readonly docs: {
4713
+ readonly summary: 'Analyze a Google SERP';
4714
+ readonly description: 'Returns one dated SERP snapshot and its result features. Cached reads consume no units.';
4715
+ readonly tags: readonly ["Research"];
4716
+ readonly examples: readonly [{
4717
+ readonly request: {
4718
+ readonly params: {
4719
+ readonly siteId: 'site_01JXYZ';
4720
+ };
4721
+ readonly query: {
4722
+ readonly keyword: 'nuxt seo';
4723
+ readonly depth: 10;
4724
+ };
4725
+ };
4726
+ readonly response: {
4727
+ readonly status: 200;
4728
+ readonly body: {
4729
+ readonly data: {
4730
+ readonly keyword: 'nuxt seo';
4731
+ readonly depth: 10;
4732
+ readonly results: readonly [];
4733
+ readonly serpFeatures: readonly [];
4734
+ readonly hasAiOverview: false;
4735
+ readonly hasFeaturedSnippet: false;
4736
+ readonly hasLocalPack: false;
4737
+ readonly hasPeopleAlsoAsk: false;
4738
+ readonly fetchedAt: '2026-08-20T00:00:00.000Z';
4739
+ readonly cached: false;
4740
+ };
4741
+ readonly meta: {
4742
+ readonly requestId: 'req_01JXYZ';
4743
+ readonly version: '1.0';
4744
+ };
4745
+ };
4746
+ };
4747
+ }];
4748
+ };
4749
+ };
4750
+ readonly rankings: {
4751
+ readonly id: 'research.rankings';
4752
+ readonly method: 'GET';
4753
+ readonly path: '/api/v1/sites/{siteId}/research/rankings';
4754
+ readonly visibility: 'public';
4755
+ readonly semantics: {
4756
+ readonly kind: 'query';
4757
+ readonly sideEffects: 'none';
4758
+ readonly retry: 'idempotent';
4759
+ readonly readConsistency: 'primary';
4760
+ };
4761
+ readonly auth: {
4762
+ readonly credentials: readonly ['session', 'api_token'];
4763
+ readonly scopes: readonly ['research:read'];
4764
+ readonly minimumRole: 'viewer';
4765
+ readonly ownership: 'site';
4766
+ };
4767
+ readonly request: {
4768
+ readonly params: z.ZodObject<{
4769
+ siteId: z.ZodString;
4770
+ }, z.core.$strict>;
4771
+ readonly query: z.ZodObject<{
4772
+ domain: z.ZodString;
4773
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
4774
+ minPosition: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
4775
+ maxPosition: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
4776
+ locationCode: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
4777
+ order: z.ZodDefault<z.ZodEnum<{
4778
+ position: "position";
4779
+ traffic: "traffic";
4780
+ }>>;
4781
+ }, z.core.$strict>;
4782
+ readonly headers: null;
4783
+ readonly body: null;
4784
+ };
4785
+ readonly responses: {
4786
+ readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
4787
+ data: z.ZodObject<{
4788
+ readonly domain: z.ZodString;
4789
+ readonly keywords: z.ZodArray<z.ZodObject<{
4790
+ readonly keyword: z.ZodString;
4791
+ readonly position: z.ZodNumber;
4792
+ readonly volume: z.ZodNumber;
4793
+ readonly traffic: z.ZodNumber;
4794
+ readonly url: z.ZodString;
4795
+ readonly intent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
3183
4796
  }, z.core.$strip>>;
3184
- readonly competitors: z.ZodArray<z.ZodObject<{
3185
- readonly domain: z.ZodString;
3186
- readonly discovery: z.ZodEnum<{
3187
- automatic: "automatic";
3188
- manual: "manual";
3189
- unknown: "unknown";
3190
- }>;
3191
- readonly metrics: z.ZodObject<{
3192
- readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
3193
- readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
3194
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
3195
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
3196
- }, z.core.$strip>;
3197
- readonly topKeywords: z.ZodArray<z.ZodObject<{
3198
- readonly keyword: z.ZodString;
3199
- readonly position: z.ZodNullable<z.ZodNumber>;
3200
- readonly volume: z.ZodNullable<z.ZodNumber>;
3201
- readonly traffic: z.ZodNullable<z.ZodNumber>;
3202
- readonly url: z.ZodNullable<z.ZodString>;
3203
- readonly intent: z.ZodNullable<z.ZodString>;
3204
- }, z.core.$strip>>;
3205
- readonly sharedKeywords: z.ZodArray<z.ZodObject<{
3206
- readonly keyword: z.ZodString;
3207
- readonly yourPosition: z.ZodNumber;
3208
- readonly theirPosition: z.ZodNumber;
3209
- readonly volume: z.ZodNumber;
3210
- }, z.core.$strip>>;
3211
- readonly keywordGaps: z.ZodArray<z.ZodObject<{
3212
- readonly keyword: z.ZodString;
3213
- readonly position: z.ZodNullable<z.ZodNumber>;
3214
- readonly volume: z.ZodNullable<z.ZodNumber>;
3215
- readonly traffic: z.ZodNullable<z.ZodNumber>;
3216
- readonly url: z.ZodNullable<z.ZodString>;
3217
- readonly intent: z.ZodNullable<z.ZodString>;
3218
- }, z.core.$strip>>;
3219
- readonly quickWins: z.ZodArray<z.ZodObject<{
3220
- readonly keyword: z.ZodString;
3221
- readonly yourPosition: z.ZodNumber;
3222
- readonly theirPosition: z.ZodNumber;
3223
- readonly volume: z.ZodNumber;
3224
- }, z.core.$strip>>;
3225
- readonly history: z.ZodArray<z.ZodObject<{
3226
- readonly observedAt: z.ZodNullable<z.ZodString>;
3227
- readonly metrics: z.ZodObject<{
3228
- readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
3229
- readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
3230
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
3231
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
3232
- }, z.core.$strip>;
4797
+ readonly totalFound: z.ZodNumber;
4798
+ readonly metrics: z.ZodNullable<z.ZodObject<{
4799
+ readonly organicTraffic: z.ZodNumber;
4800
+ readonly totalKeywords: z.ZodNumber;
4801
+ readonly keywordFootprint: z.ZodObject<{
4802
+ score: z.ZodNullable<z.ZodNumber>;
4803
+ scale: z.ZodObject<{
4804
+ min: z.ZodLiteral<0>;
4805
+ max: z.ZodLiteral<100>;
4806
+ }, z.core.$strict>;
4807
+ provenance: z.ZodLiteral<"local-keyword-count">;
4808
+ }, z.core.$strict>;
4809
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
4810
+ readonly topPages: z.ZodArray<z.ZodObject<{
4811
+ readonly path: z.ZodString;
4812
+ readonly traffic: z.ZodNumber;
4813
+ readonly keywords: z.ZodNumber;
3233
4814
  }, z.core.$strip>>;
3234
- readonly collectedAt: z.ZodNullable<z.ZodString>;
3235
4815
  }, z.core.$strip>>;
4816
+ readonly positionRange: z.ZodOptional<z.ZodObject<{
4817
+ min: z.ZodNumber;
4818
+ max: z.ZodNumber;
4819
+ }, z.core.$strict>>;
4820
+ /**
4821
+ * Why a result set is empty, in one sentence for a person.
4822
+ *
4823
+ * The provider answers 200 with an empty list both when the argument was
4824
+ * refused and when the argument was accepted but matched nothing. `message`
4825
+ * is the only field that tells the two apart, so a caller that reads the list
4826
+ * alone will misread a refusal as an absence of demand. Present only when the
4827
+ * list is empty for a reason worth naming.
4828
+ */
4829
+ readonly message: z.ZodOptional<z.ZodString>;
4830
+ readonly cached: z.ZodBoolean;
3236
4831
  }, z.core.$strip>;
3237
4832
  meta: z.ZodObject<{
3238
4833
  requestId: z.ZodString;
@@ -3240,88 +4835,49 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3240
4835
  }, z.core.$strict>;
3241
4836
  }, z.core.$strip>, z.ZodObject<{
3242
4837
  data: z.ZodObject<{
3243
- readonly evidence: z.ZodObject<{
3244
- _tag: z.ZodLiteral<"stored">;
3245
- provider: z.ZodLiteral<"dataforseo">;
3246
- collectedAt: z.ZodNullable<z.ZodString>;
3247
- }, z.core.$loose>;
3248
- readonly summary: z.ZodObject<{
3249
- competitorCount: z.ZodNumber;
3250
- quickWins: z.ZodNumber;
3251
- totalSharedKeywords: z.ZodNumber;
3252
- totalTrafficValue: z.ZodNumber;
3253
- }, z.core.$loose>;
3254
- readonly subject: z.ZodNullable<z.ZodObject<{
3255
- readonly domain: z.ZodString;
3256
- readonly metrics: z.ZodObject<{
3257
- readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
3258
- readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
3259
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
3260
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
3261
- }, z.core.$strip>;
3262
- readonly history: z.ZodArray<z.ZodObject<{
3263
- readonly observedAt: z.ZodNullable<z.ZodString>;
3264
- readonly metrics: z.ZodObject<{
3265
- readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
3266
- readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
3267
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
3268
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
3269
- }, z.core.$strip>;
3270
- }, z.core.$strip>>;
3271
- readonly collectedAt: z.ZodNullable<z.ZodString>;
4838
+ readonly domain: z.ZodString;
4839
+ readonly keywords: z.ZodArray<z.ZodObject<{
4840
+ readonly keyword: z.ZodString;
4841
+ readonly position: z.ZodNumber;
4842
+ readonly volume: z.ZodNumber;
4843
+ readonly traffic: z.ZodNumber;
4844
+ readonly url: z.ZodString;
4845
+ readonly intent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
3272
4846
  }, z.core.$strip>>;
3273
- readonly competitors: z.ZodArray<z.ZodObject<{
3274
- readonly domain: z.ZodString;
3275
- readonly discovery: z.ZodEnum<{
3276
- automatic: "automatic";
3277
- manual: "manual";
3278
- unknown: "unknown";
3279
- }>;
3280
- readonly metrics: z.ZodObject<{
3281
- readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
3282
- readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
3283
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
3284
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
3285
- }, z.core.$strip>;
3286
- readonly topKeywords: z.ZodArray<z.ZodObject<{
3287
- readonly keyword: z.ZodString;
3288
- readonly position: z.ZodNullable<z.ZodNumber>;
3289
- readonly volume: z.ZodNullable<z.ZodNumber>;
3290
- readonly traffic: z.ZodNullable<z.ZodNumber>;
3291
- readonly url: z.ZodNullable<z.ZodString>;
3292
- readonly intent: z.ZodNullable<z.ZodString>;
3293
- }, z.core.$strip>>;
3294
- readonly sharedKeywords: z.ZodArray<z.ZodObject<{
3295
- readonly keyword: z.ZodString;
3296
- readonly yourPosition: z.ZodNumber;
3297
- readonly theirPosition: z.ZodNumber;
3298
- readonly volume: z.ZodNumber;
3299
- }, z.core.$strip>>;
3300
- readonly keywordGaps: z.ZodArray<z.ZodObject<{
3301
- readonly keyword: z.ZodString;
3302
- readonly position: z.ZodNullable<z.ZodNumber>;
3303
- readonly volume: z.ZodNullable<z.ZodNumber>;
3304
- readonly traffic: z.ZodNullable<z.ZodNumber>;
3305
- readonly url: z.ZodNullable<z.ZodString>;
3306
- readonly intent: z.ZodNullable<z.ZodString>;
3307
- }, z.core.$strip>>;
3308
- readonly quickWins: z.ZodArray<z.ZodObject<{
3309
- readonly keyword: z.ZodString;
3310
- readonly yourPosition: z.ZodNumber;
3311
- readonly theirPosition: z.ZodNumber;
3312
- readonly volume: z.ZodNumber;
3313
- }, z.core.$strip>>;
3314
- readonly history: z.ZodArray<z.ZodObject<{
3315
- readonly observedAt: z.ZodNullable<z.ZodString>;
3316
- readonly metrics: z.ZodObject<{
3317
- readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
3318
- readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
3319
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
3320
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
3321
- }, z.core.$strip>;
4847
+ readonly totalFound: z.ZodNumber;
4848
+ readonly metrics: z.ZodNullable<z.ZodObject<{
4849
+ readonly organicTraffic: z.ZodNumber;
4850
+ readonly totalKeywords: z.ZodNumber;
4851
+ readonly keywordFootprint: z.ZodObject<{
4852
+ score: z.ZodNullable<z.ZodNumber>;
4853
+ scale: z.ZodObject<{
4854
+ min: z.ZodLiteral<0>;
4855
+ max: z.ZodLiteral<100>;
4856
+ }, z.core.$loose>;
4857
+ provenance: z.ZodLiteral<"local-keyword-count">;
4858
+ }, z.core.$loose>;
4859
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
4860
+ readonly topPages: z.ZodArray<z.ZodObject<{
4861
+ readonly path: z.ZodString;
4862
+ readonly traffic: z.ZodNumber;
4863
+ readonly keywords: z.ZodNumber;
3322
4864
  }, z.core.$strip>>;
3323
- readonly collectedAt: z.ZodNullable<z.ZodString>;
3324
4865
  }, z.core.$strip>>;
4866
+ readonly positionRange: z.ZodOptional<z.ZodObject<{
4867
+ min: z.ZodNumber;
4868
+ max: z.ZodNumber;
4869
+ }, z.core.$loose>>;
4870
+ /**
4871
+ * Why a result set is empty, in one sentence for a person.
4872
+ *
4873
+ * The provider answers 200 with an empty list both when the argument was
4874
+ * refused and when the argument was accepted but matched nothing. `message`
4875
+ * is the only field that tells the two apart, so a caller that reads the list
4876
+ * alone will misread a refusal as an absence of demand. Present only when the
4877
+ * list is empty for a reason worth naming.
4878
+ */
4879
+ readonly message: z.ZodOptional<z.ZodString>;
4880
+ readonly cached: z.ZodBoolean;
3325
4881
  }, z.core.$strip>;
3326
4882
  meta: z.ZodObject<{
3327
4883
  requestId: z.ZodString;
@@ -3329,7 +4885,7 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3329
4885
  }, z.core.$loose>;
3330
4886
  }, z.core.$strip>>;
3331
4887
  };
3332
- readonly errors: readonly ["invalid_request", "unauthorized", "auth_expired", "forbidden", "not_found", "conflict", "rate_limited", "contract_violation", "internal_error"];
4888
+ readonly errors: readonly ["invalid_request", "unauthorized", "auth_expired", "forbidden", "not_found", "entitlement_required", "quota_exhausted", "provider_unavailable", "conflict", "rate_limited", "contract_violation", "internal_error"];
3333
4889
  readonly errorResponse: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
3334
4890
  readonly error: z.ZodObject<{
3335
4891
  code: z.ZodEnum<{
@@ -3393,39 +4949,43 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3393
4949
  readonly idempotency: {
3394
4950
  readonly _tag: 'none';
3395
4951
  };
3396
- readonly entitlement: null;
3397
- readonly meter: null;
4952
+ readonly entitlement: 'growth';
4953
+ readonly meter: {
4954
+ readonly key: 'dataforseo';
4955
+ readonly units: 1;
4956
+ readonly charge: 'live-only';
4957
+ };
3398
4958
  };
3399
4959
  readonly lifecycle: {
3400
4960
  readonly introduced: '1.0.0';
3401
4961
  };
3402
4962
  readonly docs: {
3403
- readonly summary: 'Get stored Site Research';
3404
- readonly description: 'Returns retained competitor and keyword-gap evidence already collected for the Site. It never starts provider work and does not consume metered units.';
4963
+ readonly summary: 'Research domain rankings';
4964
+ readonly description: 'Returns current keyword rankings and domain metrics. Cached reads consume no units.';
3405
4965
  readonly tags: readonly ["Research"];
3406
4966
  readonly examples: readonly [{
3407
4967
  readonly request: {
3408
4968
  readonly params: {
3409
4969
  readonly siteId: 'site_01JXYZ';
3410
4970
  };
4971
+ readonly query: {
4972
+ readonly domain: 'nuxtseo.com';
4973
+ readonly limit: 20;
4974
+ };
3411
4975
  };
3412
4976
  readonly response: {
3413
4977
  readonly status: 200;
3414
4978
  readonly body: {
3415
4979
  readonly data: {
3416
- readonly evidence: {
3417
- readonly _tag: 'stored';
3418
- readonly provider: 'dataforseo';
3419
- readonly collectedAt: null;
3420
- };
3421
- readonly summary: {
3422
- readonly competitorCount: 0;
3423
- readonly quickWins: 0;
3424
- readonly totalSharedKeywords: 0;
3425
- readonly totalTrafficValue: 0;
4980
+ readonly domain: 'nuxtseo.com';
4981
+ readonly keywords: readonly [];
4982
+ readonly totalFound: 0;
4983
+ readonly metrics: null;
4984
+ readonly positionRange: {
4985
+ readonly min: 1;
4986
+ readonly max: 20;
3426
4987
  };
3427
- readonly subject: null;
3428
- readonly competitors: readonly [];
4988
+ readonly cached: false;
3429
4989
  };
3430
4990
  readonly meta: {
3431
4991
  readonly requestId: 'req_01JXYZ';
@@ -3436,10 +4996,10 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3436
4996
  }];
3437
4997
  };
3438
4998
  };
3439
- readonly keywords: {
3440
- readonly id: 'research.keywords';
4999
+ readonly domainTraffic: {
5000
+ readonly id: 'research.domain.traffic';
3441
5001
  readonly method: 'GET';
3442
- readonly path: '/api/v1/sites/{siteId}/research/keywords';
5002
+ readonly path: '/api/v1/sites/{siteId}/research/domain-traffic';
3443
5003
  readonly visibility: 'public';
3444
5004
  readonly semantics: {
3445
5005
  readonly kind: 'query';
@@ -3458,26 +5018,7 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3458
5018
  siteId: z.ZodString;
3459
5019
  }, z.core.$strict>;
3460
5020
  readonly query: z.ZodObject<{
3461
- topic: z.ZodString;
3462
- minVolume: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
3463
- maxVolume: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
3464
- minDifficulty: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
3465
- maxDifficulty: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
3466
- intent: z.ZodOptional<z.ZodString>;
3467
- includeRelated: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
3468
- 0: "0";
3469
- 1: "1";
3470
- false: "false";
3471
- true: "true";
3472
- }>]>, z.ZodTransform<boolean, "0" | "1" | "false" | "true" | boolean>>>;
3473
- verbose: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
3474
- 0: "0";
3475
- 1: "1";
3476
- false: "false";
3477
- true: "true";
3478
- }>]>, z.ZodTransform<boolean, "0" | "1" | "false" | "true" | boolean>>>;
3479
- limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
3480
- locationCode: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
5021
+ domain: z.ZodString;
3481
5022
  }, z.core.$strict>;
3482
5023
  readonly headers: null;
3483
5024
  readonly body: null;
@@ -3485,63 +5026,26 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3485
5026
  readonly responses: {
3486
5027
  readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
3487
5028
  data: z.ZodObject<{
3488
- readonly topic: z.ZodString;
3489
- readonly keywords: z.ZodArray<z.ZodObject<{
3490
- readonly keyword: z.ZodString;
3491
- readonly volume: z.ZodNullable<z.ZodNumber>;
3492
- readonly difficulty: z.ZodNullable<z.ZodNumber>;
3493
- readonly intent: z.ZodNullable<z.ZodString>;
3494
- readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
3495
- readonly cpc: z.ZodNullable<z.ZodNumber>;
3496
- readonly competition: z.ZodNullable<z.ZodNumber>;
3497
- readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
3498
- HIGH: "HIGH";
3499
- LOW: "LOW";
3500
- MEDIUM: "MEDIUM";
3501
- }>>;
3502
- readonly lowBid: z.ZodNullable<z.ZodNumber>;
3503
- readonly highBid: z.ZodNullable<z.ZodNumber>;
3504
- readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
3505
- readonly year: z.ZodNumber;
3506
- readonly month: z.ZodNumber;
3507
- readonly volume: z.ZodNumber;
3508
- }, z.core.$strip>>>;
3509
- readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
3510
- readonly backlinks: z.ZodNullable<z.ZodNumber>;
3511
- readonly referringDomains: z.ZodNullable<z.ZodNumber>;
5029
+ readonly domain: z.ZodString;
5030
+ readonly monthlyTraffic: z.ZodNumber;
5031
+ readonly trend: z.ZodEnum<{
5032
+ declining: "declining";
5033
+ growing: "growing";
5034
+ stable: "stable";
5035
+ }>;
5036
+ readonly changePercent: z.ZodNumber;
5037
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
5038
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
5039
+ readonly topPages: z.ZodArray<z.ZodObject<{
5040
+ readonly path: z.ZodString;
5041
+ readonly traffic: z.ZodNumber;
5042
+ readonly keywords: z.ZodNumber;
3512
5043
  }, z.core.$strip>>;
3513
- readonly totalFound: z.ZodNumber;
3514
- readonly filters: z.ZodObject<{
3515
- minVolume: z.ZodNumber;
3516
- maxVolume: z.ZodNumber;
3517
- minDifficulty: z.ZodNumber;
3518
- maxDifficulty: z.ZodNumber;
3519
- intent: z.ZodOptional<z.ZodString>;
3520
- }, z.core.$strict>;
3521
- /**
3522
- * Why a result set is empty, in one sentence for a person.
3523
- *
3524
- * The provider answers 200 with an empty list both when the argument was
3525
- * refused and when the argument was accepted but matched nothing. `message`
3526
- * is the only field that tells the two apart, so a caller that reads the list
3527
- * alone will misread a refusal as an absence of demand. Present only when the
3528
- * list is empty for a reason worth naming.
3529
- */
3530
- readonly message: z.ZodOptional<z.ZodString>;
3531
- /**
3532
- * A concrete next argument to try, when `message` names a fixable argument.
3533
- */
3534
- readonly tip: z.ZodOptional<z.ZodString>;
3535
- readonly serpFallback: z.ZodOptional<z.ZodNullable<z.ZodObject<{
3536
- message: z.ZodString;
3537
- topResults: z.ZodArray<z.ZodObject<{
3538
- readonly position: z.ZodNumber;
3539
- readonly title: z.ZodString;
3540
- readonly domain: z.ZodString;
3541
- readonly url: z.ZodString;
3542
- }, z.core.$strip>>;
3543
- tip: z.ZodString;
3544
- }, z.core.$strict>>>;
5044
+ readonly topCountries: z.ZodArray<z.ZodObject<{
5045
+ country: z.ZodString;
5046
+ percent: z.ZodNumber;
5047
+ }, z.core.$strict>>;
5048
+ readonly message: z.ZodNullable<z.ZodString>;
3545
5049
  readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
3546
5050
  _tag: z.ZodLiteral<"no-provider">;
3547
5051
  provider: z.ZodNull;
@@ -3571,63 +5075,26 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3571
5075
  }, z.core.$strict>;
3572
5076
  }, z.core.$strip>, z.ZodObject<{
3573
5077
  data: z.ZodObject<{
3574
- readonly topic: z.ZodString;
3575
- readonly keywords: z.ZodArray<z.ZodObject<{
3576
- readonly keyword: z.ZodString;
3577
- readonly volume: z.ZodNullable<z.ZodNumber>;
3578
- readonly difficulty: z.ZodNullable<z.ZodNumber>;
3579
- readonly intent: z.ZodNullable<z.ZodString>;
3580
- readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
3581
- readonly cpc: z.ZodNullable<z.ZodNumber>;
3582
- readonly competition: z.ZodNullable<z.ZodNumber>;
3583
- readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
3584
- HIGH: "HIGH";
3585
- LOW: "LOW";
3586
- MEDIUM: "MEDIUM";
3587
- }>>;
3588
- readonly lowBid: z.ZodNullable<z.ZodNumber>;
3589
- readonly highBid: z.ZodNullable<z.ZodNumber>;
3590
- readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
3591
- readonly year: z.ZodNumber;
3592
- readonly month: z.ZodNumber;
3593
- readonly volume: z.ZodNumber;
3594
- }, z.core.$strip>>>;
3595
- readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
3596
- readonly backlinks: z.ZodNullable<z.ZodNumber>;
3597
- readonly referringDomains: z.ZodNullable<z.ZodNumber>;
5078
+ readonly domain: z.ZodString;
5079
+ readonly monthlyTraffic: z.ZodNumber;
5080
+ readonly trend: z.ZodEnum<{
5081
+ declining: "declining";
5082
+ growing: "growing";
5083
+ stable: "stable";
5084
+ }>;
5085
+ readonly changePercent: z.ZodNumber;
5086
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
5087
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
5088
+ readonly topPages: z.ZodArray<z.ZodObject<{
5089
+ readonly path: z.ZodString;
5090
+ readonly traffic: z.ZodNumber;
5091
+ readonly keywords: z.ZodNumber;
3598
5092
  }, z.core.$strip>>;
3599
- readonly totalFound: z.ZodNumber;
3600
- readonly filters: z.ZodObject<{
3601
- minVolume: z.ZodNumber;
3602
- maxVolume: z.ZodNumber;
3603
- minDifficulty: z.ZodNumber;
3604
- maxDifficulty: z.ZodNumber;
3605
- intent: z.ZodOptional<z.ZodString>;
3606
- }, z.core.$loose>;
3607
- /**
3608
- * Why a result set is empty, in one sentence for a person.
3609
- *
3610
- * The provider answers 200 with an empty list both when the argument was
3611
- * refused and when the argument was accepted but matched nothing. `message`
3612
- * is the only field that tells the two apart, so a caller that reads the list
3613
- * alone will misread a refusal as an absence of demand. Present only when the
3614
- * list is empty for a reason worth naming.
3615
- */
3616
- readonly message: z.ZodOptional<z.ZodString>;
3617
- /**
3618
- * A concrete next argument to try, when `message` names a fixable argument.
3619
- */
3620
- readonly tip: z.ZodOptional<z.ZodString>;
3621
- readonly serpFallback: z.ZodOptional<z.ZodNullable<z.ZodObject<{
3622
- message: z.ZodString;
3623
- topResults: z.ZodArray<z.ZodObject<{
3624
- readonly position: z.ZodNumber;
3625
- readonly title: z.ZodString;
3626
- readonly domain: z.ZodString;
3627
- readonly url: z.ZodString;
3628
- }, z.core.$strip>>;
3629
- tip: z.ZodString;
3630
- }, z.core.$loose>>>;
5093
+ readonly topCountries: z.ZodArray<z.ZodObject<{
5094
+ country: z.ZodString;
5095
+ percent: z.ZodNumber;
5096
+ }, z.core.$loose>>;
5097
+ readonly message: z.ZodNullable<z.ZodString>;
3631
5098
  readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
3632
5099
  _tag: z.ZodLiteral<"no-provider">;
3633
5100
  provider: z.ZodNull;
@@ -3729,11 +5196,11 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3729
5196
  };
3730
5197
  };
3731
5198
  readonly lifecycle: {
3732
- readonly introduced: '1.0.0';
5199
+ readonly introduced: '1.2.0';
3733
5200
  };
3734
5201
  readonly docs: {
3735
- readonly summary: 'Research keyword ideas';
3736
- readonly description: 'Returns keyword ideas with volume, difficulty, intent, cost data, and explicit provider execution and spend evidence. Local guidance and cached reads consume no units.';
5202
+ readonly summary: 'Estimate domain traffic';
5203
+ readonly description: 'Returns an estimate of one domain organic search traffic, its trend, its top pages and countries. The domain does not have to be one of your Sites, so this reads a competitor as readily as your own. Cached reads consume no units.';
3737
5204
  readonly tags: readonly ["Research"];
3738
5205
  readonly examples: readonly [{
3739
5206
  readonly request: {
@@ -3741,23 +5208,29 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3741
5208
  readonly siteId: 'site_01JXYZ';
3742
5209
  };
3743
5210
  readonly query: {
3744
- readonly topic: 'nuxt seo';
3745
- readonly limit: 20;
5211
+ readonly domain: 'nuxtseo.com';
3746
5212
  };
3747
5213
  };
3748
5214
  readonly response: {
3749
5215
  readonly status: 200;
3750
5216
  readonly body: {
3751
5217
  readonly data: {
3752
- readonly topic: 'nuxt seo';
3753
- readonly keywords: readonly [];
3754
- readonly totalFound: 0;
3755
- readonly filters: {
3756
- readonly minVolume: 10;
3757
- readonly maxVolume: 10000;
3758
- readonly minDifficulty: 0;
3759
- readonly maxDifficulty: 60;
3760
- };
5218
+ readonly domain: 'nuxtseo.com';
5219
+ readonly monthlyTraffic: 48200;
5220
+ readonly trend: 'growing';
5221
+ readonly changePercent: 12.4;
5222
+ readonly trafficValue: 31200;
5223
+ readonly keywordFootprint: 62;
5224
+ readonly topPages: readonly [{
5225
+ readonly path: '/docs/sitemap';
5226
+ readonly traffic: 4100;
5227
+ readonly keywords: 220;
5228
+ }];
5229
+ readonly topCountries: readonly [{
5230
+ readonly country: 'US';
5231
+ readonly percent: 41.2;
5232
+ }];
5233
+ readonly message: null;
3761
5234
  readonly evidence: {
3762
5235
  readonly _tag: 'live';
3763
5236
  readonly provider: 'dataforseo';
@@ -3776,10 +5249,10 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3776
5249
  }];
3777
5250
  };
3778
5251
  };
3779
- readonly serp: {
3780
- readonly id: 'research.serp';
5252
+ readonly domainAvailability: {
5253
+ readonly id: 'research.domain.availability';
3781
5254
  readonly method: 'GET';
3782
- readonly path: '/api/v1/sites/{siteId}/research/serp';
5255
+ readonly path: '/api/v1/sites/{siteId}/research/domain-availability';
3783
5256
  readonly visibility: 'public';
3784
5257
  readonly semantics: {
3785
5258
  readonly kind: 'query';
@@ -3797,33 +5270,46 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3797
5270
  readonly params: z.ZodObject<{
3798
5271
  siteId: z.ZodString;
3799
5272
  }, z.core.$strict>;
3800
- readonly query: z.ZodObject<{
3801
- keyword: z.ZodString;
3802
- depth: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
3803
- locationCode: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
3804
- }, z.core.$strict>;
5273
+ readonly query: z.ZodObject<{
5274
+ domains: z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodPipe<z.ZodString, z.ZodTransform<string[], string>>]>;
5275
+ }, z.core.$strict>;
3805
5276
  readonly headers: null;
3806
5277
  readonly body: null;
3807
5278
  };
3808
5279
  readonly responses: {
3809
5280
  readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
3810
5281
  data: z.ZodObject<{
3811
- readonly keyword: z.ZodString;
3812
- readonly depth: z.ZodNumber;
3813
5282
  readonly results: z.ZodArray<z.ZodObject<{
3814
- readonly position: z.ZodNumber;
3815
- readonly url: z.ZodString;
3816
- readonly title: z.ZodString;
3817
5283
  readonly domain: z.ZodString;
3818
- readonly description: z.ZodOptional<z.ZodString>;
5284
+ readonly available: z.ZodBoolean;
5285
+ readonly registrar: z.ZodNullable<z.ZodString>;
5286
+ readonly expiration: z.ZodNullable<z.ZodString>;
5287
+ readonly created: z.ZodNullable<z.ZodString>;
5288
+ readonly note: z.ZodNullable<z.ZodString>;
3819
5289
  }, z.core.$strip>>;
3820
- readonly serpFeatures: z.ZodArray<z.ZodString>;
3821
- readonly hasAiOverview: z.ZodBoolean;
3822
- readonly hasFeaturedSnippet: z.ZodBoolean;
3823
- readonly hasLocalPack: z.ZodBoolean;
3824
- readonly hasPeopleAlsoAsk: z.ZodBoolean;
3825
- readonly fetchedAt: z.ZodString;
3826
- readonly cached: z.ZodBoolean;
5290
+ readonly message: z.ZodNullable<z.ZodString>;
5291
+ readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
5292
+ _tag: z.ZodLiteral<"no-provider">;
5293
+ provider: z.ZodNull;
5294
+ spend: z.ZodObject<{
5295
+ key: z.ZodLiteral<"dataforseo">;
5296
+ units: z.ZodLiteral<0>;
5297
+ }, z.core.$strict>;
5298
+ }, z.core.$strict>, z.ZodObject<{
5299
+ _tag: z.ZodLiteral<"cache">;
5300
+ provider: z.ZodLiteral<"dataforseo">;
5301
+ spend: z.ZodObject<{
5302
+ key: z.ZodLiteral<"dataforseo">;
5303
+ units: z.ZodLiteral<0>;
5304
+ }, z.core.$strict>;
5305
+ }, z.core.$strict>, z.ZodObject<{
5306
+ _tag: z.ZodLiteral<"live">;
5307
+ provider: z.ZodLiteral<"dataforseo">;
5308
+ spend: z.ZodObject<{
5309
+ key: z.ZodLiteral<"dataforseo">;
5310
+ units: z.ZodLiteral<1>;
5311
+ }, z.core.$strict>;
5312
+ }, z.core.$strict>], "_tag">;
3827
5313
  }, z.core.$strip>;
3828
5314
  meta: z.ZodObject<{
3829
5315
  requestId: z.ZodString;
@@ -3831,22 +5317,37 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3831
5317
  }, z.core.$strict>;
3832
5318
  }, z.core.$strip>, z.ZodObject<{
3833
5319
  data: z.ZodObject<{
3834
- readonly keyword: z.ZodString;
3835
- readonly depth: z.ZodNumber;
3836
5320
  readonly results: z.ZodArray<z.ZodObject<{
3837
- readonly position: z.ZodNumber;
3838
- readonly url: z.ZodString;
3839
- readonly title: z.ZodString;
3840
5321
  readonly domain: z.ZodString;
3841
- readonly description: z.ZodOptional<z.ZodString>;
5322
+ readonly available: z.ZodBoolean;
5323
+ readonly registrar: z.ZodNullable<z.ZodString>;
5324
+ readonly expiration: z.ZodNullable<z.ZodString>;
5325
+ readonly created: z.ZodNullable<z.ZodString>;
5326
+ readonly note: z.ZodNullable<z.ZodString>;
3842
5327
  }, z.core.$strip>>;
3843
- readonly serpFeatures: z.ZodArray<z.ZodString>;
3844
- readonly hasAiOverview: z.ZodBoolean;
3845
- readonly hasFeaturedSnippet: z.ZodBoolean;
3846
- readonly hasLocalPack: z.ZodBoolean;
3847
- readonly hasPeopleAlsoAsk: z.ZodBoolean;
3848
- readonly fetchedAt: z.ZodString;
3849
- readonly cached: z.ZodBoolean;
5328
+ readonly message: z.ZodNullable<z.ZodString>;
5329
+ readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
5330
+ _tag: z.ZodLiteral<"no-provider">;
5331
+ provider: z.ZodNull;
5332
+ spend: z.ZodObject<{
5333
+ key: z.ZodLiteral<"dataforseo">;
5334
+ units: z.ZodLiteral<0>;
5335
+ }, z.core.$loose>;
5336
+ }, z.core.$loose>, z.ZodObject<{
5337
+ _tag: z.ZodLiteral<"cache">;
5338
+ provider: z.ZodLiteral<"dataforseo">;
5339
+ spend: z.ZodObject<{
5340
+ key: z.ZodLiteral<"dataforseo">;
5341
+ units: z.ZodLiteral<0>;
5342
+ }, z.core.$loose>;
5343
+ }, z.core.$loose>, z.ZodObject<{
5344
+ _tag: z.ZodLiteral<"live">;
5345
+ provider: z.ZodLiteral<"dataforseo">;
5346
+ spend: z.ZodObject<{
5347
+ key: z.ZodLiteral<"dataforseo">;
5348
+ units: z.ZodLiteral<1>;
5349
+ }, z.core.$loose>;
5350
+ }, z.core.$loose>], "_tag">;
3850
5351
  }, z.core.$strip>;
3851
5352
  meta: z.ZodObject<{
3852
5353
  requestId: z.ZodString;
@@ -3926,11 +5427,11 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3926
5427
  };
3927
5428
  };
3928
5429
  readonly lifecycle: {
3929
- readonly introduced: '1.0.0';
5430
+ readonly introduced: '1.2.0';
3930
5431
  };
3931
5432
  readonly docs: {
3932
- readonly summary: 'Analyze a Google SERP';
3933
- readonly description: 'Returns one dated SERP snapshot and its result features. Cached reads consume no units.';
5433
+ readonly summary: 'Check domain availability';
5434
+ readonly description: 'Returns the registration status of up to ten domains, with the registrar and expiry when the domain is taken. Repeat the domains parameter for each domain. Cached reads consume no units.';
3934
5435
  readonly tags: readonly ["Research"];
3935
5436
  readonly examples: readonly [{
3936
5437
  readonly request: {
@@ -3938,24 +5439,30 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3938
5439
  readonly siteId: 'site_01JXYZ';
3939
5440
  };
3940
5441
  readonly query: {
3941
- readonly keyword: 'nuxt seo';
3942
- readonly depth: 10;
5442
+ readonly domains: readonly ["example.com", "example.dev"];
3943
5443
  };
3944
5444
  };
3945
5445
  readonly response: {
3946
5446
  readonly status: 200;
3947
5447
  readonly body: {
3948
5448
  readonly data: {
3949
- readonly keyword: 'nuxt seo';
3950
- readonly depth: 10;
3951
- readonly results: readonly [];
3952
- readonly serpFeatures: readonly [];
3953
- readonly hasAiOverview: false;
3954
- readonly hasFeaturedSnippet: false;
3955
- readonly hasLocalPack: false;
3956
- readonly hasPeopleAlsoAsk: false;
3957
- readonly fetchedAt: '2026-08-20T00:00:00.000Z';
3958
- readonly cached: false;
5449
+ readonly results: readonly [{
5450
+ readonly domain: 'example.com';
5451
+ readonly available: false;
5452
+ readonly registrar: 'Example Registrar';
5453
+ readonly expiration: '2027-04-01';
5454
+ readonly created: '1995-08-14';
5455
+ readonly note: null;
5456
+ }];
5457
+ readonly message: null;
5458
+ readonly evidence: {
5459
+ readonly _tag: 'live';
5460
+ readonly provider: 'dataforseo';
5461
+ readonly spend: {
5462
+ readonly key: 'dataforseo';
5463
+ readonly units: 1;
5464
+ };
5465
+ };
3959
5466
  };
3960
5467
  readonly meta: {
3961
5468
  readonly requestId: 'req_01JXYZ';
@@ -3966,10 +5473,10 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3966
5473
  }];
3967
5474
  };
3968
5475
  };
3969
- readonly rankings: {
3970
- readonly id: 'research.rankings';
5476
+ readonly listCompetitors: {
5477
+ readonly id: 'research.competitors.list';
3971
5478
  readonly method: 'GET';
3972
- readonly path: '/api/v1/sites/{siteId}/research/rankings';
5479
+ readonly path: '/api/v1/sites/{siteId}/research/competitors';
3973
5480
  readonly visibility: 'public';
3974
5481
  readonly semantics: {
3975
5482
  readonly kind: 'query';
@@ -3987,66 +5494,17 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
3987
5494
  readonly params: z.ZodObject<{
3988
5495
  siteId: z.ZodString;
3989
5496
  }, z.core.$strict>;
3990
- readonly query: z.ZodObject<{
3991
- domain: z.ZodString;
3992
- limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
3993
- minPosition: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
3994
- maxPosition: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
3995
- locationCode: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
3996
- order: z.ZodDefault<z.ZodEnum<{
3997
- position: "position";
3998
- traffic: "traffic";
3999
- }>>;
4000
- }, z.core.$strict>;
5497
+ readonly query: null;
4001
5498
  readonly headers: null;
4002
5499
  readonly body: null;
4003
5500
  };
4004
5501
  readonly responses: {
4005
5502
  readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
4006
5503
  data: z.ZodObject<{
4007
- readonly domain: z.ZodString;
4008
- readonly keywords: z.ZodArray<z.ZodObject<{
4009
- readonly keyword: z.ZodString;
4010
- readonly position: z.ZodNumber;
4011
- readonly volume: z.ZodNumber;
4012
- readonly traffic: z.ZodNumber;
4013
- readonly url: z.ZodString;
4014
- readonly intent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
4015
- }, z.core.$strip>>;
4016
- readonly totalFound: z.ZodNumber;
4017
- readonly metrics: z.ZodNullable<z.ZodObject<{
4018
- readonly organicTraffic: z.ZodNumber;
4019
- readonly totalKeywords: z.ZodNumber;
4020
- readonly keywordFootprint: z.ZodObject<{
4021
- score: z.ZodNullable<z.ZodNumber>;
4022
- scale: z.ZodObject<{
4023
- min: z.ZodLiteral<0>;
4024
- max: z.ZodLiteral<100>;
4025
- }, z.core.$strict>;
4026
- provenance: z.ZodLiteral<"local-keyword-count">;
4027
- }, z.core.$strict>;
4028
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
4029
- readonly topPages: z.ZodArray<z.ZodObject<{
4030
- readonly path: z.ZodString;
4031
- readonly traffic: z.ZodNumber;
4032
- readonly keywords: z.ZodNumber;
4033
- }, z.core.$strip>>;
4034
- }, z.core.$strip>>;
4035
- readonly positionRange: z.ZodOptional<z.ZodObject<{
4036
- min: z.ZodNumber;
4037
- max: z.ZodNumber;
5504
+ readonly competitors: z.ZodArray<z.ZodObject<{
5505
+ id: z.ZodString;
5506
+ domain: z.ZodString;
4038
5507
  }, z.core.$strict>>;
4039
- /**
4040
- * Why a result set is empty, in one sentence for a person.
4041
- *
4042
- * The provider answers 200 with an empty list both when the argument was
4043
- * refused and when the argument was accepted but matched nothing. `message`
4044
- * is the only field that tells the two apart, so a caller that reads the list
4045
- * alone will misread a refusal as an absence of demand. Present only when the
4046
- * list is empty for a reason worth naming.
4047
- */
4048
- readonly message: z.ZodOptional<z.ZodString>;
4049
- readonly cached: z.ZodBoolean;
4050
5508
  }, z.core.$strip>;
4051
5509
  meta: z.ZodObject<{
4052
5510
  requestId: z.ZodString;
@@ -4054,49 +5512,10 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
4054
5512
  }, z.core.$strict>;
4055
5513
  }, z.core.$strip>, z.ZodObject<{
4056
5514
  data: z.ZodObject<{
4057
- readonly domain: z.ZodString;
4058
- readonly keywords: z.ZodArray<z.ZodObject<{
4059
- readonly keyword: z.ZodString;
4060
- readonly position: z.ZodNumber;
4061
- readonly volume: z.ZodNumber;
4062
- readonly traffic: z.ZodNumber;
4063
- readonly url: z.ZodString;
4064
- readonly intent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
4065
- }, z.core.$strip>>;
4066
- readonly totalFound: z.ZodNumber;
4067
- readonly metrics: z.ZodNullable<z.ZodObject<{
4068
- readonly organicTraffic: z.ZodNumber;
4069
- readonly totalKeywords: z.ZodNumber;
4070
- readonly keywordFootprint: z.ZodObject<{
4071
- score: z.ZodNullable<z.ZodNumber>;
4072
- scale: z.ZodObject<{
4073
- min: z.ZodLiteral<0>;
4074
- max: z.ZodLiteral<100>;
4075
- }, z.core.$loose>;
4076
- provenance: z.ZodLiteral<"local-keyword-count">;
4077
- }, z.core.$loose>;
4078
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
4079
- readonly topPages: z.ZodArray<z.ZodObject<{
4080
- readonly path: z.ZodString;
4081
- readonly traffic: z.ZodNumber;
4082
- readonly keywords: z.ZodNumber;
4083
- }, z.core.$strip>>;
4084
- }, z.core.$strip>>;
4085
- readonly positionRange: z.ZodOptional<z.ZodObject<{
4086
- min: z.ZodNumber;
4087
- max: z.ZodNumber;
4088
- }, z.core.$loose>>;
4089
- /**
4090
- * Why a result set is empty, in one sentence for a person.
4091
- *
4092
- * The provider answers 200 with an empty list both when the argument was
4093
- * refused and when the argument was accepted but matched nothing. `message`
4094
- * is the only field that tells the two apart, so a caller that reads the list
4095
- * alone will misread a refusal as an absence of demand. Present only when the
4096
- * list is empty for a reason worth naming.
4097
- */
4098
- readonly message: z.ZodOptional<z.ZodString>;
4099
- readonly cached: z.ZodBoolean;
5515
+ readonly competitors: z.ZodArray<z.ZodObject<{
5516
+ id: z.ZodString;
5517
+ domain: z.ZodString;
5518
+ }, z.core.$strict>>;
4100
5519
  }, z.core.$strip>;
4101
5520
  meta: z.ZodObject<{
4102
5521
  requestId: z.ZodString;
@@ -4168,46 +5587,33 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
4168
5587
  readonly idempotency: {
4169
5588
  readonly _tag: 'none';
4170
5589
  };
4171
- readonly entitlement: 'growth';
4172
- readonly meter: {
4173
- readonly key: 'dataforseo';
4174
- readonly units: 1;
4175
- readonly charge: 'live-only';
4176
- };
5590
+ readonly entitlement: null;
5591
+ readonly meter: null;
4177
5592
  };
4178
5593
  readonly lifecycle: {
4179
- readonly introduced: '1.0.0';
5594
+ readonly introduced: '1.2.0';
4180
5595
  };
4181
5596
  readonly docs: {
4182
- readonly summary: 'Research domain rankings';
4183
- readonly description: 'Returns current keyword rankings and domain metrics. Cached reads consume no units.';
5597
+ readonly summary: 'List tracked competitors';
5598
+ readonly description: 'Returns competitors you added to this Site. Suggested competitors stay excluded. Reads start no provider work.';
4184
5599
  readonly tags: readonly ["Research"];
4185
5600
  readonly examples: readonly [{
4186
5601
  readonly request: {
4187
5602
  readonly params: {
4188
- readonly siteId: 'site_01JXYZ';
4189
- };
4190
- readonly query: {
4191
- readonly domain: 'nuxtseo.com';
4192
- readonly limit: 20;
4193
- };
4194
- };
4195
- readonly response: {
4196
- readonly status: 200;
4197
- readonly body: {
4198
- readonly data: {
4199
- readonly domain: 'nuxtseo.com';
4200
- readonly keywords: readonly [];
4201
- readonly totalFound: 0;
4202
- readonly metrics: null;
4203
- readonly positionRange: {
4204
- readonly min: 1;
4205
- readonly max: 20;
4206
- };
4207
- readonly cached: false;
5603
+ readonly siteId: 's_example';
5604
+ };
5605
+ };
5606
+ readonly response: {
5607
+ readonly status: 200;
5608
+ readonly body: {
5609
+ readonly data: {
5610
+ readonly competitors: readonly [{
5611
+ readonly id: 'c_example';
5612
+ readonly domain: 'rival.com';
5613
+ }];
4208
5614
  };
4209
5615
  readonly meta: {
4210
- readonly requestId: 'req_01JXYZ';
5616
+ readonly requestId: 'req_example';
4211
5617
  readonly version: '1.0';
4212
5618
  };
4213
5619
  };
@@ -4215,78 +5621,41 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
4215
5621
  }];
4216
5622
  };
4217
5623
  };
4218
- readonly domainTraffic: {
4219
- readonly id: 'research.domain.traffic';
4220
- readonly method: 'GET';
4221
- readonly path: '/api/v1/sites/{siteId}/research/domain-traffic';
5624
+ readonly addCompetitor: {
5625
+ readonly id: 'research.competitors.add';
5626
+ readonly method: 'POST';
5627
+ readonly path: '/api/v1/sites/{siteId}/research/competitors';
4222
5628
  readonly visibility: 'public';
4223
5629
  readonly semantics: {
4224
- readonly kind: 'query';
4225
- readonly sideEffects: 'none';
4226
- readonly retry: 'idempotent';
4227
- readonly readConsistency: 'primary';
5630
+ readonly kind: 'mutation';
5631
+ readonly sideEffects: 'state';
5632
+ readonly retry: 'never';
5633
+ readonly readConsistency: null;
4228
5634
  };
4229
5635
  readonly auth: {
4230
5636
  readonly credentials: readonly ['session', 'api_token'];
4231
- readonly scopes: readonly ['research:read'];
4232
- readonly minimumRole: 'viewer';
5637
+ readonly scopes: readonly ['research:write'];
5638
+ readonly minimumRole: 'member';
4233
5639
  readonly ownership: 'site';
4234
5640
  };
4235
5641
  readonly request: {
4236
5642
  readonly params: z.ZodObject<{
4237
5643
  siteId: z.ZodString;
4238
5644
  }, z.core.$strict>;
4239
- readonly query: z.ZodObject<{
5645
+ readonly query: null;
5646
+ readonly headers: null;
5647
+ readonly body: z.ZodObject<{
4240
5648
  domain: z.ZodString;
4241
5649
  }, z.core.$strict>;
4242
- readonly headers: null;
4243
- readonly body: null;
4244
5650
  };
4245
5651
  readonly responses: {
4246
5652
  readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
4247
5653
  data: z.ZodObject<{
4248
- readonly domain: z.ZodString;
4249
- readonly monthlyTraffic: z.ZodNumber;
4250
- readonly trend: z.ZodEnum<{
4251
- declining: "declining";
4252
- growing: "growing";
4253
- stable: "stable";
4254
- }>;
4255
- readonly changePercent: z.ZodNumber;
4256
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
4257
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
4258
- readonly topPages: z.ZodArray<z.ZodObject<{
4259
- readonly path: z.ZodString;
4260
- readonly traffic: z.ZodNumber;
4261
- readonly keywords: z.ZodNumber;
4262
- }, z.core.$strip>>;
4263
- readonly topCountries: z.ZodArray<z.ZodObject<{
4264
- country: z.ZodString;
4265
- percent: z.ZodNumber;
4266
- }, z.core.$strict>>;
4267
- readonly message: z.ZodNullable<z.ZodString>;
4268
- readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
4269
- _tag: z.ZodLiteral<"no-provider">;
4270
- provider: z.ZodNull;
4271
- spend: z.ZodObject<{
4272
- key: z.ZodLiteral<"dataforseo">;
4273
- units: z.ZodLiteral<0>;
4274
- }, z.core.$strict>;
4275
- }, z.core.$strict>, z.ZodObject<{
4276
- _tag: z.ZodLiteral<"cache">;
4277
- provider: z.ZodLiteral<"dataforseo">;
4278
- spend: z.ZodObject<{
4279
- key: z.ZodLiteral<"dataforseo">;
4280
- units: z.ZodLiteral<0>;
4281
- }, z.core.$strict>;
4282
- }, z.core.$strict>, z.ZodObject<{
4283
- _tag: z.ZodLiteral<"live">;
4284
- provider: z.ZodLiteral<"dataforseo">;
4285
- spend: z.ZodObject<{
4286
- key: z.ZodLiteral<"dataforseo">;
4287
- units: z.ZodLiteral<1>;
4288
- }, z.core.$strict>;
4289
- }, z.core.$strict>], "_tag">;
5654
+ readonly competitor: z.ZodObject<{
5655
+ id: z.ZodString;
5656
+ domain: z.ZodString;
5657
+ }, z.core.$strict>;
5658
+ readonly status: z.ZodLiteral<"queued">;
4290
5659
  }, z.core.$strip>;
4291
5660
  meta: z.ZodObject<{
4292
5661
  requestId: z.ZodString;
@@ -4294,48 +5663,11 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
4294
5663
  }, z.core.$strict>;
4295
5664
  }, z.core.$strip>, z.ZodObject<{
4296
5665
  data: z.ZodObject<{
4297
- readonly domain: z.ZodString;
4298
- readonly monthlyTraffic: z.ZodNumber;
4299
- readonly trend: z.ZodEnum<{
4300
- declining: "declining";
4301
- growing: "growing";
4302
- stable: "stable";
4303
- }>;
4304
- readonly changePercent: z.ZodNumber;
4305
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
4306
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
4307
- readonly topPages: z.ZodArray<z.ZodObject<{
4308
- readonly path: z.ZodString;
4309
- readonly traffic: z.ZodNumber;
4310
- readonly keywords: z.ZodNumber;
4311
- }, z.core.$strip>>;
4312
- readonly topCountries: z.ZodArray<z.ZodObject<{
4313
- country: z.ZodString;
4314
- percent: z.ZodNumber;
4315
- }, z.core.$loose>>;
4316
- readonly message: z.ZodNullable<z.ZodString>;
4317
- readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
4318
- _tag: z.ZodLiteral<"no-provider">;
4319
- provider: z.ZodNull;
4320
- spend: z.ZodObject<{
4321
- key: z.ZodLiteral<"dataforseo">;
4322
- units: z.ZodLiteral<0>;
4323
- }, z.core.$loose>;
4324
- }, z.core.$loose>, z.ZodObject<{
4325
- _tag: z.ZodLiteral<"cache">;
4326
- provider: z.ZodLiteral<"dataforseo">;
4327
- spend: z.ZodObject<{
4328
- key: z.ZodLiteral<"dataforseo">;
4329
- units: z.ZodLiteral<0>;
4330
- }, z.core.$loose>;
4331
- }, z.core.$loose>, z.ZodObject<{
4332
- _tag: z.ZodLiteral<"live">;
4333
- provider: z.ZodLiteral<"dataforseo">;
4334
- spend: z.ZodObject<{
4335
- key: z.ZodLiteral<"dataforseo">;
4336
- units: z.ZodLiteral<1>;
4337
- }, z.core.$loose>;
4338
- }, z.core.$loose>], "_tag">;
5666
+ readonly competitor: z.ZodObject<{
5667
+ id: z.ZodString;
5668
+ domain: z.ZodString;
5669
+ }, z.core.$strict>;
5670
+ readonly status: z.ZodLiteral<"queued">;
4339
5671
  }, z.core.$strip>;
4340
5672
  meta: z.ZodObject<{
4341
5673
  requestId: z.ZodString;
@@ -4396,7 +5728,10 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
4396
5728
  readonly type: 'site.research';
4397
5729
  readonly idFrom: 'params.siteId';
4398
5730
  }];
4399
- readonly changes: readonly [];
5731
+ readonly changes: readonly [{
5732
+ readonly type: 'site.research';
5733
+ readonly idFrom: 'params.siteId';
5734
+ }];
4400
5735
  };
4401
5736
  readonly policy: {
4402
5737
  readonly rate: {
@@ -4411,56 +5746,37 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
4411
5746
  readonly meter: {
4412
5747
  readonly key: 'dataforseo';
4413
5748
  readonly units: 1;
4414
- readonly charge: 'live-only';
5749
+ readonly charge: 'always';
4415
5750
  };
4416
5751
  };
4417
5752
  readonly lifecycle: {
4418
5753
  readonly introduced: '1.2.0';
4419
5754
  };
4420
5755
  readonly docs: {
4421
- readonly summary: 'Estimate domain traffic';
4422
- readonly description: 'Returns an estimate of one domain organic search traffic, its trend, its top pages and countries. The domain does not have to be one of your Sites, so this reads a competitor as readily as your own. Cached reads consume no units.';
5756
+ readonly summary: 'Add one tracked competitor';
5757
+ readonly description: 'Queues analysis for one public domain you name. The existing Site and Team limits apply. Duplicate domains start no work.';
4423
5758
  readonly tags: readonly ["Research"];
4424
5759
  readonly examples: readonly [{
4425
5760
  readonly request: {
4426
5761
  readonly params: {
4427
- readonly siteId: 'site_01JXYZ';
5762
+ readonly siteId: 's_example';
4428
5763
  };
4429
- readonly query: {
4430
- readonly domain: 'nuxtseo.com';
5764
+ readonly body: {
5765
+ readonly domain: 'rival.com';
4431
5766
  };
4432
5767
  };
4433
5768
  readonly response: {
4434
5769
  readonly status: 200;
4435
5770
  readonly body: {
4436
5771
  readonly data: {
4437
- readonly domain: 'nuxtseo.com';
4438
- readonly monthlyTraffic: 48200;
4439
- readonly trend: 'growing';
4440
- readonly changePercent: 12.4;
4441
- readonly trafficValue: 31200;
4442
- readonly keywordFootprint: 62;
4443
- readonly topPages: readonly [{
4444
- readonly path: '/docs/sitemap';
4445
- readonly traffic: 4100;
4446
- readonly keywords: 220;
4447
- }];
4448
- readonly topCountries: readonly [{
4449
- readonly country: 'US';
4450
- readonly percent: 41.2;
4451
- }];
4452
- readonly message: null;
4453
- readonly evidence: {
4454
- readonly _tag: 'live';
4455
- readonly provider: 'dataforseo';
4456
- readonly spend: {
4457
- readonly key: 'dataforseo';
4458
- readonly units: 1;
4459
- };
5772
+ readonly competitor: {
5773
+ readonly id: 'c_example';
5774
+ readonly domain: 'rival.com';
4460
5775
  };
5776
+ readonly status: 'queued';
4461
5777
  };
4462
5778
  readonly meta: {
4463
- readonly requestId: 'req_01JXYZ';
5779
+ readonly requestId: 'req_example';
4464
5780
  readonly version: '1.0';
4465
5781
  };
4466
5782
  };
@@ -4468,67 +5784,37 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
4468
5784
  }];
4469
5785
  };
4470
5786
  };
4471
- readonly domainAvailability: {
4472
- readonly id: 'research.domain.availability';
4473
- readonly method: 'GET';
4474
- readonly path: '/api/v1/sites/{siteId}/research/domain-availability';
5787
+ readonly removeCompetitor: {
5788
+ readonly id: 'research.competitors.remove';
5789
+ readonly method: 'DELETE';
5790
+ readonly path: '/api/v1/sites/{siteId}/research/competitors/{competitorId}';
4475
5791
  readonly visibility: 'public';
4476
5792
  readonly semantics: {
4477
- readonly kind: 'query';
4478
- readonly sideEffects: 'none';
4479
- readonly retry: 'idempotent';
4480
- readonly readConsistency: 'primary';
5793
+ readonly kind: 'mutation';
5794
+ readonly sideEffects: 'state';
5795
+ readonly retry: 'never';
5796
+ readonly readConsistency: null;
4481
5797
  };
4482
5798
  readonly auth: {
4483
5799
  readonly credentials: readonly ['session', 'api_token'];
4484
- readonly scopes: readonly ['research:read'];
4485
- readonly minimumRole: 'viewer';
5800
+ readonly scopes: readonly ['research:write'];
5801
+ readonly minimumRole: 'member';
4486
5802
  readonly ownership: 'site';
4487
5803
  };
4488
5804
  readonly request: {
4489
5805
  readonly params: z.ZodObject<{
4490
5806
  siteId: z.ZodString;
5807
+ competitorId: z.ZodString;
4491
5808
  }, z.core.$strict>;
4492
- readonly query: z.ZodObject<{
4493
- domains: z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodPipe<z.ZodString, z.ZodTransform<string[], string>>]>;
4494
- }, z.core.$strict>;
5809
+ readonly query: null;
4495
5810
  readonly headers: null;
4496
5811
  readonly body: null;
4497
5812
  };
4498
5813
  readonly responses: {
4499
5814
  readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
4500
5815
  data: z.ZodObject<{
4501
- readonly results: z.ZodArray<z.ZodObject<{
4502
- readonly domain: z.ZodString;
4503
- readonly available: z.ZodBoolean;
4504
- readonly registrar: z.ZodNullable<z.ZodString>;
4505
- readonly expiration: z.ZodNullable<z.ZodString>;
4506
- readonly created: z.ZodNullable<z.ZodString>;
4507
- readonly note: z.ZodNullable<z.ZodString>;
4508
- }, z.core.$strip>>;
4509
- readonly message: z.ZodNullable<z.ZodString>;
4510
- readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
4511
- _tag: z.ZodLiteral<"no-provider">;
4512
- provider: z.ZodNull;
4513
- spend: z.ZodObject<{
4514
- key: z.ZodLiteral<"dataforseo">;
4515
- units: z.ZodLiteral<0>;
4516
- }, z.core.$strict>;
4517
- }, z.core.$strict>, z.ZodObject<{
4518
- _tag: z.ZodLiteral<"cache">;
4519
- provider: z.ZodLiteral<"dataforseo">;
4520
- spend: z.ZodObject<{
4521
- key: z.ZodLiteral<"dataforseo">;
4522
- units: z.ZodLiteral<0>;
4523
- }, z.core.$strict>;
4524
- }, z.core.$strict>, z.ZodObject<{
4525
- _tag: z.ZodLiteral<"live">;
4526
- provider: z.ZodLiteral<"dataforseo">;
4527
- spend: z.ZodObject<{
4528
- key: z.ZodLiteral<"dataforseo">;
4529
- units: z.ZodLiteral<1>;
4530
- }, z.core.$strict>;
4531
- }, z.core.$strict>], "_tag">;
5816
+ readonly competitorId: z.ZodString;
5817
+ readonly deleted: z.ZodLiteral<true>;
4532
5818
  }, z.core.$strip>;
4533
5819
  meta: z.ZodObject<{
4534
5820
  requestId: z.ZodString;
@@ -4536,37 +5822,8 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
4536
5822
  }, z.core.$strict>;
4537
5823
  }, z.core.$strip>, z.ZodObject<{
4538
5824
  data: z.ZodObject<{
4539
- readonly results: z.ZodArray<z.ZodObject<{
4540
- readonly domain: z.ZodString;
4541
- readonly available: z.ZodBoolean;
4542
- readonly registrar: z.ZodNullable<z.ZodString>;
4543
- readonly expiration: z.ZodNullable<z.ZodString>;
4544
- readonly created: z.ZodNullable<z.ZodString>;
4545
- readonly note: z.ZodNullable<z.ZodString>;
4546
- }, z.core.$strip>>;
4547
- readonly message: z.ZodNullable<z.ZodString>;
4548
- readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
4549
- _tag: z.ZodLiteral<"no-provider">;
4550
- provider: z.ZodNull;
4551
- spend: z.ZodObject<{
4552
- key: z.ZodLiteral<"dataforseo">;
4553
- units: z.ZodLiteral<0>;
4554
- }, z.core.$loose>;
4555
- }, z.core.$loose>, z.ZodObject<{
4556
- _tag: z.ZodLiteral<"cache">;
4557
- provider: z.ZodLiteral<"dataforseo">;
4558
- spend: z.ZodObject<{
4559
- key: z.ZodLiteral<"dataforseo">;
4560
- units: z.ZodLiteral<0>;
4561
- }, z.core.$loose>;
4562
- }, z.core.$loose>, z.ZodObject<{
4563
- _tag: z.ZodLiteral<"live">;
4564
- provider: z.ZodLiteral<"dataforseo">;
4565
- spend: z.ZodObject<{
4566
- key: z.ZodLiteral<"dataforseo">;
4567
- units: z.ZodLiteral<1>;
4568
- }, z.core.$loose>;
4569
- }, z.core.$loose>], "_tag">;
5825
+ readonly competitorId: z.ZodString;
5826
+ readonly deleted: z.ZodLiteral<true>;
4570
5827
  }, z.core.$strip>;
4571
5828
  meta: z.ZodObject<{
4572
5829
  requestId: z.ZodString;
@@ -4627,7 +5884,10 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
4627
5884
  readonly type: 'site.research';
4628
5885
  readonly idFrom: 'params.siteId';
4629
5886
  }];
4630
- readonly changes: readonly [];
5887
+ readonly changes: readonly [{
5888
+ readonly type: 'site.research';
5889
+ readonly idFrom: 'params.siteId';
5890
+ }];
4631
5891
  };
4632
5892
  readonly policy: {
4633
5893
  readonly rate: {
@@ -4638,53 +5898,32 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
4638
5898
  readonly idempotency: {
4639
5899
  readonly _tag: 'none';
4640
5900
  };
4641
- readonly entitlement: 'growth';
4642
- readonly meter: {
4643
- readonly key: 'dataforseo';
4644
- readonly units: 1;
4645
- readonly charge: 'live-only';
4646
- };
5901
+ readonly entitlement: null;
5902
+ readonly meter: null;
4647
5903
  };
4648
5904
  readonly lifecycle: {
4649
5905
  readonly introduced: '1.2.0';
4650
5906
  };
4651
5907
  readonly docs: {
4652
- readonly summary: 'Check domain availability';
4653
- readonly description: 'Returns the registration status of up to ten domains, with the registrar and expiry when the domain is taken. Repeat the domains parameter for each domain. Cached reads consume no units.';
5908
+ readonly summary: 'Remove one tracked competitor';
5909
+ readonly description: 'Removes a competitor from this Site using its listed id. Removal starts no provider work.';
4654
5910
  readonly tags: readonly ["Research"];
4655
5911
  readonly examples: readonly [{
4656
5912
  readonly request: {
4657
5913
  readonly params: {
4658
- readonly siteId: 'site_01JXYZ';
4659
- };
4660
- readonly query: {
4661
- readonly domains: readonly ["example.com", "example.dev"];
5914
+ readonly siteId: 's_example';
5915
+ readonly competitorId: 'c_example';
4662
5916
  };
4663
5917
  };
4664
5918
  readonly response: {
4665
5919
  readonly status: 200;
4666
5920
  readonly body: {
4667
5921
  readonly data: {
4668
- readonly results: readonly [{
4669
- readonly domain: 'example.com';
4670
- readonly available: false;
4671
- readonly registrar: 'Example Registrar';
4672
- readonly expiration: '2027-04-01';
4673
- readonly created: '1995-08-14';
4674
- readonly note: null;
4675
- }];
4676
- readonly message: null;
4677
- readonly evidence: {
4678
- readonly _tag: 'live';
4679
- readonly provider: 'dataforseo';
4680
- readonly spend: {
4681
- readonly key: 'dataforseo';
4682
- readonly units: 1;
4683
- };
4684
- };
5922
+ readonly competitorId: 'c_example';
5923
+ readonly deleted: true;
4685
5924
  };
4686
5925
  readonly meta: {
4687
- readonly requestId: 'req_01JXYZ';
5926
+ readonly requestId: 'req_example';
4688
5927
  readonly version: '1.0';
4689
5928
  };
4690
5929
  };