# 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).

Fetches paginated live photos (and videos) for a business from Google Maps using a business ID and optional cursor.

## Facts

- Endpoint: GET https://agents.openwebninja.com/local-business-database/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-a19de39c
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_myAkwtWeOSsCjjuHe5X4y

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-a19de39c
```

Example prompt: Can you pull the first 20 photos for the Google Maps business with ID 0x102b644d009e013:0xea49e9ee285fa7bf?

## When to prefer this

Use this endpoint when you have a specific Google Maps business ID and need live, real-time photos or videos directly from Google Maps rather than cached data. Prefer this over general image search when you want media specifically associated with a business listing, including user-uploaded photos, street view, and videos, with accurate timestamps and geolocation data.

## Known failure modes

- Business ID not found — found returns false, photos array is empty
- Expired or invalid cursor — cursor no longer valid, request must restart from page 1
- Business has fewer photos than limit — fewer results returned than limit, not an error
- Empty page returned — signals end of pagination, no cursor in response
- Invalid region or language code — may return unexpected results or error

## How this service works

Get / paginate business photos by Business Id using a pagination cursor.

Photos are read from Google Maps at request time, so they are live rather than served from the database.

**Note:** `match_count` is the number of photos on this page, not the business's total photo count.

**Note:** `limit` is a maximum and not a promise - a business with fewer photos returns fewer. You have reached the end when a page comes back empty or without a `cursor`.

## Output

Returns an array of photo/video objects each containing a standard-resolution URL, large-resolution URL, media type (photo, video, or street_view), GPS coordinates where the photo was taken, photo ID, and publication timestamp. Also returns whether the business was found, the match count for the current page, and a pagination cursor for fetching the next page.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "business_id"
 ],
 "properties": {
  "limit": {
   "type": "integer",
   "description": "Maximum number of business photos to return.\n\n**Allowed values:** `1-100`"
  },
  "cursor": {
   "type": "string",
   "maxLength": 2048,
   "description": "Pagination cursor for fetching the next page. Pass the `cursor` value returned in the previous response. Omit it on the first request.\n\n**Note:** a cursor is only valid for the exact query that produced it, and it expires. Do not build or edit one."
  },
  "region": {
   "type": "string",
   "default": "us",
   "description": "Query Google Maps from a particular region or country.\n\nFor a list of supported region/country codes see *https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 (Alpha-2 code)*."
  },
  "language": {
   "type": "string",
   "default": "en",
   "description": "Set the language of the results.\n\nFor a list of supported language codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes*."
  },
  "business_id": {
   "type": "string",
   "maxLength": 256,
   "description": "Unique Business Id, as returned in a business record's `business_id`.\n\n**Examples:**\n\n`0x102b644d009e013:0xea49e9ee285fa7bf`"
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "status",
  "request_id",
  "parameters",
  "data"
 ],
 "properties": {
  "data": {
   "type": "object",
   "required": [
    "photos",
    "match_count",
    "limit",
    "found",
    "business_id"
   ],
   "properties": {
    "found": {
     "type": "boolean",
     "description": "Whether a record for the requested Business Id was found."
    },
    "limit": {
     "type": "number",
     "description": "Maximum number of results requested for this page (the limit parameter, or its default)."
    },
    "photos": {
     "type": "array",
     "items": {
      "type": "object",
      "required": [
       "photo_id",
       "photo_url",
       "photo_url_large",
       "video_thumbnail_url",
       "latitude",
       "longitude",
       "type",
       "photo_datetime_utc",
       "photo_timestamp"
      ],
      "properties": {
       "type": {
        "enum": [
         "photo",
         "street_view",
         "video"
        ],
        "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",
        "nullable": true,
        "description": "URL of the photo (default resolution)."
       },
       "photo_timestamp": {
        "type": "number",
        "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."
       }
      },
      "additionalProperties": false
     },
     "description": "List of photos / videos returned."
    },
    "business_id": {
     "type
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/agents-openwebninja-com-business-photos-a19de39c/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)
