Recommendations API
This API provides document recommendations based on either the gathered data for the site or user provided data. Note: This API is in BETA
Authentication
Section titled “Authentication”Clients calling the API are required to add an authentication header with the valid authentication token. This token can be retrieved from the Smart Search Plugin Settings.
Authorization: Bearer {ACCESS_TOKEN}Cookie-Based Data Collection
Section titled “Cookie-Based Data Collection”Recommendations uses cookies to collect non-identifiable data to enhance user experience through personalized recommendations. Below is a detailed overview of the cookies we use and how the data is handled.
Collected Data
Section titled “Collected Data”| Cookie Name | Description | Lifespan | Purpose |
|---|---|---|---|
user_id | Anonymous identifier assigned to a user | 24 hours | Personalization across multiple sessions |
session_id | Anonymous identifier for a browsing session | 30 minutes | Session-level tracking and insights |
Purpose of Data Collection
Section titled “Purpose of Data Collection”-
Personalized Recommendations:
We useuser_idandsession_idto customize content based on user behavior and interaction history. -
Trending Content Insights:
Aggregated data from session activity helps us identify and surface trending content to users in real time. -
Non-identifiable Usage:
All identifiers are anonymized and do not contain or infer personal information.
Privacy & Compliance
Section titled “Privacy & Compliance”- No personally identifiable information is collected.
- Data is used strictly for on-site personalization and analytics.
- We do not share this data with third parties.
Examples
Section titled “Examples”Trending documents
Section titled “Trending documents”The recommendations API utilizes collected site data, specifically search data, to generate a list of frequently searched documents.
Input Parameters:
- count: the number of documents that will be returned
- from: include documents from this date
- to: include documents up to this date
Note: Only 7 days of searches is stored currently.
query TrendingDocuments { recommendations(count: 2) trendingDocuments(from: "7 days ago", to: "Now") { docID count source }}sample response:
{ "data": { "recommendations": { "trendingDocuments": [ { "docID": "post:16", "count": 7, "source": { "ID": 1, "post_content": "Rabbit is happily running", "post_date": "11-06-2023T12:33:00", "post_status": "publish", "post_title": "George the rabbit", "post_type": "rabbit" } }, { "docID": "post:21", "count": 6, "source": { "ID": 2, "post_content": "Horse in a field", "post_date": "11-06-2023T12:33:00", "post_status": "publish", "post_title": "Greg the horse", "post_type": "horse" } } ] } }}Related Documents
Section titled “Related Documents”The recommendations API provides related documents to a user-provided document by using our AI vector search. Additionally, trending documents can be boosted in the results.
Input Parameters:
- count: the number of documents that will be returned
- docID: the document ID to get related documents to
- useTrendingBy:
- boost: boost the trending documents in the related results (if any)
- minScore: the minimum score that a document must have to be returned
query RelatedDocuments { recommendations(count: 2) { relatedDocuments( docID: "post:28" useTrendingBy: { boost: true } minScore: 0.5 ) { docID score source } }}{ "data": { "recommendations": { "trendingDocuments": [ { "docID": "post:16", "score": 0.9, "source": { "ID": 1, "post_content": "Rabbit is happily running", "post_date": "11-06-2023T12:33:00", "post_status": "publish", "post_title": "George the rabbit", "post_type": "rabbit" } }, { "docID": "post:21", "score": 0.8, "source": { "ID": 2, "post_content": "Horse in a field", "post_date": "11-06-2023T12:33:00", "post_status": "publish", "post_title": "Greg the horse", "post_type": "horse" } } ] } }}Tracker API
Section titled “Tracker API”The Tracker API enables data collection for user interactions to improve search recommendations and analytics. It provides mutations to track page views, search queries, and search result clicks.
Authentication
Section titled “Authentication”Similar to the Recommendations API, a valid authentication token is required in all client requests.
Authorization: Bearer {ACCESS_TOKEN}Mutations
Section titled “Mutations”Track Page View
Section titled “Track Page View”Records when a user views a page or document.
mutation TrackPageView { tracker { trackPageView( session: { id: "session-123", country: "US" } userID: "user-456" data: { documentID: "post:16" page: { title: "George the rabbit" referrer: "https://example.com/search" url: "https://example.com/posts/george-the-rabbit" } } ) { success message } }}Track Search Query
Section titled “Track Search Query”Records search queries performed by users.
mutation TrackSearch { tracker { trackSearch( session: { id: "session-123", country: "US" } userID: "user-456" data: { search: { query: "rabbit care" filters: [{ filterName: "post_type", items: ["post", "page"] }] sort: { name: "relevance" } results: { total: 5 items: [ { documentID: "post:16" page: { title: "George the rabbit" referrer: "" url: "https://example.com/posts/george-the-rabbit" } } ] } } } ) { success message } }}Track Search Click
Section titled “Track Search Click”Records when a user clicks on a search result.
mutation TrackSearchClick { tracker { trackSearchClick( session: { id: "session-123", country: "US" } userID: "user-456" data: { documentID: "post:16" page: { title: "George the rabbit" referrer: "https://example.com/search" url: "https://example.com/posts/george-the-rabbit" } search: { query: "rabbit care" filters: [{ filterName: "post_type", items: ["post"] }] sort: { name: "relevance" } } position: 1 } ) { success message } }}Data Collection Flow
Section titled “Data Collection Flow”The typical flow for implementing tracking:
- Page Load: Use
trackPageViewwhen a user lands on a page - Search Query: Use
trackSearchwhen a user performs a search - Result Click: Use
trackSearchClickwhen a user clicks on a search result
Data Types
Section titled “Data Types”| Field | Type | Required | Description |
|---|---|---|---|
session.id | String | Yes | Unique session identifier |
session.country | String | No | User’s country code (e.g., “US”) |
userID | String | Yes | Anonymous user identifier |
documentID | String | Yes | Unique document identifier |
page.title | String | Yes | Page title |
page.referrer | String | Yes | Referring page URL |
page.url | String | Yes | Current page URL |
position | Number | No | Position of the clicked result (for search clicks) |
Best Practices
Section titled “Best Practices”- Use consistent
userIDandsession.idvalues across requests for the same user/session - Include all available search context (filters, sort, results) for better analytics
- Track interactions in real-time for the most accurate data
- Session IDs should be regenerated periodically (recommended: 30 minutes)
- User IDs should persist longer for better personalization (recommended: 24 hours)