@nuxtseo/protocol 0.1.0 → 0.1.1

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.
@@ -543,6 +543,572 @@ export declare const storedResearchOverviewResponseSchema: import("./core.js").C
543
543
  }, z.core.$loose>;
544
544
  }, z.core.$strip>>;
545
545
  export type StoredResearchOverview = z.output<typeof storedResearchOverviewDataSchema.producer>;
546
+ export declare const keywordResearchQuerySchema: z.ZodObject<{
547
+ topic: z.ZodString;
548
+ minVolume: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
549
+ maxVolume: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
550
+ minDifficulty: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
551
+ maxDifficulty: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
552
+ intent: z.ZodOptional<z.ZodString>;
553
+ includeRelated: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
554
+ 0: "0";
555
+ 1: "1";
556
+ false: "false";
557
+ true: "true";
558
+ }>]>, z.ZodTransform<boolean, "0" | "1" | "false" | "true" | boolean>>>;
559
+ verbose: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
560
+ 0: "0";
561
+ 1: "1";
562
+ false: "false";
563
+ true: "true";
564
+ }>]>, z.ZodTransform<boolean, "0" | "1" | "false" | "true" | boolean>>>;
565
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
566
+ locationCode: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
567
+ }, z.core.$strict>;
568
+ declare const keywordResearchDataSchema: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
569
+ readonly topic: z.ZodString;
570
+ readonly keywords: z.ZodArray<z.ZodObject<{
571
+ readonly keyword: z.ZodString;
572
+ readonly volume: z.ZodNullable<z.ZodNumber>;
573
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
574
+ readonly intent: z.ZodNullable<z.ZodString>;
575
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
576
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
577
+ readonly competition: z.ZodNullable<z.ZodNumber>;
578
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
579
+ HIGH: "HIGH";
580
+ LOW: "LOW";
581
+ MEDIUM: "MEDIUM";
582
+ }>>;
583
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
584
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
585
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
586
+ readonly year: z.ZodNumber;
587
+ readonly month: z.ZodNumber;
588
+ readonly volume: z.ZodNumber;
589
+ }, z.core.$strip>>>;
590
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
591
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
592
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
593
+ }, z.core.$strip>>;
594
+ readonly totalFound: z.ZodNumber;
595
+ readonly filters: z.ZodObject<{
596
+ minVolume: z.ZodNumber;
597
+ maxVolume: z.ZodNumber;
598
+ minDifficulty: z.ZodNumber;
599
+ maxDifficulty: z.ZodNumber;
600
+ intent: z.ZodOptional<z.ZodString>;
601
+ }, z.core.$strict>;
602
+ readonly message: z.ZodOptional<z.ZodString>;
603
+ readonly tip: z.ZodOptional<z.ZodString>;
604
+ readonly serpFallback: z.ZodOptional<z.ZodNullable<z.ZodObject<{
605
+ message: z.ZodString;
606
+ topResults: z.ZodArray<z.ZodObject<{
607
+ readonly position: z.ZodNumber;
608
+ readonly title: z.ZodString;
609
+ readonly domain: z.ZodString;
610
+ readonly url: z.ZodString;
611
+ }, z.core.$strip>>;
612
+ tip: z.ZodString;
613
+ }, z.core.$strict>>>;
614
+ readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
615
+ _tag: z.ZodLiteral<"no-provider">;
616
+ provider: z.ZodNull;
617
+ spend: z.ZodObject<{
618
+ key: z.ZodLiteral<"dataforseo">;
619
+ units: z.ZodLiteral<0>;
620
+ }, z.core.$strict>;
621
+ }, z.core.$strict>, z.ZodObject<{
622
+ _tag: z.ZodLiteral<"cache">;
623
+ provider: z.ZodLiteral<"dataforseo">;
624
+ spend: z.ZodObject<{
625
+ key: z.ZodLiteral<"dataforseo">;
626
+ units: z.ZodLiteral<0>;
627
+ }, z.core.$strict>;
628
+ }, z.core.$strict>, z.ZodObject<{
629
+ _tag: z.ZodLiteral<"live">;
630
+ provider: z.ZodLiteral<"dataforseo">;
631
+ spend: z.ZodObject<{
632
+ key: z.ZodLiteral<"dataforseo">;
633
+ units: z.ZodLiteral<1>;
634
+ }, z.core.$strict>;
635
+ }, z.core.$strict>], "_tag">;
636
+ }, z.core.$strip>, z.ZodObject<{
637
+ readonly topic: z.ZodString;
638
+ readonly keywords: z.ZodArray<z.ZodObject<{
639
+ readonly keyword: z.ZodString;
640
+ readonly volume: z.ZodNullable<z.ZodNumber>;
641
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
642
+ readonly intent: z.ZodNullable<z.ZodString>;
643
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
644
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
645
+ readonly competition: z.ZodNullable<z.ZodNumber>;
646
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
647
+ HIGH: "HIGH";
648
+ LOW: "LOW";
649
+ MEDIUM: "MEDIUM";
650
+ }>>;
651
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
652
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
653
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
654
+ readonly year: z.ZodNumber;
655
+ readonly month: z.ZodNumber;
656
+ readonly volume: z.ZodNumber;
657
+ }, z.core.$strip>>>;
658
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
659
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
660
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
661
+ }, z.core.$strip>>;
662
+ readonly totalFound: z.ZodNumber;
663
+ readonly filters: z.ZodObject<{
664
+ minVolume: z.ZodNumber;
665
+ maxVolume: z.ZodNumber;
666
+ minDifficulty: z.ZodNumber;
667
+ maxDifficulty: z.ZodNumber;
668
+ intent: z.ZodOptional<z.ZodString>;
669
+ }, z.core.$loose>;
670
+ readonly message: z.ZodOptional<z.ZodString>;
671
+ readonly tip: z.ZodOptional<z.ZodString>;
672
+ readonly serpFallback: z.ZodOptional<z.ZodNullable<z.ZodObject<{
673
+ message: z.ZodString;
674
+ topResults: z.ZodArray<z.ZodObject<{
675
+ readonly position: z.ZodNumber;
676
+ readonly title: z.ZodString;
677
+ readonly domain: z.ZodString;
678
+ readonly url: z.ZodString;
679
+ }, z.core.$strip>>;
680
+ tip: z.ZodString;
681
+ }, z.core.$loose>>>;
682
+ readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
683
+ _tag: z.ZodLiteral<"no-provider">;
684
+ provider: z.ZodNull;
685
+ spend: z.ZodObject<{
686
+ key: z.ZodLiteral<"dataforseo">;
687
+ units: z.ZodLiteral<0>;
688
+ }, z.core.$loose>;
689
+ }, z.core.$loose>, z.ZodObject<{
690
+ _tag: z.ZodLiteral<"cache">;
691
+ provider: z.ZodLiteral<"dataforseo">;
692
+ spend: z.ZodObject<{
693
+ key: z.ZodLiteral<"dataforseo">;
694
+ units: z.ZodLiteral<0>;
695
+ }, z.core.$loose>;
696
+ }, z.core.$loose>, z.ZodObject<{
697
+ _tag: z.ZodLiteral<"live">;
698
+ provider: z.ZodLiteral<"dataforseo">;
699
+ spend: z.ZodObject<{
700
+ key: z.ZodLiteral<"dataforseo">;
701
+ units: z.ZodLiteral<1>;
702
+ }, z.core.$loose>;
703
+ }, z.core.$loose>], "_tag">;
704
+ }, z.core.$strip>>;
705
+ export declare const keywordResearchResponseSchema: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
706
+ data: z.ZodObject<{
707
+ readonly topic: z.ZodString;
708
+ readonly keywords: z.ZodArray<z.ZodObject<{
709
+ readonly keyword: z.ZodString;
710
+ readonly volume: z.ZodNullable<z.ZodNumber>;
711
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
712
+ readonly intent: z.ZodNullable<z.ZodString>;
713
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
714
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
715
+ readonly competition: z.ZodNullable<z.ZodNumber>;
716
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
717
+ HIGH: "HIGH";
718
+ LOW: "LOW";
719
+ MEDIUM: "MEDIUM";
720
+ }>>;
721
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
722
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
723
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
724
+ readonly year: z.ZodNumber;
725
+ readonly month: z.ZodNumber;
726
+ readonly volume: z.ZodNumber;
727
+ }, z.core.$strip>>>;
728
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
729
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
730
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
731
+ }, z.core.$strip>>;
732
+ readonly totalFound: z.ZodNumber;
733
+ readonly filters: z.ZodObject<{
734
+ minVolume: z.ZodNumber;
735
+ maxVolume: z.ZodNumber;
736
+ minDifficulty: z.ZodNumber;
737
+ maxDifficulty: z.ZodNumber;
738
+ intent: z.ZodOptional<z.ZodString>;
739
+ }, z.core.$strict>;
740
+ readonly message: z.ZodOptional<z.ZodString>;
741
+ readonly tip: z.ZodOptional<z.ZodString>;
742
+ readonly serpFallback: z.ZodOptional<z.ZodNullable<z.ZodObject<{
743
+ message: z.ZodString;
744
+ topResults: z.ZodArray<z.ZodObject<{
745
+ readonly position: z.ZodNumber;
746
+ readonly title: z.ZodString;
747
+ readonly domain: z.ZodString;
748
+ readonly url: z.ZodString;
749
+ }, z.core.$strip>>;
750
+ tip: z.ZodString;
751
+ }, z.core.$strict>>>;
752
+ readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
753
+ _tag: z.ZodLiteral<"no-provider">;
754
+ provider: z.ZodNull;
755
+ spend: z.ZodObject<{
756
+ key: z.ZodLiteral<"dataforseo">;
757
+ units: z.ZodLiteral<0>;
758
+ }, z.core.$strict>;
759
+ }, z.core.$strict>, z.ZodObject<{
760
+ _tag: z.ZodLiteral<"cache">;
761
+ provider: z.ZodLiteral<"dataforseo">;
762
+ spend: z.ZodObject<{
763
+ key: z.ZodLiteral<"dataforseo">;
764
+ units: z.ZodLiteral<0>;
765
+ }, z.core.$strict>;
766
+ }, z.core.$strict>, z.ZodObject<{
767
+ _tag: z.ZodLiteral<"live">;
768
+ provider: z.ZodLiteral<"dataforseo">;
769
+ spend: z.ZodObject<{
770
+ key: z.ZodLiteral<"dataforseo">;
771
+ units: z.ZodLiteral<1>;
772
+ }, z.core.$strict>;
773
+ }, z.core.$strict>], "_tag">;
774
+ }, z.core.$strip>;
775
+ meta: z.ZodObject<{
776
+ requestId: z.ZodString;
777
+ version: z.ZodLiteral<"1.0">;
778
+ }, z.core.$strict>;
779
+ }, z.core.$strip>, z.ZodObject<{
780
+ data: z.ZodObject<{
781
+ readonly topic: z.ZodString;
782
+ readonly keywords: z.ZodArray<z.ZodObject<{
783
+ readonly keyword: z.ZodString;
784
+ readonly volume: z.ZodNullable<z.ZodNumber>;
785
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
786
+ readonly intent: z.ZodNullable<z.ZodString>;
787
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
788
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
789
+ readonly competition: z.ZodNullable<z.ZodNumber>;
790
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
791
+ HIGH: "HIGH";
792
+ LOW: "LOW";
793
+ MEDIUM: "MEDIUM";
794
+ }>>;
795
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
796
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
797
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
798
+ readonly year: z.ZodNumber;
799
+ readonly month: z.ZodNumber;
800
+ readonly volume: z.ZodNumber;
801
+ }, z.core.$strip>>>;
802
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
803
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
804
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
805
+ }, z.core.$strip>>;
806
+ readonly totalFound: z.ZodNumber;
807
+ readonly filters: z.ZodObject<{
808
+ minVolume: z.ZodNumber;
809
+ maxVolume: z.ZodNumber;
810
+ minDifficulty: z.ZodNumber;
811
+ maxDifficulty: z.ZodNumber;
812
+ intent: z.ZodOptional<z.ZodString>;
813
+ }, z.core.$loose>;
814
+ readonly message: z.ZodOptional<z.ZodString>;
815
+ readonly tip: z.ZodOptional<z.ZodString>;
816
+ readonly serpFallback: z.ZodOptional<z.ZodNullable<z.ZodObject<{
817
+ message: z.ZodString;
818
+ topResults: z.ZodArray<z.ZodObject<{
819
+ readonly position: z.ZodNumber;
820
+ readonly title: z.ZodString;
821
+ readonly domain: z.ZodString;
822
+ readonly url: z.ZodString;
823
+ }, z.core.$strip>>;
824
+ tip: z.ZodString;
825
+ }, z.core.$loose>>>;
826
+ readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
827
+ _tag: z.ZodLiteral<"no-provider">;
828
+ provider: z.ZodNull;
829
+ spend: z.ZodObject<{
830
+ key: z.ZodLiteral<"dataforseo">;
831
+ units: z.ZodLiteral<0>;
832
+ }, z.core.$loose>;
833
+ }, z.core.$loose>, z.ZodObject<{
834
+ _tag: z.ZodLiteral<"cache">;
835
+ provider: z.ZodLiteral<"dataforseo">;
836
+ spend: z.ZodObject<{
837
+ key: z.ZodLiteral<"dataforseo">;
838
+ units: z.ZodLiteral<0>;
839
+ }, z.core.$loose>;
840
+ }, z.core.$loose>, z.ZodObject<{
841
+ _tag: z.ZodLiteral<"live">;
842
+ provider: z.ZodLiteral<"dataforseo">;
843
+ spend: z.ZodObject<{
844
+ key: z.ZodLiteral<"dataforseo">;
845
+ units: z.ZodLiteral<1>;
846
+ }, z.core.$loose>;
847
+ }, z.core.$loose>], "_tag">;
848
+ }, z.core.$strip>;
849
+ meta: z.ZodObject<{
850
+ requestId: z.ZodString;
851
+ version: z.ZodLiteral<"1.0">;
852
+ }, z.core.$loose>;
853
+ }, z.core.$strip>>;
854
+ export declare const serpResearchQuerySchema: z.ZodObject<{
855
+ keyword: z.ZodString;
856
+ depth: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
857
+ locationCode: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
858
+ }, z.core.$strict>;
859
+ declare const serpResearchDataSchema: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
860
+ readonly keyword: z.ZodString;
861
+ readonly depth: z.ZodNumber;
862
+ readonly results: z.ZodArray<z.ZodObject<{
863
+ readonly position: z.ZodNumber;
864
+ readonly url: z.ZodString;
865
+ readonly title: z.ZodString;
866
+ readonly domain: z.ZodString;
867
+ readonly description: z.ZodOptional<z.ZodString>;
868
+ }, z.core.$strip>>;
869
+ readonly serpFeatures: z.ZodArray<z.ZodString>;
870
+ readonly hasAiOverview: z.ZodBoolean;
871
+ readonly hasFeaturedSnippet: z.ZodBoolean;
872
+ readonly hasLocalPack: z.ZodBoolean;
873
+ readonly hasPeopleAlsoAsk: z.ZodBoolean;
874
+ readonly fetchedAt: z.ZodString;
875
+ readonly cached: z.ZodBoolean;
876
+ }, z.core.$strip>, z.ZodObject<{
877
+ readonly keyword: z.ZodString;
878
+ readonly depth: z.ZodNumber;
879
+ readonly results: z.ZodArray<z.ZodObject<{
880
+ readonly position: z.ZodNumber;
881
+ readonly url: z.ZodString;
882
+ readonly title: z.ZodString;
883
+ readonly domain: z.ZodString;
884
+ readonly description: z.ZodOptional<z.ZodString>;
885
+ }, z.core.$strip>>;
886
+ readonly serpFeatures: z.ZodArray<z.ZodString>;
887
+ readonly hasAiOverview: z.ZodBoolean;
888
+ readonly hasFeaturedSnippet: z.ZodBoolean;
889
+ readonly hasLocalPack: z.ZodBoolean;
890
+ readonly hasPeopleAlsoAsk: z.ZodBoolean;
891
+ readonly fetchedAt: z.ZodString;
892
+ readonly cached: z.ZodBoolean;
893
+ }, z.core.$strip>>;
894
+ export declare const serpResearchResponseSchema: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
895
+ data: z.ZodObject<{
896
+ readonly keyword: z.ZodString;
897
+ readonly depth: z.ZodNumber;
898
+ readonly results: z.ZodArray<z.ZodObject<{
899
+ readonly position: z.ZodNumber;
900
+ readonly url: z.ZodString;
901
+ readonly title: z.ZodString;
902
+ readonly domain: z.ZodString;
903
+ readonly description: z.ZodOptional<z.ZodString>;
904
+ }, z.core.$strip>>;
905
+ readonly serpFeatures: z.ZodArray<z.ZodString>;
906
+ readonly hasAiOverview: z.ZodBoolean;
907
+ readonly hasFeaturedSnippet: z.ZodBoolean;
908
+ readonly hasLocalPack: z.ZodBoolean;
909
+ readonly hasPeopleAlsoAsk: z.ZodBoolean;
910
+ readonly fetchedAt: z.ZodString;
911
+ readonly cached: z.ZodBoolean;
912
+ }, z.core.$strip>;
913
+ meta: z.ZodObject<{
914
+ requestId: z.ZodString;
915
+ version: z.ZodLiteral<"1.0">;
916
+ }, z.core.$strict>;
917
+ }, z.core.$strip>, z.ZodObject<{
918
+ data: z.ZodObject<{
919
+ readonly keyword: z.ZodString;
920
+ readonly depth: z.ZodNumber;
921
+ readonly results: z.ZodArray<z.ZodObject<{
922
+ readonly position: z.ZodNumber;
923
+ readonly url: z.ZodString;
924
+ readonly title: z.ZodString;
925
+ readonly domain: z.ZodString;
926
+ readonly description: z.ZodOptional<z.ZodString>;
927
+ }, z.core.$strip>>;
928
+ readonly serpFeatures: z.ZodArray<z.ZodString>;
929
+ readonly hasAiOverview: z.ZodBoolean;
930
+ readonly hasFeaturedSnippet: z.ZodBoolean;
931
+ readonly hasLocalPack: z.ZodBoolean;
932
+ readonly hasPeopleAlsoAsk: z.ZodBoolean;
933
+ readonly fetchedAt: z.ZodString;
934
+ readonly cached: z.ZodBoolean;
935
+ }, z.core.$strip>;
936
+ meta: z.ZodObject<{
937
+ requestId: z.ZodString;
938
+ version: z.ZodLiteral<"1.0">;
939
+ }, z.core.$loose>;
940
+ }, z.core.$strip>>;
941
+ export declare const rankingsResearchQuerySchema: z.ZodObject<{
942
+ domain: z.ZodString;
943
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
944
+ minPosition: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
945
+ maxPosition: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
946
+ locationCode: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
947
+ order: z.ZodDefault<z.ZodEnum<{
948
+ position: "position";
949
+ traffic: "traffic";
950
+ }>>;
951
+ }, z.core.$strict>;
952
+ declare const rankingsResearchDataSchema: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
953
+ readonly domain: z.ZodString;
954
+ readonly keywords: z.ZodArray<z.ZodObject<{
955
+ readonly keyword: z.ZodString;
956
+ readonly position: z.ZodNumber;
957
+ readonly volume: z.ZodNumber;
958
+ readonly traffic: z.ZodNumber;
959
+ readonly url: z.ZodString;
960
+ readonly intent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
961
+ }, z.core.$strip>>;
962
+ readonly totalFound: z.ZodNumber;
963
+ readonly metrics: z.ZodNullable<z.ZodObject<{
964
+ readonly organicTraffic: z.ZodNumber;
965
+ readonly totalKeywords: z.ZodNumber;
966
+ readonly keywordFootprint: z.ZodObject<{
967
+ score: z.ZodNullable<z.ZodNumber>;
968
+ scale: z.ZodObject<{
969
+ min: z.ZodLiteral<0>;
970
+ max: z.ZodLiteral<100>;
971
+ }, z.core.$strict>;
972
+ provenance: z.ZodLiteral<"local-keyword-count">;
973
+ }, z.core.$strict>;
974
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
975
+ readonly topPages: z.ZodArray<z.ZodObject<{
976
+ readonly path: z.ZodString;
977
+ readonly traffic: z.ZodNumber;
978
+ readonly keywords: z.ZodNumber;
979
+ }, z.core.$strip>>;
980
+ }, z.core.$strip>>;
981
+ readonly positionRange: z.ZodOptional<z.ZodObject<{
982
+ min: z.ZodNumber;
983
+ max: z.ZodNumber;
984
+ }, z.core.$strict>>;
985
+ readonly message: z.ZodOptional<z.ZodString>;
986
+ readonly cached: z.ZodBoolean;
987
+ }, z.core.$strip>, z.ZodObject<{
988
+ readonly domain: z.ZodString;
989
+ readonly keywords: z.ZodArray<z.ZodObject<{
990
+ readonly keyword: z.ZodString;
991
+ readonly position: z.ZodNumber;
992
+ readonly volume: z.ZodNumber;
993
+ readonly traffic: z.ZodNumber;
994
+ readonly url: z.ZodString;
995
+ readonly intent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
996
+ }, z.core.$strip>>;
997
+ readonly totalFound: z.ZodNumber;
998
+ readonly metrics: z.ZodNullable<z.ZodObject<{
999
+ readonly organicTraffic: z.ZodNumber;
1000
+ readonly totalKeywords: z.ZodNumber;
1001
+ readonly keywordFootprint: z.ZodObject<{
1002
+ score: z.ZodNullable<z.ZodNumber>;
1003
+ scale: z.ZodObject<{
1004
+ min: z.ZodLiteral<0>;
1005
+ max: z.ZodLiteral<100>;
1006
+ }, z.core.$loose>;
1007
+ provenance: z.ZodLiteral<"local-keyword-count">;
1008
+ }, z.core.$loose>;
1009
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
1010
+ readonly topPages: z.ZodArray<z.ZodObject<{
1011
+ readonly path: z.ZodString;
1012
+ readonly traffic: z.ZodNumber;
1013
+ readonly keywords: z.ZodNumber;
1014
+ }, z.core.$strip>>;
1015
+ }, z.core.$strip>>;
1016
+ readonly positionRange: z.ZodOptional<z.ZodObject<{
1017
+ min: z.ZodNumber;
1018
+ max: z.ZodNumber;
1019
+ }, z.core.$loose>>;
1020
+ readonly message: z.ZodOptional<z.ZodString>;
1021
+ readonly cached: z.ZodBoolean;
1022
+ }, z.core.$strip>>;
1023
+ export declare const rankingsResearchResponseSchema: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
1024
+ data: z.ZodObject<{
1025
+ readonly domain: z.ZodString;
1026
+ readonly keywords: z.ZodArray<z.ZodObject<{
1027
+ readonly keyword: z.ZodString;
1028
+ readonly position: z.ZodNumber;
1029
+ readonly volume: z.ZodNumber;
1030
+ readonly traffic: z.ZodNumber;
1031
+ readonly url: z.ZodString;
1032
+ readonly intent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1033
+ }, z.core.$strip>>;
1034
+ readonly totalFound: z.ZodNumber;
1035
+ readonly metrics: z.ZodNullable<z.ZodObject<{
1036
+ readonly organicTraffic: z.ZodNumber;
1037
+ readonly totalKeywords: z.ZodNumber;
1038
+ readonly keywordFootprint: z.ZodObject<{
1039
+ score: z.ZodNullable<z.ZodNumber>;
1040
+ scale: z.ZodObject<{
1041
+ min: z.ZodLiteral<0>;
1042
+ max: z.ZodLiteral<100>;
1043
+ }, z.core.$strict>;
1044
+ provenance: z.ZodLiteral<"local-keyword-count">;
1045
+ }, z.core.$strict>;
1046
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
1047
+ readonly topPages: z.ZodArray<z.ZodObject<{
1048
+ readonly path: z.ZodString;
1049
+ readonly traffic: z.ZodNumber;
1050
+ readonly keywords: z.ZodNumber;
1051
+ }, z.core.$strip>>;
1052
+ }, z.core.$strip>>;
1053
+ readonly positionRange: z.ZodOptional<z.ZodObject<{
1054
+ min: z.ZodNumber;
1055
+ max: z.ZodNumber;
1056
+ }, z.core.$strict>>;
1057
+ readonly message: z.ZodOptional<z.ZodString>;
1058
+ readonly cached: z.ZodBoolean;
1059
+ }, z.core.$strip>;
1060
+ meta: z.ZodObject<{
1061
+ requestId: z.ZodString;
1062
+ version: z.ZodLiteral<"1.0">;
1063
+ }, z.core.$strict>;
1064
+ }, z.core.$strip>, z.ZodObject<{
1065
+ data: z.ZodObject<{
1066
+ readonly domain: z.ZodString;
1067
+ readonly keywords: z.ZodArray<z.ZodObject<{
1068
+ readonly keyword: z.ZodString;
1069
+ readonly position: z.ZodNumber;
1070
+ readonly volume: z.ZodNumber;
1071
+ readonly traffic: z.ZodNumber;
1072
+ readonly url: z.ZodString;
1073
+ readonly intent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1074
+ }, z.core.$strip>>;
1075
+ readonly totalFound: z.ZodNumber;
1076
+ readonly metrics: z.ZodNullable<z.ZodObject<{
1077
+ readonly organicTraffic: z.ZodNumber;
1078
+ readonly totalKeywords: z.ZodNumber;
1079
+ readonly keywordFootprint: z.ZodObject<{
1080
+ score: z.ZodNullable<z.ZodNumber>;
1081
+ scale: z.ZodObject<{
1082
+ min: z.ZodLiteral<0>;
1083
+ max: z.ZodLiteral<100>;
1084
+ }, z.core.$loose>;
1085
+ provenance: z.ZodLiteral<"local-keyword-count">;
1086
+ }, z.core.$loose>;
1087
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
1088
+ readonly topPages: z.ZodArray<z.ZodObject<{
1089
+ readonly path: z.ZodString;
1090
+ readonly traffic: z.ZodNumber;
1091
+ readonly keywords: z.ZodNumber;
1092
+ }, z.core.$strip>>;
1093
+ }, z.core.$strip>>;
1094
+ readonly positionRange: z.ZodOptional<z.ZodObject<{
1095
+ min: z.ZodNumber;
1096
+ max: z.ZodNumber;
1097
+ }, z.core.$loose>>;
1098
+ readonly message: z.ZodOptional<z.ZodString>;
1099
+ readonly cached: z.ZodBoolean;
1100
+ }, z.core.$strip>;
1101
+ meta: z.ZodObject<{
1102
+ requestId: z.ZodString;
1103
+ version: z.ZodLiteral<"1.0">;
1104
+ }, z.core.$loose>;
1105
+ }, z.core.$strip>>;
1106
+ export type KeywordResearchQuery = z.input<typeof keywordResearchQuerySchema>;
1107
+ export type KeywordResearchData = z.output<typeof keywordResearchDataSchema.client>;
1108
+ export type SerpResearchQuery = z.input<typeof serpResearchQuerySchema>;
1109
+ export type SerpResearchData = z.output<typeof serpResearchDataSchema.client>;
1110
+ export type RankingsResearchQuery = z.input<typeof rankingsResearchQuerySchema>;
1111
+ export type RankingsResearchData = z.output<typeof rankingsResearchDataSchema.client>;
546
1112
  export declare const storedResearchOverviewOperation: {
547
1113
  readonly id: 'research.overview';
548
1114
  readonly method: 'GET';
@@ -856,74 +1422,900 @@ export declare const storedResearchOverviewOperation: {
856
1422
  }];
