weirdla API
Every image weirdla has published, and the exact line you must show to republish it. No key required. JSON over HTTPS, newest first, cursor-paginated.
The attribution rule
Attribution and a link back are required for any use. Every image carries an attribution object. Display credit_line exactly as it reads and link to link_back wherever the image appears. It is not a template and it is not a suggestion — read it and print it.
artist is who to name and artist_url is where to link that name: the style’s own page for weirdla’s pictures, the archive’s page for theirs. For an archive image the obligation is the archive’s, so the line is their credit and their licence, and shortening it is not ours or yours to do.
Attribution is computed when you ask for it, so it is right for every published row and never goes stale. Do not cache it and re-use it against a different image.
"attribution": {
"artist": "weirdLA",
"artist_url": "https://weirdla.com/s/deadpan-riso",
"credit_line": "weirdla.com/i/6f1c…",
"link_back": "https://weirdla.com/i/6f1c…",
"license": "free to repost with attribution and link",
"license_url": "https://weirdla.com/api#attribution",
"source_url": null
}Endpoints
/imagesNewest first. The site's own mix./images/{id}One image./stylesEvery style, its count, and a cover./styles/{slug}/imagesOne style's images.Base URL https://weirdla.com/api/v1. Machine-readable at /api/openapi.json.
Paging and filters
Listings take cursor, limit (max 100), since (an ISO 8601 timestamp), source and style. Pass the cursor from one response to get the next page; a null cursor means you have reached the end.
The default listing is the site’s editorial mix, which keeps archive material to one slot in eight. Naming a source turns that off and answers in pure date order, because a caller who asked for one source has already made that decision.
curl -s "https://weirdla.com/api/v1/images?limit=2&since=2026-09-01T00:00:00Z"
Keys and rate limits
A key is optional. Anonymous callers get 60 requests a minute; a key raises that to 600. Send it as X-Weirdla-Key.
curl -s -H "X-Weirdla-Key: wla_…" "https://weirdla.com/api/v1/styles"
Limits are counted per running instance rather than globally, so the ceiling is a floor on what you can rely on, not a hard cap. Ask for a key if you need more than the anonymous limit and we will tell you what we can actually promise.
Caching
Listings carry an ETag and Cache-Control: public, max-age=60. Send the tag back as If-None-Match and you get a 304 with no body.
curl -s -D- -o/dev/null -H 'If-None-Match: W/"…"' "https://weirdla.com/api/v1/images"
What you will not find
Advertising is never in this API — ads live in their own tables and no endpoint reads them. Neither are retired, pending or scheduled images: a listing only ever contains what is live on the site at that moment. There is also no keyword search, on purpose.