imageRelease for developers

Rights Check API

Send an image from your own system and find out what imageRelease knows about it: whether it is registered, the rights recorded for it, and whether your organisation may use it.

Getting started

  1. Get a key. During the pilot, imageRelease creates keys for you. Each key belongs to one organisation.
  2. Keep it on your server. Treat it like a password. Never put it in a web page, a mobile app or a public repository. If it leaks, ask us to revoke it.
  3. Send it with every request in the Authorization header.

Base address:

https://imagerelease.uk/api/ext/v1

Always call https://imagerelease.uk directly. Other hostnames redirect, and a redirect drops the uploaded image.

Check your set-up:

curl -H "Authorization: Bearer irk_live_your-key" https://imagerelease.uk/api/ext/v1/me

Checking an image

Send one image as multipart/form-data in a field called image. JPEG, PNG, WebP and TIFF are accepted, up to 20 MB. The type is read from the file's contents, not its name.

curl -H "Authorization: Bearer irk_live_your-key" \
     -F "image=@photo.jpg" \
     https://imagerelease.uk/api/ext/v1/checks

An image your organisation holds a licence for:

{
  "checkedUtc": "2026-10-08T15:35:05Z",
  "matched": true,
  "canUse": "allowed",
  "summary": "Your organisation holds an accepted licence for this image.",
  "c2pa": { "present": false, "valid": null, "issuer": null },
  "matches": [
    {
      "level": "exact",
      "distance": 0,
      "trust": "unverified",
      "disputeCount": 0,
      "registrations": [
        {
          "type": "media_licence",
          "status": "active",
          "relationship": "licensee",
          "visibility": "party",
          "canUse": "allowed",
          "reasons": [ "Your organisation accepted this licence." ],
          "displayRef": "ML-20261008-2C2D84",
          "terms": {
            "validFrom": "2026-10-08T15:07:46Z",
            "validUntil": null,
            "territory": "European Economic Area (EEA) and UK",
            "exclusivity": "non-exclusive",
            "usageTypes": [ "In all media, without limitation" ],
            "assignmentAllowed": false,
            "ai": { "training": "prohibited", "generative": "prohibited", "dataMining": "prohibited" }
          }
        }
      ]
    }
  ]
}

The image is compared with the ledger and then discarded. The one exception: when it matches a registered image only weakly, a small copy (512 pixels across) may be kept so that our team can confirm the match by eye. It isn't linked to your organisation and is deleted once reviewed, and in any case within 90 days.

Reading the answer

Start with canUse, which is the answer for your organisation, and summary, a sentence you can show to people as it is. The detail is in matches.

