{"openapi":"3.1.0","info":{"title":"Circuit Repository API","version":"1.0.0","description":"API for managing and accessing ZK circuits"},"servers":[{"url":"https://repository.inferencelabs.com","description":"Production"}],"components":{"schemas":{},"parameters":{}},"paths":{"/circuits":{"get":{"tags":["Circuits"],"summary":"List all active circuits","responses":{"200":{"description":"List of active circuits","content":{"application/json":{"schema":{"type":"object","properties":{"circuits":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"metadata":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"author":{"type":"string"},"version":{"type":"string"},"type":{"type":"string","enum":["PROOF_OF_WEIGHTS","PROOF_OF_COMPUTATION","DSPERSE_PROOF_GENERATION"]},"proof_system":{"type":"string"},"netuid":{"type":"number","nullable":true},"weights_version":{"type":"number","nullable":true},"timeout":{"type":"number"},"input_schema":{"type":"object","additionalProperties":{"nullable":true}},"image_url":{"type":"string","nullable":true}},"required":["name","description","author","version","type","proof_system","netuid","weights_version","timeout","input_schema","image_url"]},"files":{"type":"object","additionalProperties":{"type":"string"}},"is_active":{"type":"number"},"is_hidden":{"type":"number"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","metadata","files","is_active","is_hidden","created_at","updated_at"]}}},"required":["circuits"]}}}}}}},"/circuits/{id}":{"get":{"tags":["Circuits"],"summary":"Get circuit by ID","parameters":[{"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Circuit metadata","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"metadata":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"author":{"type":"string"},"version":{"type":"string"},"type":{"type":"string","enum":["PROOF_OF_WEIGHTS","PROOF_OF_COMPUTATION","DSPERSE_PROOF_GENERATION"]},"proof_system":{"type":"string"},"netuid":{"type":"number","nullable":true},"weights_version":{"type":"number","nullable":true},"timeout":{"type":"number"},"input_schema":{"type":"object","additionalProperties":{"nullable":true}},"image_url":{"type":"string","nullable":true}},"required":["name","description","author","version","type","proof_system","netuid","weights_version","timeout","input_schema","image_url"]},"files":{"type":"object","additionalProperties":{"type":"string"}},"is_active":{"type":"number"},"is_hidden":{"type":"number"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","metadata","files","is_active","is_hidden","created_at","updated_at"]}}}},"400":{"description":"Invalid ID","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/circuits/{id}/download":{"get":{"tags":["Circuits"],"summary":"Get download URLs for circuit files","parameters":[{"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Download URLs","content":{"application/json":{"schema":{"type":"object","properties":{"files":{"type":"object","additionalProperties":{"type":"string"}}},"required":["files"]}}}},"400":{"description":"Invalid ID","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/circuits/files/{circuitId}/{filename}":{"get":{"tags":["Circuits"],"summary":"Download a circuit file","parameters":[{"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"required":true,"name":"circuitId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\w.-]+$"},"required":true,"name":"filename","in":"path"}],"responses":{"200":{"description":"File contents"},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/circuits/{id}/metrics":{"get":{"tags":["Metrics"],"summary":"Get circuit usage metrics","parameters":[{"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":365,"default":30},"required":false,"name":"days","in":"query"}],"responses":{"200":{"description":"Metrics summary","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"object","properties":{"invocations":{"type":"number"},"avg_witness_time_ms":{"type":"number"},"avg_prove_time_ms":{"type":"number"}},"required":["invocations","avg_witness_time_ms","avg_prove_time_ms"]},"daily":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"invocations":{"type":"number"},"avg_witness_time_ms":{"type":"number"},"avg_prove_time_ms":{"type":"number"}},"required":["date","invocations","avg_witness_time_ms","avg_prove_time_ms"]}}},"required":["total","daily"]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}},"post":{"tags":["Metrics"],"summary":"Record circuit usage metrics","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"witness_time_ms":{"type":"integer","minimum":0,"maximum":86400000},"prove_time_ms":{"type":"integer","minimum":0,"maximum":86400000}},"required":["witness_time_ms","prove_time_ms"]}}}},"responses":{"204":{"description":"Metrics recorded"},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/components":{"get":{"tags":["Components"],"summary":"List all components","responses":{"200":{"description":"List of components","content":{"application/json":{"schema":{"type":"object","properties":{"components":{"type":"array","items":{"type":"object","properties":{"sha256":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"proof_system":{"type":"string"},"files":{"type":"object","additionalProperties":{"type":"string"}},"created_at":{"type":"string"}},"required":["sha256","name","description","proof_system","files","created_at"]}}},"required":["components"]}}}}}}},"/components/{sha256}":{"get":{"tags":["Components"],"summary":"Get component by SHA-256","parameters":[{"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"required":true,"name":"sha256","in":"path"}],"responses":{"200":{"description":"Component details","content":{"application/json":{"schema":{"type":"object","properties":{"sha256":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"proof_system":{"type":"string"},"files":{"type":"object","additionalProperties":{"type":"string"}},"created_at":{"type":"string"}},"required":["sha256","name","description","proof_system","files","created_at"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/components/{sha256}/files/{filename}":{"get":{"tags":["Components"],"summary":"Download a component file","parameters":[{"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"required":true,"name":"sha256","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\w.-]+$"},"required":true,"name":"filename","in":"path"}],"responses":{"200":{"description":"File contents"},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/models":{"get":{"tags":["Models"],"summary":"List all active models","responses":{"200":{"description":"List of active models","content":{"application/json":{"schema":{"type":"object","properties":{"models":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"metadata":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"author":{"type":"string"},"version":{"type":"string"},"netuid":{"type":"number","nullable":true},"weights_version":{"type":"number","nullable":true},"timeout":{"type":"number"},"input_schema":{"type":"object","additionalProperties":{"nullable":true}},"image_url":{"type":"string","nullable":true},"dsperse_version":{"type":"string","nullable":true},"jstprove_version":{"type":"string","nullable":true}},"required":["name","description","author","version","netuid","weights_version","timeout","input_schema","image_url","dsperse_version","jstprove_version"]},"composition":{"type":"object","properties":{"version":{"type":"number"},"components":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":0},"name":{"type":"string","minLength":1},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"proof_system":{"type":"string"},"files":{"type":"array","items":{"type":"string"},"minItems":1},"weights":{"type":"array","items":{"type":"object","properties":{"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"role":{"type":"string","minLength":1},"filename":{"type":"string","minLength":1},"size_bytes":{"type":"integer","minimum":0}},"required":["sha256","role","filename","size_bytes"]}}},"required":["index","name","sha256","files","weights"]}},"dag":{"type":"array","items":{"type":"object","properties":{"component_index":{"type":"integer","minimum":0},"inputs":{"type":"array","items":{"type":"string"}},"outputs":{"type":"array","items":{"type":"string"}},"input_shape":{"type":"array","items":{"type":"array","items":{"type":"integer"}}},"output_shape":{"type":"array","items":{"type":"array","items":{"type":"integer"}}}},"required":["component_index","inputs","outputs","input_shape","output_shape"]}}},"required":["version","components","dag"]},"is_active":{"type":"number"},"is_hidden":{"type":"number"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","metadata","composition","is_active","is_hidden","created_at","updated_at"]}}},"required":["models"]}}}}}}},"/models/{id}":{"get":{"tags":["Models"],"summary":"Get model by ID","parameters":[{"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Model details","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"metadata":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"author":{"type":"string"},"version":{"type":"string"},"netuid":{"type":"number","nullable":true},"weights_version":{"type":"number","nullable":true},"timeout":{"type":"number"},"input_schema":{"type":"object","additionalProperties":{"nullable":true}},"image_url":{"type":"string","nullable":true},"dsperse_version":{"type":"string","nullable":true},"jstprove_version":{"type":"string","nullable":true}},"required":["name","description","author","version","netuid","weights_version","timeout","input_schema","image_url","dsperse_version","jstprove_version"]},"composition":{"type":"object","properties":{"version":{"type":"number"},"components":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":0},"name":{"type":"string","minLength":1},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"proof_system":{"type":"string"},"files":{"type":"array","items":{"type":"string"},"minItems":1},"weights":{"type":"array","items":{"type":"object","properties":{"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"role":{"type":"string","minLength":1},"filename":{"type":"string","minLength":1},"size_bytes":{"type":"integer","minimum":0}},"required":["sha256","role","filename","size_bytes"]}}},"required":["index","name","sha256","files","weights"]}},"dag":{"type":"array","items":{"type":"object","properties":{"component_index":{"type":"integer","minimum":0},"inputs":{"type":"array","items":{"type":"string"}},"outputs":{"type":"array","items":{"type":"string"}},"input_shape":{"type":"array","items":{"type":"array","items":{"type":"integer"}}},"output_shape":{"type":"array","items":{"type":"array","items":{"type":"integer"}}}},"required":["component_index","inputs","outputs","input_shape","output_shape"]}}},"required":["version","components","dag"]},"is_active":{"type":"number"},"is_hidden":{"type":"number"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","metadata","composition","is_active","is_hidden","created_at","updated_at"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/models/wb/{sha256}":{"get":{"tags":["Models"],"summary":"Download a weight/bias blob","parameters":[{"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"required":true,"name":"sha256","in":"path"}],"responses":{"200":{"description":"Weight/bias binary data"},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}}}