> ## Documentation Index
> Fetch the complete documentation index at: https://docs.shootbin.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Upload photo revisions and track history

> Upload a new version of a photo to replace the current one. The previous version is archived automatically so you can compare or restore it later.

A revision is a new version of an existing photo. When a client leaves notes on a photo and you make edits in post-production, you upload the revised file as a revision rather than a separate upload. Shootbin automatically archives the previous version and replaces the live photo with the new file, keeping the full version history intact so you and your client can compare versions and restore earlier ones if needed.

## What happens when you upload a revision

* The current live photo is archived as a revision entry.
* The uploaded file becomes the new live version.
* Any annotations (notes) that were on the previous live photo are removed from the new current photo.
* The approval state is reset, the photo returns to a pending state and the client needs to re-approve the revised version.

<Info>
  Resetting approval on upload is intentional: a revised photo needs a fresh sign-off from the approver. If the client had already approved the original, the revision starts the review cycle again.
</Info>

## Upload a revision

<Steps>
  <Step title="Open the photo">
    Navigate to the photo you want to revise. Click the photo thumbnail in the album to open the photo detail view.
  </Step>

  <Step title="Find the revision upload section">
    In the photo detail view, locate the revision panel on the right-hand side. If no revision has been uploaded yet, you will see an option to upload the first revision.
  </Step>

  <Step title="Select your revised file">
    Click the file input in the revision panel and select the revised image from your computer.
  </Step>

  <Step title="Submit the revision">
    Click **Upload revision**. Shootbin archives the current version and replaces it with your uploaded file.
  </Step>
</Steps>

<Danger>
  Because Shootbin manages your entire flow, from shoot to delivery, it's important that you upload your revision files in the same quality and size you would deliver to the client. At the end of the flow, these are also the photos your client can download.
</Danger>

<Note>
  Only project owners can upload revisions. Approvers and guests cannot upload revised files.
</Note>

## View revision history

Once at least one revision has been uploaded, the photo detail view shows a **Revision history** section listing all archived versions. Each entry shows the revision number and upload timestamp.

Click any revision entry to view that version of the photo. You are viewing an archived (non-live) version while browsing revision history, a banner in the photo view indicates this.

## Restore an earlier revision

If you need to roll back to a previous version of a photo, you can restore any archived revision.

<Steps>
  <Step title="Open the revision history">
    In the photo detail view, scroll to the revision history section and click the revision you want to restore.
  </Step>

  <Step title="Restore the revision">
    Click **Restore this version**. Shootbin makes the selected revision the new live photo and archives the current version.
  </Step>
</Steps>

<Warning>
  Restoring a revision resets the approval state, just like uploading a new revision. The photo will need to be re-approved by the client.
</Warning>

## Remove the latest revision

If the most recent revision was uploaded in error, owners can delete it from the photo detail view. This removes the latest revision and reverts the photo to the previous live version.

## API

You can also upload revisions programmatically using the Shootbin API.

```bash theme={null}
POST /api/projects/{project}/albums/{album}/photos/{photo}/revisions
```

Include the revised file as a `revision` field in a `multipart/form-data` request:

```bash theme={null}
curl -X POST https://your-domain/api/projects/PROJECT_ID/albums/ALBUM_ID/photos/PHOTO_ID/revisions \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json" \
  -F "revision=@/path/to/revised-photo.jpg"
```

The same rules apply through the API: the previous live photo is archived, annotations are cleared from the new current photo, and the approval state is reset.

<Tabs>
  <Tab title="Success response">
    On success the API returns the updated photo object with the new `revision_uploaded_at` timestamp and `approved_at` set to `null`.
  </Tab>

  <Tab title="Required permissions">
    The API token must have `update` (or `post:update`) permission. The authenticated user must be the project owner.
  </Tab>
</Tabs>
