Documentation

​
​

Development

User Acquisition

Monetization

Industry

Webshop Admin API

v1

Supported
​

Webshop Admin API

v1

Supported
​

Unity Services Web APIs
​
​
Endpoints
  • Environment
  • Theme
  • Webshop

Webshop Config Service - Admin API

Admin endpoints for managing webshop configuration, themes, and publishing.
Download OpenAPI specification:

Get webshop details


Returns the webshop record for a project, enriched with draft config for the specified environment. Returns 404 if the environment is not activated.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Get webshop details"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Get webshop details":

Code samples for "Get webshop details":

Request example

curl -X GET \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop"

Response example

{ "id": "string", "slug": "string", "publisherSlug": "string", "projectId": "string", "environmentId": "string", "name": "string", "status": "draft", "generation": { "status": "none", "error": "string", "feedback": "string", "startedAt": "2024-01-01T00:00:00Z" }, "appStoreUrl": "https://example.com", "playStoreUrl": "https://example.com", "screenshotUrls": [ { "url": "string", "source": "appStore" } ], "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": "string", "width": 0 } ] }, "thumbnailUrl": "string" }, "livePublication": { "publisherSlug": "string", "slug": "string", "publishedAt": "2024-01-01T00:00:00Z", "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": null, "width": null } ] }, "thumbnailUrl": "string" } }, "environments": [ { "environmentId": "string", "status": "draft", "isPrimary": true, "publishedAt": "2024-01-01T00:00:00Z" } ], "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "draftUpdatedAt": "2024-01-01T00:00:00Z", "theme": {}, "deepLink": {}, "authConfig": {}, "frontendVersion": "string", "warnings": [ "string" ]}

Create a new webshop


Reserves a slug and creates a webshop record. The environment from the path is activated as the primary environment. If appStoreUrl is provided, App Store scraping and theme generation are triggered automatically. Organization ID is read from the Unity-Organization gateway header.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Create a new webshop"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

Request body for "Create a new webshop"

Media Type:
application/json

slug

string
required
Slug for the webshop, unique within its publisher

publisherSlug

string
required
Publisher slug for the public URL

name

string
required
Webshop display name

appStoreUrl

Apple App Store URL for the game (used for theme generation)

playStoreUrl

Google Play Store URL for the game

HTTP response status codes for "Create a new webshop":

Code samples for "Create a new webshop":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "slug": "string", "publisherSlug": "string", "name": "string", "appStoreUrl": "https://example.com", "playStoreUrl": "https://example.com"}' \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop"

Response example

{ "id": "string", "slug": "string", "publisherSlug": "string", "projectId": "string", "environmentId": "string", "name": "string", "status": "draft", "generation": { "status": "none", "error": "string", "feedback": "string", "startedAt": "2024-01-01T00:00:00Z" }, "appStoreUrl": "https://example.com", "playStoreUrl": "https://example.com", "screenshotUrls": [ { "url": "string", "source": "appStore" } ], "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": "string", "width": 0 } ] }, "thumbnailUrl": "string" }, "livePublication": { "publisherSlug": "string", "slug": "string", "publishedAt": "2024-01-01T00:00:00Z", "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": null, "width": null } ] }, "thumbnailUrl": "string" } }, "environments": [ { "environmentId": "string", "status": "draft", "isPrimary": true, "publishedAt": "2024-01-01T00:00:00Z" } ], "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "draftUpdatedAt": "2024-01-01T00:00:00Z", "theme": {}, "deepLink": {}, "authConfig": {}, "frontendVersion": "string", "warnings": [ "string" ]}

Update webshop metadata and config


Updates the webshop. Only provided fields change; theme, deepLink, and frontendVersion target the draft for this environment. Renaming the slug while the primary environment is published republishes the webshop at the new URL. To rename the organization's publisher slug, use
PATCH /organizations/{organizationId}/publisher
.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Update webshop metadata and config"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

Request body for "Update webshop metadata and config"

Media Type:
application/json

slug

string
New slug (must be globally unique)

name

string
Webshop display name

appStoreUrl

Apple App Store URL for the game. Omit to leave it unchanged, send
""
(empty string) to clear it, or send a URL to set it. Clearing additionally wipes any screenshots and scrape metadata derived from this URL across every environment of the webshop. User-uploaded screenshots are preserved.

playStoreUrl

Google Play Store URL for the game. Omit to leave it unchanged, send
""
(empty string) to clear it, or send a URL to set it.

theme

Theme configuration. Full replace — the handler overwrites draft_config.theme with the provided value. Send the full theme on every update; do not rely on partial-patch merging.

deepLink

object
Deep link configuration. Full replace — send a non-empty
scheme
(plus optional
successPath
) to set it, or an empty/omitted
scheme
to delete it. Omit the field to leave it unchanged.

authConfig

object
Player login configuration. Full replace — the handler overwrites the stored authConfig with the provided value. Send the complete authConfig on every update.

frontendVersion

string
Pinned frontend build version

HTTP response status codes for "Update webshop metadata and config":

Code samples for "Update webshop metadata and config":

Request example

