Files
Lazuli/openapi.yaml
2024-04-09 11:37:17 -04:00

276 lines
6.1 KiB
YAML

openapi: 3.0.0
info:
title: Lazuli API
version: 1.0.0
servers:
- url: http://host[:port]/api
paths:
/connections:
get:
summary: Returns connections by ids
tags:
- Connections
parameters:
- in: query
name: ids
schema:
type: array
items:
type: string
description: List of connection ids, comma delimited
required: true
responses:
'200':
description: A JSON array of connections
content:
application/json:
schema:
type: object
required:
- connections
properties:
connections:
type: array
items:
$ref: '#/components/schemas/ConnectionInfo'
'400':
description: Bad Request
'401':
description: Unauthorized
/users/{userId}/connections:
get:
summary: Returns all connections for a specified user
tags:
- Connections
parameters:
- in: path
name: userId
schema:
type: string
description: The user's id
required: true
responses:
'200':
description: A JSON array of connections
content:
application/json:
schema:
type: object
required:
- connections
properties:
connections:
type: array
items:
$ref: '#/components/schemas/ConnectionInfo'
'401':
description: Unauthorized
/users/{userId}/recommendations:
get:
summary: Returns recommendations for the user from all connections
tags:
- Recommendations
parameters:
- in: path
name: userId
schema:
type: string
description: The user's id
required: true
responses:
'200':
description: A JSON array of media items
content:
application/json:
schema:
type: object
required:
- recommendations
properties:
recommendations:
type: array
items:
oneOf:
- $ref: '#/components/schemas/Song'
- $ref: '#/components/schemas/Album'
- $ref: '#/components/schemas/Artist'
- $ref: '#/components/schemas/Playlist'
discriminator:
propertyName: type
'401':
description: Unauthorized
components:
schemas:
ConnectionInfo:
type: object
required:
- id
- userId
- type
properties:
id:
type: string
userId:
type: string
type:
type: string
enum:
- 'jellyfin'
- 'youtube-music'
serverUrl:
type: string
serverName:
type: string
jellyfinUserId:
type: string
username:
type: string
youtubeUserId:
type: string
profilePicture:
type: string
Song:
type: object
required:
- connection
- id
- name
- type
properties:
connection:
type: string
id:
type: string
name:
type: string
type:
type: string
enum:
- 'song'
duration:
type: number
thumbnail:
type: string
artists:
type: array
items:
type: object
required:
- id
- name
properties:
id:
type: string
name:
type: string
album:
type: object
required:
- id
- name
properties:
id:
type: string
name:
type: string
createdBy:
type: object
required:
- id
- name
properties:
id:
type: string
name:
type: string
releaseDate:
type: string
Album:
type: object
required:
- connection
- id
- name
- type
properties:
connection:
type: string
id:
type: string
name:
type: string
type:
type: string
enum:
- 'album'
duration:
type: number
thumbnail:
type: string
artists:
type: object
required:
- id
- name
properties:
id:
type: string
name:
type: string
releaseDate:
type: string
Artist:
type: object
required:
- connection
- id
- name
- type
properties:
connection:
type: string
id:
type: string
name:
type: string
type:
type: string
enum:
- 'artist'
thumbnail:
type: string
Playlist:
type: object
required:
- connection
- id
- name
- type
properties:
connection:
type: string
id:
type: string
name:
type: string
type:
type: string
enum:
- 'playlist'
createdBy:
type: object
required:
- id
- name
properties:
id:
type: string
name:
type: string
thumbnail:
type: string