developers
The API.
Everything the dashboard does, it does through these endpoints. They are session-authenticated, so you can drive them from a signed-in browser or a script that carries your cookies.
Authentication
Requests are authenticated with the d_session cookie. Any request that changes something must also send an x-csrf-token header whose value is the d_csrf cookie, and must come from an allowed origin. Both are set when you sign in.
Rate limits
Writes are limited to 120 requests a minute per account, uploads to 40 per five minutes, and sign-in attempts to 8 per ten minutes per address. Exceeding one returns 429 with the number of seconds until the window resets.
Errors
Errors are JSON: { "ok": false, "error": "message" }. Validation failures also include an issues array naming the offending field.
Endpoints
/api/username/check?name=Is a name free?/api/auth/registerusername, email, password/api/auth/loginidentifier, password, totp?/api/auth/logoutEnds the current session/api/profileYour profile, plan and limits/api/profilePartial update; premium fields are capped server-side/api/linksAll of your links/api/linksReplace the whole list; array order sets position/api/widgetsAll of your widgets/api/widgetsReplace the whole list/api/tracksYour audio playlist/api/tracksReplace the playlist/api/uploadmultipart/form-data with a file field/api/mediaYour uploads and storage usage/api/mediaid/api/account/sessionsSigned-in devices/api/account/sessionsid, or all: true/api/account/exportEverything we store about you, as JSON/api/billing/checkoutStarts a Stripe Checkout session/api/widget?type=&id=Cached third-party widget dataExample
curl -X PATCH https://dreaded.lol/api/profile \
-H 'content-type: application/json' \
-H "x-csrf-token: $D_CSRF" \
-b "d_session=$D_SESSION; d_csrf=$D_CSRF" \
-d '{"bio":"new bio","appearance":{"accent":"#ff4a1c"}}'Anything your plan does not include is silently reset to a free-tier value rather than rejected, so a script cannot smuggle premium settings in.