How indecs works

indecs gives you a personal email address (username@indecs.app) that you can send documents to. We scan them for inappropriate content, generate a searchable summary using AI and forward everything - the original file plus the summary - to your chosen email address. The file is then deleted from our servers.

Getting started

  1. Sign up with your email and password
  2. Confirm your email via the link we send you (valid for 24 hours)
  3. Pick a username - this becomes your indecs address (3-30 characters, letters, numbers, dots, underscores and hyphens)
  4. Set your forwarding address in the dashboard - this is where your documents will be sent
  5. Send a document to username@indecs.app and it will arrive in your inbox with a summary

For the full walkthrough, including scanner setup and which settings to turn on first, see the quickstart guide.

Supported files

You can send PDF, JPG, PNG, WebP, GIF, HEIC, AVIF, BMP and ZIP files. Other file types are ignored. The total size of all attachments in a single email must be under 20 MB. HEIC, AVIF and BMP files are automatically converted to JPEG before processing. ZIP archives are extracted and each supported file inside is processed individually.

Uploading from the dashboard

You can also drag and drop files directly onto the dashboard page, or click to browse. This works the same as emailing them - files are scanned, summarized and forwarded. You can drop .eml email files too and we will extract the attachments from them.

How summaries work

Every document is checked for inappropriate content, then handed to a summary model to generate:

For images, the AI describes what the image shows instead of summarizing it as a document. Documents and images go through the same model-selection logic, described below - the only difference is which setting controls the choice.

The default model for everything is Gemma 4 26B, which is free. On the free plan, every document and image is processed on Gemma 4 26B and the model choice below has no effect. On a paid plan, your choice of summary model is honoured for documents, and your image quality setting picks the model for images.

If a document can't be read as a PDF, we retry once on Gemini 2.5 Flash before giving up.

When you send multiple documents in one email, we generate a collection title for the email subject (e.g. "Personal Tax Returns 2009-2013") using a fixed model - this one isn't user-selectable.

Summary model (documents)

On a paid plan, you can choose which AI model summarises your documents. Models come from three providers - Anthropic, OpenAI and Google - and Google offers two model families, Gemma and Gemini:

Claude (Anthropic)

OpenAI

Google

On the free plan, this setting is visible but does not take effect - every document is processed on Gemma 4 26B regardless of what's selected, to keep the free plan's cost at $0. Upgrading to a paid plan makes your choice take effect immediately.

Not sure which to pick? We publish measured accuracy and cost per model against a corpus of deliberately difficult documents - poor scans, handwriting, multi-column layouts - so you can see what the cheaper models actually give up. See the model benchmarks.

Image quality

Images use a separate setting, "Image quality", instead of the document model picker:

"High" is a Plus-plan feature - the free plan cannot select it, in the settings form or via the API.

Content moderation always runs on a fixed model regardless of your provider or plan choice, so a user cannot weaken or inflate the cost of their own content check.

Forwarded email format

The forwarded email includes:

The email subject is set to the document title (e.g. "Invoice #4821 from Acme Corp - March 2025 [indecs]"). Reply-to is set to your indecs address.

Settings

Free plan restrictions

The free plan gives you 100 pages a month, PDF only. It does not support:

None of this applies once you're on a paid plan. See the billing guide for plans and pricing.

Forwarding options

Content moderation

Every document is checked for inappropriate content before summarisation. You can choose how strict this check is:

All levels always reject illegal content. Content moderation cannot be fully disabled.

Sender rules

You can control who can send documents to your indecs address:

Auto-clear

Controls how long job records are kept in your dashboard:

Cleared records have personal information removed but we retain anonymized commercial data (token usage, model, timestamps) for billing purposes.

Jobs table

The "Recent jobs" table shows your last 10 processed documents with:

Failed jobs have a retry button. All jobs can be deleted individually with the × button.

Estimated costs

The dashboard shows estimated AI costs based on token usage. Approximate pricing per million tokens:

ModelInputOutput
Claude
Haiku 4.5$0.80$4.00
Sonnet 4.6$3.00$15.00
Opus 4.6$15.00$75.00
OpenAI
GPT-4o mini$0.15$0.60
GPT-4o$2.50$10.00
o4-mini$1.10$4.40
Gemma
Gemma 4 26B (default)$0.00$0.00
Gemini
2.5 Flash$0.15$0.60
2.5 Pro$1.25$10.00

This table is generated from the same model registry the app uses to route jobs, so a new model shows up here automatically.

Each document typically uses a few thousand tokens for moderation (always Gemma 4 26B, free, regardless of your chosen provider) plus a few thousand for summarisation (your chosen model, or Gemma 4 26B on the free plan).

Limits

Security and privacy

Unsubscribing

Every forwarded email includes an unsubscribe link. If you unsubscribe:

  1. We stop forwarding to your email immediately
  2. Incoming documents are still received, scanned and held for you
  3. You can log in and re-enable forwarding at any time to receive waiting documents
  4. If you don't re-enable, we send a reminder after your grace period (default 14 days), a final warning 7 days later and suspend service 7 days after that

Vouchers and promotional codes

