Skip to main content

silentparams

Find HTTP APIs that silently ignore misspelled query parameters.

You call GET /issues?states=closed. The API only knows state. It does not answer "unknown parameter": it answers 200 with every open issue, and your code (or your agent) believes it filtered. Nothing failed, so nothing alerts.

silentparams sends a handful of read-only requests with plausible misspellings of each parameter in your URL and tells you, per name, whether the API rejects it, accepts it as an alias, or ignores it without a word.

$ silentparams "https://api.github.com/repos/python/cpython/issues?state=closed&per_page=3"
Parameter 'state=closed': removing it changes the response
  states                   HTTP 200  IGNORED silently (2xx, same as without the parameter)
  STATE                    HTTP 200  IGNORED silently (2xx, same as without the parameter)
  zzb22fbb9f               HTTP 200  IGNORED silently (2xx, same as without the parameter)
...
RESULT: this API silently ignores unknown parameter names. A typo in a filter returns unfiltered data with HTTP 200.

That is not a bug in GitHub. Ignoring unknown parameters is a common design choice. It just means a typo in your client is invisible, so you should know which APIs behave this way before you trust a filtered result.

Install

pip install silentparams   # no dependencies, Python 3.10+
# or the latest code: pip install git+https://github.com/novasdiego1/silentparams

How it works

For each query parameter p in the URL:

Request Purpose
the URL as given, twice baseline, and a check that the response is stable
the URL without p what the API returns when p is absent
p renamed (plural/singular, trailing _, case, snake/kebab/camel, doubled letter) and one nonsense name the decoys

Each decoy is classified by comparing normalized response bodies (JSON is canonicalized, so key order does not matter):

Verdict Meaning
IGNORED silently 2xx and the same response as without p: the name was dropped without a word
rejected 4xx: the API refuses unknown names (the safe behaviour)
alias 2xx and the same response as the baseline: the variant is accepted
different 2xx with some other response: inconclusive

It also tells you when removing p changes nothing, which usually means p itself is being ignored.

Options

-H 'Name: value'     extra header (repeatable), e.g. an Authorization token
--ignore-key KEY     JSON key to ignore when comparing (timestamps, request ids)
--decoys N           decoy names per parameter (default 6)
--max-requests N     hard cap on requests sent (default 60)
--delay S            seconds between requests (default 0.5)
--json               machine-readable report

Exit code: 1 if the API silently ignores unknown names, 0 if not, 2 on usage errors. That makes it usable as a CI check for an API you own.

If the same request returns different bodies (a timestamp, a request id), the report warns that results are unreliable: add --ignore-key for those fields.

Be polite

It only sends GET requests, waits between them, and stops at --max-requests. Point it at APIs you are allowed to query, and mind their rate limits.

Why this exists

An auditor reported reaching a wrong conclusion this way. They tried four spellings of a per-author filter (author, agent, agent_id, pubkey) on an API that only declared authors. Every request returned 200 with unfiltered rows, so they wrote that no such filter existed. The same API rejected a bad limit value with 422: it checked values carefully and never checked names.

License

MIT

Metadata

Release files for silentparams 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for silentparams 0.1.0
File Size Uploaded Provenance Actions
silentparams-0.1.0.tar.gz 11.3 kB Without provenance Details for silentparams-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for silentparams 0.1.0
File Interpreter ABI Platform Actions
silentparams-0.1.0-py3-none-any.whl Python 3 none any Details for silentparams-0.1.0-py3-none-any.whl

Total release size: 20.8 kB

Release files / silentparams-0.1.0.tar.gz

Download URL silentparams-0.1.0.tar.gz
Size 11.3 kB
Tags Source
SHA-256 checksum
How to use checksums
ed541faf75ac2d99003ab9471004579c246c590b24a46e5dbc9caa9c2a49ff91
BLAKE2b-256 checksum
How to use checksums
858270feb8b9dff62aec8b738fe339ea0c1e752709afa76759097894efc0cd0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / silentparams-0.1.0-py3-none-any.whl

Download URL silentparams-0.1.0-py3-none-any.whl
Size 9.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e074c8178b3d478bdf5420d4fa012624e986d8e0ed4a9ce5bf34cc13c6a9cda7
BLAKE2b-256 checksum
How to use checksums
49241962fe86ef72a1475612feebb0d35811408e029f61298be4af10d0391a13
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Security for silentparams 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page