Fetching personalized HTML

Your server or app can easily retrieve content from Fresh Relevance for use on your site by making an HTTP GET request for each required piece of content. This can then be incorporated into the mobile app or web page. The content can be retrieved either in JSON format or in HTML format.

The HTML format can be merged into your page's markup where needed.

In JSON format, information such as the list of items in a recommendation block is returned. You could use these to drive other types of content on the webpage.

📘

Learn more about key concepts

Ensure you have read and understood the Fresh Relevance Key Concepts as this is essential to understanding how the product and APIs work.


📘

Struggling to get the correct URL to get a slot

To find the specific URL for a Slot stored in your account:

  1. Go to Content > Slots.
  2. Select the Web Personalization tab.
  3. Select the Slot you want, then select the Use icon.
  4. The URL to request that slot is shown under Feed URL.

Fetching content

Single slot

You can easily fetch the content of a single slot using the Content API and the Get slot call

You need to replace:

Your content serving domain with the correct domain.

To find this, expand the User menu, then go to Settings > System configuration > Custom domains and copy the domain from the Content Serving URL, for example, c8.dycdn.net

Your account id with your account ID.

To get your account ID from Fresh Relevance, expand the Settings menu and copy the Account ID e.g.


Slot id with the slot's ID, you want the content for.

API token with a Dynamic Content API token with read permission for content; you can find out how to create and edit API access tokens here.

Required format with one of the following options:

FormatDescription
htmlReturns the SmartBlock selected by the Slot formatted as HTML.
blockimageReturns the SmartBlock selected by the Slot formatted as an image.
dynamichtmlReturns open-time HTML.

Note: Not needed for server-side personalization.
fullReturns everything as a JSON container, with HTML inside, plus metadata.
compactReturns everything as a JSON container, matching items inside items, plus metadata.
Useful for Recommendations to return product IDs without the accompanying HTML.
appjsonReturns everything as a JSON container, with HTML inside, matching items inside items, plus metadata.

Example format responses:

<table cellspacing="0" cellpadding="0" border="0" style="width: 600px;" align="center">
    <tr>
        <td class="imagecontainer" data-imageindex="0" style="border-radius: 0px; 
            padding: 0px;
            text-align: center;
            background-color: #ffffff;
            ">
            <a href target="_blank" style="text-decoration: none;">
                <img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExcTVtbWpmZWZ2eHhjbndva2NsYXAyaHJ3c3Nnb3c3bWloYm96NnB6biZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/xTiN0CNHgoRf1Ha7CM/giphy.gif" alt="GIF">
            </a>
        </td>
    </tr>
</table>
<table cellspacing="0" cellpadding="0" border="0" style="width: 600px;" align="center">
    <tr>
        <td class="imagecontainer" data-imageindex="0" style="border-radius: 0px; 
            padding: 0px;
            text-align: center;
            background-color: #ffffff;
            ">
            <a href="" target="_blank" style="text-decoration: none;">
                <img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExcTVtbWpmZWZ2eHhjbndva2NsYXAyaHJ3c3Nnb3c3bWloYm96NnB6biZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/xTiN0CNHgoRf1Ha7CM/giphy.gif" alt="GIF" />
            </a>
        </td>
    </tr>
</table>
<table cellspacing="0" cellpadding="0" border="0" style="width: 600px;" align="center">
    <tr>
        <td class="imagecontainer" data-imageindex="0" style="border-radius: 0px; 
            padding: 0px;
            text-align: center;
            background-color: #ffffff;
            "><a class="fr__link-wrapper"
                href="https://c8.dycdn.net/rg55bjkl/s/push2dd/?k=3ldtt4d&amp;format=dynamiclink"><img src="https://c8.dycdn.net/rg55bjkl/s/push2dd/?k=3ldtt4d&amp;format=dynamicimage"></a>
        </td>
    </tr>