curl -X PATCH \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "slug": "string", "name": "string", "appStoreUrl": "string", "playStoreUrl": "string", "theme": { "colors": { "background": "string", "foreground": "string", "card": "string", "cardText": "string", "mutedText": "string", "primary": "string", "primaryText": "string", "border": "string", "bonusBadge": "string", "bonusBadgeText": "string", "saleBadge": "string", "saleBadgeText": "string", "salePrice": "string", "limitedBadge": "string", "limitedBadgeText": "string", "categoryActive": "string", "categoryActiveText": "string", "categoryInactiveText": "string" }, "typography": { "fontFamily": "string", "fontFamilyHeading": "string", "googleFontsUrl": null }, "radius": "string", "motion": { "intensity": "playful", "reducedMotion": false }, "zones": { "page": { "backgroundImage": "string" }, "header": { "glow": "string", "backgroundGradient": "string", "borderGlow": "string" }, "heroBanner": { "overlay": "string" }, "productCard": { "shape": "rounded", "layout": "detailed", "borderStyle": "solid", "glow": "string", "flashStyle": "pulse", "image": { "background": "string", "display": "contain", "ratio": "1:1", "padding": "string", "backdrop": "off" } }, "particles": { "effect": "none", "zone": "fullPage" } } }, "deepLink": {}, "authConfig": {}, "frontendVersion": "string"}' \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop"

Response example

{ "id": "string", "slug": "string", "publisherSlug": "string", "projectId": "string", "environmentId": "string", "name": "string", "status": "draft", "generation": { "status": "none", "error": "string", "feedback": "string", "startedAt": "2024-01-01T00:00:00Z" }, "appStoreUrl": "https://example.com", "playStoreUrl": "https://example.com", "screenshotUrls": [ { "url": "string", "source": "appStore" } ], "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": "string", "width": 0 } ] }, "thumbnailUrl": "string" }, "livePublication": { "publisherSlug": "string", "slug": "string", "publishedAt": "2024-01-01T00:00:00Z", "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": null, "width": null } ] }, "thumbnailUrl": "string" } }, "environments": [ { "environmentId": "string", "status": "draft", "isPrimary": true, "publishedAt": "2024-01-01T00:00:00Z" } ], "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "draftUpdatedAt": "2024-01-01T00:00:00Z", "theme": {}, "deepLink": {}, "authConfig": {}, "frontendVersion": "string", "warnings": [ "string" ]}

Delete webshop


Permanently deletes the webshop, all its environments, and associated assets. Published content is taken offline.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Delete webshop"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Delete webshop":

Code samples for "Delete webshop":

Request example

curl -X DELETE \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop"

Response example

{ "type": "string", "title": "string", "status": 0, "detail": "string", "instance": "string", "code": "slug_taken"}

Publish webshop configuration


Only the primary environment can be published. Non-primary environments are draft-only workspaces accessed via /_preview and return 409 if a publish is attempted. For the primary env, this snapshots the current draft config into webshop_publications and regenerates the pre-rendered HTML shell served at the public URL. The storefront HTML propagates asynchronously — typically within seconds of the 200 response. A draft config is not required: publishing without one (e.g. before any theme generation) takes the shop live on the predefined default layout. Snapshot semantics: the snapshot is taken as-of the click, not as-of the commit. A PATCH /webshop that commits between this request arriving and the publish completing will NOT be included in this publication and requires a follow-up publish to surface. Concurrent publish / unpublish on the same webshop are serialized so the final state is deterministic. A successful publish may carry a
warnings
array on the response: non-fatal advisories about the published shop, each prefixed with a stable code. Currently
payment-routing-not-configured
is emitted when the environment has no payment-provider routing configured, in which case players see external payment as unavailable until routing is set up.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Publish webshop configuration"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Publish webshop configuration":

Code samples for "Publish webshop configuration":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/publish"

Response example

{ "id": "string", "slug": "string", "publisherSlug": "string", "projectId": "string", "environmentId": "string", "name": "string", "status": "draft", "generation": { "status": "none", "error": "string", "feedback": "string", "startedAt": "2024-01-01T00:00:00Z" }, "appStoreUrl": "https://example.com", "playStoreUrl": "https://example.com", "screenshotUrls": [ { "url": "string", "source": "appStore" } ], "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": "string", "width": 0 } ] }, "thumbnailUrl": "string" }, "livePublication": { "publisherSlug": "string", "slug": "string", "publishedAt": "2024-01-01T00:00:00Z", "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": null, "width": null } ] }, "thumbnailUrl": "string" } }, "environments": [ { "environmentId": "string", "status": "draft", "isPrimary": true, "publishedAt": "2024-01-01T00:00:00Z" } ], "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "draftUpdatedAt": "2024-01-01T00:00:00Z", "theme": {}, "deepLink": {}, "authConfig": {}, "frontendVersion": "string", "warnings": [ "string" ]}

Promote a non-primary env's draft state into the primary env


Copies the source environment's draft state — draft_config (theme, deepLink, frontendVersion), screenshot_urls, branding_urls, scrape_data, and generation_* fields — into the webshop's primary environment's draft_config. The source environment is the env in the URL path; the target is always the webshop's primary environment. Does not publish.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Promote a non-primary env's draft state into the primary env"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Promote a non-primary env's draft state into the primary env":

Code samples for "Promote a non-primary env's draft state into the primary env":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/promote"

Response example

