> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gomry.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Venue Map

> Return the venue map for an event as image bytes, never as a link

# Venue Map

Returns the seating map for one event. Optional: an integration that has no maps can answer `found: false` for every event, and events still sell.

## Bytes, not a link

Return the **image itself**, base64-encoded. Never return a URL to it:

* Map URLs are often signed and expire within minutes, so a stored link is a broken image by the time a buyer loads the page.
* A buyer's browser fetching from your domain would show where the ticket came from, in the network panel and in any error.

Retail caches the bytes and serves them from Gomry's own domain.

## Query Parameters

<ParamField query="vendorKey" type="string" required>
  Your supplier identifier.
</ParamField>

<ParamField query="vendorEventId" type="string" required>
  The event, as you returned it from [Catalog](/vendor-api/catalog).
</ParamField>

## Response

<ResponseField name="found" type="boolean" required>
  `false` when there is no map for this event. **Not an error**, and the most common answer. Answer `200` with `found: false`, not `404`.
</ResponseField>

<ResponseField name="kind" type="string" default="none">
  How far the image can be trusted to describe this venue:

  | Value | Meaning |
  | - | - |
  | `vector` | An SVG map with sections as shapes. **Preferred.** Retail restyles it to match Gomry, and can highlight the sections for sale. |
  | `seating_chart` | A raster image of this venue's layout. |
  | `generic` | A stock placeholder reused across many venues, such as a "general admission" graphic. **Label it, do not dress it up as a venue map.** Retail declines to show it. |
  | `none` | Nothing. Use with `found: false`. |
</ResponseField>

<ResponseField name="imageBase64" type="string">
  The image, base64-encoded, at most 8,000,000 characters. Present when `found` is `true`.
</ResponseField>

<ResponseField name="contentType" type="string">
  MIME type of the image, for example `image/svg+xml` or `image/png`.
</ResponseField>

<ResponseField name="cacheSeconds" type="integer" default="86400">
  How long Retail may cache the image, from 0 to 31,536,000 (one year). A stadium's layout changes rarely, so a long value is usually right.
</ResponseField>

<ResponseField name="sections" type="string[]">
  The section names this map draws, at most 2,000, each up to 200 characters. A map may say `Upper Sideline 342` where a listing says `342`, so this list is what lets Retail match listings to the drawing. Retail stores the map once and does not ask again, so send it with the map. Names only: no ids, no geometry.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -H "X-API-Key: $GOMRY_RETAIL_API_KEY" \
    "https://integration.example.com/api/vendor/v1/venue-map?vendorKey=acme&vendorEventId=3273941"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "found": true,
    "kind": "vector",
    "contentType": "image/svg+xml",
    "imageBase64": "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIC4uLg==",
    "cacheSeconds": 2592000,
    "sections": ["Lower Level 118", "Lower Level 119", "Upper Sideline 342"]
  }
  ```

  ```json 200 (no map) theme={null}
  { "found": false, "kind": "none" }
  ```
</ResponseExample>
