Skip to main content

Code Examples

This guide provides ready-to-use examples for integrating and testing the Teads AI Chatbot SDK across multiple languages and scenarios.
Use these snippets as templates to connect your chatbot or web app to Teads measurement, content, and marketer APIs.


1. Prerequisites

  • API keys and widget IDs provisioned by Teads or your Partner account team.
  • contentUrl (canonical page URL, URI-encoded).
  • HTTPS environment (SDK does not support HTTP).
  • If testing, always include testMode=true.

2. Quick Test with cURL

Fire a Measurement Event

curl -G "https://mv.outbrain.com/Multivac/api/platforms"   --data-urlencode "contentUrl=https%3A%2F%2Fexample.com"   --data-urlencode "key={YOUR_MEASUREMENT_API_KEY}"   --data-urlencode "widgetJSId={YOUR_MEASUREMENT_WIDGET_ID}"   --data-urlencode "idx=0"   --data-urlencode "format=vjnc"   --data-urlencode "cors=true"   --data-urlencode "extid=unit_load"   --data-urlencode "testMode=true"

Fetch Organic (Publisher) Content

curl -G "https://mv.outbrain.com/Multivac/api/platforms"   --data-urlencode "contentUrl=https%3A%2F%2Fexample.com"   --data-urlencode "key={YOUR_CONTENT_API_KEY}"   --data-urlencode "widgetJSId={YOUR_ORGANIC_WIDGET_ID}"   --data-urlencode "idx=0"   --data-urlencode "format=vjnc"   --data-urlencode "cors=true"   --data-urlencode "news=latest"   --data-urlencode "newsFrom=US"   --data-urlencode "testMode=true"

Fetch Paid (Marketer) Content

curl -G "https://mv.outbrain.com/Multivac/api/platforms"   --data-urlencode "contentUrl=https%3A%2F%2Fexample.com"   --data-urlencode "key={YOUR_CONTENT_API_KEY}"   --data-urlencode "widgetJSId={YOUR_PAID_WIDGET_ID}"   --data-urlencode "idx=0"   --data-urlencode "format=vjnc"   --data-urlencode "cors=true"   --data-urlencode "testMode=true"

3. JavaScript Examples

Initialize SDK

import { TeadsSDK } from "teads-ai-chatbot-sdk";

const teads = new TeadsSDK({
apiKey: "{YOUR_CONTENT_API_KEY}",
measurementKey: "{YOUR_MEASUREMENT_API_KEY}",
widgetIds: {
measurement: "{YOUR_MEASUREMENT_WIDGET_ID}",
organic: "{YOUR_ORGANIC_WIDGET_ID}",
paid: "{YOUR_PAID_WIDGET_ID}"
},
testMode: true
});

Fire Measurement Event

const params = new URLSearchParams({
contentUrl: encodeURIComponent(window.location.href),
key: "{YOUR_MEASUREMENT_API_KEY}",
widgetJSId: "{YOUR_MEASUREMENT_WIDGET_ID}",
idx: "0",
format: "vjnc",
cors: "true",
extid: "chatbot_load",
testMode: "true"
});

fetch(`https://mv.outbrain.com/Multivac/api/platforms?${params.toString()}`, {
method: "GET",
mode: "cors"
});

Fetch Organic Content

async function getOrganicContent() {
const params = new URLSearchParams({
contentUrl: encodeURIComponent(window.location.href),
key: "{YOUR_CONTENT_API_KEY}",
widgetJSId: "{YOUR_ORGANIC_WIDGET_ID}",
idx: "0",
format: "vjnc",
cors: "true",
news: "latest",
newsFrom: "US",
testMode: "true"
});

const res = await fetch(`https://mv.outbrain.com/Multivac/api/platforms?${params}`);
const data = await res.json();
console.log("Organic content:", data);
}

Fetch Paid Content

async function getPaidContent() {
const params = new URLSearchParams({
contentUrl: encodeURIComponent(window.location.href),
key: "{YOUR_CONTENT_API_KEY}",
widgetJSId: "{YOUR_PAID_WIDGET_ID}",
idx: "0",
format: "vjnc",
cors: "true",
testMode: "true"
});

const res = await fetch(`https://mv.outbrain.com/Multivac/api/platforms?${params}`);
const data = await res.json();
console.log("Paid recommendations:", data);
}

4. Python Examples

Fire Measurement Event

import requests, urllib.parse

base_url = "https://mv.outbrain.com/Multivac/api/platforms"
params = {
"contentUrl": urllib.parse.quote("https://example.com", safe=""),
"key": "{YOUR_MEASUREMENT_API_KEY}",
"widgetJSId": "{YOUR_MEASUREMENT_WIDGET_ID}",
"idx": 0,
"format": "vjnc",
"cors": "true",
"extid": "chatbot_load",
"testMode": "true"
}

response = requests.get(base_url, params=params)
print(response.status_code, response.text)

Fetch Paid Recommendations

import requests, urllib.parse

base_url = "https://mv.outbrain.com/Multivac/api/platforms"
params = {
"contentUrl": urllib.parse.quote("https://example.com", safe=""),
"key": "{YOUR_CONTENT_API_KEY}",
"widgetJSId": "{YOUR_PAID_WIDGET_ID}",
"idx": 0,
"format": "vjnc",
"cors": "true",
"testMode": "true"
}

res = requests.get(base_url, params=params)
print(res.json())

5. Event Lifecycle Summary

EventTriggerTimingAction
reportServedUnit renderImmediatelyFire once per render
doc.on-viewed≥50% in viewport for ≥1sContinuousFire measurement pixel
doc.pixelsListing render≤5 image pixelsFire client-side
doc.clickTrackersUser clickReal-timeFire click pixels

6. Combined Flow Example

(async () => {
await fetch(`https://mv.outbrain.com/Multivac/api/platforms?contentUrl=${encodeURIComponent(window.location.href)}&key={YOUR_MEASUREMENT_API_KEY}&widgetJSId={YOUR_MEASUREMENT_WIDGET_ID}&idx=0&format=vjnc&cors=true&extid=chatbot_load&testMode=true`);
const [organic, paid] = await Promise.all([getOrganicContent(), getPaidContent()]);
renderChatbotFeed([...organic.items, ...paid.items]);
reportServed("{YOUR_MEASUREMENT_WIDGET_ID}");
})();

7. Troubleshooting

IssueLikely CauseFix
Empty JSONMissing news or newsFromAdd required params
Click not trackedURL modifiedUse doc.url directly
403 ForbiddenWrong API keyVerify with Teads account team
CORS blockedMissing cors=trueAdd to query params

© 2025 Teads AI Platform. All rights reserved.