Other ways in

HTTP API

A key and a POST. Everything the other paths do, they do through this.

There is no SDK and nothing to install. Every endpoint takes Authorization: Bearer pf_your_key and speaks JSON.

Publish

POST https://app.peerforge.app/api/publish
{ "title": "Q3 plan", "body": "<html>…", "contentType": "text/html" }

→ { "url", "shortId", "versionNo", "comments": { … } }

Publish a new version

POST https://app.peerforge.app/api/publish
{ "id": "A1CIBlz4", "baseVersion": 2, "title": "Q3 plan", "body": "…" }

A stale baseVersion is refused with 409 and the version to retry from.

Read

GET https://app.peerforge.app/api/artifacts/<shortId>/source
GET https://app.peerforge.app/api/artifacts/<shortId>/comments
GET https://app.peerforge.app/api/artifacts/<shortId>

Share

PATCH https://app.peerforge.app/api/artifacts/<shortId>/access
{ "visibility": "domain", "allowedDomains": ["acme.com"] }

Named and domain lists are replaced wholesale, so removing somebody means sending the list without them.

Without an account

POST https://app.peerforge.app/api/publish/anonymous
{ "title": "…", "body": "…", "contentType": "text/html" }

→ { "url", "claimUrl", "expiresAt" }

No key. Ten an hour from one network, and it expires in thirty days unless the claim link is used.