{"openapi":"3.1.0","info":{"title":"GridZen","description":"全球身份、账户与风险信号的决策编排 API","version":"0.2.0"},"paths":{"/health":{"get":{"tags":["health"],"summary":"Health Check","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/decisions/{event}":{"post":{"tags":["trust-decisions"],"summary":"Decide","description":"Evaluate onboarding, payout, or account-change risk through a provider route.","operationId":"decide_api_v1_decisions__event__post","parameters":[{"name":"event","in":"path","required":true,"schema":{"type":"string","title":"Event"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/decisions/traces/{trace_id}":{"get":{"tags":["trust-decisions"],"summary":"Get Trace","description":"Read a development trace. Enable customer-level authorization before production.","operationId":"get_trace_api_v1_decisions_traces__trace_id__get","parameters":[{"name":"trace_id","in":"path","required":true,"schema":{"type":"string","title":"Trace Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionTrace"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DecisionContext":{"properties":{"country":{"anyOf":[{"type":"string","maxLength":2,"minLength":2},{"type":"null"}],"title":"Country","examples":["MX"]},"expected_country":{"anyOf":[{"type":"string","maxLength":2,"minLength":2},{"type":"null"}],"title":"Expected Country"},"client_reference":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Client Reference"},"consent_reference":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Consent Reference"},"callback_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Callback Url"}},"type":"object","title":"DecisionContext","description":"Non-identity context used to select a policy and provider route."},"DecisionEvent":{"type":"string","enum":["onboarding","payout","account_change"],"title":"DecisionEvent"},"DecisionOutcome":{"type":"string","enum":["allow","review","decline"],"title":"DecisionOutcome"},"DecisionRequest":{"properties":{"event":{"$ref":"#/components/schemas/DecisionEvent"},"subject":{"$ref":"#/components/schemas/SubjectIdentifiers"},"context":{"$ref":"#/components/schemas/DecisionContext"},"providers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Providers","description":"Optional provider IDs. Omit to use the policy default route.","examples":[["local-baseline"]]}},"type":"object","required":["event","subject"],"title":"DecisionRequest"},"DecisionResponse":{"properties":{"trace_id":{"type":"string","title":"Trace Id"},"event":{"$ref":"#/components/schemas/DecisionEvent"},"decision":{"$ref":"#/components/schemas/DecisionOutcome"},"risk_score":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Risk Score"},"reason_codes":{"items":{"type":"string"},"type":"array","title":"Reason Codes"},"evidence":{"items":{"$ref":"#/components/schemas/Evidence"},"type":"array","title":"Evidence"},"providers_used":{"items":{"type":"string"},"type":"array","title":"Providers Used"},"evaluated_at":{"type":"string","format":"date-time","title":"Evaluated At"},"audit_retention_note":{"type":"string","title":"Audit Retention Note"}},"type":"object","required":["trace_id","event","decision","risk_score","reason_codes","evidence","providers_used","evaluated_at","audit_retention_note"],"title":"DecisionResponse"},"DecisionTrace":{"properties":{"trace_id":{"type":"string","title":"Trace Id"},"event":{"$ref":"#/components/schemas/DecisionEvent"},"decision":{"$ref":"#/components/schemas/DecisionOutcome"},"risk_score":{"type":"integer","title":"Risk Score"},"reason_codes":{"items":{"type":"string"},"type":"array","title":"Reason Codes"},"providers_used":{"items":{"type":"string"},"type":"array","title":"Providers Used"},"identifier_types":{"items":{"type":"string"},"type":"array","title":"Identifier Types"},"consent_reference_present":{"type":"boolean","title":"Consent Reference Present"},"evaluated_at":{"type":"string","format":"date-time","title":"Evaluated At"}},"type":"object","required":["trace_id","event","decision","risk_score","reason_codes","providers_used","identifier_types","consent_reference_present","evaluated_at"],"title":"DecisionTrace","description":"PII-minimized operational audit entry, suitable for a future audit store."},"Evidence":{"properties":{"provider":{"type":"string","title":"Provider"},"signal":{"type":"string","title":"Signal"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"},{"type":"null"}],"title":"Value"},"confidence":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Confidence"},"observed_at":{"type":"string","format":"date-time","title":"Observed At"},"metadata":{"type":"object","title":"Metadata"}},"type":"object","required":["provider","signal","confidence","observed_at"],"title":"Evidence"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"SubjectIdentifiers":{"properties":{"email":{"anyOf":[{"type":"string","maxLength":254},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Phone"},"ip_address":{"anyOf":[{"type":"string","maxLength":45},{"type":"null"}],"title":"Ip Address"},"national_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"National Id"},"bank_account":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Bank Account"}},"type":"object","title":"SubjectIdentifiers","description":"Identifiers supplied for the subject of a decision.\n\nThe API accepts only the identifiers needed for a requested check.  They are\npassed to providers at evaluation time and are deliberately excluded from\nGridZen's decision audit payload."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}