mencoro 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +9 -0
  3. data/README.md +304 -0
  4. data/Rakefile +10 -0
  5. data/docs/AcceptedJobResource.md +22 -0
  6. data/docs/AccountApi.md +141 -0
  7. data/docs/AiResponseReportResource.md +28 -0
  8. data/docs/AiResponseResource.md +36 -0
  9. data/docs/AnalyticsApi.md +1320 -0
  10. data/docs/ApplyClusteringJobOutcome.md +26 -0
  11. data/docs/ApplyClusteringJobOutcomeClustersInner.md +22 -0
  12. data/docs/ApplyClusteringJobOutcomeFailedInner.md +22 -0
  13. data/docs/ApplyClusteringJobOutcomeSkippedClustersInner.md +20 -0
  14. data/docs/ApplyClusteringJobOutcomeSuccessfulInner.md +20 -0
  15. data/docs/AsyncJobResource.md +24 -0
  16. data/docs/BatchChangeTrackedQueryCheckFrequencyRequestData.md +20 -0
  17. data/docs/BatchChangeTrackedQueryPassesRequestData.md +20 -0
  18. data/docs/BatchCreateQueryClustersOutcome.md +20 -0
  19. data/docs/BatchCreateQueryClustersOutcomeFailedInner.md +22 -0
  20. data/docs/BatchCreateQueryClustersOutcomeSuccessfulInner.md +20 -0
  21. data/docs/BatchCreateQueryClustersRequestData.md +18 -0
  22. data/docs/BatchCreateTrackedQueriesRequestData.md +30 -0
  23. data/docs/BatchCreateTrackedQueriesResultResource.md +20 -0
  24. data/docs/BatchCreateTrackedQueriesResultResourceFailedInner.md +26 -0
  25. data/docs/BatchCreateTrackedQueriesResultResourceSuccessfulInner.md +24 -0
  26. data/docs/BatchForceCheckTrackedQueries200Response.md +20 -0
  27. data/docs/BatchForceCheckTrackedQueries200ResponseFailedInner.md +22 -0
  28. data/docs/BatchPauseTrackedQueries200Response.md +20 -0
  29. data/docs/BatchPauseTrackedQueries200ResponseFailedInner.md +22 -0
  30. data/docs/BatchPauseTrackedQueries200ResponseSuccessfulInner.md +18 -0
  31. data/docs/BatchResumeTrackedQueries200Response.md +20 -0
  32. data/docs/BatchTargetsRequestData.md +18 -0
  33. data/docs/BatchWriteOutcome.md +20 -0
  34. data/docs/BatchWriteOutcomeFailedInner.md +22 -0
  35. data/docs/BillingApi.md +77 -0
  36. data/docs/BrandProfileResource.md +24 -0
  37. data/docs/BulkAddClustersToTrackedQueries200Response.md +20 -0
  38. data/docs/BulkAddClustersToTrackedQueriesRequest.md +20 -0
  39. data/docs/BulkRemoveClustersFromTrackedQueries200Response.md +20 -0
  40. data/docs/BulkRemoveClustersFromTrackedQueriesRequest.md +20 -0
  41. data/docs/CapturesApi.md +267 -0
  42. data/docs/ChangeMemberRoleRequest.md +18 -0
  43. data/docs/ChangeTrackedQueryCheckFrequencyRequestData.md +18 -0
  44. data/docs/ChangeTrackedQueryPassesRequestData.md +18 -0
  45. data/docs/CitationResource.md +36 -0
  46. data/docs/ClusterMembershipRequestData.md +18 -0
  47. data/docs/ClustersApi.md +465 -0
  48. data/docs/CompetitorResource.md +24 -0
  49. data/docs/CreateCompetitorRequest.md +22 -0
  50. data/docs/CreateInvitation200Response.md +22 -0
  51. data/docs/CreateInvitation201Response.md +32 -0
  52. data/docs/CreateInvitationRequest.md +20 -0
  53. data/docs/CreateOrganization201Response.md +22 -0
  54. data/docs/CreateOrganizationRequest.md +18 -0
  55. data/docs/CreateProjectRequest.md +24 -0
  56. data/docs/CreateProjectRequestCompetitorsInner.md +22 -0
  57. data/docs/CreateQueryCluster409Response.md +22 -0
  58. data/docs/CreateQueryClusterRequest.md +18 -0
  59. data/docs/DeleteQueryCluster200Response.md +22 -0
  60. data/docs/DiscoveryApi.md +311 -0
  61. data/docs/EntitlementsResource.md +38 -0
  62. data/docs/GetAvailableFilters200Response.md +22 -0
  63. data/docs/GetAvailableFilters200ResponseClustersInner.md +20 -0
  64. data/docs/GetMeStats200Response.md +20 -0
  65. data/docs/GetMeStats200ResponseOrganizations.md +18 -0
  66. data/docs/GetMeStats200ResponseProjects.md +20 -0
  67. data/docs/GetMembershipStats200Response.md +30 -0
  68. data/docs/GetMentionSamples400Response.md +24 -0
  69. data/docs/GetMentionSamples400ResponseDetailsValueInner.md +22 -0
  70. data/docs/GetMetricGlossary200Response.md +18 -0
  71. data/docs/GetMetricGlossary200ResponseMetricsInner.md +30 -0
  72. data/docs/GetOrganizationOverview200Response.md +20 -0
  73. data/docs/GetOrganizationOverview200ResponseAggregate.md +30 -0
  74. data/docs/GetOrganizationOverview200ResponseProjectsInner.md +32 -0
  75. data/docs/GetOrganizationStats200Response.md +22 -0
  76. data/docs/GetOrganizationStats200ResponseInvitations.md +18 -0
  77. data/docs/GetOrganizationStats200ResponseMembers.md +18 -0
  78. data/docs/GetOrganizationStats200ResponseProjects.md +20 -0
  79. data/docs/GetShareOfVoiceFormula200Response.md +24 -0
  80. data/docs/GetTrackingCoverage200Response.md +30 -0
  81. data/docs/GetTrackingCoverage200ResponseSampleInner.md +28 -0
  82. data/docs/InvitationResource.md +30 -0
  83. data/docs/InvitationsApi.md +243 -0
  84. data/docs/JobsApi.md +79 -0
  85. data/docs/KeywordListingResource.md +88 -0
  86. data/docs/KeywordListingResourceMentionTypeCounts.md +26 -0
  87. data/docs/ListAiResponses200Response.md +20 -0
  88. data/docs/ListCompetitors200Response.md +20 -0
  89. data/docs/ListInvitations200Response.md +20 -0
  90. data/docs/ListKeywordListings200Response.md +24 -0
  91. data/docs/ListMembers200Response.md +20 -0
  92. data/docs/ListOrganizations200Response.md +20 -0
  93. data/docs/ListProjects200Response.md +20 -0
  94. data/docs/ListQueryClusters200Response.md +20 -0
  95. data/docs/ListSearchSnapshots200Response.md +20 -0
  96. data/docs/ListShoppingSnapshots200Response.md +20 -0
  97. data/docs/MeResource.md +34 -0
  98. data/docs/MemberResource.md +28 -0
  99. data/docs/MembersApi.md +391 -0
  100. data/docs/OperationEffect.md +22 -0
  101. data/docs/OrganizationOperationsApi.md +77 -0
  102. data/docs/OrganizationResource.md +32 -0
  103. data/docs/OrganizationsApi.md +807 -0
  104. data/docs/PreviewOrganizationOperation200Response.md +34 -0
  105. data/docs/PreviewOrganizationOperation200ResponseOrganization.md +20 -0
  106. data/docs/PreviewOrganizationOperationRequest.md +24 -0
  107. data/docs/ProjectDetailResource.md +32 -0
  108. data/docs/ProjectDetailResourceCompetitorsInner.md +24 -0
  109. data/docs/ProjectResource.md +50 -0
  110. data/docs/ProjectedMonthlyChecksResource.md +20 -0
  111. data/docs/ProjectsApi.md +999 -0
  112. data/docs/QueryClusterResource.md +22 -0
  113. data/docs/ReportAiResponseRequest.md +22 -0
  114. data/docs/SearchResultResource.md +32 -0
  115. data/docs/SearchSnapshotResource.md +28 -0
  116. data/docs/SearchTrackedQueries200Response.md +20 -0
  117. data/docs/ShoppingOfferResource.md +38 -0
  118. data/docs/ShoppingSnapshotResource.md +28 -0
  119. data/docs/StartBrandDiscoveryJobRequest.md +20 -0
  120. data/docs/StartBrandNameSuggestionJobRequest.md +24 -0
  121. data/docs/StartClusteringJobRequestData.md +22 -0
  122. data/docs/StartKeywordDiscoveryJobRequest.md +24 -0
  123. data/docs/StartPromptDiscoveryJobRequest.md +24 -0
  124. data/docs/SubmittedChecksResource.md +20 -0
  125. data/docs/SubscriptionResource.md +42 -0
  126. data/docs/TrackedQueriesApi.md +1549 -0
  127. data/docs/TrackedQueryCountResource.md +20 -0
  128. data/docs/TrackedQueryDetailResource.md +38 -0
  129. data/docs/TrackedQueryResource.md +52 -0
  130. data/docs/TrackedQueryUsageResource.md +18 -0
  131. data/docs/UpdateOrganizationRequest.md +22 -0
  132. data/docs/UpdateProjectBrandProfileRequest.md +20 -0
  133. data/docs/UpdateProjectRequest.md +18 -0
  134. data/git_push.sh +57 -0
  135. data/lib/mencoro/api/account_api.rb +136 -0
  136. data/lib/mencoro/api/analytics_api.rb +1555 -0
  137. data/lib/mencoro/api/billing_api.rb +85 -0
  138. data/lib/mencoro/api/captures_api.rb +338 -0
  139. data/lib/mencoro/api/clusters_api.rb +548 -0
  140. data/lib/mencoro/api/discovery_api.rb +360 -0
  141. data/lib/mencoro/api/invitations_api.rb +302 -0
  142. data/lib/mencoro/api/jobs_api.rb +91 -0
  143. data/lib/mencoro/api/members_api.rb +453 -0
  144. data/lib/mencoro/api/organization_operations_api.rb +90 -0
  145. data/lib/mencoro/api/organizations_api.rb +835 -0
  146. data/lib/mencoro/api/projects_api.rb +1158 -0
  147. data/lib/mencoro/api/tracked_queries_api.rb +1792 -0
  148. data/lib/mencoro/api_client.rb +441 -0
  149. data/lib/mencoro/api_error.rb +58 -0
  150. data/lib/mencoro/api_model_base.rb +88 -0
  151. data/lib/mencoro/configuration.rb +392 -0
  152. data/lib/mencoro/models/accepted_job_resource.rb +220 -0
  153. data/lib/mencoro/models/ai_response_report_resource.rb +311 -0
  154. data/lib/mencoro/models/ai_response_resource.rb +412 -0
  155. data/lib/mencoro/models/apply_clustering_job_outcome.rb +199 -0
  156. data/lib/mencoro/models/apply_clustering_job_outcome_clusters_inner.rb +165 -0
  157. data/lib/mencoro/models/apply_clustering_job_outcome_failed_inner.rb +165 -0
  158. data/lib/mencoro/models/apply_clustering_job_outcome_skipped_clusters_inner.rb +156 -0
  159. data/lib/mencoro/models/apply_clustering_job_outcome_successful_inner.rb +158 -0
  160. data/lib/mencoro/models/async_job_resource.rb +256 -0
  161. data/lib/mencoro/models/batch_change_tracked_query_check_frequency_request_data.rb +237 -0
  162. data/lib/mencoro/models/batch_change_tracked_query_passes_request_data.rb +231 -0
  163. data/lib/mencoro/models/batch_create_query_clusters_outcome.rb +163 -0
  164. data/lib/mencoro/models/batch_create_query_clusters_outcome_failed_inner.rb +165 -0
  165. data/lib/mencoro/models/batch_create_query_clusters_outcome_successful_inner.rb +156 -0
  166. data/lib/mencoro/models/batch_create_query_clusters_request_data.rb +186 -0
  167. data/lib/mencoro/models/batch_create_tracked_queries_request_data.rb +399 -0
  168. data/lib/mencoro/models/batch_create_tracked_queries_result_resource.rb +163 -0
  169. data/lib/mencoro/models/batch_create_tracked_queries_result_resource_failed_inner.rb +183 -0
  170. data/lib/mencoro/models/batch_create_tracked_queries_result_resource_successful_inner.rb +174 -0
  171. data/lib/mencoro/models/batch_force_check_tracked_queries200_response.rb +162 -0
  172. data/lib/mencoro/models/batch_force_check_tracked_queries200_response_failed_inner.rb +165 -0
  173. data/lib/mencoro/models/batch_pause_tracked_queries200_response.rb +162 -0
  174. data/lib/mencoro/models/batch_pause_tracked_queries200_response_failed_inner.rb +165 -0
  175. data/lib/mencoro/models/batch_pause_tracked_queries200_response_successful_inner.rb +147 -0
  176. data/lib/mencoro/models/batch_resume_tracked_queries200_response.rb +162 -0
  177. data/lib/mencoro/models/batch_targets_request_data.rb +186 -0
  178. data/lib/mencoro/models/batch_write_outcome.rb +163 -0
  179. data/lib/mencoro/models/batch_write_outcome_failed_inner.rb +166 -0
  180. data/lib/mencoro/models/brand_profile_resource.rb +235 -0
  181. data/lib/mencoro/models/bulk_add_clusters_to_tracked_queries200_response.rb +162 -0
  182. data/lib/mencoro/models/bulk_add_clusters_to_tracked_queries_request.rb +218 -0
  183. data/lib/mencoro/models/bulk_remove_clusters_from_tracked_queries200_response.rb +162 -0
  184. data/lib/mencoro/models/bulk_remove_clusters_from_tracked_queries_request.rb +218 -0
  185. data/lib/mencoro/models/change_member_role_request.rb +181 -0
  186. data/lib/mencoro/models/change_tracked_query_check_frequency_request_data.rb +190 -0
  187. data/lib/mencoro/models/change_tracked_query_passes_request_data.rb +184 -0
  188. data/lib/mencoro/models/citation_resource.rb +306 -0
  189. data/lib/mencoro/models/cluster_membership_request_data.rb +186 -0
  190. data/lib/mencoro/models/competitor_resource.rb +250 -0
  191. data/lib/mencoro/models/create_competitor_request.rb +247 -0
  192. data/lib/mencoro/models/create_invitation200_response.rb +202 -0
  193. data/lib/mencoro/models/create_invitation201_response.rb +347 -0
  194. data/lib/mencoro/models/create_invitation_request.rb +192 -0
  195. data/lib/mencoro/models/create_organization201_response.rb +166 -0
  196. data/lib/mencoro/models/create_organization_request.rb +175 -0
  197. data/lib/mencoro/models/create_project_request.rb +307 -0
  198. data/lib/mencoro/models/create_project_request_competitors_inner.rb +256 -0
  199. data/lib/mencoro/models/create_query_cluster409_response.rb +165 -0
  200. data/lib/mencoro/models/create_query_cluster_request.rb +167 -0
  201. data/lib/mencoro/models/delete_query_cluster200_response.rb +168 -0
  202. data/lib/mencoro/models/entitlements_resource.rb +328 -0
  203. data/lib/mencoro/models/get_available_filters200_response.rb +173 -0
  204. data/lib/mencoro/models/get_available_filters200_response_clusters_inner.rb +157 -0
  205. data/lib/mencoro/models/get_me_stats200_response.rb +156 -0
  206. data/lib/mencoro/models/get_me_stats200_response_organizations.rb +167 -0
  207. data/lib/mencoro/models/get_me_stats200_response_projects.rb +196 -0
  208. data/lib/mencoro/models/get_membership_stats200_response.rb +322 -0
  209. data/lib/mencoro/models/get_mention_samples400_response.rb +231 -0
  210. data/lib/mencoro/models/get_mention_samples400_response_details_value_inner.rb +168 -0
  211. data/lib/mencoro/models/get_metric_glossary200_response.rb +149 -0
  212. data/lib/mencoro/models/get_metric_glossary200_response_metrics_inner.rb +240 -0
  213. data/lib/mencoro/models/get_organization_overview200_response.rb +158 -0
  214. data/lib/mencoro/models/get_organization_overview200_response_aggregate.rb +209 -0
  215. data/lib/mencoro/models/get_organization_overview200_response_projects_inner.rb +218 -0
  216. data/lib/mencoro/models/get_organization_stats200_response.rb +165 -0
  217. data/lib/mencoro/models/get_organization_stats200_response_invitations.rb +167 -0
  218. data/lib/mencoro/models/get_organization_stats200_response_members.rb +167 -0
  219. data/lib/mencoro/models/get_organization_stats200_response_projects.rb +196 -0
  220. data/lib/mencoro/models/get_share_of_voice_formula200_response.rb +182 -0
  221. data/lib/mencoro/models/get_tracking_coverage200_response.rb +209 -0
  222. data/lib/mencoro/models/get_tracking_coverage200_response_sample_inner.rb +229 -0
  223. data/lib/mencoro/models/invitation_resource.rb +331 -0
  224. data/lib/mencoro/models/keyword_listing_resource.rb +798 -0
  225. data/lib/mencoro/models/keyword_listing_resource_mention_type_counts.rb +184 -0
  226. data/lib/mencoro/models/list_ai_responses200_response.rb +159 -0
  227. data/lib/mencoro/models/list_competitors200_response.rb +159 -0
  228. data/lib/mencoro/models/list_invitations200_response.rb +158 -0
  229. data/lib/mencoro/models/list_keyword_listings200_response.rb +180 -0
  230. data/lib/mencoro/models/list_members200_response.rb +158 -0
  231. data/lib/mencoro/models/list_organizations200_response.rb +158 -0
  232. data/lib/mencoro/models/list_projects200_response.rb +159 -0
  233. data/lib/mencoro/models/list_query_clusters200_response.rb +159 -0
  234. data/lib/mencoro/models/list_search_snapshots200_response.rb +159 -0
  235. data/lib/mencoro/models/list_shopping_snapshots200_response.rb +159 -0
  236. data/lib/mencoro/models/me_resource.rb +394 -0
  237. data/lib/mencoro/models/member_resource.rb +322 -0
  238. data/lib/mencoro/models/operation_effect.rb +204 -0
  239. data/lib/mencoro/models/organization_resource.rb +326 -0
  240. data/lib/mencoro/models/preview_organization_operation200_response.rb +236 -0
  241. data/lib/mencoro/models/preview_organization_operation200_response_organization.rb +158 -0
  242. data/lib/mencoro/models/preview_organization_operation_request.rb +213 -0
  243. data/lib/mencoro/models/project_detail_resource.rb +380 -0
  244. data/lib/mencoro/models/project_detail_resource_competitors_inner.rb +178 -0
  245. data/lib/mencoro/models/project_resource.rb +422 -0
  246. data/lib/mencoro/models/projected_monthly_checks_resource.rb +211 -0
  247. data/lib/mencoro/models/query_cluster_resource.rb +229 -0
  248. data/lib/mencoro/models/report_ai_response_request.rb +227 -0
  249. data/lib/mencoro/models/search_result_resource.rb +284 -0
  250. data/lib/mencoro/models/search_snapshot_resource.rb +302 -0
  251. data/lib/mencoro/models/search_tracked_queries200_response.rb +158 -0
  252. data/lib/mencoro/models/shopping_offer_resource.rb +381 -0
  253. data/lib/mencoro/models/shopping_snapshot_resource.rb +302 -0
  254. data/lib/mencoro/models/start_brand_discovery_job_request.rb +185 -0
  255. data/lib/mencoro/models/start_brand_name_suggestion_job_request.rb +287 -0
  256. data/lib/mencoro/models/start_clustering_job_request_data.rb +249 -0
  257. data/lib/mencoro/models/start_keyword_discovery_job_request.rb +266 -0
  258. data/lib/mencoro/models/start_prompt_discovery_job_request.rb +276 -0
  259. data/lib/mencoro/models/submitted_checks_resource.rb +195 -0
  260. data/lib/mencoro/models/subscription_resource.rb +362 -0
  261. data/lib/mencoro/models/tracked_query_count_resource.rb +193 -0
  262. data/lib/mencoro/models/tracked_query_detail_resource.rb +440 -0
  263. data/lib/mencoro/models/tracked_query_resource.rb +492 -0
  264. data/lib/mencoro/models/tracked_query_usage_resource.rb +175 -0
  265. data/lib/mencoro/models/update_organization_request.rb +195 -0
  266. data/lib/mencoro/models/update_project_brand_profile_request.rb +218 -0
  267. data/lib/mencoro/models/update_project_request.rb +182 -0
  268. data/lib/mencoro/version.rb +15 -0
  269. data/lib/mencoro.rb +169 -0
  270. data/mencoro.gemspec +41 -0
  271. data/spec/api/account_api_spec.rb +57 -0
  272. data/spec/api/analytics_api_spec.rb +318 -0
  273. data/spec/api/billing_api_spec.rb +47 -0
  274. data/spec/api/captures_api_spec.rb +93 -0
  275. data/spec/api/clusters_api_spec.rb +126 -0
  276. data/spec/api/discovery_api_spec.rb +94 -0
  277. data/spec/api/invitations_api_spec.rb +83 -0
  278. data/spec/api/jobs_api_spec.rb +48 -0
  279. data/spec/api/members_api_spec.rb +111 -0
  280. data/spec/api/organization_operations_api_spec.rb +47 -0
  281. data/spec/api/organizations_api_spec.rb +181 -0
  282. data/spec/api/projects_api_spec.rb +229 -0
  283. data/spec/api/tracked_queries_api_spec.rb +344 -0
  284. data/spec/models/accepted_job_resource_spec.rb +48 -0
  285. data/spec/models/ai_response_report_resource_spec.rb +70 -0
  286. data/spec/models/ai_response_resource_spec.rb +90 -0
  287. data/spec/models/apply_clustering_job_outcome_clusters_inner_spec.rb +48 -0
  288. data/spec/models/apply_clustering_job_outcome_failed_inner_spec.rb +48 -0
  289. data/spec/models/apply_clustering_job_outcome_skipped_clusters_inner_spec.rb +42 -0
  290. data/spec/models/apply_clustering_job_outcome_spec.rb +60 -0
  291. data/spec/models/apply_clustering_job_outcome_successful_inner_spec.rb +42 -0
  292. data/spec/models/async_job_resource_spec.rb +62 -0
  293. data/spec/models/batch_change_tracked_query_check_frequency_request_data_spec.rb +46 -0
  294. data/spec/models/batch_change_tracked_query_passes_request_data_spec.rb +42 -0
  295. data/spec/models/batch_create_query_clusters_outcome_failed_inner_spec.rb +48 -0
  296. data/spec/models/batch_create_query_clusters_outcome_spec.rb +42 -0
  297. data/spec/models/batch_create_query_clusters_outcome_successful_inner_spec.rb +42 -0
  298. data/spec/models/batch_create_query_clusters_request_data_spec.rb +36 -0
  299. data/spec/models/batch_create_tracked_queries_request_data_spec.rb +80 -0
  300. data/spec/models/batch_create_tracked_queries_result_resource_failed_inner_spec.rb +60 -0
  301. data/spec/models/batch_create_tracked_queries_result_resource_spec.rb +42 -0
  302. data/spec/models/batch_create_tracked_queries_result_resource_successful_inner_spec.rb +54 -0
  303. data/spec/models/batch_force_check_tracked_queries200_response_failed_inner_spec.rb +48 -0
  304. data/spec/models/batch_force_check_tracked_queries200_response_spec.rb +42 -0
  305. data/spec/models/batch_pause_tracked_queries200_response_failed_inner_spec.rb +48 -0
  306. data/spec/models/batch_pause_tracked_queries200_response_spec.rb +42 -0
  307. data/spec/models/batch_pause_tracked_queries200_response_successful_inner_spec.rb +36 -0
  308. data/spec/models/batch_resume_tracked_queries200_response_spec.rb +42 -0
  309. data/spec/models/batch_targets_request_data_spec.rb +36 -0
  310. data/spec/models/batch_write_outcome_failed_inner_spec.rb +48 -0
  311. data/spec/models/batch_write_outcome_spec.rb +42 -0
  312. data/spec/models/brand_profile_resource_spec.rb +54 -0
  313. data/spec/models/bulk_add_clusters_to_tracked_queries200_response_spec.rb +42 -0
  314. data/spec/models/bulk_add_clusters_to_tracked_queries_request_spec.rb +42 -0
  315. data/spec/models/bulk_remove_clusters_from_tracked_queries200_response_spec.rb +42 -0
  316. data/spec/models/bulk_remove_clusters_from_tracked_queries_request_spec.rb +42 -0
  317. data/spec/models/change_member_role_request_spec.rb +40 -0
  318. data/spec/models/change_tracked_query_check_frequency_request_data_spec.rb +40 -0
  319. data/spec/models/change_tracked_query_passes_request_data_spec.rb +36 -0
  320. data/spec/models/citation_resource_spec.rb +90 -0
  321. data/spec/models/cluster_membership_request_data_spec.rb +36 -0
  322. data/spec/models/competitor_resource_spec.rb +54 -0
  323. data/spec/models/create_competitor_request_spec.rb +48 -0
  324. data/spec/models/create_invitation200_response_spec.rb +52 -0
  325. data/spec/models/create_invitation201_response_spec.rb +86 -0
  326. data/spec/models/create_invitation_request_spec.rb +46 -0
  327. data/spec/models/create_organization201_response_spec.rb +48 -0
  328. data/spec/models/create_organization_request_spec.rb +36 -0
  329. data/spec/models/create_project_request_competitors_inner_spec.rb +48 -0
  330. data/spec/models/create_project_request_spec.rb +54 -0
  331. data/spec/models/create_query_cluster409_response_spec.rb +48 -0
  332. data/spec/models/create_query_cluster_request_spec.rb +36 -0
  333. data/spec/models/delete_query_cluster200_response_spec.rb +48 -0
  334. data/spec/models/entitlements_resource_spec.rb +104 -0
  335. data/spec/models/get_available_filters200_response_clusters_inner_spec.rb +42 -0
  336. data/spec/models/get_available_filters200_response_spec.rb +48 -0
  337. data/spec/models/get_me_stats200_response_organizations_spec.rb +36 -0
  338. data/spec/models/get_me_stats200_response_projects_spec.rb +42 -0
  339. data/spec/models/get_me_stats200_response_spec.rb +42 -0
  340. data/spec/models/get_membership_stats200_response_spec.rb +72 -0
  341. data/spec/models/get_mention_samples400_response_details_value_inner_spec.rb +48 -0
  342. data/spec/models/get_mention_samples400_response_spec.rb +54 -0
  343. data/spec/models/get_metric_glossary200_response_metrics_inner_spec.rb +76 -0
  344. data/spec/models/get_metric_glossary200_response_spec.rb +36 -0
  345. data/spec/models/get_organization_overview200_response_aggregate_spec.rb +72 -0
  346. data/spec/models/get_organization_overview200_response_projects_inner_spec.rb +78 -0
  347. data/spec/models/get_organization_overview200_response_spec.rb +42 -0
  348. data/spec/models/get_organization_stats200_response_invitations_spec.rb +36 -0
  349. data/spec/models/get_organization_stats200_response_members_spec.rb +36 -0
  350. data/spec/models/get_organization_stats200_response_projects_spec.rb +42 -0
  351. data/spec/models/get_organization_stats200_response_spec.rb +48 -0
  352. data/spec/models/get_share_of_voice_formula200_response_spec.rb +54 -0
  353. data/spec/models/get_tracking_coverage200_response_sample_inner_spec.rb +70 -0
  354. data/spec/models/get_tracking_coverage200_response_spec.rb +72 -0
  355. data/spec/models/invitation_resource_spec.rb +80 -0
  356. data/spec/models/keyword_listing_resource_mention_type_counts_spec.rb +60 -0
  357. data/spec/models/keyword_listing_resource_spec.rb +262 -0
  358. data/spec/models/list_ai_responses200_response_spec.rb +42 -0
  359. data/spec/models/list_competitors200_response_spec.rb +42 -0
  360. data/spec/models/list_invitations200_response_spec.rb +42 -0
  361. data/spec/models/list_keyword_listings200_response_spec.rb +54 -0
  362. data/spec/models/list_members200_response_spec.rb +42 -0
  363. data/spec/models/list_organizations200_response_spec.rb +42 -0
  364. data/spec/models/list_projects200_response_spec.rb +42 -0
  365. data/spec/models/list_query_clusters200_response_spec.rb +42 -0
  366. data/spec/models/list_search_snapshots200_response_spec.rb +42 -0
  367. data/spec/models/list_shopping_snapshots200_response_spec.rb +42 -0
  368. data/spec/models/me_resource_spec.rb +92 -0
  369. data/spec/models/member_resource_spec.rb +74 -0
  370. data/spec/models/operation_effect_spec.rb +48 -0
  371. data/spec/models/organization_resource_spec.rb +86 -0
  372. data/spec/models/preview_organization_operation200_response_organization_spec.rb +42 -0
  373. data/spec/models/preview_organization_operation200_response_spec.rb +84 -0
  374. data/spec/models/preview_organization_operation_request_spec.rb +58 -0
  375. data/spec/models/project_detail_resource_competitors_inner_spec.rb +54 -0
  376. data/spec/models/project_detail_resource_spec.rb +82 -0
  377. data/spec/models/project_resource_spec.rb +136 -0
  378. data/spec/models/projected_monthly_checks_resource_spec.rb +42 -0
  379. data/spec/models/query_cluster_resource_spec.rb +48 -0
  380. data/spec/models/report_ai_response_request_spec.rb +52 -0
  381. data/spec/models/search_result_resource_spec.rb +78 -0
  382. data/spec/models/search_snapshot_resource_spec.rb +66 -0
  383. data/spec/models/search_tracked_queries200_response_spec.rb +42 -0
  384. data/spec/models/shopping_offer_resource_spec.rb +96 -0
  385. data/spec/models/shopping_snapshot_resource_spec.rb +66 -0
  386. data/spec/models/start_brand_discovery_job_request_spec.rb +42 -0
  387. data/spec/models/start_brand_name_suggestion_job_request_spec.rb +54 -0
  388. data/spec/models/start_clustering_job_request_data_spec.rb +52 -0
  389. data/spec/models/start_keyword_discovery_job_request_spec.rb +54 -0
  390. data/spec/models/start_prompt_discovery_job_request_spec.rb +54 -0
  391. data/spec/models/submitted_checks_resource_spec.rb +42 -0
  392. data/spec/models/subscription_resource_spec.rb +120 -0
  393. data/spec/models/tracked_query_count_resource_spec.rb +42 -0
  394. data/spec/models/tracked_query_detail_resource_spec.rb +108 -0
  395. data/spec/models/tracked_query_resource_spec.rb +150 -0
  396. data/spec/models/tracked_query_usage_resource_spec.rb +36 -0
  397. data/spec/models/update_organization_request_spec.rb +48 -0
  398. data/spec/models/update_project_brand_profile_request_spec.rb +42 -0
  399. data/spec/models/update_project_request_spec.rb +36 -0
  400. data/spec/spec_helper.rb +111 -0
  401. metadata +641 -0
