Open Source Projects — entry 002 of 8

Creative Commons Catalog

Verified Jul 2026

Creative Commons's search catalog was handed off to WordPress.org and relaunched as Openverse; the old `api.creativecommons.engineering` host now 301-redirects to the current `api.openverse.org`. A live unauthenticated GET against `api.openverse.org/v1/images/` returned a 200 JSON result set with `Access-Control-Allow-Origin: *`, confirming keyless anonymous search still works today (rate-limited to 200 requests/day per IP), with an optional `/v1/auth_tokens/register/` OAuth2 client-registration endpoint (confirmed live, returning a 400 validation error rather than 404) for higher limits. The catalog itself and every indexed work are free to use under their respective open licenses.

Openverse (the relaunched Creative Commons Catalog) exposes openly-licensed media search over a plain REST/JSON API. A live GET to `/images/?q=bicycle&page_size=1` returned a 200 JSON body with `result_count`, `page_count`, `page_size`, `page`, and a `results` array of full media records (license, creator, attribution text, thumbnail/detail/related URLs), and `access-control-allow-origin: *` confirmed anonymous cross-origin access — both reconfirmed by this run's own probe.

open-sourceopenversecreative-commonsimage-searchkeyless
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score88out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs14/20Documentation URL provided
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 88 on greatapis.com
<a href="https://greatapis.com/api/creative-commons-catalog/"><img src="https://greatapis.com/badge/creative-commons-catalog.svg" alt="Scored 88 on greatapis.com"></a>

Auth quickstart

  1. No API key or signup required for anonymous search — every probe in this file returned real results with no auth header sent at all, subject to the anonymous rate limits below.
  2. Anonymous requests are rate-limited (see the `rateLimit` gotcha below); registering an OAuth2 application at `/v1/auth_tokens/register/` gets a higher, per-application limit instead of the shared anonymous one — that endpoint live-returns a 400 validation error (not 404) when called without the required fields, confirming it's a real, reachable route rather than documentation-only.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Search images for "bicycle"

GEThttps://api.openverse.org/v1/images/?q=bicycle&page_size=1

200 application/json

{"result_count":240,"page_count":240,"page_size":1,"page":1,"results":[{"id":"e58c9c13-572f-4288-baf8-4aa3331a3130","title":"Bicycle","indexed_on":"2020-05-07T17:37:27.614432Z","foreign_landing_url":"https://www.flickr.com/photos/31153174@N00/44791182","url":"https://live.staticflickr.com/27/44791182_825d309178_b.jpg","creator":"orangebrompton","creator_url":"https://www.flickr.com/photos/31153174@N00","license":"by-nc-sa","license_version":"2.0","license_url":"https://creativecommons.org/licenses/by-nc-sa/2.0/","provider":"flickr","source":"flickr","category":null,"filesize":null,"filetype":null,"tags":[{"name":"bicycle","accuracy":null,"unstable__provider":"flickr"}],"attribution":"\"Bicycle\" by orangebrompton is licensed under CC BY-NC-SA 2.0. To view a copy of this license, visit https://creativecommons.org/licenses/by-nc-sa/2.0/.","fields_matched":["description","title","tags.name"],"mature":false,"height":768,"width":1024,"thumbnail":"https://api.openverse.org/v1/images/e58c9c13-572f-4288-baf8-4aa3331a3130/thumb/","detail_url":"https://api.openverse.org/v1/images/e58c9c13-572f-4288-baf8-4aa3331a3130/","related_url":"https://api.openverse.org/v1/images/e58c9c13-572f-4288-baf8-4aa3331a3130/related/","unstable__sensitivity":[]}]}

Captured byte-for-byte from this run's live probe. `result_count`/`page_count` and which specific work sorts first for a given query can both change over time as Openverse's underlying index grows — the envelope shape and field names are what's stable.

Developer reference

Base URLhttps://api.openverse.org/v1
Rate limit

20 requests/min burst + 200 requests/day sustained for anonymous requests, confirmed live via the x-ratelimit-limit-anon_burst / x-ratelimit-limit-anon_sustained response headers

Gotchas & limits

  • Omitting the trailing slash on the collection path triggers a redirect, not a direct 200: a live GET to `/v1/images?q=bicycle&page_size=1` (no trailing slash) returned HTTP 301 with `location: /v1/images/?page_size=1&q=bicycle` — note the query params are also reordered in the Location header — so a client that doesn't follow redirects gets nothing back.
  • An out-of-range `page_size` fails with HTTP 401, not 400: a live GET to `/v1/images/?q=bicycle&page_size=999` returned `HTTP 401 Unauthorized` with body `{"detail":"page_size may not exceed 20 for anonymous requests"}` and a `www-authenticate: Bearer realm="api"` header — a genuinely surprising status code for what is really a parameter-validation error, not an auth failure.
  • An unknown image id 404s with a JSON error envelope: a live GET to `/v1/images/00000000-0000-0000-0000-000000000000/` returned `HTTP 404` with body `{"detail":"No Image matches the given query."}`.
  • The rate limit is live-measurable from response headers on every call: this run's probes consistently returned `x-ratelimit-limit-anon_burst: 20/min` and `x-ratelimit-limit-anon_sustained: 200/day`, plus decrementing `x-ratelimit-available-anon_burst`/`x-ratelimit-available-anon_sustained` counters — read those before assuming a request budget.