mencoro 1.0.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +41 -5
  3. data/docs/AccountApi.md +1 -1
  4. data/docs/AnalyticsApi.md +96 -86
  5. data/docs/AsyncJobResource.md +3 -1
  6. data/docs/AsyncJobResourceError.md +20 -0
  7. data/docs/BillingApi.md +1 -1
  8. data/docs/CitedSourceRow.md +32 -0
  9. data/docs/CitedSourcesResponse.md +20 -0
  10. data/docs/ClusterBreakdownRow.md +82 -0
  11. data/docs/ClustersApi.md +74 -0
  12. data/docs/CompetitorCoOccurrenceResponse.md +18 -0
  13. data/docs/CompetitorCoOccurrenceRow.md +36 -0
  14. data/docs/CompetitorShareOfVoice.md +20 -0
  15. data/docs/CreateInvitation201Response.md +4 -0
  16. data/docs/CreateInvitationRequest.md +3 -1
  17. data/docs/CreateInvitationRequestProjectAccess.md +20 -0
  18. data/docs/DiscoveryApi.md +1 -1
  19. data/docs/GetMeStats200ResponseProjects.md +1 -1
  20. data/docs/GetOrganizationOverview200ResponseAggregate.md +1 -1
  21. data/docs/GetOrganizationOverview200ResponseProjectsInner.md +8 -2
  22. data/docs/GetOrganizationStats200ResponseInvitations.md +1 -1
  23. data/docs/GetOrganizationStats200ResponseMembers.md +1 -1
  24. data/docs/GetOrganizationStats200ResponseProjects.md +1 -1
  25. data/docs/InvitationResource.md +5 -1
  26. data/docs/JobsApi.md +1 -1
  27. data/docs/KeywordListingResource.md +12 -10
  28. data/docs/KeywordListingResourceCarriedPositions.md +24 -0
  29. data/docs/KeywordListingResourceCarriedPositionsSerp.md +20 -0
  30. data/docs/ListProjects200Response.md +1 -1
  31. data/docs/MemberResource.md +5 -1
  32. data/docs/MembersApi.md +78 -0
  33. data/docs/MentionMatchResource.md +44 -0
  34. data/docs/MentionSampleResponse.md +46 -0
  35. data/docs/MentionTypeCounts.md +26 -0
  36. data/docs/OrganizationsApi.md +3 -3
  37. data/docs/PerCompetitorSentiment.md +30 -0
  38. data/docs/PerEngineSentiment.md +28 -0
  39. data/docs/PerEntityMetrics.md +32 -0
  40. data/docs/PositionDistributionBucket.md +20 -0
  41. data/docs/ProjectMentionMixResponse.md +22 -0
  42. data/docs/ProjectMentionSamplesResponse.md +20 -0
  43. data/docs/ProjectRankTrackingClusterBreakdown.md +20 -0
  44. data/docs/ProjectRankTrackingStats.md +96 -0
  45. data/docs/ProjectRankTrackingTimeSeries.md +20 -0
  46. data/docs/ProjectSentimentBreakdown.md +20 -0
  47. data/docs/ProjectedMonthlyChecksResource.md +2 -2
  48. data/docs/ProjectsApi.md +76 -2
  49. data/docs/SearchTrackedQueryMentionMatches200Response.md +20 -0
  50. data/docs/SearchTrackedQuerySerpMatches200Response.md +20 -0
  51. data/docs/SerpMatchResource.md +30 -0
  52. data/docs/SetMemberProjectAccessRequest.md +20 -0
  53. data/docs/SubscriptionResource.md +1 -1
  54. data/docs/TimeSeriesPoint.md +22 -0
  55. data/docs/TrackedQueriesApi.md +175 -3
  56. data/docs/TrackedQueryCountResource.md +1 -1
  57. data/docs/TrackedQueryMoverRow.md +58 -0
  58. data/docs/TrackedQueryMoversResponse.md +22 -0
  59. data/docs/TrackedQueryRankTrackingTimeSeries.md +20 -0
  60. data/docs/TrackedQueryUsageResource.md +1 -1
  61. data/lib/mencoro/api/account_api.rb +3 -3
  62. data/lib/mencoro/api/analytics_api.rb +103 -85
  63. data/lib/mencoro/api/billing_api.rb +3 -3
  64. data/lib/mencoro/api/captures_api.rb +2 -2
  65. data/lib/mencoro/api/clusters_api.rb +76 -1
  66. data/lib/mencoro/api/discovery_api.rb +3 -3
  67. data/lib/mencoro/api/invitations_api.rb +1 -1
  68. data/lib/mencoro/api/jobs_api.rb +3 -3
  69. data/lib/mencoro/api/members_api.rb +95 -1
  70. data/lib/mencoro/api/organization_operations_api.rb +1 -1
  71. data/lib/mencoro/api/organizations_api.rb +7 -7
  72. data/lib/mencoro/api/projects_api.rb +80 -5
  73. data/lib/mencoro/api/tracked_queries_api.rb +220 -8
  74. data/lib/mencoro/api_client.rb +2 -2
  75. data/lib/mencoro/api_error.rb +1 -1
  76. data/lib/mencoro/api_model_base.rb +1 -1
  77. data/lib/mencoro/configuration.rb +1 -1
  78. data/lib/mencoro/models/accepted_job_resource.rb +1 -1
  79. data/lib/mencoro/models/ai_response_report_resource.rb +1 -1
  80. data/lib/mencoro/models/ai_response_resource.rb +1 -1
  81. data/lib/mencoro/models/apply_clustering_job_outcome.rb +1 -1
  82. data/lib/mencoro/models/apply_clustering_job_outcome_clusters_inner.rb +1 -1
  83. data/lib/mencoro/models/apply_clustering_job_outcome_failed_inner.rb +1 -1
  84. data/lib/mencoro/models/apply_clustering_job_outcome_skipped_clusters_inner.rb +1 -1
  85. data/lib/mencoro/models/apply_clustering_job_outcome_successful_inner.rb +1 -1
  86. data/lib/mencoro/models/async_job_resource.rb +17 -7
  87. data/lib/mencoro/models/async_job_resource_error.rb +217 -0
  88. data/lib/mencoro/models/batch_change_tracked_query_check_frequency_request_data.rb +1 -1
  89. data/lib/mencoro/models/batch_change_tracked_query_passes_request_data.rb +1 -1
  90. data/lib/mencoro/models/batch_create_query_clusters_outcome.rb +1 -1
  91. data/lib/mencoro/models/batch_create_query_clusters_outcome_failed_inner.rb +1 -1
  92. data/lib/mencoro/models/batch_create_query_clusters_outcome_successful_inner.rb +1 -1
  93. data/lib/mencoro/models/batch_create_query_clusters_request_data.rb +1 -1
  94. data/lib/mencoro/models/batch_create_tracked_queries_request_data.rb +1 -1
  95. data/lib/mencoro/models/batch_create_tracked_queries_result_resource.rb +1 -1
  96. data/lib/mencoro/models/batch_create_tracked_queries_result_resource_failed_inner.rb +1 -1
  97. data/lib/mencoro/models/batch_create_tracked_queries_result_resource_successful_inner.rb +1 -1
  98. data/lib/mencoro/models/batch_force_check_tracked_queries200_response.rb +1 -1
  99. data/lib/mencoro/models/batch_force_check_tracked_queries200_response_failed_inner.rb +1 -1
  100. data/lib/mencoro/models/batch_pause_tracked_queries200_response.rb +1 -1
  101. data/lib/mencoro/models/batch_pause_tracked_queries200_response_failed_inner.rb +1 -1
  102. data/lib/mencoro/models/batch_pause_tracked_queries200_response_successful_inner.rb +1 -1
  103. data/lib/mencoro/models/batch_resume_tracked_queries200_response.rb +1 -1
  104. data/lib/mencoro/models/batch_targets_request_data.rb +1 -1
  105. data/lib/mencoro/models/batch_write_outcome.rb +1 -1
  106. data/lib/mencoro/models/batch_write_outcome_failed_inner.rb +1 -1
  107. data/lib/mencoro/models/brand_profile_resource.rb +1 -1
  108. data/lib/mencoro/models/bulk_add_clusters_to_tracked_queries200_response.rb +1 -1
  109. data/lib/mencoro/models/bulk_add_clusters_to_tracked_queries_request.rb +1 -1
  110. data/lib/mencoro/models/bulk_remove_clusters_from_tracked_queries200_response.rb +1 -1
  111. data/lib/mencoro/models/bulk_remove_clusters_from_tracked_queries_request.rb +1 -1
  112. data/lib/mencoro/models/change_member_role_request.rb +1 -1
  113. data/lib/mencoro/models/change_tracked_query_check_frequency_request_data.rb +1 -1
  114. data/lib/mencoro/models/change_tracked_query_passes_request_data.rb +1 -1
  115. data/lib/mencoro/models/citation_resource.rb +1 -1
  116. data/lib/mencoro/models/cited_source_row.rb +298 -0
  117. data/lib/mencoro/models/cited_sources_response.rb +192 -0
  118. data/lib/mencoro/models/cluster_breakdown_row.rb +580 -0
  119. data/lib/mencoro/models/cluster_membership_request_data.rb +1 -1
  120. data/lib/mencoro/models/competitor_co_occurrence_response.rb +166 -0
  121. data/lib/mencoro/models/competitor_co_occurrence_row.rb +318 -0
  122. data/lib/mencoro/models/competitor_resource.rb +1 -1
  123. data/lib/mencoro/models/competitor_share_of_voice.rb +174 -0
  124. data/lib/mencoro/models/create_competitor_request.rb +1 -1
  125. data/lib/mencoro/models/create_invitation200_response.rb +1 -1
  126. data/lib/mencoro/models/create_invitation201_response.rb +60 -2
  127. data/lib/mencoro/models/create_invitation_request.rb +15 -5
  128. data/lib/mencoro/models/create_invitation_request_project_access.rb +201 -0
  129. data/lib/mencoro/models/create_organization201_response.rb +1 -1
  130. data/lib/mencoro/models/create_organization_request.rb +1 -1
  131. data/lib/mencoro/models/create_project_request.rb +1 -1
  132. data/lib/mencoro/models/create_project_request_competitors_inner.rb +1 -1
  133. data/lib/mencoro/models/create_query_cluster409_response.rb +1 -1
  134. data/lib/mencoro/models/create_query_cluster_request.rb +1 -1
  135. data/lib/mencoro/models/delete_query_cluster200_response.rb +1 -1
  136. data/lib/mencoro/models/entitlements_resource.rb +1 -1
  137. data/lib/mencoro/models/get_available_filters200_response.rb +1 -1
  138. data/lib/mencoro/models/get_available_filters200_response_clusters_inner.rb +1 -1
  139. data/lib/mencoro/models/get_me_stats200_response.rb +1 -1
  140. data/lib/mencoro/models/get_me_stats200_response_organizations.rb +1 -1
  141. data/lib/mencoro/models/get_me_stats200_response_projects.rb +2 -2
  142. data/lib/mencoro/models/get_membership_stats200_response.rb +1 -1
  143. data/lib/mencoro/models/get_mention_samples400_response.rb +1 -1
  144. data/lib/mencoro/models/get_mention_samples400_response_details_value_inner.rb +1 -1
  145. data/lib/mencoro/models/get_metric_glossary200_response.rb +1 -1
  146. data/lib/mencoro/models/get_metric_glossary200_response_metrics_inner.rb +1 -1
  147. data/lib/mencoro/models/get_organization_overview200_response.rb +1 -1
  148. data/lib/mencoro/models/get_organization_overview200_response_aggregate.rb +2 -2
  149. data/lib/mencoro/models/get_organization_overview200_response_projects_inner.rb +34 -3
  150. data/lib/mencoro/models/get_organization_stats200_response.rb +1 -1
  151. data/lib/mencoro/models/get_organization_stats200_response_invitations.rb +4 -7
  152. data/lib/mencoro/models/get_organization_stats200_response_members.rb +4 -7
  153. data/lib/mencoro/models/get_organization_stats200_response_projects.rb +2 -2
  154. data/lib/mencoro/models/get_share_of_voice_formula200_response.rb +1 -1
  155. data/lib/mencoro/models/get_tracking_coverage200_response.rb +1 -1
  156. data/lib/mencoro/models/get_tracking_coverage200_response_sample_inner.rb +1 -1
  157. data/lib/mencoro/models/invitation_resource.rb +64 -6
  158. data/lib/mencoro/models/keyword_listing_resource.rb +40 -14
  159. data/lib/mencoro/models/keyword_listing_resource_carried_positions.rb +187 -0
  160. data/lib/mencoro/models/keyword_listing_resource_carried_positions_serp.rb +192 -0
  161. data/lib/mencoro/models/keyword_listing_resource_mention_type_counts.rb +1 -1
  162. data/lib/mencoro/models/list_ai_responses200_response.rb +1 -1
  163. data/lib/mencoro/models/list_competitors200_response.rb +1 -1
  164. data/lib/mencoro/models/list_invitations200_response.rb +1 -1
  165. data/lib/mencoro/models/list_keyword_listings200_response.rb +1 -1
  166. data/lib/mencoro/models/list_members200_response.rb +1 -1
  167. data/lib/mencoro/models/list_organizations200_response.rb +1 -1
  168. data/lib/mencoro/models/list_projects200_response.rb +2 -2
  169. data/lib/mencoro/models/list_query_clusters200_response.rb +1 -1
  170. data/lib/mencoro/models/list_search_snapshots200_response.rb +1 -1
  171. data/lib/mencoro/models/list_shopping_snapshots200_response.rb +1 -1
  172. data/lib/mencoro/models/me_resource.rb +1 -1
  173. data/lib/mencoro/models/member_resource.rb +63 -5
  174. data/lib/mencoro/models/mention_match_resource.rb +432 -0
  175. data/lib/mencoro/models/mention_sample_response.rb +450 -0
  176. data/lib/mencoro/models/mention_type_counts.rb +268 -0
  177. data/lib/mencoro/models/operation_effect.rb +1 -1
  178. data/lib/mencoro/models/organization_resource.rb +1 -1
  179. data/lib/mencoro/models/per_competitor_sentiment.rb +304 -0
  180. data/lib/mencoro/models/per_engine_sentiment.rb +278 -0
  181. data/lib/mencoro/models/per_entity_metrics.rb +218 -0
  182. data/lib/mencoro/models/position_distribution_bucket.rb +190 -0
  183. data/lib/mencoro/models/preview_organization_operation200_response.rb +1 -1
  184. data/lib/mencoro/models/preview_organization_operation200_response_organization.rb +1 -1
  185. data/lib/mencoro/models/preview_organization_operation_request.rb +3 -3
  186. data/lib/mencoro/models/project_detail_resource.rb +1 -1
  187. data/lib/mencoro/models/project_detail_resource_competitors_inner.rb +1 -1
  188. data/lib/mencoro/models/project_mention_mix_response.rb +222 -0
  189. data/lib/mencoro/models/project_mention_samples_response.rb +192 -0
  190. data/lib/mencoro/models/project_rank_tracking_cluster_breakdown.rb +176 -0
  191. data/lib/mencoro/models/project_rank_tracking_stats.rb +718 -0
  192. data/lib/mencoro/models/project_rank_tracking_time_series.rb +176 -0
  193. data/lib/mencoro/models/project_resource.rb +1 -1
  194. data/lib/mencoro/models/project_sentiment_breakdown.rb +194 -0
  195. data/lib/mencoro/models/projected_monthly_checks_resource.rb +3 -3
  196. data/lib/mencoro/models/query_cluster_resource.rb +1 -1
  197. data/lib/mencoro/models/report_ai_response_request.rb +1 -1
  198. data/lib/mencoro/models/search_result_resource.rb +1 -1
  199. data/lib/mencoro/models/search_snapshot_resource.rb +1 -1
  200. data/lib/mencoro/models/search_tracked_queries200_response.rb +1 -1
  201. data/lib/mencoro/models/search_tracked_query_mention_matches200_response.rb +158 -0
  202. data/lib/mencoro/models/search_tracked_query_serp_matches200_response.rb +158 -0
  203. data/lib/mencoro/models/serp_match_resource.rb +314 -0
  204. data/lib/mencoro/models/set_member_project_access_request.rb +200 -0
  205. data/lib/mencoro/models/shopping_offer_resource.rb +1 -1
  206. data/lib/mencoro/models/shopping_snapshot_resource.rb +1 -1
  207. data/lib/mencoro/models/start_brand_discovery_job_request.rb +1 -1
  208. data/lib/mencoro/models/start_brand_name_suggestion_job_request.rb +1 -1
  209. data/lib/mencoro/models/start_clustering_job_request_data.rb +1 -1
  210. data/lib/mencoro/models/start_keyword_discovery_job_request.rb +1 -1
  211. data/lib/mencoro/models/start_prompt_discovery_job_request.rb +1 -1
  212. data/lib/mencoro/models/submitted_checks_resource.rb +1 -1
  213. data/lib/mencoro/models/subscription_resource.rb +3 -3
  214. data/lib/mencoro/models/time_series_point.rb +218 -0
  215. data/lib/mencoro/models/tracked_query_count_resource.rb +3 -3
  216. data/lib/mencoro/models/tracked_query_detail_resource.rb +3 -3
  217. data/lib/mencoro/models/tracked_query_mover_row.rb +492 -0
  218. data/lib/mencoro/models/tracked_query_movers_response.rb +202 -0
  219. data/lib/mencoro/models/tracked_query_rank_tracking_time_series.rb +176 -0
  220. data/lib/mencoro/models/tracked_query_resource.rb +3 -3
  221. data/lib/mencoro/models/tracked_query_usage_resource.rb +2 -2
  222. data/lib/mencoro/models/update_organization_request.rb +1 -1
  223. data/lib/mencoro/models/update_project_brand_profile_request.rb +1 -1
  224. data/lib/mencoro/models/update_project_request.rb +1 -1
  225. data/lib/mencoro/version.rb +2 -2
  226. data/lib/mencoro.rb +32 -1
  227. data/mencoro.gemspec +2 -2
  228. data/spec/models/async_job_resource_error_spec.rb +46 -0
  229. data/spec/models/cited_source_row_spec.rb +78 -0
  230. data/spec/models/cited_sources_response_spec.rb +42 -0
  231. data/spec/models/cluster_breakdown_row_spec.rb +228 -0
  232. data/spec/models/competitor_co_occurrence_response_spec.rb +36 -0
  233. data/spec/models/competitor_co_occurrence_row_spec.rb +90 -0
  234. data/spec/models/competitor_share_of_voice_spec.rb +42 -0
  235. data/spec/models/create_invitation_request_project_access_spec.rb +46 -0
  236. data/spec/models/keyword_listing_resource_carried_positions_serp_spec.rb +42 -0
  237. data/spec/models/keyword_listing_resource_carried_positions_spec.rb +54 -0
  238. data/spec/models/mention_match_resource_spec.rb +114 -0
  239. data/spec/models/mention_sample_response_spec.rb +114 -0
  240. data/spec/models/mention_type_counts_spec.rb +60 -0
  241. data/spec/models/per_competitor_sentiment_spec.rb +72 -0
  242. data/spec/models/per_engine_sentiment_spec.rb +66 -0
  243. data/spec/models/per_entity_metrics_spec.rb +78 -0
  244. data/spec/models/position_distribution_bucket_spec.rb +42 -0
  245. data/spec/models/project_mention_mix_response_spec.rb +48 -0
  246. data/spec/models/project_mention_samples_response_spec.rb +42 -0
  247. data/spec/models/project_rank_tracking_cluster_breakdown_spec.rb +42 -0
  248. data/spec/models/project_rank_tracking_stats_spec.rb +270 -0
  249. data/spec/models/project_rank_tracking_time_series_spec.rb +42 -0
  250. data/spec/models/project_sentiment_breakdown_spec.rb +42 -0
  251. data/spec/models/search_tracked_query_mention_matches200_response_spec.rb +42 -0
  252. data/spec/models/search_tracked_query_serp_matches200_response_spec.rb +42 -0
  253. data/spec/models/serp_match_resource_spec.rb +72 -0
  254. data/spec/models/set_member_project_access_request_spec.rb +46 -0
  255. data/spec/models/time_series_point_spec.rb +48 -0
  256. data/spec/models/tracked_query_mover_row_spec.rb +156 -0
  257. data/spec/models/tracked_query_movers_response_spec.rb +48 -0
  258. data/spec/models/tracked_query_rank_tracking_time_series_spec.rb +42 -0
  259. data/spec/spec_helper.rb +1 -1
  260. metadata +235 -108
