ANPR API Changelog
Notable changes to the ANPR API - endpoints, recognition capability, accuracy and performance.
v3.2.1
Latest4 October 2026More accurate car colour detection.
Car colour detection is more accurate — We have updated how the API recognises a vehicle's colour. The
colorreported for each car is now noticeably more accurate.
v3.2.0
9 August 2026A confidence score for the read itself, a detector built to find every vehicle in a frame, and vehicle details on photos that used to return none.
Each plate's
confidenceis nowdetection_confidence— Same number, clearer name. It is the plate detector's score for the box - "a plate is here" - and it was never a statement about the text: a 0.95 box routinely holds an unreadable plate, and plates found by the cropped-photo fallback carry0.0while reading perfectly. The short name invited exactly that mistake, so it is gone. If you gate on it, switch to the read scores below. Everything else about the field is unchanged.
How sure the OCR is of the text:
text.confidenceandtext.min_char_confidence— Every plate now reports the mean of its per-character scores and the score of its weakest character. Prefer the minimum when the whole string has to be right - a plate number is not partially correct, and one glyph at 0.31 makes it wrong while the mean still reads 0.88. Both arenullwhen nothing was read, so a "below 0.5" filter never mistakes silence for a bad read. The same two fields appear insidetexton/v1/read.all_cars=truenow uses a detector built for counting vehicles — Enumerating a forecourt is a different problem from picking the car a photo is of, and it now has its own model - one trained to find every vehicle in a frame, near and far. On a real forecourt frame the previous approach found 1 vehicle; this finds 15. Each vehicle big enough to read is then described in full: its own body type, colour, view angle, brand and model, and its own plate detected and read inside its crop. Vehicles too small to identify are still reported so the count is right, markeddescribed: falsewith unknown attributes rather than invented ones.
Vehicle details on photos that used to return none — The car detector holds out for near-certainty before it will say "this is the car", which is right for choosing one - and on ordinary customer photos it means
bodysometimes came backnull, with no brand, model, colour or view angle at all, even when the plate read fine. When it abstains, the vehicle-counting model now supplies the car instead. Measured on 14 real customer uploads:bodywas empty on 5 of them before, 1 after.body.car_sourcetells you which detector answered.
Running high volume, or need images to stay on your own network? The models are also licensed as a Docker container you run on your own server, with no request limits - reply to any of our emails or write to [email protected].
v3.1.0
29 July 2026Character-level OCR detail, honest provenance on Arabic strings, a plate-resolution quality band, and plate-logo compositing as a documented endpoint.
POST /v1/plate-logo— Detects the plate, removes it with natural lighting and shadow, and warps a supplied logo onto the plate plane. Send two files,file(the car photo) andlogo(PNG with transparency gives the cleanest result);opacity(0–1, default0.95) controls blend strength. Returns the edited image asimage/jpeg, with plate box, skew and detection confidence inX-Plate-*response headers, or422if no plate is found. Counts as one request against your rate and monthly limits. Also available unauthenticated on the demo API.Per-character OCR confidence —
text.characters[]is now filled in. Each entry is one character the model actually read: the glyph, whether it's Arabic or Latin, its own confidence score and its box on the plate. Useful for rejecting weak reads yourself instead of trusting the whole string. The key existed before but was always empty.Know when Arabic was read vs. converted —
plate_number_ar_sourceandplate_code_ar_sourcesay whether an Arabic string was genuinely read off the plate (detected), converted from the Latin read (transliterated), or a mix. Characters that were converted rather than read are deliberately left out ofcharacters[], so a guess is never presented as a reading./v1/readnow returns aconfidence— The mean per-character OCR score - the read-quality counterpart to the detection score/v1/detectreturns per plate.quality- how many pixels the plate actually got — Plate width, not image width, is what predicts a correct read, so both endpoints now state it outright instead of leaving you to derive it. Every plate carries aqualityobject withplate_width_px, aband(poor|marginal|good|optimal) and a plain-languagenote- for example "below 80px - expect reduced accuracy, especially on letters". On/v1/detectthe width comes from the detected box (x2−x1); on/v1/readthe crop is the plate, so it is the image width. The bands are our measured accuracy buckets:poorunder 80 px,marginal80–100,good100–150,optimal150 and above.Country-specific Arabic letters on
/v1/read— The endpoint classifies the plate's country first and uses that country's Latin→Arabic letter table, matching what/v1/detectalready did. UAE, Saudi and Oman each have their own mapping; for Qatar, Kuwait and Bahrain no letter is invented where the model didn't read one.
Cropped plate photos now return a result — If you send an image that is already just the plate - no car in frame - detection previously found no plate box and answered "nothing found". The whole image is now classified and read as the plate instead. On a sample of 120 real customer uploads this took the share that come back with a result from 55% to 76%. These plates carry
"source": "whole_image_fallback",confidence: 0.0and a box covering the full image, so you can tell them apart. Images that aren't plates still report zero plates.Significantly better Arabic letter recognition — The OCR model is markedly more accurate on Arabic characters, cutting misreads on Arabic plate codes and numbers.
UAE classic plates — Classification and OCR retrained for classic plates. More reliable plate type, emirate and code/number reads on classic formats.
Plate detector retrained for better small and angled plate recall.
Free plan is now 100 requests/month — Down from 300. Paid tiers are unchanged. You'll get an email once you pass 90 requests in a month, so a top-up never catches you by surprise.
Suspended accounts get a clearer answer — An account that has been suspended now returns
403with "Your account has been blocked. Please contact [email protected] to restore access." - previously a401that looked like a bad API key.
Running high volume, or need images to stay on your own network? The models are also licensed as a Docker container you run on your own server, with no request limits - reply to any of our emails or write to [email protected].
v3.0.0
4 July 2026Car intelligence as a first-class surface, and controls to pay only for the models you actually need.
POST /v1/car— All car attributes, no plate work. Per-model query toggles (body_type,color,position,brand,car_model), all defaulttrue; set any tofalseto skip that model.POST /v1/detect/{country}— Force the country and skip the country classifier. Acceptsuae,saudi/saudi_arabia,kuwait,qatar,bahrain,oman.plate_onlyon/v1/detect— Skips every car model (body, color, position, brand, car model).bodyreturnsnull.
On a 1280×1440 image: default 1.3s,
plate_only0.54s, country-forced 1.06s, both together 0.30s.
With
plate_only, parking direction fromcamera_idstays"unknown"- the position model is what derives it.
v2.5.0
29 June 2026Car model recognition — 2,003
Brand|Modelclasses.make_model— The fused source of truth for brand + model. The brand network owns the brand; the model network is re-decoded within that brand. The API refuses to guess when uncertain, rather than returning a confident wrong model (brand_uncertain,decision).
The raw
modellabel is withheld when it names a different brand than a more-confident brand prediction. Readmake_model;brandandmodelare raw per-network signals.
v2.4.0
27 June 2026Car brand recognition — 181 brands, returned as
body.brand.
v2.3.0
24 June 202699%+ accuracy on country detection — Across all six supported markets - UAE, Saudi Arabia, Kuwait, Qatar, Bahrain and Oman.
Significantly improved plate classification — Emirate, color, type and size are now predicted by a dedicated classifier per country instead of one shared model, which markedly raises accuracy on every market.
main_onlyon/v1/detect— Skip the full-frame pass and return only the main car’s plate.
v2.2.0
1 June 2026Parking management — Podiums → Zones → Cameras, with full CRUD.
Movement log — Passing
camera_idto/v1/detectrecords an entry/exit event per detected plate, with direction derived from the camera’s configured entrance and exit views.Parking queries —
/api/parking/search(plate substring → current location and history),/api/parking/current,/api/parking/movements.View angle detection — Front / back / side, plus four oriented three-quarter views (
semiside_front_left,semiside_front_right,semiside_back_left,semiside_back_right), returned asbody.position. Aprobs_coarseblock folds the four back intosemi_sidefor callers that only need the coarse view.
v2.1.0
15 May 2026Car color detection —
body.colorwith name, hex and RGB.
v2.0.0
13 May 2026Vehicle attributes join plate recognition.
Car detection — Locates the main car and returns
car_bbox/car_confidence. Plate detection now runs on the car crop as well as the full frame, improving recall on wide shots.Body classification — Sedan, hatchback, wagon, coupe, convertible, SUV, pickup, minivan.
POST /v1/body— Body classification on its own.
v1.6.0
12 May 2026POST /v1/read— Read a pre-cropped plate image and get text plus attributes back without running full-frame detection.
v1.5.0
21 February 2026Country detection accuracy.
v1.4.0
17 February 2026Plate text is now split into a code group and a number group, and the fields were renamed:
zone/zone_ar→plate_code_en/plate_code_arfull_plate_en/full_plate_ar→plate_number_en/plate_number_ar
v1.3.0
15 February 2026OCR model retrained — Substantially better Arabic handling. English and Arabic readings now cross-fill, so a character recognised in one script populates the other.
v1.2.0
14 February 2026Public API documentation and webhook documentation.
Explicit English and Arabic formatting for every plate text field.
v1.1.0
2 February 2026Webhooks — Endpoint management, secret rotation, test delivery, and a delivery log with retry history.
Usage and logs — Request logs, log detail, log export, usage charts and quota.
Playground — Try detection interactively and send feedback on results.
Request parameter passthrough on detection endpoints.
v1.0.0
26 January 2026Public launch.
POST /v1/detect— Detect plates in an image and return position, confidence, English and Arabic text, and plate attributes.POST /v1/read— Read a pre-cropped plate.GET /v1/usage— Usage statistics.API key authentication and key management.
Build on the latest version
Every account starts with 100 free credits. No credit card required.