{"agent_response_sections":["request","subject","decision","evidence_summary","module_decisions","explainability","trace","data_plane","links"],"agent_screen_contract":"a2a_agent_screen_v1","app_version":"Financial Crime | Released: 2026-03-18","async_lifecycle":{"adaptive_timeout_tiers":[{"applies_to":"simple individual/entity screens with few or no connected-party/network follow-on targets","max_attempts":90,"tier":"standard","timeout_seconds":180},{"applies_to":"company, vessel, PEP/RCA, sanctions-linked associate, UBO, listed-issuer, or multi-domain cases","max_attempts":180,"tier":"complex_network","timeout_seconds":360},{"applies_to":"high-node network/UBO cases, large listed issuers, vessels with ownership chains, or cases where polling progress shows many linked parties","max_attempts":240,"tier":"deep_network","timeout_seconds":480}],"guaranteed_final_path":"result.screening_result.screen_ui","latency_attribution":"Final job responses include latency_profile and result.screening_result.runtime_latency_profile with public-safe timings for sanctions, PEP, adverse/connected-party follow-on, network/UBO, online context, AI recommendation, and screen_ui payload assembly.","poll":"GET /public/a2a/jobs/<job_id> returns running progress until terminal state.","polling_guidance":"Poll every 2 seconds using an adaptive timeout budget: standard cases up to 90 attempts, complex network/UBO/PEP/RCA/sanctions-linked cases up to 180 attempts, and deep-network or high-node cases up to 240 attempts. Stop only when final_report_ready=true or a terminal error/failed state appears. Clients may add conservative backoff after repeated pending responses.","recommended_max_poll_attempts":90,"recommended_poll_interval_seconds":2,"result_delivery":"The public A2A job endpoint only includes result.screening_result when final_report_ready=true. If AI recommendation synthesis is still pending, result is withheld and ai_recommendation.pending=true is returned.","submit":"POST /public/a2a/screen/async returns contract a2a_public_screen_job_v1 with job_id and poll_url.","terminal_failure":"status=failed or report_state=failed contains error and no final screening_result.","terminal_success":"final_report_ready=true and report_state=final indicate the external-agent result is complete."},"available_endpoints":["/.well-known/agent-card.json","/public/a2a/schema","/public/a2a/examples","/public/a2a/capabilities","/public/a2a/discovery.json","/public/a2a/health","/public/a2a/data-plane","/public/a2a/openapi.json","/public/a2a/openapi.yaml","/public/a2a/docs","/public/a2a/client-examples","/public/a2a/screen","/public/a2a/screen/async","/public/a2a/jobs/<job_id>","/public/a2a/jobs/<job_id>/events","/public/a2a/jobs/<job_id>/connected-party/domains/<domain>/retry","/public/a2a/domain-retries/<retry_job_id>","/public/a2a/reports/verify","/public/a2a/reports/diff"],"contract":"a2a_public_schema_v1","developer_examples":{"ascii_payload":{"country":"CA","mode":"company","name":"Northstar Example Trading Ltd.","type":"company"},"cjk_payload":{"country":"CN","mode":"company","name":"\u5b89\u5e73\u6e2c\u8a66\u8cbf\u6613\u6709\u9650\u516c\u53f8","type":"company"},"docs_endpoint":"/public/a2a/examples","encoding":{"body_encoding":"utf-8","content_type":"application/json; charset=utf-8","guidance":"Request bodies must be UTF-8 encoded JSON. Send Content-Type: application/json; charset=utf-8. Non-UTF-8 body bytes are rejected before job creation with error_code=invalid_utf8 where the backend can detect the decode failure; some client/proxy paths may otherwise surface as invalid_characters.","powershell_utf8_bytes":"[Text.Encoding]::UTF8.GetBytes($json)"},"invalid_utf8_error":{"error_code":"invalid_utf8","ok":false,"request_id":"present"},"malformed_json_error":{"error_code":"malformed_json","ok":false,"request_id":"present"},"missing_name_error":{"error_code":"name_required","ok":false,"request_id":"present"},"polling":{"adaptive_timeout_tiers":[{"applies_to":"simple individual/entity screens with few or no connected-party/network follow-on targets","max_attempts":90,"tier":"standard","timeout_seconds":180},{"applies_to":"company, vessel, PEP/RCA, sanctions-linked associate, UBO, listed-issuer, or multi-domain cases","max_attempts":180,"tier":"complex_network","timeout_seconds":360},{"applies_to":"high-node network/UBO cases, large listed issuers, vessels with ownership chains, or cases where polling progress shows many linked parties","max_attempts":240,"tier":"deep_network","timeout_seconds":480}],"guidance":"Poll every 2 seconds using an adaptive timeout budget: standard cases up to 90 attempts, complex network/UBO/PEP/RCA/sanctions-linked cases up to 180 attempts, and deep-network or high-node cases up to 240 attempts. Stop only when final_report_ready=true or a terminal error/failed state appears. Clients may add conservative backoff after repeated pending responses.","interval_seconds":2,"max_attempts":90,"poll":"GET /public/a2a/jobs/<job_id>","read":"result.screening_result.screen_ui.summary","submit":"POST /public/a2a/screen/async","supports_backoff":true,"terminal_error":"status=failed, report_state=failed, or ok=false with an error_code","until":"final_report_ready == true"}},"domain_scope":{"identity_verification":{"public_a2a_enabled":false,"status":"development_in_progress"},"name_screening":{"engine":"same_screening_runtime_as_live_ui","maturity":"public_demo_ready","public_a2a_enabled":true,"status":"available"},"regulatory_intelligence":{"public_a2a_enabled":false,"status":"development_in_progress"}},"guaranteed_response_fields":{"decision":["risk_score","recommendation","decision_status","overall_decision_band","presentation"],"decision.presentation":["contract","locale","localized_narrative_available","locale_integrity_status","headline","summary","reason","recommendation_text","confidence_text","next_actions_text"],"evidence":["module_decisions","pep_intelligence","identity_control","relationship_propagation"],"job_status":["job_id","job_trace_id","screening_trace_id","final_report_ready","report_state","request.payload","ai_recommendation","result_withheld","latency_profile"],"latency_profile":["contract","total_ms","job_lifecycle","timeout_tier","domains","bottlenecks","complexity_summary"],"screen_ui":["summary","modules.sanctions","modules.pep","modules.adverse","modules.network","modules.ubo","modules.crr","summary.sanctions_pep_identity_alignment","modules.sanctions.sanctions_pep_identity_alignment","modules.pep.sanctions_pep_identity_alignment"],"screen_ui.summary":["subject","overall_decision","risk_score","sanctions_status","pep_status","adverse_status","network_status","ubo_status","sector_industry_status","sector_industry_score","sector_industry_factors","sector_industry_risk","business_nature","occupation","review_required","evidence_count","linked_party_count","warnings","errors","provenance","final_report_ready","sanctions_pep_identity_alignment"],"screening_result":["screen_ui","risk_score","recommendation","decision_narrative","runtime_latency_profile"],"trace":["trace_id","history_available","replay_available","snapshot_ids"],"ui_consistency":["same_engine_as_live_ui","live_ui_result_path","a2a_result_path","screen_ui_field_mapping"]},"ok":true,"public_no_api_gate":true,"rate_limit_and_abuse_control":{"actual_policy":{"anti_automation":{"attack_confirmation_claimed":false,"blanket_user_agent_blocking":false,"bucket_memory_bounded":true,"captcha_required":false,"contract":"public-surface-anti-automation-v1","cost_aware_sustained_quota":true,"cross_process_aggregate_observability_configured":true,"cross_process_quota_enforced":true,"declared_crawlers_distinguished_from_generic_automation":true,"layered_quota_enforced":true,"legitimate_agents_identified_by_protocol_declaration":true,"legitimate_bots_and_agents_supported":true,"owasp_automated_threat":"OAT-011_scraping","protocol_declaration_bypasses_quota":false,"suspected_attack_tools_distinguished_from_generic_automation":true},"bucket":"route+ip_hash and route+ip_hash+user_agent_hash","client_classification":{"attack_classification_is_a_signal_not_attribution":true,"classes":["protocol_declared_agent","declared_crawler","browser","undeclared_automation","suspected_attack_automation","unknown"],"contract":"public-a2a-client-classification-v1","crawler_declaration_is_verified_identity":false,"protocol_declaration_bypasses_rate_limit":false,"protocol_declaration_header":"A2A-Version","protocol_declaration_headers":["A2A-Version","MCP-Protocol-Version"],"protocol_declaration_is_verified_identity":false,"protocol_version_formats":["Major.Minor","YYYY-MM-DD"],"raw_user_agent_retained":false},"enabled":true,"env":{"backend":"FINANCIAL_CRIME_PUBLIC_A2A_RATE_LIMIT_BACKEND","burst_max_requests":"FINANCIAL_CRIME_PUBLIC_A2A_BURST_MAX_REQUESTS","burst_window_seconds":"FINANCIAL_CRIME_PUBLIC_A2A_BURST_WINDOW_SECONDS","docs_enabled":"FINANCIAL_CRIME_PUBLIC_A2A_RATE_LIMIT_DOCS_ENABLED","enabled":"FINANCIAL_CRIME_PUBLIC_A2A_RATE_LIMIT_ENABLED","fail_mode":"FINANCIAL_CRIME_PUBLIC_A2A_RATE_LIMIT_FAIL_MODE","ip_limit_multiplier":"FINANCIAL_CRIME_PUBLIC_A2A_IP_LIMIT_MULTIPLIER","max_active_buckets":"FINANCIAL_CRIME_PUBLIC_A2A_MAX_ACTIVE_BUCKETS","max_requests":"FINANCIAL_CRIME_PUBLIC_A2A_RATE_LIMIT_MAX_REQUESTS","sustained_max_cost":"FINANCIAL_CRIME_PUBLIC_A2A_SUSTAINED_MAX_COST","sustained_window_seconds":"FINANCIAL_CRIME_PUBLIC_A2A_SUSTAINED_WINDOW_SECONDS","window_seconds":"FINANCIAL_CRIME_PUBLIC_A2A_RATE_LIMIT_WINDOW_SECONDS"},"fail_mode":"closed","headers":["X-Request-ID","Retry-After","X-RateLimit-Policy"],"ip_limit_multiplier":4,"layers":{"burst":{"max_requests":60,"unit":"request","window_seconds":10},"standard":{"max_requests":300,"unit":"request","window_seconds":60},"sustained":{"max_cost_units":6000,"unit":"route_cost","window_seconds":3600}},"limited_routes":["/public/telemetry/identity-guidance","/mcp","/public/a2a/screen/async","/public/a2a/jobs/<job_id>","/public/a2a/jobs/<job_id>/events","/public/a2a/jobs/<job_id>/connected-party/domains/<domain>/retry","/public/a2a/domain-retries/<retry_job_id>","/public/a2a/reports/verify","/public/a2a/reports/diff","/.well-known/agent-card.json","/public/a2a/schema","/public/a2a/examples","/public/a2a/capabilities","/public/a2a/discovery.json","/public/a2a/health","/public/a2a/data-plane","/public/a2a/openapi.json","/public/a2a/openapi.yaml","/public/a2a/client-conformance.json","/public/a2a/docs","/public/a2a/client-examples","/public/mcp/manifest.json","/public/mcp/provider-conformance.json","/public/agents/function-toolkit.json"],"max_active_buckets":20000,"max_requests":300,"request_headers":["A2A-Version","MCP-Protocol-Version","User-Agent","X-Request-ID"],"route_cost_units":{"/.well-known/agent-card.json":1,"/mcp":5,"/public/a2a/capabilities":1,"/public/a2a/client-conformance.json":1,"/public/a2a/client-examples":1,"/public/a2a/data-plane":1,"/public/a2a/discovery.json":1,"/public/a2a/docs":1,"/public/a2a/domain-retries/<retry_job_id>":2,"/public/a2a/examples":1,"/public/a2a/health":1,"/public/a2a/jobs/<job_id>":1,"/public/a2a/jobs/<job_id>/connected-party/domains/<domain>/retry":10,"/public/a2a/jobs/<job_id>/events":2,"/public/a2a/openapi.json":1,"/public/a2a/openapi.yaml":1,"/public/a2a/reports/diff":5,"/public/a2a/reports/verify":3,"/public/a2a/schema":1,"/public/a2a/screen/async":10,"/public/agents/function-toolkit.json":1,"/public/mcp/manifest.json":1,"/public/mcp/provider-conformance.json":1,"/public/telemetry/identity-guidance":1},"safe_error_body":{"error_code":"rate_limit_exceeded","ok":false,"request_id":"present","retry_after":"seconds"},"storage":{"backend":"sqlite","backend_valid":true,"cross_process_enforcement":true,"raw_bucket_keys_exposed":false,"survives_process_restart":true},"unlimited_routes":[],"window_seconds":60},"default_public_demo_posture":"safe public-demo limiter enabled for submit and poll routes; schema/examples/capabilities/health/data-plane remain open unless explicitly configured.","headers_if_enforced":["X-Request-ID","Retry-After","X-RateLimit-Policy"],"limited_routes":["/public/telemetry/identity-guidance","/mcp","/public/a2a/screen/async","/public/a2a/jobs/<job_id>","/public/a2a/jobs/<job_id>/events","/public/a2a/jobs/<job_id>/connected-party/domains/<domain>/retry","/public/a2a/domain-retries/<retry_job_id>","/public/a2a/reports/verify","/public/a2a/reports/diff","/.well-known/agent-card.json","/public/a2a/schema","/public/a2a/examples","/public/a2a/capabilities","/public/a2a/discovery.json","/public/a2a/health","/public/a2a/data-plane","/public/a2a/openapi.json","/public/a2a/openapi.yaml","/public/a2a/client-conformance.json","/public/a2a/docs","/public/a2a/client-examples","/public/mcp/manifest.json","/public/mcp/provider-conformance.json","/public/agents/function-toolkit.json"],"observability":{"aggregate_signals":["malformed_json_count","missing_name_count","validation_failure_count","submit_count","completed_job_count","rate_limit_count"],"privacy":"Public health/data-plane exposes aggregate counters and policy only, never raw names, raw IPs, user agents, or job payloads."},"rate_limit_enforced":true,"retry_semantics":"HTTP 429 includes ok=false, error_code=rate_limit_exceeded, request_id, retry_after, X-Request-ID, Retry-After, and X-RateLimit-Policy.","safe_error_body":{"error_code":"rate_limit_exceeded","ok":false,"request_id":"present","retry_after":"seconds"},"unlimited_routes":[]},"rate_limit_enforced":true,"request_id":"13878354c1744bba","request_id_contract":{"body_field":"request_id","final_payload":"result.request.request_id is returned when a final result is embedded.","header":"X-Request-ID","inbound_header_note":"If an upstream edge passes X-Request-ID it is adopted; otherwise the service generates a fresh request_id and returns it in both header and body.","poll":"Top-level request_id is returned on every poll response.","submit":"Top-level request_id and request.request_id are returned.","validation_errors":"Malformed JSON and validation errors return request_id before job creation."},"required_request_fields":{"connected_party_domain_retry":["job_id","domain"],"connected_party_domain_retry_status":["retry_job_id"],"diff":["previous_trace_id","current_trace_id"],"history":["name"],"job_status":["job_id"],"screen":["name"],"screen_async":["name"]},"response_sections":["request","subject","decision","evidence","explainability","trace","data_plane","cache","latency_profile","ui_consistency","screening_result"],"screen_contract":"a2a_public_screen_v1","screen_job_contract":"a2a_public_screen_job_v1","screen_surface_enabled":true,"screen_ui_contract":{"cross_domain_identity_alignment":{"llm_secondary_review":"Optional audit-support review; deterministic identity gates remain authoritative.","module_paths":["result.screening_result.screen_ui.modules.sanctions.sanctions_pep_identity_alignment","result.screening_result.screen_ui.modules.pep.sanctions_pep_identity_alignment"],"same_person_semantics":"When true, sanctions and PEP alerts are treated as one aligned identity for the evidence trail rather than two unrelated domain findings.","sanctions_pep_alignment_path":"result.screening_result.screen_ui.summary.sanctions_pep_identity_alignment"},"decision_semantics":{"overall_decision":"Screening disposition for agent workflow routing, not a final legal/compliance decision.","review_required":"True means additional verification and explicit uncertainty communication are expected before relying on the result.","sanctions_pep_identity_alignment":"Explains whether sanctions and PEP hits are the same person, including identity anchors, confidence, reason codes, flags, and LLM secondary review if available.","sanctions_status":"potential_match or stronger always requires review."},"field_mapping":{"result.screen_ui":"result.screening_result.screen_ui","result.screen_ui.adjudication":"result.screening_result.screen_ui.adjudication","result.screen_ui.modules":"result.screening_result.screen_ui.modules","result.screen_ui.modules.adverse":"result.screening_result.screen_ui.modules.adverse","result.screen_ui.modules.crr":"result.screening_result.screen_ui.modules.crr","result.screen_ui.modules.network":"result.screening_result.screen_ui.modules.network","result.screen_ui.modules.pep":"result.screening_result.screen_ui.modules.pep","result.screen_ui.modules.sanctions":"result.screening_result.screen_ui.modules.sanctions","result.screen_ui.modules.ubo":"result.screening_result.screen_ui.modules.ubo","result.screen_ui.summary":"result.screening_result.screen_ui.summary"},"guaranteed_path":"result.screening_result.screen_ui","live_ui_source_path":"result.screen_ui","modules":{"adverse":["status","decision","display_articles","payload","connected_party_screening"],"crr":["status","decision","risk_breakdown","sector_industry_risk","top_risk_drivers","claims_boundary"],"network":["status","decision","payload"],"pep":["status","decision","payload","connected_party_screening","sanctions_pep_identity_alignment"],"sanctions":["status","decision","matches","raw_match_count","display_match_count","discounted_candidate_count","payload","sanctions_pep_identity_alignment"],"ubo":["status","decision","payload","controlled_entities"]},"sanctions_candidate_policy":"Any sanctions candidate forces sanctions_status=potential_match or stronger and review_required=true.","summary_fields":["subject","overall_decision","risk_score","sanctions_status","pep_status","adverse_status","network_status","ubo_status","sector_industry_status","sector_industry_score","sector_industry_factors","sector_industry_risk","business_nature","occupation","review_required","evidence_count","linked_party_count","warnings","errors","provenance","final_report_ready","sanctions_pep_identity_alignment"]},"snapshot_ids":{"data_snapshot_id":"5d04fa08dd18ba09","pep_snapshot_id":"pep-reference-v728","ruleset_version":"rules-v1","sanctions_snapshot_id":"sanctions-reference-v728"},"trace_contract":"a2a_public_trace_v1","trace_surface_enabled":false,"ui_consistency_contract":{"a2a_result_path":"result.screening_result.screen_ui","final_report_ready":"Only treat result.screening_result.screen_ui as terminal when final_report_ready is true.","live_ui_result_path":"result.screen_ui","recommended_flow":"POST /public/a2a/screen/async, then poll GET /public/a2a/jobs/<job_id> until final_report_ready is true.","same_engine_as_live_ui":true,"screen_ui_field_mapping":{"result.screen_ui":"result.screening_result.screen_ui","result.screen_ui.adjudication":"result.screening_result.screen_ui.adjudication","result.screen_ui.modules":"result.screening_result.screen_ui.modules","result.screen_ui.modules.adverse":"result.screening_result.screen_ui.modules.adverse","result.screen_ui.modules.crr":"result.screening_result.screen_ui.modules.crr","result.screen_ui.modules.network":"result.screening_result.screen_ui.modules.network","result.screen_ui.modules.pep":"result.screening_result.screen_ui.modules.pep","result.screen_ui.modules.sanctions":"result.screening_result.screen_ui.modules.sanctions","result.screen_ui.modules.ubo":"result.screening_result.screen_ui.modules.ubo","result.screen_ui.summary":"result.screening_result.screen_ui.summary"},"source_runtime":"/screen/async and /screen/jobs/<job_id>","trace_semantics":{"job_trace_id":"async orchestration trace for the submitted job","screening_trace_id":"final evidence/screening trace inside result.trace.trace_id","trace_id":"backward-compatible alias of job_trace_id on job endpoints"}},"validation_rules":{"json":{"content_type":"application/json; charset=utf-8","encoding":"Request bodies must be UTF-8 encoded JSON. Send Content-Type: application/json; charset=utf-8. Non-UTF-8 body bytes are rejected before job creation with error_code=invalid_utf8 where the backend can detect the decode failure; some client/proxy paths may otherwise surface as invalid_characters.","invalid_utf8":"Rejected before job creation with HTTP 400, ok=false, error_code=invalid_utf8, request_id when request body bytes are not valid UTF-8.","malformed_json":"Rejected before job creation with HTTP 400, ok=false, error_code=malformed_json, request_id.","object_required":"Request body must be a JSON object."},"name":{"accepted_punctuation":["apostrophe","hyphen","period","comma","ampersand","parentheses","spaces"],"accepted_scripts":["CJK","Hangul","Kana","Arabic","Cyrillic","Latin with accents and combining marks"],"max_length":255,"rejected":["null bytes","C0/C1 controls","Unicode format/bidi control characters","HTML/script tokens","SQL-like payloads","names longer than 255 characters"],"required":"Missing, empty, or whitespace-only name is rejected before job creation with error_code=name_required."},"normalization":{"identity_fields":["raw_name","canonical_name","search_key","aliases","transliteration"],"preserved_fields":["name","type","country","mode","dob"]}}}
