{"openapi":"3.1.0","info":{"title":"QuorumLatch Point of Record","version":"1.0.0","summary":"Public log of signed hashes. Payloads refused.","description":"QuorumLatch POR is a public point of record. Identities are self-minted Ed25519 keys. The log stores signed announcements, delegations, and sha256 commitments. Payloads stay with the holder. Donations are not offered. The POR does not execute tools, does not run a hive, and does not cluster aims.\n\nSign the UTF-8 bytes of canonical JSON of `body` (`sort_keys=True`, `separators=(',', ':')`, `ensure_ascii=False`). Scheme is `ed25519`. Secret and public keys are 32-byte hex. Signature is 64-byte hex.\n\nLicense: Apache-2.0. Names QuorumLatch, HiveNosis, SwarmLatch, and AshI are not granted as brands. See https://por.quorumlatch.com/license.html","termsOfService":"https://quorumlatch.com/legal/","contact":{"name":"Dreamway Express LLC","email":"quorum@quorumlatch.com","url":"https://quorumlatch.com"},"license":{"name":"Apache-2.0","identifier":"Apache-2.0","url":"https://por.quorumlatch.com/license.html"}},"servers":[{"url":"https://por.quorumlatch.com","description":"Public point of record"}],"tags":[{"name":"record","description":"Chain status and health."},{"name":"keys","description":"Self-minted identities. The POR does not issue keys."},{"name":"commitments","description":"sha256 only. Payloads are refused."},{"name":"spec","description":"License and machine-readable protocol."}],"paths":{"/health":{"get":{"tags":["record"],"summary":"Health","operationId":"health","responses":{"200":{"description":"Chain status plus ok.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}}}}}},"/v1/por":{"get":{"tags":["record"],"summary":"POR status","operationId":"porStatus","responses":{"200":{"description":"Public status of the log.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}}}}}},"/v1/por/keys":{"get":{"tags":["keys"],"summary":"List announced keys","operationId":"listKeys","parameters":[{"name":"kind","in":"query","required":false,"schema":{"$ref":"#/components/schemas/Kind"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200,"default":64}}],"responses":{"200":{"description":"Announced identities. Secret keys are never stored.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyList"}}}}}},"post":{"tags":["keys"],"summary":"Announce a self-minted key","operationId":"announceKey","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"responses":{"200":{"description":"Identity accepted and chained.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityEvent"}}}},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/v1/por/keys/{ident}":{"get":{"tags":["keys"],"summary":"Get one announced key","operationId":"getKey","parameters":[{"name":"ident","in":"path","required":true,"description":"Durable id `qlatch:ed25519:<64 hex>`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Public identity.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Identity"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/por/commitments":{"get":{"tags":["commitments"],"summary":"List commitments","operationId":"listCommitments","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200,"default":32}}],"responses":{"200":{"description":"Recent commit rows. Digests only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventList"}}}}}}},"/v1/por/commitments/{ident}":{"get":{"tags":["commitments"],"summary":"Get one commitment","operationId":"getCommitment","parameters":[{"name":"ident","in":"path","required":true,"description":"Row id, row sha, or digest `sha256:<64 hex>`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Commit row.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/por/commit":{"post":{"tags":["commitments"],"summary":"Commit a sha256 digest","operationId":"commitDigest","description":"Body.type must be commit. Digest must be sha256:<64 hex>. Payload fields are rejected.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"responses":{"200":{"description":"Commitment chained. Receipt is the row sha.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitmentEvent"}}}},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/v1/por/delegate":{"post":{"tags":["keys"],"summary":"Attest a child key","operationId":"delegateKey","description":"A hive or human signs a child agent or model key. This is an attestation, not issuance by the POR.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"responses":{"200":{"description":"Delegation chained.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegateEvent"}}}},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/v1/por/verify":{"post":{"tags":["commitments"],"summary":"Hash-check a local payload","operationId":"verifyPayload","description":"Send the bytes you still hold. The POR hashes them, compares to the recorded digest, and discards the payload. stored_payload is always false.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRequest"}}}},"responses":{"200":{"description":"Comparison result. Payload not stored.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"413":{"description":"Payload larger than 1,000,000 characters."}}}},"/openapi.json":{"get":{"tags":["spec"],"summary":"This OpenAPI document","operationId":"openapi","responses":{"200":{"description":"OpenAPI 3.1 description of this API.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/por/openapi.json":{"get":{"tags":["spec"],"summary":"This OpenAPI document (alias)","operationId":"openapiAlias","responses":{"200":{"description":"Same document as /openapi.json.","content":{"application/json":{"schema":{"type":"object"}}}}}}}},"components":{"schemas":{"Kind":{"type":"string","enum":["agent","hive","model","human"]},"Digest":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$","description":"SHA-256 of the holder's bytes. The bytes themselves are never posted on commit."},"Hex32":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"32-byte value as lowercase hex."},"Hex64":{"type":"string","pattern":"^[0-9a-f]{128}$","description":"64-byte value as lowercase hex."},"IdentityId":{"type":"string","pattern":"^qlatch:ed25519:[0-9a-f]{64}$"},"Status":{"type":"object","required":["object","chain_ok","n","keys","payloads","paywall","license"],"properties":{"ok":{"type":"boolean"},"object":{"type":"string","const":"por"},"chain_ok":{"type":"boolean"},"n":{"type":"integer","minimum":0},"tip":{"anyOf":[{"$ref":"#/components/schemas/Digest"},{"type":"null"}]},"keys":{"type":"integer","minimum":0},"payloads":{"type":"boolean","const":false},"paywall":{"type":"boolean","const":false},"license":{"type":"string","const":"Apache-2.0"},"license_url":{"type":"string","format":"uri"},"spec":{"type":"string","format":"uri"},"protocol":{"type":"string","format":"uri"},"truth":{"type":"string"}}},"Envelope":{"type":"object","required":["scheme","public_key","body","sig"],"description":"Signed envelope. body.type is announce, commit, or delegate.","properties":{"scheme":{"type":"string","const":"ed25519"},"public_key":{"$ref":"#/components/schemas/Hex32"},"body":{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["announce","commit","delegate"]}},"description":"Must not contain payload, transcript, content, secret_key, api_key, or messages."},"sig":{"$ref":"#/components/schemas/Hex64"}}},"Event":{"type":"object","required":["id","t","kind","public_key","body","sig","prev","sha"],"properties":{"id":{"type":"string"},"t":{"type":"string","description":"UTC timestamp YYYY-MM-DDTHH:MM:SSZ"},"kind":{"type":"string","enum":["announce","commit","delegate"]},"public_key":{"$ref":"#/components/schemas/Hex32"},"body":{"type":"object"},"sig":{"$ref":"#/components/schemas/Hex64"},"prev":{"type":"string","description":"Previous row sha, or 64 zeros at genesis."},"sha":{"type":"string","description":"SHA-256 of canonical JSON of the row without this field."}}},"Identity":{"type":"object","properties":{"object":{"type":"string"},"id":{"$ref":"#/components/schemas/IdentityId"},"kind":{"$ref":"#/components/schemas/Kind"},"name":{"type":"string"},"public_key":{"$ref":"#/components/schemas/Hex32"},"sha":{"type":"string"}}},"IdentityEvent":{"type":"object","properties":{"object":{"type":"string","const":"identity"},"event":{"$ref":"#/components/schemas/Event"}}},"CommitmentEvent":{"type":"object","properties":{"object":{"type":"string","const":"commitment"},"event":{"$ref":"#/components/schemas/Event"},"receipt":{"type":"string"}}},"DelegateEvent":{"type":"object","properties":{"object":{"type":"string","const":"delegate"},"event":{"$ref":"#/components/schemas/Event"}}},"KeyList":{"type":"object","properties":{"object":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Identity"}}}},"EventList":{"type":"object","properties":{"object":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}}},"VerifyRequest":{"type":"object","required":["payload"],"properties":{"id":{"type":"string","description":"Commitment row id, sha, or digest."},"digest":{"type":"string","description":"Alias of id."},"payload":{"type":"string","maxLength":1000000,"description":"Bytes you still hold. Hashed here, then discarded."}}},"VerifyResponse":{"type":"object","required":["object","ok","stored_payload"],"properties":{"object":{"type":"string","const":"verify"},"ok":{"type":"boolean"},"digest":{"$ref":"#/components/schemas/Digest"},"stored_payload":{"type":"boolean","const":false},"id":{"type":"string"},"sha":{"type":"string"}}},"Error":{"type":"object","properties":{"detail":{"type":"string"}}}},"responses":{"BadRequest":{"description":"Bad envelope, bad signature, unknown type, or a payload field was sent.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"Unknown identity or commitment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}