857
1423
  };
858
1424
  };
859
- export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
860
- readonly overview: {
861
- readonly id: 'research.overview';
862
- readonly method: 'GET';
863
- readonly path: '/api/v1/sites/{siteId}/research';
864
- readonly visibility: 'public';
865
- readonly semantics: {
866
- readonly kind: 'query';
867
- readonly sideEffects: 'none';
868
- readonly retry: 'idempotent';
869
- readonly readConsistency: 'primary';
870
- };
871
- readonly auth: {
872
- readonly credentials: readonly ["session", "api_token"];
873
- readonly scopes: readonly ["research:read"];
874
- readonly minimumRole: 'viewer';
875
- readonly ownership: 'site';
876
- };
877
- readonly request: {
878
- readonly params: z.ZodObject<{
879
- siteId: z.ZodString;
880
- }, z.core.$strict>;
881
- readonly query: null;
882
- readonly headers: null;
883
- readonly body: null;
884
- };
885
- readonly responses: {
886
- readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
887
- data: z.ZodObject<{
888
- readonly evidence: z.ZodObject<{
889
- _tag: z.ZodLiteral<"stored">;
890
- provider: z.ZodLiteral<"dataforseo">;
891
- collectedAt: z.ZodNullable<z.ZodString>;
1425
+ export declare const keywordResearchOperation: {
1426
+ readonly id: 'research.keywords';
1427
+ readonly method: 'GET';
1428
+ readonly path: '/api/v1/sites/{siteId}/research/keywords';
1429
+ readonly visibility: 'public';
1430
+ readonly semantics: {
1431
+ readonly kind: 'query';
1432
+ readonly sideEffects: 'none';
1433
+ readonly retry: 'idempotent';
1434
+ readonly readConsistency: 'primary';
1435
+ };
1436
+ readonly auth: {
1437
+ readonly credentials: readonly ['session', 'api_token'];
1438
+ readonly scopes: readonly ['research:read'];
1439
+ readonly minimumRole: 'viewer';
1440
+ readonly ownership: 'site';
1441
+ };
1442
+ readonly request: {
1443
+ readonly params: z.ZodObject<{
1444
+ siteId: z.ZodString;
1445
+ }, z.core.$strict>;
1446
+ readonly query: z.ZodObject<{
1447
+ topic: z.ZodString;
1448
+ minVolume: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
1449
+ maxVolume: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
1450
+ minDifficulty: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
1451
+ maxDifficulty: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
1452
+ intent: z.ZodOptional<z.ZodString>;
1453
+ includeRelated: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
1454
+ 0: "0";
1455
+ 1: "1";
1456
+ false: "false";
1457
+ true: "true";
1458
+ }>]>, z.ZodTransform<boolean, "0" | "1" | "false" | "true" | boolean>>>;
1459
+ verbose: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
1460
+ 0: "0";
1461
+ 1: "1";
1462
+ false: "false";
1463
+ true: "true";
1464
+ }>]>, z.ZodTransform<boolean, "0" | "1" | "false" | "true" | boolean>>>;
1465
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
1466
+ locationCode: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
1467
+ }, z.core.$strict>;
1468
+ readonly headers: null;
1469
+ readonly body: null;
1470
+ };
1471
+ readonly responses: {
1472
+ readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
1473
+ data: z.ZodObject<{
1474
+ readonly topic: z.ZodString;
1475
+ readonly keywords: z.ZodArray<z.ZodObject<{
1476
+ readonly keyword: z.ZodString;
1477
+ readonly volume: z.ZodNullable<z.ZodNumber>;
1478
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
1479
+ readonly intent: z.ZodNullable<z.ZodString>;
1480
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
1481
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
1482
+ readonly competition: z.ZodNullable<z.ZodNumber>;
1483
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
1484
+ HIGH: "HIGH";
1485
+ LOW: "LOW";
1486
+ MEDIUM: "MEDIUM";
1487
+ }>>;
1488
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
1489
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
1490
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
1491
+ readonly year: z.ZodNumber;
1492
+ readonly month: z.ZodNumber;
1493
+ readonly volume: z.ZodNumber;
1494
+ }, z.core.$strip>>>;
1495
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
1496
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
1497
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
1498
+ }, z.core.$strip>>;
1499
+ readonly totalFound: z.ZodNumber;
1500
+ readonly filters: z.ZodObject<{
1501
+ minVolume: z.ZodNumber;
1502
+ maxVolume: z.ZodNumber;
1503
+ minDifficulty: z.ZodNumber;
1504
+ maxDifficulty: z.ZodNumber;
1505
+ intent: z.ZodOptional<z.ZodString>;
1506
+ }, z.core.$strict>;
1507
+ readonly message: z.ZodOptional<z.ZodString>;
1508
+ readonly tip: z.ZodOptional<z.ZodString>;
1509
+ readonly serpFallback: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1510
+ message: z.ZodString;
1511
+ topResults: z.ZodArray<z.ZodObject<{
1512
+ readonly position: z.ZodNumber;
1513
+ readonly title: z.ZodString;
1514
+ readonly domain: z.ZodString;
1515
+ readonly url: z.ZodString;
1516
+ }, z.core.$strip>>;
1517
+ tip: z.ZodString;
1518
+ }, z.core.$strict>>>;
1519
+ readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
1520
+ _tag: z.ZodLiteral<"no-provider">;
1521
+ provider: z.ZodNull;
1522
+ spend: z.ZodObject<{
1523
+ key: z.ZodLiteral<"dataforseo">;
1524
+ units: z.ZodLiteral<0>;
892
1525
  }, z.core.$strict>;
