Difference between revisions of "SoFurry 2.0 API"

From SoFurry
Jump to: navigation, search
 
(9 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 +
 +
{| style="width: 100%; background: #FF6600; margin: 1.2em 0 6px 0; border: 1px solid #ddd;"
 +
| style="width: 100%; color: #000;" |
 +
{| style="width: 100%; border: none; background: none;margin: 0.7em 0 0 0;"
 +
| style="width: 100%; text-align: center; white-space: nowrap; color: #000;" |
 +
NOTE: The API is currently being updated. This information is subject to change fundamentally shortly.
 +
|}
 +
|}
 +
== Browse submissions ==
 +
 +
=== Request URL ===
 +
    https://api2.sofurry.com/browse/all/art?format=json
 +
    https://api2.sofurry.com/browse/all/stories?format=json
 +
    https://api2.sofurry.com/browse/all/music?format=json
 +
    https://api2.sofurry.com/browse/all/photos?format=json
 +
    https://api2.sofurry.com/browse/all/journals?format=json
 +
 +
=== Parameters ===
 +
* sortby = date, popularity, length, title, random
 +
* from = all time, this year, this month, this week, yesterday, today
 +
* rating = clean, adult, clean adult (max rating, leave empty to show all)
 +
 +
=== Returned data ===
 +
 +
    {
 +
        "title": "SoFurry - All Art",
 +
        "items": [
 +
            {
 +
                "thumbnail": "https://www.sofurryfiles.com/std/thumb?page=12345",
 +
                "contentlevel": "Clean", (can be clean, adult, extreme)
 +
                "id": "12345",
 +
                "title": "Submission Title",
 +
                "author": "author name",
 +
                "link": "http://api2.sofurry.com/view/12345",
 +
                "postTime": "1430157763",
 +
                "tags": "Tags, separated, by, commas",
 +
                "description": "Lengthy description"
 +
            },
 +
            ....
 +
        ]
 +
    }
 +
 +
== Browse user submissions ==
 +
 +
=== Request URL ===
 +
    https://api2.sofurry.com/browse/user/art?uid=1234&format=json
 +
 +
=== Parameters ===
 +
* uid = optional user ID to show only this user's submissions
 +
 +
=== Returned data ===
 +
 +
Same format as regular browse request
 +
 +
 +
== Search submissions ==
 +
 +
=== Request URL ===
 +
    https://api2.sofurry.com/browse/search?search=Searchterm1,Searchterm2&format=json
 +
 +
=== Parameters ===
 +
* search = Search tags separated by comma. To do a fulltext search, enclose the search term with "quotation marks"
 +
* filter = all, stories, artwork, stories, photos, journals (optional, defaults to all)
 +
* sort = date, daterev, popularity
 +
* daterange = all, day, week, month, 6 months, year
 +
* minlevel = 0 (0=clean, 1=adult, 2=extreme)
 +
* maxlevel = 2 (0=clean, 1=adult, 2=extreme)
 +
 +
=== Returned data ===
 +
 +
    { 
 +
        "searchType":"all",
 +
        "searchTerm":"orca",
 +
        "items":[ 
 +
            { 
 +
                "contentlevel":"clean",
 +
                "id":852521,
 +
                "tags":"Fox, Transformation, Dragon, Orca, Muscle Growth, Cock Growth, Toys, Growth, M/M, Latex, M/solo, Machines, Foot growth",
 +
                "title":"Latex Stream Story 3: A Pleasure to Meet You",
 +
                "author":"draconicon",
 +
                "link":"http://www.sofurry.com/view/852521",
 +
                "postTime":1430018009
 +
            },
 +
            ...
 +
        ]
 +
    }
 +
 +
 +
 
== Getting User Profiles ==
 
== Getting User Profiles ==
  
Line 6: Line 95:
 
=== Parameters ===
 
=== Parameters ===
 
  * id = numerical ID of the user whose profile you want. Optional. If omitted, the system will send your own profile data.
 
  * id = numerical ID of the user whose profile you want. Optional. If omitted, the system will send your own profile data.
 +
* username = name of the user whose profile you want. Optional. Can be used instead of id, for if you don't know the user id.
  
 
=== Returned data ===
 
=== Returned data ===
Line 27: Line 117:
 
       "registrationDate":"long long ago",
 
       "registrationDate":"long long ago",
 
       "description":"Bla"
 
       "description":"Bla"
 +
      "iswatched":"false", (false = you are not watching this user, true = you are currently watching this user)
 
     }
 
     }
  
