## Using Satyr's Rest API ### /api/instance/info Generic enformation about the instance. Method: GET Authentication: no Parameters: none Response: Returns a JSON object containing the name, domain, version, email, and whether registration is open. Email will be null if not specified. Example: `{name: "Example Instance", domain: "example.com", registration: false, version: 0.7, email: null}` ### /api/instance/config Configuration of the instance relating to media Method: GET Authentication: no Parameters: none Response: JSON object containing the port and ping_timeout for RTMP, public and private play endpoints, and whether adaptive livestreaming and VOD recording are enabled. Example: ``` { rtmp: { port: 1935, ping_timeout: 60 }, media: { vods: false, publicEndpoint: 'live', privateEndpoint: 'stream', adaptive: true } } ``` Public and private endpoints work like this, from the above example: stream to: rtmp://example.com/stream play from: rtmp://example.com/live/username or https://example.com/live/username/index.mpd ### /api/users/live/ Returns the usernames and stream titles of 10 users who are currently streaming Method: GET Authentication: no Parameters: none Response: Returns an array of objects containing the username and title of each stream. Returns an empty array if no one is streaming. Example: `[{username:"foo", title:"bar"}]` ### /api/users/live/:num Same as above, with number indicated the number of users to list. Maximum of 50. ### /api/register Register a new user. Method: POST Authentication: no Parameters: Username, password, confirm Response: If successful, returns a json object with the users stream key. Otherwise returns `{error: "error reason"}` Examples: `{stream_key: "asdfghjkltyuiop12345"}` `{error: "registration disabled"}` ### /api/login Obtain a signed json web token for authentication Method: POST Authentication: no Parameters: Username and password OR a valid JWT cookie expiring in less than 24 hours Response: If succesful, will return `{success: ""}` or `{success: "already verified"}` if the JWT provided is too early to be renewed. If unsuccesful, will return `{error: "invalid password"}` or `{error: "Username or Password Incorrect"}` depending on the authentication method. Note that if a JWT is available, the parameters will be ignored. Notes: I've already listed nearly every response. My final note is that the JWT is set as the cookie 'Authorization', not returned in the response. ### /api/user/update Update the current user's information Method: POST Authentication: yes Parameters: title, bio, rec Rec is a boolean (whether to record VODs), others are strings. Parameters that are not included in the request will not be updated. Response: Returns `{error: "error code"}` or `{success: ""}` ### /api/user/update/chat Update the chatrooms on other platforms to integrate with the user's stream chat Method: POST Authentication: yes Parameters: discord, xmpp, twitch irc All strings corresponding to a channel name to mirror to. XMPP is currently unused. Parameters not included in the request will not be updated. Response: Returns `{error: "error code"}` or `{success: ""}` ## /api/user/vods/delete Delete the specified vods of the current user Method: POST Authentication: yes Paramters: A string array of the names of vods to be deleted. Response: Returns `{error: "error code"}` or `{success: ""}` ## /api/user/password Change the current user's password Method: POST Authentication: yes Parameters: The user's current password, the new password, AND a valid JWT cookie. Response: Returns `{error: "error code"}` or `{success: ""}` ## /api/user/streamkey Change the current user's stream key. This will not affect the stream if the user is currently live. Method: POST Authentication: yes Parameters: A valid JWT cookie. No other parameters. Response: Returns `{error: "error code"}` or `{success: "new_stream_key"}` ## /api/:user/vods/list Get a list of the named users VODs Method: GET Authentication: no Parameters: none Response: Returns an array of VODs with the format `[{"name":"yote.mp4"},{"name":"yeet.mp4"}]` Notes: VODs are always available at http://domain.com/publicEndpoint/username/filename.mp4