Free for hobby projects

Save JSON.
Get a URL.

One request stores a JSON document. The URL it returns works from anywhere — browser, server or shell. No account, no key, no headers.

terminal
$ curl -d '{"hello":"world"}' https://api.jstash.app/v1/bins
{
  "url": "https://j.jstash.app/LmP6w8kC2fY7Qv4rZx1aNg",
  "edit_token": "js_edit_…",
  "expires_at": "2026-10-09T10:30:00Z",
  "keep_it": "Sign in at https://app.jstash.app to make this bin permanent.",
  …
}
app.js
const res = await fetch("https://j.jstash.app/LmP6w8kC2fY7Qv4rZx1aNg");
await res.json();
// → {"hello":"world"}  exactly what you saved
100 KB
per trial bin
7 days
until a trial bin expires
5 / min
new bins per IP
20 / day
new bins per IP
Try it

Paste a document. Break it on purpose, too.

This calls the real API. Leave a trailing comma, send nothing, or keep saving quickly — every error tells you what to change.

POST/v1/bins
Response
// Send the request to see the response.

Bins made here are real public trial bins. They expire in 7 days.

The rules

Small surface. Nothing to look up.

Authorization: Bearer …

One way to sign a request

The edit token and your API key go in the same header. Learn it on your first update and you know how everything works.

{"hello":"world"}

Your JSON, untouched

Reads return exactly the document you saved — no envelope, no data key. Send it with any Content-Type; it only has to parse.

unexpected } at position 17

Errors that say what to do

Not just 400 Bad Request. Every failure names the problem and the fix, so you keep going without opening the docs.

Keeping a bin

Trial bins last a week. Claimed bins stay.

When a prototype becomes something you want to keep, sign in and claim it. The URL doesn’t change, so nothing that reads it has to.

  1. 1

    Save without an account

    Keep the edit_token from the response. It updates or deletes that one bin.

  2. 2

    Sign in at app.jstash.app

    Create an API key there. It goes in the same Authorization header.

  3. 3

    Claim it with the token

    curl -X POST https://api.jstash.app/v1/bins/LmP6w8kC2fY7Qv4rZx1aNg/claim \
      -H "Authorization: Bearer js_live_…" \
      -d '{"edit_token":"js_edit_…"}'

Your first bin is one line away.

curl -d '{"hello":"world"}' https://api.jstash.app/v1/bins

Read the docs