{"openapi":"3.1.0","info":{"title":"Assentt API","version":"1.0.0","description":"Customer-facing gateway for Assentt product APIs. Authenticate with a secret or restricted key (`Authorization: Bearer sk_…` / `rk_…`)."},"servers":[{"url":"https://api.assenttwealth.com/v1"}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Assentt API secret or restricted key"}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Optional idempotency key for mutating proxy requests"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}},"ScopeCatalog":{"type":"object","properties":{"scopes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"product":{"type":"string"},"mode":{"type":"string"},"summary":{"type":"string"},"available":{"type":"boolean"}}}}}}}},"security":[{"BearerAuth":[]}],"paths":{"/health":{"get":{"summary":"Health check","security":[],"responses":{"200":{"description":"OK"}}}},"/openapi.json":{"get":{"summary":"OpenAPI document","security":[],"responses":{"200":{"description":"OpenAPI 3.1 JSON"}}}},"/scopes":{"get":{"summary":"List available scopes","security":[],"responses":{"200":{"description":"Scope catalog","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScopeCatalog"}}}}}}},"/taxes/{proxy+}":{"parameters":[{"name":"proxy+","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"get":{"summary":"Proxy read to Assentt Taxes","description":"Requires a taxes.*:read scope. Available scopes: taxes.estimates:read, taxes.organizers:read","responses":{"200":{"description":"Upstream response"},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"Proxy write to Assentt Taxes","description":"Requires a taxes.*:write scope.","responses":{"200":{"description":"Upstream response"},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/accountant/{proxy+}":{"parameters":[{"name":"proxy+","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"get":{"summary":"Proxy read to Assentt Accountant","description":"Requires an accountant.*:read scope. Upstream uses machine credentials until Accountant ships scoped partner keys.","responses":{"200":{"description":"Upstream response"},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/me":{"get":{"summary":"Key and org context for the calling credential","responses":{"200":{"description":"Caller context"}}}},"/usage":{"get":{"summary":"Recent usage for the calling key's org","responses":{"200":{"description":"Usage rows"}}}}},"x-assentt-scopes":{"taxes.estimates:read":"Read tax estimates","taxes.estimates:write":"Create and update tax estimates","taxes.organizers:read":"Read tax organizers","taxes.organizers:write":"Create and update tax organizers","accountant.clients:read":"Read practice clients (curated)","accountant.summary:read":"Read practice summary for the linked firm","ai.chat:write":"Send Assentt AI chat turns","finance.transactions:read":"Read categorized finance transactions","webhooks:read":"List webhook endpoints","webhooks:write":"Manage webhook endpoints"}}