> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gavai.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Subprocessors and data processing

> How gavAI uses third-party processors, how change-notice works, where data sits by region, and how to get the live subprocessor inventory under NDA.

export const Def = ({term, type, defaultValue, required, children}) => <>
    <dt className="gv-def-list__term">
      <span className="gv-def-list__name">{term}</span>
      {type && <span className="gv-def-list__type">{type}</span>}
      {required && <span className="gv-def-list__required">required</span>}
      {defaultValue !== undefined && <span className="gv-def-list__default">
          default <code>{defaultValue}</code>
        </span>}
    </dt>
    <dd className="gv-def-list__description">{children}</dd>
  </>;

export const DefList = ({children}) => <dl className="gv-def-list">{children}</dl>;

export const BrandCard = ({eyebrow, title, href, icon, badge, cta, featured = false, horizontal = false, children}) => {
  const classes = ["gv-card", featured && "gv-card--featured", horizontal && "gv-card--horizontal"].filter(Boolean).join(" ");
  const inner = <>
      {icon && <span className="gv-card__icon" aria-hidden="true">
          <Icon icon={icon} />
        </span>}
      <div className="gv-card__main">
        {(eyebrow || badge) && <div className="gv-card__meta">
            {eyebrow && <Eyebrow label={eyebrow} tone="muted" />}
            {badge && <span className="gv-card__badge">{badge}</span>}
          </div>}
        <h3 className="gv-card__title">{title}</h3>
        {children && <div className="gv-card__body">{children}</div>}
        {cta && <span className="gv-card__cta">
            {cta}
            <svg className="gv-card__cta-arrow" viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
              <line x1="7" y1="17" x2="17" y2="7" />
              <polyline points="7 7 17 7 17 17" />
            </svg>
          </span>}
      </div>
    </>;
  return href ? <a className={classes} href={href}>
      {inner}
    </a> : <div className={classes}>{inner}</div>;
};

export const ArrowItem = ({children}) => <li className="gv-arrow-item">
    <span className="gv-arrow-item__arrow" aria-hidden="true">{"↳︎"}</span>
    <span className="gv-arrow-item__content">{children}</span>
  </li>;

export const ArrowList = ({children}) => <ul className="gv-arrow-list">{children}</ul>;

export const Eyebrow = ({label, tone = "default"}) => <div className={`gv-eyebrow gv-eyebrow--${tone}`}>
    <span className="gv-eyebrow__bar" aria-hidden="true" />
    <span className="gv-eyebrow__label">{label}</span>
  </div>;

<Eyebrow label="SECURITY" />

By the end of this page you will know how gavAI uses subprocessors, how change-notice works, what is in-region versus out-of-region for your workspace, and how to obtain the current subprocessor inventory.

## How we describe processors

gavAI describes its platform by **architectural role**, not by the third-party processor that fills it today. Roles are stable contracts — *object storage*, *primary database*, *transactional email gateway*, *AI gateway*. The processor that fills each role is an implementation choice that may change.

We hold the live inventory off the public docs site for two reasons:

<ArrowList>
  <ArrowItem>**Compliance reviewers need the current list, not a stale one.** A versioned doc page lags behind the live system. Compliance reviews should run off the current inventory, not a snapshot.</ArrowItem>
  <ArrowItem>**Reduced attack surface.** The list of processors and the data each one touches is operational detail that doesn't help legitimate readers find an answer; it just helps an attacker enumerate.</ArrowItem>
</ArrowList>

## Getting the live inventory

Workspace owners and their compliance teams can request the current subprocessor inventory at any time. The inventory includes every architectural role, the current processor for each, the categories of data each one touches, regional residency, and any sub-sub-processor relationships disclosed by the vendor.

To request it:

<ArrowList>
  <ArrowItem>Email `security@gavai.io` with subject line `subprocessor inventory request` and the workspace slug.</ArrowItem>
  <ArrowItem>You receive the live inventory under the mutual NDA on file (or we can put one in place first if needed).</ArrowItem>
  <ArrowItem>The same email address is used for change-notice subscription, vulnerability reports (see [Disclosure](/security/disclosure)), and ad-hoc compliance questions.</ArrowItem>
</ArrowList>

## Change-notice policy

When we add a new subprocessor or replace an existing one:

<DefList>
  <Def term="Notice period" type="commitment" defaultValue="30 days">
    We notify workspace owners on the security-notification list at least 30 days before the change goes live.
  </Def>

  <Def term="Right to object" type="commitment">
    During the notice period, any workspace owner can object. Objection triggers an exception process: we confirm whether the change materially affects your compliance posture, and if so, what options exist (delay, opt-out, or contract termination).
  </Def>

  <Def term="Triggering events" type="scope">
    Adding a new processor, replacing one, or moving a workload to a new region. Routine vendor-side version upgrades do not trigger notice.
  </Def>
</DefList>

To subscribe to change-notice emails, contact `security@gavai.io` with subject `subscribe subprocessor-notice` and the workspace slug.

## Data residency

When a workspace is provisioned, the workspace owner selects a region. All processors that handle workspace content or end-user data are configured to keep that workspace in-region.

The narrow exceptions — operational telemetry and CRM-related processing — are documented in the live inventory. No workspace content or end-user PII is included in those flows; they carry operator (workspace-owner) account metadata only.

If your compliance posture requires strict in-region telemetry, contact us before provisioning so we can confirm we can meet that bar for your account.

## What subprocessors never touch

Two commitments hold across every processor we use:

<ArrowList>
  <ArrowItem>**No subprocessor uses workspace content to train models.** Where AI processing is involved, we contract for explicit no-train terms.</ArrowItem>
  <ArrowItem>**No subprocessor sells, rents, or shares workspace data.** Our agreements bind every processor to processor-only handling — they act on our instruction and on yours, never independently.</ArrowItem>
</ArrowList>

The architecture is also built to enforce these where possible: workspace content is encrypted at rest with envelope encryption, network egress is audited, and any new data flow requires a documented data-flow review before it ships.

## Related

<Columns cols={2}>
  <BrandCard eyebrow="ISOLATION" title="Multi-tenant isolation" href="/concepts/multi-tenant" icon="building">
    The boundaries that keep one workspace's data away from every other workspace.
  </BrandCard>

  <BrandCard eyebrow="ARCHITECTURE" title="How gavAI works" href="/concepts/how-it-works" icon="map">
    The three parties, request flow, and the role-vs-vendor model.
  </BrandCard>

  <BrandCard eyebrow="SCOPES" title="Token scopes" href="/security/scopes" icon="key">
    The permissions each kind of token has, and how to scope them tightly.
  </BrandCard>

  <BrandCard eyebrow="DISCLOSURE" title="Coordinated disclosure" href="/security/disclosure" icon="bug">
    How to report a vulnerability and what to expect.
  </BrandCard>
</Columns>
