{"files":{"SKILL.md":"---\nname: tvmaze-user-api\ndescription: \"TVmaze user API skill. Use when working with TVmaze user for user, scrobble, auth. Covers 42 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# TVmaze user API\nAPI version: 1.0\n\n## Auth\nbasic\n\n## Base URL\nhttps://api.tvmaze.com/v1\n\n## Setup\n1. Configure auth: basic\n2. GET /user/episodes -- list the marked episodes\n3. POST /user/tags -- create first tag\n\n## Endpoints\n42 endpoints across 3 groups. See references/api-spec.lap for full details.\n\n### User\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /user/episodes | List the marked episodes |\n| GET | /user/episodes/{episode_id} | Check if an episode is marked |\n| PUT | /user/episodes/{episode_id} | Mark an episode |\n| DELETE | /user/episodes/{episode_id} | Unmark an episode |\n| GET | /user/follows/shows | List the followed shows |\n| GET | /user/follows/shows/{show_id} | Check if a show is followed |\n| PUT | /user/follows/shows/{show_id} | Follow a show |\n| DELETE | /user/follows/shows/{show_id} | Unfollow a show |\n| GET | /user/follows/people | List the followed people |\n| GET | /user/follows/people/{person_id} | Check if a person is followed |\n| PUT | /user/follows/people/{person_id} | Follow a person |\n| DELETE | /user/follows/people/{person_id} | Unfollow a person |\n| GET | /user/follows/networks | List the followed networks |\n| GET | /user/follows/networks/{network_id} | Check if a network is followed |\n| PUT | /user/follows/networks/{network_id} | Follow a network |\n| DELETE | /user/follows/networks/{network_id} | Unfollow a network |\n| GET | /user/follows/webchannels | List the followed webchannels |\n| GET | /user/follows/webchannels/{webchannel_id} | Check if a webchannel is followed |\n| PUT | /user/follows/webchannels/{webchannel_id} | Follow a webchannel |\n| DELETE | /user/follows/webchannels/{webchannel_id} | Unfollow a webchannel |\n| GET | /user/tags | List all tags |\n| POST | /user/tags | Create a new tag |\n| DELETE | /user/tags/{tag_id} | Delete a specific tag |\n| PATCH | /user/tags/{tag_id} | Update a specific tag |\n| GET | /user/tags/{tag_id}/shows | List all shows under this tag |\n| PUT | /user/tags/{tag_id}/shows/{show_id} | Tag a show |\n| DELETE | /user/tags/{tag_id}/shows/{show_id} | Untag a show |\n| GET | /user/votes/shows | List the shows voted for |\n| GET | /user/votes/shows/{show_id} | Check if a show is voted for |\n| PUT | /user/votes/shows/{show_id} | Vote for a show |\n| DELETE | /user/votes/shows/{show_id} | Remove a show vote |\n| GET | /user/votes/episodes | List the episodes voted for |\n| GET | /user/votes/episodes/{episode_id} | Check if an episode is voted for |\n| PUT | /user/votes/episodes/{episode_id} | Vote for an episode |\n| DELETE | /user/votes/episodes/{episode_id} | Remove an episode vote |\n\n### Scrobble\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /scrobble/shows/{show_id} | List watched and acquired episodes for a show |\n| PUT | /scrobble/episodes/{episode_id} | Mark an episode as acquired or watched based on its ID |\n| POST | /scrobble/shows | Mark episodes within a show as acquired or watched based on their attributes |\n| POST | /scrobble/episodes | Mark episodes as acquired or watched based on their IDs |\n\n### Auth\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /auth/start | Start an authentication request |\n| POST | /auth/poll | Poll whether an authentication request was confirmed |\n| GET | /auth/validate | Validate your authentication credentials |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"List all episodes?\" -> GET /user/episodes\n- \"Get episode details?\" -> GET /user/episodes/{episode_id}\n- \"Update a episode?\" -> PUT /user/episodes/{episode_id}\n- \"Delete a episode?\" -> DELETE /user/episodes/{episode_id}\n- \"List all shows?\" -> GET /user/follows/shows\n- \"Get show details?\" -> GET /user/follows/shows/{show_id}\n- \"Update a show?\" -> PUT /user/follows/shows/{show_id}\n- \"Delete a show?\" -> DELETE /user/follows/shows/{show_id}\n- \"List all people?\" -> GET /user/follows/people\n- \"Get people details?\" -> GET /user/follows/people/{person_id}\n- \"Update a people?\" -> PUT /user/follows/people/{person_id}\n- \"Delete a people?\" -> DELETE /user/follows/people/{person_id}\n- \"List all networks?\" -> GET /user/follows/networks\n- \"Get network details?\" -> GET /user/follows/networks/{network_id}\n- \"Update a network?\" -> PUT /user/follows/networks/{network_id}\n- \"Delete a network?\" -> DELETE /user/follows/networks/{network_id}\n- \"List all webchannels?\" -> GET /user/follows/webchannels\n- \"Get webchannel details?\" -> GET /user/follows/webchannels/{webchannel_id}\n- \"Update a webchannel?\" -> PUT /user/follows/webchannels/{webchannel_id}\n- \"Delete a webchannel?\" -> DELETE /user/follows/webchannels/{webchannel_id}\n- \"List all tags?\" -> GET /user/tags\n- \"Create a tag?\" -> POST /user/tags\n- \"Delete a tag?\" -> DELETE /user/tags/{tag_id}\n- \"Partially update a tag?\" -> PATCH /user/tags/{tag_id}\n- \"Create a show?\" -> POST /scrobble/shows\n- \"Create a episode?\" -> POST /scrobble/episodes\n- \"Create a start?\" -> POST /auth/start\n- \"Create a poll?\" -> POST /auth/poll\n- \"List all validate?\" -> GET /auth/validate\n- \"How to authenticate?\" -> See Auth section above\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Create/update endpoints return the modified resource on success\n- Error responses include status codes and descriptions in the spec\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api TVmaze user API\n@base https://api.tvmaze.com/v1\n@version 1.0\n@auth basic\n@endpoints 42\n@hint download_for_search\n@toc user(35), scrobble(4), auth(3)\n\n@group user\n@endpoint GET /user/episodes\n@desc List the marked episodes\n@optional {show_id: any # Only return episodes from this specific show}\n@returns(200) An array of marked episodes\n\n@endpoint GET /user/episodes/{episode_id}\n@desc Check if an episode is marked\n@returns(200) The marked episode\n@errors {404: This episode is not marked}\n\n@endpoint PUT /user/episodes/{episode_id}\n@desc Mark an episode\n@optional {body: map}\n@returns(200) this episode is now marked\n@errors {404: this episode does not exist, 422: invalid input data}\n\n@endpoint DELETE /user/episodes/{episode_id}\n@desc Unmark an episode\n@returns(200) the episode is now unmarked\n@errors {404: this episode was not marked}\n\n@endpoint GET /user/follows/shows\n@desc List the followed shows\n@optional {embed: any # Embed full show info}\n@returns(200) An array of followed shows\n\n@endpoint GET /user/follows/shows/{show_id}\n@desc Check if a show is followed\n@returns(200) The followed show\n@errors {404: This show is not followed}\n\n@endpoint PUT /user/follows/shows/{show_id}\n@desc Follow a show\n@returns(200) This show is now followed\n@errors {404: This show does not exist}\n\n@endpoint DELETE /user/follows/shows/{show_id}\n@desc Unfollow a show\n@returns(200) The show is now unfollowed\n@errors {404: This show was not followed}\n\n@endpoint GET /user/follows/people\n@desc List the followed people\n@optional {embed: any # Embed full person info}\n@returns(200) An array of followed people\n\n@endpoint GET /user/follows/people/{person_id}\n@desc Check if a person is followed\n@returns(200) The followed person\n@errors {404: this person is not followed}\n\n@endpoint PUT /user/follows/people/{person_id}\n@desc Follow a person\n@returns(200) this person is now followed\n@errors {404: this person does not exist}\n\n@endpoint DELETE /user/follows/people/{person_id}\n@desc Unfollow a person\n@returns(200) the person is now unfollowed\n@errors {404: this person was not followed}\n\n@endpoint GET /user/follows/networks\n@desc List the followed networks\n@optional {embed: any # Embed full network info}\n@returns(200) An array of followed networks\n\n@endpoint GET /user/follows/networks/{network_id}\n@desc Check if a network is followed\n@returns(200) The followed network\n@errors {404: this network is not followed}\n\n@endpoint PUT /user/follows/networks/{network_id}\n@desc Follow a network\n@returns(200) this network is now followed\n@errors {404: this network does not exist}\n\n@endpoint DELETE /user/follows/networks/{network_id}\n@desc Unfollow a network\n@returns(200) the network is now unfollowed\n@errors {404: this network was not followed}\n\n@endpoint GET /user/follows/webchannels\n@desc List the followed webchannels\n@optional {embed: any # Embed full webchannel info}\n@returns(200) An array of followed webchannels\n\n@endpoint GET /user/follows/webchannels/{webchannel_id}\n@desc Check if a webchannel is followed\n@returns(200) The followed webchannel\n@errors {404: this webchannel is not followed}\n\n@endpoint PUT /user/follows/webchannels/{webchannel_id}\n@desc Follow a webchannel\n@returns(200) this webchannel is now followed\n@errors {404: this webchannel does not exist}\n\n@endpoint DELETE /user/follows/webchannels/{webchannel_id}\n@desc Unfollow a webchannel\n@returns(200) the webchannel is now unfollowed\n@errors {404: this webchannel was not followed}\n\n@endpoint GET /user/tags\n@desc List all tags\n@returns(200) An array of tags\n\n@endpoint POST /user/tags\n@desc Create a new tag\n@optional {body: map}\n@returns(200) The newly created tag\n@errors {422: invalid input data}\n\n@endpoint DELETE /user/tags/{tag_id}\n@desc Delete a specific tag\n@required {tag_id: any}\n@returns(200) The tag was deleted\n@errors {404: The tag does not exist}\n\n@endpoint PATCH /user/tags/{tag_id}\n@desc Update a specific tag\n@required {tag_id: any}\n@optional {body: map}\n@returns(200) The tag was updated\n@errors {404: The tag does not exist, 422: The tag could not be updated}\n\n@endpoint GET /user/tags/{tag_id}/shows\n@desc List all shows under this tag\n@required {tag_id: any}\n@optional {embed: any # Embed full show info}\n@returns(200) A list of tagged shows\n@errors {404: The tag does not exist}\n\n@endpoint PUT /user/tags/{tag_id}/shows/{show_id}\n@desc Tag a show\n@required {tag_id: any, show_id: any}\n@returns(200) The show was tagged\n@errors {404: The show or tag does not exist}\n\n@endpoint DELETE /user/tags/{tag_id}/shows/{show_id}\n@desc Untag a show\n@required {tag_id: any, show_id: any}\n@returns(200) The show was untagged\n@errors {404: The show was not tagged}\n\n@endpoint GET /user/votes/shows\n@desc List the shows voted for\n@optional {embed: any # Embed full show info}\n@returns(200) An array of show votes\n\n@endpoint GET /user/votes/shows/{show_id}\n@desc Check if a show is voted for\n@returns(200) The show vote\n@errors {404: This show is not voted for}\n\n@endpoint PUT /user/votes/shows/{show_id}\n@desc Vote for a show\n@optional {body: map}\n@returns(200) This show is now voted for\n@errors {404: This show does not exist, 422: Invalid vote}\n\n@endpoint DELETE /user/votes/shows/{show_id}\n@desc Remove a show vote\n@returns(200) The show vote is now removed\n@errors {404: This show was not voted for}\n\n@endpoint GET /user/votes/episodes\n@desc List the episodes voted for\n@returns(200) An array of episode votes\n\n@endpoint GET /user/votes/episodes/{episode_id}\n@desc Check if an episode is voted for\n@returns(200) The episode vote\n@errors {404: This episode is not voted for}\n\n@endpoint PUT /user/votes/episodes/{episode_id}\n@desc Vote for an episode\n@optional {body: map}\n@returns(200) This episode is now voted for\n@errors {404: This episode does not exist, 422: Invalid vote}\n\n@endpoint DELETE /user/votes/episodes/{episode_id}\n@desc Remove an episode vote\n@returns(200) The episode vote is now removed\n@errors {404: This episode was not voted for}\n\n@endgroup\n\n@group scrobble\n@endpoint GET /scrobble/shows/{show_id}\n@desc List watched and acquired episodes for a show\n@returns(200) An array of marked episodes\n\n@endpoint PUT /scrobble/episodes/{episode_id}\n@desc Mark an episode as acquired or watched based on its ID\n@optional {body: map}\n@returns(200) this episode is now marked\n@errors {404: this episode does not exist, 422: invalid input data}\n\n@endpoint POST /scrobble/shows\n@desc Mark episodes within a show as acquired or watched based on their attributes\n@optional {tvmaze_id: any # The show's TVmaze ID, thetvdb_id: any # The show's TheTVDB ID, imdb_id: any # The show's IMDB ID, episodes: [map]}\n@returns(200) All episodes were succesfully marked\n@returns(207) Some episodes were succesfully marked, but there are errors\n@errors {422: None of the episodes were succesfully marked}\n\n@endpoint POST /scrobble/episodes\n@desc Mark episodes as acquired or watched based on their IDs\n@optional {episodes: [map]}\n@returns(200) All episodes were succesfully marked\n@returns(207) Some episodes were succesfully marked, but there are errors\n@errors {422: None of the episodes were succesfully marked}\n\n@endgroup\n\n@group auth\n@endpoint POST /auth/start\n@desc Start an authentication request\n@required {body: map}\n@returns(200) The authentication request was succesfully started\n@errors {401: The email address was found, but not confirmed, 404: The email address was not found, 429: You are starting authentication requests too quickly, please back off}\n\n@endpoint POST /auth/poll\n@desc Poll whether an authentication request was confirmed\n@required {body: map}\n@returns(200) The user confirmed the authentication request\n@errors {403: The authentication request was not confirmed yet, 404: The authentication request was not found, 429: You are polling too quickly, please back off}\n\n@endpoint GET /auth/validate\n@desc Validate your authentication credentials\n@returns(200) The supplied credentials are valid\n@errors {401: The supplied credentials are not valid}\n\n@endgroup\n\n@end\n"}}