data/docs/AnalyticsApi.md CHANGED
@@ -95,11 +95,11 @@ end
95
95
 
96
96
  ## get_cited_sources
97
97
 
98
- > get_cited_sources(organization_id, project_id, date_from, date_to, opts)
98
+ > <CitedSourcesResponse> get_cited_sources(organization_id, project_id, date_from, date_to, opts)
99
99
 
100
100
  Domains and pages the AI answers cited
101
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.
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, claude, 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
103
 
104
104
  ### Examples
105
105
 
@@ -126,7 +126,8 @@ opts = {
126
126
 
127
127
  begin
128
128
  # Domains and pages the AI answers cited
129
- api_instance.get_cited_sources(organization_id, project_id, date_from, date_to, opts)
129
+ result = api_instance.get_cited_sources(organization_id, project_id, date_from, date_to, opts)
130
+ p result
130
131
  rescue Mencoro::ApiError => e
131
132
  puts "Error when calling AnalyticsApi->get_cited_sources: #{e}"
132
133
  end
@@ -134,9 +135,9 @@ end
134
135
 
135
136
  #### Using the get_cited_sources_with_http_info variant
136
137
 
137
- This returns an Array which contains the response data (`nil` in this case), status code and headers.
138
+ This returns an Array which contains the response data, status code and headers.
138
139
 
139
- > <Array(nil, Integer, Hash)> get_cited_sources_with_http_info(organization_id, project_id, date_from, date_to, opts)
140
+ > <Array(<CitedSourcesResponse>, Integer, Hash)> get_cited_sources_with_http_info(organization_id, project_id, date_from, date_to, opts)
140
141
 
141
142
  ```ruby
142
143
  begin
@@ -144,7 +145,7 @@ begin
144
145
  data, status_code, headers = api_instance.get_cited_sources_with_http_info(organization_id, project_id, date_from, date_to, opts)
145
146
  p status_code # => 2xx
146
147
  p headers # => { ... }
147
- p data # => nil
148
+ p data # => <CitedSourcesResponse>
148
149
  rescue Mencoro::ApiError => e
149
150
  puts "Error when calling AnalyticsApi->get_cited_sources_with_http_info: #{e}"
150
151
  end
@@ -165,7 +166,7 @@ end
165
166
 
166
167
  ### Return type
167
168
 
168
- nil (empty response body)
169
+ [**CitedSourcesResponse**](CitedSourcesResponse.md)
169
170
 
170
171
  ### Authorization
171
172
 
@@ -174,12 +175,12 @@ nil (empty response body)
174
175
  ### HTTP request headers
175
176
 
176
177
  - **Content-Type**: Not defined
177
- - **Accept**: Not defined
178
+ - **Accept**: application/json
178
179
 
179
180
 
180
181
  ## get_cluster_breakdown
181
182
 
182
- > get_cluster_breakdown(organization_id, project_id, date_from, date_to, opts)
183
+ > <ProjectRankTrackingClusterBreakdown> get_cluster_breakdown(organization_id, project_id, date_from, date_to, opts)
183
184
 
184
185
  Rank-tracking metrics per keyword cluster
185
186
 
@@ -205,12 +206,13 @@ opts = {
205
206
  engines: ['chatgpt'], # Array<String> | Repeatable, or comma-separated.
206
207
  countries: ['inner_example'], # Array<String> | ISO-3166 alpha-2 codes or English names. Must be configured on the project.
207
208
  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
+ include_ungrouped_queries: true # Boolean | Sent alone, returns only the ungrouped row: the tracked queries that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds that row to those clusters. Omit both for every cluster plus the ungrouped row.
209
210
  }
210
211
 
211
212
  begin
212
213
  # Rank-tracking metrics per keyword cluster
213
- api_instance.get_cluster_breakdown(organization_id, project_id, date_from, date_to, opts)
214
+ result = api_instance.get_cluster_breakdown(organization_id, project_id, date_from, date_to, opts)
215
+ p result
214
216
  rescue Mencoro::ApiError => e
215
217
  puts "Error when calling AnalyticsApi->get_cluster_breakdown: #{e}"
216
218
  end
@@ -218,9 +220,9 @@ end
218
220
 
219
221
  #### Using the get_cluster_breakdown_with_http_info variant
220
222
 
221
- This returns an Array which contains the response data (`nil` in this case), status code and headers.
223
+ This returns an Array which contains the response data, status code and headers.
222
224
 
223
- > <Array(nil, Integer, Hash)> get_cluster_breakdown_with_http_info(organization_id, project_id, date_from, date_to, opts)
225
+ > <Array(<ProjectRankTrackingClusterBreakdown>, Integer, Hash)> get_cluster_breakdown_with_http_info(organization_id, project_id, date_from, date_to, opts)
224
226
 
225
227
  ```ruby
226
228
  begin
@@ -228,7 +230,7 @@ begin
228
230
  data, status_code, headers = api_instance.get_cluster_breakdown_with_http_info(organization_id, project_id, date_from, date_to, opts)
229
231
  p status_code # => 2xx
230
232
  p headers # => { ... }
231
- p data # => nil
233
+ p data # => <ProjectRankTrackingClusterBreakdown>
232
234
  rescue Mencoro::ApiError => e
233
235
  puts "Error when calling AnalyticsApi->get_cluster_breakdown_with_http_info: #{e}"
234
236
  end
@@ -245,11 +247,11 @@ end
245
247
  | **engines** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. | [optional] |
246
248
  | **countries** | [**Array&lt;String&gt;**](String.md) | ISO-3166 alpha-2 codes or English names. Must be configured on the project. | [optional] |
247
249
  | **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] |