If you have a voucher or promotional code, enter it in the "Promotional code, coupons, etc." field on your dashboard. VIP credit codes add reserve pages to your account. Plan vouchers give you free access to a Plus plan for a set period.

If you're on a voucher and want to change your plan, you'll need to remove the voucher first. This downgrades you to the Free plan immediately, and you can then subscribe to whichever plan you'd like. Removing a voucher cannot be undone - if you remove it by accident, please contact hello@indecs.app and we'll sort it out.

For plans, page allowances and how auto top-up works, see the billing guide.

API

You can upload files and retrieve results programmatically using the API. Create an API key from the dashboard under "API keys" - each key is shown once on creation and cannot be retrieved later.

Authentication

All API requests require a Bearer token in the Authorization header:

Authorization: Bearer idk_your-key-here

Endpoints

POST /api/upload - upload one or more files for processing. Returns job IDs for polling.

curl -X POST https://indecs.app/api/upload \
  -H "Authorization: Bearer idk_..." \
  -F "files=@invoice.pdf"

Response:

{ "ok": true, "count": 1, "job_ids": ["abc-123-..."] }

Upload modes - control where results are sent using the mode query parameter:

ParameterEmailNotion/DropboxUse case
(none)YesYesFull processing
?mode=no_emailNoYesSync to services, skip email
?mode=metadataNoNoJust get the data back

GET /api/jobs/:id - poll for job status and results. The done field is true when processing is complete.

curl https://indecs.app/api/jobs/abc-123-... \
  -H "Authorization: Bearer idk_..."

Response (when done):

{
  "ok": true,
  "id": "abc-123-...",
  "status": "forwarded",
  "done": true,
  "title": "Invoice #4821 from Acme Corp - March 2025",
  "summary": "Monthly invoice for consulting services...",
  "tags": ["invoice", "consulting"],
  "doc_type": "invoice",
  "dates": "March 2025",
  "issuer": "Acme Corp",
  "model_used": "claude-sonnet-4-6",
  "page_count": 2,
  "file_size": 184320
}

GET /api/credits - check your remaining page balance before uploading.

{ "ok": true, "plan": "free", "total": 87 }

If you upload with no credits remaining, the API returns 402 with "error": "no_credits".

Shell scripts (macOS)

We provide two shell scripts for processing files locally. Both write the AI summary into the file's Finder comment (visible in Get Info), add Finder tags and stamp a com.indecs.processed extended attribute with a timestamp so files aren't processed twice.

Both require jq (brew install jq) and optionally tag (brew install tag) for Finder tags.

Single file (scan.sh)

Upload one file, poll for results, write metadata. Piped straight from curl:

INDECS_API_KEY="idk_your-key-here" bash <(curl -sfL --connect-timeout 5 https://indecs.app/scan.sh) /path/to/file.pdf

Or download it first and read it before running - a reasonable thing to do before piping any remote script into bash:

curl -sfL https://indecs.app/scan.sh -o scan.sh && chmod +x scan.sh
INDECS_API_KEY="idk_your-key-here" ./scan.sh /path/to/file.pdf

INDECS_API_KEY on the command line lands in your shell history and, if used inline in a Hazel rule, in Hazel's own plain-text config. If that's a problem for your setup, keep the key in a ~/.indecs file and source it from a small wrapper script instead.

Hazel integration

To automatically process files dropped into a folder, create a Hazel rule with action "Run shell script" and paste:

INDECS_API_KEY="idk_your-key-here" bash <(curl -sfL --connect-timeout 5 https://indecs.app/scan.sh) "$1"

Batch processing (batch-scan.sh)

Process every supported file in a folder. Skips files that already have Indecs metadata, shows a progress bar with ETA and resumes where it left off if interrupted:

# Download both scripts
curl -sfL https://indecs.app/scan.sh -o scan.sh && chmod +x scan.sh
curl -sfL https://indecs.app/batch-scan.sh -o batch-scan.sh && chmod +x batch-scan.sh

# Process a folder
INDECS_API_KEY="idk_your-key-here" ./batch-scan.sh ~/Documents/scans

# Re-process everything (including already-tagged files)
INDECS_API_KEY="idk_your-key-here" ./batch-scan.sh --force ~/Documents/scans

Errors are logged to batch-scan-errors.log in the target folder. A .batch-scan-state file tracks progress so you can Ctrl-C and resume later.

Configuration

Both scripts accept these environment variables:

VariableDefaultDescription
INDECS_API_KEY(required)Your API key
INDECS_RENAMEfalseRename file to AI-generated title
INDECS_TAGStrueAdd Finder tags
INDECS_NOTIFYfalseShow macOS notifications
INDECS_POLL_INTERVAL3Seconds between status checks
INDECS_MAX_POLLS60Max poll attempts before giving up

batch-scan.sh also accepts SCAN_SH to point to a custom location for scan.sh.

Diagnostics

Force-reject mode is a testing feature that rejects all incoming documents with code R0. This triggers the sender cooldown system so you can test how blocking and escalation work without sending inappropriate content.

Closing your account

You can permanently delete your account from the bottom of the dashboard. This removes all your data and cannot be undone.