{ "id": "string", "slug": "string", "publisherSlug": "string", "projectId": "string", "environmentId": "string", "name": "string", "status": "draft", "generation": { "status": "none", "error": "string", "feedback": "string", "startedAt": "2024-01-01T00:00:00Z" }, "appStoreUrl": "https://example.com", "playStoreUrl": "https://example.com", "screenshotUrls": [ { "url": "string", "source": "appStore" } ], "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": "string", "width": 0 } ] }, "thumbnailUrl": "string" }, "livePublication": { "publisherSlug": "string", "slug": "string", "publishedAt": "2024-01-01T00:00:00Z", "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": null, "width": null } ] }, "thumbnailUrl": "string" } }, "environments": [ { "environmentId": "string", "status": "draft", "isPrimary": true, "publishedAt": "2024-01-01T00:00:00Z" } ], "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "draftUpdatedAt": "2024-01-01T00:00:00Z", "theme": {}, "deepLink": {}, "authConfig": {}, "frontendVersion": "string", "warnings": [ "string" ]}

Unpublish webshop configuration


Only the primary environment can be unpublished. Non-primary envs have no publication to reverse and return 409 if attempted. For the primary env, deletes the webshop_publications row and removes the pre-rendered GCS HTML shell. Idempotent — no error if already in draft.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Unpublish webshop configuration"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Unpublish webshop configuration":

Code samples for "Unpublish webshop configuration":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/unpublish"

Response example

{ "id": "string", "slug": "string", "publisherSlug": "string", "projectId": "string", "environmentId": "string", "name": "string", "status": "draft", "generation": { "status": "none", "error": "string", "feedback": "string", "startedAt": "2024-01-01T00:00:00Z" }, "appStoreUrl": "https://example.com", "playStoreUrl": "https://example.com", "screenshotUrls": [ { "url": "string", "source": "appStore" } ], "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": "string", "width": 0 } ] }, "thumbnailUrl": "string" }, "livePublication": { "publisherSlug": "string", "slug": "string", "publishedAt": "2024-01-01T00:00:00Z", "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": null, "width": null } ] }, "thumbnailUrl": "string" } }, "environments": [ { "environmentId": "string", "status": "draft", "isPrimary": true, "publishedAt": "2024-01-01T00:00:00Z" } ], "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "draftUpdatedAt": "2024-01-01T00:00:00Z", "theme": {}, "deepLink": {}, "authConfig": {}, "frontendVersion": "string", "warnings": [ "string" ]}

Check if a (publisher, webshop) slug pair is available for this org


Pre-flight availability check for the dashboard slug editor. HEAD request — answer is fully carried by HTTP status: 200 available, 409 taken, 400 bad format, 500 error. Scoped by organization since publishers are globally-unique but claimed by exactly one org.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Check if a (publisher, webshop) slug pair is available for this org"

organizationId

string
required
Unity organization ID (numeric Genesis ID)

Query parameters for "Check if a (publisher, webshop) slug pair is available for this org"

publisherSlug

string
required
No description

slug

string
Optional webshop slug. Omit to check only whether the publisher is usable by this org. Provide to additionally check that no webshop under that publisher already uses the slug.

HTTP response status codes for "Check if a (publisher, webshop) slug pair is available for this org":

Code samples for "Check if a (publisher, webshop) slug pair is available for this org":

Request example

curl -X HEAD \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/organizations/{organizationId}/webshop/slug-availability"

Response example

{ "type": "string", "title": "string", "status": 0, "detail": "string", "instance": "string", "code": "slug_taken"}

Fetch App Store metadata and screenshots


Scrapes the App Store URL configured on this webshop. Returns game metadata (name, genre, description) and screenshot URLs. Replaces any previously scraped data; user-uploaded screenshots are preserved.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Fetch App Store metadata and screenshots"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Fetch App Store metadata and screenshots":

Code samples for "Fetch App Store metadata and screenshots":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/scrape"

Response example

{ "gameName": "string", "gameDescription": "string", "genre": "string", "developer": "string", "iconUrl": "string", "screenshotUrls": [ { "url": "string", "source": "appStore" } ]}

Upload screenshots for theme generation


Uploads screenshot images to Live Content. CDN URLs are appended to the webshop's screenshotUrls.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Upload screenshots for theme generation"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

Request body for "Upload screenshots for theme generation"

Media Type:
multipart/form-data

screenshots

array[string]
required
Screenshot images to upload. Max 2 MB per file, up to 6 files per request; the total request body must stay under 10 MB.

HTTP response status codes for "Upload screenshots for theme generation":

Code samples for "Upload screenshots for theme generation":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: multipart/form-data" \ -d '{"screenshots":["string"]}' \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/screenshots"

Response example

{ "screenshotUrls": [ { "url": "string", "source": "appStore" } ], "rejected": [ { "fileName": "string", "reason": "tooLarge" } ]}

Delete uploaded screenshots


Removes user-uploaded screenshot files from Live Content and their references from the database. Scraped App Store screenshots are preserved.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Delete uploaded screenshots"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Delete uploaded screenshots":

Code samples for "Delete uploaded screenshots":

Request example

curl -X DELETE \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/screenshots"

Response example

{ "screenshotUrls": [ { "url": "string", "source": "appStore" } ], "rejected": [ { "fileName": "string", "reason": "tooLarge" } ]}

Upload hero banner image


Uploads a hero banner image for the webshop. The image is resized to 1920x384 pixels (5:1) and converted to WebP format. Replaces any existing hero banner.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Upload hero banner image"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

Request body for "Upload hero banner image"

Media Type:
multipart/form-data

banner

string
required
Hero banner image file (PNG, JPEG, or WebP, max 5 MB)

