Quote of the Day API
A free daily Office quote paired with a YouTube clip. Updated every day at 6am UTC.
Embed snippet
Drop-in widget with video player and styled quote card. Two lines — no configuration needed.
<!-- All quotes --> <div data-office-qotd></div> <noscript>Powered by <a href="https://theofficelines.com">The Office Lines</a></noscript> <!-- Safe-for-work quotes only --> <div data-office-qotd="sfw"></div> <noscript>Powered by <a href="https://theofficelines.com">The Office Lines</a></noscript> <script src="https://theofficelines.com/embed-qotd.js" async></script>
Attribution
If you use this API, please include a visible link back to
theofficelines.com
using the attribution field in the response.
Endpoints
GET https://theofficelines.com/data/qotd.json GET https://theofficelines.com/data/qotd-sfw.json
Static JSON files served from a CDN. No authentication, no rate limit. Cache-friendly — the response changes once per day.
The qotd-sfw.json endpoint returns only safe-for-work quotes — no profanity, sexual content, or risqué material.
Response
{
"date": "2026-02-21",
"quote": {
"id": "02_11_142",
"line": "Sometimes you have to take a break from being the kind of boss that's always trying to teach people things.",
"character": "Michael",
"season": "02",
"episode": "11",
"title": "Booze Cruise"
},
"video": {
"id": "dQw4w9WgXcQ",
"title": "Michael's Booze Cruise Speech",
"youtube": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"embed": "https://www.youtube.com/embed/dQw4w9WgXcQ",
"thumbnail": "https://img.youtube.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
"channel": "The Office"
},
"attribution": {
"text": "Powered by The Office Lines",
"url": "https://theofficelines.com",
"quoteUrl": "https://theofficelines.com/?q=02_11_142"
}
}
The video field is optional — it's included when a matching YouTube clip exists for the quote's scene.
Scene of the Day
GET https://theofficelines.com/data/sotd.json
A whole scene instead of a single line — always paired with a YouTube clip. Same rules as Quote of the Day: static CDN JSON, no auth, no rate limit, changes once per day.
{
"date": "2026-07-07",
"scene": {
"slug": "s09e06-jims-radio-prank-on-dwight",
"title": "Jim's Radio Prank on Dwight",
"season": "09",
"episode": "06",
"episodeTitle": "The Boat",
"lineCount": 54,
"lines": [
{
"character": "Jim",
"line": "Good afternoon!"
}
]
},
"video": {
"id": "lWY1p7kKgfI",
"youtube": "https://www.youtube.com/watch?v=lWY1p7kKgfI",
"embed": "https://www.youtube.com/embed/lWY1p7kKgfI",
"thumbnail": "https://img.youtube.com/vi/lWY1p7kKgfI/hqdefault.jpg"
},
"attribution": {
"text": "Powered by The Office Lines",
"url": "https://theofficelines.com",
"sceneUrl": "https://theofficelines.com/quotes/scenes/s09e06-jims-radio-prank-on-dwight/"
}
} lines is a short preview; lineCount is the full scene length. Link back with sceneUrl.
WordPress plugin
Sidebar widget, Gutenberg block, and [office_qotd] shortcode with click-to-play video, light/dark themes, and SFW mode.
Caches locally — one API call per day.
JavaScript example
<noscript>Powered by <a href="https://theofficelines.com">The Office Lines</a></noscript>
<script>
fetch('https://theofficelines.com/data/qotd.json')
.then(res => res.json())
.then(data => {
document.getElementById('quote').textContent = data.quote.line
document.getElementById('character').textContent = data.quote.character
// Video link (optional — only present for some quotes)
if (data.video) {
document.getElementById('video').href = data.video.youtube
}
// Attribution link (required)
const link = document.getElementById('attribution')
link.href = data.attribution.quoteUrl
link.textContent = data.attribution.text
})
</script>