# Business Photos

> Business Photos is a paid API for AI agents from agents.openwebninja.com, paid per call via MPP, price unknown, status unknown (last checked 2026-10-14).

Retrieve paginated photos and videos for a specific Google Maps business by its Business ID.

## Facts

- Endpoint: GET https://agents.openwebninja.com/local-business-data/business-photos?utm_source=zero.xyz
- Price: price unknown
- Payment: MPP
- Status: unknown
- Last checked: 2026-10-14
- Activations on Zero: 0
- Provider: agents.openwebninja.com
- Website: https://agents.openwebninja.com
- Canonical page: https://www.zero.xyz/c/agents-openwebninja-com-business-photos-37954a9e
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_STINc4KrglYZddA7nLwdD

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability agents-openwebninja-com-business-photos-37954a9e
```

Example prompt: Can you pull up to 50 photos for the business with Google place ID ChIJkaUn1JPTD4gR7ZWpE9cCuow from the US region — just still photos, no videos?

## When to prefer this

Use this endpoint when you have a known Google Maps business_id, google_id, or place_id and need to retrieve the actual photo or video media associated with that listing — especially for visual research, content auditing, or building image galleries for a business. Prefer this over general web image searches when you need structured metadata (timestamps, coordinates, media type) tied to a specific verified Google Maps business entity.

## Known failure modes

- Invalid or unknown business_id returns empty data array or error status
- Cursor from a different request or expired cursor causes pagination failure
- Requesting is_video=true for a business with no videos returns empty array
- Region code not supported returns an error or empty results
- Limit value outside 1-100 range may be rejected or clamped
- Rate limit exceeded returns an HTTP 429 or payment/credit error

## How this service works

Get business photos by Business Id.

## Output

Returns an array of photo and video objects, each containing a unique photo_id, a default-resolution photo_url, an optional large-resolution photo_url_large, media type (photo, video, or street_view), optional geo-coordinates (latitude/longitude), an ISO 8601 publication datetime, and a video_thumbnail_url when applicable. Also returns a pagination cursor for fetching subsequent pages, plus an echoed parameters block and a request_id.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "business_id"
 ],
 "properties": {
  "limit": {
   "type": "string",
   "default": 20,
   "description": "Maximum number of business photos to return.\n  \n  **Allowed values:** `1-100`"
  },
  "cursor": {
   "type": "string",
   "description": "Specify the cursor obtained from the previous request to get the next of result page (use for pagination)."
  },
  "fields": {
   "type": "string",
   "description": "A comma separated list of review fields to include in the response (field projection).  \n  By default all fields are returned."
  },
  "region": {
   "type": "string",
   "default": "us",
   "description": "Query Google Maps from a particular region or country.  \n  For a list of supported region/country codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes (Alpha-2 code)*."
  },
  "is_video": {
   "type": "boolean",
   "default": false,
   "description": "Only return video type media (type=video) or not."
  },
  "business_id": {
   "type": "string",
   "example": "0x89c259b5a9bd152b:0x31453e62a3be9f76",
   "description": "Unique Business Id. Accepts `google_id` / `business_id` or `place_id`.  \n\n  **Examples:**  \n  `0x880fd393d427a591:0x8cba02d713a995ed`  \n  `ChIJkaUn1JPTD4gR7ZWpE9cCuow`"
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "status",
  "request_id",
  "parameters",
  "data"
 ],
 "properties": {
  "data": {
   "type": "array",
   "items": {
    "type": "object",
    "required": [
     "photo_id",
     "photo_url",
     "type"
    ],
    "properties": {
     "type": {
      "type": "string",
      "description": "Media type. Values: photo, video, street_view."
     },
     "latitude": {
      "type": "number",
      "nullable": true,
      "description": "Latitude where the photo was taken (when known)."
     },
     "photo_id": {
      "type": "string",
      "description": "Unique Google identifier of the photo."
     },
     "longitude": {
      "type": "number",
      "nullable": true,
      "description": "Longitude where the photo was taken (when known)."
     },
     "photo_url": {
      "type": "string",
      "description": "URL of the photo (default resolution)."
     },
     "photo_timestamp": {
      "type": "integer",
      "nullable": true,
      "description": "Unix epoch seconds matching photo_datetime_utc."
     },
     "photo_url_large": {
      "type": "string",
      "nullable": true,
      "description": "URL of the photo at a larger resolution."
     },
     "photo_datetime_utc": {
      "type": "string",
      "nullable": true,
      "description": "Original publication datetime of the photo in ISO 8601 UTC."
     },
     "video_thumbnail_url": {
      "type": "string",
      "nullable": true,
      "description": "Thumbnail URL when the media is a video; null for still photos."
     }
    }
   },
   "description": "List of photos / videos returned."
  },
  "cursor": {
   "type": "string",
   "nullable": true,
   "description": "Cursor to fetch the next page of photos. Null when no more pages."
  },
  "status": {
   "type": "string",
   "description": "The status of the API response."
  },
  "parameters": {
   "type": "object",
   "properties": {
    "limit": {
     "type": "integer",
     "description": "Maximum number of photos requested."
    },
    "region": {
     "type": "string",
     "description": "Region code used for the request."
    },
    "is_video": {
     "type": "boolean",
     "description": "Whether only videos are being returned."
    },
    "language": {
     "type": "string",
     "description": "Language code used for the response."
    },
    "business_id": {
     "type": "string",
     "description": "The business_id as received."
    }
   },
   "description": "The parameters the API received 
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/agents-openwebninja-com-business-photos-37954a9e/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from agents.openwebninja.com](https://www.zero.xyz/host/agents.openwebninja.com/llms.txt)
