EPFL Actu News API

EPFL's public news API, serving the Actu newsroom — news, projects, channels, faculties, categories, themes and publics. Django REST Framework, read-only (Allow: GET, HEAD, OPTIONS), unauthenticated by default, with optional Token and Basic schemes declared. Documented as an interactive CoreAPI schema, not as OpenAPI; ?format=openapi returns 404. The OpenAPIs below are derived by API Evangelist from that CoreAPI schema plus live probes on 2026-08-19.

Documentation

Specifications

Examples

Schemas & Data

Other Resources

OpenAPI Specification

epfl-actu.yaml Raw ↑
openapi: 3.0.3
info:
  title: EPFL Actu News API
  description: >-
    Public REST API serving EPFL news ("Actu") content, with resources for
    news, projects, channels, faculties, categories, themes and publics.
    Converted faithfully from the published Django REST Framework CoreAPI
    schema at https://actu.epfl.ch/api-docs/?format=corejson. Only paths,
    parameters and objects observed in the real schema and live responses are
    included. Default access is unauthenticated; optional Token, Basic and
    Session authentication exist.
  version: v1
  contact:
    name: EPFL Actu API
    url: https://actu.epfl.ch/api-docs/
servers:
- url: https://actu.epfl.ch/api/v1
paths:
  /categories/:
    get:
      operationId: listCategories
      summary: List all Category objects.
      parameters:
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: A paginated list of categories.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedCategoryList'
  /categories/{id}/:
    get:
      operationId: readCategory
      summary: Return the details about the given Category id.
      parameters:
      - $ref: '#/components/parameters/IntId'
      - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: A single category.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
  /channels/:
    get:
      operationId: listChannels
      summary: List all Channel objects.
      parameters:
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: A paginated list of channels.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedChannelList'
  /channels/{id}/:
    get:
      operationId: readChannel
      summary: Return the details about the given Channel id.
      parameters:
      - $ref: '#/components/parameters/StringId'
      - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: A single channel.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Channel'
  /channels/{id}/news/:
    get:
      operationId: listChannelNews
      summary: List news for a channel.
      parameters:
      - $ref: '#/components/parameters/StringId'
      responses:
        '200':
          description: News items for the channel.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedNewsList'
  /channels/{id}/projects/:
    get:
      operationId: listChannelProjects
      summary: List projects for a channel.
      parameters:
      - $ref: '#/components/parameters/StringId'
      responses:
        '200':
          description: Projects for the channel.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedProjectList'
  /faculties/:
    get:
      operationId: listFaculties
      summary: List all Faculty objects.
      parameters:
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: A paginated list of faculties.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedFacultyList'
  /faculties/{id}/:
    get:
      operationId: readFaculty
      summary: Return the details about the given Faculty id.
      parameters:
      - $ref: '#/components/parameters/IntId'
      - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: A single faculty.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Faculty'
  /news/:
    get:
      operationId: listNews
      summary: List all News objects.
      parameters:
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Search'
      - $ref: '#/components/parameters/Lang'
      responses:
        '200':
          description: A paginated list of news items.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedNewsList'
  /news/{news__pk}/:
    get:
      operationId: readNews
      summary: Return the details about the given News id.
      parameters:
      - name: news__pk
        in: path
        required: true
        description: A unique integer value identifying this news item.
        schema:
          type: integer
      - $ref: '#/components/parameters/Search'
      - $ref: '#/components/parameters/Lang'
      responses:
        '200':
          description: A single news item.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/News'
  /projects/:
    get:
      operationId: listProjects
      summary: List all Project objects.
      parameters:
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: A paginated list of projects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedProjectList'
  /projects/{id}/:
    get:
      operationId: readProject
      summary: Return the details about the given Project id.
      parameters:
      - $ref: '#/components/parameters/IntId'
      - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: A single project.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
  /publics/:
    get:
      operationId: listPublics
      summary: List all Public objects.
      parameters:
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: A paginated list of publics.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedPublicList'
  /publics/{id}/:
    get:
      operationId: readPublic
      summary: Return the details about the given Public id.
      parameters:
      - $ref: '#/components/parameters/IntId'
      - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: A single public.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Public'
  /themes/:
    get:
      operationId: listThemes
      summary: List all Theme objects.
      parameters:
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: A paginated list of themes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedThemeList'
  /themes/{id}/:
    get:
      operationId: readTheme
      summary: Return the details about the given Theme id.
      parameters:
      - $ref: '#/components/parameters/IntId'
      - $ref: '#/components/parameters/Search'
      responses:
        '200':
          description: A single theme.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Theme'
