defmodule Sptfy do @moduledoc """ Sptfy is a [Spotify API](https://developer.spotify.com/documentation/web-api/) client library. ### Request resources Sptfy provides several API modules. For instance using `Sptfy.Album`, you can fetch an album. iex> {:ok, album = %Sptfy.Object.FullAlbum{}} = Sptfy.Album.get_album(access_token, id: "0ETFjACtuP2ADo6LFhL6HN") iex> album.name ...> "Abbey Road (Remastered)" Or get an error. iex> Sptfy.Album.get_album("abc", id: "...") ...> {:error, %Sptfy.Object.Error{message: "Invalid access token", status: 401}} More examples found on [`integration_test` dir](https://github.com/Joe-noh/sptfy/tree/main/integration_test). ### Obtain access token `Sptfy.OAuth` module supports authorization code flow. iex> Sptfy.OAuth.url("CLIENT_ID", "https://example.com/callback", %{scope: ["user-top-read"]}) ...> "https://accounts.spotify.com/authorize?client_id=..." iex> Sptfy.OAuth.get_token("CLIENT_ID", "CLIENT_SECRET", "CODE", "https://example.com/callback") ...> %Sptfy.Object.OAuthResponse{access_token: "ACCESS_TOKEN", refresh_token: "REFRESH_TOKEN"} You can request new access token using `Sptfy.OAuth.refresh_token/3` when it expired. iex> Sptfy.OAuth.refresh_token("CLIENT_ID", "CLIENT_SECRET", "REFRESH_TOKEN") ...> %Sptfy.Object.OAuthResponse{access_token: "NEW ACCESS_TOKEN"} """ end