Saltar al contenido principal

Centro de confianza

Confianza y seguridad

Este documento se proporciona únicamente en inglés. El texto en inglés es la versión vinculante; por el momento no hay una traducción disponible.

Esta página explica cómo Lumtry protege sus datos, dónde encaja la IA en una decisión de reembolso, qué subprocesadores utilizamos y cómo fluye la información a través del Servicio.

En esta página

Seguridad

Todos los espacios de trabajo funcionan con la misma postura de seguridad. Esto es lo que protege sus datos hoy.

  • Aislamiento de inquilinos. Los datos de cada organización se separan mediante seguridad a nivel de fila, y el backend vuelve a verificar el acceso en cada solicitud. Un espacio de trabajo no puede leer los registros de otro espacio de trabajo.
  • Registro de auditoría de solo adición. Cada decisión, señal y anulación se escribe en un registro de auditoría que no se puede editar ni eliminar. Cada entrada lleva un identificador de correlación, de modo que un caso se puede rastrear de principio a fin.
  • Sin datos de tarjeta sin procesar. Lumtry nunca almacena números de tarjeta. Los reembolsos y cargos hacen referencia a un tóken del procesador en su lugar, de modo que los datos de la tarjeta permanecen con el procesador de pagos.
  • Cifrado en tránsito. El tráfico hacia Lumtry se cifra en tránsito, y el panel envía encabezados de seguridad estrictos, incluida una política de seguridad de contenido y HSTS.
  • Webhooks verificados. Cada webhook entrante, ya sea de su tienda, su procesador de pagos o Slack, se verifica mediante firma antes de que Lumtry escriba algo en sus datos. Un webhook con una firma inválida se rechaza.

Cómo Lumtry utiliza la IA

  • Una política determinista que su organización escribe y versiona decide cada caso. Un reembolso que ya está en curso permanece fijado a la versión de política bajo la cual comenzó.
  • El razonamiento de la IA es una entrada más para esa política, nunca la decisión en sí. Evalúa los casos ambiguos y redacta una justificación, limitada a lo que la política ya permite.
  • Una persona aprueba cualquier caso que la política no resuelva por sí sola, desde el panel o desde Slack, antes de que se ejecute algo.
  • El texto dirigido al comprador que la IA ayuda a redactar se marca como generado por IA de forma estructural, a menos que una persona lo edite y lo envíe bajo su propio nombre, de modo que usted puede distinguir qué palabras provienen de una persona y cuáles del modelo.
  • Los compradores pueden solicitar una revisión humana de su caso desde la página de estado de la devolución. Un caso impugnado muestra uno de tres estados: en espera de revisión, revisado y confirmado, o revisado y modificado.

Lumtry no publica una cifra de exactitud ni de rendimiento para las decisiones asistidas por IA, porque la política, no el modelo, es quien decide.

Consulte nuestros subprocesadoresConsulte cómo fluyen los datos a través del Servicio

Subprocesadores

Lumtry trabaja con los siguientes proveedores para ejecutar partes del Servicio. Cada entrada muestra su función, estado y lo que podemos verificar hoy.

Anthropic

En vivo
Detalles de Anthropic
CampoValorFuente
Purpose

Model inference for agent runs on every route class (screen, classify, author, critic, reason, judge) where the tenant's routing policy selects an Anthropic model; the batch lane (judge only) and prompt caching are enabled for this endpoint.

code
Region of processing

