Skip to main content
A successful call returns HTTP 200 with a top-level action and a per-content-part breakdown in input_results. Starfort returns the Guardian’s response body verbatim — no wrapper, no field reshaping.

The action model

The action set depends on the policy type:
  • PII policies return PASS / MASK / BLOCK.
  • Topic policies are 2-state: they return PASS or BLOCK (a topic classified unsafe blocks; everything else passes).
The root action is the highest severity across everything detected: BLOCK > MASK > PASS. See Actions.

Top-level

Each input_results[] entry:

MASK example (PII)

Masking token format: [<MASK_WORD>_<n>], numbered per occurrence ([PHONE_NUMBER_1], [PHONE_NUMBER_2], …).

Processed-content egress — what goes out is always processed_content

Starting with v1.4, the content that leaves for an external AI service is never the caller’s original — it’s the processed content (processed_content) that Guardian actually inspected and rebuilt:
  • PASS — the processed content is delivered. Even when nothing needed masking and the content reads the same as the original, what’s delivered is Guardian’s rebuilt version.
  • MASK — the masked processed content is delivered.
  • BLOCK — nothing is delivered (processed_content is null).
  • Inputs no processed content could be built from (unsupported files, parse or decode failures) — Guardian couldn’t verify the contents, so the field is null, and the original must not be sent in its place (fail-closed).
For inputs that go through OCR, decoding, or parsing — images, documents, audio — there’s no guarantee the conversion captured everything in the original. Delivering only the processed content confines egress to the representation Guardian actually verified, closing the path where unverified content rides out inside the original.
What changed from v1.3 — through v1.3, processed_content was populated only on MASK, and PASS meant the caller’s original went out as-is (the field was null). From v1.4 on, PASS populates the processed content too, and delivering it instead of the original is the contract.

BLOCK example (Topic)

detected_items — PII vs. Topic

The fields differ by policy type:
Read the top-level action first. On PASS and MASK, send processed_content onward instead of the original (see the processed-content egress rule above). On BLOCK, do not call your model. See Actions.

PASS always means “analyzed, nothing detected”

A PASS with empty results is never ambiguous: it means the Guardian completed analysis and found nothing — not that it failed to analyze. A request the Guardian cannot analyze returns an HTTP error instead of a degraded 200 (Guardian fail-closed), so a failure can never be mistaken for a clean result. See Errors & states.