HTTP response status codes for "Upload hero banner image":

Code samples for "Upload hero banner image":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: multipart/form-data" \ -d '{"banner":"string"}' \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/hero-banner"

Response example

{ "id": "string", "slug": "string", "publisherSlug": "string", "projectId": "string", "environmentId": "string", "name": "string", "status": "draft", "generation": { "status": "none", "error": "string", "feedback": "string", "startedAt": "2024-01-01T00:00:00Z" }, "appStoreUrl": "https://example.com", "playStoreUrl": "https://example.com", "screenshotUrls": [ { "url": "string", "source": "appStore" } ], "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": "string", "width": 0 } ] }, "thumbnailUrl": "string" }, "livePublication": { "publisherSlug": "string", "slug": "string", "publishedAt": "2024-01-01T00:00:00Z", "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": null, "width": null } ] }, "thumbnailUrl": "string" } }, "environments": [ { "environmentId": "string", "status": "draft", "isPrimary": true, "publishedAt": "2024-01-01T00:00:00Z" } ], "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "draftUpdatedAt": "2024-01-01T00:00:00Z", "theme": {}, "deepLink": {}, "authConfig": {}, "frontendVersion": "string", "warnings": [ "string" ]}

Delete hero banner


Clears the hero banner image and returns the updated webshop.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Delete hero banner"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Delete hero banner":

Code samples for "Delete hero banner":

Request example

curl -X DELETE \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/hero-banner"

Response example

{ "id": "string", "slug": "string", "publisherSlug": "string", "projectId": "string", "environmentId": "string", "name": "string", "status": "draft", "generation": { "status": "none", "error": "string", "feedback": "string", "startedAt": "2024-01-01T00:00:00Z" }, "appStoreUrl": "https://example.com", "playStoreUrl": "https://example.com", "screenshotUrls": [ { "url": "string", "source": "appStore" } ], "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": "string", "width": 0 } ] }, "thumbnailUrl": "string" }, "livePublication": { "publisherSlug": "string", "slug": "string", "publishedAt": "2024-01-01T00:00:00Z", "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": null, "width": null } ] }, "thumbnailUrl": "string" } }, "environments": [ { "environmentId": "string", "status": "draft", "isPrimary": true, "publishedAt": "2024-01-01T00:00:00Z" } ], "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "draftUpdatedAt": "2024-01-01T00:00:00Z", "theme": {}, "deepLink": {}, "authConfig": {}, "frontendVersion": "string", "warnings": [ "string" ]}

Upload thumbnail image


Uploads a thumbnail image for the webshop. The image is resized to 1200x1200 pixels (square) and converted to WebP format. Replaces any existing thumbnail.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Upload thumbnail image"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

Request body for "Upload thumbnail image"

Media Type:
multipart/form-data

thumbnail

string
required
Thumbnail image file (PNG, JPEG, or WebP, max 5 MB)

HTTP response status codes for "Upload thumbnail image":

Code samples for "Upload thumbnail image":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: multipart/form-data" \ -d '{"thumbnail":"string"}' \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/thumbnail"

Response example

{ "id": "string", "slug": "string", "publisherSlug": "string", "projectId": "string", "environmentId": "string", "name": "string", "status": "draft", "generation": { "status": "none", "error": "string", "feedback": "string", "startedAt": "2024-01-01T00:00:00Z" }, "appStoreUrl": "https://example.com", "playStoreUrl": "https://example.com", "screenshotUrls": [ { "url": "string", "source": "appStore" } ], "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": "string", "width": 0 } ] }, "thumbnailUrl": "string" }, "livePublication": { "publisherSlug": "string", "slug": "string", "publishedAt": "2024-01-01T00:00:00Z", "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": null, "width": null } ] }, "thumbnailUrl": "string" } }, "environments": [ { "environmentId": "string", "status": "draft", "isPrimary": true, "publishedAt": "2024-01-01T00:00:00Z" } ], "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "draftUpdatedAt": "2024-01-01T00:00:00Z", "theme": {}, "deepLink": {}, "authConfig": {}, "frontendVersion": "string", "warnings": [ "string" ]}

Delete thumbnail


Removes the thumbnail image from GCS and clears thumbnail from the draft config.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Delete thumbnail"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Delete thumbnail":

Code samples for "Delete thumbnail":

Request example

curl -X DELETE \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/thumbnail"

Response example

{ "id": "string", "slug": "string", "publisherSlug": "string", "projectId": "string", "environmentId": "string", "name": "string", "status": "draft", "generation": { "status": "none", "error": "string", "feedback": "string", "startedAt": "2024-01-01T00:00:00Z" }, "appStoreUrl": "https://example.com", "playStoreUrl": "https://example.com", "screenshotUrls": [ { "url": "string", "source": "appStore" } ], "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": "string", "width": 0 } ] }, "thumbnailUrl": "string" }, "livePublication": { "publisherSlug": "string", "slug": "string", "publishedAt": "2024-01-01T00:00:00Z", "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": null, "width": null } ] }, "thumbnailUrl": "string" } }, "environments": [ { "environmentId": "string", "status": "draft", "isPrimary": true, "publishedAt": "2024-01-01T00:00:00Z" } ], "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "draftUpdatedAt": "2024-01-01T00:00:00Z", "theme": {}, "deepLink": {}, "authConfig": {}, "frontendVersion": "string", "warnings": [ "string" ]}

