Verweise über Produktgrenzen
Die eine Tür, durch die ein Verweis eine Produktgrenze überschreitet: ein Projekt von einer Oberfläche aus anlegen, die selbst keine hat, und eine gespeicherte Id in die Worte auflösen, die daneben stehen. Hinüber geht eine Identität, nie Inhalt — ein Titel wird dort aufgelöst, wo er gezeichnet wird, und ein Verweis, den niemand sehen darf, löst zu nichts auf statt zu einem Fehler. Beide Produkte müssen im Workspace aktiv sein.
2 Operationen. Jeder Pfad ist relativ zum Ursprung der Instanz; jeder Antwortkörper ist JSON, sofern nicht anders vermerkt. Die Endpunktbeschreibungen unten stammen unverändert aus der Routentabelle des Servers und bleiben englisch. Authentifizierung, Fehler und seitenweise Abfrage stehen unter API.
POST /api/v1/workspaces/{workspaceId}/cross-refs/resolve
Resolve stored reference ids into the words to draw beside them — what a reference across a product boundary points at (ADR-0036). What crosses is an IDENTITY: no title is stored on the other side, so it is resolved where it is drawn, and the answer says which product each id was found in. Requires BOTH products active on the workspace (ADR-0033 D1) and read on the block; an id that fails either — or is unknown or trashed — is absent from the answer rather than an error, because a 404 per id would say which ids exist.
resolveCrossRefs · token scope: session only
Path parameters
workspaceId· string (uuid) — required
Request body — application/json, required
ids· string (uuid)[] — required, 1–50 items
Response 200 — application/json
items· object[] — requiredid· string (uuid) — requiredproduct·"basalt"|"lithic"|"tecto"— requiredtitle· string — requiredicon· string | null — requiredurl· string — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — requiredreason· string — length 1–64
POST /api/v1/workspaces/{workspaceId}/cross-refs/projects
Make a project in the other product, or name one that already exists (name creates, projectId links). Only for a surface that has no projects of its own — the product that has them writes them itself, through its own document. A created project lands in that product’s projects document, which this route makes when there is none: the caller names no document, because it may not show the other product’s (ADR-0025 D1). Requires BOTH products active and edit on the collection. The one route in the API that MAKES content for a product other than the asking one; ADR-0036 is where that is argued.
createProjectRef · token scope: session only
Path parameters
workspaceId· string (uuid) — required
Request body — application/json, required
collectionId· string (uuid) — requiredname· string — length 1–500projectId· string (uuid)
Response 200 — application/json
id· string (uuid) — requiredproduct·"basalt"|"lithic"|"tecto"— requiredtitle· string — requiredicon· string | null — requiredurl· string — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — requiredreason· string — length 1–64