Vista API Documentation
Integrate map and plan georeferencing into your applications.
The Vista API georeferences uploaded map/plan images against Ordnance Survey tiles using deep learning embeddings and fine registration. Two core operations power the pipeline:
- Search (Coarse) — finds the approximate geographic location of your image using vector similarity search.
- Match (Fine Registration) — aligns your image to OS tiles at pixel level using feature matching (SuperPoint + LightGlue).
Authentication
All API requests must include an API key passed as an Ocp-Apim-Subscription-Key HTTP header:
Quick Start
Get a georeferenced result in three steps:
Upload your plan image with a bounding box defining the search area.
Returns a job_id and resolved effort with HTTP 202 Accepted.
Check the job until it completes (poll no more than every 10 seconds).
Once the status is complete, retrieve the georeferencing result.
Job Submission
Full Pipeline (Coarse + Fine)
Runs the complete georeferencing pipeline: coarse vector search followed by fine registration.
| Parameter | Type | Required | Description |
|---|---|---|---|
file | File | Yes | The plan/map image to georeference (PNG or JPEG, max 20 MB) |
bbox | String | No | Bounding box search area: min_x,min_y,max_x,max_y in EPSG:27700. Maximum 10 km × 10 km. Improves accuracy when provided. |
effort | String | No | Search effort: low, medium (default), or high. Controls how many candidates are evaluated — see Effort Levels |
Fine Registration Only
Skips coarse search and performs only fine registration against the specified bounds.
| Parameter | Type | Required | Description |
|---|---|---|---|
file | File | Yes | The plan/map image (PNG or JPEG, max 20 MB) |
bounds | String | Yes | Known bounds: min_x,min_y,max_x,max_y in EPSG:27700. Maximum 10 km × 10 km. |
effort | String | No | Fine registration effort: low, medium (default), or high. Controls fallback depth — see Effort Levels |
File Validation
- Accepted formats: PNG and JPEG (validated by magic bytes, not just extension)
- Maximum file size: 20 MB
- Images should be north-oriented for best results
Bounding Box Validation
- Format:
min_x,min_y,max_x,max_y— four comma-separated numbers in EPSG:27700 - Maximum dimensions: 10 km × 10 km (10,000 m per side)
- Max values must be strictly greater than min values
Response (202 Accepted)
Effort Levels
Control the trade-off between speed and thoroughness with the effort parameter. Effort affects both the coarse search (number of candidates evaluated) and fine registration (fallback depth).
| Level | Coarse Candidates | Fine Registration | Typical Use |
|---|---|---|---|
low |
5 candidates | Minimal fallbacks, fastest | Accurate bbox and want fast turnaround |
medium |
10 candidates (default) | Balanced fallback depth | General purpose — recommended starting point |
high |
15 candidates | Full fallbacks including tiled and satellite | Difficult images, large search areas, or when medium fails |
The value is case-insensitive. When omitted, defaults to medium. The resolved effort level is returned in the 202 response.
Job Status
Returns the current status of a submitted job.
| Status | Description |
|---|---|
queued | Job is waiting to be picked up by a worker |
processing | Job is actively being processed |
complete | Processing finished — result is available |
failed | Processing failed — see error message |
Response Example
Job Results
Retrieve the georeferencing result once the job status is complete. There are three possible outcomes:
Successful Match
Approximate Match
Coarse location found but fine registration failed. The bounds are estimated, not pixel-accurate. A suggestion field may offer guidance.
Failed Match
Image Downloads
Downloads the aligned output image (PNG). Only available after a successful match.
Downloads the original uploaded query image.
Rate Limits
To ensure fair usage and system stability, the following limits are enforced:
Queue Limit
Each user can have a maximum of 10 queued jobs at any time. Only jobs with queued status count toward this limit — jobs that are processing, complete, or failed do not.
If the limit is reached, new submissions return HTTP 429 Too Many Requests:
/v1/jobs and /v1/jobs/fine-register endpoints. Wait for existing jobs to start processing before submitting new ones.
Job Management
/v1/manage/*
List Jobs
| Parameter | Type | Description |
|---|---|---|
status | String | Filter by status: queued, processing, complete, failed |
type | String | Filter by job type: pipeline, fine_register |
from_date | String | ISO 8601 date — only jobs created after this date |
to_date | String | ISO 8601 date — only jobs created before this date |
sort | String | Sort order: desc (default, newest first) or asc (oldest first) |
page_size | Integer | Results per page (default 25, max 100) |
continuation | String | Continuation token for pagination |
Get Job Detail
Returns full job details including status, parameters, and result.
Delete Job
Permanently deletes a job and its associated images. Clients can only delete their own jobs (returns 403 otherwise).
Dashboard Statistics
Returns aggregate job statistics. Clients see only their own stats; admins see all users.
| Parameter | Type | Description |
|---|---|---|
from_date | String | ISO 8601 date — filter by start date |
to_date | String | ISO 8601 date — filter by end date |
Best Practices
- Bbox accuracy is critical — the closer the bounding box is to the real location, the better the results. Maximum size is 10 km × 10 km, but smaller is better for accuracy and speed.
- Try low effort first — escalate to medium or high only if the result quality is insufficient. This saves processing time and cost.
- North-oriented images — source images should be north-up and cropped to the main map content for best accuracy.
- Annotations are OK — borders, padding, legends, north arrows, and red-lining are tolerated. The system ignores them during matching.
- Scale matters — best results between 1:1,000 and 1:5,000. Outside this range, accuracy may drop.
- Poll interval — check job status no more than every 10 seconds to avoid rate limiting.
- Job TTL — completed jobs and their images expire after approximately 90 days.
- Queue limit — you can have a maximum of 10 queued jobs at a time. Wait for jobs to start processing before submitting more.
-
High effort is slow —
higheffort evaluates significantly more candidates and can take substantially longer. Use only whenmediumfails.
Error Handling
"success": false in the result body. Always check the success field — do not rely on HTTP status alone.
| Scenario | HTTP Status | Details |
|---|---|---|
Job completed (check success field) | 200 | Result body contains success: true or success: false with error_message |
| Result requested before job completes | 409 Conflict | Job is still processing — continue polling the status endpoint |
| Job not found | 404 Not Found | Invalid job ID or job has expired |
| Invalid file type, too large, or bad bbox | 400 Bad Request | Check file format (PNG/JPEG), size (< 20 MB), and bbox dimensions (≤ 10 km × 10 km) |
| Missing or invalid API key | 401 Unauthorized | Check your Ocp-Apim-Subscription-Key header |
| Accessing another user's job | 403 Forbidden | Clients can only access and delete their own jobs |
| Queue limit exceeded | 429 Too Many Requests | You have 10 queued jobs. Wait for existing jobs to process before submitting new ones. |
Response Reference
Complete reference of all fields returned in the job result response.
| Field | Type | Description |
|---|---|---|
job_id | string | Unique 12-character hex identifier for the job |
success | boolean | true if a match was found, false otherwise |
approximate | boolean | true if only coarse location was found (fine registration failed) |
matched_tile_id | string | Identifier of the best-matching OS tile |
matched_pack_id | string | Identifier of the embedding pack containing the matched tile |
similarity_score | float | Cosine similarity score from coarse search (0–1) |
search_time_ms | float | Time taken for the coarse vector search in milliseconds |
aligned_image_bounds | array | Georeferenced bounds as [min_x, min_y, max_x, max_y] in EPSG:27700 |
reference_bounds | array | Bounds of the reference tile used for matching as [min_x, min_y, max_x, max_y] |
num_keypoints_query | integer | Number of keypoints detected in the query image |
num_keypoints_ref | integer | Number of keypoints detected in the reference tile |
num_matches | integer | Total number of feature matches before RANSAC filtering |
num_inliers | integer | Number of inlier feature matches after RANSAC |
inlier_ratio | float | Ratio of inliers to total matches (0–1). Higher is better. |
ncc_score | float | Normalised cross-correlation between aligned image and reference tile |
combined_score | float | Weighted combination of similarity, inlier ratio, and NCC scores |
num_gcps | integer | Number of ground control points used in the alignment |
processing_time_sec | float | Total processing time in seconds |
error_message | string | Human-readable error description (present when success is false or approximate is true) |
suggestion | string | Guidance for improving results (present on approximate matches) |
Approximate Match Fields
When approximate is true, these fields replace the standard match fields:
| Field | Type | Description |
|---|---|---|
approximate_tile_id | string | Best-matching tile from coarse search |
approximate_bounds | array | Estimated bounds as [min_x, min_y, max_x, max_y] — not pixel-accurate |
approximate_similarity | float | Similarity score of the approximate match |