---
title: "Create dashboard view images"
method: POST
path: "/api/v1/discovery/dashboard-view-images/create"
tags: ["discovery"]
---

# Create dashboard view images

`POST /api/v1/discovery/dashboard-view-images/create`

## Request

- Base URL: `https://point11.ai`
- URL: `https://point11.ai/api/v1/discovery/dashboard-view-images/create`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://auth.point11.ai/oauth2/authorize`, token URL `https://auth.point11.ai/oauth2/token`)

Draw 1 to 12 Discovery dashboard views as PNG images for slides, documents or messages, each exactly the card the Point11 dashboard draws with a footer naming its view, campaign, filters, results window and as-of day; each `views` entry is a view as discovery_dashboard_views_get takes it (discovery_dashboard_views_list lists them). Answers each image's id, size, provenance, a small preview and a download link that works for five minutes (discovery_dashboard_view_images_download fetches the file again); an identical image is answered without drawing it again, images are kept 30 days, and drawing them is free.

## Headers

- `Point11-Organization` string, uuid
- `Idempotency-Key` string, uuid, required

## Request body

- DiscoveryDashboardViewImagesCreateRequest
  - `views` object[], required: The views to draw, in the order the images are answered; each as discovery_dashboard_views_get takes it.
    - `id` string, uuid, required: Discovery campaign id.
    - `view` 'discovery_brand_share_trend' | 'discovery_brand_win_rate_trend' | 'discovery_competitor_leaderboard' | 'discovery_brand_map' | 'discovery_win_rate_by_location', required: The dashboard view, as discovery_dashboard_views_list lists it.
    - `date_range` string, required: Required. Use "all" or one absolute UTC-day range in yyyy-MM-dd..yyyy-MM-dd form. Preset names are not accepted because a saved answer must not move over time.
    - `brand_perspective` string: Optional exact brand name for the dashboard's read-only perspective. Omit for the campaign's target brand.
    - `geography` string: Optional exact navigable dashboard-scope id or unambiguous visible label of a place with places under it, for example "Texas". Omit for World, the dashboard default scope.
    - `geography_view` 'map' | 'list': Optional. "list" for the ranked table, or "map" for the countries filled on a world map, which is drawn only at World (no geography). Omit for the map where it can be drawn, else the list.
  - `format` 'slide' | 'square' | 'card', required: slide: a 16:9 frame (1600×900 at scale 1); square: 1080×1080; card: the card at its reading width (1008), as tall as it draws.
  - `theme` 'light' | 'dark': light (the default, for slides) or dark.
  - `scale` 1 | 2: Image pixels per frame pixel: 2 (the default; crisp on projectors) or 1.

## Response `200`

Success.

- DiscoveryDashboardViewImagesCreateResponse
  - `images` object[], required
    - `imageId` string, uuid, required
    - `view` string, required: The view it draws.
    - `title` string, required: The view's title, as the image's footer names it.
    - `width` integer, required: The PNG's width in pixels.
    - `height` integer, required: The PNG's height in pixels.
    - `provenance` DiscoveryProvenance, required
      - `campaign` object, required
        - `id` string, uuid, required
        - `name` string, required
      - `filters` DiscoveryFilters, required: The filters the view was read with: brand_perspective only when the lens is not the campaign's own brand; for Locations, geography (the id of the scope it shows, absent at World) and geography_view (the form it draws).
        - `date_range` string, required: Required. Use "all" or one absolute UTC-day range in yyyy-MM-dd..yyyy-MM-dd form. Preset names are not accepted because a saved answer must not move over time.
        - `brand_perspective` string: Optional exact brand name for the dashboard's read-only perspective. Omit for the campaign's target brand.
        - `geography` string: Optional exact navigable dashboard-scope id or unambiguous visible label of a place with places under it, for example "Texas". Omit for World, the dashboard default scope.
        - `geography_view` 'map' | 'list': Optional. "list" for the ranked table, or "map" for the countries filled on a world map, which is drawn only at World (no geography). Omit for the map where it can be drawn, else the list.
      - `filterLabels` object[], required: The filters as a host labels them, in the view's declared order.
        - `key` string, required: The filter's name, as its view declares it.
        - `label` string, required: The filter's short label, as every host shows it.
        - `value` string, required: The value it was read with, as the dashboard shows it.
      - `window` object, required: The results window the image's values read, as of asOf.
        - `from` string, date, required
        - `to` string, date, required
        - `asOf` string, date, required
      - `version` integer, required: The version of the view's snapshot.
      - `snapshotDigest` string, required: The view's snapshotDigest: what the image's card drew.
      - `format` 'slide' | 'square' | 'card', required
      - `theme` 'light' | 'dark', required
      - `scale` 1 | 2, required
      - `createdAt` string, date-time, required
      - `retainedUntil` string, date-time, nullable, required: When the image stops being kept.
      - `canonicalHref` string, required: The dashboard page that shows the view, under the same filters.
    - `download` object, required
      - `url` string, uri, nullable, required: A presigned GET of the PNG that works until expiresAt; null when this deployment cannot sign it.
      - `expiresAt` string, date-time, nullable, required
      - `filename` string, required
      - `contentType` 'image/png', required
    - `preview` object, nullable, required: A model-sized preview (long edge at most 1024 px); null when unreadable.
      - `mimeType` 'image/webp', required
      - `data` string, required: The preview's bytes, base64.

## Other responses

- `400`: The input, query, or Idempotency-Key is invalid.
- `401`: The bearer is missing, expired, or not accepted.
- `402`: Billing refused the write: the code names the reason and `details.reason` carries it.
- `403`: The credential lacks the operation's scope or role, or the operation needs a different door.
- `404`: The resource or organization does not exist for this caller.
- `405`: This path takes another HTTP method, named in `Allow`.
- `409`: The request conflicts with current state or with prior use of its Idempotency-Key.
- `413`: The request, or the answer it asks for, is too large; narrow it.
- `429`: The credential's rate budget is spent; retry after `Retry-After` seconds.
- `500`: An unexpected server failure; retry later. Only `request_id` identifies it.
- `503`: A dependency is temporarily unavailable; retry after `Retry-After` seconds.
- `default`: Another status a product answers for its own refusal (for example `415` for an unsupported attachment); branch on `code`.

---

[API](https://skmtc.dev/point11/apis/point11-api.md) · [All operations](https://skmtc.dev/point11/apis/point11-api/llms.txt) · [OpenAPI document](https://skmtc.dev/point11/apis/point11-api/revisions/36a84c7aca11?raw)
