Convert Section Versions API
Convert Experience's Versions provides API to update Versions inside an experience's Section
Convert Experience's Versions provides API to update Versions inside an experience's Section
openapi: 3.1.0
info:
title: Convert Accounts Section Versions API
description: 'Move your app forward with the Convert API. The Convert API allows
you to manage your Convert Experiences projects using code. The REST API is
an interface for managing and extending functionality of Convert. For
example, instead of creating and maintaining projects using the Convert
Experiences web dashboard you can create an experiment programmatically.
Additionally, if you prefer to run custom analysis on experiment results you
can leverage the API to pull data from Convert Experiences into your own
workflow. If you do not have a Convert account already, sign up for a free
developer account at https://www.convert.com/api/.
*[Convert API V1](/doc/v1) is still available and documentation can be found [here](/doc/v1) but using it is highly discouraged
as it will be phased out in the future*
'
version: 2.0.0
servers:
- url: https://api.convert.com/api/v2
description: Live API server
- url: https://apidev.convert.com/api/v2
description: DEV API server
- url: http://apidev.convert.com:5000/api/v2
description: DEV mocked API server
tags:
- name: Section Versions
description: Convert Experience's Versions provides API to update Versions inside an experience's Section
paths:
/accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/sections/{section_id}/versions/add:
post:
operationId: addExperienceSectionVersion
tags:
- Section Versions
summary: Add a new version to an MVT section
description: 'Creates a new version (alternative) within a specific section of a multivariate (MVT) experience.
Requires defining the version name and its associated changes (CSS, JS, etc.).
'
parameters:
- name: account_id
in: path
required: true
description: ID of the account that owns the retrieved/saved data
schema:
type: integer
- name: project_id
description: ID of the project to which save/retrieved data is connected
in: path
required: true
schema:
type: integer
- name: experience_id
description: The ID of the given experience
in: path
required: true
schema:
type: integer
- name: section_id
description: The ID of the section under which to create the version
in: path
required: true
schema:
type: string
- name: include
description: 'Array parameter that would mention extra fields to be included into the response; otherwise those fields would be excluded by default
Read more in the section related to [Optional Fields](#tag/Optional-Fields)
'
in: query
required: false
schema:
type: array
items:
$ref: '#/components/schemas/ExperienceSectionVersionIncludeFields'
- name: expand
description: 'Specifies the list of objects which would be expanded in the response. Otherwise, only their id would be returned.
Read more in the section related to [Expanding Fields](#tag/Expandable-Fields)
'
in: query
required: false
schema:
type: array
items:
$ref: '#/components/schemas/ExperienceSectionVersionExpandFields'
requestBody:
$ref: '#/components/requestBodies/CreateSectionVersionRequest'
responses:
'201':
$ref: '#/components/responses/ExperienceSectionVersionResponse'
default:
$ref: '#/components/responses/ErrorResponse'
? /accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/sections/{section_id}/versions/{version_id}/update
: post:
operationId: updateExperienceSectionVersion
tags:
- Section Versions
summary: Update a version within an MVT section
description: 'Modifies an existing version within a specific section of a multivariate (MVT) experience.
This can include changing the version''s name or updating its associated changes.
'
parameters:
- name: account_id
in: path
required: true
description: ID of the account that owns the retrieved/saved data
schema:
type: integer
- name: project_id
description: ID of the project to which save/retrieved data is connected
in: path
required: true
schema:
type: integer
- name: experience_id
description: The ID of the given experience
in: path
required: true
schema:
type: integer
- name: section_id
description: The ID of the section under which the updated version exists
in: path
required: true
schema:
type: string
- name: version_id
description: The ID of the updated version
in: path
required: true
schema:
type: string
- name: include
description: 'Array parameter that would mention extra fields to be included into the response; otherwise those fields would be excluded by default
Read more in the section related to [Optional Fields](#tag/Optional-Fields)
'
in: query
required: false
schema:
type: array
items:
$ref: '#/components/schemas/ExperienceSectionVersionIncludeFields'
- name: expand
description: 'Specifies the list of objects which would be expanded in the response. Otherwise, only their id would be returned.
Read more in the section related to [Expanding Fields](#tag/Expandable-Fields)
'
in: query
required: false
schema:
type: array
items:
$ref: '#/components/schemas/ExperienceSectionVersionExpandFields'
requestBody:
$ref: '#/components/requestBodies/UpdateSectionVersionRequest'
responses:
'200':
$ref: '#/components/responses/ExperienceSectionVersionResponse'
default:
$ref: '#/components/responses/ErrorResponse'
? /accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/sections/{section_id}/versions/{version_id}/delete
: delete:
operationId: deleteExperienceSectionVersion
tags:
- Section Versions
summary: Delete a version from an MVT section
description: 'Permanently removes a version from a specific section of a multivariate (MVT) experience.
Deleting versions can affect the combinations tested and the statistical validity of an active MVT.
'
parameters:
- name: account_id
in: path
required: true
description: ID of the account that owns the retrieved/saved data
schema:
type: integer
- name: project_id
description: ID of the project to which save/retrieved data is connected
in: path
required: true
schema:
type: integer
- name: experience_id
description: The ID of the given experience
in: path
required: true
schema:
type: integer
- name: section_id
description: The ID of the section under which the updated version exists
in: path
required: true
schema:
type: string
- name: version_id
description: The ID of the updated version
in: path
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/SuccessResponse'
default:
$ref: '#/components/responses/ErrorResponse'
components:
requestBodies:
CreateSectionVersionRequest:
description: 'Adds a new version (alternative) to an existing section within an MVT experience. Requires:
- `id`: A unique 1-2 character ID for this version within its section.
- `name`: A descriptive name for the version (e.g., "Red Button", "Short Headline").
- `changes`: An array defining the modifications (JS, CSS) for this specific version.
**IMPORTANT:** Adding versions changes the MVT combinations.
'
content:
application/json:
schema:
$ref: '#/components/schemas/CreateSectionVersionRequestData'
required: true
UpdateSectionVersionRequest:
description: 'Updates an existing version within an MVT section. Allows changing the `name` or the `changes` (JS, CSS modifications) associated with this version.
The `id` of the version must be provided.
'
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateSectionVersionRequestData'
required: true
schemas:
ExperienceSectionVersionExpandFields:
type: string
enum:
- changes
ExperienceChangeDefaultRedirectDataAdd:
type: object
description: Data for creating a new 'defaultRedirect' type change.
allOf:
- $ref: '#/components/schemas/ExperienceChangeIdReadOnly'
- $ref: '#/components/schemas/ExperienceChangeDefaultRedirectDataBase'
- properties:
data:
required:
- original_pattern
- variation_pattern
required:
- type
- data
ExperienceChangeDefaultCodeDataAdd:
type: object
description: Data for creating a new 'defaultCode' type change.
allOf:
- $ref: '#/components/schemas/ExperienceChangeIdReadOnly'
- $ref: '#/components/schemas/ExperienceChangeDefaultCodeDataBase'
- properties:
data:
required:
- js
- css
- custom_js
required:
- type
- data
ExperienceSectionVersionIncludeFields:
type: string
enum:
- changes
ExperienceChangeDefaultCodeMultipageDataAdd:
type: object
description: Data for creating a new 'defaultCodeMultipage' type change.
allOf:
- $ref: '#/components/schemas/ExperienceChangeIdReadOnly'
- $ref: '#/components/schemas/ExperienceChangeDefaultCodeMultipageDataBase'
- properties:
data:
required:
- page_id
required:
- type
- data
ExperienceChangeCustomCodeData:
type: object
description: Represents a 'customCode' type change, including its system-assigned ID.
allOf:
- $ref: '#/components/schemas/ExperienceChangeIdReadOnly'
- $ref: '#/components/schemas/ExperienceChangeCustomCodeDataBase'
- type: object
properties:
concurrency_key:
$ref: '#/components/schemas/ConcurrencyKey'
UpdateSectionVersionRequestData:
allOf:
- $ref: '#/components/schemas/SectionVersionUpdate'
ExperienceChangeDefaultRedirectData:
type: object
description: Represents a 'defaultRedirect' type change, including its system-assigned ID.
allOf:
- $ref: '#/components/schemas/ExperienceChangeIdReadOnly'
- $ref: '#/components/schemas/ExperienceChangeDefaultRedirectDataBase'
- type: object
properties:
concurrency_key:
$ref: '#/components/schemas/ConcurrencyKey'
ExperienceChangeDefaultCodeMultipageDataBase:
type: object
description: Defines a standard code-based change that applies to a specific page within a Multi-page Funnel experiment. This allows different code (CSS, JS) to be applied to different steps of the funnel for the same variation.
allOf:
- $ref: '#/components/schemas/ExperienceChangeBase'
- type: object
properties:
type:
enum:
- defaultCodeMultipage
data:
type: object
description: Describes structure for "defaultCodeMultipage" type of experience change
additionalProperties: false
properties:
css:
type: string
nullable: true
description: CSS code to be applied by this change
js:
type: string
nullable: true
description: Javascript code generated by the visual editor or written in the same structure, to be applied by this experience change
custom_js:
type: string
description: Custom javascript code to be applied by this change
nullable: true
page_id:
description: The **id** of the page connected to this change.
type: string
CreateSectionVersionRequestData:
allOf:
- $ref: '#/components/schemas/SectionVersionCreate'
ExperienceChangeUpdate:
description: Data structure for updating an existing change within an experience variation. Requires the `id` of the change to be modified.
oneOf:
- $ref: '#/components/schemas/ExperienceChangeDefaultCodeDataUpdate'
- $ref: '#/components/schemas/ExperienceChangeDefaultCodeMultipageDataUpdate'
- $ref: '#/components/schemas/ExperienceChangeDefaultRedirectDataUpdate'
- $ref: '#/components/schemas/ExperienceChangeRichStructureDataUpdate'
- $ref: '#/components/schemas/ExperienceChangeCustomCodeDataUpdate'
- $ref: '#/components/schemas/ExperienceChangeFullStackFeatureUpdate'
discriminator:
propertyName: type
mapping:
richStructure: '#/components/schemas/ExperienceChangeRichStructureDataUpdate'
customCode: '#/components/schemas/ExperienceChangeCustomCodeDataUpdate'
defaultCode: '#/components/schemas/ExperienceChangeDefaultCodeDataUpdate'
defaultCodeMultipage: '#/components/schemas/ExperienceChangeDefaultCodeMultipageDataUpdate'
defaultRedirect: '#/components/schemas/ExperienceChangeDefaultRedirectDataUpdate'
fullStackFeature: '#/components/schemas/ExperienceChangeFullStackFeatureUpdate'
SectionVersion:
allOf:
- $ref: '#/components/schemas/BaseSectionVersion'
- type: object
properties:
changes:
type: array
items:
oneOf:
- type: integer
description: Change ID
- $ref: '#/components/schemas/ExperienceChange'
variations:
type: array
items:
oneOf:
- type: integer
description: Variation ID
ExperienceChangeRichStructureData:
type: object
description: Represents a 'richStructure' type change, including its system-assigned ID.
allOf:
- $ref: '#/components/schemas/ExperienceChangeIdReadOnly'
- $ref: '#/components/schemas/ExperienceChangeRichStructureDataBase'
- type: object
properties:
concurrency_key:
$ref: '#/components/schemas/ConcurrencyKey'
ExperienceChangeFullStackFeatureBase:
type: object
description: Defines a change for a Full Stack experiment that involves enabling or configuring a specific 'Feature' and its variables for this variation.
allOf:
- $ref: '#/components/schemas/ExperienceChangeBase'
- type: object
properties:
type:
enum:
- fullStackFeature
data:
type: object
description: Describes structure for "fullStackFeature" type of experience change
properties:
feature_id:
description: The **id** of the feature connected to this change
type: integer
variables_data:
type: object
description: A key-value object defined by user which describes the variables values. Where the key is variable name defined in connected feature and value is a variable's value with corresponding type
SectionVersionCreate:
allOf:
- $ref: '#/components/schemas/BaseSectionVersion'
- type: object
properties:
changes:
type: array
description: List of changes to apply. If ID of a change is not provided, the change is gonna be created. Otherwise the change would be updated
items:
oneOf:
- $ref: '#/components/schemas/ExperienceChangeAdd'
ExperienceChangeFullStackFeature:
type: object
description: Represents a 'fullStackFeature' type change, including its system-assigned ID.
allOf:
- $ref: '#/components/schemas/ExperienceChangeIdReadOnly'
- $ref: '#/components/schemas/ExperienceChangeFullStackFeatureBase'
- type: object
properties:
concurrency_key:
$ref: '#/components/schemas/ConcurrencyKey'
ExperienceChangeDefaultCodeDataUpdate:
type: object
description: Data for updating an existing 'defaultCode' type change, identified by its `id`.
allOf:
- $ref: '#/components/schemas/ExperienceChangeId'
- $ref: '#/components/schemas/ExperienceChangeDefaultCodeDataBase'
- type: object
properties:
concurrency_key:
$ref: '#/components/schemas/ConcurrencyKey'
- required:
- type
- data
ExperienceChangeDefaultCodeDataBase:
type: object
description: Defines a standard code-based change, typically generated by the Visual Editor for modifications like text replacement, style changes, or element removal. It can include CSS, Convert's internal JS representation, and custom JS.
allOf:
- $ref: '#/components/schemas/ExperienceChangeBase'
- type: object
properties:
type:
enum:
- defaultCode
data:
type: object
description: Describes structure for "defaultCode" type of experience change
additionalProperties: false
properties:
css:
type: string
nullable: true
description: CSS code to be applied by this change
js:
type: string
nullable: true
description: Javascript code generated by the visual editor or written in the same structure, to be applied by this experience change
custom_js:
type: string
description: Custom javascript code to be applied by this change
nullable: true
ExperienceChangeCustomCodeDataBase:
type: object
description: Defines a change applied purely through custom-written CSS and/or JavaScript code, bypassing the Visual Editor's generated code. This offers maximum flexibility for developers.
allOf:
- $ref: '#/components/schemas/ExperienceChangeBase'
- type: object
properties:
type:
enum:
- customCode
data:
type: object
description: Describes structure for "defaultCode" type of experience change
additionalProperties: false
properties:
css:
type: string
nullable: true
description: CSS code to be applied by this change
js:
type: string
description: Custom javascript code to be applied by this change
nullable: true
page_id:
description: The **id** of the page connected to this change, in case this is a **multi-page** experiment
type: string
ExperienceChangeId:
description: Represents the unique identifier of an existing change within an experience variation. Used when updating or referencing a specific change.
type: object
additionalProperties: false
properties:
id:
description: The unique numerical identifier for this specific change.
type: integer
required:
- id
ExperienceChange:
description: Represents a single, specific modification applied as part of an experience's variation. The exact structure and content depend on the `type` of change.
oneOf:
- $ref: '#/components/schemas/ExperienceChangeDefaultCodeData'
- $ref: '#/components/schemas/ExperienceChangeDefaultCodeMultipageData'
- $ref: '#/components/schemas/ExperienceChangeDefaultRedirectData'
- $ref: '#/components/schemas/ExperienceChangeCustomCodeData'
- $ref: '#/components/schemas/ExperienceChangeRichStructureData'
- $ref: '#/components/schemas/ExperienceChangeFullStackFeature'
discriminator:
propertyName: type
mapping:
richStructure: '#/components/schemas/ExperienceChangeRichStructureData'
customCode: '#/components/schemas/ExperienceChangeCustomCodeData'
defaultCode: '#/components/schemas/ExperienceChangeDefaultCodeData'
defaultCodeMultipage: '#/components/schemas/ExperienceChangeDefaultCodeMultipageData'
defaultRedirect: '#/components/schemas/ExperienceChangeDefaultRedirectData'
fullStackFeature: '#/components/schemas/ExperienceChangeFullStackFeature'
ExperienceChangeCustomCodeDataAdd:
type: object
description: Data for creating a new 'customCode' type change.
allOf:
- $ref: '#/components/schemas/ExperienceChangeIdReadOnly'
- $ref: '#/components/schemas/ExperienceChangeCustomCodeDataBase'
- properties:
data:
required:
- css
- js
required:
- type
- data
ExperienceChangeDefaultCodeData:
type: object
description: Represents a 'defaultCode' type change, including its system-assigned ID.
allOf:
- $ref: '#/components/schemas/ExperienceChangeIdReadOnly'
- $ref: '#/components/schemas/ExperienceChangeDefaultCodeDataBase'
- type: object
properties:
concurrency_key:
$ref: '#/components/schemas/ConcurrencyKey'
ExperienceSectionVersionResponseData:
description: Response containing the details of a single MVT section version.
type: object
properties:
data:
$ref: '#/components/schemas/SectionVersion'
ExperienceChangeRichStructureDataBase:
type: object
description: Defines a complex change, often involving multiple DOM manipulations or structured data, typically generated by advanced Visual Editor interactions or specific integrations. (Primarily for internal or advanced programmatic use).
allOf:
- $ref: '#/components/schemas/ExperienceChangeBase'
- type: object
properties:
type:
enum:
- richStructure
data:
type: object
description: Describes structure for "defaultCode" type of experience change
additionalProperties:
type: string
description: Various key - value data
properties:
js:
type: string
nullable: true
description: Javascript code generated by the visual editor or written in the same structure, to be applied by this experience change
selector:
type: string
description: CSS selector of the element to which the change refers to, if this is a change concerning one DOM element
page_id:
description: The **id** of the page connected to this change, in case this is a **multi-page** experiment
type: string
ExperienceChangeFullStackFeatureUpdate:
type: object
description: Data for updating an existing 'fullStackFeature' type change, identified by its `id`.
allOf:
- $ref: '#/components/schemas/ExperienceChangeId'
- $ref: '#/components/schemas/ExperienceChangeFullStackFeatureBase'
- type: object
properties:
concurrency_key:
$ref: '#/components/schemas/ConcurrencyKey'
- required:
- type
- data
BaseSectionVersion:
type: object
properties:
id:
description: 'A unique identifier for this version within its parent section (e.g., "v1", "02", "ab").
Typically a short string (1-2 characters). This ID is used to construct the overall MVT variation combinations.
'
type: string
minLength: 1
maxLength: 2
pattern: ^[0-9a-z]{1,2}$
name:
description: A user-defined, friendly name for this version (e.g., "Red Button", "Headline Option A", "Original Image"). This name appears in MVT setup and reports.
type: string
maxLength: 200
concurrency_key:
$ref: '#/components/schemas/ConcurrencyKey'
ErrorData:
type: object
properties:
code:
type: integer
format: int32
message:
oneOf:
- type: string
- type: array
items:
type: string
fields:
oneOf:
- type: string
- type: array
items:
type: string
ExperienceChangeRichStructureDataAdd:
type: object
description: Data for creating a new 'richStructure' type change.
allOf:
- $ref: '#/components/schemas/ExperienceChangeIdReadOnly'
- $ref: '#/components/schemas/ExperienceChangeRichStructureDataBase'
- properties:
data:
required:
- js
required:
- type
- data
ExperienceChangeDefaultCodeMultipageData:
type: object
description: Represents a 'defaultCodeMultipage' type change, including its system-assigned ID.
allOf:
- $ref: '#/components/schemas/ExperienceChangeIdReadOnly'
- $ref: '#/components/schemas/ExperienceChangeDefaultCodeMultipageDataBase'
- type: object
properties:
concurrency_key:
$ref: '#/components/schemas/ConcurrencyKey'
ExperienceChangeFullStackFeatureAdd:
type: object
description: Data for creating a new 'fullStackFeature' type change.
allOf:
- $ref: '#/components/schemas/ExperienceChangeIdReadOnly'
- $ref: '#/components/schemas/ExperienceChangeFullStackFeatureBase'
- properties:
data:
required:
- feature_id
- variables_data
required:
- type
- data
ExperienceChangeDefaultRedirectDataBase:
type: object
description: Defines a URL redirect, typically used in Split URL experiments. It specifies how to match an original URL and construct the URL for the variation page.
allOf:
- $ref: '#/components/schemas/ExperienceChangeBase'
- type: object
properties:
type:
enum:
- defaultRedirect
data:
type: object
description: Describes structure for "defaultRedirect" type of experience change
additionalProperties: false
properties:
case_sensitive:
type: boolean
description: Defines whether the URL matching is case sensitive or not
original_pattern:
type: string
description: Pattern for matching the Original URL in order to construct the redirect URL
variation_pattern:
type: string
description: String used to construct the variation redirect URL. This string can contain matches from original_url or it can be a standard URL
ExperienceChangeCustomCodeDataUpdate:
type: object
description: Data for updating an existing 'customCode' type change, identified by its `id`.
allOf:
- $ref: '#/components/schemas/ExperienceChangeId'
- $ref: '#/components/schemas/ExperienceChangeCustomCodeDataBase'
- type: object
properties:
concurrency_key:
$ref: '#/components/schemas/ConcurrencyKey'
- required:
- type
- data
SectionVersionUpdate:
allOf:
- $ref: '#/components/schemas/BaseSectionVersion'
- type: object
properties:
concurrency_key:
$ref: '#/components/schemas/ConcurrencyKey'
changes:
type: array
description: List of changes to apply. If ID of a change is not provided, the change is gonna be created. Empty array will remove changes. Otherwise the change would be updated
items:
anyOf:
- $ref: '#/components/schemas/ExperienceChangeId'
- $ref: '#/components/schemas/ExperienceChangeUpdate'
- $ref: '#/components/schemas/ExperienceChangeAdd'
SuccessData:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
ExperienceChangeDefaultCodeMultipageDataUpdate:
type: object
description: Data for updating an existing 'defaultCodeMultipage' type change, identified by its `id`.
allOf:
- $ref: '#/components/schemas/ExperienceChangeId'
- $ref: '#/components/schemas/ExperienceChangeDefaultCodeMultipageDataBase'
- type: object
properties:
concurrency_key:
$ref: '#/components/schemas/ConcurrencyKey'
- required:
- type
- data
ExperienceChangeRichStructureDataUpdate:
type: object
description: Data for updating an existing 'richStructure' type change, identified by its `id`.
allOf:
- $ref: '#/components/schemas/ExperienceChangeId'
- $ref: '#/components/schemas/ExperienceChangeRichStructureDataBase'
- type: object
properties:
concurrency_key:
$ref: '#/components/schemas/ConcurrencyKey'
- required:
- type
- data
ConcurrencyKey:
type: string
nullable: true
description: A server-generated hash that represents the object's state at the time of retrieval. When included in an update request, the operation will only succeed if the object hasn't been modified since this key was obtained. If another update has occurred in the meantime, the request will fail with a conflict error, requiring you to fetch the latest version and retry your update with the new concurrency_key. This implements optimistic concurrency control to prevent lost updates in concurrent scenarios.
ExperienceChangeIdReadOnly:
description: Represents the unique identifier of a change, typically when returned by the API after creation or in a list.
type: object
properties:
id:
description: The unique numerical identifier for this specific change.
type: integer
readOnly: true
ExperienceChangeBase:
description: The fundamental structure representing a single modification applied within an experience's variation. The specific content and behavior of the change are determined by its `type` and detailed in the `data` object.
type: object
properties:
type:
type: string
enum:
- richStructure
- customCode
- defaultCode
- defaultCodeMultipage
- defaultRedirect
- fullStackFeature
data:
description: 'A flexible object containing the specific details and content for this change, structured according to the change `type`.
For example, for `customCode`, it would contain `js` and `css` strings. For `defaultRedirect`, it would contain `original_pattern` and `variation_pattern`.
This field is included by default when fetching a single `ExperienceChange` but might be omitted in list views unless specified in an `include` parameter.
'
type: object
ExperienceChangeAdd:
description: Data structure for adding a new change to an experience variation. The `id` field is omitted as it will be assigned upon creation.
oneOf:
- $ref: '#/components/schemas/ExperienceChangeDefaultCodeDataAdd'
- $ref: '#/components/schemas/ExperienceChangeDefaultCodeMultipageDataAdd'
- $ref: '#/components/schemas/ExperienceChangeDefaultRedirectDataAdd'
- $ref: '#/components/schemas/ExperienceChangeCustomCodeDataAdd'
- $ref: '#/components/schemas/ExperienceChangeRichStructureDataAdd'
- $ref: '#/components/schemas/ExperienceChangeFullStackFeatureAdd'
discriminator:
propertyName: type
mapping:
richStructure: '#/components/schemas/ExperienceChangeRichStructureDataAdd'
# --- truncated at 32 KB (35 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/convert/refs/heads/main/openapi/convert-section-versions-api-openapi.yml