Remove the webshop icon


Removes the icon derived from the app-store listing — the logo, logo thumbnail, favicon, and apple-touch-icon — from the webshop branding. The app-store icon reference is also cleared so regenerating the theme does not bring the icon back; other scraped metadata and screenshots are kept, so a fresh theme can still be generated without an icon.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Remove the webshop icon"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Remove the webshop icon":

Code samples for "Remove the webshop icon":

Request example

curl -X DELETE \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/icon"

Response example

{ "id": "string", "slug": "string", "publisherSlug": "string", "projectId": "string", "environmentId": "string", "name": "string", "status": "draft", "generation": { "status": "none", "error": "string", "feedback": "string", "startedAt": "2024-01-01T00:00:00Z" }, "appStoreUrl": "https://example.com", "playStoreUrl": "https://example.com", "screenshotUrls": [ { "url": "string", "source": "appStore" } ], "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": "string", "width": 0 } ] }, "thumbnailUrl": "string" }, "livePublication": { "publisherSlug": "string", "slug": "string", "publishedAt": "2024-01-01T00:00:00Z", "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": null, "width": null } ] }, "thumbnailUrl": "string" } }, "environments": [ { "environmentId": "string", "status": "draft", "isPrimary": true, "publishedAt": "2024-01-01T00:00:00Z" } ], "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "draftUpdatedAt": "2024-01-01T00:00:00Z", "theme": {}, "deepLink": {}, "authConfig": {}, "frontendVersion": "string", "warnings": [ "string" ]}

Trigger AI theme generation


Starts async theme generation from scraped assets and screenshots. Poll GET /webshop to check generation.status for completion.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Trigger AI theme generation"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

Request body for "Trigger AI theme generation"

Media Type:
application/json

feedback

string
Optional feedback for iterative theme refinement.

HTTP response status codes for "Trigger AI theme generation":

Code samples for "Trigger AI theme generation":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "feedback": "string"}' \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/generate-theme"

Response example

{ "generationStatus": "pending"}

Reset theme and generation state


Clears the theme from draft config and resets generation status, allowing regeneration.
deepLink
and
frontendVersion
are preserved in every scope.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Reset theme and generation state"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

Query parameters for "Reset theme and generation state"

scope

string
default: styles
What to clear.
styles
(default) clears the theme only — branding, screenshots, and scrape data are preserved for reuse on the next generation.
all
additionally clears uploaded branding, screenshots, and scraped App Store metadata so the next generation starts from a clean slate.

HTTP response status codes for "Reset theme and generation state":

Code samples for "Reset theme and generation state":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/reset-theme"

Response example

{ "id": "string", "slug": "string", "publisherSlug": "string", "projectId": "string", "environmentId": "string", "name": "string", "status": "draft", "generation": { "status": "none", "error": "string", "feedback": "string", "startedAt": "2024-01-01T00:00:00Z" }, "appStoreUrl": "https://example.com", "playStoreUrl": "https://example.com", "screenshotUrls": [ { "url": "string", "source": "appStore" } ], "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": "string", "width": 0 } ] }, "thumbnailUrl": "string" }, "livePublication": { "publisherSlug": "string", "slug": "string", "publishedAt": "2024-01-01T00:00:00Z", "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": null, "width": null } ] }, "thumbnailUrl": "string" } }, "environments": [ { "environmentId": "string", "status": "draft", "isPrimary": true, "publishedAt": "2024-01-01T00:00:00Z" } ], "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "draftUpdatedAt": "2024-01-01T00:00:00Z", "theme": {}, "deepLink": {}, "authConfig": {}, "frontendVersion": "string", "warnings": [ "string" ]}

Cancel an in-flight theme generation


Signals the background theme-generation job for this environment to stop. The webshop's
generation.status
flips to
cancelled
asynchronously once the queue confirms cancellation; the response body reflects the env state at the moment the cancel was accepted.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Cancel an in-flight theme generation"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Cancel an in-flight theme generation":

Code samples for "Cancel an in-flight theme generation":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/cancel-theme-generation"

Response example

{ "id": "string", "slug": "string", "publisherSlug": "string", "projectId": "string", "environmentId": "string", "name": "string", "status": "draft", "generation": { "status": "none", "error": "string", "feedback": "string", "startedAt": "2024-01-01T00:00:00Z" }, "appStoreUrl": "https://example.com", "playStoreUrl": "https://example.com", "screenshotUrls": [ { "url": "string", "source": "appStore" } ], "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": "string", "width": 0 } ] }, "thumbnailUrl": "string" }, "livePublication": { "publisherSlug": "string", "slug": "string", "publishedAt": "2024-01-01T00:00:00Z", "brandingUrls": { "logoUrl": "string", "logoThumbUrl": "string", "faviconUrl": "string", "appleTouchIconUrl": "string", "heroBanner": { "url": "string", "enabled": true, "effects": { "glow": "string", "borderStyle": "none", "borderColor": "string", "borderWidth": "string" }, "sources": [ { "url": null, "width": null } ] }, "thumbnailUrl": "string" } }, "environments": [ { "environmentId": "string", "status": "draft", "isPrimary": true, "publishedAt": "2024-01-01T00:00:00Z" } ], "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "draftUpdatedAt": "2024-01-01T00:00:00Z", "theme": {}, "deepLink": {}, "authConfig": {}, "frontendVersion": "string", "warnings": [ "string" ]}