canUse
ValueMeaning
allowedYour organisation registered the image as its own (or with the owner's permission), or accepted a licence for it that is in force.
not_yet_validYour organisation's rights start later.
expiredYour organisation's rights have ended.
revokedYour organisation's rights were revoked.
open_licenceAnother organisation registered the image as available under an open licence (Unsplash, Pexels, Creative Commons, public domain). That is their declaration, not verified by imageRelease: openLicence on the registration gives the licence, any credit required and the source link to check.
no_rights_declaredYour organisation registered the image but declared no rights to it: for example, it came from a third-party feed. A record of where it came from, not permission to use it.
not_licensed_to_youThe image is registered, but not to your organisation.
supersededOn a registration only, never the overall answer: your organisation replaced this registration with a newer one for the same image. It stays as history; the newer one gives the answer.
unknownWe hold no record of this image. That is not the same as permission.

Owner and licensee

Each registration says how it relates to your organisation (relationship):

You see the full terms and reference only for your own registrations (visibility: party). For other organisations' registrations you see the type, status and date (visibility: public), and, where the image was registered as available under an open licence, the licence, any credit and the source link. You don't see their terms, references or uploaders, and a check never says who holds the rights: a registration records what was declared, not who owns the image.

Matches

Images are matched by their visual fingerprint, so edited copies (cropped, resized or recompressed) still match. level is exact, high or medium; distance runs from 0 (identical) to 15. c2pa reports Content Credentials found in the file you sent.

Reporting a wrong match

If a match isn't the same image, tell us within 90 days, quoting the result's checkId and the match's place in matches (counting from 0; leave it out when there was only one). Reports go to our team to improve matching: the matched image's owner isn't told and nothing changes in the ledger. Reporting the same match again returns the first report. If the image you checked is online, send its https link as imageUrl so our team can compare the two: we keep only the link, and fetch the image when we review the report.

curl -H "Authorization: Bearer irk_live_your-key" -H "Content-Type: application/json" \
     -d '{"match": 0, "reason": "Our photo is a workshop; the match is a stage show.", "imageUrl": "https://example.com/media/workshop.jpg"}' \
     https://imagerelease.uk/api/ext/v1/checks/{checkId}/report

201 Created
{ "reportId": "…", "checkId": "…", "match": 0, "status": "received" }

Registering images

For sites that publish images, such as through the imageRelease Umbraco package. Keys need the registrations:write scope. Send the image with a metadata field saying where it came from and what its uploader declared; it is registered against your organisation, not stored or altered, and counts against your plan's registration allowance.

curl -H "Authorization: Bearer irk_live_your-key"      -F "image=@photo.jpg"      -F 'metadata={"sourceRef":"media-1234","site":"example.com","channel":"event-upload","declaration":"owner","uploaderRef":"member:5678"}'      https://imagerelease.uk/api/ext/v1/registrations

Limits

Over a limit, you get 429 with a Retry-After header in seconds. Wait that long before trying again.

Errors

Errors are RFC 9457 problem details (application/problem+json). Branch on code; title and detail are for people and may change. Quote traceId when asking for help.

{
  "type": "about:blank",
  "title": "Monthly quota used",
  "status": 429,
  "detail": "This key can check 1000 images a month. The count resets on 1 November 2026 (UTC).",
  "code": "quota_exceeded",
  "traceId": "0HNP5ALQ04EMU:00000001"
}
Error codes
StatuscodeWhat to do
400invalid_imageSend the image in a multipart field called image.
400invalid_metadataRegistrations: fix the metadata JSON as detail describes.
401missing_api_key, invalid_api_keyCheck the Authorization: Bearer header and the key.
401wrong_environmentUse a live key on live and a test key on test.
401api_key_revoked, api_key_suspended, api_key_expiredThe key no longer works; ask for a new one.
403insufficient_scopeThe key isn't allowed to use this endpoint.
404not_foundCheck the address.
413image_too_largeSend an image under 20 MB.
415invalid_imageSend a JPEG, PNG, WebP or TIFF as multipart/form-data.
422invalid_imageRegistrations: the image couldn't be processed. Check the file.
429registration_limit_reachedYour plan's registrations are used up.
429rate_limited, quota_exceeded, too_many_failed_attemptsWait for Retry-After seconds.
500internal_errorOur fault. Try again; if it persists, send us the traceId.
503registration_unavailableCouldn't register just now. Try again shortly.
400invalid_erasureErasing an uploader: send declarantRef as member:{id} or user:{id}.
503erasure_unavailableCouldn't erase just now. Try again shortly.
503check_unavailableThe check couldn't be done just now. Try again shortly.

Your key and usage

Privacy

Telling the people who upload to your site

If people upload images to your website and you register them, say so in your privacy notice. Suggested wording, to adapt:

Images you upload

When you upload an image to [your site], we record it with imageRelease's rights ledger, so that we and others can check where the image came from and who holds rights to it. We send imageRelease the image, your answer about your rights to it (for example that you took it, that it was given to you to promote an event, or that you're not sure), recorded as your answer, together with anything you told us about who holds the rights or where the image came from, any credit, when it was used on [your site], and a reference number for your account. We don't send your name or email address. imageRelease keeps a digital fingerprint, a small thumbnail and a larger copy of the image (1600 pixels on its long edge, with embedded details such as location removed, kept for up to 2 years, then deleted, so that matching stays accurate as methods improve; never shown or shared), and acts on our behalf. If you change your answer, the earlier one is kept as history. If the image is no longer shown on [your site], we record that it's no longer used. If you close your account, we remove your reference number from the record. See imageRelease's privacy notice for more.

And a shorter line for the upload form itself:

Images you upload are registered with imageRelease's rights ledger, with your answer above, recorded as yours, and a reference number, never your name or email.

Reference

The full contract is the OpenAPI document: https://imagerelease.uk/api/ext/v1/openapi.json. Import it into Postman, Insomnia or a code generator.

Within v1, fields are only ever added, never renamed, removed or changed in meaning, so ignore fields you don't recognise. Anything that would break that promise gets a new version.