{"openapi":"3.1.0","info":{"title":"Haute Lumière Suite","version":"1.0.0","description":"Calendar (CalDAV/iCalendar), drive and notebook (WebDAV), feeds (JSON Feed/Atom/OPML), mail (JMAP) and chat links — one identity, the open standards. Share it; build on it."},"servers":[{"url":"https://suite.hautelumiere.life"}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"A house session token from id.hautelumiere.life"},"basic":{"type":"http","scheme":"basic","description":"username + an app password from POST /v1/app-passwords"}}},"paths":{"/v1/feed.json":{"get":{"summary":"Blogs, podcast and house notices as JSON Feed 1.1 (?kind=blog|podcast|ads&limit=)","responses":{"200":{"description":"ok"}}}},"/v1/feed.xml":{"get":{"summary":"The same as Atom","responses":{"200":{"description":"ok"}}}},"/v1/sources.opml":{"get":{"summary":"The source list as OPML","responses":{"200":{"description":"ok"}}}},"/v1/sources":{"get":{"summary":"List sources","responses":{"200":{"description":"ok"}}},"post":{"summary":"Add a source (house only)","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/v1/invite":{"post":{"summary":"Make a gift link: { amount, note? }. Spends nothing until the friend opens it","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/v1/invite/peek":{"get":{"summary":"Who a gift link is from and how much (?t=)","responses":{"200":{"description":"ok"}}}},"/v1/invite/redeem":{"post":{"summary":"Open a gift link after beginning: { t }","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/v1/membership":{"get":{"summary":"Your standing, whether you may take one, and the three tiers (figures from the price book)","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/v1/membership/checkout":{"post":{"summary":"Open the till for a standing: { tier: signature|premier|deluxe }. Lumens cannot be bought","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/v1/gift-month":{"post":{"summary":"Give a friend a month of any app, book or other item: { to, item_kind, item_id, ref, note? }; paid from your ordinary balance","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/v1/entitlements":{"get":{"summary":"The months of access you hold today","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/v1/entitlement":{"get":{"summary":"House only: does a member hold an item today (?username= or ?email=, &item_kind=&item_id=): a month of access, or anything in the purchase ledger","responses":{"200":{"description":"ok"}}}},"/v1/purchase":{"post":{"summary":"House only: write one sale to the house purchase ledger, idempotent on (source, ref): { email, item_kind, item_id, source, ref, title?, open?, amount_cents?, currency?, at?, ends?, gift_from?, note?, campaign? }","responses":{"200":{"description":"already written"},"201":{"description":"written"},"409":{"description":"that sale is written for something else"}}},"get":{"summary":"House only: does an address hold an item today (?email=&item_kind=&item_id=)","responses":{"200":{"description":"ok"}}}},"/v1/purchase/void":{"post":{"summary":"House only: a refund. The row stays and is marked void; the journal reverses it: { source, ref }","responses":{"200":{"description":"ok"}}}},"/v1/purchases":{"get":{"summary":"House only: everything an address holds today (?email=)","responses":{"200":{"description":"ok"}}}},"/v1/purchases/mine":{"get":{"summary":"Your shelf: everything you hold, across every address you have proven","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/v1/lumens/quote":{"get":{"summary":"House only: what an item costs a member in Lumens from its dollar price (?username=&usd=), member price applied","responses":{"200":{"description":"ok"}}}},"/v1/taste":{"get":{"summary":"Your four tasting passes (book, class, app, course) and which are used","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}},"post":{"summary":"Use a pass: { item_kind, item_id } opens a month of that item","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/v1/ledger":{"get":{"summary":"Your own ledger rows, newest first (?limit=&before=)","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/v1/ledger/proof":{"get":{"summary":"Your receipt for one row (?seq=): the row, its Merkle path to the day root, and where Witness holds the root","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/v1/ledger/days":{"get":{"summary":"Public: every sealed day, its Merkle root and its Witness record. Hashes only, no names or amounts","responses":{"200":{"description":"ok"}}}},"/v1/ledger/verify":{"get":{"summary":"Public: the house re-walks the hash chain and says whether it holds (?from=&limit=)","responses":{"200":{"description":"chain holds"},"409":{"description":"a break, with where"}}}},"/v1/ads":{"post":{"summary":"Post a house notice (house only)","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/cal/house.ics":{"get":{"summary":"Public house calendar (subscribe link)","responses":{"200":{"description":"text/calendar"}}}},"/dav/":{"propfind":{"summary":"CalDAV/WebDAV discovery. /.well-known/caldav redirects here","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/dav/calendars/{user}/{calendar}/":{"get":{"summary":"Whole calendar as .ics","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}},"report":{"summary":"calendar-query / calendar-multiget","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/dav/files/{user}/{path}":{"get":{"summary":"Drive file","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}},"put":{"summary":"Write file","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}},"delete":{"summary":"Delete","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}},"propfind":{"summary":"List","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/v1/notes":{"get":{"summary":"List notes","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}},"post":{"summary":"Create a note {title, body}","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/v1/notes/{slug}":{"get":{"summary":"Read","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}},"put":{"summary":"Write markdown","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}},"delete":{"summary":"Delete","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/jmap/session":{"get":{"summary":"JMAP session (RFC 8620); /.well-known/jmap redirects here","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/jmap":{"post":{"summary":"JMAP API: Mailbox/get, Email/query, Email/get, Email/set, Thread/get, Identity/get, EmailSubmission/set","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/v1/people/{address}":{"get":{"summary":"Who holds a hautelumiere.life address, and the chat link","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/v1/app-passwords":{"get":{"summary":"List","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}},"post":{"summary":"Make one (shown once)","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}},"delete":{"summary":"Revoke {label}","security":[{"bearer":[]},{"basic":[]}],"responses":{"200":{"description":"ok"},"401":{"description":"sign in at id.hautelumiere.life"}}}},"/v1/status":{"get":{"summary":"What is connected, said honestly","responses":{"200":{"description":"ok"}}}}}}