Deviant Login Shop  Join deviantART for FREE Take the Tour
Group Info Super Group Founded 12 Years ago Statistics 45 Members
338,663 Pageviews860 Watchers

Objective-C deviantART SDK

Mon Feb 10, 2014, 2:33 PM by Pickley:iconpickley:
We're happy to announce the release of version 1.0 of the Objective-C deviantART SDK. This SDK is a simple way to build great experiences using the deviantART API in your Mac or iOS apps.


The SDK requires iOS7 or OS X 10.9 and provides several classes for you to use and interact with:
  • DVNTAPIClient - The core of the SDK. This class provides the OAuth2 management along with core network calls.
  • DVNTAPIRequest - Provides simple wrapper methods around all API deviantART endpoints. If you find any that are missing, feel free to open a pull request to add them.

For the fastest integration, we recommend you use CocoaPods to install the SDK within your project, then simply import DVNTAPI.h with your codebase. DVNTAPI.h imports all the required headers for the SDK to function.

The Foundation

We have built the SDK upon the great foundation that is AFNetworking 2.0, a widely used networking library in the iOS community, this means that the SDK will work on the latest versions of Apple's operating systems, iOS7 and OS X 10.9. We believe this is the best choice as it will allow us not to be held back by the code of the past and allow us to move forward as needed.


To install the SDK within your project, use the below Podfile then run pod install:

platform :ios, '7.0'
pod "deviantART-SDK", "~> 1.0.0"


Atop AFNetworking, we built a layer of OAuth 2.0 abstractions to allow authentication and interaction with the deviantART API. With two method calls to DVNTAPIClient, you can be fully authenticated and ready to make calls to the API.

Simply set your client's ID and secret in the SDK in applicationDidFinishLoading:

[DVNTAPIClient setClientID:@"__CHANGE_ME__" clientSecret:@"__CHANGE_ME__"];
Then authenticate using your client details by calling:

[DVNTAPIClient authenticateFromController:self scope:@"basic" completionHandler:^(NSError *error) {
  if(!error && [DVNTAPIClient isAuthenticated]) {
      // App is fully authenticated with no errors
      // and ready to perform API calls
  } else {
      NSLog(@"Error: %@", error);

After authentication is completed, you can make calls to any API endpoint you need and the SDK will handle authentication for you.


Using DVNTAPIClient as a base, DVNTAPIRequest builds upon its basic GET/POST methods to provide simple methods to call upon any endpoint on the deviantART SDK. Here's an example of retrieving a delta from the API.

[DVNTAPIRequest deltaWithCursor:@"12345" offset:120 success:^(NSURLSessionDataTask *task, id JSON) {
       NSLog(@"JSON Response: %@", JSON);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
       NSLog(@"Error: %@", error);

DVNTAPIRequest covers all current API endpoints but if the need arises, you can use the GET/POST methods on DVNTAPIClient directly and authentication will still be handled completely by the SDK.


For further documentation on getting started using the SDK, check the README file on GitHub. More in-depth Apple style documentation can be found here.

Open Source

The deviantART SDK is open source on GitHub and released under the BSD license. We will be accepting pull requests for changes from you, the community. Guidelines for issues, coding style and pull requests can be found in the project's README file.

We have also submitted the SDK to be available via CocoaPods, the biggest dependency manager for Objective-C projects. This will allow even simpler integration of the SDK into your current or new project.

More Journal Entries

I prefer: 

106 deviants said dont care
72 deviants said july
57 deviants said september
56 deviants said june
51 deviants said may
44 deviants said august

Group Info

Super Group
Until Aug 13, 2014

Founded 12 Years ago
Oct 25, 2001


Group Focus
deviantART Related

45 Members
860 Watchers
338,663 Pageviews
Daily Pageviews


When DT finishes making a brand new deviantART feature, or just fixes a bug, we first run it on our top-secret staging server. When everything's ready to go live, we sync it!
  • muteor synced 6 hours, 8 minutes ago
  • micahgoulart synced 17 hours, 49 minutes ago
  • muteor synced 23 hours, 3 minutes ago
  • duraseb synced 1 day, 3 hours ago
  • yumeruby synced 1 day, 7 hours ago
  • DEVlANT synced 1 day, 20 hours ago
  • muteor synced 2 days, 4 hours ago
  • muteor synced 2 days, 5 hours ago
  • muteor synced 2 days, 5 hours ago
  • muteor synced 2 days, 5 hours ago
  • elhsmart synced April 11 12:13
Syncs Per Day


Add a Comment:
Half an hour ago the "simple-symbol" class was removed from the Message Center.  Is this a permanent change?  Is the "simple-symbol" class being phased out across the site?
fartprincess Feb 5, 2014  Professional Writer
Hi dAhub, sorry for the late response, but yes, this is a permanent change.
Thank you
logeg Jan 5, 2014  Hobbyist General Artist
Any chance the year-old bug with Windows touch-enabled devices and Chrome will be fixed? Or have you given up on that one? I mean this:…
milovanf Dec 26, 2013  Professional Digital Artist
I doubt this is a real place to tell my problem, but in last time, especially yesterday I got several times Error500   Internal Error. Is that a bug or...? Because when I do few times "refresh a page" it doesn't help, but when I exit from my browser and visit the same page again, it's open it with no problems. I thought it was my browser expired but it's not, I restart it and instal it again. Help?
DivinityArcane Nov 18, 2013  Professional General Artist

A few of the things that I've been working on have required displaying users avatars, and I've noticed that the API does not yet provide a method for acquiring the appropriate format/extension for the given user yet. For dAmn we use the bits sent to translate into one of three formats, which is fine and has worked well over the years. But, for off-site related things (like displaying quotes of users, information about them, or even just their avatar next to their name when referencing them) we have no method of obtaining the information needed. 

If possible, the easiest way (most likely, unless you want to add another endpoint to user) would be to allow deviant urls ( for oembed and simply return relevant information on that deviant; i.e. name, join date, pageviews(?), avatar url (format + cachebuster is a plus) and possibly other information such as comment count, deviation count, etc.

In any case, right now I only need a way to get avatar information without writing yet another page scraping method. And yes, by avatars I mean usericons. Any insight would be greatly appreciated.

DivinityArcane Nov 18, 2013  Professional General Artist
After asking $Pickley about oembed, I see that it's for deviations only. So the most viable endpoint would be /user/whois
LabLayers Nov 3, 2013  Student Interface Designer
Regarding the PHP code sample...

I'm getting "Fatal Error: No valid JSON response returned." after I successfully authenticate with I have the oauth2 library properly referenced along with fella.png. What did I do wrong?…

Seems our example is a little out of date with the updated client, I have created a quick gist that gets it working I will update docs properly when I have time.

I switched to using composer to get the dependencies in the gist as its easier.
LabLayers Nov 5, 2013  Student Interface Designer
Thanks for the heads up!

You may want to update line 11 to the updated URL found here:
Add a Comment: