What is Manifest
Manifest is the API resilience layer for your apps and agents. It works with every API they call: external services, your internal APIs and MCP tools.
- 🗺️ See every API your app depends on, and how reliable each one is.
- 🎯 Repair failed API requests on the fly, so your app keeps working.
- 🛠️ Know what to fix in your code, with a prompt for your coding agent.
How it works
Every call your app makes is reported to Manifest as metadata only (method, URL without its query string, status and timing), in the background. A failure Manifest can heal is sent in full, so it can be repaired. What is sent.
Prerequisites
- Python 3.10 or higher
Get started
Start with your agent
"Install Manifest in this app: https://dashboard.manifest.build/prompt-python.md"
The prompt finds your entry point and stops to let you paste your key.
Start with code
-
Create a project in your Manifest dashboard and copy its project key.
-
Install the SDK:
pip install mnfst
-
Set your key in the environment of your app, or in the project's
.envfile:export MNFST_KEY='your-project-key'
-
Run your app through the CLI, so Manifest loads before the first request:
mnfst run uvicorn main:app
mnfst rungoes in front of any start command, such asmnfst run gunicorn app:appormnfst run celery -A tasks worker. Where there is no command to prefix (AWS Lambda, a notebook, or a start command owned by a host dashboard), callmanifest()yourself, once at startup, before your first request:from mnfst import manifest manifest() # Once, at startup. # Keep making your API calls as usual.
-
Check the install at any time with
mnfst doctor.
Try it
Send a request that fails with a 4xx error, such as a value the API rejects:
import httpx
from mnfst import manifest
manifest(on_heal=lambda e: print(f"[manifest] {e.heal_status} {e.replay_status_code}"))
res = httpx.post(
"https://api.example.com/orders",
json={"limit": 500}, # rejected by the API
)
print(res.status_code)
The failed request appears in your Manifest dashboard, grouped with others like it in an issue. Once Manifest has a patch for that error, the next request that fails the same way is repaired and retried: on_heal reports patched or unverified with the retry's status code, and your app receives the answer to the retry.
Choosing which calls reach Manifest
Keep calls out of Manifest entirely: they are neither repaired nor tracked, and nothing about them leaves your app. Each entry is a domain or a domain with a path:
MNFST_ALLOWLIST=stripe.com # only Stripe
MNFST_ALLOWLIST=stripe.com/v1/payment_intents # only this Stripe endpoint
MNFST_DENYLIST=stripe.com/v1/charges,internal.example.com # never these
- A domain covers its subdomains, with or without a path:
stripe.comandstripe.com/v1/chargesboth matchapi.stripe.com. - A path matches whole segments:
/v1/chargescovers/v1/charges/ch_123, not/v1/charges_export. Paths are case-sensitive. - A scheme, port, query or fragment in an entry is ignored.
*in a path is not supported yet: the entry is skipped with a warning, and an allowlist made only of skipped entries lets nothing through. - The denylist wins over the allowlist. With no allowlist, every call is eligible.
Or in code: manifest(denylist=["stripe.com/v1/charges"]). An option overrides its environment variable. With mnfst run, set the environment variables: a later manifest() call cannot change the configuration.
More
Documentation · Configuration, limits & development · API contract · Node.js SDK · PHP SDK · Website
Metadata
Release files for mnfst 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mnfst-1.3.0.tar.gz | 255.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mnfst-1.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 293.5 kB
Release files / mnfst-1.3.0.tar.gz
| Download URL | mnfst-1.3.0.tar.gz |
|---|---|
| Size | 255.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5597f1400b321a6454200c909172b522ef1bd89ff05bc664a667f0e961b80f63
|
|
BLAKE2b-256 checksum How to use checksums |
bcdc387788cfa4234fc297738a8117489e70ba69d87d39d5dfc051826aa099f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.
Transparency logRelease files / mnfst-1.3.0-py3-none-any.whl
| Download URL | mnfst-1.3.0-py3-none-any.whl |
|---|---|
| Size | 37.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
64436ea459d0d9f093a418000747b1cfd8045bbe3ed0f92be448531b5f369bae
|
|
BLAKE2b-256 checksum How to use checksums |
df2de01543466440bfa9a313e2447954ef6f4ac011464a856449b31347bd8570
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.
Transparency log