Content
Content APIs for Lytics Content Affinity Engine, allow for adding content into Lytics, getting lists of content, and understanding the content and content-topics.
Content Classification Content classification refers to the Lytics automated process of taking text, URL, image based content and classifying it to attach topics to content documents.
Content A list of content (URLs, Email Documents, Uploaded Documents, Campaigns) and the topics, created dates, etc for each.
Content Topics Categories/Topics are applied to each piece of content.
User Content Affinity Based on user interacting with content, the topics (derived from the content they interact with) is enriched into their profile.
First, an overview of How this content gets here.
Observed URLs Once the lytics tag is on a Website, as users use the website any new URL they interact with is collected.
Crawling we can proactively crawl a site.
Email Tools We see URLs inside of email campaigns and proactively classify those URLs, as well as the emails themselves.
Uploaded Content You may upload content to the Classify.
Use Cases
1) User Content Recomendations Find content for a user based on their content-affinity.
2) Get List of Content Rich query api to get content.
Examples
# ad-hoc segment scan from content table
# get a list of content documents that
# - have aspects=article (aspects = article,product, etc)
# - has imageurl
curl -s -H "Authorization: $LIOKEY" \
-XGET "https://api.lytics.io/api/segment/scan?sortfield=created&limit=10" -d '
FILTER AND (
EXISTS imageurls
aspects = "article"
)
FROM content
' | jq '.'
# Create a content-segment
# - uses "ALIAS" as id for create/update, must be unique
curl -s -H "Authorization: $LIOKEY" -H "Content-Type: text/plain" \
-XPOST "$LIOAPI/api/segment" -d '
FILTER AND (
EXISTS imageurls
aspects = "article"
)
FROM content
WITH name = "My Articles"
ALIAS my_articles
' | jq '.'
# grab just those content-docs using named segment scan
curl -s -H "Authorization: $LIOKEY" \
-XGET "https://api.lytics.io/api/segment/my_articles/scan?sortfield=created&limit=10" \
| jq '.'
# grab recommended articles for single user
curl -s -H "Authorization: $LIOKEY" \
-XGET "https://api.lytics.io/api/content/recommend/:your_account_id/user/user_id/123456" \
| jq '.'
Content Topics
Get a list of topics in the content graph. Topics are updated every 24 hours.
Content Topics
Get a list of topics in the content graph. Topics are ordered by that occur on the most documents will be returned first.
curl -s -H "Authorization: $LIOKEY" \
-XGET "https://api.lytics.io/api/content/topic" | jq '.'
Response 200
Headers
Content-Type: application/json
Body
{
"status": 200,
"message": "success",
"data": [
{
"label": "Data-First Marketing",
"doc_count": 275,
"total": 380636,
"missing": 216048,
"present": 143710,
"avg": 0.5983867964798089,
"tags": [
"custom"
]
},
{
"label": "User Data Unification",
"doc_count": 273,
"total": 380636,
"missing": 216048,
"present": 154068,
"avg": 0.6036863622558337,
"tags": [
"custom"
]
},
{
"label": "Customer Data Platform",
"doc_count": 313,
"total": 380260,
"missing": 216043,
"present": 159628,
"avg": 0.9704200631406573,
"tags": [
"custom"
]
}
]
}
Content Topic Summary
Get a summary of user affinity for, and related documents to a topic.
For each given topic, find out how many users have a high, low, none affinity for a given topic.
Content Topic Summary
Response 200
Headers
Content-Type: application/json
Body
{
"status": 200,
"message": "success",
"data": {
"label": "Customer Data Platform",
"doc_count": 313,
"total": 380260,
"missing": 216043,
"present": 159628,
"avg": 0.9704200631406573,
"tags": [
"custom"
]
}
}
Content Topic Rollup List
Get a list of all topic rollups for an account. To retrieve a single topic rollup, please refer to the Content Topic Rollup API.
Content Topic Rollup List
Get list of topic rollups.
curl "$LIOAPI/api/content/topicrollup" -s -H "Authorization: $LIOKEY" | jq '.'
Response 200
Headers
Content-Type: application/json
Body
{
"data": [
{
"id": "6a7f76ff97ad0e3e96c162f74aee8f8f",
"account_id": "2b15cafb441e477cad3ffbe62c4d5966",
"label": "Baking rollup",
"created": "2014-08-04T21:18:20.124Z",
"updated": "2014-08-04T21:18:20.124Z",
"topics": [
{
"label": "Recipe",
"value": 0.66
},
{
"label": "baking",
"value": 0.55
}
]
}
]
}
Content Topic Rollup
Topic Rollups are Lytics' method of organizing Topics into groups, or high-level categories. Topic Rollups are user defined and can simplify your interactions with using content for personalization and recommendation use-cases.
The Topic Rollup object has the following attributes:
field | DataType | Description |
---|---|---|
id | string | Unique ID assigned by Lytics |
created | Date | Created date of the Topic Rollup |
updated | Date | Last-Updated date of the Topic Rollup |
topics | object | A list of topics to include in the Topic Rollup |
label | string | Label of the Topic Rollup |
overwrite | string | Overwrite topic-affinities for the provided topics with the provided label |
Parameters | ||
---|---|---|
id | string (required) Ex: 123abc | id of topic rollup |
Content Topic Rollup Fetch
Fetch a topic rollup by id
Response 200
Headers
Content-Type: application/json
Body
{
"data": {
"id": "6a7f76ff97ad0e3e96c162f74aee8f8f",
"account_id": "2b15cafb441e477cad3ffbe62c4d5966",
"label": "Baking rollup",
"created": "2014-08-04T21:18:20.124Z",
"updated": "2014-08-04T21:18:20.124Z",
"topics": [
{
"label": "Recipe",
"value": 0.66
},
{
"label": "baking",
"value": 0.55
}
]
}
}
Content Topic Rollup Create
Topic Rollups can be created with a variety of different configurations. To determine the right configuration for you, please consult the following examples:
Suppose the topic-affinities (lytics_content
) for a given user is defined as:
{
"Chex Mix": 0.5,
"Cheetos": 0.3,
"Pretzel": 0.2
}
1) Overwriting Topic Affinities
// topic rollup
{
"overwrite": "replace",
"label": "Snacks",
"topics": [
{
"label": "Cheetos",
"value": 1.0
},
{
"label": "Chex Mix",
"value": 1.0
}
]
}
// topic affinites for user:
{
"Snacks": 0.4,
"Pretzel": 0.2
}
2) Add to Topic Affinities
// topic rollup
{
"overwrite": "append",
"label": "Snacks",
"topics": [
{
"label": "Cheetos",
"value": 1.0
},
{
"label": "Chex Mix",
"value": 1.0
}
]
}
// topic affinites for user:
{
"Snacks": 0.4,
"Chex Mix": 0.5,
"Cheetos": 0.3,
"Pretzel": 0.2
}
Creating new Topic Rollups:
curl -s -XPOST "https://api.lytics.io/api/content/topicrollup" \
-H "Content-type: application/json" \
-H "Authorization: $LIOKEY" \
-d'
{
"label": "Baking rollup",
"acctid": "123456",
"topics": [
{"label": "Recipe"},
{"label": "baking"}
]
}
' | jq '.'
Response 201
Headers
Content-Type: application/json
Body
{
"data": {
"id": "6a7f76ff97ad0e3e96c162f74aee8f8f",
"account_id": "2b15cafb441e477cad3ffbe62c4d5966",
"label": "Baking rollup",
"created": "2014-08-04T21:18:20.124Z",
"updated": "2014-08-04T21:18:20.124Z",
"topics": [
{
"label": "Recipe",
"value": 0.66
},
{
"label": "baking",
"value": 0.55
}
]
}
}
Content Topic Blacklist
Get a list of the blacklisted topics. Blacklisted topics will have the blacklisted
identifier in the tags
field.
Content Topic Blacklist Fetch
Fetch the blacklisted topics
Response 200
Headers
Content-Type: application/json
Body
{
"status": 200,
"message": "success",
"data": [
{
"label": "Data-First Marketing",
"doc_count": 275,
"total": 380636,
"missing": 216048,
"present": 143710,
"avg": 0.5983867964798089,
"tags": [
"blacklisted"
]
},
{
"label": "User Data Unification",
"doc_count": 273,
"total": 380636,
"missing": 216048,
"present": 154068,
"avg": 0.6036863622558337,
"tags": [
"blacklisted"
]
}
]
}
Content Topic Blacklist Create
Blacklist or un-blacklist topics to an account's topic-blacklist
# to blacklist certain topics
curl -s -XPOST "https://api.lytics.io/api/content/topicblacklist" \
-H "Content-type: application/json" \
-H "Authorization: $LIOKEY" \
-d'
{
"method": "add",
"ids": ["Data-First Marketing", "User Data Unification"]
}
' | jq '.'
# to unblacklist certain topics
curl -s -XPOST "https://api.lytics.io/api/content/topicblacklist" \
-H "Content-type: application/json" \
-H "Authorization: $LIOKEY" \
-d'
{
"method": "delete",
"ids": ["Data-First Marketing", "User Data Unification"]
}
' | jq '.'
Response 200
Headers
Content-Type: application/json
Body
{
"status": 200,
"message": "success",
"data": [
{
"label": "Data-First Marketing",
"doc_count": 275,
"total": 380636,
"missing": 216048,
"present": 143710,
"avg": 0.5983867964798089,
"tags": [
"blacklisted"
]
},
{
"label": "User Data Unification",
"doc_count": 273,
"total": 380636,
"missing": 216048,
"present": 154068,
"avg": 0.6036863622558337,
"tags": [
"blacklisted"
]
}
]
}
Content Topic Blacklist Update
Replace topics in an account's topic-blacklist
curl -s -XPOST "https://api.lytics.io/api/content/topicblacklist" \
-H "Content-type: application/json" \
-H "Authorization: $LIOKEY" \
-d'
{
"ids": ["Data-First Marketing", "User Data Unification"]
}
' | jq '.'
Response 200
Headers
Content-Type: application/json
Body
{
"status": 200,
"message": "success",
"data": [
{
"label": "Data-First Marketing",
"doc_count": 275,
"total": 380636,
"missing": 216048,
"present": 143710,
"avg": 0.5983867964798089,
"tags": [
"blacklisted"
]
},
{
"label": "User Data Unification",
"doc_count": 273,
"total": 380636,
"missing": 216048,
"present": 154068,
"avg": 0.6036863622558337,
"tags": [
"blacklisted"
]
}
]
}
Content Document
Get a summary for document. If no hashed url is specified, then return the 10 most recent urls. Summaries may include the following properties:
Property | Description |
---|---|
url | External location of the content source |
title | Contents of the title tag in the case of a URL. In the case of email, the contents of the subject line. |
description | Contents of the meta tag with the name property of description , og:description , or twitter:description . |
topics | A set of strings identifying relevant topics in the content. Each topic can be mapped directly to a Wikidata entity. |
topic_relevances | An object containing each topic and its predicted relevance. |
topic_rollups | An object containing each topic rollup and its composite relevance. |
primary_image | URL of the primary image in the content. |
author | Plain-text name of the author. |
created | Date of publication. If unavailable, defaults to the time it is fetched by Lytics. |
id | Reverse domain name notation of the canonicalized value of the URL. |
sitename | Plain-text name of the site. |
stream | Name of the Lytics stream where the URL was observed. |
path | Path of the URL. |
aspects | Contextual type of a URL. One of article , discussion , image , product , video , other . |
language | Human language of the content. |
updated | Date the content was last updated. This usually corresponds to its enrichment date inside of Lytics. |
fetched | Date when the content was retrieved by Lytics. |
hashedurl | Hashed value of the input URL, used for identification within Lytics. |
Parameters | ||
---|---|---|
urls | []string (optional) Ex: http//www.getlytics.com/blog/post | url to look up |
ids | []int64 (optional) Ex: 123abc | hashed url or campaign id to look up |
Content Document
Response 200
Headers
Content-Type: application/json
Body
{
"status": 200,
"message": "success",
"data": {
"total": 1,
"urls": [
{
"url": "www.our-site.com/product/new-product-xyz",
"title": "Blue Running Shoes that make you faster",
"topics": [
"our-site (company)",
"running",
"shoes"
],
"id": "3395466611293777389"
}
]
}
}
Content Classify
Classify the given url or text. This will enrich the given url/text to add tags to it, and add it to the content index.
The Data Upload api's would allow you to relate user's to these documents.
Parameters | ||
---|---|---|
url | string (optional) Ex: http://myurl | url to classify |
text | string (optional) Ex: my text | text to classify |
draft | boolean (optional) Ex: true | if true, the classified content will not be added to the content index |
Content Classify
Response 200
Headers
Content-Type: application/json
Body
{
"data":{
"url":"https://www.getlytics.com/blog/post/improving_google_analytics?utm_source=linkedin",
"description":"Stop Pretending Your Insights Are Actionable: Part 1, Google Analytics",
"long_description":"Most analytics tools are used purely for insight discovery rather than empowering action. We explore how the Lytics analytics integrations focus on action and filling the some massive gaps traditional analytics tools miss.",
"type":"web",
"httpstatus":0,
"humanLanguage":"en",
"meta":[
"og:title=stop pretending your insights are actionable: part 1, google analytics",
],
"primary_image":"https://www.getlytics.com/img/blog/defaults/developers.gif",
"published":"2015-10-23T00:00:00Z",
"author":"Mark Hayden",
"sitename":"Lytics",
"created":"2016-06-24T21:20:43.421892991Z",
"fetched":"2016-06-24T21:20:45.751844316Z",
"updated":"2016-06-24T21:20:52.367247963Z",
"enriched":{
"diffbot":"2016-06-24T21:20:52.367248438Z",
"google":"1970-01-01T00:00:00Z",
"meta":"2016-06-24T21:20:45.751852586Z",
"textrazor":"1970-01-01T00:00:00Z"
}
},
"message":"success",
"status":200
}
Content Recommendation
Find suggested content for a user based on their known affinities.
Parameters | ||
---|---|---|
fieldname | string (required) Ex: email | field to use to identify a user |
fieldval | string (required) Ex: [email protected] | unique identity |
contentsegment | string (required) Ex: blog_content | id, or slug of a content-collection to filter content |
limit | int (optional) Ex: 20 | limit on number of documents to suggest/return |
shuffle | bool (optional) Ex: false | whether or not to shuffle the recommendation order |
visited | bool (optional) Ex: false | whether to show recommendations for content the user has already viewed |
topics | []string (optional) Ex: ["Marketing", "Analytics"] | if supplied, only allow recommendations on content with the specified topics |
topicfilter | []string (optional) Ex: ["Poltics", "Oregon"] | if supplied, only documents that contain all of the topics defined in the `topicfilter` will be returned |
rank | string (optional) Ex: affinity | Ranking method for order of recommendations. Must be either "affinity" or "recent" |
wait | bool (optional) Ex: true | Whether or not to wait for more complex user identities to resolve |
string (optional) Ex: [email protected] | if the fieldname and fieldval are omitted, an email can be provided. This can be helpful for templating use-cases | |
url | string (optional) Ex: www.example.com | if url is provided, the recommendations will be based on the content topics associated with the provided URL |
Content Recommendation
Response 200
Headers
Content-Type: application/json
Body
{
"data":[
{
"url":"www.getlytics.com/blog/post/intent_through_content",
"title":"Understanding User Intent Through Content",
"description":"Customer Intent comes from understanding the connection between engagement and its contexts. Content modeling and affinity graphs makes interpretation of intent a lot easier. Learn how marketers can benefit from this.",
"topics":[
"customer data platform",
"data science",
"content marketing",
"personalization"
],
"topic_relevances":{
"content marketing":1,
"customer data platform":1,
"data science":1,
"personalization":1
},
"primary_image":"https://www.getlytics.com/img/blog/posts/intent_through_content/intent_through_content-bg.gif",
"author":"",
"created":"2016-06-08T16:11:45.599594093Z",
"id":"-3435113786560588929",
"sitename":"Lytics",
"stream":"default",
"path":[
"blog",
"blog/post",
"blog/post/intent_through_content"
],
"aspects":[
"article"
],
"language":"unknown",
"updated":"2016-06-09T12:49:36.870359765Z",
"fetched":"2016-06-09T12:49:35.812654441Z",
"meta":[
"og:locale/en_us",
"og:site_name/lytics",
"og:title/understanding user intent through content",
"og:type/article",
"og:url/https://www.getlytics.com/blog/post/intent_through_content"
],
"confidence":0.5916079783099615,
"visited":true
}
],
"message":"success",
"status":200
}
Public Content Recommendation
This API offers a public alternative to the default recommendation endpoint, intended for use on public websites. In lieu of embedding secure API credentials on a public web page making public HTTP requests, authentication is determined by matching the domain of the HTTP referrer with the domain specified for the account.
Parameters | ||
---|---|---|
account | string (required) Ex: 123 | the account ID |
fieldname | string (required) Ex: email | field to use to identify a user |
fieldval | string (required) Ex: [email protected] | unique identity |
contentsegment | string (required) Ex: blog_content | id, or slug of a content-collection to filter content |
limit | int (optional) Ex: 20 | limit on number of documents to suggest/return |
shuffle | bool (optional) Ex: false | whether or not to shuffle the recommendation order |
visited | bool (optional) Ex: false | whether to show recommendations for content the user has already viewed |
topics | []string (optional) Ex: ["Marketing", "Analytics"] | if supplied, only allow recommendations on content with the specified topics |
topicfilter | []string (optional) Ex: ["Poltics", "Oregon"] | if supplied, only documents that contain all of the topics defined in the `topicfilter` will be returned |
rank | string (optional) Ex: affinity | Ranking method for order of recommendations. Must be either "affinity" or "recent" |
wait | bool (optional) Ex: true | Whether or not to wait for more complex user identities to resolve |
string (optional) Ex: [email protected] | if the fieldname and fieldval are omitted, an email can be provided. This can be helpful for templating use-cases | |
url | string (optional) Ex: www.example.com | if url is provided, the recommendations will be based on the content topics associated with the provided URL |
Public Content Recommendation
Response 200
Headers
Content-Type: application/json
Body
{
"data":[
{
"url":"www.getlytics.com/blog/post/intent_through_content",
"title":"Understanding User Intent Through Content",
"description":"Customer Intent comes from understanding the connection between engagement and its contexts. Content modeling and affinity graphs makes interpretation of intent a lot easier. Learn how marketers can benefit from this.",
"topics":[
"customer data platform",
"data science",
"content marketing",
"personalization"
],
"topic_relevances":{
"content marketing":1,
"customer data platform":1,
"data science":1,
"personalization":1
},
"primary_image":"https://www.getlytics.com/img/blog/posts/intent_through_content/intent_through_content-bg.gif",
"author":"",
"created":"2016-06-08T16:11:45.599594093Z",
"id":"-3435113786560588929",
"sitename":"Lytics",
"stream":"default",
"path":[
"blog",
"blog/post",
"blog/post/intent_through_content"
],
"aspects":[
"article"
],
"language":"unknown",
"updated":"2016-06-09T12:49:36.870359765Z",
"fetched":"2016-06-09T12:49:35.812654441Z",
"meta":[
"og:locale/en_us",
"og:site_name/lytics",
"og:title/understanding user intent through content",
"og:type/article",
"og:url/https://www.getlytics.com/blog/post/intent_through_content"
],
"confidence":0.5916079783099615,
"visited":true
}
],
"message":"success",
"status":200
}
Generic Content Recommendation
While the User Recommendation API endpoint surfaces content-recommendations based on a user's topic-affinity, the Generic Content Recommendation API is meant to be used to retrieve recommendations based on a URL or a list of topics.
# get generic content-recommendations
curl -s -H "Authorization: $LIOKEY" \
-XGET "https://api.lytics.io/api/content/recommend" | jq '.'
# get generic content-recommendations for a content-collection
curl -s -H "Authorization: $LIOKEY" \
-XGET "https://api.lytics.io/api/content/recommend?contentsegment=blog_posts" | jq '.'
# get content-recommendations for a certain URL
curl -s -H "Authorization: $LIOKEY" \
-XGET "https://api.lytics.io/api/content/recommend?url=www.lytics.com" | jq '.'
# get content-recommendations for a list of topics
curl -s -H "Authorization: $LIOKEY" \
-XGET "https://api.lytics.io/api/content/recommend?topics=Marketing,Data,Portland" | jq '.'
Parameters | ||
---|---|---|
account | string (required) Ex: 123 | the account ID |
contentsegment | string (optional) Ex: blog_content | id, or slug of a content-collection to filter content |
limit | int (optional) Ex: 20 | limit on number of documents to suggest/return |
shuffle | bool (optional) Ex: false | whether or not to shuffle the recommendation order |
topics | []string (optional) Ex: ["Marketing", "Analytics"] | if supplied, only allow recommendations on content with the specified topics |
topicfilter | []string (optional) Ex: ["Poltics", "Oregon"] | if supplied, only documents that contain all of the topics defined in the `topicfilter` will be returned |
rank | string (optional) Ex: affinity | Ranking method for order of recommendations. Must be either "affinity" or "recent" |
url | string (optional) Ex: www.example.com | if url is provided, the recommendations will be based on the content topics associated with the provided URL |
Generic Content Recommendation
Response 200
Headers
Content-Type: application/json
Body
{
"data":[
{
"url":"www.getlytics.com/blog/post/intent_through_content",
"title":"Understanding User Intent Through Content",
"description":"Customer Intent comes from understanding the connection between engagement and its contexts. Content modeling and affinity graphs makes interpretation of intent a lot easier. Learn how marketers can benefit from this.",
"topics":[
"customer data platform",
"data science",
"content marketing",
"personalization"
],
"topic_relevances":{
"content marketing":1,
"customer data platform":1,
"data science":1,
"personalization":1
},
"primary_image":"https://www.getlytics.com/img/blog/posts/intent_through_content/intent_through_content-bg.gif",
"author":"",
"created":"2016-06-08T16:11:45.599594093Z",
"id":"-3435113786560588929",
"sitename":"Lytics",
"stream":"default",
"path":[
"blog",
"blog/post",
"blog/post/intent_through_content"
],
"aspects":[
"article"
],
"language":"unknown",
"updated":"2016-06-09T12:49:36.870359765Z",
"fetched":"2016-06-09T12:49:35.812654441Z",
"meta":[
"og:locale/en_us",
"og:site_name/lytics",
"og:title/understanding user intent through content",
"og:type/article",
"og:url/https://www.getlytics.com/blog/post/intent_through_content"
],
"confidence":0.5916079783099615,
"visited":true
}
],
"message":"success",
"status":200
}
Content Taxonomy
Get the relationships among topics. This gives the number of documents (content items) having each topic.
There are two methods for generating topic relationships from the content taxonomy — through Monte Carlo simulation and through direct calculation from its Bayesian network. The generation method defaults to simulation.
The Content Taxonomy is updated weekly.
Parameters | ||
---|---|---|
limit | integer (optional) Ex: 150 | number of topics to include in the topic graph, capped at 500 topics |
raw | bool (optional) Ex: false | whether to generate the topic relationships from its Bayesian network |
rawThreshold | float (optional) Ex: 0.7 | when extracting relationships directly from the Bayesian network, the threshold at which to determine ties |
cliques | boolean (optional) Ex: false | whether to return a single graph or an array of disjoint subgraphs |
cliqueThreshold | float (optional) Ex: 0.0 | when returning cliques, the threshold at which to determine if two cliques should be connected |
Content Taxonomy
Response 200
Headers
Content-Type: application/json
Body
{
"data": {
"n": 438,
"nodes": [
{
"name": "marketing technology",
"doc_count": 2
},
{
"name": "AdWords",
"doc_count": 1
},
{
"name": "ad retargeting",
"doc_count": 4
},
{
"name": "analytics",
"doc_count": 2
},
{
"name": "customer service",
"doc_count": 1
},
{
"name": "data visualization",
"doc_count": 2
},
{
"name": "data-first marketing",
"doc_count": 157
},
{
"name": "personalization",
"doc_count": 15
}
],
"links": [
{
"source": 66,
"target": 54,
"value": 0.375
},
{
"source": 66,
"target": 75,
"value": 0.25
},
{
"source": 66,
"target": 37,
"value": 0.25
}
]
},
"message": "success",
"status": 200
}
Content Corpus
Update the corpus, or collection of content documents, that powers the Content Affinity Engine.
In most cases, content is either scraped when the Content Affinity Engine is turned on, or observed as users engage with content from their activity streams. The corpus API provides methods for modifying the corpus — adding custom topics to documents, adding documents for URLs that are private, unlisted, or otherwise irretrievable, etc.
Parameters | ||
---|---|---|
url | string (optional) Ex: http://www.somedomain.com/blog/great-post | the URL for identifying and retrieving content |
text | string (optional) Ex: here is some body text | the body of the content to be added |
topics | []string (optional) Ex: Data,Hockey | custom topics to append to the document, in addition to topics that will be added with enrichment |
Content Corpus
Add a document to the content table corpus. Either a URL or text must be provided. This allows entry of documents/content that get added to content table, content-graph and available for usage in recommendation, as well as content-explorer.
id if you upload the document more than once, ensure it has common id so only one document is created
Custom Attributes Any attributes you upload that are not reserved, will be added to content document.
# Upsert a document into content table and classify it
curl -s -XPOST "https://api.lytics.io/api/content/corpus" \
-H "Authorization: $LIOKEY" \
-H "Content-Type: application/json" \
-d '{
"id":"doc_id_123",
"text":"big-long-body-of text for classification",
"custom_attribute_name":"custom attribute"
}' | jq '.'
# upsert a url into db
# url is used as document id
curl -s -XPOST "https://api.lytics.io/api/content/corpus" \
-H "Authorization: $LIOKEY" \
-H "Content-Type: application/json" \
-d '{
"url":"http://www.validdomain/validurl.html",
"custom_attribute_name":"custom attribute"
}' | jq '.'
Response 200
Headers
Content-Type: application/json
Body
{
"status": 200,
"message": "success",
"data": {
"body": "here is some body text for the Corpus API",
"source": "upload",
"updated": "2016-09-13 21:59:38.551972802 -0400 EDT",
"created": "2016-09-13 21:59:38.551972802 -0400 EDT",
"url": "https://www.getlytics.com/blog/post/improving_google_analytics?utm_source=linkedin",
"global": {
"Topic A": 1.0,
"Topic B": 1.0
}
}
}
Topic Curation
Add a new topic mid to a content document
Parameters | ||
---|---|---|
docField | string (required) Ex: hashedurl | name of field to look up content by |
docId | string (required) Ex: 123abc | value of field to look up content by |
topicLabel | string (required) Ex: cats | name of topic to add |
relevance | float (optional) Ex: 0.5 Default: 0.5 | the relevance threshold to set for the new topic |
Topic Add
Add a topic to a Document. Note that while this API will add the topic to a Document, it may take several days or the topic to appear in a users's topic-affinity.
# Add a topic to a document
curl -s -XPOST "https://api.lytics.io/api/content/doc/hashedurl/4525087172572165639/topic/Chocolate?relevance=1.0" \
-H "Authorization: $LIOKEY" \
| jq '.'
Response 200
Headers
Content-Type: application/json
Body
{
"status": 200,
"message": "success",
"data": {
"author": "Cookie Monster",
"created": "2016-01-14T08:39:01.354824186-07:00",
"description": "you should definitely make these cookies",
"fetched": "2016-07-19T13:39:20.158747984-04:00",
"id": "4525087172572165639",
"meta": [
"og:locale/en_US"
],
"primary_image": "http://cookdiary.net/wp-content/uploads/images/Oatmeal-Chocolate-Chip-Cookies_1441.jpg",
"stream": "default",
"title": "how to make some cookies",
"topic_relevances": {
"Recipe": 0.64,
"baking": 0.75
},
"topic_rollups": {
"Things": 0.75
},
"topics": [
"baking",
"Recipe"
],
"updated": "2016-07-19T13:34:18-04:00",
"url": "www.recipes.com/chocolate-chip-cookies"
}
}
Topic Remove
Remove a topic from a Document. Note that while this API will remove the topic from a Document, it may take several days for the topic to be removed from a user's topic-affininty.
# Remove a topic from a document
curl -s -XDELETE "https://api.lytics.io/api/content/doc/hashedurl/4525087172572165639/topic/Recipe" \
-H "Authorization: $LIOKEY" \
| jq '.'