apyhub
ARTIFICIAL INTELLIGENCE · GEOLOCATION

AI Image Landmark Detection API

Hosted on ApyHub

What it does

Landmark Detection identifies landmarks in an image and returns the detector response from the service you choose. Send either a file upload or a public image URL, and include optional credentials when you want to route the request through Azure or Google instead of the default ApyHub detector.

Use /file when you already have the image bytes, or /url when the image is hosted elsewhere. Both endpoints accept requested_service with azure, google, or apyhub. The file endpoint also accepts azure_key, google_key, azure_region, azure_endpoint, azure_account_id, and azure_access_token. The URL endpoint accepts nested azure and google credential objects, including Google credential JSON and Azure service details.

The response is grouped under data and may include azure, apyhub, and google objects, depending on the service path you request. That makes Landmark Detection useful when you need to compare providers, keep a fallback vision pipeline, or standardize landmark recognition across different cloud accounts.

Integrate it into travel apps, media moderation workflows, or image indexing systems where you need to recognise places from user-uploaded photos without building your own vision model.

Provider (requested_service)Atoms
Azure500
Google500
ApyHub2000
▣ ENDPOINT 01 / 02
POST
Detect landmarks (file upload)
http://localhost:8080/apyhub/detect-landmarks/file
QUICKSTARTGUIDE

Quickstart

Upload an image file to detect landmarks.

curl -X POST "http://localhost:8080/apyhub/detect-landmarks/file" \
  -H "apy-token: $APY_TOKEN" \
  -F "file=@/path/to/image.jpg" \
  -F "requested_service=apyhub"

What you'll get back

Returns a JSON object with a data object field. That data object may include azure, apyhub, and google objects, depending on the detector response.

{
  "data": {
    "azure": {},
    "apyhub": {},
    "google": {}
  }
}
TRY ITLIVE · 500 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.
Max 100MB total per request (all files combined). Larger? Use this API's URL-based endpoint instead, if it has one.
body*

About this endpoint

What it does

Uploads a file and runs landmark detection against the selected service. The response returns a JSON object with a data object containing provider-specific result objects for azure, apyhub, and google.

Request Body

ParameterTypeMandatoryDescription
fileStringYesBinary file upload.
azure_keyStringNoAzure key value.
google_keyStringNoGoogle key value.
azure_regionStringNoAzure region value.
azure_endpointStringNoAzure endpoint URL.
azure_account_idStringNoAzure account ID value.
requested_serviceENUMNoChoose which service to target: azure, google, or apyhub. Default: apyhub.
azure_access_tokenStringNoAzure access token value.

Response

Returns a JSON object with a data object field. That data object can contain provider result objects for azure, apyhub, and google, each documented in the schema as an object.

ParameterTypeMandatoryDescription
dataObjectNoResult container object. May include azure, apyhub, and google provider response objects.

Body

Name
Type
Description
bodyREQUIRED
object

Max 100MB total per request (all files combined). Larger? Use this API's URL-based endpoint instead, if it has one.

▣ ENDPOINT 02 / 02
POST
Detect landmarks (URL input)
http://localhost:8080/apyhub/detect-landmarks/url
QUICKSTARTGUIDE

Quickstart

Detect landmarks from an image URL with the default ApyHub vision service.

curl -X POST "http://localhost:8080/apyhub/detect-landmarks/url" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"requested_service":"apyhub","url":"https://assets.apyhub.com/samples/sample.png"}'

What you'll get back

Returns a JSON object with a data object field. The data object may contain azure, apyhub, and google objects, depending on which vision backend responds.

{
  "data": {
    "apyhub": {}
  }
}
TRY ITLIVE · 500 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.
body*
azure
Custom credentials for Azure services.
Azure subscription key.
Azure service region.
Azure endpoint URL.
Azure account ID.
OAuth access token for Azure service.
google
Custom credentials for Google services.
Target language locale.
google_credential_json

About this endpoint

What it does

Detects landmarks from an image URL. The request body must include a url, and you can optionally supply provider-specific credentials plus a requested_service selector to choose which service to use.

Request Body

ParameterTypeMandatoryDescription
urlStringYesImage URL to analyze. Must be a URI.
azureObjectNoCustom credentials for Azure services. See schema for nested fields.
azure.keyStringNoAzure subscription key.
azure.regionStringNoAzure service region.
azure.endpointStringNoAzure endpoint URL.
azure.account_idStringNoAzure account ID.
azure.access_tokenStringNoOAuth access token for Azure service.
googleObjectNoCustom credentials for Google services. See schema for nested fields.
google.google_languageStringNoTarget language locale.
google.google_credential_jsonObjectNoGoogle service account credential JSON. See schema for nested fields.
requested_serviceENUMNoService to use. Allowed values: azure, google, apyhub. Default: apyhub.

Response

Returns a JSON object with a data object field. The data object may contain azure, apyhub, and/or google object fields, each representing the response object from the corresponding landmark detection provider.

ParameterTypeMandatoryDescription
dataObjectNoWrapper object for provider-specific responses.
data.azureObjectNoResponse object from Microsoft Azure Computer Vision.
data.apyhubObjectNoResponse object from ApyHub Vision detector.
data.googleObjectNoResponse object from Google Cloud Vision.

Body

Name
Type
Description
bodyREQUIRED
object
▣ COMMON ERRORS

Errors any endpoint can return

400bad_request

Required parameter missing or malformed body.

401unauthorized

API key missing, revoked, or not authorized for this service.

429rate_limited

Your plan's per-second rate exceeded. Retry with exponential backoff.

503upstream_busy

Backend temporarily unavailable. Try again in a few seconds.