API

Every path is also an API. Reads are public, writes need a token from Settings.

Read

GET https://dirs.159-69-177-246.sslip.io/fish.jsonnode, effective schema, entries (aggregated, ?page=, ?scope=here)
GET https://dirs.159-69-177-246.sslip.io/fish.csvall entries as a spreadsheet
GET https://dirs.159-69-177-246.sslip.io/fish.rssfeed of new entries
GET https://dirs.159-69-177-246.sslip.io/_chain.json?path=fishownership ledger + verification
GET https://dirs.159-69-177-246.sslip.io/_og/fish.pngshare image

Write

Send your token as Authorization: Bearer dt_…. Values are validated against the path's schema, exactly like the web form.

curl -X POST https://dirs.159-69-177-246.sslip.io/fish.json \
  -H "Authorization: Bearer $DIRS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"values": {"length": 64, "caught": "2026-10-11"}}'

With a photo, post multipart fields named f_<key>:

curl -X POST https://dirs.159-69-177-246.sslip.io/fish.json \
  -H "Authorization: Bearer $DIRS_TOKEN" \
  -F f_length=64 -F f_photo=@catch.jpg

Delete an entry you wrote or moderate:

curl -X DELETE "https://dirs.159-69-177-246.sslip.io/fish.json?entry=42" -H "Authorization: Bearer $DIRS_TOKEN"

Responses: 201 with the entry, 400 with per-field errors, 401/403/404, 429 above 120 requests per minute.

Embed

<iframe src="https://app.dirs.159-69-177-246.sslip.io/embed/fish" width="100%" height="460" style="border:0"></iframe>

Options: ?n=10 entries, ?theme=dark|light.

Ledger

Each ownership event is hashed as sha256(prev_hash|id|type|path|actor|canonical_json(payload)|created_at). Re-compute the chain from _chain.json to verify the history independently.

Paths

Segments are a-z 0-9 -, up to 32 levels deep. Children inherit fields from their parents and may add their own.

Availability and prices

GET https://dirs.159-69-177-246.sslip.io/_search?check=crypto/bitcoin

Returns exists, reserved, parentMissing and, while the market is on, price (one-time, or the sale price of an existing path), yearly and currency. Amounts are in minor units (Rappen). Every node's JSON carries its market terms: salePrice, acceptOffers, expiresAt, renewPrice and subPaths (price, yearly, sovereign or delegated).

Read-only endpoints send Access-Control-Allow-Origin: *.