250
+ | **include_ungrouped_queries** | **Boolean** | Sent alone, returns only the ungrouped row: the tracked queries that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds that row to those clusters. Omit both for every cluster plus the ungrouped row. | [optional][default to false] |
249
251
 
250
252
  ### Return type
251
253
 
252
- nil (empty response body)
254
+ [**ProjectRankTrackingClusterBreakdown**](ProjectRankTrackingClusterBreakdown.md)
253
255
 
254
256
  ### Authorization
255
257
 
@@ -258,12 +260,12 @@ nil (empty response body)
258
260
  ### HTTP request headers
259
261
 
260
262
  - **Content-Type**: Not defined
261
- - **Accept**: Not defined
263
+ - **Accept**: application/json
262
264
 
263
265
 
264
266
  ## get_competitor_co_occurrence
265
267
 
266
- > get_competitor_co_occurrence(organization_id, project_id, date_from, date_to, opts)
268
+ > <CompetitorCoOccurrenceResponse> get_competitor_co_occurrence(organization_id, project_id, date_from, date_to, opts)
267
269
 
268
270
  Head-to-head record of the brand against each tracked competitor
269
271
 
@@ -293,7 +295,8 @@ opts = {
293
295
 
294
296
  begin
295
297
  # 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)
298
+ result = api_instance.get_competitor_co_occurrence(organization_id, project_id, date_from, date_to, opts)
299
+ p result
297
300
  rescue Mencoro::ApiError => e
298
301
  puts "Error when calling AnalyticsApi->get_competitor_co_occurrence: #{e}"
299
302
  end
@@ -301,9 +304,9 @@ end
301
304
 
302
305
  #### Using the get_competitor_co_occurrence_with_http_info variant
303
306
 
304
- This returns an Array which contains the response data (`nil` in this case), status code and headers.
307
+ This returns an Array which contains the response data, status code and headers.
305
308
 
306
- > <Array(nil, Integer, Hash)> get_competitor_co_occurrence_with_http_info(organization_id, project_id, date_from, date_to, opts)
309
+ > <Array(<CompetitorCoOccurrenceResponse>, Integer, Hash)> get_competitor_co_occurrence_with_http_info(organization_id, project_id, date_from, date_to, opts)
307
310
 
308
311
  ```ruby
309
312
  begin
@@ -311,7 +314,7 @@ begin
311
314
  data, status_code, headers = api_instance.get_competitor_co_occurrence_with_http_info(organization_id, project_id, date_from, date_to, opts)
312
315
  p status_code # => 2xx
313
316
  p headers # => { ... }
314
- p data # => nil
317
+ p data # => <CompetitorCoOccurrenceResponse>
315
318
  rescue Mencoro::ApiError => e
316
319
  puts "Error when calling AnalyticsApi->get_competitor_co_occurrence_with_http_info: #{e}"
317
320
  end
@@ -331,7 +334,7 @@ end
331
334
 
332
335
  ### Return type
333
336
 
334
- nil (empty response body)
337
+ [**CompetitorCoOccurrenceResponse**](CompetitorCoOccurrenceResponse.md)
335
338
 
336
339
  ### Authorization
337
340
 
@@ -340,16 +343,16 @@ nil (empty response body)
340
343
  ### HTTP request headers
341
344
 
342
345
  - **Content-Type**: Not defined
343
- - **Accept**: Not defined
346
+ - **Accept**: application/json
344
347
 
345
348
 
346
349
  ## get_mention_mix
347
350
 
348
- > get_mention_mix(organization_id, project_id, date_from, date_to, opts)
351
+ > <ProjectMentionMixResponse> get_mention_mix(organization_id, project_id, date_from, date_to, opts)
349
352
 
350
353
  Composition of a project brand mentions in AI answers
351
354
 
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.
355
+ 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). 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: tracked competitors, untracked competitors and unrelated brands are all excluded (mentions stored before the relation was recorded count as the brand, as they do in Share of Voice). Only mentions inside the answer text are counted — a citation of the brand's URL is not a mention here. Each count is a raw number of stored mentions: when a query runs several passes a day, every pass adds its own. The counts therefore show the composition of the brand's mentions but are not the inputs of the Share of Voice score, which averages each check over its passes and also weights cited links. 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
356
 
354
357
  ### Examples
355
358
 
@@ -374,7 +377,8 @@ opts = {
374
377
 
375
378
  begin
376
379
  # Composition of a project brand mentions in AI answers
377
- api_instance.get_mention_mix(organization_id, project_id, date_from, date_to, opts)
380
+ result = api_instance.get_mention_mix(organization_id, project_id, date_from, date_to, opts)
381
+ p result
378
382
  rescue Mencoro::ApiError => e
379
383
  puts "Error when calling AnalyticsApi->get_mention_mix: #{e}"
380
384
  end
@@ -382,9 +386,9 @@ end
382
386
 
383
387
  #### Using the get_mention_mix_with_http_info variant
384
388
 
385
- This returns an Array which contains the response data (`nil` in this case), status code and headers.
389
+ This returns an Array which contains the response data, status code and headers.
386
390
 
387
- > <Array(nil, Integer, Hash)> get_mention_mix_with_http_info(organization_id, project_id, date_from, date_to, opts)
391
+ > <Array(<ProjectMentionMixResponse>, Integer, Hash)> get_mention_mix_with_http_info(organization_id, project_id, date_from, date_to, opts)
388
392
 
389
393
  ```ruby
390
394
  begin
@@ -392,7 +396,7 @@ begin
392
396
  data, status_code, headers = api_instance.get_mention_mix_with_http_info(organization_id, project_id, date_from, date_to, opts)
393
397
  p status_code # => 2xx
394
398
  p headers # => { ... }
395
- p data # => nil
399
+ p data # => <ProjectMentionMixResponse>
396
400
  rescue Mencoro::ApiError => e
397
401
  puts "Error when calling AnalyticsApi->get_mention_mix_with_http_info: #{e}"
398
402
  end
@@ -411,7 +415,7 @@ end
411
415
 
412
416
  ### Return type
413
417
 
414
- nil (empty response body)
418
+ [**ProjectMentionMixResponse**](ProjectMentionMixResponse.md)
415
419
 
416
420
  ### Authorization
417
421
 
@@ -420,16 +424,16 @@ nil (empty response body)
420
424
  ### HTTP request headers
421
425
 
422
426
  - **Content-Type**: Not defined
423
- - **Accept**: Not defined
427
+ - **Accept**: application/json
424
428
 
425
429
 
426
430
  ## get_mention_samples
427
431
 
428
- > get_mention_samples(organization_id, project_id, date_from, date_to, opts)
432
+ > <ProjectMentionSamplesResponse> get_mention_samples(organization_id, project_id, date_from, date_to, opts)
429
433
 
430
434
  Sample of the raw AI mention texts of a project
431
435
 
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.
436
+ 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 the brand's own mention counts by type, tone and qualifier the mention mix endpoint.
433
437
 
434
438
  ### Examples
435
439
 
@@ -460,7 +464,8 @@ opts = {
460
464
 
461
465
  begin
462
466
  # 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)
467
+ result = api_instance.get_mention_samples(organization_id, project_id, date_from, date_to, opts)
468
+ p result
464
469
  rescue Mencoro::ApiError => e
465
470
  puts "Error when calling AnalyticsApi->get_mention_samples: #{e}"
466
471
  end
@@ -468,9 +473,9 @@ end
468
473
 
469
474
  #### Using the get_mention_samples_with_http_info variant
470
475
 
471
- This returns an Array which contains the response data (`nil` in this case), status code and headers.
476
+ This returns an Array which contains the response data, status code and headers.
472
477
 
473
- > <Array(nil, Integer, Hash)> get_mention_samples_with_http_info(organization_id, project_id, date_from, date_to, opts)
478
+ > <Array(<ProjectMentionSamplesResponse>, Integer, Hash)> get_mention_samples_with_http_info(organization_id, project_id, date_from, date_to, opts)
474
479
 
475
480
  ```ruby
476
481
  begin
@@ -478,7 +483,7 @@ begin
478
483
  data, status_code, headers = api_instance.get_mention_samples_with_http_info(organization_id, project_id, date_from, date_to, opts)
479
484
  p status_code # => 2xx
480
485
  p headers # => { ... }
481
- p data # => nil
486
+ p data # => <ProjectMentionSamplesResponse>
482
487
  rescue Mencoro::ApiError => e
483
488
  puts "Error when calling AnalyticsApi->get_mention_samples_with_http_info: #{e}"
484
489
  end
@@ -503,7 +508,7 @@ end
503
508
 
504
509
  ### Return type
505
510
 
506
- nil (empty response body)
511
+ [**ProjectMentionSamplesResponse**](ProjectMentionSamplesResponse.md)
507
512
 
508
513
  ### Authorization
509
514
 
@@ -587,7 +592,7 @@ This endpoint does not need any parameter.
587
592
 
588
593
  Snapshot rank-health board across an organization active projects
589
594
 
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.
595
+ Minimum role: viewer. One row per active project the caller can access — 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. For a member restricted to selected projects, the rows and every aggregate figure cover those projects only. 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
596
 
592
597
  ### Examples
593
598
 
@@ -652,11 +657,11 @@ end
652
657
 
653
658
  ## get_project_metrics
654
659
 
655
- > get_project_metrics(organization_id, project_id, date_from, date_to, opts)
660
+ > <ProjectRankTrackingStats> get_project_metrics(organization_id, project_id, date_from, date_to, opts)
656
661
 
657
662
  Headline visibility metrics of a project
658
663
 
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.
664
+ Minimum role: viewer. The project overview over a date window: share of voice (own and per competitor), mention / SERP / shopping rates, average 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, signed so that POSITIVE always means improved: for a position or a stability spread a positive trend means the number went down, for a rate or score it means the number went up. 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
665
 
661
666
  ### Examples
662
667
 
@@ -678,12 +683,13 @@ opts = {
678
683
  engines: ['chatgpt'], # Array<String> | Repeatable, or comma-separated.
679
684
  countries: ['inner_example'], # Array<String> | ISO-3166 alpha-2 codes or English names. Must be configured on the project.
680
685
  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.
686
+ include_ungrouped_queries: true # Boolean | Sent alone, restricts to tracked queries that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds them to those clusters. Omit both for all tracked queries.
682
687
  }
683
688
 
684
689
  begin
685
690
  # Headline visibility metrics of a project
686
- api_instance.get_project_metrics(organization_id, project_id, date_from, date_to, opts)
691
+ result = api_instance.get_project_metrics(organization_id, project_id, date_from, date_to, opts)
692
+ p result
687
693
  rescue Mencoro::ApiError => e
688
694
  puts "Error when calling AnalyticsApi->get_project_metrics: #{e}"
689
695
  end
@@ -691,9 +697,9 @@ end
691
697
 
692
698
  #### Using the get_project_metrics_with_http_info variant
693
699
 
694
- This returns an Array which contains the response data (`nil` in this case), status code and headers.
700
+ This returns an Array which contains the response data, status code and headers.
695
701
 
696
- > <Array(nil, Integer, Hash)> get_project_metrics_with_http_info(organization_id, project_id, date_from, date_to, opts)
702
+ > <Array(<ProjectRankTrackingStats>, Integer, Hash)> get_project_metrics_with_http_info(organization_id, project_id, date_from, date_to, opts)
697
703
 
698
704
  ```ruby
699
705
  begin
@@ -701,7 +707,7 @@ begin
701
707
  data, status_code, headers = api_instance.get_project_metrics_with_http_info(organization_id, project_id, date_from, date_to, opts)
702
708
  p status_code # => 2xx
703
709
  p headers # => { ... }
704
- p data # => nil
710
+ p data # => <ProjectRankTrackingStats>
705
711
  rescue Mencoro::ApiError => e
706
712
  puts "Error when calling AnalyticsApi->get_project_metrics_with_http_info: #{e}"
707
713
  end
@@ -718,11 +724,11 @@ end
718
724
  | **engines** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. | [optional] |
719
725
  | **countries** | [**Array&lt;String&gt;**](String.md) | ISO-3166 alpha-2 codes or English names. Must be configured on the project. | [optional] |
720
726
  | **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] |
727
+ | **include_ungrouped_queries** | **Boolean** | Sent alone, restricts to tracked queries that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds them to those clusters. Omit both for all tracked queries. | [optional][default to false] |
722
728
 
723
729
  ### Return type
724
730
 
725
- nil (empty response body)
731
+ [**ProjectRankTrackingStats**](ProjectRankTrackingStats.md)
726
732
 
727
733
  ### Authorization
728
734
 
@@ -731,12 +737,12 @@ nil (empty response body)
731
737
  ### HTTP request headers
732
738
 
733
739
  - **Content-Type**: Not defined
734
- - **Accept**: Not defined
740
+ - **Accept**: application/json
735
741
 
736
742
 
737
743
  ## get_project_sentiment
738
744
 
739
- > get_project_sentiment(organization_id, project_id, date_from, date_to, opts)
745
+ > <ProjectSentimentBreakdown> get_project_sentiment(organization_id, project_id, date_from, date_to, opts)
740
746
 
741
747
  Sentiment breakdown of a project brand mentions
742
748
 
@@ -762,12 +768,13 @@ opts = {
762
768
  engines: ['chatgpt'], # Array<String> | Repeatable, or comma-separated.
763
769
  countries: ['inner_example'], # Array<String> | ISO-3166 alpha-2 codes or English names. Must be configured on the project.
764
770
  query_cluster_ids: ['inner_example'], # Array<String> |
765
- include_ungrouped_queries: true # Boolean |
771
+ include_ungrouped_queries: true # Boolean | Sent alone, restricts to tracked queries that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds them to those clusters. Omit both for all tracked queries.
766
772
  }
767
773
 
768
774
  begin
769
775
  # Sentiment breakdown of a project brand mentions
770
- api_instance.get_project_sentiment(organization_id, project_id, date_from, date_to, opts)
776
+ result = api_instance.get_project_sentiment(organization_id, project_id, date_from, date_to, opts)
777
+ p result
771
778
  rescue Mencoro::ApiError => e
772
779
  puts "Error when calling AnalyticsApi->get_project_sentiment: #{e}"
773
780
  end
@@ -775,9 +782,9 @@ end
775
782
 
776
783
  #### Using the get_project_sentiment_with_http_info variant
777
784
 
778
- This returns an Array which contains the response data (`nil` in this case), status code and headers.
785
+ This returns an Array which contains the response data, status code and headers.
779
786
 
780
- > <Array(nil, Integer, Hash)> get_project_sentiment_with_http_info(organization_id, project_id, date_from, date_to, opts)
787
+ > <Array(<ProjectSentimentBreakdown>, Integer, Hash)> get_project_sentiment_with_http_info(organization_id, project_id, date_from, date_to, opts)
781
788
 
782
789
  ```ruby
783
790
  begin
@@ -785,7 +792,7 @@ begin
785
792
  data, status_code, headers = api_instance.get_project_sentiment_with_http_info(organization_id, project_id, date_from, date_to, opts)
786
793
  p status_code # => 2xx
787
794
  p headers # => { ... }
788
- p data # => nil
795
+ p data # => <ProjectSentimentBreakdown>
789
796
  rescue Mencoro::ApiError => e
790
797
  puts "Error when calling AnalyticsApi->get_project_sentiment_with_http_info: #{e}"
791
798
  end
@@ -802,11 +809,11 @@ end
802
809
  | **engines** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. | [optional] |
803
810
  | **countries** | [**Array&lt;String&gt;**](String.md) | ISO-3166 alpha-2 codes or English names. Must be configured on the project. | [optional] |
804
811
  | **query_cluster_ids** | [**Array&lt;String&gt;**](String.md) | | [optional] |
805
- | **include_ungrouped_queries** | **Boolean** | | [optional][default to false] |
812
+ | **include_ungrouped_queries** | **Boolean** | Sent alone, restricts to tracked queries that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds them to those clusters. Omit both for all tracked queries. | [optional][default to false] |
806
813
 
807
814
  ### Return type
808
815
 
809
- nil (empty response body)
816
+ [**ProjectSentimentBreakdown**](ProjectSentimentBreakdown.md)
810
817
 
811
818
  ### Authorization
812
819
 
@@ -815,12 +822,12 @@ nil (empty response body)
815
822
  ### HTTP request headers
816
823
 
817
824
  - **Content-Type**: Not defined
818
- - **Accept**: Not defined
825
+ - **Accept**: application/json
819
826
 
820
827
 
821
828
  ## get_project_time_series
822
829
 
823
- > get_project_time_series(organization_id, project_id, date_from, date_to, opts)
830
+ > <ProjectRankTrackingTimeSeries> get_project_time_series(organization_id, project_id, date_from, date_to, opts)
824
831
 
825
832
  Rank-tracking metrics of a project over time
826
833
 
@@ -847,13 +854,14 @@ opts = {
847
854
  engines: ['chatgpt'], # Array<String> | Repeatable, or comma-separated.
848
855
  countries: ['inner_example'], # Array<String> | ISO-3166 alpha-2 codes or English names. Must be configured on the project.
849
856
  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.
857
+ include_ungrouped_queries: true, # Boolean | Sent alone, restricts to tracked queries that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds them to those clusters. Omit both for all tracked queries.
851
858
  competitor_ids: ['inner_example'] # Array<String> | Repeatable, or comma-separated. Each id adds one series under the competitors map of every point.
852
859
  }
853
860
 
854
861
  begin
855
862
  # Rank-tracking metrics of a project over time
856
- api_instance.get_project_time_series(organization_id, project_id, date_from, date_to, opts)
863
+ result = api_instance.get_project_time_series(organization_id, project_id, date_from, date_to, opts)
864
+ p result
857
865
  rescue Mencoro::ApiError => e
858
866
  puts "Error when calling AnalyticsApi->get_project_time_series: #{e}"
859
867
  end
@@ -861,9 +869,9 @@ end
861
869
 
862
870
  #### Using the get_project_time_series_with_http_info variant
863
871
 
864
- This returns an Array which contains the response data (`nil` in this case), status code and headers.
872
+ This returns an Array which contains the response data, status code and headers.
865
873
 
866
- > <Array(nil, Integer, Hash)> get_project_time_series_with_http_info(organization_id, project_id, date_from, date_to, opts)
874
+ > <Array(<ProjectRankTrackingTimeSeries>, Integer, Hash)> get_project_time_series_with_http_info(organization_id, project_id, date_from, date_to, opts)
867
875
 
868
876
  ```ruby
869
877
  begin
@@ -871,7 +879,7 @@ begin
871
879
  data, status_code, headers = api_instance.get_project_time_series_with_http_info(organization_id, project_id, date_from, date_to, opts)
872
880
  p status_code # => 2xx
873
881
  p headers # => { ... }
874
- p data # => nil
882
+ p data # => <ProjectRankTrackingTimeSeries>
875
883
  rescue Mencoro::ApiError => e
876
884
  puts "Error when calling AnalyticsApi->get_project_time_series_with_http_info: #{e}"
877
885
  end
@@ -889,12 +897,12 @@ end
889
897
  | **engines** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. | [optional] |
890
898
  | **countries** | [**Array&lt;String&gt;**](String.md) | ISO-3166 alpha-2 codes or English names. Must be configured on the project. | [optional] |
891
899
  | **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] |
