> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rewind.rest/llms.txt
> Use this file to discover all available pages before exploring further.

# Recent watches

> Returns most recently watched movies. Supports date filtering via date, from, and to params.



## OpenAPI

````yaml get /v1/watching/recent
openapi: 3.1.0
info:
  title: Rewind API
  version: 1.0.0
  description: >-
    Personal data aggregation API. Syncs and serves data from Last.fm, Apple
    Music, Strava, Plex, Letterboxd, Discogs, Trakt, Instapaper, Google
    Calendar, and Gmail.


    ## Domains


    | Domain | Source | Description |

    |--------|--------|-------------|

    | **Listening** | Last.fm, Apple Music | Scrobbles, top
    artists/albums/tracks, streaks, stats |

    | **Running** | Strava | Activities, splits, gear, personal records, year
    summaries |

    | **Watching** | Plex, Letterboxd | Movies, TV shows, watch history,
    ratings, reviews |

    | **Collecting** | Discogs, Trakt | Vinyl/CD collection, physical media,
    wantlist |

    | **Reading** | Instapaper | Articles, highlights, reading progress, word
    count |

    | **Attending** | Google Calendar, Gmail | Live events, tickets, sports
    games, concerts, venues |


    ## Authentication


    All endpoints require a Bearer token. There are two key types:


    - **Read keys** (`rw_live_...`) — access all GET endpoints

    - **Admin keys** (`rw_admin_...`) — access all endpoints including sync
    triggers and data management


    Pass your key in the Authorization header: `Authorization: Bearer
    rw_live_...`


    ## Pagination


    List endpoints return paginated responses:


    ```json

    {
      "data": [...],
      "pagination": { "page": 1, "limit": 20, "total": 150, "total_pages": 8 }
    }

    ```


    The activity feed uses cursor-based pagination instead.


    ## Quick Start


    ```bash

    # Check the API is up

    curl https://api.rewind.rest/v1/health


    # Fetch recent scrobbles (requires read key)

    curl -H "Authorization: Bearer rw_live_..." \
      https://api.rewind.rest/v1/listening/recent

    # Fetch running stats

    curl -H "Authorization: Bearer rw_live_..." \
      https://api.rewind.rest/v1/running/stats
    ```


    ## Errors


    All errors follow the same envelope:


    ```json

    { "error": "Not found", "status": 404 }

    ```


    Common status codes: 400 (bad request), 401 (unauthorized), 404 (not found),
    500 (server error).
  contact:
    url: https://github.com/pdugan20/rewind
servers:
  - url: https://api.rewind.rest
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Listening
    description: Last.fm scrobbles, top charts, streaks, and stats.
  - name: Running
    description: Strava activities, splits, gear, records, and year summaries.
  - name: Watching
    description: >-
      Movies, TV shows, watch history, ratings, and reviews from Plex and
      Letterboxd.
  - name: Collecting
    description: Vinyl/CD collection from Discogs and physical media from Trakt.
  - name: Reading
    description: Articles, highlights, and reading stats from Instapaper.
  - name: Attending
    description: >-
      Live events you bought tickets for — sports games, concerts, theater.
      Sourced from Google Calendar and ticket-vendor email.
  - name: Feed
    description: Cross-domain activity feed with cursor-based pagination.
  - name: Search
    description: Full-text search across all domains.
  - name: Images
    description: Image proxy with on-the-fly transforms via Cloudflare Images.
  - name: System
    description: Health checks and sync status.
  - name: Admin
    description: >-
      API key management, sync triggers, and data administration. Requires admin
      key.
  - name: Webhooks
    description: Inbound webhook receivers for Strava and Plex. No auth required.
