Page Management

Learn how to create pages, update pages, and manage Page content.

Endpoints & Webhooks

Refer to each endpoint's reference documentation for parameter and permission requirements.

Creating Pages

Requirements

  • User Access Token
  • Page Fields:
    • about
    • category_enum
    • cover_photo with url
    • name
    • picture
  • manage_pages permissions

Sample Request

$fields = array(
);
$params = array(
  'name' => 'My Personal Blog',
  'category_enum' => 'PERSONAL_BLOG',
  'about' => 'Just trying some things with the API',
  'picture' => 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png',
  'cover_photo' => array('url' => 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png'),
  'location' => array('city' => 'Seattle', 'country' => 'US', 'state' => 'WA'),
  'address' => '1101 Dexter Ave N',
);
(new User(<USER_ID>_for_page))->createAccount(
  $fields,
  $params
);
fields = [
]
params = {
    'name': 'My Personal Blog',
    'category_enum': 'PERSONAL_BLOG',
    'about': 'Just trying some things with the API',
    'picture': 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png',
    'cover_photo': {'url':'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png'},
    'location': {'city':'Seattle', 'country':'US', 'state':'WA'},
    'address': '1101 Dexter Ave N',
}
User(user_id_for_page).create_account(
    fields=fields,
    params=params,
)
new User(user_id_for_page, context).createAccount()
  .setName("My Personal Blog")
  .setCategoryEnum("PERSONAL_BLOG")
  .setAbout("Just trying some things with the API")
  .setPicture("https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png")
  .setCoverPhoto("{\"url\":\"https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png\"}")
  .setLocation("{\"city\":\"Seattle\", \"country\":\"US\", \"state\":\"WA\"}")
  .setAddress("1101 Dexter Ave N")
  .execute();
user = FacebookAds::User.get(user_id_for_page)
user.accounts.create({
name: 'My Personal Blog',
category_enum: 'PERSONAL_BLOG',
about: 'Just trying some things with the API',
picture: 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png',
cover_photo: {'url':'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png'},
location: {'city':'Seattle', 'country':'US', 'state':'WA'},
address: '1101 Dexter Ave N',
})
fields = [
];
params = {
  'name' : 'My Personal Blog',
  'category_enum' : 'PERSONAL_BLOG',
  'about' : 'Just trying some things with the API',
  'picture' : 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png',
  'cover_photo' : {'url':'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png'},
  'location' : {'city':'Seattle', 'country':'US', 'state':'WA'},
  'address' : '1101 Dexter Ave N',
};
await (new User(<USER_ID>_for_page)).createAccount(
  fields,
  params
);

On success, Graph API responds with JSON containing the Post ID:

{
  "id": "2011725632410952"
}

Learn more

See the Reference documentation for more information on creating pages, including caveats about adding a location.

Updating Pages

Update a Page with new information.

Requirements

  • Your Page ID
  • User Access Token
  • Admin of the Page
  • manage_pages permissions

Sample Request

$fields = array(
);
$params = array(
  'description' => 'This is an awesome cafe!',
  'about' => 'about my interest',
  'website' => 'www.facebook.com',
  'phone' => '2061234567',
  'location' => array('city' => 'Seattle', 'country' => 'US', 'state' => 'WA'),
);
(new Page(<PAGE_ID>))->updateSelf(
  $fields,
  $params
);
fields = [
]
params = {
    'description': 'This is an awesome cafe!',
    'about': 'about my interest',
    'website': 'www.facebook.com',
    'phone': '2061234567',
    'location': {'city':'Seattle', 'country':'US', 'state':'WA'},
}
Page(<PAGE_ID>).api_update(
    fields=fields,
    params=params,
)
new Page(<PAGE_ID>, context).update()
  .setDescription("This is an awesome cafe!")
  .setAbout("about my interest")
  .setWebsite("www.facebook.com")
  .setPhone("2061234567")
  .setLocation("{\"city\":\"Seattle\", \"country\":\"US\", \"state\":\"WA\"}")
  .execute();
page = FacebookAds::Page.get(<PAGE_ID>)
page.description = 'This is an awesome cafe!'
page.about = 'about my interest'
page.website = 'www.facebook.com'
page.phone = '2061234567'
page.location = {'city':'Seattle', 'country':'US', 'state':'WA'}
page.save
fields = [
];
params = {
  'description' : 'This is an awesome cafe!',
  'about' : 'about my interest',
  'website' : 'www.facebook.com',
  'phone' : '2061234567',
  'location' : {'city':'Seattle', 'country':'US', 'state':'WA'},
};
await (new Page(<PAGE_ID>)).update(
  fields,
  params
);

On success, Graph API responds with JSON containing the Post ID:

{
  "success": true
}

Creating Page Posts

Requirements to post as a Page:

  • Your Page ID
  • Page Access Token
  • Admin of the Page
  • manage_pages and publish_pages permissions

Requirements to post as an Individual:

  • Your Page ID
  • User Access Token
  • Admin of the Page
  • publish_pages permissions

Sample Request to Post a Message

$fields = array(
);
$params = array(
  'message' => 'This is a test message',
);
$post = (new Page(<PAGE_ID>))->createFeed(
  $fields,
  $params
);
$post_id = $post->id;
$fields = array(
);
$params = array(
);
(new PagePost($post_id))->deleteSelf(
  $fields,
  $params
);
fields = [
]
params = {
    'message': 'This is a test message',
}
post = Page(<PAGE_ID>).create_feed(
    fields=fields,
    params=params,
)
post_id = post.get_id()
fields = [
]
params = {
}
PagePost(post_id).api_delete(
    fields=fields,
    params=params,
)
PagePost post = new Page(<PAGE_ID>, context).createFeed()
  .setMessage("This is a test message")
  .execute();
String post_id = post.getId();
new PagePost(post_id, context).delete()
  .execute();
page = FacebookAds::Page.get(<PAGE_ID>)
post = page.feed.create({
message: 'This is a test message',
})
post_id = post.id
print 'post_id:', post_id
page_post = FacebookAds::PagePost.get(post_id)
page_post.destroy({
})
fields = [
];
params = {
  'message' : 'This is a test message',
};
let post = await (new Page(<PAGE_ID>)).createFeed(
  fields,
  params
);
let post_id = post.id;
fields = [
];
params = {
};
await (new PagePost(post_id)).delete(
  params
);

On success, Graph API responds with JSON containing the Post ID:

{
  "id": 1353269864728879_1661203157268880"
}

Sample Request to Post a Photo

$api = Api::init($app_id, null, $page_access_token);
$fields = array(
);
$params = array(
  'url' => 'https://www.facebook.com/images/fb_icon_325x325.png',
  'published' => 'false',
);
$photo_to_be_post = (new Page($page_id))->createPhoto(
  $fields,
  $params
);
$photo_to_be_post_id = $photo_to_be_post->id;
$fields = array(
  'object_id',
);
$params = array(
  'message' => 'I have something good for you!',
  'attached_media' => array(array('media_fbid' =>  $photo_to_be_post_id)),
);
$feed_post_with_image = (new Page($page_id))->createFeed(
  $fields,
  $params
);
$feed_post_with_image_id = $feed_post_with_image->id;
$fields = array(
);
$params = array(
);
(new PagePost($feed_post_with_image_id))->deleteSelf(
  $fields,
  $params
);
FacebookAdsApi.init(access_token=page_access_token)
fields = [
]
params = {
    'url': 'https://www.facebook.com/images/fb_icon_325x325.png',
    'published': 'false',
}
photo_to_be_post = Page(page_id).create_photo(
    fields=fields,
    params=params,
)
photo_to_be_post_id = photo_to_be_post.get_id()
fields = [
    'object_id',
]
params = {
    'message': 'I have something good for you!',
    'attached_media': [{'media_fbid': photo_to_be_post_id}],
}
feed_post_with_image = Page(page_id).create_feed(
    fields=fields,
    params=params,
)
feed_post_with_image_id = feed_post_with_image.get_id()
fields = [
]
params = {
}
PagePost(feed_post_with_image_id).api_delete(
    fields=fields,
    params=params,
)
context = new APIContext(page_access_token).enableDebug(false);
Photo photoToBePost = new Page(page_id, context).createPhoto()
  .setUrl("https://www.facebook.com/images/fb_icon_325x325.png")
  .setPublished(false)
  .execute();
String photo_to_be_post_id = photoToBePost.getId();
PagePost feedPostWithImage = new Page(page_id, context).createFeed()
  .setMessage("I have something good for you!")
  .setAttachedMedia("[{\'media_fbid\': " + photo_to_be_post_id + "}]")
  .requestField("object_id")
  .execute();
String feed_post_with_image_id = feedPostWithImage.getId();
new PagePost(feed_post_with_image_id, context).delete()
  .execute();
FacebookAds::Session.default_session.access_token = page_access_token
page = FacebookAds::Page.get(page_id)
photo_to_be_post = page.photos.create({
url: 'https://www.facebook.com/images/fb_icon_325x325.png',
published: 'false',
})
photo_to_be_post_id = photo_to_be_post.id
print 'photo_to_be_post_id:', photo_to_be_post_id
feed_post_with_image = page.feed.create({
message: 'I have something good for you!',
attached_media: [{'media_fbid': photo_to_be_post_id}],
})
feed_post_with_image_id = feed_post_with_image.id
print 'feed_post_with_image_id:', feed_post_with_image_id
page_post = FacebookAds::PagePost.get(feed_post_with_image_id)
page_post.destroy({
})
bizSdk.FacebookAdsApi.init(page_access_token);
fields = [
];
params = {
  'url' : 'https://www.facebook.com/images/fb_icon_325x325.png',
  'published' : 'false',
};
let photo_to_be_post = await (new Page(page_id)).createPhoto(
  fields,
  params
);
let photo_to_be_post_id = photo_to_be_post.id;
fields = [
  'object_id',
];
params = {
  'message' : 'I have something good for you!',
  'attached_media' : [{'media_fbid': photo_to_be_post_id}],
};
let feed_post_with_image = await (new Page(page_id)).createFeed(
  fields,
  params
);
let feed_post_with_image_id = feed_post_with_image.id;
fields = [
];
params = {
};
await (new PagePost(feed_post_with_image_id)).delete(
  params
);

On success, Graph API responds with JSON containing the Post ID:

{
  "id": 1353269864728879_1661203157268880"
}

Sample Request to Post a Link

$fields = array(
);
$params = array(
  'link' => 'www.facebook.com',
);
$post = (new Page(<PAGE_ID>))->createFeed(
  $fields,
  $params
);
$post_id = $post->id;
fields = [
]
params = {
    'link': 'www.facebook.com',
}
post = Page(<PAGE_ID>).create_feed(
    fields=fields,
    params=params,
)
post_id = post.get_id()
PagePost post = new Page(<PAGE_ID>, context).createFeed()
  .setLink("www.facebook.com")
  .execute();
String post_id = post.getId();
page = FacebookAds::Page.get(<PAGE_ID>)
post = page.feed.create({
link: 'www.facebook.com',
})
post_id = post.id
print 'post_id:', post_id
fields = [
];
params = {
  'link' : 'www.facebook.com',
};
let post = await (new Page(<PAGE_ID>)).createFeed(
  fields,
  params
);
let post_id = post.id;

On success, Graph API responds with JSON containing the Post ID:

{
  "id": "1353269864728879_1661203157268880"
}

Updating Page Posts

Requirements

  • The Post ID of the Post you want to update
  • Page Access Token
  • Admin of the Page
  • publish_pages permissions

Sample Request to Update a Post

$fields = array(
);
$params = array(
  'message' => 'This is a test message',
);
$post = (new PagePost(<OBJECT_STORY_ID>))->updateSelf(
  $fields,
  $params
);
fields = [
]
params = {
    'message': 'This is a test message',
}
post = PagePost(<OBJECT_STORY_ID>).api_update(
    fields=fields,
    params=params,
)
PagePost post = new PagePost(<OBJECT_STORY_ID>, context).update()
  .setMessage("This is a test message")
  .execute();
page_post = FacebookAds::PagePost.get(<OBJECT_STORY_ID>)
page_post.message = 'This is a test message'
page_post.save
fields = [
];
params = {
  'message' : 'This is a test message',
};
let post = await (new PagePost(<OBJECT_STORY_ID>)).update(
  fields,
  params
);

On success, Graph API responds with JSON containing the Comment ID:

{
  "id": "1661203157268880_1661364040586125"
}

The following content is from the Webhooks product documentation. Please refer to the Webhooks documentation if you are unfamiliar with Webhooks.

Webhooks for Pages

Webhooks for Pages can send you real-time notifications of changes to your Pages. For example, you can receive real-time updates whenever users post to your feed, comment on a post, or like your posts.

To set up a Page Webhook:

  1. Set up your endpoint and configure the Webhooks product.
  2. Install your app using your Facebook page.

Setting Up Your Endpoint and Webhook Product

Follow our Getting Started guide to create your endpoint and configure the Webhooks product. During configuration, make sure to choose the Page object and subscribe to one or more of the Pages fields below.

FieldDescription

conversations

Notifies you when a change has occurred in a Page conversation thread.

feed

Notifies you when an Page's feed has changed; posts, likes, shares, etc.

messages

Notifies you when your page has received a messenger update.

Install Your App

Webhook notifications will only be sent if your Page has installed your Webhooks configured-app, and if the Page has not disabled the App platform in its App Settings. To get your Page to install the app, have your app send a POST request to the Page's subscribed_apps edge using the Page's acccess token.

Permissions

The Page's access token with the following permissions:

  • manage_pages

For example, if your Page had the id 145634995501895, you could have your app send a request like this:

Sample Request

curl -i -X POST \
  -d "access_token=page-access-token" \
  "https://graph.facebook.com/v2.11/1353269864728879/subscribed_apps"

Sample Response

{
  "success": "true"
}

To see which app's your Page has installed, send a GET request instead:

Sample Request

GET graph.facebook.com/145634995501895/subscribed_apps

Sample Response

{
  "data": [
    {
      "category": "Business",
      "link": "https://my-clever-domain-name.com/app",
      "name": "My Sample App",
      "id": "145634995501895"
    }
  ]
}

If your Page has not installed any apps, the API will return an empty data set.

Graph API Explorer

If you don't want to install your app programmatically, you can easily do it with the Graph API Explorer instead:

  1. Select your app in the Application dropdown menu. This will return your app's access token.
  2. Click the Get Token dropdown and select Get User Access Token, then choose the manage_pages permission. This will exchange your app token for a User access token with the manage_pages permission granted.
  3. Click Get Token again and select your Page. This will exchange your User access token for a Page access token.
  4. Change the operation method by clicking the GET dropdown menu and selecting POST.
  5. Replace the default me?fields=id,name query with the Page's id followed by /subscribed_apps, then submit the query.

Common Uses

Getting Page Feed Details

Your app can subscribe to a Page's Feed and get notified anytime any Feed-related change occurs. For example, here's a notification sent when a User posted to the 1353269864728879 Page.

Sample Webhook Response

[
  {
    "entry": [
      {
        "changes": [
          {
            "field": "feed",
            "value": {
              "from": {
                "id": "156407155145863",
                "name": "Cinderella Hoover"
              },
              "item": "post",
              "post_id": "1353269864728879_1611108832278313",
              "verb": "add",
              "created_time": 1520544814,
              "is_hidden": false,
              "message": "It's Thursday and I want to eat cake."
            }
          }
        ],
        "id": "1353269864728879",
        "time": 1520544816
      }
    ],
    "object": "page"
  }
]

Use the post_id from the notification to comment on that Page post.

Sample API Request

curl -i -X POST \
  -d "message=I%20want%20chocolate%20cake%20!" \
  -d "access_token=page-access-token" \
  "https://graph.facebook.com/v2.11/1353269864728879_1611108832278313/comments"

Sample API Response

{
  "id": "1611108832278313_1611111875611342"
}

Getting Conversation Details

Your app can subscribe to a Page's conversation and get notified anytime a change occurs in a conversation thread involving your Page. You received a notification that a User sent your Page a message.

Sample Webhook Response

[
  {
    "object": "page",
    "entry": [
      {
        "id": "1353269864728879",
        "time": 1520547127,
        "changes": [
          {
            "value": {
              "page_id": 1353269864728879,
              "thread_id": "t_100023297371310"
              "scoped_thread_key": "t_100023297371315"
            },
            "field": "conversations"
          }
        ]
      }
    ]
  }
]

Use the thread_id to get the user's message.

Starting April 4, 2018, we have a new thread identifier, scoped_thread_key. Both scoped_thread_key and thread_id values will work for all related endpoints. After 90 days, the scoped_thread_id and thread_id values will be the same.

Please see the Changelog for more information.

Sample API Request to View the User's Message

GET graph.facebook.com/t_100023297371310
  ?fields=messages{message}
  &access_token=page-access-token

Sample API Response

{
  "messages": {
    "data": [
      {
        "message": "Hi Ash Cat Page, it's Cinder!",
        "id": "m_mid.$cAASUMsyJZYFoOPEoF1iB6vfi8DvU"
      }
    ]
  }
}

Once you know what the message says, you can reply to it.

Sample API Request to Reply to the User's Message

curl -i -X POST \
  -d "message=Hi%20Cinder%2C%20it's%20Ash%20Cat%20Page!" \
  -d "access_token=page-access-token" \
  "https://graph.facebook.com/v2.11/t_100023297371310/messages"

Sample API Response

{
  "id": "m_mid.$cAASUMsyJZYFoOP0lB1iB7fcj_y8v",
  "uuid": "mid.$cAASUMsyJZYFoOP0lB1iB7fcj_y8v"
}