Line 48: Line 139:
 
       "city":"Vienna",
 
       "city":"Vienna",
 
       "registrationDate":"long long ago",
 
       "registrationDate":"long long ago",
       "description":"Bla"
+
       "description":"Bla",
 +
      "iswatched":"false",
 
       "unreadPMCount":"12",
 
       "unreadPMCount":"12",
 
       "watchlistCount":"1234",
 
       "watchlistCount":"1234",
Line 89: Line 181:
 
       "previewSourceUrl":"http://someurl", (URL of the 800px preview)
 
       "previewSourceUrl":"http://someurl", (URL of the 800px preview)
 
       "thumbnailSourceUrl":"http://someurl" (URL of the thumbnail)
 
       "thumbnailSourceUrl":"http://someurl" (URL of the thumbnail)
 +
      "isFavourite":false (only if you're OTP-authenticated correctly, else it will always be false)
 
     }
 
     }
 
  
 
== Get Shouts ==
 
== Get Shouts ==
Line 102: Line 194:
 
=== Returned data ===
 
=== Returned data ===
  
{
 
  "entries":[
 
    {
 
      "id":"280640",
 
      "parentID":"-1",
 
      "username":"JayriAvieock",
 
      "userID":"189019",
 
      "date":"1333734740",
 
      "message":"rawr? you called :3"
 
    },
 
    {
 
      "id":"280628",
 
      "parentID":"280623",
 
      "username":"Toumal",
 
      "userID":"13",
 
      "date":"1333729895",
 
      "message":"Yes, I'd love that!"
 
    },
 
 
     {
 
     {
       "id":"280623",
+
       "entries":[
      "parentID":"-1",
+
        {
      "username":"markshark",
+
          "id":"280640",
      "userID":"142337",
+
          "parentID":"-1",
      "date":"1333729622",
+
          "username":"JayriAvieock",
      "message":"Thanks for the favorites, mr Toumal. I wonder if we could get a picture together at some point ;-)"
+
          "userID":"189019",
    },
+
          "date":"1333734740",
    {
+
          "message":"rawr? you called :3"
      "id":"280542",
+
        },
      "parentID":"-1",
+
        {
      "username":"Rubberkitten",
+
          "id":"280628",
      "userID":"32931",
+
          "parentID":"280623",
      "date":"1333714929",
+
          "username":"Toumal",
      "message":"hello :3."
+
          "userID":"13",
    },
+
          "date":"1333729895",
    {
+
          "message":"Yes, I'd love that!"
      "id":"280381",
+
        },
      "parentID":"-1",
+
        {
      "username":"Fenndragon",
+
          "id":"280623",
      "userID":"209900",
+
          "parentID":"-1",
      "date":"1333670188",
+
          "username":"markshark",
      "message":"thanks for the watch, and kind words!"
+
          "userID":"142337",
 +
          "date":"1333729622",
 +
          "message":"Thanks for the favorites, mr Toumal. I wonder if we could get a picture together at some point ;-)"
 +
        },
 +
        {
 +
          "id":"280542",
 +
          "parentID":"-1",
 +
          "username":"Rubberkitten",
 +
          "userID":"32931",
 +
          "date":"1333714929",
 +
          "message":"hello :3."
 +
        },
 +
        {
 +
          "id":"280381",
 +
          "parentID":"-1",
 +
          "username":"Fenndragon",
 +
          "userID":"209900",
 +
          "date":"1333670188",
 +
          "message":"thanks for the watch, and kind words!"
 +
        }
 +
      ]
 
     }
 
     }
  ]
 
}
 
  
 
== Get Comments ==
 
== Get Comments ==
Line 157: Line 249:
 
=== Returned data ===
 
=== Returned data ===
  
