{"openapi":"3.1.0","info":{"title":"Cividian Site Diligence API","version":"1.0.0"},"servers":[{"url":"https://cividian-site-diligence-agent.vercel.app/api/v1"}],"components":{"securitySchemes":{"bearerKey":{"type":"http","scheme":"bearer","description":"Create an expiring key in Account & connections. Store it in a secret manager."}}},"paths":{"/capabilities":{"get":{"operationId":"cividian_capabilities","summary":"Available site diligence capabilities","description":"Read coverage, limitations, API capabilities and currently available interpretation. Does not start a run.","security":[{"bearerKey":[]}],"responses":{"200":{"description":"Result in the ok/data envelope. Missing values remain null."},"401":{"description":"Invalid or expired key"},"403":{"description":"Insufficient scope"},"429":{"description":"Account or IP limit reached"}}}},"/sites/resolve":{"post":{"operationId":"cividian_resolve_site","summary":"Find a property","description":"Resolve a US address to a point and candidate parcel. Read warnings; a nearby match is not a survey.","security":[{"bearerKey":[]}],"responses":{"200":{"description":"Result in the ok/data envelope. Missing values remain null."},"401":{"description":"Invalid or expired key"},"403":{"description":"Insufficient scope"},"429":{"description":"Account or IP limit reached"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":3,"maxLength":200,"description":"A US street address. A city name alone is not a site."}},"required":["query"],"additionalProperties":false}}}}}},"/briefs":{"post":{"operationId":"cividian_create_brief","summary":"Create a site diligence brief","description":"Gather source records, compute labeled scenarios and save a new brief to your account. Uses rules-based priorities, not paid AI inference. Counts toward account creation limits.","security":[{"bearerKey":[]}],"responses":{"201":{"description":"Result in the ok/data envelope. Missing values remain null."},"401":{"description":"Invalid or expired key"},"403":{"description":"Insufficient scope"},"429":{"description":"Account or IP limit reached"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":3,"maxLength":200,"description":"A US street address. A city name alone is not a site."},"objective":{"type":"string","enum":["residential_infill","mixed_use","adaptive_reuse"]},"assumptions":{"type":"object","maxProperties":40,"additionalProperties":{"type":["number","null"]},"description":"Labeled screening inputs. Omitted values use stated defaults; null explicitly means unknown."}},"required":["query"],"additionalProperties":false}}}}},"get":{"operationId":"cividian_list_briefs","summary":"List your saved briefs","description":"List only briefs owned by the authenticated account.","security":[{"bearerKey":[]}],"responses":{"200":{"description":"Result in the ok/data envelope. Missing values remain null."},"401":{"description":"Invalid or expired key"},"403":{"description":"Insufficient scope"},"429":{"description":"Account or IP limit reached"}}}},"/briefs/{id}":{"get":{"operationId":"cividian_get_brief","summary":"Read a saved brief","description":"Read one account-owned brief with citations, assumptions, limitations and investigation steps. Null means unknown, never zero.","security":[{"bearerKey":[]}],"responses":{"200":{"description":"Result in the ok/data envelope. Missing values remain null."},"401":{"description":"Invalid or expired key"},"403":{"description":"Insufficient scope"},"429":{"description":"Account or IP limit reached"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^dlg_[a-f0-9]{24}$","description":"A brief ID belonging to the authenticated account."}}]}}}}