> ## 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.

# Recently played albums

> Returns unique recently played albums ordered by their newest scrobble. Artist spelling aliases share one entry when album names match and their MusicBrainz and catalog identities do not conflict. Distinct release qualifiers remain separate. Reads at most 200 recent scrobbles.

Spelling aliases for the same artist and album appear once, at the position of
their newest play. Existing artwork and catalog links from compatible aliases
are retained. Different release qualifiers and conflicting MusicBrainz or
catalog identities stay separate. This groups the response without merging or
deleting stored listening history.


## OpenAPI

````yaml get /v1/listening/recent/albums
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/listening/recent/albums:
    get:
      tags:
        - Listening
      summary: Recently played albums
      description: >-
        Returns unique recently played albums ordered by their newest scrobble.
        Artist spelling aliases share one entry when album names match and their
        MusicBrainz and catalog identities do not conflict. Distinct release
        qualifiers remain separate. Reads at most 200 recent scrobbles.
      operationId: getListeningRecentAlbums
      parameters:
        - schema:
            type: integer
            minimum: 1
            maximum: 20
            default: 10
          required: false
          name: limit
          in: query
      responses:
        '200':
          description: Recently played albums
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        album:
                          type: object
                          properties:
                            id:
                              type: integer
                            name:
                              type: string
                            url:
                              type:
                                - string
                                - 'null'
                              format: uri
                            apple_music_url:
                              type:
                                - string
                                - 'null'
                              format: uri
                            image:
                              type:
                                - object
                                - 'null'
                              properties:
                                cdn_url:
                                  type: string
                                  format: uri
                                thumbhash:
                                  type:
                                    - string
                                    - 'null'
                                dominant_color:
                                  type:
                                    - string
                                    - 'null'
                                accent_color:
                                  type:
                                    - string
                                    - 'null'
                              required:
                                - cdn_url
                                - thumbhash
                                - dominant_color
                                - accent_color
                          required:
                            - id
                            - name
                            - url
                            - apple_music_url
                            - image
                        artist:
                          type: object
                          properties:
                            id:
                              type: integer
                            name:
                              type: string
                          required:
                            - id
                            - name
                        last_scrobbled_at:
                          type: string
                      required:
                        - album
                        - artist
                        - last_scrobbled_at
                required:
                  - data
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    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.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.