{
 
  "entries":[
 
 
     {
 
     {
       "id":"249324",
+
       "entries":[
      "parentID":"-1",
+
        {
      "username":"Testuser11",
+
          "id":"249324",
      "userID":"57129",
+
          "parentID":"-1",
      "date":"1311249060",
+
          "username":"Testuser11",
       "message":"blablablablabla"
+
          "userID":"57129",
     },
+
          "date":"1311249060",
 +
          "message":"blablablablabla"
 +
        },
 +
        {
 +
          "id":"249325",
 +
          "parentID":"249324",
 +
          "username":"Testuser11",
 +
          "userID":"57129",
 +
          "date":"1311249060",
 +
          "message":"A reply"
 +
        }
 +
       ]
 +
    }
 +
 
 +
 
 +
== Writing a comment ==
 +
 
 +
=== Request URL ===
 +
    http://api2.sofurry.com/comment/saveComment
 +
 
 +
=== Parameters ===
 +
* sfCommentAdditionalId = page ID of the submission this is a comment on
 +
* sfCommentReplyTo = ID of the comment to reply to, empty if a new comment
 +
* sfCommentReplyTextarea = Text message of the comment
 +
* assignme = "true"
 +
 
 +
=== Returned data ===
 +
 
 +
    {
 +
        "status":1, (0=error, 1=OK)
 +
        "message":"" (Filled with html error message if status = 0)
 +
    }
 +
 
 +
 
 +
== Writing a shout ==
 +
 
 +
=== Request URL ===
 +
    http://api2.sofurry.com/comment/saveShout
 +
 
 +
=== Parameters ===
 +
* sfCommentAdditionalId = user ID of the user on whose profile this shout is to be posted
 +
* sfCommentReplyTo = ID of the shout to reply to, empty if a new shout
 +
* sfCommentReplyTextarea = Text message of the shout
 +
* assignme = "true"
 +
 
 +
=== Returned data ===
 +
 
 +
    {
 +
        "status":1, (0=error, 1=OK)
 +
        "message":"" (Filled with html error message if status = 0)
 +
     }
 +
 
 +
 
 +
== Fetch list of PMs ==
 +
 
 +
=== Request URL ===
 +
    http://api2.sofurry.com/user/pm/list?format=json
 +
 
 +
=== Parameters ===
 +
* None
 +
 
 +
=== Returned data ===
 +
 
 +
    [ 
 +
        { 
 +
            "id":"6385869",
 +
            "fromUserID":"89189",
 +
            "toUserID":"13",
 +
            "fromUserName":"Someuser",
 +
            "toUserName":"Yourname",
 +
            "timestamp":"1430151997",
 +
            "subject":"SoFurry Ambassadors",
 +
            "status":"0", (0=Unread, 1=Read, 2=Replied)
 +
            "threadID":"659073"
 +
        },
 +
        { 
 +
            "id":"6380243",
 +
            "fromUserID":"292333",
 +
            "toUserID":"13",
 +
            "fromUserName":"Someotheruser",
 +
            "toUserName":"Yourname",
 +
            "timestamp":"1430076550",
 +
            "subject":"Something blabla",
 +
            "status":"2",
 +
            "threadID":"658820"
 +
        },
 +
    ...
 +
    ]
 +
 
 +
 
 +
== Get contents of a PM ==
 +
 
 +
=== Request URL ===
 +
    http://api2.sofurry.com/user/pm/view?id=12345&format=json
 +
 
 +
=== Parameters ===
 +
* id = numerical ID of the desired PM.
 +
 
 +
=== Returned data ===
 +
 
 +
    { 
 +
        "id":"6385869",
 +
        "fromUserID":"89189",
 +
        "fromUserName":"Someuser",
 +
        "toUserID":"13",
 +
        "toUserName":"Toumal",
 +
        "timestamp":"1430151997",
 +
        "subject":"SoFurry Ambassadors",
 +
        "message":"Blah blah this is the main PM message contents",
 +
        "status":"1",
 +
        "parentID":"-1",
 +
        "folder":"inbox",
 +
        "isStar":"0", (Important PMs can be "starred")
 +
        "todoState":"0", (Unused atm)
 +
        "topParentID":"6385869", (ID of the initial PM in the conversation)
 +
        "threadID":"659073"
 +
    }
 +
 
 +
== Send PM ==
 +
 
 +
=== Request URL ===
 +
    http://api2.sofurry.com/user/pm/new
 +
 
 +
=== Parameters ===
 +
* PrivateMessage[toUserName] = Your username
 +
* PrivateMessage[subject] = Subject line
 +
* PrivateMessage[message] = Actual message contents
 +
* Send = "Send Message"
 +
 
 +
 
 +
=== Returned data ===
 +
 
 +
None
 +
 
 +
 
 +
 
 +
== Reply to PM ==
 +
 
 +
=== Request URL ===
 +
    http://api2.sofurry.com/comment/savePM
 +
 
 +
=== Parameters ===
 +
* sfCommentReplyTo = ID of the PM to reply to
 +
* sfCommentReplyTextarea = Text message of the reply
 +
* assignme = "true"
 +
 
 +
=== Returned data ===
 +
 
 
     {
 
     {
      "id":"249325",
+
        "status":1, (0=error, 1=OK)
      "parentID":"249324",
+
        "message":"" (Filled with html error message if status = 0)
      "username":"Testuser11",
 
      "userID":"57129",
 
      "date":"1311249060",
 
      "message":"A reply"
 
 
     }
 
     }
  ]
 
}
 

