MantleDB is anonymous JSON storage for tiny apps, scripts, and automations. You get an Account ID (AID) and you can PUT/GET JSON into named buckets. No email. No password. No dashboard. Just an API that does one thing.
No email required. Your AID is the only thing linking you to your data. Treat it like an API key.
A bucket is just a named JSON blob. Buckets are created on first write. No schema. No migrations. Just JSON.
Works clean with curl, bash, cron, n8n, CI pipelines, and quick prototype apps. Send JSON, get JSON.
Get an Account ID, write JSON to a bucket, read it back anywhere. That’s basically the product.
1) Generate an Account ID (AID)
curl -s https://api.mantledb.sh/api/auth/register
Save the returned aid. Copy it into a password
manager or env var.
2) Store JSON in a bucket
curl -s -X POST https://api.mantledb.sh/api/b/YOUR_AID/my-settings \
-H "Content-Type: application/json" \
-d '{"theme":"dark","notifications":true}'
3) Retrieve it
curl -s https://api.mantledb.sh/api/b/YOUR_AID/my-settings
4) Check your status / limits
curl -s https://api.mantledb.sh/api/auth/status/YOUR_AID
Checkout (Stripe hosted):
curl -L https://api.mantledb.sh/api/auth/upgrade/YOUR_AID?quantity=1
1 quantity = 30 days of Pro time.
Account ID (AID): a single identifier that acts like your API key. There is no login.
Bucket ID (BID): the name of a bucket. A bucket stores exactly one JSON object (upsert).
Tip: keep bucket names
URL-safe. Example: my-settings,
cache-weather, app-state.
Generates a new anonymous identity and returns your
aid. Store it. Don’t lose it.
{
"success": true,
"aid": "1234567890123456",
"metadata": { "tier": "free", "bucket_limit": 1 },
"instructions": "Store this AID securely..."
}
Upserts JSON into a bucket. Buckets are created on first write.
Payload limit: 1MB.
curl -X POST https://api.mantledb.sh/api/b/YOUR_AID/my-bucket \
-H "Content-Type: application/json" \
-d '{"hello":"world"}'
Reads the bucket JSON. Returns 404 if missing or
scavenged.
curl https://api.mantledb.sh/api/b/YOUR_AID/my-bucket
Returns your tier, bucket usage, and remaining Pro time.
curl https://api.mantledb.sh/api/auth/status/YOUR_AID
Redirects to Stripe checkout. 1 quantity = 30 days of Pro.
curl -L https://api.mantledb.sh/api/auth/upgrade/YOUR_AID?quantity=1
Redeem a promo code for Pro time.
curl -X POST "https://api.mantledb.sh/api/auth/redeem/YOUR_AID?code=BUENA-VISTA-FREE"
MantleDB uses boring HTTP status codes + a predictable JSON body.
{
"success": false,
"error": "INVALID_ACCOUNT",
"message": "That Account ID does not exist."
}
{
"success": false,
"error": "LIMIT_REACHED",
"message": "Free tier limit of 1 buckets reached."
}
{
"success": false,
"error": "NOT_FOUND",
"message": "No bucket found with the name 'my-bucket' for this account."
}
{
"success": false,
"error": "EMPTY_PAYLOAD",
"message": "You must provide a JSON object in the request body."
}
Free tier buckets are automatically deleted after a period of inactivity. Pro buckets are not scavenged.
export MANTLE_AID="YOUR_AID"
curl -s -X POST "https://api.mantledb.sh/api/b/$MANTLE_AID/app-state" \
-H "Content-Type: application/json" \
-d '{"loggedIn":true,"count":42}'
curl -s "https://some-api.com/thing" | \
jq '.' | \
curl -s -X POST "https://api.mantledb.sh/api/b/$MANTLE_AID/cache-thing" \
-H "Content-Type: application/json" \
-d @-
(Assumes you have jq. This is the “small app backend”
vibe in one snippet.)