Developer portal

dev.pluronymous.com measured 2026-11-10 no SLA

This is the consumer portal for the Pluronymous API. Every route below answered a real request from outside the network on 2026-11-10. Each row carries the code it returned and the proof it wants. A row marked not probed is a route that exists in configuration and was not called.

01Get a key before you call anything

1 · Identity

Ask for a name at sso.pluronymous.com. The name maps to a public key through NIP-05. That is all the name service does today: every other path there answers 503.

2 · Join request

POST your public key to /join/api/request. The route is public and origin-checked. A request enters a ledger. It is not a membership.

3 · Approval

The operator approves or denies by hand. Approval adds you to a scope. Your standing then comes from a signed relation, never from a role name.

02Standing, and the verb each tier holds

TierProof the edge checksVerbsRefusal you get
publicnoneliveness, health, join request, join statusnone, the route answers
signed guesta signed event from a known keyread your own join statusNPUB_MALFORMED on a bad key
memberNIP-98 on HTTP, NIP-42 on the socketrelay query, relay events, content store, content retrievemissing Nostr auth, DSTOR_GATE_DENIED
operatora bearer token that never leaves the hostpending list, approve, denyOPERATOR_AUTH_REQUIRED

A caller that asks for a verb above its tier receives a named refusal with a code. The edge does not answer 404, because a 404 reads as a broken service.

03Endpoint catalog, measured

Identity · sso.pluronymous.com

RouteMethodAuthAnswer on 2026-11-10
/.well-known/nostr.jsonGETnone200 the name map, 2062 bytes
/GETnone503 Pluronymous SSO is not deployed yet.

Transport · sys.pluronymous.com

RouteMethodAuthAnswer on 2026-11-10
/wsWS upgradeNIP-42426 answered a plain GET, which is correct: the route wants an upgrade
/ws/queryPOSTNIP-42401 {"error":"missing Nostr auth"}
/ws/eventsPOSTNIP-42not probed same handler as /ws/query
/eventsPOSTevent signature400 invalid event: missing id/pubkey/sig
/_livenessGETnone200 {"ok": true}
/liveGETnone404 closed on purpose until a sanitized source lands

Content · sys.pluronymous.com

RouteMethodAuthAnswer on 2026-11-10
/dstor/healthGETnone200 {"ok": true, "engine": "dstor-http-gateway"}
/dstor/storePOSTNIP-98, member keynot probed writes an object and returns its address
/dstor/sha256/<64 hex>GETNIP-98, member key403 DSTOR_GATE_DENIED without a signature

The health route carries no topology and no inventory count. A caller that asks for detail gets detail only from inside the container network.

Membership · home.pluronymous.com/join/api/

RouteMethodAuthAnswer on 2026-11-10
livenessGETnone200 counts: seen, pending, approved, denied
requestPOSTnone, origin-checkednot probed writes one ledger row; a request is not a membership
status?npub=GETnone400 NPUB_MALFORMED on a bad key. A real key answers its own state
coordinates?npub=GETnonenot probed the public pack. The full pack needs an approved key
ladderGETnonenot probed the tier list the service holds
pendingGETbearer token401 OPERATOR_AUTH_REQUIRED
approve, denyPOSTbearer tokennot probed operator only

04Two calls, written out

Store an object

curl -X POST https://sys.pluronymous.com/dstor/store \
  -H "Authorization: Nostr <base64 of a signed kind-27235 event>" \
  -H "Content-Type: text/plain" \
  --data-binary @note.txt

The answer carries the object address. The address is the sha256 of the bytes, so the same bytes always land on the same address.

Retrieve it

curl https://sys.pluronymous.com/dstor/sha256/<64 hex> \
  -H "Authorization: Nostr <base64 of a signed kind-27235 event>"

A good answer carries X-dSTOR-SHA256 and X-dSTOR-Verified: true. Check the hash on your side. Do not trust the header alone.

Query the relay

wss://sys.pluronymous.com/ws      # WebSocket, NIP-42 auth on connect
POST /ws/query                    # same origin, JSON request, NIP-42

A plain GET to /ws answers 426. That is the route telling you it wants an upgrade, and not an error.

05Refusals, and what each one means

CodeWhere it comes fromWhat it means
missing Nostr auththe relay bridgeno signed event on the request. Sign one, then repeat
DSTOR_GATE_DENIEDthe content gatethe edge refused before the object route. The request needs a NIP-98 signature from a member key
OPERATOR_AUTH_REQUIREDthe join servicethe route is operator-only, and the bearer token is absent or wrong
NPUB_MALFORMEDthe join servicethe key is not a 63-character bech32 npub
NO_ROUTEthe join servicethe service is up and the path is not one of its routes
body_too_largethe content storethe object passes the store limit. Split it, or send a manifest
integrity_failurethe content storethe stored bytes do not match their address. The object is not served

06Limits at the edge

  • Front door: burst 20 requests. API paths: burst 200. The gate path: burst 20.
  • Join requests: burst 10. The route is origin-checked. The check itself was not probed here.
  • One connection limit of 100 per address on the TLS listeners.
  • Bodies over the content store limit answer 413, and not a silent truncation.

These numbers come from the live edge configuration on 2026-11-10. They can change without notice, and this page is a still reading.

07What this portal does not offer

  • No OpenAPI document. The catalog above is a measurement, not a schema. A machine-readable spec does not exist yet, and this page says so rather than shipping a false one.
  • No SDK. Two calls are written out above. A package with no tests would be worse than a curl line.
  • No SLA and no uptime number. This estate publishes no availability figure, because it measures no availability figure.
  • No price list. Spend is blocked by policy on this estate. A consumer portal that prints prices would promise a transaction nobody can settle.
  • No dashboard. The operator view is a separate path, unlinked here and unindexed, and it is not for consumers.

08Why this name

api.pluronymous.com would be a false name: the endpoints answer on sys.pluronymous.com, and a name that promises an API at its root would break the naming rule the estate uses. dev names the reader this page serves: a developer who needs the catalog and the refusals in one place.

Every short name here does one job. wg is the tunnel. sso is identity. sys is the system surface. dkr is the Domino Compass front door. pss is sourcing. dev is this portal.