Latest revision as of 15:18, 14 November 2015

NOTE: The API is currently being updated. This information is subject to change fundamentally shortly.

Browse submissions

Request URL

   https://api2.sofurry.com/browse/all/art?format=json
   https://api2.sofurry.com/browse/all/stories?format=json
   https://api2.sofurry.com/browse/all/music?format=json
   https://api2.sofurry.com/browse/all/photos?format=json
   https://api2.sofurry.com/browse/all/journals?format=json

Parameters

* sortby = date, popularity, length, title, random
* from = all time, this year, this month, this week, yesterday, today
* rating = clean, adult, clean adult (max rating, leave empty to show all)

Returned data

   {
       "title": "SoFurry - All Art",
       "items": [
           {
               "thumbnail": "https://www.sofurryfiles.com/std/thumb?page=12345",
               "contentlevel": "Clean", (can be clean, adult, extreme)
               "id": "12345",
               "title": "Submission Title",
               "author": "author name",
               "link": "http://api2.sofurry.com/view/12345",
               "postTime": "1430157763",
               "tags": "Tags, separated, by, commas",
               "description": "Lengthy description"
           },
           ....
       ]
   }

Browse user submissions

Request URL

   https://api2.sofurry.com/browse/user/art?uid=1234&format=json

Parameters

* uid = optional user ID to show only this user's submissions

Returned data

Same format as regular browse request


Search submissions

Request URL

   https://api2.sofurry.com/browse/search?search=Searchterm1,Searchterm2&format=json

Parameters

* search = Search tags separated by comma. To do a fulltext search, enclose the search term with "quotation marks"
* filter = all, stories, artwork, stories, photos, journals (optional, defaults to all)
* sort = date, daterev, popularity
* daterange = all, day, week, month, 6 months, year
* minlevel = 0 (0=clean, 1=adult, 2=extreme)
* maxlevel = 2 (0=clean, 1=adult, 2=extreme)

Returned data

   {  
       "searchType":"all",
       "searchTerm":"orca",
       "items":[  
           {  
               "contentlevel":"clean",
               "id":852521,
               "tags":"Fox, Transformation, Dragon, Orca, Muscle Growth, Cock Growth, Toys, Growth, M/M, Latex, M/solo, Machines, Foot growth",
               "title":"Latex Stream Story 3: A Pleasure to Meet You",
               "author":"draconicon",
               "link":"http://www.sofurry.com/view/852521",
               "postTime":1430018009
           },
           ...
       ]
   }


Getting User Profiles

Request URL

   http://api2.sofurry.com/std/getUserProfile

Parameters

* id = numerical ID of the user whose profile you want. Optional. If omitted, the system will send your own profile data.
* username = name of the user whose profile you want. Optional. Can be used instead of id, for if you don't know the user id.

