/api/v1/binsList every bin owned by the API-key user, newest first. Returns names, IDs, creation times, and retained-request counts.
Bearer keyDeveloper platform
Build local webhook workflows with the versioned API, a dependency-free CLI, reusable SDK examples, and an OpenAPI 3.1 contract. Creating a bin confirms acceptance of the Terms and Conditions.
Management endpoints use /api/v1. Compatible fields may be added within v1, but existing fields and behavior will not be removed or changed incompatibly. A breaking contract change will use a new major path. Capture URLs remain /b/:binId/* so webhook destinations do not change when the management API evolves.
curl -fsS https://freebin.org/freebin.mjs -o freebin.mjs chmod +x freebin.mjs FREEBIN_API_KEY=YOUR_API_KEY ./freebin.mjs bins
The CLI supports bins, create, send, requests, export, and delete-request. Set FREEBIN_URL=http://127.0.0.1:8787 for local development.
curl -X POST https://freebin.org/api/v1/bins \
-H "authorization: Bearer YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{"name":"Payments dev","termsAccepted":true}'curl -X POST https://freebin.org/b/YOUR_BIN_ID/events \
-H "authorization: Bearer YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{"status":"ok"}'curl "https://freebin.org/api/v1/bins/YOUR_BIN_ID/interactions?limit=50" \ -H "authorization: Bearer YOUR_API_KEY"
Send an account API key as Authorization: Bearer YOUR_API_KEY. Keys are user-scoped, shown only once, individually revocable, and limited to five active keys per account. Every capture method requires a key belonging to the destination bin’s owner.
All currently implemented API and capture endpoints are listed below. Public share URLs are read-only web pages rather than JSON API endpoints.
Bearer-authenticated endpoints intended for integrations. Replace path parameters with IDs returned by the API.
/api/v1/binsList every bin owned by the API-key user, newest first. Returns names, IDs, creation times, and retained-request counts.
Bearer key/api/v1/binsCreate a private registered bin. Send name and termsAccepted: true. Accounts are limited to five bins.
Bearer key/api/v1/bins/:binIdRead a bin’s name, response configuration, creation time, and current public-share token.
Bearer key or session/api/v1/bins/:binIdCustomize capture status, body, content type, and response headers. Text fields and serialized headers are limited to 500 UTF-8 bytes.
Bearer key or session/api/v1/bins/:binIdPermanently delete the bin and all of its retained requests.
Bearer key or session/api/v1/bins/:binId/interactions?limit=50List the newest retained requests. limit accepts 1–100 and defaults to 50.
Bearer key or session/api/v1/bins/:binId/stream?lastId=:requestIdOpen a server-sent event stream. Emits request events and keepalives for about 25 seconds; reconnect to continue.
Session or token query/api/v1/bins/:binId/exportDownload bin metadata and every currently retained request as JSON.
Bearer key or session/api/v1/bins/:binId/shareEnable or disable a read-only public bin URL with {"public":true|false}. Enabling again rotates the URL.
Bearer key or session/api/v1/bins/:binId/interactions/:requestIdPermanently delete one retained request.
Bearer key or session/api/v1/bins/:binId/interactions/:requestId/exportDownload one retained request as JSON.
Bearer key or session/api/v1/bins/:binId/interactions/:requestId/shareEnable or disable a read-only public request URL with {"public":true|false}.
Bearer key or session/api/v1/bins/:binId/interactions/:requestId/replayReplay the retained request to the public HTTPS URL supplied as {"url":"https://…"}. Private and local targets are rejected.
Bearer key or sessionCapture URLs are deliberately outside the management API version. They remain stable destinations for webhook senders.
/b/:binId/*Capture a GET request and return the bin’s configured response.
Bearer key required/b/:binId/*Capture a POST request and return the bin’s configured response.
Bearer key required/b/:binId/*Capture a PUT request and return the configured response.
Bearer key required/b/:binId/*Capture a PATCH request and return the configured response.
Bearer key required/b/:binId/*Capture a DELETE request and return the configured response.
Bearer key required/b/:binId/*Capture an OPTIONS request and return the configured response.
Bearer key requiredThese endpoints support the first-party web application. Session endpoints use the secure HttpOnly cookie set during registration or login.
/api/configReturn public browser configuration: signup availability and optional RUM endpoint and client key.
Public/api/auth/registerCreate an account and session. Requires email, a 10–128 character password, termsAccepted: true, and enabled signups.
Public/api/auth/loginValidate email and password and create a 30-day session cookie.
Public/api/auth/logoutDelete the current server session and clear its cookie.
Session optional/api/meReturn the signed-in account, byte usage and limit, and owned bins. Returns user: null when signed out.
Session/api/mePermanently delete the signed-in account and clear its session.
Session required/api/account/tokenList API-key metadata. Full key values are never returned after creation.
Session required/api/account/tokenCreate a named user API key. The full token is returned once; accounts may have five active keys.
Session required/api/account/tokenRevoke the key whose ID is supplied as {"id":"…"}.
Session required| Limit | Registered | Anonymous demo |
|---|---|---|
| Capture rate | 20 requests/second per user | Capture unavailable |
| Request body | 1 MB | Capture unavailable |
| Retention | 1 GB per account by default | Public demo history only |
| Bins | 5 per account | Subject to creation abuse controls |
| API keys | 5 active per account | Not applicable |
| List page | 1–100 requests; default 50 | |
| Custom response fields | 500 UTF-8 bytes per text field and serialized headers field | |
Retention is byte-based and evicts the oldest requests first. There is no date-based cleanup. Rate-limited requests return 429; oversized requests return 413.
JSON API errors use {"error":"Human-readable message"}. Clients should branch on HTTP status codes and treat the message as diagnostic text, not a stable machine identifier.