</table>
{
    "html": "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"width: 600px;\" align=\"center\">\n\n    <tr>\n\n        <td class=\"imagecontainer\" data-imageindex=\"0\" style=\"border-radius: 0px; \n            padding: 0px;\n            text-align: center;\n            background-color: #ffffff;\n            \">\n\n            <a href target=\"_blank\" style=\"text-decoration: none;\">\n\n                <img src=\"https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExcTVtbWpmZWZ2eHhjbndva2NsYXAyaHJ3c3Nnb3c3bWloYm96NnB6biZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/xTiN0CNHgoRf1Ha7CM/giphy.gif\" alt=\"GIF\">\n\n            </a>\n\n        </td>\n\n    </tr>\n\n</table>",
    "js": null,
    "css": null,
    "var": {
        "tmclt": true
    },
    "meta": {
        "tmsl": "push2dd",
        "tmsb": "aa7u9zu",
        "tmrl": "l0tt40i",
        "tmcs": "iz2z0mg",
        "tmcv": 0,
        "tmty": "e",
        "tmsn": "Test LS",
        "products": []
    }
}
{
    "html": null,
    "js": null,
    "css": null,
    "var": {},
    "meta": {
        "tmsl": "push2dd",
        "tmsb": "aa7u9zu",
        "tmrl": "l0tt40i",
        "tmty": "e",
        "tmsn": "Test LS"
    },
    "items": []
}
{
    "html": "\n\n<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"width: 600px;\" align=\"center\">\n\n    <tr>\n\n        <td class=\"imagecontainer\" data-imageindex=\"0\" style=\"border-radius: 0px; \n            padding: 0px;\n            text-align: center;\n            background-color: #ffffff;\n            \">\n\n            <a href=\"\" target=\"_blank\" style=\"text-decoration: none;\">\n\n                <img src=\"https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExcTVtbWpmZWZ2eHhjbndva2NsYXAyaHJ3c3Nnb3c3bWloYm96NnB6biZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/xTiN0CNHgoRf1Ha7CM/giphy.gif\" alt=\"GIF\" />\n\n            </a>\n\n        </td>\n\n    </tr>\n\n</table>\n",
    "js": null,
    "css": null,
    "var": {},
    "meta": {
        "tmsl": "push2dd",
        "tmsb": "aa7u9zu",
        "tmrl": "l0tt40i",
        "tmcs": "iz2z0mg",
        "tmcv": 0,
        "tmty": "e",
        "tmsn": "Test LS",
        "products": []
    },
    "items": []
}

Additional personalization parameters

This endpoint also supports personalization by including an identifier for the shopper in the query string parameters.

Any of the following optional query string parameters are supported:

ParameterDescription
eThe user's email address.
dAn identifier for a device the shopper used to visit your website.

The device ID is a cookie value that is generated by our script on your website.

This is stored in the tms_VisitorID cookie. This first-party cookie is available in the Cookie HTTP header when you request it from your server.
cidThe shopper's customer ID. This only works if this value is known to Fresh Relevance already.

Learn more in Import person data.

If you're using filters to return relevant content based on the specific site, then you may also need to pass through additional parameters, such as:

ParameterDescription
pridUnique product identifier e.g. 12345
sbrSite Brand/Territory for the product (e.g., the product was shown in USD on the US version of the store) e.g,. DEMO
currCurrency - ISO 4217 currency code e.g., USD

Examples

Fetch HTML content for server-side merging

https://c8.dycdn.net/abcdefg1/s/push2dd/?k=z321xx4d&format=html

Fetch JSON content for server-side processing

https://c8.dycdn.net/abcdefg1/s/push2dd/?k=z321xx4d&format=full

Fetch JSON content for server-side processing with additional personalization

https://c8.dycdn.net/abcdefg1/s/push2dd/?k=z321xx4d&format=full&[email protected]

Multi slots

For websites and apps doing large-scale personalization, we have the Retrieve multiple slots call in the Content API. It fetches several slots at once, which results in fewer round-trips from the server and is, therefore, faster.

We recommend this approach for performance.