Refine the draft theme from natural-language feedback


Starts an asynchronous agent turn that edits the draft theme to satisfy the supplied feedback. Poll GET /webshop/refine/turns/{turnId} for the resulting theme edit receipt.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Refine the draft theme from natural-language feedback"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

Request body for "Refine the draft theme from natural-language feedback"

Media Type:
application/json

feedback

string
required
Natural-language description of the change to make to the theme.

HTTP response status codes for "Refine the draft theme from natural-language feedback":

Code samples for "Refine the draft theme from natural-language feedback":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "feedback": "string"}' \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/refine"

Response example

{ "turnId": "string"}

Get the status of a theme-refine turn


Returns the status of a refine turn and, once complete, the resulting theme edit receipt.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Get the status of a theme-refine turn"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

turnId

string
required
The refine turn to look up.

HTTP response status codes for "Get the status of a theme-refine turn":

Code samples for "Get the status of a theme-refine turn":

Request example

curl -X GET \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/refine/turns/{turnId}"

Response example

{ "turnId": "string", "status": "pending", "receipt": { "theme": { "colors": { "background": "string", "foreground": "string", "card": "string", "cardText": "string", "mutedText": "string", "primary": "string", "primaryText": "string", "border": "string", "bonusBadge": "string", "bonusBadgeText": "string", "saleBadge": "string", "saleBadgeText": "string", "salePrice": "string", "limitedBadge": "string", "limitedBadgeText": "string", "categoryActive": "string", "categoryActiveText": "string", "categoryInactiveText": "string" }, "typography": { "fontFamily": "string", "fontFamilyHeading": "string", "googleFontsUrl": null }, "radius": "string", "motion": { "intensity": "playful", "reducedMotion": false }, "zones": { "page": { "backgroundImage": "string" }, "header": { "glow": "string", "backgroundGradient": "string", "borderGlow": "string" }, "heroBanner": { "overlay": "string" }, "productCard": { "shape": "rounded", "layout": "detailed", "borderStyle": "solid", "glow": "string", "flashStyle": "pulse", "image": { "background": null, "display": null, "ratio": null, "padding": null, "backdrop": null } }, "particles": { "effect": "none", "zone": "fullPage" } } }, "snapshotId": "string", "previewUrl": "string", "changes": [ { "path": "string", "section": "string", "kind": "color", "before": "string", "after": "string" } ] }, "error": "string"}

Get the active theme-chat session and recent messages


Returns the active conversation along with its most recent messages.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Get the active theme-chat session and recent messages"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Get the active theme-chat session and recent messages":

Code samples for "Get the active theme-chat session and recent messages":

Request example

curl -X GET \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/theme-chat/session"

Response example

{ "session": { "id": "string", "status": "active", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" }, "messages": [ { "id": "string", "seq": 0, "role": "user", "kind": "message", "content": {}, "status": "final", "createdAt": "2024-01-01T00:00:00Z" } ]}

Open or resume the theme-chat session


Returns the environment's active theme-chat conversation, starting a new one if none is open.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Open or resume the theme-chat session"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Open or resume the theme-chat session":

Code samples for "Open or resume the theme-chat session":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/theme-chat/session"

Response example

{ "id": "string", "status": "active", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z"}

Send a message to the theme-chat session


Sends a natural-language message and starts processing the resulting turn, returning ids to track it.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Send a message to the theme-chat session"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

Request body for "Send a message to the theme-chat session"

Media Type:
application/json

text

string
required
The user's natural-language message.

HTTP response status codes for "Send a message to the theme-chat session":

Code samples for "Send a message to the theme-chat session":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "text": "string"}' \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/theme-chat/messages"

Response example

{ "messageId": "string", "turnId": "string"}

Stream theme-chat events (Server-Sent Events)


Streams session events as they occur, resuming from the optional since_seq cursor.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Stream theme-chat events (Server-Sent Events)"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

Query parameters for "Stream theme-chat events (Server-Sent Events)"

since_seq

integer
Resume cursor — only events after this sequence are delivered.

HTTP response status codes for "Stream theme-chat events (Server-Sent Events)":

Code samples for "Stream theme-chat events (Server-Sent Events)":

Request example

curl -X GET \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/theme-chat/stream"

Response example

"string"

Cancel an in-progress theme-chat turn


Requests cancellation of a turn that is still being processed.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Cancel an in-progress theme-chat turn"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

Request body for "Cancel an in-progress theme-chat turn"

Media Type:
application/json

turnId

string
required
The in-progress turn to cancel.

HTTP response status codes for "Cancel an in-progress theme-chat turn":

Code samples for "Cancel an in-progress theme-chat turn":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "turnId": "string"}' \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/theme-chat/cancel"

Response example

{ "type": "string", "title": "string", "status": 0, "detail": "string", "instance": "string", "code": "slug_taken"}

Submit thumbs-up/down feedback on a theme-chat turn


Records a human rating of a completed turn as a quality signal. The rating is stored for reporting and does not change the theme.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Submit thumbs-up/down feedback on a theme-chat turn"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

turnId

string
required
The chat turn being rated.

Request body for "Submit thumbs-up/down feedback on a theme-chat turn"

Media Type:
application/json

value

string
required
The rating — "up" for thumbs-up, "down" for thumbs-down.

HTTP response status codes for "Submit thumbs-up/down feedback on a theme-chat turn":

Code samples for "Submit thumbs-up/down feedback on a theme-chat turn":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "value": "up"}' \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/theme-chat/turns/{turnId}/feedback"

