DG Encoder
A free, no-API-key service powered by Cloudflare Workers that lets developers store and retrieve text-based data — webhooks, secrets, config — through simple endpoints.
WHY Why it exists
Developers often need to store webhook URLs, service endpoints, and configuration strings without exposing them directly in frontend code. Most solutions mean spinning up a backend, paying for a service, or juggling API keys. DG Encoder skips all of that — store a value, get an ID back, and keep the real value out of your codebase entirely.
DO What it does
- Stores any text value and returns a unique ID
- Retrieves the value later through an endpoint
- Restricts access to specific domains
- Lets you edit stored entries
- Lets you delete stored entries
- Works with no API keys at all
- Is completely free to use
$00 Free forever
There's no signup requirement, no subscription, and no paid plan blocking core functionality. Open the website, encode your value, and start using it.
- No API keys
- No signup requirements
- No subscriptions
- No paid plans
- No complicated setup
LIM Limits
#, @, and $. Emojis and other languages aren't supported. Encodings can only be deleted once they're at least 7 days old.
EPT Endpoints
| Method | Endpoint | Purpose |
|---|---|---|
| GET | / | Web UI |
| POST | /encode | Create a new encoding |
| GET | /d/:id | Decode a stored value |
| GET | /r/:id | Redirect to a stored URL |
| GET | /mine | List your encodings |
| PATCH | /d/:id | Update allowed domains |
| DELETE | /d/:id | Delete an encoding |
WIR Wiring it up
Encode + decode (not recommended)
You can encode directly from code, but then your original secret still passes through your own script once. It's better to encode from the website itself:
// Store a webhook URL once. It's recommended to encode from the
// website instead — otherwise your original URL appears in your code.
const create = await fetch(
"https://dg-encoder.scriptsnsenses.workers.dev/encode",
{
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
value: "https://hooks.example.com/my-secret-webhook",
label: "Orders Webhook",
domains: ["myapp.com"]
})
}
);
const encoded = await create.json();
// Later, retrieve it
const decoded = await fetch(encoded.decodeUrl);
const webhook = await decoded.json();
// Use the real URL
await fetch(webhook.value, {
method: "POST",
body: JSON.stringify({ event: "order.created" })
});
Decode only — recommended path
Encode once through the website, then your code only ever needs the ID:
const id = "YOUR_ENCODING_ID";
const res = await fetch(
`https://dg-encoder.scriptsnsenses.workers.dev/d/${id}`
);
const data = await res.json();
console.log(data.value);
Redirect to a stored URL
const id = "YOUR_ENCODING_ID";
window.location.href =
`https://dg-encoder.scriptsnsenses.workers.dev/r/${id}`;
List your encodings
const userKey = localStorage.getItem("dgUserKey");
const res = await fetch(
"https://dg-encoder.scriptsnsenses.workers.dev/mine",
{ headers: { "X-User-Key": userKey } }
);
const data = await res.json();
console.log(data.encodings);
Update allowed domains
const userKey = localStorage.getItem("dgUserKey");
const id = "YOUR_ENCODING_ID";
await fetch(
`https://dg-encoder.scriptsnsenses.workers.dev/d/${id}`,
{
method: "PATCH",
headers: {
"Content-Type": "application/json",
"X-User-Key": userKey
},
body: JSON.stringify({
domains: ["myapp.com", "dashboard.myapp.com"]
})
}
);
Delete an encoding
const userKey = localStorage.getItem("dgUserKey");
const id = "YOUR_ENCODING_ID";
await fetch(
`https://dg-encoder.scriptsnsenses.workers.dev/d/${id}`,
{
method: "DELETE",
headers: { "X-User-Key": userKey }
}
);
USE Example use cases
- Discord projects — store webhook URLs without exposing them in frontend code
- SaaS applications — manage configuration values and service endpoints dynamically
- Internal tools — keep URLs and integrations organized behind generated IDs
- No-code platforms — store integration endpoints and access them through simple calls
- Frontend-only apps — reduce exposure of important URLs without maintaining a backend
SYS Tech stack
NXT Future plans
Features being considered for future releases:
- Expiration dates
- Usage analytics
- Request statistics
- Password-protected entries
- Team workspaces
- Rate limiting controls
- More advanced access rules