Using the Graph API, iOS

Use the Graph API to get data in and out of Facebook's social graph.

This includes:

  • Fetching profile information to provide social context.
  • Fetching user information such as their likes or photos.
  • Publish posts (including videos or photos) to Facebook.
  • Publishing open graph stories to Facebook.
  • For more features, see the Graph API documentation.

This guide describes how you work with the Graph API using the Facebook SDK for iOS.


Calling the Graph API requires someone to login to your app via Facebook and authorize permissions for your app.

For example, if you want to fetch someone's email address, your app must be authorized for the email permission. Be sure you are familiar with:

You also need your development environment set up for the iOS SDK and your app set up, see iOS, Getting Started Guide.

Fetch User Data

The SDK has two classes to work with the Graph API: FBSDKGraphRequest and FBSDKGraphRequestConnection which are similar to the Foundation framework's NSURLRequest and NSURLRequestConnection.

To use the FBSDKGraphRequest you provide the request with a specific Graph API endpoint. Then call FBSDKGraphRequestConnection to start the request and process its completion.

For convenience, the SDK has a startWithCompletionHandler: method on FBSDKGraphRequest to implicitly create a FBSDKGraphRequestConnection for you.

For example to fetch the profile information for the person currently logged into your app, make this call:

if ([FBSDKAccessToken currentAccessToken]) {
   [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil]
    startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
      if (!error) {
         NSLog(@"fetched user:%@", result);

Batch Requests

In Graph API you can make batch requests in a single HTTP request, see Graph API, Making Batch Requests.

With the SDK, you can construct multiple requests and add them to the same FBSDKGraphRequestConnection instance. You should batch requests whenever possible to minimize network traffic.

For example here we request someone's Likes:

if ([[FBSDKAccessToken currentAccessToken] hasGranted:@"user_likes"]) {
  FBSDKGraphRequest *requestMe = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"me" parameters:nil];
  FBSDKGraphRequest *requestLikes = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"me/likes" parameters:nil];
  FBSDKGraphRequestConnection *connection = [[FBSDKGraphRequestConnection alloc] init];
  [connection addRequest:requestMe
           completionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
   //TODO: process me information
  [connection addRequest:requestLikes
            completionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    //TODO: process like information
  [connection start];

You can also specify batch parameters with the addRequest:completionHandler: overloads, which includes the ability to create a batch with dependent requests.

Share Photos and Videos

While you can always manually create FBSDKGraphRequests to work with the Graph API endpoints, the Facebook SDK for iOS simplifies sharing photos and videos with FBSDKShareKit.framework. For example, to share a photo:

// Assuming you have a UIImage reference
UIImage *someImage = ...;
FBSDKSharePhotoContent *content = [[FBSDKSharePhotoContent alloc] init]; = @[[FBSDKSharePhoto photoWithImage:someImage userGenerated:YES] ];

// Assuming self implements <FBSDKSharingDelegate>
[FBSDKShareAPI shareWithContent:content delegate:self];

You can also share videos using the FBSDKShareVideoContent type. See the Sharing on iOS.

Delete Objects

You can also delete objects that your app created by sending a DELETE request with the object's ID as the graph path.

For example, imagine you published a photo to a Page and received an ID of “1234”. The following code would delete the photo:

if ([[FBSDKAccessToken currentAccessToken] hasGranted:@"pages_manage_posts"]) {
  [[[FBSDKGraphRequest alloc]
  startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    if (!error) {
      NSLog(@"Deleted photo”);

Debugging Tips

You can experiment and test your requests with the Graph API Explorer.

You can also enable Graph API debug mode, see iOS SDK Troubleshooting, Graph API Debug Mode.