Uploading Photos

This is the specification for building photo uploader applications.

It works outside the normal Flickr API framework because it involves sending binary files over the wire.

Uploading apps can call the flickr.people.getUploadStatus method in the regular API to obtain file and bandwidth limits for the user.


Photos should be POSTed to the following URL:



This method requires authentication with 'write' permission.

For details of how to obtain authentication tokens and how to sign calls, see the authentication api spec. Note that the 'photo' parameter should not be included in the signature. All other POST parameters should be included when generating the signature.


The file to upload.
title (optional)
The title of the photo.
description (optional)
A description of the photo. May contain some limited HTML.
tags (optional)
A space-seperated list of tags to apply to the photo.
is_public, is_friend, is_family (optional)
Set to 0 for no, 1 for yes. Specifies who can view the photo. If omitted permissions will be set to user's default
safety_level (optional)
Set to 1 for Safe, 2 for Moderate, or 3 for Restricted. If omitted or an invalid value is passed, will be set to user's default
content_type (optional)
Set to 1 for Photo, 2 for Screenshot, or 3 for Other. If omitted , will be set to user's default
hidden (optional)
Set to 1 to keep the photo in global search results, 2 to hide from public searches. If omitted, will be set based to user's default

Example Response

When an upload is successful, the following xml is returned:


photoid is the id of the new photo. This response is formatted in the REST API response style.

Error Codes

If the upload fails, a REST API error response is returned. The following error codes are possible:

0: Video uploads are temporarily disabled
2: No photo specified
The photo required argument was missing.
3: General upload failure
The file was not correctly uploaded.
4: Filesize was zero
The file was zero bytes in length.
5: Filetype was not recognised
The file was not of a recognised image format.
6: User exceeded upload limit
The calling user has reached their monthly bandwidth limit.
7: User exceeded video upload limit
8: Filesize was too large
9: Duplicate photo/video detected
The uploaded photo or video was identified as a duplicate within the user's account. Only applies if dedup_check = 1 or dedup_check = 2. Will also return duplicate_photo_id and duplicate_photo_status values
10: Not a valid url to upload from
The external_image_link URL is not a valid flickr farm URL
11: Fetch from external image failed
A valid image could not be fetched from the external_image_link URL
12: Not a valid photo id to clone meta data from
The photo id specified in the clone_meta_from_photo_id parameter is not valid
13: The clone photo does not belong to the uploader
The photo id specified in the clone_meta_from_photo_id parameter does not belong to the uploading user
14: Auto Upload disabled for Non pro User/Server at capacity
The upload is not processed either due to capacity limits on the flickr side, or because the upload appears to be from a desktop uploadr (i.e. bulk = 1) and the user is not a pro. non_pro_desktop_upload_wait_time parameter will be included in the return with the number of seconds the client should wait before retrying
95: SSL is required
SSL is required to access the Flickr API.
96: Invalid signature
The passed signature was invalid.
97: Missing signature
The call required signing but no signature was sent.
98: Login failed / Invalid auth token
The login details or auth token passed were invalid.
99: User not logged in / Insufficient permissions
The method requires user authentication but the user was not logged in, or the authenticated method call did not have the required permissions.
100: Invalid API Key
The API key passed was not valid or has expired.
105: Service currently unavailable
The requested service is temporarily unavailable.
106: Write operation failed
The requested operation failed due to a temporary issue.
116: Bad URL found
One or more arguments contained a URL that has been used for abuse on Flickr.


When a set of photos have been uploaded, direct the user to this url:


...where "1,2,3" is a comma separated list of successful upload ids.