Response example

{ "type": "string", "title": "string", "status": 0, "detail": "string", "instance": "string", "code": "slug_taken"}

Approve or reject a proposed theme-chat plan


Resolves a plan the assistant proposed for a larger change. Approving starts a new turn that applies it.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Approve or reject a proposed theme-chat plan"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

Request body for "Approve or reject a proposed theme-chat plan"

Media Type:
application/json

messageId

string
required
The proposed-plan message to resolve.

approved

boolean
required
True to apply the plan, false to reject it.

edits

object
Optional overrides applied to the plan before it executes on approval.

intent

string
No description

touchedFields

array[string]
No description

expectedOutcome

string
No description

HTTP response status codes for "Approve or reject a proposed theme-chat plan":

Code samples for "Approve or reject a proposed theme-chat plan":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "messageId": "string", "approved": true, "edits": { "intent": "string", "touchedFields": [ "string" ], "expectedOutcome": "string" }}' \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/theme-chat/approve-plan"

Response example

{ "turnId": "string"}

Archive the active theme-chat session


Ends the active conversation. The next message starts a fresh one.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Archive the active theme-chat session"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Archive the active theme-chat session":

Code samples for "Archive the active theme-chat session":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/theme-chat/archive"

Response example

{ "type": "string", "title": "string", "status": 0, "detail": "string", "instance": "string", "code": "slug_taken"}

Restore a theme snapshot within the chat session


Reverts the draft theme to an earlier snapshot and records it in the conversation. Returns the resulting theme edit receipt.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Restore a theme snapshot within the chat session"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

Request body for "Restore a theme snapshot within the chat session"

Media Type:
application/json

snapshotId

string
required
The snapshot to restore the draft theme to.

HTTP response status codes for "Restore a theme snapshot within the chat session":

Code samples for "Restore a theme snapshot within the chat session":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "snapshotId": "string"}' \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/theme-chat/snapshots/restore"

Response example

{ "theme": { "colors": { "background": "string", "foreground": "string", "card": "string", "cardText": "string", "mutedText": "string", "primary": "string", "primaryText": "string", "border": "string", "bonusBadge": "string", "bonusBadgeText": "string", "saleBadge": "string", "saleBadgeText": "string", "salePrice": "string", "limitedBadge": "string", "limitedBadgeText": "string", "categoryActive": "string", "categoryActiveText": "string", "categoryInactiveText": "string" }, "typography": { "fontFamily": "string", "fontFamilyHeading": "string", "googleFontsUrl": null }, "radius": "string", "motion": { "intensity": "playful", "reducedMotion": false }, "zones": { "page": { "backgroundImage": "string" }, "header": { "glow": "string", "backgroundGradient": "string", "borderGlow": "string" }, "heroBanner": { "overlay": "string" }, "productCard": { "shape": "rounded", "layout": "detailed", "borderStyle": "solid", "glow": "string", "flashStyle": "pulse", "image": { "background": "string", "display": "contain", "ratio": "1:1", "padding": "string", "backdrop": "off" } }, "particles": { "effect": "none", "zone": "fullPage" } } }, "snapshotId": "string", "previewUrl": "string", "changes": [ { "path": "string", "section": "string", "kind": "color", "before": "string", "after": "string" } ]}

Generate a preview URL with HMAC token


Generates an HMAC-signed preview token that unlocks draft config access. Token is valid for 72 hours. Requires admin auth.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Generate a preview URL with HMAC token"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

Request body for "Generate a preview URL with HMAC token"

Media Type:
application/json

environmentName

string
Environment name (e.g., "production", "staging") embedded in the preview token for anonymous player auth scoping. Defaults to "production" if omitted.

HTTP response status codes for "Generate a preview URL with HMAC token":

Code samples for "Generate a preview URL with HMAC token":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "environmentName": "string"}' \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/preview-token"

Response example

{ "url": "string", "expiresAt": "2024-01-01T00:00:00Z"}

Read payment-provider routing config for this environment


Returns the current payment-provider routing configuration for this environment, or an empty default if none has been set.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Read payment-provider routing config for this environment"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Read payment-provider routing config for this environment":

Code samples for "Read payment-provider routing config for this environment":

Request example

curl -X GET \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/payment-provider/configuration"

Response example

{ "providerRouting": {}, "fallbackProvider": "string"}

Replace payment-provider routing config for this environment


Overwrites the payment-provider routing configuration for this environment. Partial updates are not supported; the full configuration in the request body replaces any existing one.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Replace payment-provider routing config for this environment"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

Request body for "Replace payment-provider routing config for this environment"

Media Type:
application/json

providerRouting

object
required
Map of tag -> ordered provider names. The first provider in each list that is available wins for that tag.

fallbackProvider

string
Fallback provider name used when no tag matches. The field name mirrors the IAP transaction-verifier's existing routing-config shape — the value is a payment provider name, not a webshop identifier.

HTTP response status codes for "Replace payment-provider routing config for this environment":

Code samples for "Replace payment-provider routing config for this environment":

Request example

curl -X PUT \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "providerRouting": {}, "fallbackProvider": "string"}' \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/payment-provider/configuration"

Response example

{ "providerRouting": {}, "fallbackProvider": "string"}

Reset payment-provider routing config for this environment


