{"version":"4.1.0","scale":"0-100","last_updated":"2026-08-31","update_cadence":"every_6_hours","suspension_threshold":0.2,"agent_threshold":0.7,"formula":"tier_capped_weighted_dimensions_plus_external_assurance_bonus","dimensions":{"merchantReliabilityBase":{"purpose":"Base de fiabilidad del comercio: fulfillment, salud de disputas/reembolsos, calidad operativa de catálogo, antigüedad de la tienda y volumen de pedidos humanos."},"agenticReadiness":{"purpose":"Preparación para servir a agentes: calidad de setup, seguridad de protocolo (firma Ed25519), salud de compliance y frescura de integración."},"agenticEvidence":{"purpose":"Evidencia derivada de transacciones agénticas reales (checkout, fulfillment y salud de disputas por agente, integridad de recibos)."},"externalAssurance":{"purpose":"Bonus aditivo (máx +10) por certificaciones externas que superan los gates v4.1. No es una dimensión ponderada; se suma tras el score base.","type":"bonus","max_bonus":10}},"tiers":{"insufficient_data":{"cap":null,"criteria":"Sin componentes aplicables (o alguna señal synthetic_blocked): el motor v4.1 NO emite valor. Eso NO significa que la respuesta venga sin score: lo que ocurre entonces es el fallback declarado en `engine_selection.overall` — se publica el número del motor v2, y la respuesta lo dice en su campo `engines` (`overall: \"v2\"`). Trátalo como resultado DEGRADADO: v2 no aplica los topes por tier ni las comprobaciones de evidencia agéntica de v4.1, así que no es comparable con un v4.1 ni sirve para afirmar fiabilidad comercial. Lee `engines` y `confidence_level` de cada respuesta antes de usar el número."},"cold_start":{"cap":65,"criteria":"humanOrders < 5 y agentOrders < 5.","dimension_weights":{"merchantReliabilityBase":0,"agenticReadiness":1,"agenticEvidence":0}},"human_established":{"cap":85,"criteria":"humanOrders >= 5 y agentOrders < 5.","dimension_weights":{"merchantReliabilityBase":0.7,"agenticReadiness":0.3,"agenticEvidence":0}},"agent_verified_thin":{"cap":92,"criteria":"agentOrders entre 5 y 19 (interpolación solo dentro del tier).","dimension_weights":{"merchantReliabilityBase":0.45,"agenticReadiness":0.25,"agenticEvidence":0.3}},"agent_verified":{"cap":100,"criteria":"agentOrders >= 20 y GMV >= 1000000 cents (10k EUR) en 90d y >= 20 compradores únicos. Sin GMV floor o sin unique-buyer-count → degrada a agent_verified_thin.","dimension_weights":{"merchantReliabilityBase":0.35,"agenticReadiness":0.25,"agenticEvidence":0.4}}},"data_quality_levels":{"verified":"Valor derivado de evidencia verificada criptográficamente (p. ej. outcomes de validación de TrustReceipt o certificaciones que superan los gates).","measured":"Valor procedente de una medición real y directa.","proxy":"Valor de una señal relacionada pero indirecta (proxy), no una medición directa del objetivo; p. ej. una tasa store-wide usada como aproximación de la métrica per-agente.","self_declared":"Valor declarado por el comercio, no verificado de forma independiente.","not_applicable":"Sin dato disponible para la señal; su peso se redistribuye en lugar de puntuar un valor sintético.","synthetic_blocked":"Marcador defensivo fail-closed: si alguna señal fuese sintética, el score colapsa a insufficient_data en lugar de puntuar un valor inventado."},"engine_selection":{"overall":"v4.1 cuando la bandera del overlay está activa Y el overlay produce un número; en cualquier otro caso (bandera apagada, o confidence_level insufficient_data), v2. Este segundo caso es un FALLBACK a un resultado degradado, no una ausencia de score: siempre sale un número, y `tiers.insufficient_data` describe la misma regla desde el otro lado. Ninguna configuración devuelve hoy «sin puntuación» por esta vía.","breakdown":"v4.1 sólo si además está activa la bandera de motor coherente; si no, el desglose por componentes que se publica es el de los 12 componentes v2.","flags":{"overall":"TRUST_SCORE_PUBLIC_V41_ENABLED","breakdown":"TRUST_SCORE_PUBLIC_COHERENT_ENGINE_ENABLED"},"note":"Cada respuesta de /api/v1/stores/{slug}/trust-score declara en su campo `engines` qué motor produjo esa respuesta concreta. Léelo ahí en vez de asumirlo: es por tienda y por petición, no global."},"legacy_v2":{"version":"2.0","formula":"weighted_sum_clamped_0_1","scale":"0-1","describes":["components","thresholds_legacy","suspension_threshold","agent_threshold"],"note":"Estos cuatro campos siguen en el nivel superior con sus valores de siempre, por compatibilidad. Describen el modelo v2: son las señales que se recogen de la tienda y los umbrales en escala 0-1. NO son la fórmula del número cuando lo calcula v4.1 — para eso, `dimensions`, `tiers` y `scale`."},"components":{"catalog_completeness":{"weight":0.11,"source":"verified","description":"Ratio of products with all required fields (title, price, images, GTIN)"},"catalog_freshness":{"weight":0.11,"source":"verified","description":"Age of last successful catalog sync, normalized 0-1"},"price_accuracy":{"weight":0.12,"source":"verified","description":"Match rate between listed price and live price at checkout"},"availability_accuracy":{"weight":0.08,"source":"verified","description":"Stock-status accuracy vs. actual inventory"},"policy_coverage":{"weight":0.08,"source":"declared","description":"Fraction of required policy fields filled (return, shipping, privacy)"},"checkout_success_rate":{"weight":0.11,"source":"verified","description":"Ratio of checkout_complete / checkout_start agent events"},"fulfillment_rate":{"weight":0.08,"source":"verified","description":"Orders fulfilled on-time over trailing 90 days"},"dispute_rate":{"weight":0.07,"source":"verified","description":"Dispute tickets / total orders (lower = better)"},"agent_satisfaction_rate":{"weight":0.08,"source":"verified","description":"Agent checkout conversion rate (CHECKOUT_COMPLETE / CHECKOUT_START events)"},"response_latency":{"weight":0.05,"source":"verified","description":"API p95 response latency score (1.0 = < 200ms, 0.0 = > 2000ms)"},"review_sentiment":{"weight":0.05,"source":"declared","description":"Average product rating normalized 0-5 → 0-1. The rating is asserted by the merchant and is not verified by Trusteed; with no ratings on file this component defaults to 0.5, so declaring high ratings scores above declaring none."},"data_consistency":{"weight":0.06,"source":"verified","description":"Cross-field consistency (price/currency, stock/quantity, GTIN uniqueness)"}},"display_labels":{"0":{"label":"RESTRICTED","meaning":"Display band only; grants or removes no permission."},"0.9":{"label":"EXCELLENT","meaning":"Display band only; grants or removes no permission."},"0.8":{"label":"GOOD","meaning":"Display band only; grants or removes no permission."},"0.7":{"label":"ACCEPTABLE","meaning":"Display band only; grants or removes no permission."},"0.5":{"label":"CAUTION","meaning":"Display band only; grants or removes no permission."}},"operational_status":{"0":{"status":"suspended","meaning":"Auto-suspended from agent discovery."},"0.5":{"status":"active","meaning":"Eligible for normal agent visibility and checkout."},"0.3":{"status":"deprioritized","meaning":"Deprioritized in agent-facing search results."},"0.2":{"status":"hidden","meaning":"Hidden from agent discovery."}},"thresholds_legacy":{"deprecated":"Reemplazado por `display_labels` (banda de pantalla) y `operational_status` (estado operativo): esta escalera mezclaba ambos bajo un solo campo, y por eso su fila RESTRICTED afirmaba una suspensión que esa etiqueta no gobierna — ver `GET /stores/:slug/trust-score`, campo `engines`. Se conserva con los mismos valores por compatibilidad; los nuevos consumidores deben leer las dos escaleras de arriba.","entries":{"0.95":{"label":"ELITE","meaning":"Top 5% of platform merchants. Maximum agent trust."},"0.85":{"label":"VERIFIED","meaning":"Verified merchant tier. Agents may proceed without friction."},"0.70":{"label":"STANDARD","meaning":"Minimum threshold for agent checkout. Proceed with normal confirmation."},"0.50":{"label":"CAUTION","meaning":"Deprioritized in search results. Agents should add friction."},"0.20":{"label":"RESTRICTED","meaning":"Legacy display label. Does not by itself imply an operational state — see `operational_status`, which is what governs agent-discovery suspension."}}},"anti_manipulation":["All 'verified' components are computed from live transaction data — merchants cannot self-report them","Scores are computed server-side every 6 hours and signed (JWS, Ed25519) with the platform key published at /.well-known/jwks.json","NO qualified (QTSP/RFC 3161) timestamp is applied today: /api/v1/health reports qtsp.enabled = false. The `signed_at` inside a signed score is asserted by the issuer, not attested by a qualified trust service provider — do not treat it as a qualified timestamp","Score history is immutable (append-only TrustScoreEvent table)","Suspicious rapid score gains trigger anomaly alerts reviewed by Trusteed admin"],"dispute_process":{"endpoint":"POST /api/v1/trust/appeal","sla_hours":72,"documentation":"https://trusteed.xyz/en/trust"},"v41_methodology":{"version":"4.1.0","status":"active","status_note":"`status` describes whether the v4.1 engine is ACTIVATED, not that any given score came from it. With confidence_level insufficient_data the overall is still produced by v2 (see engine_selection.overall). Read each trust-score response's own `engines` field to know which engine produced that number.","enabled_flag":"TRUST_SCORE_PUBLIC_V41_ENABLED (public read surfaces — TRUST_SCORE_V41_ENABLED is off)","scale":"0-100","formula":"tier_capped_weighted_dimensions_plus_external_assurance_bonus","dimensions":{"merchantReliabilityBase":{"purpose":"Base de fiabilidad del comercio: fulfillment, salud de disputas/reembolsos, calidad operativa de catálogo, antigüedad de la tienda y volumen de pedidos humanos."},"agenticReadiness":{"purpose":"Preparación para servir a agentes: calidad de setup, seguridad de protocolo (firma Ed25519), salud de compliance y frescura de integración."},"agenticEvidence":{"purpose":"Evidencia derivada de transacciones agénticas reales (checkout, fulfillment y salud de disputas por agente, integridad de recibos)."},"externalAssurance":{"purpose":"Bonus aditivo (máx +10) por certificaciones externas que superan los gates v4.1. No es una dimensión ponderada; se suma tras el score base.","type":"bonus","max_bonus":10}},"tiers":{"insufficient_data":{"cap":null,"criteria":"Sin componentes aplicables (o alguna señal synthetic_blocked): el motor v4.1 NO emite valor. Eso NO significa que la respuesta venga sin score: lo que ocurre entonces es el fallback declarado en `engine_selection.overall` — se publica el número del motor v2, y la respuesta lo dice en su campo `engines` (`overall: \"v2\"`). Trátalo como resultado DEGRADADO: v2 no aplica los topes por tier ni las comprobaciones de evidencia agéntica de v4.1, así que no es comparable con un v4.1 ni sirve para afirmar fiabilidad comercial. Lee `engines` y `confidence_level` de cada respuesta antes de usar el número."},"cold_start":{"cap":65,"criteria":"humanOrders < 5 y agentOrders < 5.","dimension_weights":{"merchantReliabilityBase":0,"agenticReadiness":1,"agenticEvidence":0}},"human_established":{"cap":85,"criteria":"humanOrders >= 5 y agentOrders < 5.","dimension_weights":{"merchantReliabilityBase":0.7,"agenticReadiness":0.3,"agenticEvidence":0}},"agent_verified_thin":{"cap":92,"criteria":"agentOrders entre 5 y 19 (interpolación solo dentro del tier).","dimension_weights":{"merchantReliabilityBase":0.45,"agenticReadiness":0.25,"agenticEvidence":0.3}},"agent_verified":{"cap":100,"criteria":"agentOrders >= 20 y GMV >= 1000000 cents (10k EUR) en 90d y >= 20 compradores únicos. Sin GMV floor o sin unique-buyer-count → degrada a agent_verified_thin.","dimension_weights":{"merchantReliabilityBase":0.35,"agenticReadiness":0.25,"agenticEvidence":0.4}}},"data_quality_levels":{"verified":"Valor derivado de evidencia verificada criptográficamente (p. ej. outcomes de validación de TrustReceipt o certificaciones que superan los gates).","measured":"Valor procedente de una medición real y directa.","proxy":"Valor de una señal relacionada pero indirecta (proxy), no una medición directa del objetivo; p. ej. una tasa store-wide usada como aproximación de la métrica per-agente.","self_declared":"Valor declarado por el comercio, no verificado de forma independiente.","not_applicable":"Sin dato disponible para la señal; su peso se redistribuye en lugar de puntuar un valor sintético.","synthetic_blocked":"Marcador defensivo fail-closed: si alguna señal fuese sintética, el score colapsa a insufficient_data en lugar de puntuar un valor inventado."},"deprecated":"Los mismos datos están ahora en el nivel superior (`version`, `scale`, `formula`, `dimensions`, `tiers`, `data_quality_levels`). Este bloque se conserva para no romper a los consumidores existentes."}}