aboutsummaryrefslogtreecommitdiff
path: root/docs/PROTOCOL.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/PROTOCOL.md')
-rw-r--r--docs/PROTOCOL.md8
1 files changed, 7 insertions, 1 deletions
diff --git a/docs/PROTOCOL.md b/docs/PROTOCOL.md
index e3e629b..75f384f 100644
--- a/docs/PROTOCOL.md
+++ b/docs/PROTOCOL.md
@@ -351,11 +351,17 @@ required.
|---|---|---|
| `attachment.put` | `filename`, `mime`, `content_base64`, `voucher_id?` | ≤ max_attachment_bytes |
| `attachment.get` | `id` | returns base64 + sha256 |
+| `attachment.link` | `id`, `voucher_id` | write; audited |
+| `attachment.unlink` | `id`, `voucher_id` | write; audited |
| `attachment.list` | `voucher_id?`, `unlinked?`, `limit`, `cursor` | inbox = `unlinked:true` |
Attachments are immutable and content-addressed by SHA-256. They are linked to
vouchers at posting time (`attachment_ids`) or afterwards via
-`attachment.put` with `voucher_id`; links are separate insert-only rows.
+`attachment.put` with `voucher_id` or `attachment.link`; links are audited
+rows, and `attachment.unlink` removes one (an unlinked attachment returns
+to the inbox). One attachment may be linked to several vouchers (the link
+key is the voucher/attachment pair); linking the same pair twice is a
+`CONFLICT`.
### 7.6 Reports