Removes the payment-provider routing configuration for this environment. Idempotent — returns 204 whether or not a configuration existed.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Reset payment-provider routing config for this environment"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Reset payment-provider routing config for this environment":

Code samples for "Reset payment-provider routing config for this environment":

Request example

curl -X DELETE \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/payment-provider/configuration"

Response example

{ "type": "string", "title": "string", "status": 0, "detail": "string", "instance": "string", "code": "slug_taken"}

Deactivate an environment for the webshop


Deactivates a non-primary environment. If the environment was published, its published content is taken offline. Cannot deactivate the primary environment — returns 400. Path convention: every environment-scoped operation lives under the
…/environments/{environmentId}/webshop/…
prefix (this delete included). The
…/webshop/environments
create/list collection is the one deliberate exception, since it has no environment in the path.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Deactivate an environment for the webshop"

projectId

string
required
Genesis ID of the project

environmentId

string
required
Genesis ID of the environment

HTTP response status codes for "Deactivate an environment for the webshop":

Code samples for "Deactivate an environment for the webshop":

Request example

curl -X DELETE \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/environments/{environmentId}/webshop/environment"

Response example

{ "type": "string", "title": "string", "status": 0, "detail": "string", "instance": "string", "code": "slug_taken"}

List active environments


Returns all activated environments and their statuses for the project's webshop.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "List active environments"

projectId

string
required
Genesis ID of the project

HTTP response status codes for "List active environments":

Code samples for "List active environments":

Request example

curl -X GET \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/webshop/environments"

Response example

{ "environments": [ { "environmentId": "string", "status": "draft", "isPrimary": true, "publishedAt": "2024-01-01T00:00:00Z" } ]}

Activate a new environment


Adds a new environment to the webshop (max 25 per webshop). Starts with status=draft.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Activate a new environment"

projectId

string
required
Genesis ID of the project

Request body for "Activate a new environment"

Media Type:
application/json

environmentId

string
required
The environment ID to activate

HTTP response status codes for "Activate a new environment":

Code samples for "Activate a new environment":

Request example

curl -X POST \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "environmentId": "string"}' \ "https://services.unity.com/api/webshop/v1/projects/{projectId}/webshop/environments"

Response example

{ "environmentId": "string", "status": "draft", "isPrimary": true, "publishedAt": "2024-01-01T00:00:00Z"}

List webshops for an organization


Returns webshops under publishers claimed by this organization. Supports cursor-based pagination and optional status/projectId filters.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "List webshops for an organization"

organizationId

string
required
Unity organization ID (numeric Genesis ID)

Query parameters for "List webshops for an organization"

limit

integer
default: 20
Maximum number of results per page

after

string
Opaque cursor token from a previous response's next field

status

Filter by publication status

projectId

string
Filter by Unity project ID

HTTP response status codes for "List webshops for an organization":

Code samples for "List webshops for an organization":

Request example

curl -X GET \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/organizations/{organizationId}/webshops"

Response example

{ "webshops": [ { "id": "string", "slug": "string", "publisherSlug": "string", "projectId": "string", "environmentId": "string", "name": "string", "status": "draft", "publishedAt": "2024-01-01T00:00:00Z", "generation": { "status": "none", "error": "string", "feedback": "string", "startedAt": "2024-01-01T00:00:00Z" }, "logoUrl": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "draftUpdatedAt": "2024-01-01T00:00:00Z" } ], "next": "string"}

Rename an organization's publisher


Renames the publisher slug for the organization. Every published webshop owned by the publisher is republished at the new path; the response carries per-webshop relocation status so callers can retry any that didn't fully relocate.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

Path parameters for "Rename an organization's publisher"

organizationId

string
required
Unity organization ID (numeric Genesis ID)

Request body for "Rename an organization's publisher"

Media Type:
application/json

from

string
required
Current publisher slug. 404 if it doesn't match.

to

string
required
New publisher slug. Must be globally unused.

HTTP response status codes for "Rename an organization's publisher":

Code samples for "Rename an organization's publisher":

Request example

curl -X PATCH \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "from": "string", "to": "string"}' \ "https://services.unity.com/api/webshop/v1/organizations/{organizationId}/publisher"

Response example

{ "publisherSlug": "string", "relocations": [ { "webshopId": "string", "slug": "string", "status": "relocated", "error": "string" } ]}

List available frontend bundle versions


Returns the frontend bundle versions available for pinning on a webshop. The sentinel
latest
is always included as the first entry and resolves to the most recently deployed bundle. Authenticated but not authorization-scoped — the response is global and identical for every dashboard caller, so per-resource permissioning would be noise.
Authorizations
User
HTTP: User
HTTP Authorization Scheme: bearer

HTTP response status codes for "List available frontend bundle versions":

Code samples for "List available frontend bundle versions":

Request example

curl -X GET \ -H "Authorization: Bearer <YOUR_TOKEN>" \ "https://services.unity.com/api/webshop/v1/frontend-versions"

Response example

{ "versions": [ { "version": "1.2.0" } ]}

Copyright © 2026 Unity Technologies
LegalPrivacy PolicyCookiesDocumentation Terms of UseDo Not Sell or Share My Personal InformationYour Privacy Choices (Cookie Settings)

"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S and elsewhere (more info here). Other names or brands are trademarks of their respective owners.

Some pages are machine-translated for convenience, and may contain inaccuracies. In the event of conflicting information, the English version is authoritative.