artishare

Publish a self-contained HTML or Markdown page, get an unguessable link, share it. No account. Push updated content under the same key and it becomes a new version at the same URL.

Publish something

One request. content is the body of your page — no <html> or <head> needed.

curl -X POST https://artifact.optimasolutions.io/api/artifacts \
  -H 'content-type: application/json' \
  -d '{
    "title": "Q3 Revenue",
    "favicon": "📊",
    "content": "<h1>Revenue</h1><p>Up 12% on the quarter.</p>"
  }'

You get back the share link and your one-and-only edit token:

{
  "id": "bg7m3gvh836jmats",
  "url": "https://artifact.optimasolutions.io/a/bg7m3gvh836jmats",
  "version": 1,
  "edit_token": "kQ8x..."
}
Save the edit token now. It is shown once and never again. Without it the artifact can still be viewed by anyone with the link, but it can never be updated or deleted.

Send "kind": "markdown" to write Markdown instead of HTML.

Publish an update

Same key, same link — the content becomes version 2. Whoever already has your link sees the new version on refresh.

curl -X PUT https://artifact.optimasolutions.io/api/artifacts/$ID \
  -H "authorization: Bearer $EDIT_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"label": "fixed the chart", "content": "<h1>Revenue</h1><p>Up 14%.</p>"}'

Older versions stay reachable forever at their own pinned URLs (/a/$ID/v/1/), so a link you shared to a specific version keeps showing what you shared. title, description and favicon are only changed when you include them.

Changed your mind? Point the key back at an earlier version:

curl -X POST https://artifact.optimasolutions.io/api/artifacts/$ID/rollback \
  -H "authorization: Bearer $EDIT_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"version": 1}'

Publish with images and CSS

Send it as multipart. The filename becomes the path inside your artifact, so relative references like <img src="assets/logo.png"> resolve.

curl -X POST https://artifact.optimasolutions.io/api/artifacts \
  -F 'title=Bundle' \
  -F 'entry=@index.html' \
  -F 'asset=@style.css' \
  -F 'asset=@logo.png;filename=assets/logo.png'

Paths are sanitised: no ../, no absolute paths, no dotfiles, at most 8 levels deep. A leading v/ is rejected because it collides with version URLs.

What happens to your HTML

You sendYou get
A fragment (<h1>...)Wrapped in a page skeleton: CSS reset, light/dark theming with a toggle, your emoji favicon, prose styles for tables and code
A full document (<!doctype html>)Served byte-for-byte. Nothing injected
MarkdownRendered (tables, footnotes, task lists, smart quotes) then wrapped

Every endpoint

MethodPathNeedsDoes
POST/api/artifactsPublish; returns the edit token
GET/api/artifacts/{id}linkMetadata and version history
PUT/api/artifacts/{id}tokenNew version under the same key
DEL/api/artifacts/{id}tokenDelete the artifact and all versions
GET/api/artifacts/{id}/versionslinkVersion history
DEL/api/artifacts/{id}/versions/{n}tokenPrune one old version
POST/api/artifacts/{id}/rollbacktokenRepoint the key at version n
GET/a/{id}/linkThe current version, rendered
GET/a/{id}/v/{n}/linkA pinned, immutable version
GET/a/{id}/{path}linkAn asset of the current version
GET/healthLiveness

The token goes in Authorization: Bearer <token> or X-Edit-Token. The live version cannot be deleted — roll back first. Version numbers are never reused, so a pruned version's URL stays dead rather than later resolving to different content.

Limits