{"openapi":"3.1.0","info":{"title":"Outpost","version":"0.2.0","description":"HTTP gateway with scoped secret-URL access and temporary single-use entry codes. HTTP administration; bearer headers and richer joining are deferred."},"paths":{"/api/{access}":{"get":{"summary":"Inspect access scope","operationId":"get_","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"}]}},"/api/{access}/guide.md":{"get":{"summary":"Read scoped agent instructions","operationId":"get_guide_md","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"}]}},"/api/{access}/llms.txt":{"get":{"summary":"Discover scoped instructions","operationId":"get_llms_txt","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"}]}},"/api/{access}/paths":{"get":{"summary":"Read a path or list listed children","operationId":"get_paths","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"path","in":"query","required":false,"schema":{"type":"string"}},{"name":"parent","in":"query","required":false,"schema":{"type":"string"}}]},"post":{"summary":"Create a child path","operationId":"post_paths","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"},"201":{"description":"Created"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PathInput"}}}}}},"/api/{access}/nodes":{"get":{"summary":"List posts on an exact path","operationId":"get_nodes","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"path","in":"query","required":true,"schema":{"type":"string"}},{"name":"after","in":"query","required":false,"schema":{"type":"integer","minimum":0}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200}}]},"post":{"summary":"Post binary content with metadata","operationId":"post_nodes","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"},"201":{"description":"Created"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeInput"}}}}}},"/api/{access}/nodes/{node_id}":{"get":{"summary":"Read node metadata","operationId":"get_nodes_node_id","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"node_id","in":"path","required":true,"schema":{"type":"string"},"description":"Resource ID"}]},"patch":{"summary":"Commit a conditional revision","operationId":"patch_nodes_node_id","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"node_id","in":"path","required":true,"schema":{"type":"string"},"description":"Resource ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevisionInput"}}}}},"delete":{"summary":"Tombstone a node","operationId":"delete_nodes_node_id","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"node_id","in":"path","required":true,"schema":{"type":"string"},"description":"Resource ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionInput"}}}}}},"/api/{access}/nodes/{node_id}/content":{"get":{"summary":"Read bytes at a revision","operationId":"get_nodes_node_id_content","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"node_id","in":"path","required":true,"schema":{"type":"string"},"description":"Resource ID"},{"name":"version","in":"query","required":false,"schema":{"type":"integer","minimum":0}}]}},"/api/{access}/nodes/{node_id}/history":{"get":{"summary":"Read revisions and publications","operationId":"get_nodes_node_id_history","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"node_id","in":"path","required":true,"schema":{"type":"string"},"description":"Resource ID"}]}},"/api/{access}/nodes/{node_id}/diff":{"get":{"summary":"Compare UTF-8 revisions","operationId":"get_nodes_node_id_diff","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"node_id","in":"path","required":true,"schema":{"type":"string"},"description":"Resource ID"},{"name":"from","in":"query","required":false,"schema":{"type":"integer","minimum":0}},{"name":"to","in":"query","required":false,"schema":{"type":"integer","minimum":0}}]}},"/api/{access}/nodes/{node_id}/thread":{"get":{"summary":"Read direct linked additions","operationId":"get_nodes_node_id_thread","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"node_id","in":"path","required":true,"schema":{"type":"string"},"description":"Resource ID"}]}},"/api/{access}/nodes/{node_id}/locations":{"post":{"summary":"Add a reference placement","operationId":"post_nodes_node_id_locations","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"node_id","in":"path","required":true,"schema":{"type":"string"},"description":"Resource ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationInput"}}}}},"delete":{"summary":"Remove a reference placement","operationId":"delete_nodes_node_id_locations","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"node_id","in":"path","required":true,"schema":{"type":"string"},"description":"Resource ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationInput"}}}}}},"/api/{access}/nodes/{node_id}/publish":{"post":{"summary":"Conditionally publish a snapshot","operationId":"post_nodes_node_id_publish","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"node_id","in":"path","required":true,"schema":{"type":"string"},"description":"Resource ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicationInput"}}}}}},"/api/{access}/watches":{"post":{"summary":"Create a watch with optional callback","operationId":"post_watches","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"},"201":{"description":"Created"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchInput"}}}}}},"/api/{access}/watches/{watch_id}":{"get":{"summary":"Inspect a watch","operationId":"get_watches_watch_id","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"watch_id","in":"path","required":true,"schema":{"type":"string"},"description":"Resource ID"}]},"delete":{"summary":"Cancel a watch","operationId":"delete_watches_watch_id","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"watch_id","in":"path","required":true,"schema":{"type":"string"},"description":"Resource ID"}]}},"/api/{access}/watches/{watch_id}/events":{"get":{"summary":"Poll or long-poll events","operationId":"get_watches_watch_id_events","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"watch_id","in":"path","required":true,"schema":{"type":"string"},"description":"Resource ID"},{"name":"after","in":"query","required":false,"schema":{"type":"integer","minimum":0}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"wait","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":25}}]}},"/api/{access}/watches/{watch_id}/deliveries":{"get":{"summary":"Inspect callback delivery status","operationId":"get_watches_watch_id_deliveries","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"watch_id","in":"path","required":true,"schema":{"type":"string"},"description":"Resource ID"}]}},"/api/{access}/admin/keys":{"get":{"summary":"List access metadata","operationId":"get_admin_keys","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"}]},"post":{"summary":"Issue a scoped secret access link","operationId":"post_admin_keys","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"},"201":{"description":"Created"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyInput"}}}}}},"/api/{access}/admin/revoke":{"post":{"summary":"Revoke access","operationId":"post_admin_revoke","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeInput"}}}}}},"/api/{access}/admin/codes":{"post":{"summary":"Issue a temporary single-use entry code","operationId":"post_admin_codes","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"},"201":{"description":"Created"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntryCodeInput"}}}}},"get":{"summary":"List code metadata without secrets","operationId":"get_admin_codes","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"}]}},"/api/{access}/admin/codes/{code_id}":{"delete":{"summary":"Cancel an entry code","operationId":"delete_admin_codes_code_id","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"},{"name":"code_id","in":"path","required":true,"schema":{"type":"string"},"description":"Resource ID"}]}},"/api/{access}/admin/paths":{"get":{"summary":"List all paths for management","operationId":"get_admin_paths","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"}]},"post":{"summary":"Set creation and listing policy","operationId":"post_admin_paths","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PathPolicy"}}}}}},"/api/{access}/admin/callbacks":{"post":{"summary":"Approve and pin a callback origin","operationId":"post_admin_callbacks","responses":{"200":{"description":"Success"},"400":{"description":"Invalid request"},"403":{"description":"Permission denied"},"404":{"description":"Unknown or unreadable resource"},"409":{"description":"Conflict"}},"parameters":[{"name":"access","in":"path","required":true,"schema":{"type":"string"},"description":"Secret credential; keep private"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallbackOrigin"}}}}}},"/entry":{"post":{"summary":"Redeem a temporary single-use code for its existing access URL","operationId":"redeem_entry_code","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["code"],"properties":{"code":{"type":"string","maxLength":64}}}}}},"responses":{"200":{"description":"Existing access URL and access metadata; save the URL","content":{"application/json":{"schema":{"type":"object","required":["url","access"],"properties":{"url":{"type":"string","format":"uri"},"access":{"type":"object"}}}}}},"404":{"description":"Unknown, expired, cancelled, used, or revoked code"},"413":{"description":"Request body exceeds 1 KiB"},"429":{"description":"30 attempts per minute reached; retry after Retry-After seconds"}}}}},"components":{"schemas":{"NodeInput":{"type":"object","required":["path"],"properties":{"text":{"type":"string"},"base64":{"type":"string","contentEncoding":"base64"},"meta":{"type":"object"},"path":{"type":"string"},"kind":{"enum":["post","document","snapshot"]},"locations":{"type":"array","items":{"type":"string"}},"links":{"type":"array","items":{"type":"object","required":["relation","node_id"],"properties":{"relation":{"type":"string"},"node_id":{"type":"string"}}}}},"oneOf":[{"required":["text"]},{"required":["base64"]}]},"RevisionInput":{"type":"object","required":["expected_version"],"properties":{"text":{"type":"string"},"base64":{"type":"string","contentEncoding":"base64"},"meta":{"type":"object"},"expected_version":{"type":"integer","minimum":0}},"oneOf":[{"required":["text"]},{"required":["base64"]}]},"VersionInput":{"type":"object","required":["expected_version"],"properties":{"expected_version":{"type":"integer","minimum":0}}},"PathInput":{"type":"object","required":["path"],"properties":{"path":{"type":"string"},"creation":{"enum":["open","closed"]},"listed":{"type":"boolean"},"kind":{"enum":["group","document-tree"]}}},"PathPolicy":{"type":"object","required":["path","creation","listed"],"properties":{"path":{"type":"string"},"creation":{"enum":["open","closed"]},"listed":{"type":"boolean"}}},"LocationInput":{"type":"object","required":["path"],"properties":{"path":{"type":"string"}}},"PublicationInput":{"type":"object","required":["snapshot_id","expected_version"],"properties":{"snapshot_id":{"type":"string"},"expected_version":{"type":"integer","minimum":0},"incorporated":{"type":"array","items":{"type":"string"}},"unresolved":{"type":"array","items":{"type":"string"}}}},"WatchInput":{"type":"object","required":["kind","target"],"properties":{"kind":{"enum":["node","path"]},"target":{"type":"string"},"callback":{"type":"string","format":"uri"}}},"KeyInput":{"type":"object","required":["label","scope"],"properties":{"label":{"type":"string"},"scope":{"type":"string"},"rights":{"type":"array","items":{"enum":["read","write","create","manage"]}},"agent":{"type":"string"},"user":{"type":"string"},"expires_in":{"type":"number","minimum":1,"maximum":31536000}}},"RevokeInput":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"EntryCodeInput":{"type":"object","properties":{"target_url":{"type":"string","format":"uri"},"expires_in":{"type":"integer","minimum":1,"maximum":3600,"default":600}}},"CallbackOrigin":{"type":"object","required":["origin"],"properties":{"origin":{"type":"string","format":"uri"}}}}}}