+Method URL Function
+------ ------------------------------ -------------------------------------
+GET / Site root will redirect to a landing page
-Method URL Function
------- ------------------------------ -------------------------------------
-GET /ctdl/a/landing.html Site root redirects to here
-GET /ctdl/r/ returns a JSON-encoded list of accessible rooms
-OPTIONS /ctdl/r/ROOMNAME/ returns just what you'd expect
-PROPFIND /ctdl/r/ROOMNAME/ Show a bunch of crap
-GET /ctdl/r/ROOMNAME/ Returns information about the room (name, view, etc.) in JSON format
-GET /ctdl/r/ROOMNAME/msgs.all JSON array of message list in room
-GET /ctdl/r/ROOMNAME/msgs.new JSON array of message list in room (new messages)
-GET /ctdl/r/ROOMNAME/MSGNUM Retrieve the content of an individual message (FIXME: make msg headers HTTP headers)
-PUT /ctdl/r/ROOMNAME/xxx DAV operation to insert a new message into a room
- (The returned ETag will be the new message number)
-GET /ctdl/r/ROOMNAME/MSGNUM/json Retrieve an individual message in a room, encapsulated in JSON
-GET /ctdl/c/info Returns a JSON representation of the output of an INFO server command
-POST /ctdl/a/login Send it a your credentials and it will log you in
-GET /ctdl/a/whoami
-GET /ctdl/u/USERNAME/userpic Returns an image containing the photo/avatar of the specified user
+GET /ctdl/f/ returns a JSON-encoded list of accessible floors
+
+GET /ctdl/r/ returns a JSON-encoded list of accessible rooms
+OPTIONS /ctdl/r/<roomname>/ returns just what you'd expect
+PROPFIND /ctdl/r/<roomname>/ Show a bunch of crap
+GET /ctdl/r/<roomname>/ Returns information about the room (name, view, etc.) in JSON format
+GET /ctdl/r/<roomname>/info.txt Returns the room info banner for this room
+GET /ctdl/r/<roomname>/msgs.all JSON array of message list in room
+GET /ctdl/r/<roomname>/msgs.new JSON array of message list in room (new messages)
+GET /ctdl/r/<roomname>/mailbox JSON dictionary of a mailbox summary in this room
+GET /ctdl/r/<roomname>/stat JSON dictionary of the server STAT command (room name and modification time)
+GET /ctdl/r/<roomname>/<msgnum> Retrieve the content of an individual message
+GET /ctdl/r/<roomname>/<msgnum>/json Retrieve an individual message in a room, encapsulated in JSON
+GET /ctdl/r/<roomname>/<msgnum>/<part> Retrieve a MIME component of a message, specified by partnum
+DELETE /ctdl/r/<roomname>/<msgnum> Delete a message from a room
+MOVE /ctdl/r/<roomname>/<msgnum> Move a message to another room (requires Destination)
+
+PUT /ctdl/r/<roomname>/<xxx> DAV operation to insert a new message into a room
+ Accepted parameters:
+ wefw List of message references, separated by "!" delimiter
+ subj Message subject
+ The returned ETag will be the new message number.
+
+GET /ctdl/r/<roomname>/slrp Set the "Last Read Pointer" for the room
+ Accepted parameters:
+ last The number of the most recently seen message
+
+GET /ctdl/c/info Returns a JSON representation of the output of an INFO server command
+POST /ctdl/a/login Send it a your credentials and it will log you in
+GET /ctdl/a/whoami
+GET /ctdl/a/biff Check for new mail
+GET /ctdl/u/<username>/userpic Returns an image containing the photo/avatar of the specified user
+GET /ctdl/s/ Static content (html, css, js, images...)
+GET /.well-known/ Static content (RFC5785 compliant paths)
+POST /ctdl/p Handler for uploading attachments and other file items
+ The JSON returned wil contain one or more uploads in an array like this:
+ [
+ {
+ "uploadfilename" : "Track 01.wav",
+ "contenttype" : "audio/wav",
+ "ref" : "cdarzowkk",
+ "contentlength" : 56222252
+ }
+ ]
+GET /ctdl/p/<ref> Fetch a specific item that was uploaded ("ref" was returned by the upload)
+DELETE /ctdl/p/<ref> Delete a specific item that was uploaded ("ref" was returned by the upload)
+GET /ctdl/p/<msgnum> Load the attachments from message <msgnum> in, as if they were uploaded
+ by the client. Returns the same JSON as "POST /ctdl/p".