Features / Files and redaction
PDFs for every model. Secrets and PII out before the model reads them.
Send PDFs, Word, Excel and HTML to any chat model: models without file input get the text. Per-key redaction swaps secrets and PII for placeholders.
What it does
- Files for every chat model
- 37 models read documents natively and get them as sent; the other 302 get the document as text.
- Three request shapes
- Chat file parts, Anthropic document blocks (tool results included) and Responses input_file parts, as base64 or a URL.
- Fallbacks keep working
- With a models list, a document passes through as sent only when every model on the list reads files; otherwise it is read to text once.
- Secrets out before the model
- API keys, tokens and private keys become [[SECRET_n]] placeholders; with secrets_pii, emails, phones, cards, SSNs and IBANs too.
- Originals back in the answer
- Placeholders the model repeats are swapped back to the real values, in whole and streamed answers.
- Per key or per request
- Set redact on the key, or send x-uplink-redact on one request. A redacted request skips the response cache.
Pricing · live catalog, 2026-11-04
| What | Models | Price |
|---|---|---|
| Documents, models that read files | 37 models | Sent as is; tokens at the model price |
| Documents, every other model | 302 models | $0.00 per page read, then $0.06 in · $0.18 out per 1M tokens on deepseek-v4.1-flash |
| Secret and PII redaction | Every key | No fee |
Request example
curl · Responses, file URL
curl https://api.uplinkswitch.com/v1/responses \
-H "Authorization: Bearer $UPLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4.1-flash",
"input": [{
"role": "user",
"content": [
{"type": "input_text", "text": "List every payment date in this contract."},
{"type": "input_file", "file_url": "https://example.com/contract.pdf"}
]
}]
}'Python · local PDF
import base64
from openai import OpenAI
client = OpenAI(base_url="https://api.uplinkswitch.com/v1", api_key="sk-uplink-live-...")
with open("invoice.pdf", "rb") as f:
data = base64.b64encode(f.read()).decode()
res = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": [
{"type": "text", "text": "What is the total due?"},
{"type": "file", "file": {"filename": "invoice.pdf",
"file_data": f"data:application/pdf;base64,{data}"}},
]}],
)curl · redact one request
curl https://api.uplinkswitch.com/v1/chat/completions \
-H "Authorization: Bearer $UPLINK_API_KEY" \
-H "x-uplink-redact: secrets_pii" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5-5",
"messages": [{"role": "user", "content": "Email jane@example.com that her key sk-test-51Hx... was rotated."}]
}'curl · redact by default on a key
curl -X PATCH https://api.uplinkswitch.com/v1/keys/KEY_ID \
-H "Authorization: Bearer $UPLINK_ADMIN_KEY" \
-H "Content-Type: application/json" \
-d '{"redact": "secrets"}'- Each model row in
GET /v1/catalogsaysfile_input: nativeorparsed. - The key route takes an admin key, created in the console; the same setting is under API keys in the console.
Questions
Yes. A chat file part, a Messages document block or a Responses input_file sent to a model without file input is read to text first and reaches the model as [document: name] followed by the text. Up to 20 MB a file, the first 50 pages and 200,000 characters, at $0.00 a page.
bmp, csv, docx, et, gif, htm, html, jpeg, jpg, md, numbers, ods, odt, pdf, png, svg, txt, webp, xls, xlsb, xlsm, xlsx, xml. A file can come as base64 data or an http(s) URL; private and internal URLs are refused.
secrets replaces API keys, tokens and private keys in the message text with placeholders such as [[SECRET_1]] before the request leaves the gateway. secrets_pii also replaces emails, phone numbers, card numbers, US SSNs and IBANs. The answer gets the originals back, in whole and in streamed responses.
Per key, with redact on POST or PATCH /v1/keys (off, secrets or secrets_pii) or the Redact setting in the console’s key dialog. The x-uplink-redact header overrides the key for one request; x-uplink-redactions on the answer says how many values were replaced.
Yes. When server tools run, every tool round inherits the setting, so search results or fetched pages that go back to the model are redacted too.
More features
Agent tools
Web search, fetch, MCP and code.
Routing
Auto router, fallbacks, presets.
Caching and context
Repeat answers at a tenth.
Guardrails and app sign-in
Guardrails on your traffic.
MCP gateway
One MCP endpoint
Endpoints
Embeddings, rerank, transcription.
Observability
Every session, request by request.
All features
Every group, with live prices.