---
title: "How to Keep One URL While an Agent Updates a Report, and Keep the Old Versions"
slug: /blog/same-url-version-history
publishedAt: "2026-10-16"
updatedAt: "2026-10-16"
author: ott
description: "Publish once, then tell the agent to update the same page. The URL stays the same, earlier versions stay available, and a version check stops overwrites. Prompts, a GitHub Actions step, and retention for each plan. Checked 16 October 2026."
---

# How do you keep one URL while an agent updates a report, and keep the old versions?

> **TL;DR:** Publish the first version once. Then update that artifact, and do not publish a new one. In Display (display.dev), the docs workspace for agents and people, you ask the agent to update the page at the same link. The agent sends the artifact's short ID and the version it last read. The URL does not change, so bookmarks and Slack links continue to work. Earlier versions stay in the version list, where you can open, download or roll back to them. Solo keeps 10 versions, Pro keeps 50 and Enterprise keeps all of them. Free keeps the latest version only. If someone else updated the artifact first, the version check stops the overwrite.

Display is our product. An artifact is one HTML or Markdown file that Display publishes at its own URL. We checked the vendor facts on each vendor's own pages on 16 October 2026.

---

## Why a new URL for each run causes problems

Many setups give each run its own link. A new upload to a file host, a new deploy preview and a new chat attachment all do this. Four things stop working:

- **Bookmarks and links.** A link in a ticket, a Slack message or a Notion page points to the old run.
- **Comments.** Feedback stays on the old copy. The new copy starts with no comments.
- **Trust.** Readers do not know which copy is the current one.
- **Access.** Each new link needs its own sharing settings.

One URL solves all four. The link always shows the latest version. The sharing settings stay the same.

---

## What you tell the agent

**Publish the first version.** Say: "Publish report.html to Display as 'Pipeline report' for my company." The agent returns the link. The short ID is in the link. In `https://acme.dsp.so/YQyXggrM-pipeline-report`, the short ID is `YQyXggrM`.

**Publish the next version.** Ask the agent to update the page at the same link with the new report.html. The agent reads the current version first, then publishes the next one. Visibility and invited people stay the same unless you ask the agent to change them.

**Change one passage only.** Say: "On the Pipeline report page, change 'Draft' to 'Approved'."

**From MCP.** The `publish` tool takes `short_id`, `base_version` and `content`, or an `upload_id` from `create_upload` for a large file. The `edit` tool takes `short_id`, `base_version`, `old_text` and `new_text` for one passage.

An update keeps the format of the artifact. A Markdown artifact takes `.md` updates. An HTML artifact takes `.html` updates. To change the format, publish a new artifact.

---

## A GitHub Actions step

This job builds the report on a schedule and publishes it as the next version. Put the short ID in the repository variable `DISPLAY_ARTIFACT_ID` and the API key in the secret `DISPLAYDEV_API_KEY`.

```yaml
name: Weekly pipeline report

on:
  schedule:
    - cron: "0 6 * * 1"

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 22 }
      - run: npm ci
      - run: npm run build:report
      - run: |
          AUTH="Authorization: Bearer $DISPLAYDEV_API_KEY"
          API="https://api.display.dev/v1/artifacts/${{ vars.DISPLAY_ARTIFACT_ID }}"
          BASE_VERSION=$(curl -sf -H "$AUTH" "$API" | jq -r .currentVersion)
          curl -sf -X PUT "$API" -H "$AUTH" -H "If-Match: \"v$BASE_VERSION\"" -F file=@dist/report.html
        env:
          DISPLAYDEV_API_KEY: ${{ secrets.DISPLAYDEV_API_KEY }}
```

The `If-Match` header carries the version that the job read. Read the version immediately before the update. If another publish happens between the read and the update, the API refuses the update. Run the job again. [Publish from CI/CD](/docs/ci-cd) shows the same job with the CLI.

---

## An agent prompt

```text
Every Monday, make the pipeline report again. Publish it to the Display artifact
<shortId> as a new version, keep the access setting, and post the link in #sales.
```

Replace `<shortId>` with the short ID of your artifact. The agent needs Display connected and a way to post to Slack. For a full scheduled setup, read [Claude Code routine for a weekly report](/blog/claude-code-routine-weekly-report).

---

