Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Property Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
      • Get a Tailored Demo
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +32 2 290 34 90
    • Get a Tailored Demo
  • Pricing
  • Help
  1. APPS
  2. eLearning
  3. Website Slides Headless API v 19.0
  4. Sales Conditions FAQ

Website Slides Headless API

by Deep Skill https://www.deepskill.space
Odoo
v 19.0 Third Party 7
Download for v 19.0 Deploy on Odoo.sh
Apps purchases are linked to your Odoo account, please sign in or sign up first.
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • eLearning (website_slides)
• Website (website)
• Discuss (mail)
Lines of code 213
Technical Name website_slides_headless
LicenseLGPL-3
Websitehttps://www.deepskill.space
You bought this module and need support? Click here!
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • eLearning (website_slides)
• Website (website)
• Discuss (mail)
Lines of code 213
Technical Name website_slides_headless
LicenseLGPL-3
Websitehttps://www.deepskill.space

Website Slides Headless API

Power your Next.js, Nuxt, or mobile frontend with Odoo eLearning data via REST

Odoo's eLearning module ships HTML routes built for Odoo's own templates. Headless frontends need JSON. This module adds a clean, versioned REST API on top of website_slides — public catalog endpoints for anonymous visitors, authenticated endpoints for enrolled learners.

Why not call call_kw directly?

Odoo's generic ORM RPC respects record rules. A Portal user calling slide.slide.search_read for a channel they are not enrolled in only sees preview slides — the rest of the index is hidden by rule_slide_slide_public_user. This module replicates what Odoo's own UI does internally: fetches with sudo() after validating that the channel is website-published, then returns the full public index.

Key Features

Public catalog

Anonymous visitors see the full course index — no login required, no service user credentials to leak.

Authenticated content

Enrolled users fetch slide content and quiz payloads over HTTPS with their own Odoo session cookie.

Versioned routes

All endpoints live under /slides/api/v1/ so you can evolve the contract without breaking clients.

API Contract

Four endpoints, all returning JSON. Errors return {"error": {"code": "<slug>", "message": "<text>"}} with an appropriate HTTP status (401, 403, 404).

1. Channel index (public)

GET /slides/api/v1/channels/<id>/slides

Honors visibility: public and link are visible to all, connected hides from anonymous, members hides from non-enrolled. Returns the slide index in display order.

Example response:

{
  "channel_id": 41,
  "slides": [
    {
      "id": 947,
      "name": "Fundamentos",
      "slide_type": "pdf",
      "slide_category": "document",
      "is_category": true,
      "is_preview": true,
      "completion_time": 0.3,
      "sequence": 0
    },
    {
      "id": 948,
      "name": "Introducción al Backtracking y el Ejemplo del Laberinto",
      "slide_type": "vimeo_video",
      "slide_category": "video",
      "is_category": false,
      "is_preview": false,
      "completion_time": 0.1167,
      "sequence": 1
    },
    {
      "id": 1140,
      "name": "Evaluación Fundamentos del Backtracking",
      "slide_type": "quiz",
      "slide_category": "quiz",
      "is_category": false,
      "is_preview": false,
      "completion_time": 0.0,
      "sequence": 3
    }
  ]
}

2. Slide content (member-only)

GET /slides/api/v1/slides/<id>/content

Returns full payload including html_content, embed_code, url, resources and a download_url when the slide has a binary attached. Requires the caller to be enrolled in the channel.

Example response:

{
  "id": 948,
  "name": "Introducción al Backtracking y el Ejemplo del Laberinto",
  "slide_type": "vimeo_video",
  "slide_category": "video",
  "is_preview": false,
  "url": "https://vimeo.com/123456789",
  "embed_code": "<iframe src=\"https://player.vimeo.com/video/123456789\" ...></iframe>",
  "html_content": false,
  "download_url": false,
  "completion_time": 0.1167,
  "channel_id": 41,
  "has_questions": false,
  "resources": [
    {
      "id": 22,
      "name": "Slides PDF",
      "resource_type": "file",
      "file_name": "backtracking-intro.pdf",
      "link": false,
      "sequence": 1
    }
  ]
}

3. Quiz payload (member-only)

GET /slides/api/v1/slides/<id>/quiz

Returns questions with all answers (including is_correct). Designed for client-side scoring; pair with Odoo's own quiz submission endpoint to record progress.

Example response:

{
  "slide_id": 1140,
  "questions": [
    {
      "id": 412,
      "question": "¿Cuál es la complejidad temporal del peor caso del backtracking puro?",
      "sequence": 1,
      "answers": [
        {"id": 1601, "text": "O(n)",      "is_correct": false},
        {"id": 1602, "text": "O(n log n)", "is_correct": false},
        {"id": 1603, "text": "O(2^n)",     "is_correct": true},
        {"id": 1604, "text": "O(n!)",      "is_correct": false}
      ]
    }
  ]
}

4. Slide download (member-only)

GET /slides/api/v1/slides/<id>/download

Streams the slide's binary inline so a native iframe (or Next.js <object>) can render it without going through Odoo's embed viewer. Member-only.

Example response (headers):

HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Length: 184523
Content-Disposition: inline; filename="Fundamentos.pdf"
Cache-Control: private, max-age=300

<binary stream>

Authentication

The catalog endpoint is public — no header, no cookie, no token. The other three endpoints rely on Odoo's standard session cookie: log in via /web/session/authenticate (JSON-RPC) and forward the session_id cookie on subsequent requests. There is no API key system — intentionally; the module reuses Odoo's own auth so users, ACLs, channel membership and audit trail all stay consistent with the back-office.

Technical Details

  • Transport: type='http' + make_json_response() — real REST with HTTP verbs, no JSON-RPC envelope.
  • Permissions: public endpoints use sudo() internally after validating website_published. Authenticated endpoints honor channel membership.
  • Dependencies: website_slides (Community).
  • License: LGPL-3.

Made with care by Deep Skill.

Please log in to comment on this module

  • The author can leave a single reply to each comment.
  • This section is meant to ask simple questions or leave a rating. Every report of a problem experienced while using the module should be addressed to the author directly (refer to the following point).
  • If you want to start a discussion with the author, please use the developer contact information. They can usually be found in the description.
Please choose a rating from 1 to 5 for this module.
Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with