Ruin images at scale, programmatically
A simple REST API for the Make It Worse engine. Authenticate with an API key, POST an image, and get back beautifully degraded output. Pay only for what you ruin with prepaid credits.
Quickstart
- Create an account — you get free credits to start.
- Generate an API key in your dashboard.
- Send your first request:
curl -X POST "https://api.worst.technology/v1/degrade" \
-H "Authorization: Bearer mw_live_YOUR_KEY" \
-F "file=@photo.jpg" \
-F "preset=whatsapp_renaissance" \
-F "output_format=jpeg" \
-o ruined.jpgAuthentication
All requests must include your secret API key as a Bearer token. Keys look like mw_live_… and are shown only once at creation. Keep them secret; never embed them in client-side code.
Authorization: Bearer mw_live_YOUR_KEYRate limited per key. Exceeding the limit returns 429 Too Many Requests.
Endpoint
https://api.worst.technology/v1/degradeSend either multipart/form-data or application/json. Multipart defaults to a binary image response, while JSON requests default to JSON responses. Binary responses include useful headers (X-Credits-Remaining,X-Request-Id,X-Degradation-Seed). Each successful call costs credits; failed runs are automatically refunded.
| Field | Type | Notes |
|---|---|---|
| file | file | JPEG / PNG / WEBP, max 15 MB. Required unless image_base64 is sent |
| image_base64 | string | Base64 image (data: URL prefix optional). Alternative to file for JSON-only clients |
| preset | string | Optional. One of the preset ids below. Default: whatsapp_renaissance |
| intensity, noise, blur, jpeg_damage, color_chaos, pixelation, vignette | int 0–100 | Core degradation controls. Default 50 (pixelation & vignette default 0) |
| chromatic_aberration, scanlines, posterize, sharpen, glitch, grain | int 0–100 | Optional additive effects layered on top of any preset. Default 0 (off) |
| brightness, contrast, saturation | int -100–100 | Bipolar tone adjustments. Default 0 (neutral) |
| quality | int 1–100 | Optional. Pins the final JPEG quality, overriding jpeg_damage |
| hue_rotate | int -180–180 | Optional. Rotates the hue wheel by a fixed angle |
| seed | int | Optional. Reproduces an identical run |
| output_format | string | jpeg | png | webp. Default jpeg |
| response (query) | string | binary (default) returns the image; json returns a presigned URL |
Presets
Examples
Send JSON input and get JSON output in one request.
BASE64_IMAGE=$(base64 < photo.jpg | tr -d '\n')
curl -X POST "https://api.worst.technology/v1/degrade" \
-H "Authorization: Bearer mw_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d "{
\"image_base64\": \"$BASE64_IMAGE\",
\"preset\": \"whatsapp_renaissance\",
\"output_format\": \"jpeg\",
\"intensity\": 70
}"Pricing
Pay-as-you-go. Buy credits once; they never expire. 1 credit = 1 processed image. New accounts start with free credits.
Starter$5
100 credits · 100 images
Pro$15
1,000 credits · 1,000 images
Business$100
10,000 credits · 10,000 images
Payments are processed securely by Stripe. We never see your card details.
Errors
| Status | Meaning |
|---|---|
| 401 | Missing, invalid or revoked API key |
| 402 | Out of credits — top up to continue |
| 413 / 415 | File too large, or unsupported format |
| 429 | Rate limit exceeded |
Errors return JSON: { "error": "message" }