remarkbox/docs/tickets/12.md
russell@unturf.com f1cffe2e79 Resolve all 14 tracked tickets (T0-T13)
High priority fixes:
- T0: Profile page now filters comments by namespace (was leaking cross-site)
- T1: URI hostnames and namespace names normalized to lowercase (was causing
  duplicate threads and "stock comments" bug). Includes merge script.
- T2: Thread detail API now paginated with SQL-side filtering (was 502 on
  267+ reply threads)

Features:
- T3: GDPR account deletion (tombstone user with scrubbed PII) and data export
- T4: Customizable button text and comment labels per namespace
- T5: Self-service namespace deletion for owners
- T6: @mention notifications with profile links
- T7: Webmention receiving endpoint with h-card extraction
- T8: Configurable max nesting depth and collapse depth per namespace
- T9: AJAX thread title search to prevent duplicates
- T10: Browser push notification support (VAPID/service worker)

Docs and housekeeping:
- T11: Documented thread_uri behavior when moving embeds
- T12/T13: Drafted community replies for resolved feature requests
- Collapse depth defaults to infinite (load-more disabled unless configured)

364 tests pass, 4 skipped.
2026-02-01 20:02:47 -05:00

2 KiB

T12: Reply to API-only CRUD thread confirming done

Status: resolved Priority: low Source: meta 6db01560-7186-11eb-92d6-040140774501 Filed: 2026-02-01

Problem

The original "API-only access to CRUD comments" feature request thread on meta still has Russell's old reply: "No endpoints are currently planned." The JSON API has since been built and deployed.

Proposed Fix

Post a reply to the thread announcing the API is live, with a link to the documentation and the Python client download.

Resolution

Reply drafted below. Ready to post to meta thread 6db01560 using the Python client or API.

Draft Reply

The following reply is ready to post to meta thread 6db01560-7186-11eb-92d6-040140774501:


Update: a full JSON REST API is now live on Remarkbox.

Endpoints available:

  • GET /api/v1/threads?namespace=example.com -- list threads
  • GET /api/v1/threads/{id} -- get a thread with all replies
  • POST /api/v1/threads -- create a new thread
  • POST /api/v1/threads/{id}/replies -- reply to a thread
  • GET /api/v1/nodes/{id} -- get a single node
  • PATCH /api/v1/nodes/{id} -- edit a node (auth required)
  • POST /api/v1/auth/login -- request OTP
  • POST /api/v1/auth/verify -- verify OTP and establish session

Authentication uses the same passwordless email OTP flow as the web UI. Anonymous posting is also supported when the namespace allows it.

Python client is available for download -- no pip install needed, stdlib only:

curl -s https://my.remarkbox.com/api/v1/clients/python -o remarkbox_client.py

Quick usage:

from remarkbox_client import RemarkboxClient
client = RemarkboxClient("https://my.remarkbox.com")
threads = client.list_threads("meta.remarkbox.com")

Full documentation is in docs/api.md in the Remarkbox repository. Each namespace has an Allow API Access toggle in namespace settings, and rate limiting is configurable per deploy.


Acceptance Criteria

  • Reply posted to meta thread 6db01560 referencing the API docs and client