paths:
  /v1/watching/recent:
    get:
      tags:
        - Watching
      summary: Recent watches
      description: >-
        Returns most recently watched movies. Supports date filtering via date,
        from, and to params.
      operationId: getWatchingRecent
      parameters:
        - schema:
            type: integer
            minimum: 1
            maximum: 50
            default: 10
          required: false
          name: limit
          in: query
        - schema:
            type: integer
            minimum: 1
            default: 1
          required: false
          name: page
          in: query
        - schema:
            type: string
            pattern: ^\d{4}-\d{2}-\d{2}$
            description: Single day (YYYY-MM-DD). Overrides from/to.
            example: '2025-02-17'
          required: false
          description: Single day (YYYY-MM-DD). Overrides from/to.
          name: date
          in: query
        - schema:
            type: string
            description: Range start, inclusive (ISO 8601)
            example: '2025-02-01T00:00:00Z'
          required: false
          description: Range start, inclusive (ISO 8601)
          name: from
          in: query
        - schema:
            type: string
            description: Range end, inclusive (ISO 8601)
            example: '2025-02-28T23:59:59Z'
          required: false
          description: Range end, inclusive (ISO 8601)
          name: to
          in: query
      responses:
        '200':
          description: Recent watches
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        movie:
                          type: object
                          properties:
                            id:
                              type: number
                            title:
                              type: string
                            year:
                              type:
                                - number
                                - 'null'
                            director:
                              type:
                                - string
                                - 'null'
                            directors:
                              type: array
                              items:
                                type: string
                            genres:
                              type: array
                              items:
                                type: string
                            duration_min:
                              type:
                                - number
                                - 'null'
                            rating:
                              type:
                                - string
                                - 'null'
                            image:
                              $ref: '#/components/schemas/ImageAttachment'
                            imdb_id:
                              type:
                                - string
                                - 'null'
                            tmdb_id:
                              type:
                                - number
                                - 'null'
                            tmdb_rating:
                              type:
                                - number
                                - 'null'
                            tagline:
                              type:
                                - string
                                - 'null'
                            summary:
                              type:
                                - string
                                - 'null'
                          required:
                            - id
                            - title
                            - year
                            - director
                            - directors
                            - genres
                            - duration_min
                            - rating
                            - image
                            - imdb_id
                            - tmdb_id
                            - tmdb_rating
                            - tagline
                            - summary
                        watched_at:
                          type: string
                        source:
                          type:
                            - string
                            - 'null'
                        user_rating:
                          type:
                            - number
                            - 'null'
                        percent_complete:
                          type:
                            - number
                            - 'null'
                        rewatch:
                          type: boolean
                        review:
                          type:
                            - string
                            - 'null'
                        review_url:
                          type:
                            - string
                            - 'null'
                      required:
                        - movie
                        - watched_at
                        - source
                        - user_rating
                        - percent_complete
                        - rewatch
                        - review
                        - review_url
                required:
                  - data
              example:
                data:
                  - movie:
                      id: 15
                      title: Ferris Bueller's Day Off
                      year: 1986
                      director: John Hughes
                      directors:
                        - John Hughes
                      genres:
                        - Comedy
                      duration_min: 103
                      rating: PG-13
                      image:
                        url: >-
                          https://cdn.rewind.rest/watching/movies/15/original.jpg?width=300&height=300&fit=cover&format=auto&quality=85&v=1
                        thumbhash: YRcKDQKadZh4d3Z4d3aHeAeAh4B3
                        dominant_color: '#2a2a2a'
                        accent_color: '#c8a882'
                      imdb_id: tt0091042
                      tmdb_id: 9377
                      tmdb_rating: 7.6
                      tagline: One man's struggle to take it easy.
                      summary: >-
                        A high school wise guy is determined to have a day off
                        from school, despite what the Principal thinks of that.
                    watched_at: '2026-03-10T02:30:00.000Z'
                    source: plex
                    user_rating: null
                    percent_complete: 100
                    rewatch: false
                    review: null
                    review_url: null
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    ImageAttachment:
      type:
        - object
        - 'null'
      properties:
        url:
          type: string
          format: uri
          example: https://cdn.rewind.rest/...
        thumbhash:
          type:
            - string
            - 'null'
          example: YJqGPQw7d4...
        dominant_color:
          type:
            - string
            - 'null'
          example: '#1a1a2e'
        accent_color:
          type:
            - string
            - 'null'
          example: '#e94560'
      required:
        - url
        - thumbhash
        - dominant_color
        - accent_color
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          example: Not found
        status:
          type: integer
          example: 404
      required:
        - error
        - status
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        API key. Read keys (rw_live_...) access GET endpoints. Admin keys
        (rw_admin_...) access all endpoints.

````