# Locale Text Safety Audit

> Locale Text Safety Audit is a paid API for AI agents from api.zfinia.com, paid per call via x402, $0.17/call, status unknown (last checked 2026-10-10).

Audits locale/i18n message files for invisible characters, zero-width characters, non-NFC Unicode normalization, and unexpected markup in translations

## Facts

- Endpoint: POST https://api.zfinia.com/x402/v1/locale-text-safety-audit?utm_source=zero.xyz
- Price: $0.17/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-10
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/locale-text-safety-audit-37be242a
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_k3rhGrJx31j0C3iGvaNZQ

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability locale-text-safety-audit-37be242a -d '<json body>'
```

Example prompt: Can you audit these two locale files — one is the English base and one is the French translation — and flag any invisible bidi control characters, zero-width characters, non-NFC text, or unexpected HTML markup that snuck into the French strings?

## When to prefer this

Choose this endpoint when you need character-level safety analysis of localization files rather than structural or key-coverage checks. It is specifically designed to catch attack vectors and subtle bugs — bidi spoofing, invisible padding, normalization inequality, and markup injection — that standard i18n linters and diff tools cannot see because they render or ignore the characters in question. Prefer it during translation review pipelines, security audits of externally sourced translations, or when debugging mysterious string comparison failures or length-limit issues.

## Known failure modes

- Fewer than 2 locale objects provided — minimum of 2 required
- A locale object missing required 'locale' or 'messages' fields returns a validation error
- More than 60 locale objects submitted — maxItems exceeded
- Locale string exceeds 35 characters
- Messages value is neither an object nor a string — type mismatch error
- Network timeout for very large message datasets

## How this service works

Read the characters in a locale file rather than its structure. Reports a bidirectional control character, which is invisible in every editor and reorders everything after it including text nobody touched; a zero-width character, which still counts toward a length limit; text not in NFC form, which compares unequal to the same text typed differently; and markup appearing only in a translation, where the call site was written for plain text.

## Output

A structured report listing each locale file finding by type: bidirectional control characters (with position and affected text), zero-width characters (with position and length impact), non-NFC normalized text segments (showing the raw vs. normalized form), and markup found only in a translation but not in the base locale. Each issue references the locale, message key, and character position.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "locales": {
   "type": "array",
   "items": {
    "type": "object",
    "required": [
     "locale",
     "messages"
    ],
    "properties": {
     "base": {
      "type": "boolean"
     },
     "locale": {
      "type": "string",
      "maxLength": 35
     },
     "messages": {
      "type": [
       "object",
       "string"
      ]
     }
    },
    "additionalProperties": false
   },
   "maxItems": 60,
   "minItems": 2
  },
  "allow_html": {
   "type": "boolean"
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/locale-text-safety-audit-37be242a/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.zfinia.com](https://www.zero.xyz/host/api.zfinia.com/llms.txt)