Returned data

For anyone but yourself, you get the following data:

   {
     "username":"Toumal",
     "useralias":"toumal", (This is the url-friendly username for username.sofurry.com profile addresses)
     "userID":"13",
     "profileViewCount":"1234",
     "submissionCount":"1234",
     "submissionViewCount":"1234",
     "commentCount":"1234",
     "commentPostedCount":"1234",
     "species":"Orca",
     "gender":"1", (0=N/A, 1=Male, 2=Female, 3=Herm)
     "orientation":"0", (0=N/A, 1=Hetero, 2=Homosexual, 3=Bisexual, 4=Omnisexual)
     "mateshipStatus":"2", (0=N/A, 1=Single uninterested, 2=Single casual, 3=Single permanent, 4=Mated open, 5=Mated closed)
     "country":"Austria",
     "city":"Vienna",
     "registrationDate":"long long ago",
     "description":"Bla"
     "iswatched":"false", (false = you are not watching this user, true = you are currently watching this user)
   }

For your own user (only if you're OTP-authenticated correctly) you receive additional data about your unread PMs and notifications:


   {
     "username":"Toumal",
     "useralias":"toumal", (This is the url-friendly username for username.sofurry.com profile addresses)
     "userID":"13",
     "profileViewCount":"1234",
     "submissionCount":"1234",
     "submissionViewCount":"1234",
     "commentCount":"1234",
     "commentPostedCount":"1234",
     "species":"Orca",
     "gender":"1", (0=N/A, 1=Male, 2=Female, 3=Herm)
     "orientation":"0", (0=N/A, 1=Hetero, 2=Homosexual, 3=Bisexual, 4=Omnisexual)
     "mateshipStatus":"2", (0=N/A, 1=Single uninterested, 2=Single casual, 3=Single permanent, 4=Mated open, 5=Mated closed)
     "country":"Austria",
     "city":"Vienna",
     "registrationDate":"long long ago",
     "description":"Bla",
     "iswatched":"false",
     "unreadPMCount":"12",
     "watchlistCount":"1234",
     "notification_voteCount":1,
     "notification_watchCount":1,
     "notification_favoriteCount":0,
     "notification_friendRequestCount":0,
     "notification_commentCount":4,
     "notification_adminCommentCount":0,
     "notification_shoutCount":0,
     "notification_forumPostCount":0,
     "notification_collaborationCount":0,
     "notification_subscribedFolderCount":0,
     "notificationTotalCount":6
   }

Get Submission Details

Request URL

   http://api2.sofurry.com/std/getSubmissionDetails

Parameters

* id = numerical ID of the desired submission. Mandatory field.

Returned data

   {
     "contentType":"1", (0=story, 1=art, 2=music, 3=journal, 4=photo)
     "title":"Battle Sheep",
     "description":"This is a description Yay!
   
   \nTest test
   
   \nblablabla",
     "fileName":"Toumal - Battle Sheep.jpg",
     "fileExtension":"jpg",
     "width":"1024",
     "height":"685",
     "contentSourceUrl":"http://someurl", (URL of the full size image, if applicable)
     "previewSourceUrl":"http://someurl", (URL of the 800px preview)
     "thumbnailSourceUrl":"http://someurl" (URL of the thumbnail)
     "isFavourite":false (only if you're OTP-authenticated correctly, else it will always be false)
   }

Get Shouts

Request URL

   http://api2.sofurry.com/api/getShouts

Parameters

* id = numerical ID of the desired user. Defaults to own user if omitted

Returned data

   {
     "entries":[
       {
         "id":"280640",
         "parentID":"-1",
         "username":"JayriAvieock",
         "userID":"189019",
         "date":"1333734740",
         "message":"rawr? you called :3"
       },
       {
         "id":"280628",
         "parentID":"280623",
         "username":"Toumal",
         "userID":"13",
         "date":"1333729895",
         "message":"Yes, I'd love that!"
       },
       {
         "id":"280623",
         "parentID":"-1",
         "username":"markshark",
         "userID":"142337",
         "date":"1333729622",
         "message":"Thanks for the favorites, mr Toumal. I wonder if we could get a picture together at some point ;-)"
       },
       {
         "id":"280542",
         "parentID":"-1",
         "username":"Rubberkitten",
         "userID":"32931",
         "date":"1333714929",
         "message":"hello :3."
       },
       {
         "id":"280381",
         "parentID":"-1",
         "username":"Fenndragon",
         "userID":"209900",
         "date":"1333670188",
         "message":"thanks for the watch, and kind words!"
       }
     ]
   }

Get Comments

Request URL

   http://api2.sofurry.com/api/getComments

Parameters

* id = numerical ID of the page of which the comments should be fetched. Mandatory field.

Returned data

   {
     "entries":[
       {
         "id":"249324",
         "parentID":"-1",
         "username":"Testuser11",
         "userID":"57129",
         "date":"1311249060",
         "message":"blablablablabla"
       },
       {
         "id":"249325",
         "parentID":"249324",
         "username":"Testuser11",
         "userID":"57129",
         "date":"1311249060",
         "message":"A reply"
       }
     ]
   }


Writing a comment

Request URL

   http://api2.sofurry.com/comment/saveComment

Parameters

* sfCommentAdditionalId = page ID of the submission this is a comment on
* sfCommentReplyTo = ID of the comment to reply to, empty if a new comment
* sfCommentReplyTextarea = Text message of the comment
* assignme = "true"

Returned data

   {
       "status":1, (0=error, 1=OK)
       "message":"" (Filled with html error message if status = 0)
   }


Writing a shout

Request URL

   http://api2.sofurry.com/comment/saveShout

Parameters

* sfCommentAdditionalId = user ID of the user on whose profile this shout is to be posted
* sfCommentReplyTo = ID of the shout to reply to, empty if a new shout
* sfCommentReplyTextarea = Text message of the shout
* assignme = "true"

Returned data

   {
       "status":1, (0=error, 1=OK)
       "message":"" (Filled with html error message if status = 0)
   }


Fetch list of PMs

Request URL

   http://api2.sofurry.com/user/pm/list?format=json

Parameters

* None

Returned data

   [  
       {  
           "id":"6385869",
           "fromUserID":"89189",
           "toUserID":"13",
           "fromUserName":"Someuser",
           "toUserName":"Yourname",
           "timestamp":"1430151997",
           "subject":"SoFurry Ambassadors",
           "status":"0", (0=Unread, 1=Read, 2=Replied)
           "threadID":"659073"
       },
       {  
           "id":"6380243",
           "fromUserID":"292333",
           "toUserID":"13",
           "fromUserName":"Someotheruser",
           "toUserName":"Yourname",
           "timestamp":"1430076550",
           "subject":"Something blabla",
           "status":"2",
           "threadID":"658820"
       },
   ...
   ]


Get contents of a PM

Request URL

   http://api2.sofurry.com/user/pm/view?id=12345&format=json

Parameters

* id = numerical ID of the desired PM.

Returned data

   {  
       "id":"6385869",
       "fromUserID":"89189",
       "fromUserName":"Someuser",
       "toUserID":"13",
       "toUserName":"Toumal",
       "timestamp":"1430151997",
       "subject":"SoFurry Ambassadors",
       "message":"Blah blah this is the main PM message contents",
       "status":"1",
       "parentID":"-1",
       "folder":"inbox",
       "isStar":"0", (Important PMs can be "starred")
       "todoState":"0", (Unused atm)
       "topParentID":"6385869", (ID of the initial PM in the conversation)
       "threadID":"659073"
   }

Send PM

Request URL

   http://api2.sofurry.com/user/pm/new

Parameters

* PrivateMessage[toUserName] = Your username
* PrivateMessage[subject] = Subject line
* PrivateMessage[message] = Actual message contents
* Send = "Send Message"


Returned data

None


Reply to PM

Request URL

   http://api2.sofurry.com/comment/savePM

Parameters

* sfCommentReplyTo = ID of the PM to reply to
* sfCommentReplyTextarea = Text message of the reply
* assignme = "true"

Returned data

   {
       "status":1, (0=error, 1=OK)
       "message":"" (Filled with html error message if status = 0)
   }