893
- readonly summary: z.ZodObject<{
894
- competitorCount: z.ZodNumber;
895
- quickWins: z.ZodNumber;
896
- totalSharedKeywords: z.ZodNumber;
897
- totalTrafficValue: z.ZodNumber;
1526
+ }, z.core.$strict>, z.ZodObject<{
1527
+ _tag: z.ZodLiteral<"cache">;
1528
+ provider: z.ZodLiteral<"dataforseo">;
1529
+ spend: z.ZodObject<{
1530
+ key: z.ZodLiteral<"dataforseo">;
1531
+ units: z.ZodLiteral<0>;
898
1532
  }, z.core.$strict>;
899
- readonly subject: z.ZodNullable<z.ZodObject<{
1533
+ }, z.core.$strict>, z.ZodObject<{
1534
+ _tag: z.ZodLiteral<"live">;
1535
+ provider: z.ZodLiteral<"dataforseo">;
1536
+ spend: z.ZodObject<{
1537
+ key: z.ZodLiteral<"dataforseo">;
1538
+ units: z.ZodLiteral<1>;
1539
+ }, z.core.$strict>;
1540
+ }, z.core.$strict>], "_tag">;
1541
+ }, z.core.$strip>;
1542
+ meta: z.ZodObject<{
1543
+ requestId: z.ZodString;
1544
+ version: z.ZodLiteral<"1.0">;
1545
+ }, z.core.$strict>;
1546
+ }, z.core.$strip>, z.ZodObject<{
1547
+ data: z.ZodObject<{
1548
+ readonly topic: z.ZodString;
1549
+ readonly keywords: z.ZodArray<z.ZodObject<{
1550
+ readonly keyword: z.ZodString;
1551
+ readonly volume: z.ZodNullable<z.ZodNumber>;
1552
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
1553
+ readonly intent: z.ZodNullable<z.ZodString>;
1554
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
1555
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
1556
+ readonly competition: z.ZodNullable<z.ZodNumber>;
1557
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
1558
+ HIGH: "HIGH";
1559
+ LOW: "LOW";
1560
+ MEDIUM: "MEDIUM";
1561
+ }>>;
1562
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
1563
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
1564
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
1565
+ readonly year: z.ZodNumber;
1566
+ readonly month: z.ZodNumber;
1567
+ readonly volume: z.ZodNumber;
1568
+ }, z.core.$strip>>>;
1569
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
1570
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
1571
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
1572
+ }, z.core.$strip>>;
1573
+ readonly totalFound: z.ZodNumber;
1574
+ readonly filters: z.ZodObject<{
1575
+ minVolume: z.ZodNumber;
1576
+ maxVolume: z.ZodNumber;
1577
+ minDifficulty: z.ZodNumber;
1578
+ maxDifficulty: z.ZodNumber;
1579
+ intent: z.ZodOptional<z.ZodString>;
1580
+ }, z.core.$loose>;
1581
+ readonly message: z.ZodOptional<z.ZodString>;
1582
+ readonly tip: z.ZodOptional<z.ZodString>;
1583
+ readonly serpFallback: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1584
+ message: z.ZodString;
1585
+ topResults: z.ZodArray<z.ZodObject<{
1586
+ readonly position: z.ZodNumber;
1587
+ readonly title: z.ZodString;
900
1588
  readonly domain: z.ZodString;
901
- readonly metrics: z.ZodObject<{
902
- readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
903
- readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
904
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
905
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
906
- }, z.core.$strip>;
907
- readonly history: z.ZodArray<z.ZodObject<{
908
- readonly observedAt: z.ZodNullable<z.ZodString>;
909
- readonly metrics: z.ZodObject<{
910
- readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
911
- readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
912
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
913
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
914
- }, z.core.$strip>;
915
- }, z.core.$strip>>;
916
- readonly collectedAt: z.ZodNullable<z.ZodString>;
1589
+ readonly url: z.ZodString;
917
1590
  }, z.core.$strip>>;
