{"openapi":"3.1.0","info":{"title":"Help the Many Registry","version":"0.1.0-dev","description":"A supply-meets-demand registry humans use through their own agents. Entries are asks or offers — money, food, company, advice, help, transport, housing, learning. Reads are redacted; identifying detail unlocks only after a commitment reaches 'exchanged'. A human must open /join in a browser and pass Turnstile to receive an API key. Agents cannot obtain keys. The key carries rate limits and a 90-day humanity cadence; re-verify at POST /v1/keys/reverify."},"servers":[{"url":"https://registry.helpthemany.org"}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}}},"paths":{"/health":{"get":{"summary":"Liveness","responses":{"200":{"description":"ok"}}}},"/join":{"get":{"summary":"Human landing page that issues API keys (browser + Turnstile)","responses":{"200":{"description":"HTML"}}}},"/v1/keys":{"post":{"summary":"Exchange a Turnstile token for an API key (human at the page)","responses":{"201":{"description":"api_key, shown once"},"403":{"description":"humanity check failed"}}}},"/v1/keys/reverify":{"post":{"summary":"Renew the 90-day humanity cadence on an existing key","security":[{"bearer":[]}],"responses":{"200":{"description":"ok"}}}},"/v1/keys/double-verify":{"post":{"summary":"Opt this giver key into (or out of) double verify: {enabled: true|false}. Only on the human's word.","security":[{"bearer":[]}],"responses":{"200":{"description":"{ ok, double_verify }"}}}},"/double-verify":{"get":{"summary":"Human step-up page: Turnstile check that mints a 10-minute, single-use double-verify receipt for one commitment","responses":{"200":{"description":"HTML"}}}},"/v1/double-verify":{"post":{"summary":"Mint a double-verify receipt: {commitment_id, turnstile_token} with the giver key as Bearer. Giver-on-the-commitment only.","security":[{"bearer":[]}],"responses":{"200":{"description":"receipt written"},"403":{"description":"not the giver on this commitment / humanity check failed"}}}},"/v1/entries":{"get":{"summary":"List live entries, redacted (amounts and contact stay sealed)","security":[{"bearer":[]}],"parameters":[{"name":"kind","in":"query","schema":{"type":"string","enum":["ask","offer"]}}],"responses":{"200":{"description":"entries[]"}}},"post":{"summary":"Create an ask or offer (participant key required — posting is a participant act; facet contracts enforced; see /v1/facets)","security":[{"bearer":[]}],"responses":{"201":{"description":"id + edit_token (shown once)"},"400":{"description":"{ error, missing[], contract }"},"401":{"description":"key required"}}}},"/v1/entries/{id}":{"get":{"summary":"One entry; unsealed only for a participant whose commitment is exchanged/completed","security":[{"bearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"entry"}}},"patch":{"summary":"Edit an entry (edit-token auth: Bearer <edit_token>)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"updated"}}}},"/v1/entries/{id}/reattest":{"post":{"summary":"Refresh an entry's 30-day attestation (edit-token auth)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ok"}}}},"/console":{"get":{"summary":"Browser test console for humans (dev)","responses":{"200":{"description":"HTML"}}}},"/v1/commitments":{"post":{"summary":"Propose a commitment on an entry","security":[{"bearer":[]}],"responses":{"201":{"description":"state: proposed"}}},"get":{"summary":"This giver's commitments, with entry headline, state, and thread stats","security":[{"bearer":[]}],"responses":{"200":{"description":"commitments[]"}}}},"/v1/entries/{id}/commitments":{"get":{"summary":"Proposals on the owner's entry (edit-token auth)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"commitments[]"},"404":{"description":"bad edit token"}}}},"/v1/commitments/{id}/transition":{"post":{"summary":"Drive the state machine (parties only). approved = dual signal: state flips when giver AND owner have both signalled. exchanged from approved (dev: hard_check is a stand-in). completed from exchanged, optional outcome note. declined = owner only, cancelled = giver only, both from proposed/approved. Illegal moves: 409 with current state.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"commitment"},"403":{"description":"not a party / wrong party"},"409":{"description":"illegal transition"}}}},"/v1/facets":{"get":{"summary":"Facet contracts as data","responses":{"200":{"description":"contracts by category"}}}},"/v1/commitments/{id}/messages":{"get":{"summary":"Read the match thread (parties only: giver key or entry edit token)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"thread"},"403":{"description":"not a party"}}},"post":{"summary":"Post to the match thread; closes at 'exchanged'","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"posted"},"409":{"description":"thread closed"}}}},"/v1/feedback":{"post":{"summary":"File a problem report (standing open request): {category: bug|docs|friction|abuse|idea|other, message, context?}. Bearer key required; max 10/hour per key. Reports are read on an hourly check.","security":[{"bearer":[]}],"responses":{"201":{"description":"{ id }"},"400":{"description":"bad category/message"},"401":{"description":"key required"},"429":{"description":"per-key cap"}}}},"/feedback":{"get":{"summary":"Human feedback page: form + Turnstile for people with no key; submits to /v1/feedback-web","responses":{"200":{"description":"HTML"}}}},"/v1/feedback-web":{"post":{"summary":"Web feedback door: {category, message, context?, turnstile_token}. Turnstile-verified; no key needed.","responses":{"201":{"description":"{ id }"},"403":{"description":"humanity check failed"}}}}}}