Media Operations
resource: media — upload a photo or video to the Page by URL
URL-based uploads only: both operations on this page pass a public URL to Graph, which
then fetches the file itself — the node never streams file bytes through your workflow. The source URL
must be reachable by Facebook's servers (no authentication, no localhost/internal-network addresses).
uploadImage
Uploads a photo to the Page via Graph API POST /{pageId}/photos.
| Field | Type | Required | Description |
|---|---|---|---|
pageId | text | ✓ Yes | Target Facebook Page ID. |
imageUrl | text | ✓ Yes | Public URL of the image to fetch and post. |
caption | text | No | Optional caption (max 1,024 chars). |
Example response:
{
"mediaId": "112233445566",
"permalink": "",
"createdTime": "2026-07-29T12:00:00.0000000Z"
}
permalink is always empty on this operation: the Graph
/{pageId}/photos create call doesn't return a permalink URL in its response — only the new
photo's mediaId. Fetch /{mediaId}?fields=link separately if you need the
public URL.
uploadVideo
Uploads a video to the Page via Graph API POST /{pageId}/videos.
| Field | Type | Required | Description |
|---|---|---|---|
pageId | text | ✓ Yes | Target Facebook Page ID. |
videoUrl | text | ✓ Yes | Public URL of the video to fetch and post (sent to Graph as file_url). |
description | text | No | Optional description (max 1,024 chars). |
Example response:
{
"mediaId": "998877665544",
"permalink": "",
"createdTime": "2026-07-29T12:00:00.0000000Z"
}
Uploads take time: the media services use a 120-second HTTP timeout (versus 30 seconds
for every other resource) because Graph fetches and transcodes the source file synchronously before
responding. A large video may still exceed this window — see
Troubleshooting for what a timeout looks like and how to handle
it.