{ "openapi": "3.0.0", "info": { "title": "GenStudio API", "description": "API for Adobe GenStudio for Performance Marketing users to retrieve approved GenStudio experiences.\n\n**Experimental API**: These endpoints are experimental and require the `X-Adobe-Accept-Experimental: 1` header on every request. Requests without this header will receive a `400 Bad Request` response. This header signals that the consumer acknowledges the experimental nature of these APIs and that breaking changes may occur without prior notice. Note: this header requirement is temporary and will be removed once the API graduates to stable.", "version": "20260716T203203Z", "license": { "name": "Adobe Proprietary", "url": "https://www.adobe.com/legal/terms.html" } }, "components": { "schemas": { "ChannelInput": { "type": "string", "enum": [ "email", "meta", "meta_organic", "display", "ctv", "linkedin", "linkedin_organic", "tiktok", "chatgpt", "youtube" ] }, "AssetReference": { "type": "object", "properties": { "assetId": { "description": "The raw composite asset identifier. Uniquely identifies the asset across GenStudio organizations. For assets that originate in a different GenStudio organization than the experience, use this value to look up or retrieve the asset directly.", "type": "string" }, "url": { "description": "The asset URL. For same-organization assets (proxied through this API and token-backed), this will be a pre-signed download URL. For cross-organization assets (typical for email and display channel experiences), this will be a best-effort direct delivery URL with no embedded token. For publicly accessible assets only. May return 401/403 for private assets; use assetId to retrieve those independently. Absent when the asset reference is a bare URN with no delivery host information.", "type": "string", "format": "uri" }, "mimeType": { "type": "string" } }, "additionalProperties": false }, "VariantAsset": { "type": "object", "properties": { "assetId": { "description": "The raw composite asset identifier. Uniquely identifies the asset across GenStudio organizations. For assets that originate in a different GenStudio organization than the experience, use this value to look up or retrieve the asset directly.", "type": "string" }, "url": { "description": "The asset URL. For same-organization assets (proxied through this API and token-backed), this will be a pre-signed download URL. For cross-organization assets (typical for email and display channel experiences), this will be a best-effort direct delivery URL with no embedded token. For publicly accessible assets only. May return 401/403 for private assets; use assetId to retrieve those independently. Absent when the asset reference is a bare URN with no delivery host information.", "type": "string", "format": "uri" }, "mimeType": { "type": "string" }, "fieldReference": { "type": "string" }, "altText": { "type": "string" } }, "required": ["fieldReference"], "additionalProperties": false }, "Channel": { "type": "string", "enum": [ "email", "meta", "meta_organic", "display", "ctv", "linkedin", "linkedin_organic", "tiktok", "chatgpt", "youtube" ] }, "FieldValue": { "type": "object", "properties": { "value": { "type": "string" } }, "required": ["value"], "additionalProperties": false }, "EmailExperience": { "type": "object", "properties": { "experienceId": { "type": "string", "description": "Unique identifier of the experience" }, "createdAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 timestamp when the experience was created" }, "modifiedAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 timestamp when the experience was last modified" }, "title": { "type": "string", "description": "Title of the experience" }, "channel": { "type": "string", "enum": ["email"] }, "externalTemplateSource": { "description": "Source application name for the external template", "type": "string" }, "externalTemplateId": { "description": "ID of the external template", "type": "string" }, "externalTemplateMetadata": { "description": "Parsed metadata from the external template used to generate this experience", "type": "object", "additionalProperties": {} }, "externalAssetMetadata": { "description": "Parsed metadata from an external asset associated with this experience", "type": "object", "additionalProperties": {} }, "keywords": { "type": "array", "items": { "type": "string" }, "description": "Keywords associated with the experience" }, "brands": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }, "description": "Brands associated with the experience" }, "personas": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }, "description": "Personas associated with the experience" }, "products": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }, "description": "Products associated with the experience" }, "campaigns": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }, "description": "Campaigns associated with the experience" }, "languages": { "type": "array", "items": { "type": "string" }, "description": "BCP 47 language tags for the experience content" }, "templateId": { "description": "Asset URN of the template this experience was generated from. Absent when no template can be resolved.", "type": "string" }, "templateMetadata": { "description": "Parsed metadata for the template identified by templateId. Absent when the template cannot be found.", "type": "object", "properties": { "channel": { "description": "Primary distribution channel the template was authored for.", "type": "string" }, "title": { "description": "Template title.", "type": "string" }, "keywords": { "description": "Subject/keyword tags associated with the template.", "type": "array", "items": { "type": "string" } }, "createDate": { "description": "Template creation timestamp (epoch seconds).", "type": "number" }, "genstudioFieldData": { "description": "Field/pod configuration for the template, parsed from JSON when possible.", "anyOf": [ { "type": "object", "additionalProperties": {} }, { "type": "string" } ] }, "isHTML5Template": { "description": "Whether the template is an HTML5 template.", "type": "boolean" }, "smartTags": { "description": "Machine-generated smart tags for the template.", "type": "array", "items": { "type": "string" } } }, "additionalProperties": false }, "variants": { "type": "array", "items": { "type": "object", "properties": { "aspectRatio": { "type": "string" }, "isMain": { "type": "boolean" }, "asset": { "allOf": [ { "$ref": "#/components/schemas/AssetReference" } ] }, "fields": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/FieldValue" } }, "assets": { "type": "array", "items": { "$ref": "#/components/schemas/VariantAsset" } }, "sections": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" }, "fields": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/FieldValue" } }, "assets": { "type": "array", "items": { "$ref": "#/components/schemas/VariantAsset" } } }, "required": ["name", "fields"], "additionalProperties": false } } }, "required": ["isMain", "fields"], "additionalProperties": false } } }, "required": [ "experienceId", "createdAt", "modifiedAt", "title", "channel", "keywords", "brands", "personas", "products", "campaigns", "languages", "variants" ], "additionalProperties": false }, "DisplayExperience": { "type": "object", "properties": { "experienceId": { "type": "string", "description": "Unique identifier of the experience" }, "createdAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 timestamp when the experience was created" }, "modifiedAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 timestamp when the experience was last modified" }, "title": { "type": "string", "description": "Title of the experience" }, "channel": { "type": "string", "enum": ["display"] }, "externalTemplateSource": { "description": "Source application name for the external template", "type": "string" }, "externalTemplateId": { "description": "ID of the external template", "type": "string" }, "externalTemplateMetadata": { "description": "Parsed metadata from the external template used to generate this experience", "type": "object", "additionalProperties": {} }, "externalAssetMetadata": { "description": "Parsed metadata from an external asset associated with this experience", "type": "object", "additionalProperties": {} }, "keywords": { "type": "array", "items": { "type": "string" }, "description": "Keywords associated with the experience" }, "brands": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }, "description": "Brands associated with the experience" }, "personas": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }, "description": "Personas associated with the experience" }, "products": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }, "description": "Products associated with the experience" }, "campaigns": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }, "description": "Campaigns associated with the experience" }, "languages": { "type": "array", "items": { "type": "string" }, "description": "BCP 47 language tags for the experience content" }, "templateId": { "description": "Asset URN of the template this experience was generated from. Absent when no template can be resolved.", "type": "string" }, "templateMetadata": { "description": "Parsed metadata for the template identified by templateId. Absent when the template cannot be found.", "type": "object", "properties": { "channel": { "description": "Primary distribution channel the template was authored for.", "type": "string" }, "title": { "description": "Template title.", "type": "string" }, "keywords": { "description": "Subject/keyword tags associated with the template.", "type": "array", "items": { "type": "string" } }, "createDate": { "description": "Template creation timestamp (epoch seconds).", "type": "number" }, "genstudioFieldData": { "description": "Field/pod configuration for the template, parsed from JSON when possible.", "anyOf": [ { "type": "object", "additionalProperties": {} }, { "type": "string" } ] }, "isHTML5Template": { "description": "Whether the template is an HTML5 template.", "type": "boolean" }, "smartTags": { "description": "Machine-generated smart tags for the template.", "type": "array", "items": { "type": "string" } } }, "additionalProperties": false }, "variants": { "type": "array", "items": { "type": "object", "properties": { "aspectRatio": { "type": "string" }, "isMain": { "type": "boolean" }, "asset": { "allOf": [ { "$ref": "#/components/schemas/AssetReference" } ] }, "fields": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/FieldValue" } }, "assets": { "type": "array", "items": { "$ref": "#/components/schemas/VariantAsset" } }, "sections": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" }, "fields": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/FieldValue" } }, "assets": { "type": "array", "items": { "$ref": "#/components/schemas/VariantAsset" } } }, "required": ["name", "fields"], "additionalProperties": false } } }, "required": ["isMain", "fields"], "additionalProperties": false } } }, "required": [ "experienceId", "createdAt", "modifiedAt", "title", "channel", "keywords", "brands", "personas", "products", "campaigns", "languages", "variants" ], "additionalProperties": false }, "GenericExperience": { "type": "object", "properties": { "experienceId": { "type": "string", "description": "Unique identifier of the experience" }, "createdAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 timestamp when the experience was created" }, "modifiedAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 timestamp when the experience was last modified" }, "title": { "type": "string", "description": "Title of the experience" }, "channel": { "$ref": "#/components/schemas/Channel" }, "externalTemplateSource": { "description": "Source application name for the external template", "type": "string" }, "externalTemplateId": { "description": "ID of the external template", "type": "string" }, "externalTemplateMetadata": { "description": "Parsed metadata from the external template used to generate this experience", "type": "object", "additionalProperties": {} }, "externalAssetMetadata": { "description": "Parsed metadata from an external asset associated with this experience", "type": "object", "additionalProperties": {} }, "keywords": { "type": "array", "items": { "type": "string" }, "description": "Keywords associated with the experience" }, "brands": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }, "description": "Brands associated with the experience" }, "personas": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }, "description": "Personas associated with the experience" }, "products": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }, "description": "Products associated with the experience" }, "campaigns": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }, "description": "Campaigns associated with the experience" }, "languages": { "type": "array", "items": { "type": "string" }, "description": "BCP 47 language tags for the experience content" }, "templateId": { "description": "Asset URN of the template this experience was generated from. Absent when no template can be resolved.", "type": "string" }, "templateMetadata": { "description": "Parsed metadata for the template identified by templateId. Absent when the template cannot be found.", "type": "object", "properties": { "channel": { "description": "Primary distribution channel the template was authored for.", "type": "string" }, "title": { "description": "Template title.", "type": "string" }, "keywords": { "description": "Subject/keyword tags associated with the template.", "type": "array", "items": { "type": "string" } }, "createDate": { "description": "Template creation timestamp (epoch seconds).", "type": "number" }, "genstudioFieldData": { "description": "Field/pod configuration for the template, parsed from JSON when possible.", "anyOf": [ { "type": "object", "additionalProperties": {} }, { "type": "string" } ] }, "isHTML5Template": { "description": "Whether the template is an HTML5 template.", "type": "boolean" }, "smartTags": { "description": "Machine-generated smart tags for the template.", "type": "array", "items": { "type": "string" } } }, "additionalProperties": false }, "variants": { "type": "array", "items": { "type": "object", "properties": { "aspectRatio": { "type": "string" }, "isMain": { "type": "boolean" }, "asset": { "allOf": [ { "$ref": "#/components/schemas/AssetReference" } ] }, "fields": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/FieldValue" } }, "assets": { "type": "array", "items": { "$ref": "#/components/schemas/VariantAsset" } } }, "required": ["isMain", "fields"], "additionalProperties": false } } }, "required": [ "experienceId", "createdAt", "modifiedAt", "title", "channel", "keywords", "brands", "personas", "products", "campaigns", "languages", "variants" ], "additionalProperties": false }, "Unauthorized": { "type": "object", "properties": { "type": { "type": "string", "minLength": 1, "description": "A URI reference [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) to a URL, which, when dereferenced, provides human readable documentation for the problem type. The problem type may be equivalent to the `status` or may be a \"sub-type\". This URI is not intended to be parsed by clients; rather it should be treated as an opaque string that uniquely represents the error condition as-is." }, "title": { "type": "string", "minLength": 1, "description": "A short, human-readable summary of the problem type." }, "status": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991, "description": "The HTTP status code ([RFC9110], Section 15) generated by the origin server for this occurrence of the problem." }, "detail": { "type": "string", "minLength": 1, "description": "A human-readable explanation specific to this occurrence of the problem." }, "requestId": { "description": "A unique identifier that is assigned to the request, either by the API caller or by the service itself.", "type": "string", "minLength": 1 } }, "required": ["type", "title", "status", "detail"], "additionalProperties": false, "description": "Unauthorized. Indicates that the request has not been applied because it lacks valid authentication credentials for the target resource." }, "Forbidden": { "type": "object", "properties": { "type": { "type": "string", "minLength": 1, "description": "A URI reference [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) to a URL, which, when dereferenced, provides human readable documentation for the problem type. The problem type may be equivalent to the `status` or may be a \"sub-type\". This URI is not intended to be parsed by clients; rather it should be treated as an opaque string that uniquely represents the error condition as-is." }, "title": { "type": "string", "minLength": 1, "description": "A short, human-readable summary of the problem type." }, "status": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991, "description": "The HTTP status code ([RFC9110], Section 15) generated by the origin server for this occurrence of the problem." }, "detail": { "type": "string", "minLength": 1, "description": "A human-readable explanation specific to this occurrence of the problem." }, "requestId": { "description": "A unique identifier that is assigned to the request, either by the API caller or by the service itself.", "type": "string", "minLength": 1 } }, "required": ["type", "title", "status", "detail"], "additionalProperties": false, "description": "Forbidden. Indicates that the server understood the request but refuses to fulfil it." }, "NotFound": { "type": "object", "properties": { "type": { "type": "string", "minLength": 1, "description": "A URI reference [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) to a URL, which, when dereferenced, provides human readable documentation for the problem type. The problem type may be equivalent to the `status` or may be a \"sub-type\". This URI is not intended to be parsed by clients; rather it should be treated as an opaque string that uniquely represents the error condition as-is." }, "title": { "type": "string", "minLength": 1, "description": "A short, human-readable summary of the problem type." }, "status": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991, "description": "The HTTP status code ([RFC9110], Section 15) generated by the origin server for this occurrence of the problem." }, "detail": { "type": "string", "minLength": 1, "description": "A human-readable explanation specific to this occurrence of the problem." }, "requestId": { "description": "A unique identifier that is assigned to the request, either by the API caller or by the service itself.", "type": "string", "minLength": 1 } }, "required": ["type", "title", "status", "detail"], "additionalProperties": false, "description": "Not Found. Indicates that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists." }, "NotAcceptable": { "type": "object", "properties": { "type": { "type": "string", "minLength": 1, "description": "A URI reference [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) to a URL, which, when dereferenced, provides human readable documentation for the problem type. The problem type may be equivalent to the `status` or may be a \"sub-type\". This URI is not intended to be parsed by clients; rather it should be treated as an opaque string that uniquely represents the error condition as-is." }, "title": { "type": "string", "minLength": 1, "description": "A short, human-readable summary of the problem type." }, "status": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991, "description": "The HTTP status code ([RFC9110], Section 15) generated by the origin server for this occurrence of the problem." }, "detail": { "type": "string", "minLength": 1, "description": "A human-readable explanation specific to this occurrence of the problem." }, "requestId": { "description": "A unique identifier that is assigned to the request, either by the API caller or by the service itself.", "type": "string", "minLength": 1 } }, "required": ["type", "title", "status", "detail"], "additionalProperties": false, "description": "Not Acceptable. Indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request." }, "TooManyRequests": { "type": "object", "properties": { "type": { "type": "string", "minLength": 1, "description": "A URI reference [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) to a URL, which, when dereferenced, provides human readable documentation for the problem type. The problem type may be equivalent to the `status` or may be a \"sub-type\". This URI is not intended to be parsed by clients; rather it should be treated as an opaque string that uniquely represents the error condition as-is." }, "title": { "type": "string", "minLength": 1, "description": "A short, human-readable summary of the problem type." }, "status": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991, "description": "The HTTP status code ([RFC9110], Section 15) generated by the origin server for this occurrence of the problem." }, "detail": { "type": "string", "minLength": 1, "description": "A human-readable explanation specific to this occurrence of the problem." }, "requestId": { "description": "A unique identifier that is assigned to the request, either by the API caller or by the service itself.", "type": "string", "minLength": 1 } }, "required": ["type", "title", "status", "detail"], "additionalProperties": false, "description": "Too Many Requests. Indicates that the user has sent too many requests in a given amount of time (\"rate limiting\")." }, "ServiceUnavailable": { "type": "object", "properties": { "type": { "type": "string", "minLength": 1, "description": "A URI reference [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) to a URL, which, when dereferenced, provides human readable documentation for the problem type. The problem type may be equivalent to the `status` or may be a \"sub-type\". This URI is not intended to be parsed by clients; rather it should be treated as an opaque string that uniquely represents the error condition as-is." }, "title": { "type": "string", "minLength": 1, "description": "A short, human-readable summary of the problem type." }, "status": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991, "description": "The HTTP status code ([RFC9110], Section 15) generated by the origin server for this occurrence of the problem." }, "detail": { "type": "string", "minLength": 1, "description": "A human-readable explanation specific to this occurrence of the problem." }, "requestId": { "description": "A unique identifier that is assigned to the request, either by the API caller or by the service itself.", "type": "string", "minLength": 1 } }, "required": ["type", "title", "status", "detail"], "additionalProperties": false, "description": "Service Unavailable. Indicates that the server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay." } }, "securitySchemes": { "OAuth2": { "type": "oauth2", "flows": { "clientCredentials": { "tokenUrl": "https://ims-na1.adobelogin.com/ims/token/v3", "scopes": {} } } }, "ApiKey": { "type": "apiKey", "in": "header", "name": "x-api-key" } } }, "paths": { "/experiences/{experienceId}": { "get": { "operationId": "getExperience", "summary": "Get Experience", "description": "Retrieves a single experience by ID, including all fields, variants, and asset URLs.\n\nSupports conditional requests via the `If-None-Match` header. If the provided ETag matches, returns `304 Not Modified` with no body.\n\n**Backward compatibility**: New optional fields may be added to the response at any time. Clients must tolerate unknown properties.\n\n**Rate limit**: 60 requests per minute per organization.", "parameters": [ { "schema": { "type": "string", "minLength": 1, "example": "urn:aaid:aem:e577c7e1-c119-4892-9b97-59a9ab1927f6" }, "in": "path", "name": "experienceId", "required": true, "description": "A GenStudio Experience URN." }, { "schema": { "type": "string", "example": "Bearer eyJhbGciOiJSUz..." }, "in": "header", "name": "authorization", "required": true, "description": "Bearer token from Adobe OAuth Server-to-Server credentials." }, { "schema": { "type": "string", "example": "37e7532f1c5a225acf8d2fad131cde8d" }, "in": "header", "name": "x-api-key", "required": true, "description": "Client ID from the Adobe Developer Console project." }, { "schema": { "type": "string", "example": "36031A56669DEACD0A49402F@AdobeOrg" }, "in": "header", "name": "x-ims-org-id", "required": true, "description": "IMS Organization ID (format: {HEX}@AdobeOrg). Found in Adobe Developer Console (open your project, then Credentials → OAuth Server-to-Server → Credential Details → Organization ID)." }, { "schema": { "type": "string", "example": "550e8400-e29b-41d4-a716-446655440000" }, "in": "header", "name": "x-request-id", "required": false, "description": "Client-generated UUID for request tracing." }, { "schema": { "type": "string", "example": "corr-abc-123" }, "in": "header", "name": "x-correlation-id", "required": false, "description": "Correlation ID to group related requests." }, { "schema": { "type": "string", "enum": ["1"], "example": "1" }, "in": "header", "name": "x-adobe-accept-experimental", "required": true, "description": "Required opt-in header for experimental API endpoints. Must be set to \"1\". Requests without this header will receive a 400 Bad Request response." } ], "responses": { "200": { "description": "The full experience object", "content": { "application/json": { "schema": { "anyOf": [ { "$ref": "#/components/schemas/EmailExperience" }, { "$ref": "#/components/schemas/DisplayExperience" }, { "$ref": "#/components/schemas/GenericExperience" } ], "description": "The full experience object" }, "example": { "experienceId": "urn:aaid:aem:e577c7e1-c119-4892-9b97-59a9ab1927f6", "createdAt": "2026-02-16T16:30:00.000Z", "modifiedAt": "2026-02-16T16:30:00.000Z", "title": "Summer Campaign - LinkedIn", "channel": "linkedin", "keywords": ["image", "text"], "brands": [ { "name": "Acme" } ], "personas": [ { "name": "Active Lifestyle Enthusiast" } ], "products": [ { "name": "Trail Runner Pro" } ], "campaigns": [], "languages": ["en_US"], "templateId": "urn:aaid:aem:0d424024-4110-4dc1-9df1-8ae191272342", "variants": [ { "aspectRatio": "4:5", "isMain": true, "asset": { "assetId": "urn:aaid:aem:e577c7e1-c119-4892-9b97-59a9ab1927f6", "url": "https://genstudio.adobe.io/experiences/urn:aaid:aem:e577c7e1-c119-4892-9b97-59a9ab1927f6/assets/Variant_linkedin_4x5_0.chromeless.gsthumbnail.mp4", "mimeType": "video/mp4" }, "fields": { "headline": { "value": "Bold colors, clean lines — designed for everyday momentum." }, "cta_text": { "value": "Shop Now" } }, "assets": [] }, { "aspectRatio": "1:1", "isMain": false, "fields": { "headline": { "value": "Summer deals — don't miss out" }, "cta_text": { "value": "Learn More" } }, "assets": [] } ] } } } }, "304": { "description": "Not Modified" }, "401": { "description": "Unauthorized. Indicates that the request has not been applied because it lacks valid authentication credentials for the target resource.", "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "Forbidden. Indicates that the server understood the request but refuses to fulfil it.", "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/Forbidden" } } } }, "404": { "description": "Not Found. Indicates that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists.", "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/NotFound" } } } }, "406": { "description": "Not Acceptable. Indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request.", "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/NotAcceptable" } } } }, "429": { "description": "Too Many Requests. Indicates that the user has sent too many requests in a given amount of time (\"rate limiting\").", "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } } } } }, "/experiences": { "get": { "operationId": "listExperiences", "summary": "List Experiences", "description": "Returns a paginated list of Experience summaries filtered by query parameters.\n\nSupports Cursor-based pagination via the `cursor` parameter. Use the `cursor` value from the previous response to retrieve the next page.\n\nSupports conditional requests via the `If-None-Match` header. If the provided ETag matches, returns `304 Not Modified` with no body.\n\n**Filters** (OR semantics within each): `languages`, `channel`, `createdAtFrom`, `createdAtTo`.\n\n**Backward compatibility**: New optional fields may be added to items in the response at any time. Clients must tolerate unknown properties.\n\n**Rate limit**: 20 requests per minute per organization.", "parameters": [ { "schema": { "anyOf": [ { "type": "string", "maxLength": 35, "pattern": "^[a-zA-Z0-9_-]+$" }, { "type": "array", "items": { "type": "string", "maxLength": 35, "pattern": "^[a-zA-Z0-9_-]+$" } } ] }, "in": "query", "name": "languages", "required": false, "description": "BCP 47 language tag to filter by, exact match (case-insensitive)" }, { "schema": { "anyOf": [ { "$ref": "#/components/schemas/ChannelInput" }, { "type": "array", "items": { "$ref": "#/components/schemas/ChannelInput" } } ], "example": "meta" }, "in": "query", "name": "channel", "required": false, "description": "Filter by channel. Accepted values: email, meta, meta_organic, display, ctv, linkedin, linkedin_organic, tiktok, chatgpt, youtube. Unknown values return 400." }, { "schema": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "example": "2026-01-01T00:00:00.000Z" }, "in": "query", "name": "createdAtFrom", "required": false, "description": "Inclusive lower bound (ISO 8601) on createdAt." }, { "schema": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "example": "2026-12-31T23:59:59.000Z" }, "in": "query", "name": "createdAtTo", "required": false, "description": "Exclusive upper bound (ISO 8601) on createdAt. Must be strictly greater than createdAtFrom." }, { "schema": { "default": 25, "type": "integer", "minimum": 1, "maximum": 50, "example": 25 }, "in": "query", "name": "limit", "required": false, "description": "Maximum number of items per page (1–50)." }, { "schema": { "type": "string", "minLength": 1, "example": "eyJsYXN0SWQiOiJ1cm46YWFpZDphZW0ifQ" }, "in": "query", "name": "cursor", "required": false, "description": "Opaque cursor from the previous response's `cursor` field." }, { "schema": { "type": "string", "example": "Bearer eyJhbGciOiJSUz..." }, "in": "header", "name": "authorization", "required": true, "description": "Bearer token from Adobe OAuth Server-to-Server credentials." }, { "schema": { "type": "string", "example": "37e7532f1c5a225acf8d2fad131cde8d" }, "in": "header", "name": "x-api-key", "required": true, "description": "Client ID from the Adobe Developer Console project." }, { "schema": { "type": "string", "example": "36031A56669DEACD0A49402F@AdobeOrg" }, "in": "header", "name": "x-ims-org-id", "required": true, "description": "IMS Organization ID (format: {HEX}@AdobeOrg). Found in Adobe Developer Console (open your project, then Credentials → OAuth Server-to-Server → Credential Details → Organization ID)." }, { "schema": { "type": "string", "example": "550e8400-e29b-41d4-a716-446655440000" }, "in": "header", "name": "x-request-id", "required": false, "description": "Client-generated UUID for request tracing." }, { "schema": { "type": "string", "example": "corr-abc-123" }, "in": "header", "name": "x-correlation-id", "required": false, "description": "Correlation ID to group related requests." }, { "schema": { "type": "string", "enum": ["1"], "example": "1" }, "in": "header", "name": "x-adobe-accept-experimental", "required": true, "description": "Required opt-in header for experimental API endpoints. Must be set to \"1\". Requests without this header will receive a 400 Bad Request response." } ], "responses": { "200": { "description": "Paginated list of Experience summaries", "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "items": { "type": "object", "properties": { "experienceId": { "type": "string", "description": "Unique identifier of the experience" }, "createdAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 timestamp when the experience was created" }, "modifiedAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 timestamp when the experience was last modified" }, "title": { "type": "string", "description": "Title of the experience" }, "channel": { "description": "Primary distribution channel the experience was created for", "allOf": [ { "$ref": "#/components/schemas/Channel" } ] }, "externalTemplateSource": { "description": "Source application name for the external template", "type": "string" }, "externalTemplateId": { "description": "ID of the external template", "type": "string" }, "externalTemplateMetadata": { "description": "Parsed metadata from the external template used to generate this experience", "type": "object", "additionalProperties": {} }, "externalAssetMetadata": { "description": "Parsed metadata from an external asset associated with this experience", "type": "object", "additionalProperties": {} }, "keywords": { "type": "array", "items": { "type": "string" }, "description": "Keywords associated with the experience" }, "brands": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }, "description": "Brands associated with the experience" }, "personas": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }, "description": "Personas associated with the experience" }, "products": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }, "description": "Products associated with the experience" }, "campaigns": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }, "description": "Campaigns associated with the experience" }, "languages": { "type": "array", "items": { "type": "string" }, "description": "BCP 47 language tags for the experience content" } }, "required": [ "experienceId", "createdAt", "modifiedAt", "title", "channel", "keywords", "brands", "personas", "products", "campaigns", "languages" ], "additionalProperties": false } }, "cursor": { "type": "string" } }, "required": ["items"], "additionalProperties": false, "description": "Paginated list of Experience summaries" }, "example": { "items": [ { "experienceId": "urn:aaid:aem:e577c7e1-c119-4892-9b97-59a9ab1927f6", "createdAt": "2026-02-16T16:30:00.000Z", "modifiedAt": "2026-02-16T16:30:00.000Z", "title": "Summer Campaign - LinkedIn", "channel": "linkedin", "keywords": ["image", "text"], "brands": [ { "name": "Acme" } ], "personas": [ { "name": "Active Lifestyle Enthusiast" } ], "products": [ { "name": "Trail Runner Pro" } ], "campaigns": [], "languages": ["en_US"] }, { "experienceId": "urn:aaid:aem:5b40812f-71f7-430e-8e6e-1f33bb63d252", "createdAt": "2026-03-01T09:15:00.000Z", "modifiedAt": "2026-03-01T09:15:00.000Z", "title": "Spring Email Blast", "channel": "email", "keywords": ["promotional", "seasonal"], "brands": [ { "name": "Acme" }, { "name": "Pinnacle" } ], "personas": [ { "name": "Marketer" } ], "products": [ { "name": "Trail Runner Pro" } ], "campaigns": [], "languages": ["en_US"] } ], "cursor": "eyJsYXN0SWQiOiJ1cm46YWFpZDphZW06NWI0MDgxMmYifQ" } } } }, "304": { "description": "Not Modified" }, "400": { "description": "Bad Request. Indicates that the server cannot process the request due to something that is perceived to be a client error (e.g. invalid query parameters or createdAtFrom >= createdAtTo).", "content": { "application/problem+json": { "schema": { "type": "object", "properties": { "type": { "type": "string", "minLength": 1, "description": "A URI reference [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) to a URL, which, when dereferenced, provides human readable documentation for the problem type. The problem type may be equivalent to the `status` or may be a \"sub-type\". This URI is not intended to be parsed by clients; rather it should be treated as an opaque string that uniquely represents the error condition as-is." }, "title": { "type": "string", "minLength": 1, "description": "A short, human-readable summary of the problem type." }, "status": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991, "description": "The HTTP status code ([RFC9110], Section 15) generated by the origin server for this occurrence of the problem." }, "detail": { "type": "string", "minLength": 1, "description": "A human-readable explanation specific to this occurrence of the problem." }, "requestId": { "description": "A unique identifier that is assigned to the request, either by the API caller or by the service itself.", "type": "string", "minLength": 1 } }, "required": ["type", "title", "status", "detail"], "additionalProperties": false, "description": "Bad Request. Indicates that the server cannot or will not process the request due to something that is perceived to be a client error. The Problem Details object will provide more information about the exact cause." } } } }, "401": { "description": "Unauthorized. Indicates that the request has not been applied because it lacks valid authentication credentials for the target resource.", "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "Forbidden. Indicates that the server understood the request but refuses to fulfil it.", "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/Forbidden" } } } }, "406": { "description": "Not Acceptable. Indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request.", "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/NotAcceptable" } } } }, "429": { "description": "Too Many Requests. Indicates that the user has sent too many requests in a given amount of time (\"rate limiting\").", "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } } } } }, "/experiences/{experienceId}/assets/{assetId}": { "get": { "operationId": "getExperienceAsset", "summary": "Get Experience Asset", "description": "Returns a **302 redirect** to a short-lived pre-signed URL for the requested asset. The 302 is the expected success response — there is no 200 body.\n\nThe client's HTTP library follows the redirect automatically. Each call issues a fresh redirect with a new token.\n\n**Prefer the `url` field**: Asset objects in `GET /experiences/:id` responses include a `url` field that already points to this endpoint. In most cases, follow that URL directly rather than constructing this endpoint from the `assetId` field. Use the `assetId` field only as a fallback when `url` is absent.\n\n**Response headers on 302**: `Location` (signed URL, valid up to 60 minutes), `X-Asset-Mime-Type`, `Cache-Control: no-store`.\n\nFor limits and usage notes, see the [Experience API Technical Usage Notes](https://developer.adobe.com/genstudio-api/getting-started/usage-notes/).", "parameters": [ { "schema": { "type": "string", "minLength": 1, "example": "urn:aaid:aem:e577c7e1-c119-4892-9b97-59a9ab1927f6" }, "in": "path", "name": "experienceId", "required": true, "description": "A GenStudio Experience URN." }, { "schema": { "type": "string", "minLength": 1, "example": "urn:aaid:aem:62d4408b-13cb-4d41-8c6f-127fb2cad067" }, "in": "path", "name": "assetId", "required": true, "description": "A GenStudio asset URN." }, { "schema": { "type": "string", "example": "Bearer eyJhbGciOiJSUz..." }, "in": "header", "name": "authorization", "required": true, "description": "Bearer token from Adobe OAuth Server-to-Server credentials." }, { "schema": { "type": "string", "example": "37e7532f1c5a225acf8d2fad131cde8d" }, "in": "header", "name": "x-api-key", "required": true, "description": "Client ID from the Adobe Developer Console project." }, { "schema": { "type": "string", "example": "36031A56669DEACD0A49402F@AdobeOrg" }, "in": "header", "name": "x-ims-org-id", "required": true, "description": "IMS Organization ID (format: {HEX}@AdobeOrg). Found in Adobe Developer Console (open your project, then Credentials → OAuth Server-to-Server → Credential Details → Organization ID)." }, { "schema": { "type": "string", "example": "550e8400-e29b-41d4-a716-446655440000" }, "in": "header", "name": "x-request-id", "required": false, "description": "Client-generated UUID for request tracing." }, { "schema": { "type": "string", "example": "corr-abc-123" }, "in": "header", "name": "x-correlation-id", "required": false, "description": "Correlation ID to group related requests." }, { "schema": { "type": "string", "enum": ["1"], "example": "1" }, "in": "header", "name": "x-adobe-accept-experimental", "required": true, "description": "Required opt-in header for experimental API endpoints. Must be set to \"1\". Requests without this header will receive a 400 Bad Request response." } ], "responses": { "302": { "description": "Redirect to pre-signed asset delivery URL.", "headers": { "Location": { "schema": { "type": "string", "format": "uri" }, "description": "A pre-signed URL for the asset. Valid for up to 60 minutes.", "example": "https://delivery-p106653-e326705.adobeaemcloud.com/adobe/assets/e577c7e1-c119-4892-9b97-59a9ab1927f6/as/variant-4x5.png?token=eyJhbGci...&expiryTime=2026-02-23T11:30:00.000Z" }, "X-Asset-Mime-Type": { "schema": { "type": "string" }, "description": "MIME type of the asset at the redirect destination.", "example": "image/png" }, "Cache-Control": { "schema": { "type": "string", "enum": ["no-store"] }, "description": "Always no-store. This prevents proxy caching so each call issues a fresh signed URL.", "example": "no-store" } } }, "401": { "description": "Unauthorized. Indicates that the request has not been applied because it lacks valid authentication credentials for the target resource.", "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/Unauthorized" } } } }, "403": { "description": "Forbidden. Indicates that the server understood the request but refuses to fulfil it.", "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/Forbidden" } } } }, "404": { "description": "Not Found. Indicates that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists.", "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/NotFound" } } } }, "406": { "description": "Not Acceptable. Indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request.", "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/NotAcceptable" } } } }, "429": { "description": "Too Many Requests. Indicates that the user has sent too many requests in a given amount of time (\"rate limiting\").", "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/TooManyRequests" } } } }, "503": { "description": "Service Unavailable. Indicates that the server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay.", "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/ServiceUnavailable" } } } } } } } }, "servers": [ { "url": "https://genstudio.adobe.io", "description": "Production environment." } ], "security": [ { "OAuth2": [] }, { "ApiKey": [] } ] }