components:
  parameters:
    Limit:
      name: limit
      in: query
      description: Number of results to return per page.
      schema:
        type: integer
    Offset:
      name: offset
      in: query
      description: The initial index from which to return the results.
      schema:
        type: integer
    Search:
      name: search
      in: query
      description: A search term.
      schema:
        type: string
    Lang:
      name: lang
      in: query
      description: Preferred language for localized content.
      schema:
        type: string
        enum: [en, fr, de]
    IntId:
      name: id
      in: path
      required: true
      description: A unique integer value identifying this object.
      schema:
        type: integer
    StringId:
      name: id
      in: path
      required: true
      description: A unique value identifying this object.
      schema:
        type: string
  schemas:
    Category:
      type: object
      properties:
        id:
          type: integer
        fr_label:
          type: string
        en_label:
          type: string
        de_label:
          type: string
    Channel:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        fr_description:
          type: string
        en_description:
          type: string
        de_description:
          type: string
        is_active:
          type: boolean
    Faculty:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
    Theme:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
    Public:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
    Project:
      type: object
      properties:
        id:
          type: integer
        title:
          type: string
        news_url:
          type: string
          format: uri
    News:
      type: object
      properties:
        id:
          type: integer
        lang:
          type: string
        title:
          type: string
        subtitle:
          type: string
        text:
          type: string
        order:
          type: integer
        publish_date:
          type: string
          format: date-time
        visual_url:
          type: string
          format: uri
          nullable: true
        thumbnail_url:
          type: string
          format: uri
          nullable: true
        visual_description:
          type: string
        short_vimeo_video_id:
          type: string
        short_vimeo_video_credits:
          type: string
        carousel_images:
          type: array
          items:
            type: object
        video:
          type: string
        channel:
          $ref: '#/components/schemas/Channel'
        category:
          $ref: '#/components/schemas/Category'
        news_url:
          type: string
          format: uri
        themes:
          type: array
          items:
            $ref: '#/components/schemas/Theme'
        publics:
          type: array
          items:
            $ref: '#/components/schemas/Public'
        faculties:
          type: array
          items:
            $ref: '#/components/schemas/Faculty'
        projects:
          type: array
          items:
            $ref: '#/components/schemas/Project'
        authors:
          type: array
          items:
            type: object
        links:
          type: array
          items:
            type: object
        funding:
          type: string
        references:
          type: string
        is_under_cc_license:
          type: boolean
    PaginatedNewsList:
      type: object
      properties:
        count:
          type: integer
        next:
          type: string
          format: uri
          nullable: true
        previous:
          type: string
          format: uri
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/News'
    PaginatedCategoryList:
      type: object
      properties:
        count:
          type: integer
        next:
          type: string
          format: uri
          nullable: true
        previous:
          type: string
          format: uri
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/Category'
    PaginatedChannelList:
      type: object
      properties:
        count:
          type: integer
        next:
          type: string
          format: uri
          nullable: true
        previous:
          type: string
          format: uri
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/Channel'
    PaginatedFacultyList:
      type: object
      properties:
        count:
          type: integer
        next:
          type: string
          format: uri
          nullable: true
        previous:
          type: string
          format: uri
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/Faculty'
    PaginatedThemeList:
      type: object
      properties:
        count:
          type: integer
        next:
          type: string
          format: uri
          nullable: true
        previous:
          type: string
          format: uri
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/Theme'
    PaginatedPublicList:
      type: object
      properties:
        count:
          type: integer
        next:
          type: string
          format: uri
          nullable: true
        previous:
          type: string
          format: uri
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/Public'
    PaginatedProjectList:
      type: object
      properties:
        count:
          type: integer
        next:
          type: string
          format: uri
          nullable: true
        previous:
          type: string
          format: uri
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/Project'
  securitySchemes:
    tokenAuth:
      type: apiKey
      in: header
      name: Authorization
      description: 'DRF Token authentication, e.g. "Authorization: Token <key>".'
    basicAuth:
      type: http
      scheme: basic
security: []
x-operator: institution
x-provenance:
  generated: '2026-06-03'
  verified: '2026-08-19'
  method: derived
  source: Django REST Framework CoreAPI schema at https://actu.epfl.ch/api-docs/; every collection path re-probed against https://actu.epfl.ch/api/v1 on 2026-08-19 and all answer 200.
  operator_basis: host under EPFL's own registrable domain epfl.ch
  note: Pristine pre-refine source. This document has the CORRECT host. refine-openapis later merged tags across both EPFL specs and stamped every per-tag split with the first spec's server, which is how six memento-only resources came to claim actu.epfl.ch. Corrected in openapi/ on 2026-08-19.