918
- readonly competitors: z.ZodArray<z.ZodObject<{
919
- readonly domain: z.ZodString;
920
- readonly discovery: z.ZodEnum<{
921
- automatic: "automatic";
922
- manual: "manual";
923
- unknown: "unknown";
924
- }>;
925
- readonly metrics: z.ZodObject<{
926
- readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
1591
+ tip: z.ZodString;
1592
+ }, z.core.$loose>>>;
1593
+ readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
1594
+ _tag: z.ZodLiteral<"no-provider">;
1595
+ provider: z.ZodNull;
1596
+ spend: z.ZodObject<{
1597
+ key: z.ZodLiteral<"dataforseo">;
1598
+ units: z.ZodLiteral<0>;
1599
+ }, z.core.$loose>;
1600
+ }, z.core.$loose>, z.ZodObject<{
1601
+ _tag: z.ZodLiteral<"cache">;
1602
+ provider: z.ZodLiteral<"dataforseo">;
1603
+ spend: z.ZodObject<{
1604
+ key: z.ZodLiteral<"dataforseo">;
1605
+ units: z.ZodLiteral<0>;
1606
+ }, z.core.$loose>;
1607
+ }, z.core.$loose>, z.ZodObject<{
1608
+ _tag: z.ZodLiteral<"live">;
1609
+ provider: z.ZodLiteral<"dataforseo">;
1610
+ spend: z.ZodObject<{
1611
+ key: z.ZodLiteral<"dataforseo">;
1612
+ units: z.ZodLiteral<1>;
1613
+ }, z.core.$loose>;
1614
+ }, z.core.$loose>], "_tag">;
1615
+ }, z.core.$strip>;
1616
+ meta: z.ZodObject<{
1617
+ requestId: z.ZodString;
1618
+ version: z.ZodLiteral<"1.0">;
1619
+ }, z.core.$loose>;
1620
+ }, z.core.$strip>>;
1621
+ };
1622
+ readonly errors: readonly ["invalid_request", "unauthorized", "auth_expired", "forbidden", "not_found", "entitlement_required", "quota_exhausted", "provider_unavailable", "conflict", "rate_limited", "contract_violation", "internal_error"];
1623
+ readonly errorResponse: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
1624
+ readonly error: z.ZodObject<{
1625
+ code: z.ZodEnum<{
1626
+ auth_expired: "auth_expired";
1627
+ conflict: "conflict";
1628
+ contract_violation: "contract_violation";
1629
+ entitlement_required: "entitlement_required";
1630
+ forbidden: "forbidden";
1631
+ internal_error: "internal_error";
1632
+ invalid_request: "invalid_request";
1633
+ not_found: "not_found";
1634
+ provider_unavailable: "provider_unavailable";
1635
+ quota_exhausted: "quota_exhausted";
1636
+ rate_limited: "rate_limited";
1637
+ site_ambiguous: "site_ambiguous";
1638
+ stale_evidence: "stale_evidence";
1639
+ unauthorized: "unauthorized";
1640
+ }>;
1641
+ message: z.ZodString;
1642
+ requestId: z.ZodString;
1643
+ retryable: z.ZodBoolean;
1644
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
1645
+ }, z.core.$strict>;
1646
+ }, z.core.$strip>, z.ZodObject<{
1647
+ readonly error: z.ZodObject<{
1648
+ code: z.ZodEnum<{
1649
+ auth_expired: "auth_expired";
1650
+ conflict: "conflict";
1651
+ contract_violation: "contract_violation";
1652
+ entitlement_required: "entitlement_required";
1653
+ forbidden: "forbidden";
1654
+ internal_error: "internal_error";
1655
+ invalid_request: "invalid_request";
1656
+ not_found: "not_found";
1657
+ provider_unavailable: "provider_unavailable";
1658
+ quota_exhausted: "quota_exhausted";
1659
+ rate_limited: "rate_limited";
1660
+ site_ambiguous: "site_ambiguous";
1661
+ stale_evidence: "stale_evidence";
1662
+ unauthorized: "unauthorized";
1663
+ }>;
1664
+ message: z.ZodString;
1665
+ requestId: z.ZodString;
1666
+ retryable: z.ZodBoolean;
1667
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
1668
+ }, z.core.$loose>;
1669
+ }, z.core.$strip>>;
1670
+ readonly resources: {
1671
+ readonly reads: readonly [{
1672
+ readonly type: 'site.research';
1673
+ readonly idFrom: 'params.siteId';
1674
+ }];
1675
+ readonly changes: readonly [];
1676
+ };
1677
+ readonly policy: {
1678
+ readonly rate: {
1679
+ readonly name: 'public-v1-fixed-window';
1680
+ readonly limit: 50;
1681
+ readonly windowSeconds: 60;
1682
+ };
1683
+ readonly idempotency: {
1684
+ readonly _tag: 'none';
1685
+ };
1686
+ readonly entitlement: 'growth';
1687
+ readonly meter: {
1688
+ readonly key: 'dataforseo';
1689
+ readonly units: 1;
1690
+ readonly charge: 'live-only';
1691
+ };
1692
+ };
1693
+ readonly lifecycle: {
1694
+ readonly introduced: '1.0.0';
1695
+ };
1696
+ readonly docs: {
1697
+ readonly summary: 'Research keyword ideas';
1698
+ 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.';
1699
+ readonly tags: readonly ["Research"];
1700
+ readonly examples: readonly [{
1701
+ readonly request: {
1702
+ readonly params: {
1703
+ readonly siteId: 'site_01JXYZ';
1704
+ };
1705
+ readonly query: {
1706
+ readonly topic: 'nuxt seo';
1707
+ readonly limit: 20;
1708
+ };
1709
+ };
1710
+ readonly response: {
1711
+ readonly status: 200;
1712
+ readonly body: {
1713
+ readonly data: {
1714
+ readonly topic: 'nuxt seo';
1715
+ readonly keywords: readonly [];
1716
+ readonly totalFound: 0;
1717
+ readonly filters: {
1718
+ readonly minVolume: 10;
1719
+ readonly maxVolume: 10000;
1720
+ readonly minDifficulty: 0;
1721
+ readonly maxDifficulty: 60;
1722
+ };
1723
+ readonly evidence: {
1724
+ readonly _tag: 'live';
1725
+ readonly provider: 'dataforseo';
1726
+ readonly spend: {
1727
+ readonly key: 'dataforseo';
1728
+ readonly units: 1;
1729
+ };
1730
+ };
1731
+ };
1732
+ readonly meta: {
1733
+ readonly requestId: 'req_01JXYZ';
1734
+ readonly version: '1.0';
1735
+ };
1736
+ };
1737
+ };
1738
+ }];
1739
+ };
1740
+ };
1741
+ export declare const serpResearchOperation: {
1742
+ readonly id: 'research.serp';
1743
+ readonly method: 'GET';
1744
+ readonly path: '/api/v1/sites/{siteId}/research/serp';
1745
+ readonly visibility: 'public';
1746
+ readonly semantics: {
1747
+ readonly kind: 'query';
1748
+ readonly sideEffects: 'none';
1749
+ readonly retry: 'idempotent';
1750
+ readonly readConsistency: 'primary';
1751
+ };
1752
+ readonly auth: {
1753
+ readonly credentials: readonly ['session', 'api_token'];
1754
+ readonly scopes: readonly ['research:read'];
1755
+ readonly minimumRole: 'viewer';
1756
+ readonly ownership: 'site';
1757
+ };
1758
+ readonly request: {
1759
+ readonly params: z.ZodObject<{
1760
+ siteId: z.ZodString;
1761
+ }, z.core.$strict>;
1762
+ readonly query: z.ZodObject<{
1763
+ keyword: z.ZodString;
1764
+ depth: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
1765
+ locationCode: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
1766
+ }, z.core.$strict>;
1767
+ readonly headers: null;
1768
+ readonly body: null;
1769
+ };
1770
+ readonly responses: {
1771
+ readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
1772
+ data: z.ZodObject<{
1773
+ readonly keyword: z.ZodString;
1774
+ readonly depth: z.ZodNumber;
1775
+ readonly results: z.ZodArray<z.ZodObject<{
1776
+ readonly position: z.ZodNumber;
1777
+ readonly url: z.ZodString;
1778
+ readonly title: z.ZodString;
1779
+ readonly domain: z.ZodString;
1780
+ readonly description: z.ZodOptional<z.ZodString>;
1781
+ }, z.core.$strip>>;
1782
+ readonly serpFeatures: z.ZodArray<z.ZodString>;
1783
+ readonly hasAiOverview: z.ZodBoolean;
1784
+ readonly hasFeaturedSnippet: z.ZodBoolean;
1785
+ readonly hasLocalPack: z.ZodBoolean;
1786
+ readonly hasPeopleAlsoAsk: z.ZodBoolean;
1787
+ readonly fetchedAt: z.ZodString;
1788
+ readonly cached: z.ZodBoolean;
1789
+ }, z.core.$strip>;
1790
+ meta: z.ZodObject<{
1791
+ requestId: z.ZodString;
1792
+ version: z.ZodLiteral<"1.0">;
1793
+ }, z.core.$strict>;
1794
+ }, z.core.$strip>, z.ZodObject<{
1795
+ data: z.ZodObject<{
1796
+ readonly keyword: z.ZodString;
1797
+ readonly depth: z.ZodNumber;
1798
+ readonly results: z.ZodArray<z.ZodObject<{
1799
+ readonly position: z.ZodNumber;
1800
+ readonly url: z.ZodString;
1801
+ readonly title: z.ZodString;
1802
+ readonly domain: z.ZodString;
1803
+ readonly description: z.ZodOptional<z.ZodString>;
1804
+ }, z.core.$strip>>;
1805
+ readonly serpFeatures: z.ZodArray<z.ZodString>;
1806
+ readonly hasAiOverview: z.ZodBoolean;
1807
+ readonly hasFeaturedSnippet: z.ZodBoolean;
1808
+ readonly hasLocalPack: z.ZodBoolean;
1809
+ readonly hasPeopleAlsoAsk: z.ZodBoolean;
1810
+ readonly fetchedAt: z.ZodString;
1811
+ readonly cached: z.ZodBoolean;
1812
+ }, z.core.$strip>;
1813
+ meta: z.ZodObject<{
1814
+ requestId: z.ZodString;
1815
+ version: z.ZodLiteral<"1.0">;
1816
+ }, z.core.$loose>;
1817
+ }, z.core.$strip>>;
1818
+ };
1819
+ readonly errors: readonly ["invalid_request", "unauthorized", "auth_expired", "forbidden", "not_found", "entitlement_required", "quota_exhausted", "provider_unavailable", "conflict", "rate_limited", "contract_violation", "internal_error"];
1820
+ readonly errorResponse: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
1821
+ readonly error: z.ZodObject<{
1822
+ code: z.ZodEnum<{
1823
+ auth_expired: "auth_expired";
1824
+ conflict: "conflict";
1825
+ contract_violation: "contract_violation";
1826
+ entitlement_required: "entitlement_required";
1827
+ forbidden: "forbidden";
1828
+ internal_error: "internal_error";
1829
+ invalid_request: "invalid_request";
1830
+ not_found: "not_found";
1831
+ provider_unavailable: "provider_unavailable";
1832
+ quota_exhausted: "quota_exhausted";
1833
+ rate_limited: "rate_limited";
1834
+ site_ambiguous: "site_ambiguous";
1835
+ stale_evidence: "stale_evidence";
1836
+ unauthorized: "unauthorized";
1837
+ }>;
1838
+ message: z.ZodString;
1839
+ requestId: z.ZodString;
1840
+ retryable: z.ZodBoolean;
1841
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
1842
+ }, z.core.$strict>;
1843
+ }, z.core.$strip>, z.ZodObject<{
1844
+ readonly error: z.ZodObject<{
1845
+ code: z.ZodEnum<{
1846
+ auth_expired: "auth_expired";
1847
+ conflict: "conflict";
1848
+ contract_violation: "contract_violation";
1849
+ entitlement_required: "entitlement_required";
1850
+ forbidden: "forbidden";
1851
+ internal_error: "internal_error";
1852
+ invalid_request: "invalid_request";
1853
+ not_found: "not_found";
1854
+ provider_unavailable: "provider_unavailable";
1855
+ quota_exhausted: "quota_exhausted";
1856
+ rate_limited: "rate_limited";
1857
+ site_ambiguous: "site_ambiguous";
1858
+ stale_evidence: "stale_evidence";
1859
+ unauthorized: "unauthorized";
1860
+ }>;
1861
+ message: z.ZodString;
1862
+ requestId: z.ZodString;
1863
+ retryable: z.ZodBoolean;
1864
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
1865
+ }, z.core.$loose>;
1866
+ }, z.core.$strip>>;
1867
+ readonly resources: {
1868
+ readonly reads: readonly [{
1869
+ readonly type: 'site.research';
1870
+ readonly idFrom: 'params.siteId';
1871
+ }];
1872
+ readonly changes: readonly [];
1873
+ };
1874
+ readonly policy: {
1875
+ readonly rate: {
1876
+ readonly name: 'public-v1-fixed-window';
1877
+ readonly limit: 50;
1878
+ readonly windowSeconds: 60;
1879
+ };
1880
+ readonly idempotency: {
1881
+ readonly _tag: 'none';
1882
+ };
1883
+ readonly entitlement: 'growth';
1884
+ readonly meter: {
1885
+ readonly key: 'dataforseo';
1886
+ readonly units: 1;
1887
+ readonly charge: 'live-only';
1888
+ };
1889
+ };
1890
+ readonly lifecycle: {
1891
+ readonly introduced: '1.0.0';
1892
+ };
1893
+ readonly docs: {
1894
+ readonly summary: 'Analyze a Google SERP';
1895
+ readonly description: 'Returns one dated SERP snapshot and its result features. Cached reads consume no units.';
1896
+ readonly tags: readonly ["Research"];
1897
+ readonly examples: readonly [{
1898
+ readonly request: {
1899
+ readonly params: {
1900
+ readonly siteId: 'site_01JXYZ';
1901
+ };
1902
+ readonly query: {
1903
+ readonly keyword: 'nuxt seo';
1904
+ readonly depth: 10;
1905
+ };
1906
+ };
1907
+ readonly response: {
1908
+ readonly status: 200;
1909
+ readonly body: {
1910
+ readonly data: {
1911
+ readonly keyword: 'nuxt seo';
1912
+ readonly depth: 10;
1913
+ readonly results: readonly [];
1914
+ readonly serpFeatures: readonly [];
1915
+ readonly hasAiOverview: false;
1916
+ readonly hasFeaturedSnippet: false;
1917
+ readonly hasLocalPack: false;
1918
+ readonly hasPeopleAlsoAsk: false;
1919
+ readonly fetchedAt: '2026-08-20T00:00:00.000Z';
1920
+ readonly cached: false;
1921
+ };
1922
+ readonly meta: {
1923
+ readonly requestId: 'req_01JXYZ';
1924
+ readonly version: '1.0';
1925
+ };
1926
+ };
1927
+ };
1928
+ }];
1929
+ };
1930
+ };
1931
+ export declare const rankingsResearchOperation: {
1932
+ readonly id: 'research.rankings';
1933
+ readonly method: 'GET';
1934
+ readonly path: '/api/v1/sites/{siteId}/research/rankings';
1935
+ readonly visibility: 'public';
1936
+ readonly semantics: {
1937
+ readonly kind: 'query';
1938
+ readonly sideEffects: 'none';
1939
+ readonly retry: 'idempotent';
1940
+ readonly readConsistency: 'primary';
1941
+ };
1942
+ readonly auth: {
1943
+ readonly credentials: readonly ['session', 'api_token'];
1944
+ readonly scopes: readonly ['research:read'];
1945
+ readonly minimumRole: 'viewer';
1946
+ readonly ownership: 'site';
1947
+ };
1948
+ readonly request: {
1949
+ readonly params: z.ZodObject<{
1950
+ siteId: z.ZodString;
1951
+ }, z.core.$strict>;
1952
+ readonly query: z.ZodObject<{
1953
+ domain: z.ZodString;
1954
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
1955
+ minPosition: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
1956
+ maxPosition: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
1957
+ locationCode: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
1958
+ order: z.ZodDefault<z.ZodEnum<{
1959
+ position: "position";
1960
+ traffic: "traffic";
1961
+ }>>;
1962
+ }, z.core.$strict>;
1963
+ readonly headers: null;
1964
+ readonly body: null;
1965
+ };
1966
+ readonly responses: {
1967
+ readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
1968
+ data: z.ZodObject<{
1969
+ readonly domain: z.ZodString;
1970
+ readonly keywords: z.ZodArray<z.ZodObject<{
1971
+ readonly keyword: z.ZodString;
1972
+ readonly position: z.ZodNumber;
1973
+ readonly volume: z.ZodNumber;
1974
+ readonly traffic: z.ZodNumber;
1975
+ readonly url: z.ZodString;
1976
+ readonly intent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1977
+ }, z.core.$strip>>;
1978
+ readonly totalFound: z.ZodNumber;
1979
+ readonly metrics: z.ZodNullable<z.ZodObject<{
1980
+ readonly organicTraffic: z.ZodNumber;
1981
+ readonly totalKeywords: z.ZodNumber;
1982
+ readonly keywordFootprint: z.ZodObject<{
1983
+ score: z.ZodNullable<z.ZodNumber>;
1984
+ scale: z.ZodObject<{
1985
+ min: z.ZodLiteral<0>;
1986
+ max: z.ZodLiteral<100>;
1987
+ }, z.core.$strict>;
1988
+ provenance: z.ZodLiteral<"local-keyword-count">;
1989
+ }, z.core.$strict>;
1990
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
1991
+ readonly topPages: z.ZodArray<z.ZodObject<{
1992
+ readonly path: z.ZodString;
1993
+ readonly traffic: z.ZodNumber;
1994
+ readonly keywords: z.ZodNumber;
1995
+ }, z.core.$strip>>;
1996
+ }, z.core.$strip>>;
1997
+ readonly positionRange: z.ZodOptional<z.ZodObject<{
1998
+ min: z.ZodNumber;
1999
+ max: z.ZodNumber;
2000
+ }, z.core.$strict>>;
2001
+ readonly message: z.ZodOptional<z.ZodString>;
2002
+ readonly cached: z.ZodBoolean;
2003
+ }, z.core.$strip>;
2004
+ meta: z.ZodObject<{
2005
+ requestId: z.ZodString;
2006
+ version: z.ZodLiteral<"1.0">;
2007
+ }, z.core.$strict>;
2008
+ }, z.core.$strip>, z.ZodObject<{
2009
+ data: z.ZodObject<{
2010
+ readonly domain: z.ZodString;
2011
+ readonly keywords: z.ZodArray<z.ZodObject<{
2012
+ readonly keyword: z.ZodString;
2013
+ readonly position: z.ZodNumber;
2014
+ readonly volume: z.ZodNumber;
2015
+ readonly traffic: z.ZodNumber;
2016
+ readonly url: z.ZodString;
2017
+ readonly intent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2018
+ }, z.core.$strip>>;
2019
+ readonly totalFound: z.ZodNumber;
2020
+ readonly metrics: z.ZodNullable<z.ZodObject<{
2021
+ readonly organicTraffic: z.ZodNumber;
2022
+ readonly totalKeywords: z.ZodNumber;
2023
+ readonly keywordFootprint: z.ZodObject<{
2024
+ score: z.ZodNullable<z.ZodNumber>;
2025
+ scale: z.ZodObject<{
2026
+ min: z.ZodLiteral<0>;
2027
+ max: z.ZodLiteral<100>;
2028
+ }, z.core.$loose>;
2029
+ provenance: z.ZodLiteral<"local-keyword-count">;
2030
+ }, z.core.$loose>;
2031
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
2032
+ readonly topPages: z.ZodArray<z.ZodObject<{
2033
+ readonly path: z.ZodString;
2034
+ readonly traffic: z.ZodNumber;
2035
+ readonly keywords: z.ZodNumber;
2036
+ }, z.core.$strip>>;
2037
+ }, z.core.$strip>>;
2038
+ readonly positionRange: z.ZodOptional<z.ZodObject<{
2039
+ min: z.ZodNumber;
2040
+ max: z.ZodNumber;
2041
+ }, z.core.$loose>>;
2042
+ readonly message: z.ZodOptional<z.ZodString>;
2043
+ readonly cached: z.ZodBoolean;
2044
+ }, z.core.$strip>;
2045
+ meta: z.ZodObject<{
2046
+ requestId: z.ZodString;
2047
+ version: z.ZodLiteral<"1.0">;
2048
+ }, z.core.$loose>;
2049
+ }, z.core.$strip>>;
2050
+ };
2051
+ readonly errors: readonly ["invalid_request", "unauthorized", "auth_expired", "forbidden", "not_found", "entitlement_required", "quota_exhausted", "provider_unavailable", "conflict", "rate_limited", "contract_violation", "internal_error"];
2052
+ readonly errorResponse: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
2053
+ readonly error: z.ZodObject<{
2054
+ code: z.ZodEnum<{
2055
+ auth_expired: "auth_expired";
2056
+ conflict: "conflict";
2057
+ contract_violation: "contract_violation";
2058
+ entitlement_required: "entitlement_required";
2059
+ forbidden: "forbidden";
2060
+ internal_error: "internal_error";
2061
+ invalid_request: "invalid_request";
2062
+ not_found: "not_found";
2063
+ provider_unavailable: "provider_unavailable";
2064
+ quota_exhausted: "quota_exhausted";
2065
+ rate_limited: "rate_limited";
2066
+ site_ambiguous: "site_ambiguous";
2067
+ stale_evidence: "stale_evidence";
2068
+ unauthorized: "unauthorized";
2069
+ }>;
2070
+ message: z.ZodString;
2071
+ requestId: z.ZodString;
2072
+ retryable: z.ZodBoolean;
2073
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2074
+ }, z.core.$strict>;
2075
+ }, z.core.$strip>, z.ZodObject<{
2076
+ readonly error: z.ZodObject<{
2077
+ code: z.ZodEnum<{
2078
+ auth_expired: "auth_expired";
2079
+ conflict: "conflict";
2080
+ contract_violation: "contract_violation";
2081
+ entitlement_required: "entitlement_required";
2082
+ forbidden: "forbidden";
2083
+ internal_error: "internal_error";
2084
+ invalid_request: "invalid_request";
2085
+ not_found: "not_found";
2086
+ provider_unavailable: "provider_unavailable";
2087
+ quota_exhausted: "quota_exhausted";
2088
+ rate_limited: "rate_limited";
2089
+ site_ambiguous: "site_ambiguous";
2090
+ stale_evidence: "stale_evidence";
2091
+ unauthorized: "unauthorized";
2092
+ }>;
2093
+ message: z.ZodString;
2094
+ requestId: z.ZodString;
2095
+ retryable: z.ZodBoolean;
2096
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2097
+ }, z.core.$loose>;
2098
+ }, z.core.$strip>>;
2099
+ readonly resources: {
2100
+ readonly reads: readonly [{
2101
+ readonly type: 'site.research';
2102
+ readonly idFrom: 'params.siteId';
2103
+ }];
2104
+ readonly changes: readonly [];
2105
+ };
2106
+ readonly policy: {
2107
+ readonly rate: {
2108
+ readonly name: 'public-v1-fixed-window';
2109
+ readonly limit: 50;
2110
+ readonly windowSeconds: 60;
2111
+ };
2112
+ readonly idempotency: {
2113
+ readonly _tag: 'none';
2114
+ };
2115
+ readonly entitlement: 'growth';
2116
+ readonly meter: {
2117
+ readonly key: 'dataforseo';
2118
+ readonly units: 1;
2119
+ readonly charge: 'live-only';
2120
+ };
2121
+ };
2122
+ readonly lifecycle: {
2123
+ readonly introduced: '1.0.0';
2124
+ };
2125
+ readonly docs: {
2126
+ readonly summary: 'Research domain rankings';
2127
+ readonly description: 'Returns current keyword rankings and domain metrics. Cached reads consume no units.';
2128
+ readonly tags: readonly ["Research"];
2129
+ readonly examples: readonly [{
2130
+ readonly request: {
2131
+ readonly params: {
2132
+ readonly siteId: 'site_01JXYZ';
2133
+ };
2134
+ readonly query: {
2135
+ readonly domain: 'nuxtseo.com';
2136
+ readonly limit: 20;
2137
+ };
2138
+ };
2139
+ readonly response: {
2140
+ readonly status: 200;
2141
+ readonly body: {
2142
+ readonly data: {
2143
+ readonly domain: 'nuxtseo.com';
2144
+ readonly keywords: readonly [];
2145
+ readonly totalFound: 0;
2146
+ readonly metrics: null;
2147
+ readonly positionRange: {
2148
+ readonly min: 1;
2149
+ readonly max: 20;
2150
+ };
2151
+ readonly cached: false;
2152
+ };
2153
+ readonly meta: {
2154
+ readonly requestId: 'req_01JXYZ';
2155
+ readonly version: '1.0';
2156
+ };
2157
+ };
2158
+ };
2159
+ }];
2160
+ };
2161
+ };
2162
+ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
2163
+ readonly overview: {
2164
+ readonly id: 'research.overview';
2165
+ readonly method: 'GET';
2166
+ readonly path: '/api/v1/sites/{siteId}/research';
2167
+ readonly visibility: 'public';
2168
+ readonly semantics: {
2169
+ readonly kind: 'query';
2170
+ readonly sideEffects: 'none';
2171
+ readonly retry: 'idempotent';
2172
+ readonly readConsistency: 'primary';
2173
+ };
2174
+ readonly auth: {
2175
+ readonly credentials: readonly ["session", "api_token"];
2176
+ readonly scopes: readonly ["research:read"];
2177
+ readonly minimumRole: 'viewer';
2178
+ readonly ownership: 'site';
2179
+ };
2180
+ readonly request: {
2181
+ readonly params: z.ZodObject<{
2182
+ siteId: z.ZodString;
2183
+ }, z.core.$strict>;
2184
+ readonly query: null;
2185
+ readonly headers: null;
2186
+ readonly body: null;
2187
+ };
2188
+ readonly responses: {
2189
+ readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
2190
+ data: z.ZodObject<{
2191
+ readonly evidence: z.ZodObject<{
2192
+ _tag: z.ZodLiteral<"stored">;
2193
+ provider: z.ZodLiteral<"dataforseo">;
2194
+ collectedAt: z.ZodNullable<z.ZodString>;
2195
+ }, z.core.$strict>;
2196
+ readonly summary: z.ZodObject<{
2197
+ competitorCount: z.ZodNumber;
2198
+ quickWins: z.ZodNumber;
2199
+ totalSharedKeywords: z.ZodNumber;
2200
+ totalTrafficValue: z.ZodNumber;
2201
+ }, z.core.$strict>;
2202
+ readonly subject: z.ZodNullable<z.ZodObject<{
2203
+ readonly domain: z.ZodString;
2204
+ readonly metrics: z.ZodObject<{
2205
+ readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
2206
+ readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
2207
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
2208
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
2209
+ }, z.core.$strip>;
2210
+ readonly history: z.ZodArray<z.ZodObject<{
2211
+ readonly observedAt: z.ZodNullable<z.ZodString>;
2212
+ readonly metrics: z.ZodObject<{
2213
+ readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
2214
+ readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
2215
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
2216
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
2217
+ }, z.core.$strip>;
2218
+ }, z.core.$strip>>;
2219
+ readonly collectedAt: z.ZodNullable<z.ZodString>;
2220
+ }, z.core.$strip>>;
2221
+ readonly competitors: z.ZodArray<z.ZodObject<{
2222
+ readonly domain: z.ZodString;
2223
+ readonly discovery: z.ZodEnum<{
2224
+ automatic: "automatic";
2225
+ manual: "manual";
2226
+ unknown: "unknown";
2227
+ }>;
2228
+ readonly metrics: z.ZodObject<{
2229
+ readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
2230
+ readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
2231
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
2232
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
2233
+ }, z.core.$strip>;
2234
+ readonly topKeywords: z.ZodArray<z.ZodObject<{
2235
+ readonly keyword: z.ZodString;
2236
+ readonly position: z.ZodNullable<z.ZodNumber>;
2237
+ readonly volume: z.ZodNullable<z.ZodNumber>;
2238
+ readonly traffic: z.ZodNullable<z.ZodNumber>;
2239
+ readonly url: z.ZodNullable<z.ZodString>;
2240
+ readonly intent: z.ZodNullable<z.ZodString>;
2241
+ }, z.core.$strip>>;
2242
+ readonly sharedKeywords: z.ZodArray<z.ZodObject<{
2243
+ readonly keyword: z.ZodString;
2244
+ readonly yourPosition: z.ZodNumber;
2245
+ readonly theirPosition: z.ZodNumber;
2246
+ readonly volume: z.ZodNumber;
2247
+ }, z.core.$strip>>;
2248
+ readonly keywordGaps: z.ZodArray<z.ZodObject<{
2249
+ readonly keyword: z.ZodString;
2250
+ readonly position: z.ZodNullable<z.ZodNumber>;
2251
+ readonly volume: z.ZodNullable<z.ZodNumber>;
2252
+ readonly traffic: z.ZodNullable<z.ZodNumber>;
2253
+ readonly url: z.ZodNullable<z.ZodString>;
2254
+ readonly intent: z.ZodNullable<z.ZodString>;
2255
+ }, z.core.$strip>>;
2256
+ readonly quickWins: z.ZodArray<z.ZodObject<{
2257
+ readonly keyword: z.ZodString;
2258
+ readonly yourPosition: z.ZodNumber;
2259
+ readonly theirPosition: z.ZodNumber;
2260
+ readonly volume: z.ZodNumber;
2261
+ }, z.core.$strip>>;
2262
+ readonly history: z.ZodArray<z.ZodObject<{
2263
+ readonly observedAt: z.ZodNullable<z.ZodString>;
2264
+ readonly metrics: z.ZodObject<{
2265
+ readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
2266
+ readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
2267
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
2268
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
2269
+ }, z.core.$strip>;
2270
+ }, z.core.$strip>>;
2271
+ readonly collectedAt: z.ZodNullable<z.ZodString>;
2272
+ }, z.core.$strip>>;
2273
+ }, z.core.$strip>;
2274
+ meta: z.ZodObject<{
2275
+ requestId: z.ZodString;
2276
+ version: z.ZodLiteral<"1.0">;
2277
+ }, z.core.$strict>;
2278
+ }, z.core.$strip>, z.ZodObject<{
2279
+ data: z.ZodObject<{
2280
+ readonly evidence: z.ZodObject<{
2281
+ _tag: z.ZodLiteral<"stored">;
2282
+ provider: z.ZodLiteral<"dataforseo">;
2283
+ collectedAt: z.ZodNullable<z.ZodString>;
2284
+ }, z.core.$loose>;
2285
+ readonly summary: z.ZodObject<{
2286
+ competitorCount: z.ZodNumber;
2287
+ quickWins: z.ZodNumber;
2288
+ totalSharedKeywords: z.ZodNumber;
2289
+ totalTrafficValue: z.ZodNumber;
2290
+ }, z.core.$loose>;
2291
+ readonly subject: z.ZodNullable<z.ZodObject<{
2292
+ readonly domain: z.ZodString;
2293
+ readonly metrics: z.ZodObject<{
2294
+ readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
2295
+ readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
2296
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
2297
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
2298
+ }, z.core.$strip>;
2299
+ readonly history: z.ZodArray<z.ZodObject<{
2300
+ readonly observedAt: z.ZodNullable<z.ZodString>;
2301
+ readonly metrics: z.ZodObject<{
2302
+ readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
2303
+ readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
2304
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
2305
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
2306
+ }, z.core.$strip>;
2307
+ }, z.core.$strip>>;
2308
+ readonly collectedAt: z.ZodNullable<z.ZodString>;
2309
+ }, z.core.$strip>>;
2310
+ readonly competitors: z.ZodArray<z.ZodObject<{
2311
+ readonly domain: z.ZodString;
2312
+ readonly discovery: z.ZodEnum<{
2313
+ automatic: "automatic";
2314
+ manual: "manual";
2315
+ unknown: "unknown";
2316
+ }>;
2317
+ readonly metrics: z.ZodObject<{
2318
+ readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
927
2319
  readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
928
2320
  readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
929
2321
  readonly trafficValue: z.ZodNullable<z.ZodNumber>;
@@ -942,31 +2334,509 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
942
2334
  readonly theirPosition: z.ZodNumber;
943
2335
  readonly volume: z.ZodNumber;
944
2336
  }, z.core.$strip>>;
945
- readonly keywordGaps: z.ZodArray<z.ZodObject<{
946
- readonly keyword: z.ZodString;
947
- readonly position: z.ZodNullable<z.ZodNumber>;
948
- readonly volume: z.ZodNullable<z.ZodNumber>;
949
- readonly traffic: z.ZodNullable<z.ZodNumber>;
950
- readonly url: z.ZodNullable<z.ZodString>;
951
- readonly intent: z.ZodNullable<z.ZodString>;
952
- }, z.core.$strip>>;
953
- readonly quickWins: z.ZodArray<z.ZodObject<{
954
- readonly keyword: z.ZodString;
955
- readonly yourPosition: z.ZodNumber;
956
- readonly theirPosition: z.ZodNumber;
2337
+ readonly keywordGaps: z.ZodArray<z.ZodObject<{
2338
+ readonly keyword: z.ZodString;
2339
+ readonly position: z.ZodNullable<z.ZodNumber>;
2340
+ readonly volume: z.ZodNullable<z.ZodNumber>;
2341
+ readonly traffic: z.ZodNullable<z.ZodNumber>;
2342
+ readonly url: z.ZodNullable<z.ZodString>;
2343
+ readonly intent: z.ZodNullable<z.ZodString>;
2344
+ }, z.core.$strip>>;
2345
+ readonly quickWins: z.ZodArray<z.ZodObject<{
2346
+ readonly keyword: z.ZodString;
2347
+ readonly yourPosition: z.ZodNumber;
2348
+ readonly theirPosition: z.ZodNumber;
2349
+ readonly volume: z.ZodNumber;
2350
+ }, z.core.$strip>>;
2351
+ readonly history: z.ZodArray<z.ZodObject<{
2352
+ readonly observedAt: z.ZodNullable<z.ZodString>;
2353
+ readonly metrics: z.ZodObject<{
2354
+ readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
2355
+ readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
2356
+ readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
2357
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
2358
+ }, z.core.$strip>;
2359
+ }, z.core.$strip>>;
2360
+ readonly collectedAt: z.ZodNullable<z.ZodString>;
2361
+ }, z.core.$strip>>;
2362
+ }, z.core.$strip>;
2363
+ meta: z.ZodObject<{
2364
+ requestId: z.ZodString;
2365
+ version: z.ZodLiteral<"1.0">;
2366
+ }, z.core.$loose>;
2367
+ }, z.core.$strip>>;
2368
+ };
2369
+ readonly errors: readonly ["invalid_request", "unauthorized", "auth_expired", "forbidden", "not_found", "rate_limited", "contract_violation", "internal_error"];
2370
+ readonly errorResponse: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
2371
+ readonly error: z.ZodObject<{
2372
+ code: z.ZodEnum<{
2373
+ auth_expired: "auth_expired";
2374
+ conflict: "conflict";
2375
+ contract_violation: "contract_violation";
2376
+ entitlement_required: "entitlement_required";
2377
+ forbidden: "forbidden";
2378
+ internal_error: "internal_error";
2379
+ invalid_request: "invalid_request";
2380
+ not_found: "not_found";
2381
+ provider_unavailable: "provider_unavailable";
2382
+ quota_exhausted: "quota_exhausted";
2383
+ rate_limited: "rate_limited";
2384
+ site_ambiguous: "site_ambiguous";
2385
+ stale_evidence: "stale_evidence";
2386
+ unauthorized: "unauthorized";
2387
+ }>;
2388
+ message: z.ZodString;
2389
+ requestId: z.ZodString;
2390
+ retryable: z.ZodBoolean;
2391
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2392
+ }, z.core.$strict>;
2393
+ }, z.core.$strip>, z.ZodObject<{
2394
+ readonly error: z.ZodObject<{
2395
+ code: z.ZodEnum<{
2396
+ auth_expired: "auth_expired";
2397
+ conflict: "conflict";
2398
+ contract_violation: "contract_violation";
2399
+ entitlement_required: "entitlement_required";
2400
+ forbidden: "forbidden";
2401
+ internal_error: "internal_error";
2402
+ invalid_request: "invalid_request";
2403
+ not_found: "not_found";
2404
+ provider_unavailable: "provider_unavailable";
2405
+ quota_exhausted: "quota_exhausted";
2406
+ rate_limited: "rate_limited";
2407
+ site_ambiguous: "site_ambiguous";
2408
+ stale_evidence: "stale_evidence";
2409
+ unauthorized: "unauthorized";
2410
+ }>;
2411
+ message: z.ZodString;
2412
+ requestId: z.ZodString;
2413
+ retryable: z.ZodBoolean;
2414
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2415
+ }, z.core.$loose>;
2416
+ }, z.core.$strip>>;
2417
+ readonly resources: {
2418
+ readonly reads: readonly [{
2419
+ readonly type: 'site.research';
2420
+ readonly idFrom: 'params.siteId';
2421
+ }];
2422
+ readonly changes: readonly [];
2423
+ };
2424
+ readonly policy: {
2425
+ readonly rate: {
2426
+ readonly name: 'public-v1-fixed-window';
2427
+ readonly limit: 50;
2428
+ readonly windowSeconds: 60;
2429
+ };
2430
+ readonly idempotency: {
2431
+ readonly _tag: 'none';
2432
+ };
2433
+ readonly entitlement: null;
2434
+ readonly meter: null;
2435
+ };
2436
+ readonly lifecycle: {
2437
+ readonly introduced: '1.0.0';
2438
+ };
2439
+ readonly docs: {
2440
+ readonly summary: 'Get stored Site Research';
2441
+ 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.';
2442
+ readonly tags: readonly ["Research"];
2443
+ readonly examples: readonly [{
2444
+ readonly request: {
2445
+ readonly params: {
2446
+ readonly siteId: 'site_01JXYZ';
2447
+ };
2448
+ };
2449
+ readonly response: {
2450
+ readonly status: 200;
2451
+ readonly body: {
2452
+ readonly data: {
2453
+ readonly evidence: {
2454
+ readonly _tag: 'stored';
2455
+ readonly provider: 'dataforseo';
2456
+ readonly collectedAt: null;
2457
+ };
2458
+ readonly summary: {
2459
+ readonly competitorCount: 0;
2460
+ readonly quickWins: 0;
2461
+ readonly totalSharedKeywords: 0;
2462
+ readonly totalTrafficValue: 0;
2463
+ };
2464
+ readonly subject: null;
2465
+ readonly competitors: readonly [];
2466
+ };
2467
+ readonly meta: {
2468
+ readonly requestId: 'req_01JXYZ';
2469
+ readonly version: '1.0';
2470
+ };
2471
+ };
2472
+ };
2473
+ }];
2474
+ };
2475
+ };
2476
+ readonly keywords: {
2477
+ readonly id: 'research.keywords';
2478
+ readonly method: 'GET';
2479
+ readonly path: '/api/v1/sites/{siteId}/research/keywords';
2480
+ readonly visibility: 'public';
2481
+ readonly semantics: {
2482
+ readonly kind: 'query';
2483
+ readonly sideEffects: 'none';
2484
+ readonly retry: 'idempotent';
2485
+ readonly readConsistency: 'primary';
2486
+ };
2487
+ readonly auth: {
2488
+ readonly credentials: readonly ['session', 'api_token'];
2489
+ readonly scopes: readonly ['research:read'];
2490
+ readonly minimumRole: 'viewer';
2491
+ readonly ownership: 'site';
2492
+ };
2493
+ readonly request: {
2494
+ readonly params: z.ZodObject<{
2495
+ siteId: z.ZodString;
2496
+ }, z.core.$strict>;
2497
+ readonly query: z.ZodObject<{
2498
+ topic: z.ZodString;
2499
+ minVolume: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
2500
+ maxVolume: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
2501
+ minDifficulty: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
2502
+ maxDifficulty: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
2503
+ intent: z.ZodOptional<z.ZodString>;
2504
+ includeRelated: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
2505
+ 0: "0";
2506
+ 1: "1";
2507
+ false: "false";
2508
+ true: "true";
2509
+ }>]>, z.ZodTransform<boolean, "0" | "1" | "false" | "true" | boolean>>>;
2510
+ verbose: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
2511
+ 0: "0";
2512
+ 1: "1";
2513
+ false: "false";
2514
+ true: "true";
2515
+ }>]>, z.ZodTransform<boolean, "0" | "1" | "false" | "true" | boolean>>>;
2516
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
2517
+ locationCode: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
2518
+ }, z.core.$strict>;
2519
+ readonly headers: null;
2520
+ readonly body: null;
2521
+ };
2522
+ readonly responses: {
2523
+ readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
2524
+ data: z.ZodObject<{
2525
+ readonly topic: z.ZodString;
2526
+ readonly keywords: z.ZodArray<z.ZodObject<{
2527
+ readonly keyword: z.ZodString;
2528
+ readonly volume: z.ZodNullable<z.ZodNumber>;
2529
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
2530
+ readonly intent: z.ZodNullable<z.ZodString>;
2531
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
2532
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
2533
+ readonly competition: z.ZodNullable<z.ZodNumber>;
2534
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
2535
+ HIGH: "HIGH";
2536
+ LOW: "LOW";
2537
+ MEDIUM: "MEDIUM";
2538
+ }>>;
2539
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
2540
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
2541
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
2542
+ readonly year: z.ZodNumber;
2543
+ readonly month: z.ZodNumber;
2544
+ readonly volume: z.ZodNumber;
2545
+ }, z.core.$strip>>>;
2546
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
2547
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
2548
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
2549
+ }, z.core.$strip>>;
2550
+ readonly totalFound: z.ZodNumber;
2551
+ readonly filters: z.ZodObject<{
2552
+ minVolume: z.ZodNumber;
2553
+ maxVolume: z.ZodNumber;
2554
+ minDifficulty: z.ZodNumber;
2555
+ maxDifficulty: z.ZodNumber;
2556
+ intent: z.ZodOptional<z.ZodString>;
2557
+ }, z.core.$strict>;
2558
+ readonly message: z.ZodOptional<z.ZodString>;
2559
+ readonly tip: z.ZodOptional<z.ZodString>;
2560
+ readonly serpFallback: z.ZodOptional<z.ZodNullable<z.ZodObject<{
2561
+ message: z.ZodString;
2562
+ topResults: z.ZodArray<z.ZodObject<{
2563
+ readonly position: z.ZodNumber;
2564
+ readonly title: z.ZodString;
2565
+ readonly domain: z.ZodString;
2566
+ readonly url: z.ZodString;
2567
+ }, z.core.$strip>>;
2568
+ tip: z.ZodString;
2569
+ }, z.core.$strict>>>;
2570
+ readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
2571
+ _tag: z.ZodLiteral<"no-provider">;
2572
+ provider: z.ZodNull;
2573
+ spend: z.ZodObject<{
2574
+ key: z.ZodLiteral<"dataforseo">;
2575
+ units: z.ZodLiteral<0>;
2576
+ }, z.core.$strict>;
2577
+ }, z.core.$strict>, z.ZodObject<{
2578
+ _tag: z.ZodLiteral<"cache">;
2579
+ provider: z.ZodLiteral<"dataforseo">;
2580
+ spend: z.ZodObject<{
2581
+ key: z.ZodLiteral<"dataforseo">;
2582
+ units: z.ZodLiteral<0>;
2583
+ }, z.core.$strict>;
2584
+ }, z.core.$strict>, z.ZodObject<{
2585
+ _tag: z.ZodLiteral<"live">;
2586
+ provider: z.ZodLiteral<"dataforseo">;
2587
+ spend: z.ZodObject<{
2588
+ key: z.ZodLiteral<"dataforseo">;
2589
+ units: z.ZodLiteral<1>;
2590
+ }, z.core.$strict>;
2591
+ }, z.core.$strict>], "_tag">;
2592
+ }, z.core.$strip>;
2593
+ meta: z.ZodObject<{
2594
+ requestId: z.ZodString;
2595
+ version: z.ZodLiteral<"1.0">;
2596
+ }, z.core.$strict>;
2597
+ }, z.core.$strip>, z.ZodObject<{
2598
+ data: z.ZodObject<{
2599
+ readonly topic: z.ZodString;
2600
+ readonly keywords: z.ZodArray<z.ZodObject<{
2601
+ readonly keyword: z.ZodString;
2602
+ readonly volume: z.ZodNullable<z.ZodNumber>;
2603
+ readonly difficulty: z.ZodNullable<z.ZodNumber>;
2604
+ readonly intent: z.ZodNullable<z.ZodString>;
2605
+ readonly secondaryIntents: z.ZodNullable<z.ZodArray<z.ZodString>>;
2606
+ readonly cpc: z.ZodNullable<z.ZodNumber>;
2607
+ readonly competition: z.ZodNullable<z.ZodNumber>;
2608
+ readonly competitionLevel: z.ZodNullable<z.ZodEnum<{
2609
+ HIGH: "HIGH";
2610
+ LOW: "LOW";
2611
+ MEDIUM: "MEDIUM";
2612
+ }>>;
2613
+ readonly lowBid: z.ZodNullable<z.ZodNumber>;
2614
+ readonly highBid: z.ZodNullable<z.ZodNumber>;
2615
+ readonly trend: z.ZodNullable<z.ZodArray<z.ZodObject<{
2616
+ readonly year: z.ZodNumber;
2617
+ readonly month: z.ZodNumber;
957
2618
  readonly volume: z.ZodNumber;
2619
+ }, z.core.$strip>>>;
2620
+ readonly serpFeatures: z.ZodNullable<z.ZodArray<z.ZodString>>;
2621
+ readonly backlinks: z.ZodNullable<z.ZodNumber>;
2622
+ readonly referringDomains: z.ZodNullable<z.ZodNumber>;
2623
+ }, z.core.$strip>>;
2624
+ readonly totalFound: z.ZodNumber;
2625
+ readonly filters: z.ZodObject<{
2626
+ minVolume: z.ZodNumber;
2627
+ maxVolume: z.ZodNumber;
2628
+ minDifficulty: z.ZodNumber;
2629
+ maxDifficulty: z.ZodNumber;
2630
+ intent: z.ZodOptional<z.ZodString>;
2631
+ }, z.core.$loose>;
2632
+ readonly message: z.ZodOptional<z.ZodString>;
2633
+ readonly tip: z.ZodOptional<z.ZodString>;
2634
+ readonly serpFallback: z.ZodOptional<z.ZodNullable<z.ZodObject<{
2635
+ message: z.ZodString;
2636
+ topResults: z.ZodArray<z.ZodObject<{
2637
+ readonly position: z.ZodNumber;
2638
+ readonly title: z.ZodString;
2639
+ readonly domain: z.ZodString;
2640
+ readonly url: z.ZodString;
958
2641
  }, z.core.$strip>>;
959
- readonly history: z.ZodArray<z.ZodObject<{
960
- readonly observedAt: z.ZodNullable<z.ZodString>;
961
- readonly metrics: z.ZodObject<{
962
- readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
963
- readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
964
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
965
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
966
- }, z.core.$strip>;
967
- }, z.core.$strip>>;
968
- readonly collectedAt: z.ZodNullable<z.ZodString>;
2642
+ tip: z.ZodString;
2643
+ }, z.core.$loose>>>;
2644
+ readonly evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
2645
+ _tag: z.ZodLiteral<"no-provider">;
2646
+ provider: z.ZodNull;
2647
+ spend: z.ZodObject<{
2648
+ key: z.ZodLiteral<"dataforseo">;
2649
+ units: z.ZodLiteral<0>;
2650
+ }, z.core.$loose>;
2651
+ }, z.core.$loose>, z.ZodObject<{
2652
+ _tag: z.ZodLiteral<"cache">;
2653
+ provider: z.ZodLiteral<"dataforseo">;
2654
+ spend: z.ZodObject<{
2655
+ key: z.ZodLiteral<"dataforseo">;
2656
+ units: z.ZodLiteral<0>;
2657
+ }, z.core.$loose>;
2658
+ }, z.core.$loose>, z.ZodObject<{
2659
+ _tag: z.ZodLiteral<"live">;
2660
+ provider: z.ZodLiteral<"dataforseo">;
2661
+ spend: z.ZodObject<{
2662
+ key: z.ZodLiteral<"dataforseo">;
2663
+ units: z.ZodLiteral<1>;
2664
+ }, z.core.$loose>;
2665
+ }, z.core.$loose>], "_tag">;
2666
+ }, z.core.$strip>;
2667
+ meta: z.ZodObject<{
2668
+ requestId: z.ZodString;
2669
+ version: z.ZodLiteral<"1.0">;
2670
+ }, z.core.$loose>;
2671
+ }, z.core.$strip>>;
2672
+ };
2673
+ readonly errors: readonly ["invalid_request", "unauthorized", "auth_expired", "forbidden", "not_found", "entitlement_required", "quota_exhausted", "provider_unavailable", "conflict", "rate_limited", "contract_violation", "internal_error"];
2674
+ readonly errorResponse: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
2675
+ readonly error: z.ZodObject<{
2676
+ code: z.ZodEnum<{
2677
+ auth_expired: "auth_expired";
2678
+ conflict: "conflict";
2679
+ contract_violation: "contract_violation";
2680
+ entitlement_required: "entitlement_required";
2681
+ forbidden: "forbidden";
2682
+ internal_error: "internal_error";
2683
+ invalid_request: "invalid_request";
2684
+ not_found: "not_found";
2685
+ provider_unavailable: "provider_unavailable";
2686
+ quota_exhausted: "quota_exhausted";
2687
+ rate_limited: "rate_limited";
2688
+ site_ambiguous: "site_ambiguous";
2689
+ stale_evidence: "stale_evidence";
2690
+ unauthorized: "unauthorized";
2691
+ }>;
2692
+ message: z.ZodString;
2693
+ requestId: z.ZodString;
2694
+ retryable: z.ZodBoolean;
2695
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2696
+ }, z.core.$strict>;
2697
+ }, z.core.$strip>, z.ZodObject<{
2698
+ readonly error: z.ZodObject<{
2699
+ code: z.ZodEnum<{
2700
+ auth_expired: "auth_expired";
2701
+ conflict: "conflict";
2702
+ contract_violation: "contract_violation";
2703
+ entitlement_required: "entitlement_required";
2704
+ forbidden: "forbidden";
2705
+ internal_error: "internal_error";
2706
+ invalid_request: "invalid_request";
2707
+ not_found: "not_found";
2708
+ provider_unavailable: "provider_unavailable";
2709
+ quota_exhausted: "quota_exhausted";
2710
+ rate_limited: "rate_limited";
2711
+ site_ambiguous: "site_ambiguous";
2712
+ stale_evidence: "stale_evidence";
2713
+ unauthorized: "unauthorized";
2714
+ }>;
2715
+ message: z.ZodString;
2716
+ requestId: z.ZodString;
2717
+ retryable: z.ZodBoolean;
2718
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2719
+ }, z.core.$loose>;
2720
+ }, z.core.$strip>>;
2721
+ readonly resources: {
2722
+ readonly reads: readonly [{
2723
+ readonly type: 'site.research';
2724
+ readonly idFrom: 'params.siteId';
2725
+ }];
2726
+ readonly changes: readonly [];
2727
+ };
2728
+ readonly policy: {
2729
+ readonly rate: {
2730
+ readonly name: 'public-v1-fixed-window';
2731
+ readonly limit: 50;
2732
+ readonly windowSeconds: 60;
2733
+ };
2734
+ readonly idempotency: {
2735
+ readonly _tag: 'none';
2736
+ };
2737
+ readonly entitlement: 'growth';
2738
+ readonly meter: {
2739
+ readonly key: 'dataforseo';
2740
+ readonly units: 1;
2741
+ readonly charge: 'live-only';
2742
+ };
2743
+ };
2744
+ readonly lifecycle: {
2745
+ readonly introduced: '1.0.0';
2746
+ };
2747
+ readonly docs: {
2748
+ readonly summary: 'Research keyword ideas';
2749
+ 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.';
2750
+ readonly tags: readonly ["Research"];
2751
+ readonly examples: readonly [{
2752
+ readonly request: {
2753
+ readonly params: {
2754
+ readonly siteId: 'site_01JXYZ';
2755
+ };
2756
+ readonly query: {
2757
+ readonly topic: 'nuxt seo';
2758
+ readonly limit: 20;
2759
+ };
2760
+ };
2761
+ readonly response: {
2762
+ readonly status: 200;
2763
+ readonly body: {
2764
+ readonly data: {
2765
+ readonly topic: 'nuxt seo';
2766
+ readonly keywords: readonly [];
2767
+ readonly totalFound: 0;
2768
+ readonly filters: {
2769
+ readonly minVolume: 10;
2770
+ readonly maxVolume: 10000;
2771
+ readonly minDifficulty: 0;
2772
+ readonly maxDifficulty: 60;
2773
+ };
2774
+ readonly evidence: {
2775
+ readonly _tag: 'live';
2776
+ readonly provider: 'dataforseo';
2777
+ readonly spend: {
2778
+ readonly key: 'dataforseo';
2779
+ readonly units: 1;
2780
+ };
2781
+ };
2782
+ };
2783
+ readonly meta: {
2784
+ readonly requestId: 'req_01JXYZ';
2785
+ readonly version: '1.0';
2786
+ };
2787
+ };
2788
+ };
2789
+ }];
2790
+ };
2791
+ };
2792
+ readonly serp: {
2793
+ readonly id: 'research.serp';
2794
+ readonly method: 'GET';
2795
+ readonly path: '/api/v1/sites/{siteId}/research/serp';
2796
+ readonly visibility: 'public';
2797
+ readonly semantics: {
2798
+ readonly kind: 'query';
2799
+ readonly sideEffects: 'none';
2800
+ readonly retry: 'idempotent';
2801
+ readonly readConsistency: 'primary';
2802
+ };
2803
+ readonly auth: {
2804
+ readonly credentials: readonly ['session', 'api_token'];
2805
+ readonly scopes: readonly ['research:read'];
2806
+ readonly minimumRole: 'viewer';
2807
+ readonly ownership: 'site';
2808
+ };
2809
+ readonly request: {
2810
+ readonly params: z.ZodObject<{
2811
+ siteId: z.ZodString;
2812
+ }, z.core.$strict>;
2813
+ readonly query: z.ZodObject<{
2814
+ keyword: z.ZodString;
2815
+ depth: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
2816
+ locationCode: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
2817
+ }, z.core.$strict>;
2818
+ readonly headers: null;
2819
+ readonly body: null;
2820
+ };
2821
+ readonly responses: {
2822
+ readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
2823
+ data: z.ZodObject<{
2824
+ readonly keyword: z.ZodString;
2825
+ readonly depth: z.ZodNumber;
2826
+ readonly results: z.ZodArray<z.ZodObject<{
2827
+ readonly position: z.ZodNumber;
2828
+ readonly url: z.ZodString;
2829
+ readonly title: z.ZodString;
2830
+ readonly domain: z.ZodString;
2831
+ readonly description: z.ZodOptional<z.ZodString>;
969
2832
  }, z.core.$strip>>;
2833
+ readonly serpFeatures: z.ZodArray<z.ZodString>;
2834
+ readonly hasAiOverview: z.ZodBoolean;
2835
+ readonly hasFeaturedSnippet: z.ZodBoolean;
2836
+ readonly hasLocalPack: z.ZodBoolean;
2837
+ readonly hasPeopleAlsoAsk: z.ZodBoolean;
2838
+ readonly fetchedAt: z.ZodString;
2839
+ readonly cached: z.ZodBoolean;
970
2840
  }, z.core.$strip>;
971
2841
  meta: z.ZodObject<{
972
2842
  requestId: z.ZodString;
@@ -974,88 +2844,254 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
974
2844
  }, z.core.$strict>;
975
2845
  }, z.core.$strip>, z.ZodObject<{
976
2846
  data: z.ZodObject<{
977
- readonly evidence: z.ZodObject<{
978
- _tag: z.ZodLiteral<"stored">;
979
- provider: z.ZodLiteral<"dataforseo">;
980
- collectedAt: z.ZodNullable<z.ZodString>;
981
- }, z.core.$loose>;
982
- readonly summary: z.ZodObject<{
983
- competitorCount: z.ZodNumber;
984
- quickWins: z.ZodNumber;
985
- totalSharedKeywords: z.ZodNumber;
986
- totalTrafficValue: z.ZodNumber;
987
- }, z.core.$loose>;
988
- readonly subject: z.ZodNullable<z.ZodObject<{
2847
+ readonly keyword: z.ZodString;
2848
+ readonly depth: z.ZodNumber;
2849
+ readonly results: z.ZodArray<z.ZodObject<{
2850
+ readonly position: z.ZodNumber;
2851
+ readonly url: z.ZodString;
2852
+ readonly title: z.ZodString;
989
2853
  readonly domain: z.ZodString;
990
- readonly metrics: z.ZodObject<{
991
- readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
992
- readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
993
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
994
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
995
- }, z.core.$strip>;
996
- readonly history: z.ZodArray<z.ZodObject<{
997
- readonly observedAt: z.ZodNullable<z.ZodString>;
998
- readonly metrics: z.ZodObject<{
999
- readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
1000
- readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
1001
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
1002
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
1003
- }, z.core.$strip>;
1004
- }, z.core.$strip>>;
1005
- readonly collectedAt: z.ZodNullable<z.ZodString>;
2854
+ readonly description: z.ZodOptional<z.ZodString>;
1006
2855
  }, z.core.$strip>>;
1007
- readonly competitors: z.ZodArray<z.ZodObject<{
1008
- readonly domain: z.ZodString;
1009
- readonly discovery: z.ZodEnum<{
1010
- automatic: "automatic";
1011
- manual: "manual";
1012
- unknown: "unknown";
1013
- }>;
1014
- readonly metrics: z.ZodObject<{
1015
- readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
1016
- readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
1017
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
1018
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
1019
- }, z.core.$strip>;
1020
- readonly topKeywords: z.ZodArray<z.ZodObject<{
1021
- readonly keyword: z.ZodString;
1022
- readonly position: z.ZodNullable<z.ZodNumber>;
1023
- readonly volume: z.ZodNullable<z.ZodNumber>;
1024
- readonly traffic: z.ZodNullable<z.ZodNumber>;
1025
- readonly url: z.ZodNullable<z.ZodString>;
1026
- readonly intent: z.ZodNullable<z.ZodString>;
1027
- }, z.core.$strip>>;
1028
- readonly sharedKeywords: z.ZodArray<z.ZodObject<{
1029
- readonly keyword: z.ZodString;
1030
- readonly yourPosition: z.ZodNumber;
1031
- readonly theirPosition: z.ZodNumber;
1032
- readonly volume: z.ZodNumber;
1033
- }, z.core.$strip>>;
1034
- readonly keywordGaps: z.ZodArray<z.ZodObject<{
1035
- readonly keyword: z.ZodString;
1036
- readonly position: z.ZodNullable<z.ZodNumber>;
1037
- readonly volume: z.ZodNullable<z.ZodNumber>;
1038
- readonly traffic: z.ZodNullable<z.ZodNumber>;
1039
- readonly url: z.ZodNullable<z.ZodString>;
1040
- readonly intent: z.ZodNullable<z.ZodString>;
1041
- }, z.core.$strip>>;
1042
- readonly quickWins: z.ZodArray<z.ZodObject<{
1043
- readonly keyword: z.ZodString;
1044
- readonly yourPosition: z.ZodNumber;
1045
- readonly theirPosition: z.ZodNumber;
1046
- readonly volume: z.ZodNumber;
2856
+ readonly serpFeatures: z.ZodArray<z.ZodString>;
2857
+ readonly hasAiOverview: z.ZodBoolean;
2858
+ readonly hasFeaturedSnippet: z.ZodBoolean;
2859
+ readonly hasLocalPack: z.ZodBoolean;
2860
+ readonly hasPeopleAlsoAsk: z.ZodBoolean;
2861
+ readonly fetchedAt: z.ZodString;
2862
+ readonly cached: z.ZodBoolean;
2863
+ }, z.core.$strip>;
2864
+ meta: z.ZodObject<{
2865
+ requestId: z.ZodString;
2866
+ version: z.ZodLiteral<"1.0">;
2867
+ }, z.core.$loose>;
2868
+ }, z.core.$strip>>;
2869
+ };
2870
+ readonly errors: readonly ["invalid_request", "unauthorized", "auth_expired", "forbidden", "not_found", "entitlement_required", "quota_exhausted", "provider_unavailable", "conflict", "rate_limited", "contract_violation", "internal_error"];
2871
+ readonly errorResponse: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
2872
+ readonly error: z.ZodObject<{
2873
+ code: z.ZodEnum<{
2874
+ auth_expired: "auth_expired";
2875
+ conflict: "conflict";
2876
+ contract_violation: "contract_violation";
2877
+ entitlement_required: "entitlement_required";
2878
+ forbidden: "forbidden";
2879
+ internal_error: "internal_error";
2880
+ invalid_request: "invalid_request";
2881
+ not_found: "not_found";
2882
+ provider_unavailable: "provider_unavailable";
2883
+ quota_exhausted: "quota_exhausted";
2884
+ rate_limited: "rate_limited";
2885
+ site_ambiguous: "site_ambiguous";
2886
+ stale_evidence: "stale_evidence";
2887
+ unauthorized: "unauthorized";
2888
+ }>;
2889
+ message: z.ZodString;
2890
+ requestId: z.ZodString;
2891
+ retryable: z.ZodBoolean;
2892
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2893
+ }, z.core.$strict>;
2894
+ }, z.core.$strip>, z.ZodObject<{
2895
+ readonly error: z.ZodObject<{
2896
+ code: z.ZodEnum<{
2897
+ auth_expired: "auth_expired";
2898
+ conflict: "conflict";
2899
+ contract_violation: "contract_violation";
2900
+ entitlement_required: "entitlement_required";
2901
+ forbidden: "forbidden";
2902
+ internal_error: "internal_error";
2903
+ invalid_request: "invalid_request";
2904
+ not_found: "not_found";
2905
+ provider_unavailable: "provider_unavailable";
2906
+ quota_exhausted: "quota_exhausted";
2907
+ rate_limited: "rate_limited";
2908
+ site_ambiguous: "site_ambiguous";
2909
+ stale_evidence: "stale_evidence";
2910
+ unauthorized: "unauthorized";
2911
+ }>;
2912
+ message: z.ZodString;
2913
+ requestId: z.ZodString;
2914
+ retryable: z.ZodBoolean;
2915
+ details: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2916
+ }, z.core.$loose>;
2917
+ }, z.core.$strip>>;
2918
+ readonly resources: {
2919
+ readonly reads: readonly [{
2920
+ readonly type: 'site.research';
2921
+ readonly idFrom: 'params.siteId';
2922
+ }];
2923
+ readonly changes: readonly [];
2924
+ };
2925
+ readonly policy: {
2926
+ readonly rate: {
2927
+ readonly name: 'public-v1-fixed-window';
2928
+ readonly limit: 50;
2929
+ readonly windowSeconds: 60;
2930
+ };
2931
+ readonly idempotency: {
2932
+ readonly _tag: 'none';
2933
+ };
2934
+ readonly entitlement: 'growth';
2935
+ readonly meter: {
2936
+ readonly key: 'dataforseo';
2937
+ readonly units: 1;
2938
+ readonly charge: 'live-only';
2939
+ };
2940
+ };
2941
+ readonly lifecycle: {
2942
+ readonly introduced: '1.0.0';
2943
+ };
2944
+ readonly docs: {
2945
+ readonly summary: 'Analyze a Google SERP';
2946
+ readonly description: 'Returns one dated SERP snapshot and its result features. Cached reads consume no units.';
2947
+ readonly tags: readonly ["Research"];
2948
+ readonly examples: readonly [{
2949
+ readonly request: {
2950
+ readonly params: {
2951
+ readonly siteId: 'site_01JXYZ';
2952
+ };
2953
+ readonly query: {
2954
+ readonly keyword: 'nuxt seo';
2955
+ readonly depth: 10;
2956
+ };
2957
+ };
2958
+ readonly response: {
2959
+ readonly status: 200;
2960
+ readonly body: {
2961
+ readonly data: {
2962
+ readonly keyword: 'nuxt seo';
2963
+ readonly depth: 10;
2964
+ readonly results: readonly [];
2965
+ readonly serpFeatures: readonly [];
2966
+ readonly hasAiOverview: false;
2967
+ readonly hasFeaturedSnippet: false;
2968
+ readonly hasLocalPack: false;
2969
+ readonly hasPeopleAlsoAsk: false;
2970
+ readonly fetchedAt: '2026-08-20T00:00:00.000Z';
2971
+ readonly cached: false;
2972
+ };
2973
+ readonly meta: {
2974
+ readonly requestId: 'req_01JXYZ';
2975
+ readonly version: '1.0';
2976
+ };
2977
+ };
2978
+ };
2979
+ }];
2980
+ };
2981
+ };
2982
+ readonly rankings: {
2983
+ readonly id: 'research.rankings';
2984
+ readonly method: 'GET';
2985
+ readonly path: '/api/v1/sites/{siteId}/research/rankings';
2986
+ readonly visibility: 'public';
2987
+ readonly semantics: {
2988
+ readonly kind: 'query';
2989
+ readonly sideEffects: 'none';
2990
+ readonly retry: 'idempotent';
2991
+ readonly readConsistency: 'primary';
2992
+ };
2993
+ readonly auth: {
2994
+ readonly credentials: readonly ['session', 'api_token'];
2995
+ readonly scopes: readonly ['research:read'];
2996
+ readonly minimumRole: 'viewer';
2997
+ readonly ownership: 'site';
2998
+ };
2999
+ readonly request: {
3000
+ readonly params: z.ZodObject<{
3001
+ siteId: z.ZodString;
3002
+ }, z.core.$strict>;
3003
+ readonly query: z.ZodObject<{
3004
+ domain: z.ZodString;
3005
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
3006
+ minPosition: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
3007
+ maxPosition: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
3008
+ locationCode: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
3009
+ order: z.ZodDefault<z.ZodEnum<{
3010
+ position: "position";
3011
+ traffic: "traffic";
3012
+ }>>;
3013
+ }, z.core.$strict>;
3014
+ readonly headers: null;
3015
+ readonly body: null;
3016
+ };
3017
+ readonly responses: {
3018
+ readonly 200: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
3019
+ data: z.ZodObject<{
3020
+ readonly domain: z.ZodString;
3021
+ readonly keywords: z.ZodArray<z.ZodObject<{
3022
+ readonly keyword: z.ZodString;
3023
+ readonly position: z.ZodNumber;
3024
+ readonly volume: z.ZodNumber;
3025
+ readonly traffic: z.ZodNumber;
3026
+ readonly url: z.ZodString;
3027
+ readonly intent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
3028
+ }, z.core.$strip>>;
3029
+ readonly totalFound: z.ZodNumber;
3030
+ readonly metrics: z.ZodNullable<z.ZodObject<{
3031
+ readonly organicTraffic: z.ZodNumber;
3032
+ readonly totalKeywords: z.ZodNumber;
3033
+ readonly keywordFootprint: z.ZodObject<{
3034
+ score: z.ZodNullable<z.ZodNumber>;
3035
+ scale: z.ZodObject<{
3036
+ min: z.ZodLiteral<0>;
3037
+ max: z.ZodLiteral<100>;
3038
+ }, z.core.$strict>;
3039
+ provenance: z.ZodLiteral<"local-keyword-count">;
3040
+ }, z.core.$strict>;
3041
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
3042
+ readonly topPages: z.ZodArray<z.ZodObject<{
3043
+ readonly path: z.ZodString;
3044
+ readonly traffic: z.ZodNumber;
3045
+ readonly keywords: z.ZodNumber;
1047
3046
  }, z.core.$strip>>;
1048
- readonly history: z.ZodArray<z.ZodObject<{
1049
- readonly observedAt: z.ZodNullable<z.ZodString>;
1050
- readonly metrics: z.ZodObject<{
1051
- readonly organicTraffic: z.ZodNullable<z.ZodNumber>;
1052
- readonly totalKeywords: z.ZodNullable<z.ZodNumber>;
1053
- readonly keywordFootprint: z.ZodNullable<z.ZodNumber>;
1054
- readonly trafficValue: z.ZodNullable<z.ZodNumber>;
1055
- }, z.core.$strip>;
3047
+ }, z.core.$strip>>;
3048
+ readonly positionRange: z.ZodOptional<z.ZodObject<{
3049
+ min: z.ZodNumber;
3050
+ max: z.ZodNumber;
3051
+ }, z.core.$strict>>;
3052
+ readonly message: z.ZodOptional<z.ZodString>;
3053
+ readonly cached: z.ZodBoolean;
3054
+ }, z.core.$strip>;
3055
+ meta: z.ZodObject<{
3056
+ requestId: z.ZodString;
3057
+ version: z.ZodLiteral<"1.0">;
3058
+ }, z.core.$strict>;
3059
+ }, z.core.$strip>, z.ZodObject<{
3060
+ data: z.ZodObject<{
3061
+ readonly domain: z.ZodString;
3062
+ readonly keywords: z.ZodArray<z.ZodObject<{
3063
+ readonly keyword: z.ZodString;
3064
+ readonly position: z.ZodNumber;
3065
+ readonly volume: z.ZodNumber;
3066
+ readonly traffic: z.ZodNumber;
3067
+ readonly url: z.ZodString;
3068
+ readonly intent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
3069
+ }, z.core.$strip>>;
3070
+ readonly totalFound: z.ZodNumber;
3071
+ readonly metrics: z.ZodNullable<z.ZodObject<{
3072
+ readonly organicTraffic: z.ZodNumber;
3073
+ readonly totalKeywords: z.ZodNumber;
3074
+ readonly keywordFootprint: z.ZodObject<{
3075
+ score: z.ZodNullable<z.ZodNumber>;
3076
+ scale: z.ZodObject<{
3077
+ min: z.ZodLiteral<0>;
3078
+ max: z.ZodLiteral<100>;
3079
+ }, z.core.$loose>;
3080
+ provenance: z.ZodLiteral<"local-keyword-count">;
3081
+ }, z.core.$loose>;
3082
+ readonly trafficValue: z.ZodNullable<z.ZodNumber>;
3083
+ readonly topPages: z.ZodArray<z.ZodObject<{
3084
+ readonly path: z.ZodString;
3085
+ readonly traffic: z.ZodNumber;
3086
+ readonly keywords: z.ZodNumber;
1056
3087
  }, z.core.$strip>>;
1057
- readonly collectedAt: z.ZodNullable<z.ZodString>;
1058
3088
  }, z.core.$strip>>;
3089
+ readonly positionRange: z.ZodOptional<z.ZodObject<{
3090
+ min: z.ZodNumber;
3091
+ max: z.ZodNumber;
3092
+ }, z.core.$loose>>;
3093
+ readonly message: z.ZodOptional<z.ZodString>;
3094
+ readonly cached: z.ZodBoolean;
1059
3095
  }, z.core.$strip>;
1060
3096
  meta: z.ZodObject<{
1061
3097
  requestId: z.ZodString;
@@ -1063,7 +3099,7 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
1063
3099
  }, z.core.$loose>;
1064
3100
  }, z.core.$strip>>;
1065
3101
  };
1066
- readonly errors: readonly ["invalid_request", "unauthorized", "auth_expired", "forbidden", "not_found", "rate_limited", "contract_violation", "internal_error"];
3102
+ readonly errors: readonly ["invalid_request", "unauthorized", "auth_expired", "forbidden", "not_found", "entitlement_required", "quota_exhausted", "provider_unavailable", "conflict", "rate_limited", "contract_violation", "internal_error"];
1067
3103
  readonly errorResponse: import("./core.js").CompatibleResponseSchema<z.ZodObject<{
1068
3104
  readonly error: z.ZodObject<{
1069
3105
  code: z.ZodEnum<{
@@ -1127,39 +3163,43 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
1127
3163
  readonly idempotency: {
1128
3164
  readonly _tag: 'none';
1129
3165
  };
1130
- readonly entitlement: null;
1131
- readonly meter: null;
3166
+ readonly entitlement: 'growth';
3167
+ readonly meter: {
3168
+ readonly key: 'dataforseo';
3169
+ readonly units: 1;
3170
+ readonly charge: 'live-only';
3171
+ };
1132
3172
  };
1133
3173
  readonly lifecycle: {
1134
3174
  readonly introduced: '1.0.0';
1135
3175
  };
1136
3176
  readonly docs: {
1137
- readonly summary: 'Get stored Site Research';
1138
- 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.';
3177
+ readonly summary: 'Research domain rankings';
3178
+ readonly description: 'Returns current keyword rankings and domain metrics. Cached reads consume no units.';
1139
3179
  readonly tags: readonly ["Research"];
1140
3180
  readonly examples: readonly [{
1141
3181
  readonly request: {
1142
3182
  readonly params: {
1143
3183
  readonly siteId: 'site_01JXYZ';
1144
3184
  };
3185
+ readonly query: {
3186
+ readonly domain: 'nuxtseo.com';
3187
+ readonly limit: 20;
3188
+ };
1145
3189
  };
1146
3190
  readonly response: {
1147
3191
  readonly status: 200;
1148
3192
  readonly body: {
1149
3193
  readonly data: {
1150
- readonly evidence: {
1151
- readonly _tag: 'stored';
1152
- readonly provider: 'dataforseo';
1153
- readonly collectedAt: null;
3194
+ readonly domain: 'nuxtseo.com';
3195
+ readonly keywords: readonly [];
3196
+ readonly totalFound: 0;
3197
+ readonly metrics: null;
3198
+ readonly positionRange: {
3199
+ readonly min: 1;
3200
+ readonly max: 20;
1154
3201
  };
1155
- readonly summary: {
1156
- readonly competitorCount: 0;
1157
- readonly quickWins: 0;
1158
- readonly totalSharedKeywords: 0;
1159
- readonly totalTrafficValue: 0;
1160
- };
1161
- readonly subject: null;
1162
- readonly competitors: readonly [];
3202
+ readonly cached: false;
1163
3203
  };
1164
3204
  readonly meta: {
1165
3205
  readonly requestId: 'req_01JXYZ';
@@ -1171,3 +3211,4 @@ export declare const researchV1Registry: import("./core.js").PublicV1Registry<{
1171
3211
  };
1172
3212
  };
1173
3213
  }>;
3214
+ export {};