## Keep the build separate from the publish step

Use two steps. The first step builds the file. The second step publishes it. If the build fails, the publish step does not start, and the last good report stays at the URL. Do not let an agent write into the artifact while it still works on the report. Let it finish a file, check the file, and then publish it.

---

## What happens on a conflict

The base version is the version that you edited. If the artifact has a newer version, the update stops and reports a version conflict. It does not overwrite.

1. Ask the agent to read the newer version.
2. Apply your change to that version.
3. Ask the agent to publish again from the new version.

---

## Roll back

On the artifact page in the dashboard, the **Versions** list lets you open or download an earlier retained version. Select **Rollback** next to a version to restore it. You can link to one version with the `/_v/<n>` path suffix, for example `https://acme.dsp.so/abc123-quarterly-report/_v/2`. An agent can also read an older version.

---

## Version retention by plan

| Plan       | Price             | Retained versions |
| ---------- | ----------------- | ----------------- |
| Free       | €0                | Latest only       |
| Solo       | €15 a month       | 10                |
| Pro        | €49 a month       | 50                |
| Enterprise | From €499 a month | Unlimited         |

When a plan keeps 10 versions and the agent publishes version 11, Display deletes the oldest version. Prices exclude VAT. Read [Plans and limits](/docs/limits).

---

## How it compares

| Approach                 | Same URL after an update                      | Earlier versions                                                                                   | Overwrite check          | Comments tied to a version                                |
| ------------------------ | --------------------------------------------- | -------------------------------------------------------------------------------------------------- | ------------------------ | --------------------------------------------------------- |
| New upload to a new link | No                                            | Old links still exist, with no relation to the new one                                             | No                       | No                                                        |
| Git and a static host    | Yes, after a commit and a build               | Git history                                                                                        | Git merge rules          | No                                                        |
| Cloudflare Pages         | Yes. The production URL uses the project name | You can roll back to an earlier production deployment                                              | No                       | No                                                        |
| Netlify                  | Yes                                           | Netlify keeps deploys for 30 days, or 90 days on paid plans. You can publish an older deploy again | No                       | No                                                        |
| Stacktree                | Yes. The URL stays the same                   | Yes. The agent can list versions and restore one at the same URL                                   | Not stated in its docs   | Yes. A new revision resolves the comments that it answers |
| **Display**              | **Yes**                                       | **10, 50 or unlimited, by plan**                                                                   | **Yes. A version check** | **Yes. Each discussion records its starting version**     |

Stacktree also keeps versions, and it has a passcode and link expiry. It fits a one-off client link. Display adds the version check, company sign-in and organization ownership.

---

## When another tool is better

- **A public site that a build pipeline already deploys.** Cloudflare Pages or Netlify fit better. You already have the build.
- **Full source history with diffs and review.** Use Git. Display keeps versions of the published file, not a code history.
- **A passcode or an expiry date on the link.** Stacktree has them. Display does not.

---

## FAQ

**Do comments stay after an update?**

Yes. Each discussion records the passage and the version where it started. If the passage is not in the current version, the reader selects **Open that version** to see the original context. Read [How an agent reads review comments](/blog/agent-reads-review-comments).

**Does the URL change when I rename the artifact?**

The slug in the URL changes to match the new name. Old URLs continue to work through the short ID. The short ID does not change.

**Do viewers see the new version at once?**

Viewers who have the artifact open get a **Refresh to vN** action. The agent can also refresh open tabs when the new version is ready. An open comment form delays that refresh. Use automatic refresh during your own work, and leave it off during a review so that readers choose when to refresh.

**Does an update change who can open the artifact?**

No. Visibility and invited people stay the same unless you ask the agent to change them.

**What is the size limit?**

Free allows 10 MB for each artifact. Solo, Pro and Enterprise allow 50 MB. Read [Plans and limits](/docs/limits).

**Can I see who published each version?**

Yes. Display records who published each version. A CI publish can carry a label such as `ci-deploy` for the audit log. Read [Publish from CI/CD](/docs/ci-cd).

**Related:** [Update an artifact](/docs/update-artifact) · [Edit an artifact in your browser](/docs/edit-artifacts) · [Send a report as a link, not a PDF](/blog/send-report-as-link-not-pdf) · [AI reports](/ai-reports)
