{"openapi":"3.1.0","info":{"title":"Carbon Property Tables API","version":"1.0.0","description":"Citation-preserving figure artifacts, temporary-point benchmarking, publication search, and capped top-point extraction. The public API does not expose the canonical record or coordinate tables."},"servers":[{"url":"https://localhost:10000"}],"paths":{"/api/v1/analysis/transport":{"post":{"summary":"Reproduce source-qualified processing responses and inspect paper locations","description":"Frozen transport analysis, separately versioned from the CPT database. Up to three named contrasts; contextual evidence requires explicit opt-in. No raw endpoint table or publisher text. Shared top-result rate limit: 60 requests per hour per client per service process. Body limit 8192 bytes.","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"required":["action"],"properties":{"action":{"const":"catalog"},"group":{"type":"string","maxLength":100},"version":{"type":"string","maxLength":80}}},{"type":"object","additionalProperties":false,"required":["action","ids"],"properties":{"action":{"const":"compare"},"ids":{"type":"array","minItems":1,"maxItems":3,"uniqueItems":true,"items":{"type":"string","maxLength":200}},"include_contextual":{"type":"boolean","default":false},"version":{"type":"string","maxLength":80}}},{"type":"object","additionalProperties":false,"required":["action","doi"],"properties":{"action":{"const":"source"},"doi":{"type":"string","minLength":3,"maxLength":200},"version":{"type":"string","maxLength":80}}}]}}}},"responses":{"200":{"description":"Catalog, calculated dimensionless responses, or source pointers with version and provenance."},"400":{"description":"Invalid body, IDs, contextual authorization or unavailable version."},"429":{"description":"Rate limit reached."}}}},"/api/v1":{"get":{"summary":"API discovery document","responses":{"200":{"description":"API links and active release."}}}},"/api/v1/release":{"get":{"summary":"Active immutable dataset release","responses":{"200":{"description":"Release identity, hashes, and counts."}}}},"/api/v1/properties":{"get":{"summary":"Property catalog and canonical units","responses":{"200":{"description":"Supported property definitions."}}}},"/api/v1/doi-status":{"get":{"summary":"Check whether an exact DOI is represented","description":"Returns presence and bibliographic identity only. It never returns record IDs, properties, measurements, or coordinates.","parameters":[{"name":"doi","in":"query","required":true,"schema":{"type":"string","maxLength":300}}],"responses":{"200":{"description":"DOI presence and, when present, citation metadata."},"400":{"description":"Malformed DOI."},"429":{"description":"Lookup rate limit reached."}}}},"/api/v1/search":{"get":{"summary":"Search publications represented in the active release","description":"Deterministic DOI, title, author, journal, year, and keyword search. Results are deduplicated to publication identity and never include record IDs, samples, properties, measurements, or coordinates.","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":300}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":25,"default":10}}],"responses":{"200":{"description":"Ranked, publication-level bibliographic matches."},"400":{"description":"Missing or invalid search query."},"429":{"description":"Search rate limit reached."}}}},"/api/v1/figures":{"post":{"summary":"Render a bounded scientific figure package","description":"Returns SVG and optional PNG/PDF artifacts, citations, one selected record, temporary-point ranking, and at most ten exact top rows.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["kind","x","y"],"properties":{"kind":{"type":"string","enum":["scatter","ranked","trend","ashby"]},"release":{"type":"string","maxLength":160,"description":"Exact release ID. A mismatch fails rather than silently using newer data."},"x":{"type":"string"},"y":{"type":"string"},"x_scale":{"type":"string","enum":["linear","log"]},"y_scale":{"type":"string","enum":["linear","log"]},"minimum_x":{"type":"number","minimum":0,"description":"Inclusive minimum in displayed x-axis units. Scatter/Ashby only, with a higher-is-better y property."},"show_callouts":{"type":"boolean","default":true,"description":"Show automatic source and metal callouts in Scatter, Trend, and Ashby. Applies to viewing and all exports; citations are retained."},"top":{"type":"integer","minimum":0,"maximum":10},"top_by":{"type":"string","enum":["auto","x","y"]},"comparison_grades":{"type":"array","minItems":1,"uniqueItems":true,"items":{"type":"string","enum":["A","B","C","D"]}},"formats":{"type":"array","items":{"type":"string","enum":["svg","png","pdf"]}},"filters":{"type":"object","additionalProperties":true}}}}}},"responses":{"200":{"description":"Rendered artifacts and bounded metadata; no complete coordinate table."},"400":{"description":"Invalid property, filter, format, or top-point request."}}}},"/api/v1/citations":{"get":{"summary":"Build a citation bundle for record IDs","parameters":[{"name":"record_id","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Nature-style text and BibTeX citations."}}},"post":{"summary":"Build a citation bundle for a larger record set","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["record_ids"],"properties":{"record_ids":{"type":"array","maxItems":500,"items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Nature-style text and BibTeX citations."}}}}}}