ForHosting KIT · Images

Read a QR code

Upload a picture of a QR code and see exactly what it holds, whether a link, Wi-Fi details, a contact card or plain text. Photos taken at an angle, in poor light or slightly blurred still work, and several codes in one image are read separately. Free in your browser.

  • Free
  • Runs in your browser
  • No sign-up
  • Your data stays on your device
Use it from WebAPIEmailTelegramApp soon

Runs in your browser. Free, unlimited — your data never leaves this page.

Reading a QR code by eye is impossible and reading one reliably from a phone photo taken at an angle, under warehouse lighting, isn't much easier for a naive decoder. This qr code scanner api takes an image and returns whatever data is encoded inside the code, whether that's a plain URL, a Wi-Fi credential block, a vCard or raw text, so your application never has to embed decoding logic itself.

What a QR code can really hold

A QR code is not only a shortcut to a web address. The same square can carry plain text, the name and password of a Wi-Fi network in a structured format, a contact card, calendar event details or any string an internal system chose to encode for its own use. The decoder returns exactly what was encoded, without guessing what it is for, so you can see the content before deciding what to do with it. That is handy when you receive a code as an image rather than on paper, or when you need the text inside a label without a dedicated handheld scanner, as on a loading dock.

Why real photos are harder than clean images

A code printed small on a shipping label, photographed at a steep angle, half in shadow or slightly out of focus is where simple decoders fail. QR codes were designed in 1994 to be read quickly on factory lines, and their black-and-white grid includes error correction on top of the actual content. That redundancy lets a code stay readable when a corner is torn, smudged or partly covered by a logo, and it lets a decoder recover clean content from an imperfect photo. When an image contains several codes, each one is read and reported by its position. When there is no readable code at all, you are told so clearly instead of getting an empty result.

Why decoding isn't as trivial as it looks

A code photographed straight-on under office lighting is easy; the same code photographed at a steep angle, partially shadowed, printed small on a shipping label, or slightly out of focus is where most simple decoding attempts fail. Reliable decoding has to tolerate the messy reality of how people actually photograph things, not just the clean test image.

What you send and what you get back

You send an image containing one or more QR codes. If the image contains no readable code, the task reports that clearly rather than returning an empty or ambiguous result.

Warehouse receiving from photographed pallets

Decode QR labels on incoming shipments straight from a phone photo taken on the loading dock, without a dedicated handheld scanner.

Mobile app onboarding via scanned code

Let a user snap a photo of a QR code to import Wi-Fi credentials or a contact card instead of typing them by hand.

What formats does this qr code scanner api accept for the image?

Common raster image formats containing a photographed or rendered QR code are accepted; send the clearest available capture for best results.

Can it read a QR code that's blurry or at an angle?

Yes, within reason, the decoder is built to tolerate the imperfect angles and lighting typical of phone photos rather than requiring a flat, straight-on scan.

What happens if the image has no QR code in it?

The task reports clearly that no code was found rather than returning an empty or misleading result.

Can I decode multiple QR codes in a single image?

Yes, each code found in the frame is decoded and returned separately, tagged by its position in the image.

Is there a free version of this scanner?

The tool above runs free in your browser. No subscription, no tokens, and a failed task is never charged.

Can I submit a batch of scanned images at once?

Yes, batches run asynchronously, so a full receiving run's worth of images can be submitted together and processed without blocking your app.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/dev/qr-decode

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.

curl -X POST https://api.kit.forhosting.com/dev/qr-decode \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"image":"https://ejemplo.com/imagen.jpg"}'
{
  "image": "https://ejemplo.com/imagen.jpg"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "dev.qr_decode",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.002
Per image$0.005

Published price — no tokens, no invented credits. A failed task is never charged.

HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Why decoding isn't as trivial as it looks

A QR code's black-and-white grid carries error correction, positioning markers and format information layered on top of the actual payload, all of which a decoder has to locate correctly before it can even begin reading data.

What POST /dev/qr-decode expects and returns

The task locates each code in the frame, decodes it, and returns the raw payload string for each one found, tagged by its position if more than one code appears in the same image.

The format underneath the scan

QR, short for Quick Response, was designed in 1994 specifically to be read quickly by a scanner moving past it on a factory line, which is why its structure prioritizes fast, error-tolerant reading over information density. That same error correction, built using Reed-Solomon codes, is what lets a code remain readable even when a corner is torn, smudged, or partially covered by a logo, and it's also what lets an image decoder recover a clean payload from an imperfect photo.

What kind of payload comes back

A decoded QR code can hold far more than a URL: plain text, a Wi-Fi network's credentials in a structured format, a vCard contact block, calendar event data, or an arbitrary string an internal system encoded for its own purposes. The endpoint returns exactly what was encoded without assuming a particular use case, leaving interpretation of the payload to whatever system consumes the result.

Fitting into an automated intake pipeline

Batches of scanned images from a single receiving run process through the same asynchronous model without any special handling. Warehouse receiving systems that photograph incoming pallets, mobile apps that let a user snap a code instead of typing a link, and document intake pipelines that need to pull embedded QR data from scanned forms all call this endpoint the same way, submitting an image and receiving the payload through a signed webhook or a signed link.

Document intake with embedded QR references

Extract an internal tracking payload encoded into a QR printed on a scanned form during a bulk document processing run.

Verifying printed codes before a shipment goes out

Decode a batch of freshly printed QR labels to confirm each one encodes the correct payload before packaging ships.

Does this API tell me what type of data was encoded?

It returns the raw decoded payload; whether that string represents a URL, Wi-Fi credentials or plain text is left for your application to interpret.

How much does decoding a QR code cost?

$0.002 per request plus $0.005 per image, with no charge for a task that ultimately fails after retries.

Read the full KIT documentation →