Anthropic direct API, US processing. No EU-resident door exists at launch (owner decision 2026-09-12, epic #597: first markets are US and Canada).

code + decision
Data categories

Redacted case text (refund reasons, portal notes, shopper communications), merchant policy text, evidence-pack sections, case timelines, aggregated abuse-risk and sentiment signals, offer parameters, agent outputs under review. Never: processor tokens, card data, full email local-parts, API keys, request headers.

code
Retention on the provider side
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación
Zero-data-retention / training opt-out

Repo record (memo §8): no-training default for API traffic; Zero Data Retention available on request.

En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

owner
Contractual basis
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación
Date last verified
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación

OpenAI

En vivo
Detalles de OpenAI
CampoValorFuente
Purpose

Model inference for agent runs on every route class where the tenant's routing policy selects an OpenAI model; the batch lane (judge only) and prompt caching are enabled for this endpoint.

code
Region of processing

OpenAI default API endpoint, US processing. An EU-region endpoint exists on the provider side but is not configured (no EU door at launch, epic #597).

code + decision
Data categories

Same categories as Anthropic (the router sends the same redacted wire to whichever endpoint the policy selects).

code
Retention on the provider side
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación
Zero-data-retention / training opt-out

Repo record (memo §8): API traffic not used for training by default

En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

owner
Contractual basis
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación
Date last verified
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación

Mistral

En vivo
Detalles de Mistral
CampoValorFuente
Purpose

Model inference for agent runs on every route class where the tenant's routing policy selects a Mistral model. No batch lane, no prompt caching, no extended thinking on this endpoint (registry capabilities are empty), so no cached prefixes exist at the provider.

code
Region of processing

Mistral hosted API, EU-default hosting (memo §8).

repo record
Data categories

Same categories as Anthropic.

code
Retention on the provider side
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación
Zero-data-retention / training opt-out
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación
Contractual basis
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación
Date last verified
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación

Vercel AI Gateway

Condicional

Not a sub-processor by default. The gateway host is admitted by the router only when EQUALI_VERCEL_AI_GATEWAY_ENABLED is true and the operator declares explicitly marked gateway entries in EQUALI_ROUTER_ENDPOINTS (ADR-0089; GTM plan §15). The default is off and GA does not depend on it. When an operator enables it, this section becomes a live row and must be completed before the flag is flipped:

Detalles de Vercel AI Gateway
CampoValorFuente
Purpose

Transport proxy in front of an upstream model provider (one of the three above, or another declared endpoint). Never on the batch lane.

code
Region of processing

Vercel infrastructure (US/global); the upstream provider's own region still applies behind it.

code
Data categories

Identical to whichever upstream provider the gateway entry fronts; the gateway sees the full redacted wire.

code
Retention on the provider side
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación
Zero-data-retention / training opt-out
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación
Contractual basis
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación
Date last verified
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación

Google

Autorización pendiente
Detalles de Google
CampoValorFuente
Purpose

Model inference for agent runs on every route class where the tenant's routing policy selects a Google model, once cleared. Prompt caching is enabled for this endpoint (no batch lane).

code
Region of processing

Google's default Gemini API endpoint, US processing. No EU-resident door exists at launch (epic #597: first markets are US and Canada).

code + decision
Data categories

Same categories as Anthropic (the router sends the same redacted wire to whichever endpoint the policy selects).

code
Retention on the provider side
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación
Zero-data-retention / training opt-out
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación
Contractual basis
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación
Date last verified
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación

xAI

Autorización pendiente
Detalles de xAI
CampoValorFuente
Purpose

Model inference for agent runs on every route class where the tenant's routing policy selects an xAI model, once cleared. Prompt caching is enabled for this endpoint (no batch lane).

code
Region of processing

xAI's default API endpoint (gRPC transport), US processing. No EU-resident door exists at launch (epic #597: first markets are US and Canada).

code + decision
Data categories

Same categories as Anthropic (the router sends the same redacted wire to whichever endpoint the policy selects).

code
Retention on the provider side
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación
Zero-data-retention / training opt-out
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación
Contractual basis
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación
Date last verified
En verificación

Todavía no hemos confirmado este valor. Vuelva a consultar cuando completemos la verificación.

En verificación

Dónde se documenta esto

Estas políticas y páginas hacen referencia a los mismos subprocesadores.

Dónde se documenta esto
DocumentoQué cubre
Supabase (Postgres, Auth)The source rows the data blocks are built from, agent run records, invocation rows with token counts and cost, injection-screen records and hashes of untrusted inputs (never prompt text).
Temporal CloudWorkflow histories for agent runs: activity inputs/outputs, which include the composed prompt blocks and model outputs for the history retention period.
Logfire (US sink)Traces and metrics for every model call: token counts, cost, route decision, redaction counts. Prompt/completion content only when both the router flag and the tenant agents.telemetry.content_capture flag are on.
Deploy target (AWS / Azure / GCP / managed)Runs the router, worker and API containers that hold provider keys in the platform secrets manager; no AI data at rest beyond container logs (redacted).
Payment processors, store platforms, SlackNot AI sub-processors: no model output is sent to them and no AI provider receives their raw payloads (processor payloads are a declared untrusted input of the remediation proposer but reach the model only as normalised status rows, never as the raw webhook body).

Cómo fluyen los datos

Esta sección explica qué sale de los sistemas de Lumtry, adónde va y qué permanece dentro.

Cómo sale una solicitud de Lumtry

  1. A worker activity (or an API service) composes the prompt from labelled blocks. Each block is a DataBlock(source, text, trusted); build_prompt renders it on the wire as <data source="<label>" trusted="true|false">…</data> so the model, the redaction layer and the compliance record all see the same label. Trusted blocks are merchant- or platform-sourced (policy text, ids, aggregates); untrusted blocks are shopper-authored free text and prior model output.
  2. Untrusted blocks are screened first where the agent declares them (AgentSpec.untrusted_inputs). The injection screen runs the keyword rules and, when the tenant's screen settings allow it, one screen_injection model call whose wire wraps the text as <untrusted_data source="<label>">…</untrusted_data>; that call uses the same router route as every agent call (POST /v1/agents/{agent_id}/model-request), so step 3 applies to it too. A flagged block is withheld from the author agent (dispute reads return empty rows; the case note agent runs without the history block). The screen record stores a hash of each untrusted input, never the text.
  3. The router redacts once, before any dispatch (, redact_agent_messages). Every string on the wire - user prompt, every data block, every tool return, every prior model turn on multi-step runs - passes the universal redact_string baseline from:
  4. secret shapes (provider keys, bearer tokens, webhook secrets) → [REDACTED];
  5. Luhn-valid 13-19 digit sequences (card numbers) → [REDACTED];
  6. email addresses → the literal [EMAIL]@[REDACTED] (the whole address, local-part and domain, is replaced; nothing of the address survives). Blocks whose label appears in the tenant policy's agents.pii.redact_by_source map are additionally routed through the field-wise redact_block hints for that label. The default map is {} (migration 122), so at launch the baseline is what every block gets.
  7. Dispatch goes to the endpoint the tenant's routing policy selects among the sub-processors (Anthropic, OpenAI, Mistral, Google, xAI, plus the optional Vercel AI Gateway transport); the same redacted wire goes to whichever endpoint wins, regardless of vendor. Google and xAI carry compliance_cleared=false in the shipped platform policy (feature 581), so the routing policy and publish gate both refuse to select either vendor for production agent traffic until an operator records that vendor's sub-processor row and flips the flag; the tables below describe what would be sent, not that it is currently sent.
  8. Model output comes back into the worker activity, is validated against the agent's typed output, and is persisted as a proposal or draft. Output never reaches a processor, store platform or Slack unreviewed; it is text or a proposal row an operator acts on.

Identificadores que seudonimizamos

Only platform-issued UUIDs cross: refund_case_id, dispute_case_id, policy_version_id, agent_run_id, discrepancy and execution row ids. They identify a row inside the tenant's own data and carry no shopper identity. The correlation id is an internal header between worker, router and API; it is not placed in the prompt and is not sent to the provider. Email addresses inside free text are not pseudonymised but removed outright ([EMAIL]@[REDACTED]), so no address-derived pseudonym reaches a provider either.

Qué nunca sale de Lumtry

FieldWhy it cannot reach a provider
Processor tokens, payment-method ids, external_reversal_reference bodiesNo block reads them; the remediation execution view exposes only status, amount, method and an opaque reference id. Secret-shaped strings are additionally scrubbed by the baseline.
Raw card data / PANNever stored (CLAUDE.md security must-haves); any Luhn-valid 13-19 digit run that appears in free text is replaced by [REDACTED] before dispatch.
Full email local-part (and the domain)Baseline replaces every email address on every wire string with [EMAIL]@[REDACTED].
API keys, bearer tokens, webhook secrets, request headersSecret-shape regexes on every wire string; the observability layer's denied header set strips them from any logged request; provider credentials live only in router scope (ADR-0004).
Raw processor / store webhook payloadsThe remediation proposer declares processor_payloads as an untrusted input class, but its read tools return normalised rows (remediation.execution_status etc.), never the stored webhook body.
Shopper account identifiers (external_customer_id, order emails, addresses)Used server-side as lookup keys (prior-transaction summary, order lookup) and never rendered into a block; the summary sent is a count, first/last date and total.
Prompt and completion text into telemetryOff unless both the router flag and the tenant flag are on (§4).

Clases de ruta

Clase de ruta screen

AgentBlock / inputTrustedContentRedaction before the call
screen_injectionscreened_text (declared input); on the wire the label is the block being screened: case_history, shopper_communication, or a remediation read-tool id (remediation.case_timeline, remediation.execution_status, remediation.discrepancy, remediation.audit_trail, remediation.pinned_policy, remediation.compensation_trace)noThe untrusted text the author agent is about to receive, wrapped as <untrusted_data source=…>.Baseline (the screen call goes through the router like any agent call).

Clase de ruta classify

AgentBlock / inputTrustedContentRedaction before the call
classify_refund_caserefund_reason_textnorefund_cases.refund_reason free text, stripped.Baseline; redact_by_source hint if configured.
classify_refund_casecustomer_localeyesrefund_cases.customer_locale (BCP-47 tag or en-US).None needed.
resolve_sentimentmessage_textnoComposed from portal_submissions.note and refund_cases.refund_reason.Baseline; redact_by_source hint if configured.
resolve_sentimentcustomer_localeyesAs above.None needed.
narrate_abuse_riskrefund_caseyesA summary composed from abuse_risk_assessments.features (bands, counts, signal names) plus the recorded decision line. No shopper free text.Baseline.
retention_offer_copybrand_name, order_number, offers, currency, localeyesMerchant brand name, the order number, offer parameters (type, bonus/partial percent) as JSON, ISO currency, locale. No shopper free text (the agent declares no untrusted inputs).Baseline.

Clase de ruta author

AgentBlock / inputTrustedContentRedaction before the call
case_note_referencerefund_caseyesThe refund_case_id only.None needed.
case_note_referencecase_historynoportal_submissions.note + refund_cases.refund_reason, screened first; withheld when flagged.Injection screen, then baseline; redact_by_source hint if configured.
dispute_evidence_narrativeshopper_communication (tool dispute.shopper_communications)noportal_submissions.note with created_at, screened first; empty rows when flagged.Injection screen, then baseline (tool returns are wire strings).
dispute_evidence_narrativeevidence_sections (tool dispute.evidence_sections)yesdispute_evidence_packs.sections_jsonb: per-section status, source names and merchant-assembled facts.Baseline.
dispute_evidence_narrativecase_timeline (tool dispute.case_timeline)yesaudit_events category, timestamp and summary for the case.Baseline.
dispute_evidence_narrativepolicy_version_text (tool dispute.policy_version_text)yesPinned policy version: rule names, outcomes, explanation templates, published date.Baseline.
dispute_evidence_narrativeprior_transaction_summary (tool dispute.prior_transaction_summary)yesCount, first/last timestamp, total in minor units and currency of the shopper's prior cases; the customer id is the lookup key and is not sent.Baseline.
remediation_proposerinitial promptyesrefund_case_id and, for discrepancy targets, discrepancy_id, stated as plain ids.None needed.
remediation_proposerprocessor_payloads, shopper_text, case_notes (declared input classes)noReached only through the read tools below; each tool return is screened as a block labelled with the tool id and withheld when flagged.Injection screen, then baseline.
remediation_proposerremediation.case_timeline, remediation.audit_trailscreenedaudit_events id, category, timestamp, summary.Injection screen, then baseline.
remediation_proposerremediation.execution_statusscreenedExecution rows: id, status, amount in minor units, currency, method, opaque reversal reference; processor view status only.Injection screen, then baseline.
remediation_proposerremediation.discrepancyscreenedDiscrepancy id, status, kind, amount, currency.Injection screen, then baseline.
remediation_proposerremediation.pinned_policyscreenedPinned policy text (rule names/outcomes).Injection screen, then baseline.
remediation_proposerremediation.compensation_tracescreenedCompensation step name, status, attempt timestamp.Injection screen, then baseline.

Clase de ruta critic

AgentBlock / inputTrustedContentRedaction before the call
dispute_narrative_criticdraft_narrativenoThe author agent's draft narrative (prior model output, treated as untrusted by the family rule).Baseline.

Clase de ruta reason

AgentBlock / inputTrustedContentRedaction before the call
propose_policy_rulestask_inputyesJSON of the merchant's pasted policy text, workspace currency and locale (policy import).Baseline.
suggest_policy_rulestask_inputyesJSON of channel scope, channel roster, currency, lookback window, current rule summaries and evidence groups (aggregate bands only; no case free text, no shopper ids).Baseline.
policy_backtest_explainerget_backtest_summary (tool policy_backtest.get_backtest_summary)yesThis run's stored backtest summary (policy_backtests.summary_jsonb): case counts, transitions, approval-queue load before/after, and per-rule attribution, all computed by the pure equali_policy_engine.backtest evaluator before the run starts. No shopper free text.Baseline.
policy_backtest_explainerdraft_rule_text (tool policy_backtest.get_draft_rules)noA draft rule's name and explanation_template: merchant-authored free text. Every other field the same tool returns for a rule (rule_id, condition_json, outcome, priority) is a platform value the pure evaluator already validated.Baseline.

Clase de ruta judge

AgentBlock / inputTrustedContentRedaction before the call
eval_judgerubricyesThe per-agent grading rubric (platform text).None needed.
eval_judgesampled_outputnoThe sampled agent run's output and the facts it was produced from, as already redacted for that run.Baseline (runs on the batch lane where the endpoint supports it).

Telemetría

Every model call emits a span and an invocation row with token counts, cost, route decision, endpoint, effort and redaction counters. Prompt and completion content is attached only when both RouterSettings.equali_ai_content_capture_enabled and the tenant policy flag agents.telemetry.content_capture are true; the attached content is passed through redact_key_value first. Either flag off means no content in Logfire. Event payloads (gen_ai events) carry no prompt, completion or provider response body.

Retención de datos

Los períodos de retención varían según el proveedor y el tipo de datos. Cada sección de subprocesador anterior indica la fila de retención de ese proveedor; a continuación se explica lo que significan esos valores.

Provider-side retention is per sub-processor in (owner input). Platform-side, the composed prompt blocks live in Temporal workflow history for the history retention period and the persisted proposal/draft rows live under the tenant's normal data lifecycle and DSAR export. Prompt text is not stored in agent_runs, ai_invocations or the injection-screen records; only hashes, counts and costs are.

Consulte la fila de retención en la sección de subprocesadores de cada proveedor anterior para conocer el período específico de ese proveedor.

Contáctenos

¿Tiene preguntas sobre esta página, sus datos o cómo Lumtry utiliza la IA? Comuníquese con cualquiera de los siguientes equipos.