Security

What leaves your shop — and what doesn't.

CrossCode uses Anthropic Claude Sonnet 4.6 (with OpenAI GPT-4o-mini as a fallback) to apply GRI reasoning over the line items in your invoice. Both providers are accessed under enterprise zero-retention terms — your data is not used for training, and they retain nothing after the request returns. Before any payload leaves our perimeter, it passes through a sanitization chokepoint that enforces the separation below.

Sent for classification

Allowlist · enforced
  • Normalized line-item description
  • Quantity and unit
  • Country of origin
  • Material composition
  • Retrieved HTS candidates
  • Retrieved CBP CROSS rulings

Never leaves your perimeter

Blocklist · enforced
  • Unit and total prices
  • Supplier and manufacturer names
  • Invoice and PO numbers
  • Buyer name and address
  • Bank account and routing info
  • Payment and freight terms
  • Raw invoice text and free-form notes

Pydantic-enforced allowlist

Every outbound payload is constructed as an immutable schema with extra="forbid". Any attempt to attach a blocked field — even by mistake — raises a validation error at the call site, not silently at the API boundary.

Append-only audit log

Every byte that crosses the perimeter is hashed and logged in a database table with no UPDATE or DELETE paths. You can subpoena the log if a CBP examiner asks what was sent.

Red-team tests in CI

The test suite injects PII marker strings into mock invoices and fails the build if any marker appears in an outbound payload. A regression in the sanitizer cannot ship to production.

Full security overview, including subprocessor list and SOC 2 status, is available on request — email founders@crosscode.pro.