Developer API

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

  1. Create an account — you get free credits to start.
  2. Generate an API key in your dashboard.
  3. Send your first request:
bash
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.jpg

Authentication

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.

http
Authorization: Bearer mw_live_YOUR_KEY

Rate limited per key. Exceeding the limit returns 429 Too Many Requests.

Endpoint

POST
https://api.worst.technology/v1/degrade

Send 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.

FieldTypeNotes
filefileJPEG / PNG / WEBP, max 15 MB. Required unless image_base64 is sent
image_base64stringBase64 image (data: URL prefix optional). Alternative to file for JSON-only clients
presetstringOptional. One of the preset ids below. Default: whatsapp_renaissance
intensity, noise, blur, jpeg_damage, color_chaos, pixelation, vignetteint 0–100Core degradation controls. Default 50 (pixelation & vignette default 0)
chromatic_aberration, scanlines, posterize, sharpen, glitch, grainint 0–100Optional additive effects layered on top of any preset. Default 0 (off)
brightness, contrast, saturationint -100–100Bipolar tone adjustments. Default 0 (neutral)
qualityint 1–100Optional. Pins the final JPEG quality, overriding jpeg_damage
hue_rotateint -180–180Optional. Rotates the hue wheel by a fixed angle
seedintOptional. Reproduces an identical run
output_formatstringjpeg | png | webp. Default jpeg
response (query)stringbinary (default) returns the image; json returns a presigned URL

Presets

mildly_disappointed
whatsapp_renaissance
ai_slop_deluxe
android_2011
corporate_pdf_screenshot
random_damage

Examples

Send JSON input and get JSON output in one request.

bash
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

StatusMeaning
401Missing, invalid or revoked API key
402Out of credits — top up to continue
413 / 415File too large, or unsupported format
429Rate limit exceeded

Errors return JSON: { "error": "message" }