@@ -0,0 +1,1320 @@
1
+ # Mencoro::AnalyticsApi
2
+
3
+ All URIs are relative to *https://api.mencoro.com*
4
+
5
+ | Method | HTTP request | Description |
6
+ | ------ | ------------ | ----------- |
7
+ | [**get_available_filters**](AnalyticsApi.md#get_available_filters) | **GET** /api/v1/organizations/{organizationId}/projects/{projectId}/available-filters | Filter values a project is configured for |
8
+ | [**get_cited_sources**](AnalyticsApi.md#get_cited_sources) | **GET** /api/v1/organizations/{organizationId}/projects/{projectId}/cited-sources | Domains and pages the AI answers cited |
9
+ | [**get_cluster_breakdown**](AnalyticsApi.md#get_cluster_breakdown) | **GET** /api/v1/organizations/{organizationId}/projects/{projectId}/metrics/clusters | Rank-tracking metrics per keyword cluster |
10
+ | [**get_competitor_co_occurrence**](AnalyticsApi.md#get_competitor_co_occurrence) | **GET** /api/v1/organizations/{organizationId}/projects/{projectId}/competitors/co-occurrence | Head-to-head record of the brand against each tracked competitor |
11
+ | [**get_mention_mix**](AnalyticsApi.md#get_mention_mix) | **GET** /api/v1/organizations/{organizationId}/projects/{projectId}/mentions/mix | Composition of a project brand mentions in AI answers |
12
+ | [**get_mention_samples**](AnalyticsApi.md#get_mention_samples) | **GET** /api/v1/organizations/{organizationId}/projects/{projectId}/mentions | Sample of the raw AI mention texts of a project |
13
+ | [**get_metric_glossary**](AnalyticsApi.md#get_metric_glossary) | **GET** /api/v1/metric-glossary | Map everyday wording to a metric and the operation that serves it |
14
+ | [**get_organization_overview**](AnalyticsApi.md#get_organization_overview) | **GET** /api/v1/organizations/{organizationId}/overview | Snapshot rank-health board across an organization active projects |
15
+ | [**get_project_metrics**](AnalyticsApi.md#get_project_metrics) | **GET** /api/v1/organizations/{organizationId}/projects/{projectId}/metrics | Headline visibility metrics of a project |
16
+ | [**get_project_sentiment**](AnalyticsApi.md#get_project_sentiment) | **GET** /api/v1/organizations/{organizationId}/projects/{projectId}/sentiment | Sentiment breakdown of a project brand mentions |
17
+ | [**get_project_time_series**](AnalyticsApi.md#get_project_time_series) | **GET** /api/v1/organizations/{organizationId}/projects/{projectId}/timeseries | Rank-tracking metrics of a project over time |
18
+ | [**get_query_movers**](AnalyticsApi.md#get_query_movers) | **GET** /api/v1/organizations/{organizationId}/projects/{projectId}/metrics/movers | Tracked queries ranked by how much a metric moved |
19
+ | [**get_share_of_voice_formula**](AnalyticsApi.md#get_share_of_voice_formula) | **GET** /api/v1/organizations/{organizationId}/projects/{projectId}/metrics/share-of-voice-formula | The constants behind the Share of Voice score |
20
+ | [**get_tracked_query_time_series**](AnalyticsApi.md#get_tracked_query_time_series) | **GET** /api/v1/organizations/{organizationId}/projects/{projectId}/tracked-queries/{trackedQueryId}/timeseries | Rank-tracking time series of a single tracked query |
21
+ | [**get_tracking_coverage**](AnalyticsApi.md#get_tracking_coverage) | **GET** /api/v1/organizations/{organizationId}/projects/{projectId}/coverage | Coverage and staleness of a project tracked queries |
22
+ | [**list_keyword_listings**](AnalyticsApi.md#list_keyword_listings) | **GET** /api/v1/organizations/{organizationId}/projects/{projectId}/keyword-listings | List a project's keywords with their windowed metrics |
23
+
24
+
25
+ ## get_available_filters
26
+
27
+ > <GetAvailableFilters200Response> get_available_filters(organization_id, project_id)
28
+
29
+ Filter values a project is configured for
30
+
31
+ Minimum role: viewer. Call this first: it is where every other analytics operation sends you for the valid engines, countries and keyword clusters of a project, and the values it returns are the exact strings the engines, countries and queryClusterIds parameters accept — anything else is rejected as a 400. Engines are engine codes, countries are ISO-3166 alpha-2 codes, and clusters are {id, name} objects whose id goes in queryClusterIds. Takes no date window: it describes how the project is configured right now, so a value is listed as soon as a tracked query uses it, even when no response has been captured for it yet. An empty list therefore means nothing is configured for it, not that no data was collected. Competitor ids are not part of this response.
32
+
33
+ ### Examples
34
+
35
+ ```ruby
36
+ require 'time'
37
+ require 'mencoro'
38
+ # setup authorization
39
+ Mencoro.configure do |config|
40
+ # Configure Bearer authorization: ApiKey
41
+ config.access_token = 'YOUR_BEARER_TOKEN'
42
+ end
43
+
44
+ api_instance = Mencoro::AnalyticsApi.new
45
+ organization_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
46
+ project_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
47
+
48
+ begin
49
+ # Filter values a project is configured for
50
+ result = api_instance.get_available_filters(organization_id, project_id)
51
+ p result
52
+ rescue Mencoro::ApiError => e
53
+ puts "Error when calling AnalyticsApi->get_available_filters: #{e}"
54
+ end
55
+ ```
56
+
57
+ #### Using the get_available_filters_with_http_info variant
58
+
59
+ This returns an Array which contains the response data, status code and headers.
60
+
61
+ > <Array(<GetAvailableFilters200Response>, Integer, Hash)> get_available_filters_with_http_info(organization_id, project_id)
62
+
63
+ ```ruby
64
+ begin
65
+ # Filter values a project is configured for
66
+ data, status_code, headers = api_instance.get_available_filters_with_http_info(organization_id, project_id)
67
+ p status_code # => 2xx
68
+ p headers # => { ... }
69
+ p data # => <GetAvailableFilters200Response>
70
+ rescue Mencoro::ApiError => e
71
+ puts "Error when calling AnalyticsApi->get_available_filters_with_http_info: #{e}"
72
+ end
73
+ ```
74
+
75
+ ### Parameters
76
+
77
+ | Name | Type | Description | Notes |
78
+ | ---- | ---- | ----------- | ----- |
79
+ | **organization_id** | **String** | | |
80
+ | **project_id** | **String** | | |
81
+
82
+ ### Return type
83
+
84
+ [**GetAvailableFilters200Response**](GetAvailableFilters200Response.md)
85
+
86
+ ### Authorization
87
+
88
+ [ApiKey](../README.md#ApiKey)
89
+
90
+ ### HTTP request headers
91
+
92
+ - **Content-Type**: Not defined
93
+ - **Accept**: application/json
94
+
95
+
96
+ ## get_cited_sources
97
+
98
+ > get_cited_sources(organization_id, project_id, date_from, date_to, opts)
99
+
100
+ Domains and pages the AI answers cited
101
+
102
+ Minimum role: viewer. The sources the answer engines drew on across a project's AI answers over a date window, ranked by how often they were cited. Per source: citationCount, the total number of citations; distinctResponseCount and distinctQueryCount, how many captured answers and tracked queries it appeared in; avgPosition, its average 1-based rank inside the answers' citation lists, where LOWER is better. A null avgPosition means no citation in the window carried a position, not a rank of zero; a null domain or sampleTitle means the citation never carried one. `total` counts the distinct sources matching the window, before paging. The list is UNFILTERED by ownership: the brand's, competitors' and third-party sources sit in the same ranking. Only the AI answer engines (chatgpt, perplexity, google_ai_overview, google_ai_mode) produce citations, so filtering by google_serp or google_shopping is accepted and returns nothing. Citations still behind an answer engine's redirect (a google.com/goto link, whose URL names the engine rather than the source) are excluded, so a source cited only through such links is absent from this list rather than counted as zero.
103
+
104
+ ### Examples
105
+
106
+ ```ruby
107
+ require 'time'
108
+ require 'mencoro'
109
+ # setup authorization
110
+ Mencoro.configure do |config|
111
+ # Configure Bearer authorization: ApiKey
112
+ config.access_token = 'YOUR_BEARER_TOKEN'
113
+ end
114
+
115
+ api_instance = Mencoro::AnalyticsApi.new
116
+ organization_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
117
+ project_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
118
+ date_from = Date.parse('2013-10-20') # Date | Inclusive start of the window, Y-m-d. Must fall inside the data retention window.
119
+ date_to = Date.parse('2013-10-20') # Date | Inclusive end of the window, Y-m-d.
120
+ opts = {
121
+ engines: ['chatgpt'], # Array<String> | Repeatable, or comma-separated. Only the AI engines carry citations.
122
+ group_by: 'domain', # String | Grain of the roll-up: \"domain\" by host, \"page\" by exact URL.
123
+ limit: 56, # Integer | Page size. A larger value is rejected, never silently reduced.
124
+ offset: 56 # Integer | Number of sources to skip.
125
+ }
126
+
127
+ begin
128
+ # Domains and pages the AI answers cited
129
+ api_instance.get_cited_sources(organization_id, project_id, date_from, date_to, opts)
130
+ rescue Mencoro::ApiError => e
131
+ puts "Error when calling AnalyticsApi->get_cited_sources: #{e}"
132
+ end
133
+ ```
134
+
135
+ #### Using the get_cited_sources_with_http_info variant
136
+
137
+ This returns an Array which contains the response data (`nil` in this case), status code and headers.
138
+
139
+ > <Array(nil, Integer, Hash)> get_cited_sources_with_http_info(organization_id, project_id, date_from, date_to, opts)
140
+
141
+ ```ruby
142
+ begin
143
+ # Domains and pages the AI answers cited
144
+ data, status_code, headers = api_instance.get_cited_sources_with_http_info(organization_id, project_id, date_from, date_to, opts)
145
+ p status_code # => 2xx
146
+ p headers # => { ... }
147
+ p data # => nil
148
+ rescue Mencoro::ApiError => e
149
+ puts "Error when calling AnalyticsApi->get_cited_sources_with_http_info: #{e}"
150
+ end
151
+ ```
152
+
153
+ ### Parameters
154
+
155
+ | Name | Type | Description | Notes |
156
+ | ---- | ---- | ----------- | ----- |
157
+ | **organization_id** | **String** | | |
158
+ | **project_id** | **String** | | |
159
+ | **date_from** | **Date** | Inclusive start of the window, Y-m-d. Must fall inside the data retention window. | |
160
+ | **date_to** | **Date** | Inclusive end of the window, Y-m-d. | |
161
+ | **engines** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. Only the AI engines carry citations. | [optional] |
162
+ | **group_by** | **String** | Grain of the roll-up: \&quot;domain\&quot; by host, \&quot;page\&quot; by exact URL. | [optional][default to &#39;domain&#39;] |
163
+ | **limit** | **Integer** | Page size. A larger value is rejected, never silently reduced. | [optional][default to 20] |
164
+ | **offset** | **Integer** | Number of sources to skip. | [optional][default to 0] |
165
+
166
+ ### Return type
167
+
168
+ nil (empty response body)
169
+
170
+ ### Authorization
171
+
172
+ [ApiKey](../README.md#ApiKey)
173
+
174
+ ### HTTP request headers
175
+
176
+ - **Content-Type**: Not defined
177
+ - **Accept**: Not defined
178
+
179
+
180
+ ## get_cluster_breakdown
181
+
182
+ > get_cluster_breakdown(organization_id, project_id, date_from, date_to, opts)
183
+
184
+ Rank-tracking metrics per keyword cluster
185
+
186
+ Minimum role: viewer. One row per keyword cluster over a date window, with its tracked query and keyword counts, average positions, rates, share of voice and sentiment split. A row whose clusterId is null is the ungrouped bucket: the tracked queries belonging to no cluster. Position metrics are 1-based and LOWER is better; rates, positivityIndex and shareOfVoice are 0-100 percentages where higher is better. A null metric means nothing was captured for that cluster in the window — it is not a zero, and averaging or charting it as one would misstate the period. dataDirtySince is non-null while a recalculation is pending, meaning the numbers predate the latest configuration change.
187
+
188
+ ### Examples
189
+
190
+ ```ruby
191
+ require 'time'
192
+ require 'mencoro'
193
+ # setup authorization
194
+ Mencoro.configure do |config|
195
+ # Configure Bearer authorization: ApiKey
196
+ config.access_token = 'YOUR_BEARER_TOKEN'
197
+ end
198
+
199
+ api_instance = Mencoro::AnalyticsApi.new
200
+ organization_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
201
+ project_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
202
+ date_from = Date.parse('2013-10-20') # Date | Inclusive start of the window, Y-m-d. Must fall inside the data retention window.
203
+ date_to = Date.parse('2013-10-20') # Date | Inclusive end of the window, Y-m-d.
204
+ opts = {
205
+ engines: ['chatgpt'], # Array<String> | Repeatable, or comma-separated.
206
+ countries: ['inner_example'], # Array<String> | ISO-3166 alpha-2 codes or English names. Must be configured on the project.
207
+ query_cluster_ids: ['inner_example'], # Array<String> | Restrict to these clusters. Each must belong to the project.
208
+ include_ungrouped_queries: true # Boolean | Sent alone, returns only the ungrouped bucket rather than adding it to every cluster.
209
+ }
210
+
211
+ begin
212
+ # Rank-tracking metrics per keyword cluster
213
+ api_instance.get_cluster_breakdown(organization_id, project_id, date_from, date_to, opts)
214
+ rescue Mencoro::ApiError => e
215
+ puts "Error when calling AnalyticsApi->get_cluster_breakdown: #{e}"
216
+ end
217
+ ```
218
+
219
+ #### Using the get_cluster_breakdown_with_http_info variant
220
+
221
+ This returns an Array which contains the response data (`nil` in this case), status code and headers.
222
+
223
+ > <Array(nil, Integer, Hash)> get_cluster_breakdown_with_http_info(organization_id, project_id, date_from, date_to, opts)
224
+
225
+ ```ruby
226
+ begin
227
+ # Rank-tracking metrics per keyword cluster
228
+ data, status_code, headers = api_instance.get_cluster_breakdown_with_http_info(organization_id, project_id, date_from, date_to, opts)
229
+ p status_code # => 2xx
230
+ p headers # => { ... }
231
+ p data # => nil
232
+ rescue Mencoro::ApiError => e
233
+ puts "Error when calling AnalyticsApi->get_cluster_breakdown_with_http_info: #{e}"
234
+ end
235
+ ```
236
+
237
+ ### Parameters
238
+
239
+ | Name | Type | Description | Notes |
240
+ | ---- | ---- | ----------- | ----- |
241
+ | **organization_id** | **String** | | |
242
+ | **project_id** | **String** | | |
243
+ | **date_from** | **Date** | Inclusive start of the window, Y-m-d. Must fall inside the data retention window. | |
244
+ | **date_to** | **Date** | Inclusive end of the window, Y-m-d. | |
245
+ | **engines** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. | [optional] |
246
+ | **countries** | [**Array&lt;String&gt;**](String.md) | ISO-3166 alpha-2 codes or English names. Must be configured on the project. | [optional] |
247
+ | **query_cluster_ids** | [**Array&lt;String&gt;**](String.md) | Restrict to these clusters. Each must belong to the project. | [optional] |
248
+ | **include_ungrouped_queries** | **Boolean** | Sent alone, returns only the ungrouped bucket rather than adding it to every cluster. | [optional][default to false] |
249
+
250
+ ### Return type
251
+
252
+ nil (empty response body)
253
+
254
+ ### Authorization
255
+
256
+ [ApiKey](../README.md#ApiKey)
257
+
258
+ ### HTTP request headers
259
+
260
+ - **Content-Type**: Not defined
261
+ - **Accept**: Not defined
262
+
263
+
264
+ ## get_competitor_co_occurrence
265
+
266
+ > get_competitor_co_occurrence(organization_id, project_id, date_from, date_to, opts)
267
+
268
+ Head-to-head record of the brand against each tracked competitor
269
+
270
+ Minimum role: viewer. Restricted to the AI answers where the brand and a competitor are BOTH mentioned, one row per tracked competitor: sharedResponseCount is how many such answers there are, and brandWins / competitorWins / ties split them by who holds the better (lower) best mention position. winRate is the percentage 0-100 of those answers the brand wins; avgOwnPosition and avgCompetitorPosition are the average best mention position each side held, 1-based, so LOWER is better. exampleQueryText and exampleAiResponseId point at one representative shared answer. Every nullable field means \"not known yet\" rather than zero: a null winRate or average position is the absence of a shared answer in the window, not a record of losing. Tracked competitors only.
271
+
272
+ ### Examples
273
+
274
+ ```ruby
275
+ require 'time'
276
+ require 'mencoro'
277
+ # setup authorization
278
+ Mencoro.configure do |config|
279
+ # Configure Bearer authorization: ApiKey
280
+ config.access_token = 'YOUR_BEARER_TOKEN'
281
+ end
282
+
283
+ api_instance = Mencoro::AnalyticsApi.new
284
+ organization_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
285
+ project_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
286
+ date_from = Date.parse('2013-10-20') # Date | Inclusive start of the window, Y-m-d. Must fall inside the data retention window.
287
+ date_to = Date.parse('2013-10-20') # Date | Inclusive end of the window, Y-m-d.
288
+ opts = {
289
+ engines: ['chatgpt'], # Array<String> | Repeatable, or comma-separated. SERP and Shopping carry no AI answer text, so they contribute no co-occurrence.
290
+ countries: ['inner_example'], # Array<String> | ISO-3166 alpha-2 codes or English names. Must be configured on the project.
291
+ competitor_id: '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String | Restricts the answer to a single tracked competitor. Omit it for every tracked competitor. The available-filters endpoint lists the valid ids.
292
+ }
293
+
294
+ begin
295
+ # Head-to-head record of the brand against each tracked competitor
296
+ api_instance.get_competitor_co_occurrence(organization_id, project_id, date_from, date_to, opts)
297
+ rescue Mencoro::ApiError => e
298
+ puts "Error when calling AnalyticsApi->get_competitor_co_occurrence: #{e}"
299
+ end
300
+ ```
301
+
302
+ #### Using the get_competitor_co_occurrence_with_http_info variant
303
+
304
+ This returns an Array which contains the response data (`nil` in this case), status code and headers.
305
+
306
+ > <Array(nil, Integer, Hash)> get_competitor_co_occurrence_with_http_info(organization_id, project_id, date_from, date_to, opts)
307
+
308
+ ```ruby
309
+ begin
310
+ # Head-to-head record of the brand against each tracked competitor
311
+ data, status_code, headers = api_instance.get_competitor_co_occurrence_with_http_info(organization_id, project_id, date_from, date_to, opts)
312
+ p status_code # => 2xx
313
+ p headers # => { ... }
314
+ p data # => nil
315
+ rescue Mencoro::ApiError => e
316
+ puts "Error when calling AnalyticsApi->get_competitor_co_occurrence_with_http_info: #{e}"
317
+ end
318
+ ```
319
+
320
+ ### Parameters
321
+
322
+ | Name | Type | Description | Notes |
323
+ | ---- | ---- | ----------- | ----- |
324
+ | **organization_id** | **String** | | |
325
+ | **project_id** | **String** | | |
326
+ | **date_from** | **Date** | Inclusive start of the window, Y-m-d. Must fall inside the data retention window. | |
327
+ | **date_to** | **Date** | Inclusive end of the window, Y-m-d. | |
328
+ | **engines** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. SERP and Shopping carry no AI answer text, so they contribute no co-occurrence. | [optional] |
329
+ | **countries** | [**Array&lt;String&gt;**](String.md) | ISO-3166 alpha-2 codes or English names. Must be configured on the project. | [optional] |
330
+ | **competitor_id** | **String** | Restricts the answer to a single tracked competitor. Omit it for every tracked competitor. The available-filters endpoint lists the valid ids. | [optional] |
331
+
332
+ ### Return type
333
+
334
+ nil (empty response body)
335
+
336
+ ### Authorization
337
+
338
+ [ApiKey](../README.md#ApiKey)
339
+
340
+ ### HTTP request headers
341
+
342
+ - **Content-Type**: Not defined
343
+ - **Accept**: Not defined
344
+
345
+
346
+ ## get_mention_mix
347
+
348
+ > get_mention_mix(organization_id, project_id, date_from, date_to, opts)
349
+
350
+ Composition of a project brand mentions in AI answers
351
+
352
+ Minimum role: viewer. Counts of the project brand's own text mentions in AI answers over a date window, grouped three ways: byType (recommendation, comparison, listing, example, reference), byTone (positive, neutral, negative) and byQualifier (direct, conditional — a conditional mention is one the answer hedged with a condition). These are the inputs behind the Share of Voice weighted score. Every bucket is always present and is a plain count, never null: a zero means no mention of that kind was found in the window. The three groupings count the same mentions, so each one sums to the same total. Only the project brand is counted, never a competitor, and only mentions inside the answer text — a citation of the brand's URL is not a mention here. Only AI answer engines produce mentions, so restricting engines to google_serp or google_shopping alone returns all zeros. For the positive/neutral/negative split per engine and per competitor use the sentiment endpoint.
353
+
354
+ ### Examples
355
+
356
+ ```ruby
357
+ require 'time'
358
+ require 'mencoro'
359
+ # setup authorization
360
+ Mencoro.configure do |config|
361
+ # Configure Bearer authorization: ApiKey
362
+ config.access_token = 'YOUR_BEARER_TOKEN'
363
+ end
364
+
365
+ api_instance = Mencoro::AnalyticsApi.new
366
+ organization_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
367
+ project_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
368
+ date_from = Date.parse('2013-10-20') # Date | Inclusive start of the window, Y-m-d. Must fall inside the data retention window.
369
+ date_to = Date.parse('2013-10-20') # Date | Inclusive end of the window, Y-m-d.
370
+ opts = {
371
+ engines: ['chatgpt'], # Array<String> | Repeatable, or comma-separated. Non-AI engines contribute no mentions.
372
+ countries: ['inner_example'] # Array<String> | ISO-3166 alpha-2 codes or English names. Must be configured on the project.
373
+ }
374
+
375
+ begin
376
+ # Composition of a project brand mentions in AI answers
377
+ api_instance.get_mention_mix(organization_id, project_id, date_from, date_to, opts)
378
+ rescue Mencoro::ApiError => e
379
+ puts "Error when calling AnalyticsApi->get_mention_mix: #{e}"
380
+ end
381
+ ```
382
+
383
+ #### Using the get_mention_mix_with_http_info variant
384
+
385
+ This returns an Array which contains the response data (`nil` in this case), status code and headers.
386
+
387
+ > <Array(nil, Integer, Hash)> get_mention_mix_with_http_info(organization_id, project_id, date_from, date_to, opts)
388
+
389
+ ```ruby
390
+ begin
391
+ # Composition of a project brand mentions in AI answers
392
+ data, status_code, headers = api_instance.get_mention_mix_with_http_info(organization_id, project_id, date_from, date_to, opts)
393
+ p status_code # => 2xx
394
+ p headers # => { ... }
395
+ p data # => nil
396
+ rescue Mencoro::ApiError => e
397
+ puts "Error when calling AnalyticsApi->get_mention_mix_with_http_info: #{e}"
398
+ end
399
+ ```
400
+
401
+ ### Parameters
402
+
403
+ | Name | Type | Description | Notes |
404
+ | ---- | ---- | ----------- | ----- |
405
+ | **organization_id** | **String** | | |
406
+ | **project_id** | **String** | | |
407
+ | **date_from** | **Date** | Inclusive start of the window, Y-m-d. Must fall inside the data retention window. | |
408
+ | **date_to** | **Date** | Inclusive end of the window, Y-m-d. | |
409
+ | **engines** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. Non-AI engines contribute no mentions. | [optional] |
410
+ | **countries** | [**Array&lt;String&gt;**](String.md) | ISO-3166 alpha-2 codes or English names. Must be configured on the project. | [optional] |
411
+
412
+ ### Return type
413
+
414
+ nil (empty response body)
415
+
416
+ ### Authorization
417
+
418
+ [ApiKey](../README.md#ApiKey)
419
+
420
+ ### HTTP request headers
421
+
422
+ - **Content-Type**: Not defined
423
+ - **Accept**: Not defined
424
+
425
+
426
+ ## get_mention_samples
427
+
428
+ > get_mention_samples(organization_id, project_id, date_from, date_to, opts)
429
+
430
+ Sample of the raw AI mention texts of a project
431
+
432
+ Minimum role: viewer. A paginated page of the individual mention texts behind the aggregate numbers, for qualitative review and for checking sentiment labels by eye. Each sample carries the mention text, the engine and country it was seen in, the tracked query that produced it, its sentiment and mention type, and mentionPosition — a 1-based rank inside the answer where LOWER is better, always present. `total` counts every mention matching the filters, not the size of the page returned. Only mentions inside the answer text are returned: a citation of the brand URL is not a mention here, and only AI answer engines produce mentions, so restricting engines to google_serp or google_shopping alone returns an empty page rather than an error. Two fields carry a \"not known\" rather than a zero: country is null and queryText is empty when the tracked query behind the mention has since been deleted, and competitorId is null when the mention row stores no competitor id — which is NOT an assertion that the mention is about your own brand, since an untracked competitor also stores none. Read mentionRelation instead: `own` and `tracked-competitor` are what the scraper resolved to a configured entity, `untracked-competitor` is a rival the project does not track, and null means the row predates the field. brandName carries the mentioned brand, and is the only way to name an untracked competitor, which has no competitor id to resolve one from. Omitting the competitorId filter returns exactly the rows with no competitor id stored — that is, own-brand AND untracked-competitor mentions together, not every competitor; pass a competitor UUID to restrict the page to that competitor, and use mentionRelation to separate the rest. For the aggregate positive/neutral/negative split use the sentiment endpoint, and for weighted mention-type counts the mention mix endpoint.
433
+
434
+ ### Examples
435
+
436
+ ```ruby
437
+ require 'time'
438
+ require 'mencoro'
439
+ # setup authorization
440
+ Mencoro.configure do |config|
441
+ # Configure Bearer authorization: ApiKey
442
+ config.access_token = 'YOUR_BEARER_TOKEN'
443
+ end
444
+
445
+ api_instance = Mencoro::AnalyticsApi.new
446
+ organization_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
447
+ project_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
448
+ date_from = Date.parse('2013-10-20') # Date | Inclusive start of the window, Y-m-d. Must fall inside the data retention window.
449
+ date_to = Date.parse('2013-10-20') # Date | Inclusive end of the window, Y-m-d.
450
+ opts = {
451
+ engines: ['chatgpt'], # Array<String> | Repeatable, or comma-separated. Non-AI engines contribute no mentions.
452
+ countries: ['inner_example'], # Array<String> | ISO-3166 alpha-2 codes or English names. Must be configured on the project.
453
+ sentiment: 'positive', # String | Restrict to one sentiment label. Omit for every sentiment.
454
+ mention_type: 'recommendation', # String | Restrict to one mention type. Omit for every type.
455
+ competitor_id: '38400000-8cf0-11bd-b23e-10b96e4ef00d', # String | UUID of a single competitor, as listed by the available-filters endpoint (competitors[].id). Omitted, the page is restricted to mentions storing no competitor id, which is own-brand and untracked-competitor mentions together — see the operation description and read mentionRelation to tell them apart.
456
+ sort_by: 'recent', # String | recent: newest first. negative: negative sentiment first, then neutral, then positive, newest first inside each. engine and country: grouped alphabetically, newest first inside each group. An unknown value is rejected, not replaced by the default.
457
+ limit: 56, # Integer | Page size. A larger value is rejected, never silently reduced.
458
+ offset: 56 # Integer | Number of matching mentions to skip before the page starts.
459
+ }
460
+
461
+ begin
462
+ # Sample of the raw AI mention texts of a project
463
+ api_instance.get_mention_samples(organization_id, project_id, date_from, date_to, opts)
464
+ rescue Mencoro::ApiError => e
465
+ puts "Error when calling AnalyticsApi->get_mention_samples: #{e}"
466
+ end
467
+ ```
468
+
469
+ #### Using the get_mention_samples_with_http_info variant
470
+
471
+ This returns an Array which contains the response data (`nil` in this case), status code and headers.
472
+
473
+ > <Array(nil, Integer, Hash)> get_mention_samples_with_http_info(organization_id, project_id, date_from, date_to, opts)
474
+
475
+ ```ruby
476
+ begin
477
+ # Sample of the raw AI mention texts of a project
478
+ data, status_code, headers = api_instance.get_mention_samples_with_http_info(organization_id, project_id, date_from, date_to, opts)
479
+ p status_code # => 2xx
480
+ p headers # => { ... }
481
+ p data # => nil
482
+ rescue Mencoro::ApiError => e
483
+ puts "Error when calling AnalyticsApi->get_mention_samples_with_http_info: #{e}"
484
+ end
485
+ ```
486
+
487
+ ### Parameters
488
+
489
+ | Name | Type | Description | Notes |
490
+ | ---- | ---- | ----------- | ----- |
491
+ | **organization_id** | **String** | | |
492
+ | **project_id** | **String** | | |
493
+ | **date_from** | **Date** | Inclusive start of the window, Y-m-d. Must fall inside the data retention window. | |
494
+ | **date_to** | **Date** | Inclusive end of the window, Y-m-d. | |
495
+ | **engines** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. Non-AI engines contribute no mentions. | [optional] |
496
+ | **countries** | [**Array&lt;String&gt;**](String.md) | ISO-3166 alpha-2 codes or English names. Must be configured on the project. | [optional] |
497
+ | **sentiment** | **String** | Restrict to one sentiment label. Omit for every sentiment. | [optional] |
498
+ | **mention_type** | **String** | Restrict to one mention type. Omit for every type. | [optional] |
499
+ | **competitor_id** | **String** | UUID of a single competitor, as listed by the available-filters endpoint (competitors[].id). Omitted, the page is restricted to mentions storing no competitor id, which is own-brand and untracked-competitor mentions together — see the operation description and read mentionRelation to tell them apart. | [optional] |
500
+ | **sort_by** | **String** | recent: newest first. negative: negative sentiment first, then neutral, then positive, newest first inside each. engine and country: grouped alphabetically, newest first inside each group. An unknown value is rejected, not replaced by the default. | [optional][default to &#39;recent&#39;] |
501
+ | **limit** | **Integer** | Page size. A larger value is rejected, never silently reduced. | [optional][default to 20] |
502
+ | **offset** | **Integer** | Number of matching mentions to skip before the page starts. | [optional][default to 0] |
503
+
504
+ ### Return type
505
+
506
+ nil (empty response body)
507
+
508
+ ### Authorization
509
+
510
+ [ApiKey](../README.md#ApiKey)
511
+
512
+ ### HTTP request headers
513
+
514
+ - **Content-Type**: Not defined
515
+ - **Accept**: application/json
516
+
517
+
518
+ ## get_metric_glossary
519
+
520
+ > <GetMetricGlossary200Response> get_metric_glossary
521
+
522
+ Map everyday wording to a metric and the operation that serves it
523
+
524
+ Static reference, no project data. Each entry gives a metric, the everyday words people use for it, its unit and range, whether higher or lower is better, the operation that returns it, and example questions. Useful when turning a vague or non-technical request into the right call.
525
+
526
+ ### Examples
527
+
528
+ ```ruby
529
+ require 'time'
530
+ require 'mencoro'
531
+ # setup authorization
532
+ Mencoro.configure do |config|
533
+ # Configure Bearer authorization: ApiKey
534
+ config.access_token = 'YOUR_BEARER_TOKEN'
535
+ end
536
+
537
+ api_instance = Mencoro::AnalyticsApi.new
538
+
539
+ begin
540
+ # Map everyday wording to a metric and the operation that serves it
541
+ result = api_instance.get_metric_glossary
542
+ p result
543
+ rescue Mencoro::ApiError => e
544
+ puts "Error when calling AnalyticsApi->get_metric_glossary: #{e}"
545
+ end
546
+ ```
547
+
548
+ #### Using the get_metric_glossary_with_http_info variant
549
+
550
+ This returns an Array which contains the response data, status code and headers.
551
+
552
+ > <Array(<GetMetricGlossary200Response>, Integer, Hash)> get_metric_glossary_with_http_info
553
+
554
+ ```ruby
555
+ begin
556
+ # Map everyday wording to a metric and the operation that serves it
557
+ data, status_code, headers = api_instance.get_metric_glossary_with_http_info
558
+ p status_code # => 2xx
559
+ p headers # => { ... }
560
+ p data # => <GetMetricGlossary200Response>
561
+ rescue Mencoro::ApiError => e
562
+ puts "Error when calling AnalyticsApi->get_metric_glossary_with_http_info: #{e}"
563
+ end
564
+ ```
565
+
566
+ ### Parameters
567
+
568
+ This endpoint does not need any parameter.
569
+
570
+ ### Return type
571
+
572
+ [**GetMetricGlossary200Response**](GetMetricGlossary200Response.md)
573
+
574
+ ### Authorization
575
+
576
+ [ApiKey](../README.md#ApiKey)
577
+
578
+ ### HTTP request headers
579
+
580
+ - **Content-Type**: Not defined
581
+ - **Accept**: application/json
582
+
583
+
584
+ ## get_organization_overview
585
+
586
+ > <GetOrganizationOverview200Response> get_organization_overview(organization_id)
587
+
588
+ Snapshot rank-health board across an organization active projects
589
+
590
+ Minimum role: viewer. One row per active project — share of voice, mention rate, average mention position, positivity index and tracked-query count — ordered by share of voice, plus an organization-level aggregate of the same metrics. Archived projects are excluded. This is a current-state snapshot and takes no date window; for a date-ranged comparison call the per-project operations (getProjectMetrics, getProjectTimeSeries) for each projectId returned here. Every metric is nullable, and a null means the project has no rank data yet — not a score of zero. Higher is better for shareOfVoice, mentionRate and positivityIndex; avgMentionPosition is a 1-based rank, so LOWER is better.
591
+
592
+ ### Examples
593
+
594
+ ```ruby
595
+ require 'time'
596
+ require 'mencoro'
597
+ # setup authorization
598
+ Mencoro.configure do |config|
599
+ # Configure Bearer authorization: ApiKey
600
+ config.access_token = 'YOUR_BEARER_TOKEN'
601
+ end
602
+
603
+ api_instance = Mencoro::AnalyticsApi.new
604
+ organization_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
605
+
606
+ begin
607
+ # Snapshot rank-health board across an organization active projects
608
+ result = api_instance.get_organization_overview(organization_id)
609
+ p result
610
+ rescue Mencoro::ApiError => e
611
+ puts "Error when calling AnalyticsApi->get_organization_overview: #{e}"
612
+ end
613
+ ```
614
+
615
+ #### Using the get_organization_overview_with_http_info variant
616
+
617
+ This returns an Array which contains the response data, status code and headers.
618
+
619
+ > <Array(<GetOrganizationOverview200Response>, Integer, Hash)> get_organization_overview_with_http_info(organization_id)
620
+
621
+ ```ruby
622
+ begin
623
+ # Snapshot rank-health board across an organization active projects
624
+ data, status_code, headers = api_instance.get_organization_overview_with_http_info(organization_id)
625
+ p status_code # => 2xx
626
+ p headers # => { ... }
627
+ p data # => <GetOrganizationOverview200Response>
628
+ rescue Mencoro::ApiError => e
629
+ puts "Error when calling AnalyticsApi->get_organization_overview_with_http_info: #{e}"
630
+ end
631
+ ```
632
+
633
+ ### Parameters
634
+
635
+ | Name | Type | Description | Notes |
636
+ | ---- | ---- | ----------- | ----- |
637
+ | **organization_id** | **String** | | |
638
+
639
+ ### Return type
640
+
641
+ [**GetOrganizationOverview200Response**](GetOrganizationOverview200Response.md)
642
+
643
+ ### Authorization
644
+
645
+ [ApiKey](../README.md#ApiKey)
646
+
647
+ ### HTTP request headers
648
+
649
+ - **Content-Type**: Not defined
650
+ - **Accept**: application/json
651
+
652
+
653
+ ## get_project_metrics
654
+
655
+ > get_project_metrics(organization_id, project_id, date_from, date_to, opts)
656
+
657
+ Headline visibility metrics of a project
658
+
659
+ Minimum role: viewer. The project overview over a date window: share of voice (own and per competitor), mention / SERP / shopping rates, average and best positions, position stability, the sentiment split and the position-distribution buckets. Positions are 1-based, so a LOWER number is better; rates, the positivity index and share of voice are percentages from 0 to 100, where HIGHER is better. Every `trend*` field is the signed change against the immediately preceding window of the same length: negative means an improved position, positive means an improved rate or score. A null metric means \"not known yet\", never zero: a scalar is null when the window holds no checks at all, and a `trend*` field is null when there is no earlier window to compare against. The counters (`mentionCount`, `*TrackedQueryCount`, `*QueriesWithResult`, `sentiment*` and `mentionTypeCounts`) are genuine zeros instead, so an empty window reads as zero counts with null rates. `dataDirtySince` is non-null while a recalculation is pending, meaning the figures may still move for dates from then on.
660
+
661
+ ### Examples
662
+
663
+ ```ruby
664
+ require 'time'
665
+ require 'mencoro'
666
+ # setup authorization
667
+ Mencoro.configure do |config|
668
+ # Configure Bearer authorization: ApiKey
669
+ config.access_token = 'YOUR_BEARER_TOKEN'
670
+ end
671
+
672
+ api_instance = Mencoro::AnalyticsApi.new
673
+ organization_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
674
+ project_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
675
+ date_from = Date.parse('2013-10-20') # Date | Inclusive start of the window, Y-m-d. Must fall inside the data retention window.
676
+ date_to = Date.parse('2013-10-20') # Date | Inclusive end of the window, Y-m-d.
677
+ opts = {
678
+ engines: ['chatgpt'], # Array<String> | Repeatable, or comma-separated.
679
+ countries: ['inner_example'], # Array<String> | ISO-3166 alpha-2 codes or English names. Must be configured on the project.
680
+ query_cluster_ids: ['inner_example'], # Array<String> | Restrict to these keyword clusters. Each must belong to this project.
681
+ include_ungrouped_queries: true # Boolean | Only meaningful together with queryClusterIds: also counts the tracked queries that belong to no cluster.
682
+ }
683
+
684
+ begin
685
+ # Headline visibility metrics of a project
686
+ api_instance.get_project_metrics(organization_id, project_id, date_from, date_to, opts)
687
+ rescue Mencoro::ApiError => e
688
+ puts "Error when calling AnalyticsApi->get_project_metrics: #{e}"
689
+ end
690
+ ```
691
+
692
+ #### Using the get_project_metrics_with_http_info variant
693
+
694
+ This returns an Array which contains the response data (`nil` in this case), status code and headers.
695
+
696
+ > <Array(nil, Integer, Hash)> get_project_metrics_with_http_info(organization_id, project_id, date_from, date_to, opts)
697
+
698
+ ```ruby
699
+ begin
700
+ # Headline visibility metrics of a project
701
+ data, status_code, headers = api_instance.get_project_metrics_with_http_info(organization_id, project_id, date_from, date_to, opts)
702
+ p status_code # => 2xx
703
+ p headers # => { ... }
704
+ p data # => nil
705
+ rescue Mencoro::ApiError => e
706
+ puts "Error when calling AnalyticsApi->get_project_metrics_with_http_info: #{e}"
707
+ end
708
+ ```
709
+
710
+ ### Parameters
711
+
712
+ | Name | Type | Description | Notes |
713
+ | ---- | ---- | ----------- | ----- |
714
+ | **organization_id** | **String** | | |
715
+ | **project_id** | **String** | | |
716
+ | **date_from** | **Date** | Inclusive start of the window, Y-m-d. Must fall inside the data retention window. | |
717
+ | **date_to** | **Date** | Inclusive end of the window, Y-m-d. | |
718
+ | **engines** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. | [optional] |
719
+ | **countries** | [**Array&lt;String&gt;**](String.md) | ISO-3166 alpha-2 codes or English names. Must be configured on the project. | [optional] |
720
+ | **query_cluster_ids** | [**Array&lt;String&gt;**](String.md) | Restrict to these keyword clusters. Each must belong to this project. | [optional] |
721
+ | **include_ungrouped_queries** | **Boolean** | Only meaningful together with queryClusterIds: also counts the tracked queries that belong to no cluster. | [optional][default to false] |
722
+
723
+ ### Return type
724
+
725
+ nil (empty response body)
726
+
727
+ ### Authorization
728
+
729
+ [ApiKey](../README.md#ApiKey)
730
+
731
+ ### HTTP request headers
732
+
733
+ - **Content-Type**: Not defined
734
+ - **Accept**: Not defined
735
+
736
+
737
+ ## get_project_sentiment
738
+
739
+ > get_project_sentiment(organization_id, project_id, date_from, date_to, opts)
740
+
741
+ Sentiment breakdown of a project brand mentions
742
+
743
+ Minimum role: viewer. Positive, neutral and negative split of the brand mentions in AI answers over a date window, per engine and per competitor. A null positivityIndex means no mentions were found in the window, which is not the same as a score of zero.
744
+
745
+ ### Examples
746
+
747
+ ```ruby
748
+ require 'time'
749
+ require 'mencoro'
750
+ # setup authorization
751
+ Mencoro.configure do |config|
752
+ # Configure Bearer authorization: ApiKey
753
+ config.access_token = 'YOUR_BEARER_TOKEN'
754
+ end
755
+
756
+ api_instance = Mencoro::AnalyticsApi.new
757
+ organization_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
758
+ project_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
759
+ date_from = Date.parse('2013-10-20') # Date | Inclusive start of the window, Y-m-d. Must fall inside the data retention window.
760
+ date_to = Date.parse('2013-10-20') # Date | Inclusive end of the window, Y-m-d.
761
+ opts = {
762
+ engines: ['chatgpt'], # Array<String> | Repeatable, or comma-separated.
763
+ countries: ['inner_example'], # Array<String> | ISO-3166 alpha-2 codes or English names. Must be configured on the project.
764
+ query_cluster_ids: ['inner_example'], # Array<String> |
765
+ include_ungrouped_queries: true # Boolean |
766
+ }
767
+
768
+ begin
769
+ # Sentiment breakdown of a project brand mentions
770
+ api_instance.get_project_sentiment(organization_id, project_id, date_from, date_to, opts)
771
+ rescue Mencoro::ApiError => e
772
+ puts "Error when calling AnalyticsApi->get_project_sentiment: #{e}"
773
+ end
774
+ ```
775
+
776
+ #### Using the get_project_sentiment_with_http_info variant
777
+
778
+ This returns an Array which contains the response data (`nil` in this case), status code and headers.
779
+
780
+ > <Array(nil, Integer, Hash)> get_project_sentiment_with_http_info(organization_id, project_id, date_from, date_to, opts)
781
+
782
+ ```ruby
783
+ begin
784
+ # Sentiment breakdown of a project brand mentions
785
+ data, status_code, headers = api_instance.get_project_sentiment_with_http_info(organization_id, project_id, date_from, date_to, opts)
786
+ p status_code # => 2xx
787
+ p headers # => { ... }
788
+ p data # => nil
789
+ rescue Mencoro::ApiError => e
790
+ puts "Error when calling AnalyticsApi->get_project_sentiment_with_http_info: #{e}"
791
+ end
792
+ ```
793
+
794
+ ### Parameters
795
+
796
+ | Name | Type | Description | Notes |
797
+ | ---- | ---- | ----------- | ----- |
798
+ | **organization_id** | **String** | | |
799
+ | **project_id** | **String** | | |
800
+ | **date_from** | **Date** | Inclusive start of the window, Y-m-d. Must fall inside the data retention window. | |
801
+ | **date_to** | **Date** | Inclusive end of the window, Y-m-d. | |
802
+ | **engines** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. | [optional] |
803
+ | **countries** | [**Array&lt;String&gt;**](String.md) | ISO-3166 alpha-2 codes or English names. Must be configured on the project. | [optional] |
804
+ | **query_cluster_ids** | [**Array&lt;String&gt;**](String.md) | | [optional] |
805
+ | **include_ungrouped_queries** | **Boolean** | | [optional][default to false] |
806
+
807
+ ### Return type
808
+
809
+ nil (empty response body)
810
+
811
+ ### Authorization
812
+
813
+ [ApiKey](../README.md#ApiKey)
814
+
815
+ ### HTTP request headers
816
+
817
+ - **Content-Type**: Not defined
818
+ - **Accept**: Not defined
819
+
820
+
821
+ ## get_project_time_series
822
+
823
+ > get_project_time_series(organization_id, project_id, date_from, date_to, opts)
824
+
825
+ Rank-tracking metrics of a project over time
826
+
827
+ Minimum role: viewer. One point per bucket over the date window, each carrying the brand metrics and one same-shaped entry per requested competitor. Rank metrics (serp, shopping, mention, link) are 1-based averages where LOWER is better; positivity (0-100), shareOfVoice (0-100), mentionRate (0-100) and serpRate (0-100) are scores where higher is better. Every metric is nullable, and a null means no data was collected for that bucket, which is not the same as a value of zero. A project with no tracked queries returns an empty points list. Prefer weekly or monthly granularity over a long window to keep the response compact.
828
+
829
+ ### Examples
830
+
831
+ ```ruby
832
+ require 'time'
833
+ require 'mencoro'
834
+ # setup authorization
835
+ Mencoro.configure do |config|
836
+ # Configure Bearer authorization: ApiKey
837
+ config.access_token = 'YOUR_BEARER_TOKEN'
838
+ end
839
+
840
+ api_instance = Mencoro::AnalyticsApi.new
841
+ organization_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
842
+ project_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
843
+ date_from = Date.parse('2013-10-20') # Date | Inclusive start of the window, Y-m-d. Must fall inside the data retention window.
844
+ date_to = Date.parse('2013-10-20') # Date | Inclusive end of the window, Y-m-d.
845
+ opts = {
846
+ granularity: 'daily', # String | Bucket size of each point.
847
+ engines: ['chatgpt'], # Array<String> | Repeatable, or comma-separated.
848
+ countries: ['inner_example'], # Array<String> | ISO-3166 alpha-2 codes or English names. Must be configured on the project.
849
+ query_cluster_ids: ['inner_example'], # Array<String> |
850
+ include_ungrouped_queries: true, # Boolean | On its own this NARROWS the series to tracked queries that belong to no cluster; combined with queryClusterIds it widens those clusters to also cover them.
851
+ competitor_ids: ['inner_example'] # Array<String> | Repeatable, or comma-separated. Each id adds one series under the competitors map of every point.
852
+ }
853
+
854
+ begin
855
+ # Rank-tracking metrics of a project over time
856
+ api_instance.get_project_time_series(organization_id, project_id, date_from, date_to, opts)
857
+ rescue Mencoro::ApiError => e
858
+ puts "Error when calling AnalyticsApi->get_project_time_series: #{e}"
859
+ end
860
+ ```
861
+
862
+ #### Using the get_project_time_series_with_http_info variant
863
+
864
+ This returns an Array which contains the response data (`nil` in this case), status code and headers.
865
+
866
+ > <Array(nil, Integer, Hash)> get_project_time_series_with_http_info(organization_id, project_id, date_from, date_to, opts)
867
+
868
+ ```ruby
869
+ begin
870
+ # Rank-tracking metrics of a project over time
871
+ data, status_code, headers = api_instance.get_project_time_series_with_http_info(organization_id, project_id, date_from, date_to, opts)
872
+ p status_code # => 2xx
873
+ p headers # => { ... }
874
+ p data # => nil
875
+ rescue Mencoro::ApiError => e
876
+ puts "Error when calling AnalyticsApi->get_project_time_series_with_http_info: #{e}"
877
+ end
878
+ ```
879
+
880
+ ### Parameters
881
+
882
+ | Name | Type | Description | Notes |
883
+ | ---- | ---- | ----------- | ----- |
884
+ | **organization_id** | **String** | | |
885
+ | **project_id** | **String** | | |
886
+ | **date_from** | **Date** | Inclusive start of the window, Y-m-d. Must fall inside the data retention window. | |
887
+ | **date_to** | **Date** | Inclusive end of the window, Y-m-d. | |
888
+ | **granularity** | **String** | Bucket size of each point. | [optional][default to &#39;daily&#39;] |
889
+ | **engines** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. | [optional] |
890
+ | **countries** | [**Array&lt;String&gt;**](String.md) | ISO-3166 alpha-2 codes or English names. Must be configured on the project. | [optional] |
891
+ | **query_cluster_ids** | [**Array&lt;String&gt;**](String.md) | | [optional] |
892
+ | **include_ungrouped_queries** | **Boolean** | On its own this NARROWS the series to tracked queries that belong to no cluster; combined with queryClusterIds it widens those clusters to also cover them. | [optional][default to false] |
893
+ | **competitor_ids** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. Each id adds one series under the competitors map of every point. | [optional] |
894
+
895
+ ### Return type
896
+
897
+ nil (empty response body)
898
+
899
+ ### Authorization
900
+
901
+ [ApiKey](../README.md#ApiKey)
902
+
903
+ ### HTTP request headers
904
+
905
+ - **Content-Type**: Not defined
906
+ - **Accept**: Not defined
907
+
908
+
909
+ ## get_query_movers
910
+
911
+ > get_query_movers(organization_id, project_id, date_from, date_to, opts)
912
+
913
+ Tracked queries ranked by how much a metric moved
914
+
915
+ Minimum role: viewer. One row per tracked query — a single engine plus country — carrying its current metric envelope and the signed change against the immediately preceding window of equal length: a 7-day window is compared with the 7 days before it. Every trend delta is signed so that POSITIVE means improved, including the position trends, where the underlying avgSerpPosition / avgShoppingPosition / avgMentionPosition / avgLinkPosition are 1-based ranks and therefore LOWER is better. shareOfVoice and positivityIndex are percentages from 0 to 100, where HIGHER is better. Sorting applies to the trend keys only: sortOrder=desc gives the top gainers, asc the top losers. Every nullable field means \"not known yet\" rather than zero — a null position or shareOfVoice is a query with no data in the window, and a null positivityIndex or trend is a period with no mentions to score, neither of which is a record of losing ground. total counts the tracked queries the filters match, not the rows on this page. dataDirtySince is a date from which the rank data is being recomputed, or null when nothing is pending; while it is non-null the deltas may still move.
916
+
917
+ ### Examples
918
+
919
+ ```ruby
920
+ require 'time'
921
+ require 'mencoro'
922
+ # setup authorization
923
+ Mencoro.configure do |config|
924
+ # Configure Bearer authorization: ApiKey
925
+ config.access_token = 'YOUR_BEARER_TOKEN'
926
+ end
927
+
928
+ api_instance = Mencoro::AnalyticsApi.new
929
+ organization_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
930
+ project_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
931
+ date_from = Date.parse('2013-10-20') # Date | Inclusive start of the window, Y-m-d. Must fall inside the data retention window. The comparison window is the equally long stretch immediately before it.
932
+ date_to = Date.parse('2013-10-20') # Date | Inclusive end of the window, Y-m-d.
933
+ opts = {
934
+ engines: ['chatgpt'], # Array<String> | Repeatable, or comma-separated.
935
+ countries: ['inner_example'], # Array<String> | ISO-3166 alpha-2 codes or English names. Must be configured on the project.
936
+ sort_by: 'trend_serp', # String | Which trend delta ranks the rows. Positions improve as they fall, so a positive delta is always an improvement whichever key you pick. An unknown value is rejected, not replaced by the default.
937
+ sort_order: 'asc', # String | desc for the top gainers, asc for the top losers.
938
+ limit: 56, # Integer | Page size. A value above the maximum is rejected, never clamped.
939
+ offset: 56 # Integer |
940
+ }
941
+
942
+ begin
943
+ # Tracked queries ranked by how much a metric moved
944
+ api_instance.get_query_movers(organization_id, project_id, date_from, date_to, opts)
945
+ rescue Mencoro::ApiError => e
946
+ puts "Error when calling AnalyticsApi->get_query_movers: #{e}"
947
+ end
948
+ ```
949
+
950
+ #### Using the get_query_movers_with_http_info variant
951
+
952
+ This returns an Array which contains the response data (`nil` in this case), status code and headers.
953
+
954
+ > <Array(nil, Integer, Hash)> get_query_movers_with_http_info(organization_id, project_id, date_from, date_to, opts)
955
+
956
+ ```ruby
957
+ begin
958
+ # Tracked queries ranked by how much a metric moved
959
+ data, status_code, headers = api_instance.get_query_movers_with_http_info(organization_id, project_id, date_from, date_to, opts)
960
+ p status_code # => 2xx
961
+ p headers # => { ... }
962
+ p data # => nil
963
+ rescue Mencoro::ApiError => e
964
+ puts "Error when calling AnalyticsApi->get_query_movers_with_http_info: #{e}"
965
+ end
966
+ ```
967
+
968
+ ### Parameters
969
+
970
+ | Name | Type | Description | Notes |
971
+ | ---- | ---- | ----------- | ----- |
972
+ | **organization_id** | **String** | | |
973
+ | **project_id** | **String** | | |
974
+ | **date_from** | **Date** | Inclusive start of the window, Y-m-d. Must fall inside the data retention window. The comparison window is the equally long stretch immediately before it. | |
975
+ | **date_to** | **Date** | Inclusive end of the window, Y-m-d. | |
976
+ | **engines** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. | [optional] |
977
+ | **countries** | [**Array&lt;String&gt;**](String.md) | ISO-3166 alpha-2 codes or English names. Must be configured on the project. | [optional] |
978
+ | **sort_by** | **String** | Which trend delta ranks the rows. Positions improve as they fall, so a positive delta is always an improvement whichever key you pick. An unknown value is rejected, not replaced by the default. | [optional][default to &#39;trend_share_of_voice&#39;] |
979
+ | **sort_order** | **String** | desc for the top gainers, asc for the top losers. | [optional][default to &#39;desc&#39;] |
980
+ | **limit** | **Integer** | Page size. A value above the maximum is rejected, never clamped. | [optional][default to 20] |
981
+ | **offset** | **Integer** | | [optional][default to 0] |
982
+
983
+ ### Return type
984
+
985
+ nil (empty response body)
986
+
987
+ ### Authorization
988
+
989
+ [ApiKey](../README.md#ApiKey)
990
+
991
+ ### HTTP request headers
992
+
993
+ - **Content-Type**: Not defined
994
+ - **Accept**: Not defined
995
+
996
+
997
+ ## get_share_of_voice_formula
998
+
999
+ > <GetShareOfVoiceFormula200Response> get_share_of_voice_formula(organization_id, project_id)
1000
+
1001
+ The constants behind the Share of Voice score
1002
+
1003
+ Minimum role: viewer. Static reference data, the same for every project: the weights and multipliers that turn individual brand mentions into a Share of Voice score. Each mention is worth `mentionTypeWeights[type] * sentimentMultipliers[tone] * (conditional ? conditionalMultiplier : directMultiplier)`, and a competitor's Share of Voice is its share of the summed weights of every brand in the window, as a percentage. mentionTypeWeights is keyed by mention type (recommendation, comparison, listing, example, reference) and sentimentMultipliers by tone (positive, neutral, negative); a negative mention is discounted, not discarded, because it still evidences presence. A conditional mention is one the answer hedged with a condition (\"if you need X\"). Use this to explain a score, not to recompute one: the counts it applies to come from the mention mix endpoint. Every value is always present and is never null.
1004
+
1005
+ ### Examples
1006
+
1007
+ ```ruby
1008
+ require 'time'
1009
+ require 'mencoro'
1010
+ # setup authorization
1011
+ Mencoro.configure do |config|
1012
+ # Configure Bearer authorization: ApiKey
1013
+ config.access_token = 'YOUR_BEARER_TOKEN'
1014
+ end
1015
+
1016
+ api_instance = Mencoro::AnalyticsApi.new
1017
+ organization_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
1018
+ project_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
1019
+
1020
+ begin
1021
+ # The constants behind the Share of Voice score
1022
+ result = api_instance.get_share_of_voice_formula(organization_id, project_id)
1023
+ p result
1024
+ rescue Mencoro::ApiError => e
1025
+ puts "Error when calling AnalyticsApi->get_share_of_voice_formula: #{e}"
1026
+ end
1027
+ ```
1028
+
1029
+ #### Using the get_share_of_voice_formula_with_http_info variant
1030
+
1031
+ This returns an Array which contains the response data, status code and headers.
1032
+
1033
+ > <Array(<GetShareOfVoiceFormula200Response>, Integer, Hash)> get_share_of_voice_formula_with_http_info(organization_id, project_id)
1034
+
1035
+ ```ruby
1036
+ begin
1037
+ # The constants behind the Share of Voice score
1038
+ data, status_code, headers = api_instance.get_share_of_voice_formula_with_http_info(organization_id, project_id)
1039
+ p status_code # => 2xx
1040
+ p headers # => { ... }
1041
+ p data # => <GetShareOfVoiceFormula200Response>
1042
+ rescue Mencoro::ApiError => e
1043
+ puts "Error when calling AnalyticsApi->get_share_of_voice_formula_with_http_info: #{e}"
1044
+ end
1045
+ ```
1046
+
1047
+ ### Parameters
1048
+
1049
+ | Name | Type | Description | Notes |
1050
+ | ---- | ---- | ----------- | ----- |
1051
+ | **organization_id** | **String** | | |
1052
+ | **project_id** | **String** | | |
1053
+
1054
+ ### Return type
1055
+
1056
+ [**GetShareOfVoiceFormula200Response**](GetShareOfVoiceFormula200Response.md)
1057
+
1058
+ ### Authorization
1059
+
1060
+ [ApiKey](../README.md#ApiKey)
1061
+
1062
+ ### HTTP request headers
1063
+
1064
+ - **Content-Type**: Not defined
1065
+ - **Accept**: application/json
1066
+
1067
+
1068
+ ## get_tracked_query_time_series
1069
+
1070
+ > get_tracked_query_time_series(organization_id, project_id, tracked_query_id, date_from, date_to, opts)
1071
+
1072
+ Rank-tracking time series of a single tracked query
1073
+
1074
+ Minimum role: viewer. One point per bucket over the date window, each carrying the brand metrics and one same-shaped entry per requested competitor. Positions (serp, shopping, mention, link) are 1-based, so a LOWER number is better; positivity, shareOfVoice, mentionRate and serpRate are percentages from 0 to 100, where higher is better. Every metric is nullable, and a null means nothing was captured for that entity in that bucket — it is not a zero: a null shareOfVoice means no measurement, a shareOfVoice of 0 means measured and never mentioned. The tracked query fixes its own engine and country, so no engine or country filter is accepted. A non-null dataDirtySince is a timestamp warning that tracked queries were deleted from the project and historical buckets may still include their contributions until the nightly refresh rebuilds them.
1075
+
1076
+ ### Examples
1077
+
1078
+ ```ruby
1079
+ require 'time'
1080
+ require 'mencoro'
1081
+ # setup authorization
1082
+ Mencoro.configure do |config|
1083
+ # Configure Bearer authorization: ApiKey
1084
+ config.access_token = 'YOUR_BEARER_TOKEN'
1085
+ end
1086
+
1087
+ api_instance = Mencoro::AnalyticsApi.new
1088
+ organization_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
1089
+ project_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
1090
+ tracked_query_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String | Must belong to the project in the path.
1091
+ date_from = Date.parse('2013-10-20') # Date | Inclusive start of the window, Y-m-d. Must fall inside the data retention window.
1092
+ date_to = Date.parse('2013-10-20') # Date | Inclusive end of the window, Y-m-d.
1093
+ opts = {
1094
+ granularity: 'daily', # String | Bucket size. Prefer weekly or monthly for long windows.
1095
+ competitor_ids: ['inner_example'] # Array<String> | Competitors to add as extra series, repeatable or comma-separated. Valid ids come from the available-filters endpoint.
1096
+ }
1097
+
1098
+ begin
1099
+ # Rank-tracking time series of a single tracked query
1100
+ api_instance.get_tracked_query_time_series(organization_id, project_id, tracked_query_id, date_from, date_to, opts)
1101
+ rescue Mencoro::ApiError => e
1102
+ puts "Error when calling AnalyticsApi->get_tracked_query_time_series: #{e}"
1103
+ end
1104
+ ```
1105
+
1106
+ #### Using the get_tracked_query_time_series_with_http_info variant
1107
+
1108
+ This returns an Array which contains the response data (`nil` in this case), status code and headers.
1109
+
1110
+ > <Array(nil, Integer, Hash)> get_tracked_query_time_series_with_http_info(organization_id, project_id, tracked_query_id, date_from, date_to, opts)
1111
+
1112
+ ```ruby
1113
+ begin
1114
+ # Rank-tracking time series of a single tracked query
1115
+ data, status_code, headers = api_instance.get_tracked_query_time_series_with_http_info(organization_id, project_id, tracked_query_id, date_from, date_to, opts)
1116
+ p status_code # => 2xx
1117
+ p headers # => { ... }
1118
+ p data # => nil
1119
+ rescue Mencoro::ApiError => e
1120
+ puts "Error when calling AnalyticsApi->get_tracked_query_time_series_with_http_info: #{e}"
1121
+ end
1122
+ ```
1123
+
1124
+ ### Parameters
1125
+
1126
+ | Name | Type | Description | Notes |
1127
+ | ---- | ---- | ----------- | ----- |
1128
+ | **organization_id** | **String** | | |
1129
+ | **project_id** | **String** | | |
1130
+ | **tracked_query_id** | **String** | Must belong to the project in the path. | |
1131
+ | **date_from** | **Date** | Inclusive start of the window, Y-m-d. Must fall inside the data retention window. | |
1132
+ | **date_to** | **Date** | Inclusive end of the window, Y-m-d. | |
1133
+ | **granularity** | **String** | Bucket size. Prefer weekly or monthly for long windows. | [optional][default to &#39;daily&#39;] |
1134
+ | **competitor_ids** | [**Array&lt;String&gt;**](String.md) | Competitors to add as extra series, repeatable or comma-separated. Valid ids come from the available-filters endpoint. | [optional] |
1135
+
1136
+ ### Return type
1137
+
1138
+ nil (empty response body)
1139
+
1140
+ ### Authorization
1141
+
1142
+ [ApiKey](../README.md#ApiKey)
1143
+
1144
+ ### HTTP request headers
1145
+
1146
+ - **Content-Type**: Not defined
1147
+ - **Accept**: Not defined
1148
+
1149
+
1150
+ ## get_tracking_coverage
1151
+
1152
+ > <GetTrackingCoverage200Response> get_tracking_coverage(organization_id, project_id)
1153
+
1154
+ Coverage and staleness of a project tracked queries
1155
+
1156
+ Minimum role: viewer. A current-state snapshot answering \"what is stale or not being tracked\": total is every tracked query on the project, active and paused split it by status, neverChecked counts the active queries that have never run, and overdue counts the active queries whose last check is older than their own check-frequency interval (daily, weekly or monthly). neverChecked and overdue are disjoint — a query that has never run is never also counted as overdue — and both ignore paused queries, which are not expected to be checked at all. sample lists up to 20 of the overdue queries, most stale first; it is a sample of overdue only, so it never contains a never-checked query and is empty when overdue is 0. Takes no date window: every count describes the project as it stands right now.
1157
+
1158
+ ### Examples
1159
+
1160
+ ```ruby
1161
+ require 'time'
1162
+ require 'mencoro'
1163
+ # setup authorization
1164
+ Mencoro.configure do |config|
1165
+ # Configure Bearer authorization: ApiKey
1166
+ config.access_token = 'YOUR_BEARER_TOKEN'
1167
+ end
1168
+
1169
+ api_instance = Mencoro::AnalyticsApi.new
1170
+ organization_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
1171
+ project_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
1172
+
1173
+ begin
1174
+ # Coverage and staleness of a project tracked queries
1175
+ result = api_instance.get_tracking_coverage(organization_id, project_id)
1176
+ p result
1177
+ rescue Mencoro::ApiError => e
1178
+ puts "Error when calling AnalyticsApi->get_tracking_coverage: #{e}"
1179
+ end
1180
+ ```
1181
+
1182
+ #### Using the get_tracking_coverage_with_http_info variant
1183
+
1184
+ This returns an Array which contains the response data, status code and headers.
1185
+
1186
+ > <Array(<GetTrackingCoverage200Response>, Integer, Hash)> get_tracking_coverage_with_http_info(organization_id, project_id)
1187
+
1188
+ ```ruby
1189
+ begin
1190
+ # Coverage and staleness of a project tracked queries
1191
+ data, status_code, headers = api_instance.get_tracking_coverage_with_http_info(organization_id, project_id)
1192
+ p status_code # => 2xx
1193
+ p headers # => { ... }
1194
+ p data # => <GetTrackingCoverage200Response>
1195
+ rescue Mencoro::ApiError => e
1196
+ puts "Error when calling AnalyticsApi->get_tracking_coverage_with_http_info: #{e}"
1197
+ end
1198
+ ```
1199
+
1200
+ ### Parameters
1201
+
1202
+ | Name | Type | Description | Notes |
1203
+ | ---- | ---- | ----------- | ----- |
1204
+ | **organization_id** | **String** | | |
1205
+ | **project_id** | **String** | | |
1206
+
1207
+ ### Return type
1208
+
1209
+ [**GetTrackingCoverage200Response**](GetTrackingCoverage200Response.md)
1210
+
1211
+ ### Authorization
1212
+
1213
+ [ApiKey](../README.md#ApiKey)
1214
+
1215
+ ### HTTP request headers
1216
+
1217
+ - **Content-Type**: Not defined
1218
+ - **Accept**: application/json
1219
+
1220
+
1221
+ ## list_keyword_listings
1222
+
1223
+ > <ListKeywordListings200Response> list_keyword_listings(organization_id, project_id, date_from, date_to, opts)
1224
+
1225
+ List a project's keywords with their windowed metrics
1226
+
1227
+ Minimum role: viewer. One row per distinct keyword text of the project — every tracked query asking that text, on any engine in any country, collapsed into a single row whose variantIds name the tracked queries behind it. Each row carries the metrics of the requested window and a signed trend against the window of equal length immediately before it, where POSITIVE ALWAYS MEANS BETTER whichever direction the metric itself runs. Positions are 1-based and lower is better; rates, positivityIndex and shareOfVoice are 0-100 and higher is better; mentionPositionStability is a day-to-day spread, so lower is steadier. A null metric means nothing was captured for that keyword in the window — it is not a zero. `total` counts the KEYWORDS matching the filters, not the rows on this page and not tracked queries; `totalVariantCount` counts the tracked queries behind the keywords matching every filter EXCEPT `search` — with a text search applied it still counts the project's variants, so do not size a force-check budget from it on a searched page. NEITHER IS THE PROJECT'S TRACKED-QUERY COUNT: the count operation reads the write model, while this listing reads projections refreshed in the background from it, so the numbers legitimately differ while those projections catch up. A project whose cached tracked-query count has not been refreshed yet answers an empty page with total 0 — the same answer as a project with no tracked queries at all — so treat an unexpected empty page right after creating queries as \"not projected yet\", not as \"no data\". dataDirtySince is non-null while a recalculation is pending, meaning the metrics predate the latest configuration change. Filters narrow which VARIANTS count towards a row, so engines, countries, statuses, checkFrequencies and nPassesValues each report what the filters selected rather than everything the keyword has. A filter or sort key this endpoint cannot honour is rejected by name, never ignored, and a limit above the maximum is rejected rather than quietly reduced. This operation answers JSON only: a keyword row carries a nested mentionTypeCounts object, so it is not part of the CSV family.
1228
+
1229
+ ### Examples
1230
+
1231
+ ```ruby
1232
+ require 'time'
1233
+ require 'mencoro'
1234
+ # setup authorization
1235
+ Mencoro.configure do |config|
1236
+ # Configure Bearer authorization: ApiKey
1237
+ config.access_token = 'YOUR_BEARER_TOKEN'
1238
+ end
1239
+
1240
+ api_instance = Mencoro::AnalyticsApi.new
1241
+ organization_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
1242
+ project_id = '38400000-8cf0-11bd-b23e-10b96e4ef00d' # String |
1243
+ date_from = Date.parse('2013-10-20') # Date | Inclusive start of the window, Y-m-d. Must fall inside the data retention window.
1244
+ date_to = Date.parse('2013-10-20') # Date | Inclusive end of the window, Y-m-d. The trend compares against the equally long window ending the day before dateFrom.
1245
+ opts = {
1246
+ engines: ['chatgpt'], # Array<String> | Repeatable, or comma-separated. Narrows which variants count towards each row.
1247
+ countries: ['inner_example'], # Array<String> | ISO-3166 alpha-2 codes or English names. Must be configured on the project.
1248
+ query_cluster_ids: ['inner_example'], # Array<String> | Restrict to keywords with a variant in these clusters. Each must belong to the project.
1249
+ include_ungrouped_queries: true, # Boolean | Sent alone, restricts the listing to keywords whose variants belong to no cluster; sent with queryClusterIds, adds them to that selection.
1250
+ status: 'active', # String | Restrict to variants with this status. A keyword whose variants disagree still reports statusSummary \"mixed\".
1251
+ check_frequencies: ['daily'], # Array<String> | Repeatable, or comma-separated.
1252
+ n_passes: [37], # Array<Integer> | Repeatable, or comma-separated. Restrict to variants configured with these pass counts.
1253
+ search: 'search_example', # String | Case-insensitive substring match on the keyword text.
1254
+ sort_by: 'keyword', # String | Named after the field it orders by. Rows with no value for the chosen key sort last in either direction. An unknown key is rejected, not replaced by the default.
1255
+ sort_order: 'asc', # String |
1256
+ limit: 56, # Integer | Page size. A larger value is rejected, never silently reduced.
1257
+ offset: 56 # Integer | Number of matching keywords to skip before the page starts.
1258
+ }
1259
+
1260
+ begin
1261
+ # List a project's keywords with their windowed metrics
1262
+ result = api_instance.list_keyword_listings(organization_id, project_id, date_from, date_to, opts)
1263
+ p result
1264
+ rescue Mencoro::ApiError => e
1265
+ puts "Error when calling AnalyticsApi->list_keyword_listings: #{e}"
1266
+ end
1267
+ ```
1268
+
1269
+ #### Using the list_keyword_listings_with_http_info variant
1270
+
1271
+ This returns an Array which contains the response data, status code and headers.
1272
+
1273
+ > <Array(<ListKeywordListings200Response>, Integer, Hash)> list_keyword_listings_with_http_info(organization_id, project_id, date_from, date_to, opts)
1274
+
1275
+ ```ruby
1276
+ begin
1277
+ # List a project's keywords with their windowed metrics
1278
+ data, status_code, headers = api_instance.list_keyword_listings_with_http_info(organization_id, project_id, date_from, date_to, opts)
1279
+ p status_code # => 2xx
1280
+ p headers # => { ... }
1281
+ p data # => <ListKeywordListings200Response>
1282
+ rescue Mencoro::ApiError => e
1283
+ puts "Error when calling AnalyticsApi->list_keyword_listings_with_http_info: #{e}"
1284
+ end
1285
+ ```
1286
+
1287
+ ### Parameters
1288
+
1289
+ | Name | Type | Description | Notes |
1290
+ | ---- | ---- | ----------- | ----- |
1291
+ | **organization_id** | **String** | | |
1292
+ | **project_id** | **String** | | |
1293
+ | **date_from** | **Date** | Inclusive start of the window, Y-m-d. Must fall inside the data retention window. | |
1294
+ | **date_to** | **Date** | Inclusive end of the window, Y-m-d. The trend compares against the equally long window ending the day before dateFrom. | |
1295
+ | **engines** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. Narrows which variants count towards each row. | [optional] |
1296
+ | **countries** | [**Array&lt;String&gt;**](String.md) | ISO-3166 alpha-2 codes or English names. Must be configured on the project. | [optional] |
1297
+ | **query_cluster_ids** | [**Array&lt;String&gt;**](String.md) | Restrict to keywords with a variant in these clusters. Each must belong to the project. | [optional] |
1298
+ | **include_ungrouped_queries** | **Boolean** | Sent alone, restricts the listing to keywords whose variants belong to no cluster; sent with queryClusterIds, adds them to that selection. | [optional][default to false] |
1299
+ | **status** | **String** | Restrict to variants with this status. A keyword whose variants disagree still reports statusSummary \&quot;mixed\&quot;. | [optional] |
1300
+ | **check_frequencies** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. | [optional] |
1301
+ | **n_passes** | [**Array&lt;Integer&gt;**](Integer.md) | Repeatable, or comma-separated. Restrict to variants configured with these pass counts. | [optional] |
1302
+ | **search** | **String** | Case-insensitive substring match on the keyword text. | [optional] |
1303
+ | **sort_by** | **String** | Named after the field it orders by. Rows with no value for the chosen key sort last in either direction. An unknown key is rejected, not replaced by the default. | [optional][default to &#39;keyword&#39;] |
1304
+ | **sort_order** | **String** | | [optional][default to &#39;asc&#39;] |
1305
+ | **limit** | **Integer** | Page size. A larger value is rejected, never silently reduced. | [optional][default to 20] |
1306
+ | **offset** | **Integer** | Number of matching keywords to skip before the page starts. | [optional][default to 0] |
1307
+
1308
+ ### Return type
1309
+
1310
+ [**ListKeywordListings200Response**](ListKeywordListings200Response.md)
1311
+
1312
+ ### Authorization
1313
+
1314
+ [ApiKey](../README.md#ApiKey)
1315
+
1316
+ ### HTTP request headers
1317
+
1318
+ - **Content-Type**: Not defined
1319
+ - **Accept**: application/json
1320
+