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
| Event | Trigger | Timing | Action |
|---|---|---|---|
reportServed | Unit render | Immediately | Fire once per render |
doc.on-viewed | ≥50% in viewport for ≥1s | Continuous | Fire measurement pixel |
doc.pixels | Listing render | ≤5 image pixels | Fire client-side |
doc.clickTrackers | User click | Real-time | Fire 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
| Issue | Likely Cause | Fix |
|---|---|---|
| Empty JSON | Missing news or newsFrom | Add required params |
| Click not tracked | URL modified | Use doc.url directly |
| 403 Forbidden | Wrong API key | Verify with Teads account team |
| CORS blocked | Missing cors=true | Add to query params |
© 2025 Teads AI Platform. All rights reserved.