900
+ | **include_ungrouped_queries** | **Boolean** | Sent alone, restricts to tracked queries that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds them to those clusters. Omit both for all tracked queries. | [optional][default to false] |
893
901
  | **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
902
 
895
903
  ### Return type
896
904
 
897
- nil (empty response body)
905
+ [**ProjectRankTrackingTimeSeries**](ProjectRankTrackingTimeSeries.md)
898
906
 
899
907
  ### Authorization
900
908
 
@@ -903,12 +911,12 @@ nil (empty response body)
903
911
  ### HTTP request headers
904
912
 
905
913
  - **Content-Type**: Not defined
906
- - **Accept**: Not defined
914
+ - **Accept**: application/json
907
915
 
908
916
 
909
917
  ## get_query_movers
910
918
 
911
- > get_query_movers(organization_id, project_id, date_from, date_to, opts)
919
+ > <TrackedQueryMoversResponse> get_query_movers(organization_id, project_id, date_from, date_to, opts)
912
920
 
913
921
  Tracked queries ranked by how much a metric moved
914
922
 
@@ -941,7 +949,8 @@ opts = {
941
949
 
942
950
  begin
943
951
  # Tracked queries ranked by how much a metric moved
944
- api_instance.get_query_movers(organization_id, project_id, date_from, date_to, opts)
952
+ result = api_instance.get_query_movers(organization_id, project_id, date_from, date_to, opts)
953
+ p result
945
954
  rescue Mencoro::ApiError => e
946
955
  puts "Error when calling AnalyticsApi->get_query_movers: #{e}"
947
956
  end
@@ -949,9 +958,9 @@ end
949
958
 
950
959
  #### Using the get_query_movers_with_http_info variant
951
960
 
952
- This returns an Array which contains the response data (`nil` in this case), status code and headers.
961
+ This returns an Array which contains the response data, status code and headers.
953
962
 
954
- > <Array(nil, Integer, Hash)> get_query_movers_with_http_info(organization_id, project_id, date_from, date_to, opts)
963
+ > <Array(<TrackedQueryMoversResponse>, Integer, Hash)> get_query_movers_with_http_info(organization_id, project_id, date_from, date_to, opts)
955
964
 
956
965
  ```ruby
957
966
  begin
@@ -959,7 +968,7 @@ begin
959
968
  data, status_code, headers = api_instance.get_query_movers_with_http_info(organization_id, project_id, date_from, date_to, opts)
960
969
  p status_code # => 2xx
961
970
  p headers # => { ... }
962
- p data # => nil
971
+ p data # => <TrackedQueryMoversResponse>
963
972
  rescue Mencoro::ApiError => e
964
973
  puts "Error when calling AnalyticsApi->get_query_movers_with_http_info: #{e}"
965
974
  end
@@ -982,7 +991,7 @@ end
982
991
 
983
992
  ### Return type
984
993
 
985
- nil (empty response body)
994
+ [**TrackedQueryMoversResponse**](TrackedQueryMoversResponse.md)
986
995
 
987
996
  ### Authorization
988
997
 
@@ -991,7 +1000,7 @@ nil (empty response body)
991
1000
  ### HTTP request headers
992
1001
 
993
1002
  - **Content-Type**: Not defined
994
- - **Accept**: Not defined
1003
+ - **Accept**: application/json
995
1004
 
996
1005
 
997
1006
  ## get_share_of_voice_formula
@@ -1000,7 +1009,7 @@ nil (empty response body)
1000
1009
 
1001
1010
  The constants behind the Share of Voice score
1002
1011
 
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.
1012
+ 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 score averages each check over its passes and also weights cited links, so applying these constants to the raw counts of the mention mix endpoint does not reproduce it. Every value is always present and is never null.
1004
1013
 
1005
1014
  ### Examples
1006
1015
 
@@ -1067,11 +1076,11 @@ end
1067
1076
 
1068
1077
  ## get_tracked_query_time_series
1069
1078
 
1070
- > get_tracked_query_time_series(organization_id, project_id, tracked_query_id, date_from, date_to, opts)
1079
+ > <TrackedQueryRankTrackingTimeSeries> get_tracked_query_time_series(organization_id, project_id, tracked_query_id, date_from, date_to, opts)
1071
1080
 
1072
1081
  Rank-tracking time series of a single tracked query
1073
1082
 
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.
1083
+ 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 bucket appears only when something was matched for the query in it; when only competitors were, the brand's metrics are all null, so a brand that was not mentioned reads as a null shareOfVoice, not as 0. shareOfVoice is also null, even with the brand mentioned, when no tracked competitor carried any mention weight on any day of the bucket: it is a share against tracked competitors, and a weekly or monthly value averages only the days where it could be computed. 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
1084
 
1076
1085
  ### Examples
1077
1086
 
@@ -1097,7 +1106,8 @@ opts = {
1097
1106
 
1098
1107
  begin
1099
1108
  # 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)
1109
+ result = api_instance.get_tracked_query_time_series(organization_id, project_id, tracked_query_id, date_from, date_to, opts)
1110
+ p result
1101
1111
  rescue Mencoro::ApiError => e
1102
1112
  puts "Error when calling AnalyticsApi->get_tracked_query_time_series: #{e}"
1103
1113
  end
@@ -1105,9 +1115,9 @@ end
1105
1115
 
1106
1116
  #### Using the get_tracked_query_time_series_with_http_info variant
1107
1117
 
1108
- This returns an Array which contains the response data (`nil` in this case), status code and headers.
1118
+ This returns an Array which contains the response data, status code and headers.
1109
1119
 
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)
1120
+ > <Array(<TrackedQueryRankTrackingTimeSeries>, Integer, Hash)> get_tracked_query_time_series_with_http_info(organization_id, project_id, tracked_query_id, date_from, date_to, opts)
1111
1121
 
1112
1122
  ```ruby
1113
1123
  begin
@@ -1115,7 +1125,7 @@ begin
1115
1125
  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
1126
  p status_code # => 2xx
1117
1127
  p headers # => { ... }
1118
- p data # => nil
1128
+ p data # => <TrackedQueryRankTrackingTimeSeries>
1119
1129
  rescue Mencoro::ApiError => e
1120
1130
  puts "Error when calling AnalyticsApi->get_tracked_query_time_series_with_http_info: #{e}"
1121
1131
  end
@@ -1135,7 +1145,7 @@ end
1135
1145
 
1136
1146
  ### Return type
1137
1147
 
1138
- nil (empty response body)
1148
+ [**TrackedQueryRankTrackingTimeSeries**](TrackedQueryRankTrackingTimeSeries.md)
1139
1149
 
1140
1150
  ### Authorization
1141
1151
 
@@ -1144,7 +1154,7 @@ nil (empty response body)
1144
1154
  ### HTTP request headers
1145
1155
 
1146
1156
  - **Content-Type**: Not defined
1147
- - **Accept**: Not defined
1157
+ - **Accept**: application/json
1148
1158
 
1149
1159
 
1150
1160
  ## get_tracking_coverage
@@ -1246,7 +1256,7 @@ opts = {
1246
1256
  engines: ['chatgpt'], # Array<String> | Repeatable, or comma-separated. Narrows which variants count towards each row.
1247
1257
  countries: ['inner_example'], # Array<String> | ISO-3166 alpha-2 codes or English names. Must be configured on the project.
1248
1258
  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.
1259
+ include_ungrouped_queries: true, # Boolean | Sent alone, restricts to keywords with variants that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds them to those clusters. Omit both for all keywords.
1250
1260
  status: 'active', # String | Restrict to variants with this status. A keyword whose variants disagree still reports statusSummary \"mixed\".
1251
1261
  check_frequencies: ['daily'], # Array<String> | Repeatable, or comma-separated.
1252
1262
  n_passes: [37], # Array<Integer> | Repeatable, or comma-separated. Restrict to variants configured with these pass counts.
@@ -1295,7 +1305,7 @@ end
1295
1305
  | **engines** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. Narrows which variants count towards each row. | [optional] |
1296
1306
  | **countries** | [**Array&lt;String&gt;**](String.md) | ISO-3166 alpha-2 codes or English names. Must be configured on the project. | [optional] |
1297
1307
  | **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] |
1308
+ | **include_ungrouped_queries** | **Boolean** | Sent alone, restricts to keywords with variants that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds them to those clusters. Omit both for all keywords. | [optional][default to false] |
1299
1309
  | **status** | **String** | Restrict to variants with this status. A keyword whose variants disagree still reports statusSummary \&quot;mixed\&quot;. | [optional] |
1300
1310
  | **check_frequencies** | [**Array&lt;String&gt;**](String.md) | Repeatable, or comma-separated. | [optional] |
1301
1311
  | **n_passes** | [**Array&lt;Integer&gt;**](Integer.md) | Repeatable, or comma-separated. Restrict to variants configured with these pass counts. | [optional] |