{"note":"OpenAPI conversion -- returning structured metadata","name":"spinitron-com","description":"Spinitron v2 API","version":"1.0.0","base_url":"https://spinitron.com/api","endpoints":9,"raw":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Spinitron v2 API\n@base https://spinitron.com/api\n@version 1.0.0\n@auth Bearer bearer | ApiKey access-token in query\n@endpoints 9\n@toc personas(2), shows(2), playlists(2), spins(3)\n\n@group personas\n@endpoint GET /personas\n@desc Get Personas\n@optional {name: str # Filter by Persona name, count: int=20 # Amount of items to return, page: int # Offset, used together with count, fields: [str] # Allows to select only needed fields, expand: [str] # Allows to select extra fields}\n@returns(200) The personas\n\n@endpoint GET /personas/{id}\n@desc Get Persona by id\n@required {id: int}\n@optional {fields: [str] # Allows to select only needed fields, expand: [str] # Allows to select extra fields}\n@returns(200) {id: int, name: str, bio: str, since: int(year), email: str(email), website: str(url), image: str(url), _links: map{self: map{href: str}, shows: [map]}} # The Persona\n@errors {404: Persona not found}\n\n@endgroup\n\n@group shows\n@endpoint GET /shows\n@desc Returns scheduled shows optionally filtered by {start} and/or {end} datetimes\n@optional {start: str(date-time) # The datetime starting from items must be returned. Maximum 1 hour in past., end: str(date-time) # The ending datetime. Maximum 1 hour in past., count: int=20 # Amount of items to return, page: int # Offset, used together with count, fields: [str] # Allows to select only needed fields, expand: [str] # Allows to select extra fields}\n@returns(200) The shows\n@errors {422: Invalid datetimes in filter: either too old or {end} is less than {start}.}\n\n@endpoint GET /shows/{id}\n@desc Get a Show by id\n@required {id: int}\n@optional {fields: [str] # Allows to select only needed fields, expand: [str] # Allows to select extra fields}\n@returns(200) {id: int, start: str(date-time), end: str(date-time), duration: int, timezone: str, one_off: bool, category: str, title: str, description: str, since: int(year), url: str(url), hide_dj: bool, image: str(url), _links: map{self: map{href: str}, personas: [map], playlists: map{href: str}}} # The Show\n@errors {404: Show not found or too old}\n\n@endgroup\n\n@group playlists\n@endpoint GET /playlists\n@desc Returns playlists optionally filtered by {start} and/or {end} datetimes\n@optional {start: str(date-time) # The datetime starting from items must be returned. Maximum 1 hour in future., end: str(date-time) # The ending datetime. Maximum 1 hour in future., show_id: int # Filter by show, persona_id: int # Filter by persona, count: int=20 # Amount of items to return, page: int # Offset, used together with count, fields: [str] # Allows to select only needed fields, expand: [str] # Allows to select extra fields}\n@returns(200) The playlists\n\n@endpoint GET /playlists/{id}\n@desc Get a Playlist by id\n@required {id: int}\n@optional {fields: [str] # Allows to select only needed fields, expand: [str] # Allows to select extra fields}\n@returns(200) {id: int, persona_id: int, show_id: int, start: str(date-time), end: str(date-time), duration: int, timezone: str, category: str, title: str, description: str, since: int(year), url: str(url), hide_dj: bool, image: str(url), automation: bool, episode_name: str, episode_description: str, _links: map{self: map{href: str}, persona: map{href: str}, show: map{href: str}, spins: map{href: str}}} # The playlist\n@errors {404: Playlist not found or is in the future}\n\n@endgroup\n\n@group spins\n@endpoint GET /spins\n@desc Returns spins optionally filtered by {start} and/or {end} datetimes\n@optional {start: str(date-time) # The datetime starting from items must be returned., end: str(date-time) # The ending datetime., playlist_id: int # Filter by playlist, show_id: int # Filter by show, count: int=20 # Amount of items to return, page: int # Offset, used together with count, fields: [str] # Allows to select only needed fields, expand: [str] # Allows to select extra fields}\n@returns(200) The spins\n\n@endpoint POST /spins\n@desc Log a Spin\n@returns(201) {id: int, playlist_id: int, start: str(date-time), end: str(date-time), duration: int, timezone: str, image: str(url), classical: bool, artist: str, artist-custom: str, composer: str, release: str, release-custom: str, va: bool, label: str, label-custom: str, released: int, medium: str, genre: str, song: str, note: str, request: bool, local: bool, new: bool, work: str, conductor: str, performers: str, ensemble: str, catalog-number: str, isrc: str, upc: str, iswc: str, _links: map{self: map{href: str}, playlist: map{href: str}}} # The new created Spin.\n@errors {422: Validation failed.}\n\n@endpoint GET /spins/{id}\n@desc Get a Spin by id\n@required {id: int}\n@optional {fields: [str] # Allows to select only needed fields, expand: [str] # Allows to select extra fields}\n@returns(200) {id: int, playlist_id: int, start: str(date-time), end: str(date-time), duration: int, timezone: str, image: str(url), classical: bool, artist: str, artist-custom: str, composer: str, release: str, release-custom: str, va: bool, label: str, label-custom: str, released: int, medium: str, genre: str, song: str, note: str, request: bool, local: bool, new: bool, work: str, conductor: str, performers: str, ensemble: str, catalog-number: str, isrc: str, upc: str, iswc: str, _links: map{self: map{href: str}, playlist: map{href: str}}} # The spin\n@errors {404: Spin not found}\n\n@endgroup\n\n@end\n"}